@microtronics/studio-cli 1.3.0-alpha.0 → 1.3.0-alpha.1

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.
package/out/api.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var rl=Object.create;var Lt=Object.defineProperty;var tl=Object.getOwnPropertyDescriptor;var nl=Object.getOwnPropertyNames;var sl=Object.getPrototypeOf,il=Object.prototype.hasOwnProperty;var Ba=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),al=(x,A)=>{for(var e in A)Lt(x,e,{get:A[e],enumerable:!0})},Ca=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of nl(A))!il.call(x,t)&&t!==e&&Lt(x,t,{get:()=>A[t],enumerable:!(r=tl(A,t))||r.enumerable});return x};var W0=(x,A,e)=>(e=x!=null?rl(sl(x)):{},Ca(A||!x||!x.__esModule?Lt(e,"default",{value:x,enumerable:!0}):e,x)),ol=x=>Ca(Lt({},"__esModule",{value:!0}),x);var go=Ba((Pp,ho)=>{"use strict";var Xc=Object.create,ct=Object.defineProperty,Yc=Object.getOwnPropertyDescriptor,Do=Object.getOwnPropertyNames,Qc=Object.getPrototypeOf,Zc=Object.prototype.hasOwnProperty,xE=(x,A,e)=>A in x?ct(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,po=(x,A)=>function(){return A||(0,x[Do(x)[0]])((A={exports:{}}).exports,A),A.exports},AE=(x,A)=>{for(var e in A)ct(x,e,{get:A[e],enumerable:!0})},bo=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Do(A))!Zc.call(x,t)&&t!==e&&ct(x,t,{get:()=>A[t],enumerable:!(r=Yc(A,t))||r.enumerable});return x},mo=(x,A,e)=>(e=x!=null?Xc(Qc(x)):{},bo(A||!x||!x.__esModule?ct(e,"default",{value:x,enumerable:!0}):e,x)),eE=x=>bo(ct({},"__esModule",{value:!0}),x),px=(x,A,e)=>xE(x,typeof A!="symbol"?A+"":A,e),rE=po({"wasm/bin/pawncc.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,f=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",m=(i,v)=>{throw v};typeof __filename<"u"?r=__filename:f&&(r=self.location.href);var _="",h,S;if(E){var P=require("fs");_=__dirname+"/",S=i=>{i=k(i)?new URL(i):i;var v=P.readFileSync(i);return v},h=async(i,v=!0)=>{i=k(i)?new URL(i):i;var B=P.readFileSync(i,v?void 0:"utf8");return B},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(i,v)=>{throw process.exitCode=i,v}}else if(F||f){try{_=new URL(".",r).href}catch{}f&&(S=i=>{var v=new XMLHttpRequest;return v.open("GET",i,!1),v.responseType="arraybuffer",v.send(null),new Uint8Array(v.response)}),h=async i=>{if(k(i))return new Promise((B,p)=>{var j=new XMLHttpRequest;j.open("GET",i,!0),j.responseType="arraybuffer",j.onload=()=>{if(j.status==200||j.status==0&&j.response){B(j.response);return}p(j.status)},j.onerror=p,j.send(null)});var v=await fetch(i,{credentials:"same-origin"});if(v.ok)return v.arrayBuffer();throw new Error(v.status+" : "+v.url)}}var N=console.log.bind(console),R=console.error.bind(console),O,n0=!1,L,k=i=>i.startsWith("file://");class I{}class X extends I{}function W(i){for(var v=0,B=i.length,p=new Uint8Array(B),j;v<B;++v)j=i.charCodeAt(v),p[v]=~j>>8&j;return p}var H,J,a0=!1,t0=!1;function x0(){var i=M0.buffer;Fx=new Int8Array(i),J0=new Int16Array(i),eA=new Uint8Array(i),Rr=new Uint16Array(i),O0=new Int32Array(i),l0=new Uint32Array(i),Ir=new Float32Array(i),Lr=new Float64Array(i),K0=new BigInt64Array(i),Or=new BigUint64Array(i)}function o0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)tr(n.preRun.shift());_A(zx)}function G(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),ex.init(),Me.__wasm_call_ctors(),o.ignorePermissions=!1}function i0(){}function f0(){y(),o.quit(),ex.shutdown(),t0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)rr(n.postRun.shift());_A(wA)}function C0(i){n.onAbort?.(i),i=`Aborted(${i})`,R(i),n0=!0,i+=". Build with -sASSERTIONS for more info.";var v=new WebAssembly.RuntimeError(i);throw J?.(v),v}var _0;function N0(){return W(`\0asm\0\0\0\x897\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\`\0\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F~~~\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`~\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\`\x7F~\0\`\x7F|\`\x7F~~\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F~\x7F\x7F\x7F~\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\`~\x7F\x7F\0\`\x7F\x7F~\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\x7F\x7F\x7F\`\x7F\x7F\x7F|\x7F\`\x7F\x7F|\x7F\`\x7F\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F~\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F~\`\x7F~\x7F\x7F\x7F\x7F\x7F\` \x7F~\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~~\x7F~\`\x7F~~\0\`~\x7F\0\`\x7F~\x7F\`\x7F||\`||\`|\x7F\`\x7F~~~\0\`|\x7F|\`~\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\`~~|\xD0env\binvoke_v\0env
1
+ "use strict";var tf=Object.create;var Rt=Object.defineProperty;var nf=Object.getOwnPropertyDescriptor;var sf=Object.getOwnPropertyNames;var af=Object.getPrototypeOf,of=Object.prototype.hasOwnProperty;var ua=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),Ff=(x,A)=>{for(var e in A)Rt(x,e,{get:A[e],enumerable:!0})},Da=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of sf(A))!of.call(x,t)&&t!==e&&Rt(x,t,{get:()=>A[t],enumerable:!(r=nf(A,t))||r.enumerable});return x};var W0=(x,A,e)=>(e=x!=null?tf(af(x)):{},Da(A||!x||!x.__esModule?Rt(e,"default",{value:x,enumerable:!0}):e,x)),vf=x=>Da(Rt({},"__esModule",{value:!0}),x);var ko=ua((qp,yo)=>{"use strict";var Yc=Object.create,Et=Object.defineProperty,Qc=Object.getOwnPropertyDescriptor,bo=Object.getOwnPropertyNames,Zc=Object.getPrototypeOf,xE=Object.prototype.hasOwnProperty,AE=(x,A,e)=>A in x?Et(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,mo=(x,A)=>function(){return A||(0,x[bo(x)[0]])((A={exports:{}}).exports,A),A.exports},eE=(x,A)=>{for(var e in A)Et(x,e,{get:A[e],enumerable:!0})},jo=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of bo(A))!xE.call(x,t)&&t!==e&&Et(x,t,{get:()=>A[t],enumerable:!(r=Qc(A,t))||r.enumerable});return x},ho=(x,A,e)=>(e=x!=null?Yc(Zc(x)):{},jo(A||!x||!x.__esModule?Et(e,"default",{value:x,enumerable:!0}):e,x)),rE=x=>jo(Et({},"__esModule",{value:!0}),x),px=(x,A,e)=>AE(x,typeof A!="symbol"?A+"":A,e),tE=mo({"wasm/bin/pawncc.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",m=(i,l)=>{throw l};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var _="",h,S;if(E){var P=require("fs");_=__dirname+"/",S=i=>{i=k(i)?new URL(i):i;var l=P.readFileSync(i);return l},h=async(i,l=!0)=>{i=k(i)?new URL(i):i;var B=P.readFileSync(i,l?void 0:"utf8");return B},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(i,l)=>{throw process.exitCode=i,l}}else if(F||v){try{_=new URL(".",r).href}catch{}v&&(S=i=>{var l=new XMLHttpRequest;return l.open("GET",i,!1),l.responseType="arraybuffer",l.send(null),new Uint8Array(l.response)}),h=async i=>{if(k(i))return new Promise((B,p)=>{var j=new XMLHttpRequest;j.open("GET",i,!0),j.responseType="arraybuffer",j.onload=()=>{if(j.status==200||j.status==0&&j.response){B(j.response);return}p(j.status)},j.onerror=p,j.send(null)});var l=await fetch(i,{credentials:"same-origin"});if(l.ok)return l.arrayBuffer();throw new Error(l.status+" : "+l.url)}}var N=console.log.bind(console),R=console.error.bind(console),U,t0=!1,M,k=i=>i.startsWith("file://");class L{}class W extends L{}function Q(i){for(var l=0,B=i.length,p=new Uint8Array(B),j;l<B;++l)j=i.charCodeAt(l),p[l]=~j>>8&j;return p}var H,J,a0=!1,n0=!1;function Z(){var i=I0.buffer;Fx=new Int8Array(i),J0=new Int16Array(i),rA=new Uint8Array(i),Rr=new Uint16Array(i),O0=new Int32Array(i),f0=new Uint32Array(i),Mr=new Float32Array(i),Lr=new Float64Array(i),K0=new BigInt64Array(i),Or=new BigUint64Array(i)}function o0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)nr(n.preRun.shift());wA(Wx)}function O(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),ex.init(),Me.__wasm_call_ctors(),o.ignorePermissions=!1}function i0(){}function l0(){y(),o.quit(),ex.shutdown(),n0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)tr(n.postRun.shift());wA(SA)}function C0(i){n.onAbort?.(i),i=`Aborted(${i})`,R(i),t0=!0,i+=". Build with -sASSERTIONS for more info.";var l=new WebAssembly.RuntimeError(i);throw J?.(l),l}var _0;function $0(){return Q(`\0asm\0\0\0\x897\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\`\0\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F~~~\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`~\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\`\x7F~\0\`\x7F|\`\x7F~~\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F~\x7F\x7F\x7F~\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\`~\x7F\x7F\0\`\x7F\x7F~\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\x7F\x7F\x7F\`\x7F\x7F\x7F|\x7F\`\x7F\x7F|\x7F\`\x7F\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F~\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F~\`\x7F~\x7F\x7F\x7F\x7F\x7F\` \x7F~\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~~\x7F~\`\x7F~~\0\`~\x7F\0\`\x7F~\x7F\`\x7F||\`||\`|\x7F\`\x7F~~~\0\`|\x7F|\`~\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\`~~|\xD0env\binvoke_v\0env
2
2
  invoke_vii\0\x07env invoke_ii\0env
3
3
  invoke_iii\0env\binvoke_i\0\0env\vinvoke_iiii\0\benv\r__assert_fail\0 env\finvoke_viiii\0env\finvoke_iiiii\0\renv\rinvoke_viiiii\0env\finvoke_iijii\0env invoke_vi\0env\vinvoke_viii\0 env\vinvoke_iiid\0 env\rinvoke_iiiiii\0env__syscall_faccessat\0\benv__syscall_openat\0\benv__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0\bwasi_snapshot_preview1\x07fd_read\0\bwasi_snapshot_preview1\bfd_close\0\0env__syscall_getcwd\0wasi_snapshot_preview1\x07fd_seek\0env__syscall_unlinkat\0env__syscall_rmdir\0\0env__syscall_renameat\0\bwasi_snapshot_preview1clock_time_get\0env__syscall_readlinkat\0\benvemscripten_resize_heap\0\0env_emscripten_throw_longjmp\0\xAA\xA8\x07!
4
4
 
@@ -1158,8 +1158,8 @@ S\0\0\xCD\0\0Q\0\0\xCD*\0\0\x97*\0\0>S\0\0A!\0\0\f\0\0\x90\0\0\xC6\0\0l\0\
1158
1158
  \0\0\xC0\v\0\0\xC0\f\0\0\xC0\r\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\x1B\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\0\xB3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\x07\0\0\xC3\b\0\0\xC3 \0\0\xC3
1159
1159
  \0\0\xC3\v\0\0\xC3\f\0\0\xC3\r\0\0\xD3\0\0\xC3\0\0\xC3\0\0\f\xBB\0\f\xC3\0\f\xC3\0\f\xC3\0\f\xDB\0A\xC0\xF9\v\xE1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0D\0\0\xFAC\0\0 D\0\0\0D\0\0\xFDC\0\0\xF6C\0\0\xEEC\0\0\xEFC\0\0D\0\0\xEBC\0\0\xE8C\0\0z\0\0\x87Y\0\0\xF3C\0\0\fD\0\0\xF7C\0\0\xF0C\0\0D\0\0\xBCC\0\0\xBDC\0\0MO\0\0\xFDN\0\0\xBCN\0\0\xBDN\0\0,D\0\0\xE3\0\0h&\0\0d-\0\0)\0\0\xA2,\0\0d\0\01\0\0>!\0\0G-\0\0_\0\0y\0\0K0\0\0\v!\0\0*\0\0\x84,\0\0\x81\0\0+\0\02\0\0g!\0\0\xF7)\0\0; \0\0-\0\0\xF01\0\0&\0\0\xAD(\0\0\xF1)\0\0\x97.\0\0\xE2\0\0\xB9-\0\0F-\0\0*\0\0
1160
1160
  *\0\0\xDC\0\x004\0\0\xE7.\0\0*\0\x006*\0\0.*\0\0\x9D/\0\0\xB3-\0\0\x8A3\0\0\x87/\0\0'*\0\x009)\0\0!D\0\0\0O\0\0!D\0\0\xB63\0\0\xC63\0\0\x983\0\0\xA53\0\0\xD73\0\0\xAD3\0\0\xAD3\0\0\0\0\0\0/\0A\xA0\xFE\vy\0\0\0\\\\\0\0\xF4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\xA0\x97\0\0\xA0\x9C\0\0\0\0\0\0\0\0\0 \x9C\0\0 \x9D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xA0\x9D\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\xA4\xFF\v\x9F\0A\xBC\xFF\v\v\x9D\0\0\0\x9C\0\0\0("\0A\xD4\xFF\v\0A\xE4\xFF\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA8\x80\v \x98\xBF\0\0\0\0\0\0\0A\xBC\x80\v\xA0\0A\xD4\x80\v\x9D\0\0\0\xA1\0\0\x008"\0\0\0A\xEC\x80\v\0A\xFC\x80\v\xFF\xFF\xFF\xFF
1161
- \0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function ix(i){return i}async function Kx(i){return i}async function yA(i,v){try{var B=await Kx(i),p=await WebAssembly.instantiate(B,v);return p}catch(j){R(`failed to asynchronously prepare wasm: ${j}`),C0(j)}}async function kA(i,v,B){return yA(v,B)}function ox(){var i={env:rx,wasi_snapshot_preview1:rx};return i}async function Ax(){function i(w,M){return Me=w.exports,j0(Me),x0(),Me}function v(w){return i(w.instance)}var B=ox();if(n.instantiateWasm)return new Promise((w,M)=>{n.instantiateWasm(B,(K,v0)=>{w(i(K,v0))})});_0??(_0=N0());var p=await kA(O,_0,B),j=v(p);return j}class AA{constructor(v){px(this,"name","ExitStatus"),this.message=`Program terminated with exit(${v})`,this.status=v}}var J0,O0,K0,Fx,Ir,Lr,Rr,l0,Or,eA,_A=i=>{for(;i.length>0;)i.shift()(n)},wA=[],rr=i=>wA.push(i),zx=[],tr=i=>zx.push(i),fe=!1,ax=i=>U(i),g0=()=>F0(),rA=globalThis.TextDecoder&&new TextDecoder,bx=(i,v,B,p)=>{var j=v+B;if(p)return j;for(;i[v]&&!(v>=j);)++v;return v},BA=(i,v=0,B,p)=>{var j=bx(i,v,B,p);if(j-v>16&&i.buffer&&rA)return rA.decode(i.subarray(v,j));for(var w="";v<j;){var M=i[v++];if(!(M&128)){w+=String.fromCharCode(M);continue}var K=i[v++]&63;if((M&224)==192){w+=String.fromCharCode((M&31)<<6|K);continue}var v0=i[v++]&63;if((M&240)==224?M=(M&15)<<12|K<<6|v0:M=(M&7)<<18|K<<12|v0<<6|i[v++]&63,M<65536)w+=String.fromCharCode(M);else{var w0=M-65536;w+=String.fromCharCode(55296|w0>>10,56320|w0&1023)}}return w},tA=(i,v,B)=>i?BA(eA,i,v,B):"",SA=(i,v,B,p)=>C0(`Assertion failed: ${tA(i)}, at: `+[v?tA(v):"unknown filename",B,p?tA(p):"unknown function"]),c0={isAbs:i=>i.charAt(0)==="/",splitPath:i=>{var v=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return v.exec(i).slice(1)},normalizeArray:(i,v)=>{for(var B=0,p=i.length-1;p>=0;p--){var j=i[p];j==="."?i.splice(p,1):j===".."?(i.splice(p,1),B++):B&&(i.splice(p,1),B--)}if(v)for(;B;B--)i.unshift("..");return i},normalize:i=>{var v=c0.isAbs(i),B=i.slice(-1)==="/";return i=c0.normalizeArray(i.split("/").filter(p=>!!p),!v).join("/"),!i&&!v&&(i="."),i&&B&&(i+="/"),(v?"/":"")+i},dirname:i=>{var v=c0.splitPath(i),B=v[0],p=v[1];return!B&&!p?".":(p&&(p=p.slice(0,-1)),B+p)},basename:i=>i&&i.match(/([^\/]+|\/)\/*$/)[1],join:(...i)=>c0.normalize(i.join("/")),join2:(i,v)=>c0.normalize(i+"/"+v)},Gr=()=>{if(E){var i=require("crypto");return v=>i.randomFillSync(v)}return v=>(crypto.getRandomValues(v),0)},_e=i=>(_e=Gr())(i),Bx={resolve:(...i)=>{for(var v="",B=!1,p=i.length-1;p>=-1&&!B;p--){var j=p>=0?i[p]:o.cwd();if(typeof j!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!j)return"";v=j+"/"+v,B=c0.isAbs(j)}return v=c0.normalizeArray(v.split("/").filter(w=>!!w),!B).join("/"),(B?"/":"")+v||"."},relative:(i,v)=>{i=Bx.resolve(i).slice(1),v=Bx.resolve(v).slice(1);function B(w0){for(var Y0=0;Y0<w0.length&&w0[Y0]==="";Y0++);for(var L0=w0.length-1;L0>=0&&w0[L0]==="";L0--);return Y0>L0?[]:w0.slice(Y0,L0-Y0+1)}for(var p=B(i.split("/")),j=B(v.split("/")),w=Math.min(p.length,j.length),M=w,K=0;K<w;K++)if(p[K]!==j[K]){M=K;break}for(var v0=[],K=M;K<p.length;K++)v0.push("..");return v0=v0.concat(j.slice(M)),v0.join("/")}},Ox=[],VA=i=>{for(var v=0,B=0;B<i.length;++B){var p=i.charCodeAt(B);p<=127?v++:p<=2047?v+=2:p>=55296&&p<=57343?(v+=4,++B):v+=3}return v},we=(i,v,B,p)=>{if(!(p>0))return 0;for(var j=B,w=B+p-1,M=0;M<i.length;++M){var K=i.codePointAt(M);if(K<=127){if(B>=w)break;v[B++]=K}else if(K<=2047){if(B+1>=w)break;v[B++]=192|K>>6,v[B++]=128|K&63}else if(K<=65535){if(B+2>=w)break;v[B++]=224|K>>12,v[B++]=128|K>>6&63,v[B++]=128|K&63}else{if(B+3>=w)break;v[B++]=240|K>>18,v[B++]=128|K>>12&63,v[B++]=128|K>>6&63,v[B++]=128|K&63,M++}}return v[B]=0,B-j},WA=(i,v,B)=>{var p=B>0?B:VA(i)+1,j=new Array(p),w=we(i,j,0,j.length);return v&&(j.length=w),j},Ur=()=>{if(!Ox.length){var i=null;if(E){var v=256,B=Buffer.alloc(v),p=0,j=process.stdin.fd;try{p=P.readSync(j,B,0,v)}catch(w){if(w.toString().includes("EOF"))p=0;else throw w}p>0&&(i=B.slice(0,p).toString("utf-8"))}else globalThis.window?.prompt&&(i=window.prompt("Input: "),i!==null&&(i+=`
1162
- `));if(!i)return null;Ox=WA(i,!0)}return Ox.shift()},ex={ttys:[],init(){},shutdown(){},register(i,v){ex.ttys[i]={input:[],output:[],ops:v},o.registerDevice(i,ex.stream_ops)},stream_ops:{open(i){var v=ex.ttys[i.node.rdev];if(!v)throw new o.ErrnoError(43);i.tty=v,i.seekable=!1},close(i){i.tty.ops.fsync(i.tty)},fsync(i){i.tty.ops.fsync(i.tty)},read(i,v,B,p,j){if(!i.tty||!i.tty.ops.get_char)throw new o.ErrnoError(60);for(var w=0,M=0;M<p;M++){var K;try{K=i.tty.ops.get_char(i.tty)}catch{throw new o.ErrnoError(29)}if(K===void 0&&w===0)throw new o.ErrnoError(6);if(K==null)break;w++,v[B+M]=K}return w&&(i.node.atime=Date.now()),w},write(i,v,B,p,j){if(!i.tty||!i.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var w=0;w<p;w++)i.tty.ops.put_char(i.tty,v[B+w])}catch{throw new o.ErrnoError(29)}return p&&(i.node.mtime=i.node.ctime=Date.now()),w}},default_tty_ops:{get_char(i){return Ur()},put_char(i,v){v===null||v===10?(N(BA(i.output)),i.output=[]):v!=0&&i.output.push(v)},fsync(i){i.output?.length>0&&(N(BA(i.output)),i.output=[])},ioctl_tcgets(i){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(i,v,B){return 0},ioctl_tiocgwinsz(i){return[24,80]}},default_tty1_ops:{put_char(i,v){v===null||v===10?(R(BA(i.output)),i.output=[]):v!=0&&i.output.push(v)},fsync(i){i.output?.length>0&&(R(BA(i.output)),i.output=[])}}},$A=i=>{C0()},s0={ops_table:null,mount(i){return s0.createNode(null,"/",16895,0)},createNode(i,v,B,p){if(o.isBlkdev(B)||o.isFIFO(B))throw new o.ErrnoError(63);s0.ops_table||(s0.ops_table={dir:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr,lookup:s0.node_ops.lookup,mknod:s0.node_ops.mknod,rename:s0.node_ops.rename,unlink:s0.node_ops.unlink,rmdir:s0.node_ops.rmdir,readdir:s0.node_ops.readdir,symlink:s0.node_ops.symlink},stream:{llseek:s0.stream_ops.llseek}},file:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr},stream:{llseek:s0.stream_ops.llseek,read:s0.stream_ops.read,write:s0.stream_ops.write,mmap:s0.stream_ops.mmap,msync:s0.stream_ops.msync}},link:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr,readlink:s0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr},stream:o.chrdev_stream_ops}});var j=o.createNode(i,v,B,p);return o.isDir(j.mode)?(j.node_ops=s0.ops_table.dir.node,j.stream_ops=s0.ops_table.dir.stream,j.contents={}):o.isFile(j.mode)?(j.node_ops=s0.ops_table.file.node,j.stream_ops=s0.ops_table.file.stream,j.usedBytes=0,j.contents=s0.emptyFileContents??(s0.emptyFileContents=new Uint8Array(0))):o.isLink(j.mode)?(j.node_ops=s0.ops_table.link.node,j.stream_ops=s0.ops_table.link.stream):o.isChrdev(j.mode)&&(j.node_ops=s0.ops_table.chrdev.node,j.stream_ops=s0.ops_table.chrdev.stream),j.atime=j.mtime=j.ctime=Date.now(),i&&(i.contents[v]=j,i.atime=i.mtime=i.ctime=j.atime),j},getFileDataAsTypedArray(i){return i.contents.subarray(0,i.usedBytes)},expandFileStorage(i,v){var B=i.contents.length;if(!(B>=v)){var p=1024*1024;v=Math.max(v,B*(B<p?2:1.125)>>>0),B&&(v=Math.max(v,256));var j=s0.getFileDataAsTypedArray(i);i.contents=new Uint8Array(v),i.contents.set(j)}},resizeFileStorage(i,v){if(i.usedBytes!=v){var B=i.contents;i.contents=new Uint8Array(v),i.contents.set(B.subarray(0,Math.min(v,i.usedBytes))),i.usedBytes=v}},node_ops:{getattr(i){var v={};return v.dev=o.isChrdev(i.mode)?i.id:1,v.ino=i.id,v.mode=i.mode,v.nlink=1,v.uid=0,v.gid=0,v.rdev=i.rdev,o.isDir(i.mode)?v.size=4096:o.isFile(i.mode)?v.size=i.usedBytes:o.isLink(i.mode)?v.size=i.link.length:v.size=0,v.atime=new Date(i.atime),v.mtime=new Date(i.mtime),v.ctime=new Date(i.ctime),v.blksize=4096,v.blocks=Math.ceil(v.size/v.blksize),v},setattr(i,v){for(let B of["mode","atime","mtime","ctime"])v[B]!=null&&(i[B]=v[B]);v.size!==void 0&&s0.resizeFileStorage(i,v.size)},lookup(i,v){throw s0.doesNotExistError||(s0.doesNotExistError=new o.ErrnoError(44),s0.doesNotExistError.stack="<generic error, no stack>"),s0.doesNotExistError},mknod(i,v,B,p){return s0.createNode(i,v,B,p)},rename(i,v,B){var p;try{p=o.lookupNode(v,B)}catch{}if(p){if(o.isDir(i.mode))for(var j in p.contents)throw new o.ErrnoError(55);o.hashRemoveNode(p)}delete i.parent.contents[i.name],v.contents[B]=i,i.name=B,v.ctime=v.mtime=i.parent.ctime=i.parent.mtime=Date.now()},unlink(i,v){delete i.contents[v],i.ctime=i.mtime=Date.now()},rmdir(i,v){var B=o.lookupNode(i,v);for(var p in B.contents)throw new o.ErrnoError(55);delete i.contents[v],i.ctime=i.mtime=Date.now()},readdir(i){return[".","..",...Object.keys(i.contents)]},symlink(i,v,B){var p=s0.createNode(i,v,41471,0);return p.link=B,p},readlink(i){if(!o.isLink(i.mode))throw new o.ErrnoError(28);return i.link}},stream_ops:{read(i,v,B,p,j){var w=i.node.contents;if(j>=i.node.usedBytes)return 0;var M=Math.min(i.node.usedBytes-j,p);return v.set(w.subarray(j,j+M),B),M},write(i,v,B,p,j,w){if(v.buffer===Fx.buffer&&(w=!1),!p)return 0;var M=i.node;return M.mtime=M.ctime=Date.now(),w?(M.contents=v.subarray(B,B+p),M.usedBytes=p):M.usedBytes===0&&j===0?(M.contents=v.slice(B,B+p),M.usedBytes=p):(s0.expandFileStorage(M,j+p),M.contents.set(v.subarray(B,B+p),j),M.usedBytes=Math.max(M.usedBytes,j+p)),p},llseek(i,v,B){var p=v;if(B===1?p+=i.position:B===2&&o.isFile(i.node.mode)&&(p+=i.node.usedBytes),p<0)throw new o.ErrnoError(28);return p},mmap(i,v,B,p,j){if(!o.isFile(i.node.mode))throw new o.ErrnoError(43);var w,M,K=i.node.contents;if(!(j&2)&&K.buffer===Fx.buffer)M=!1,w=K.byteOffset;else{if(M=!0,w=$A(v),!w)throw new o.ErrnoError(48);K&&((B>0||B+v<K.length)&&(K.subarray?K=K.subarray(B,B+v):K=Array.prototype.slice.call(K,B,B+v)),Fx.set(K,w))}return{ptr:w,allocated:M}},msync(i,v,B,p,j){return s0.stream_ops.write(i,v,0,p,B,!1),0}}},TA=i=>{if(typeof i!="string")return i;var v={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=v[i];if(typeof B>"u")throw new Error(`Unknown file open mode: ${i}`);return B},Vx=i=>(typeof i=="string"&&(i=WA(i,!0)),i.subarray||(i=new Uint8Array(i)),i),nA=(i,v)=>{var B=0;return i&&(B|=365),v&&(B|=146),B},P0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},y0={mount(i){return y0.createNode(null,"/",i.opts.fs.lstat(i.opts.root).mode,0)},createNode(i,v,B,p){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(P0.EINVAL);var j=o.createNode(i,v,B);return j.node_ops=y0.node_ops,j.stream_ops=y0.stream_ops,j},realPath(i){for(var v=[];i.parent!==i;)v.push(i.name),i=i.parent;return v.push(i.mount.opts.root),v.reverse(),c0.join(...v)},node_ops:{getattr(i){var v=y0.realPath(i),B;try{B=i.mount.opts.fs.lstat(v)}catch(p){throw p.code?new o.ErrnoError(P0[p.code]):p}return{dev:B.dev,ino:B.ino,mode:B.mode,nlink:B.nlink,uid:B.uid,gid:B.gid,rdev:B.rdev,size:B.size,atime:B.atime,mtime:B.mtime,ctime:B.ctime,blksize:B.blksize,blocks:B.blocks}},setattr(i,v){var B=y0.realPath(i);try{if(v.mode!==void 0&&(i.mount.opts.fs.chmod(B,v.mode),i.mode=v.mode),v.atime||v.mtime){var p=new Date(v.atime||v.mtime),j=new Date(v.mtime||v.atime);i.mount.opts.fs.utime(B,p,j)}v.size!==void 0&&i.mount.opts.fs.truncate(B,v.size)}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},lookup(i,v){try{var B=c0.join2(y0.realPath(i),v),p=i.mount.opts.fs.lstat(B).mode,j=y0.createNode(i,v,p);return j}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},mknod(i,v,B,p){var j=y0.createNode(i,v,B,p),w=y0.realPath(j);try{o.isDir(j.mode)?j.mount.opts.fs.mkdir(w,j.mode):j.mount.opts.fs.writeFile(w,"",{mode:j.mode})}catch(M){throw M.code?new o.ErrnoError(P0[M.code]):M}return j},rename(i,v,B){var p=y0.realPath(i),j=c0.join2(y0.realPath(v),B);try{i.mount.opts.fs.rename(p,j),i.name=B}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},unlink(i,v){var B=c0.join2(y0.realPath(i),v);try{i.mount.opts.fs.unlink(B)}catch(p){throw p.code?new o.ErrnoError(P0[p.code]):p}},rmdir(i,v){var B=c0.join2(y0.realPath(i),v);try{i.mount.opts.fs.rmdir(B)}catch(p){throw p.code?new o.ErrnoError(P0[p.code]):p}},readdir(i){var v=y0.realPath(i);try{return i.mount.opts.fs.readdir(v)}catch(B){throw B.code?new o.ErrnoError(P0[B.code]):B}},symlink(i,v,B){var p=c0.join2(y0.realPath(i),v);try{i.mount.opts.fs.symlink(B,p)}catch(j){throw j.code?new o.ErrnoError(P0[j.code]):j}},readlink(i){var v=y0.realPath(i);try{return i.mount.opts.fs.readlink(v)}catch(B){throw B.code?new o.ErrnoError(P0[B.code]):B}}},stream_ops:{open(i){var v=y0.realPath(i.node);try{i.nfd=i.node.mount.opts.fs.open(v,i.flags)}catch(B){throw B.code?new o.ErrnoError(P0[B.code]):B}},close(i){try{i.node.mount.opts.fs.close(i.nfd)}catch(v){throw v.code?new o.ErrnoError(P0[v.code]):v}},read(i,v,B,p,j){try{return i.node.mount.opts.fs.read(i.nfd,v,B,p,j)}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},write(i,v,B,p,j){try{return i.node.mount.opts.fs.write(i.nfd,v,B,p,j)}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},llseek(i,v,B){var p=v;if(B===1)p+=i.position;else if(B===2&&o.isFile(i.node.mode))try{var j=i.node.node_ops.getattr(i.node);p+=j.size}catch(w){throw new o.ErrnoError(P0[w.code])}if(p<0)throw new o.ErrnoError(P0.EINVAL);return p}}},CA=async i=>{var v=await h(i);return new Uint8Array(v)},Se=(...i)=>o.createDataFile(...i),Cx=i=>i,lx=0,m0=null,$e=i=>{if(lx--,n.monitorRunDependencies?.(lx),lx==0&&m0){var v=m0;m0=null,v()}},$x=i=>{lx++,n.monitorRunDependencies?.(lx)},le=[],dA=async(i,v)=>{typeof Browser<"u"&&Browser.init();for(var B of le)if(B.canHandle(v))return B.handle(i,v);return i},PA=async(i,v,B,p,j,w,M,K)=>{var v0=v?Bx.resolve(c0.join2(i,v)):i,w0=Cx(`cp ${v0}`);$x(w0);try{var Y0=B;typeof B=="string"&&(Y0=await CA(B)),Y0=await dA(Y0,v0),K?.(),w||Se(i,v,Y0,p,j,M)}finally{$e(w0)}},Hr=(i,v,B,p,j,w,M,K,v0,w0)=>{PA(i,v,B,p,j,K,v0,w0).then(w).catch(M)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(i){px(this,"name","ErrnoError"),this.errno=i}},FSStream:class{constructor(){px(this,"shared",{})}get object(){return this.node}set object(i){this.node=i}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(i){this.shared.flags=i}get position(){return this.shared.position}set position(i){this.shared.position=i}},FSNode:class{constructor(i,v,B,p){px(this,"node_ops",{}),px(this,"stream_ops",{}),px(this,"readMode",365),px(this,"writeMode",146),px(this,"mounted",null),i||(i=this),this.parent=i,this.mount=i.mount,this.id=o.nextInode++,this.name=v,this.mode=B,this.rdev=p,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(i){i?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(i){i?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(i,v={}){if(!i)throw new o.ErrnoError(44);v.follow_mount??(v.follow_mount=!0),c0.isAbs(i)||(i=o.cwd()+"/"+i);x:for(var B=0;B<40;B++){for(var p=i.split("/").filter(w0=>!!w0),j=o.root,w="/",M=0;M<p.length;M++){var K=M===p.length-1;if(K&&v.parent)break;if(p[M]!=="."){if(p[M]===".."){if(w=c0.dirname(w),o.isRoot(j)){i=w+"/"+p.slice(M+1).join("/"),B--;continue x}else j=j.parent;continue}w=c0.join2(w,p[M]);try{j=o.lookupNode(j,p[M])}catch(w0){if(w0?.errno===44&&K&&v.noent_okay)return{path:w};throw w0}if(o.isMountpoint(j)&&(!K||v.follow_mount)&&(j=j.mounted.root),o.isLink(j.mode)&&(!K||v.follow)){if(!j.node_ops.readlink)throw new o.ErrnoError(52);var v0=j.node_ops.readlink(j);c0.isAbs(v0)||(v0=c0.dirname(w)+"/"+v0),i=v0+"/"+p.slice(M+1).join("/");continue x}}}return{path:w,node:j}}throw new o.ErrnoError(32)},getPath(i){for(var v;;){if(o.isRoot(i)){var B=i.mount.mountpoint;return v?B[B.length-1]!=="/"?`${B}/${v}`:B+v:B}v=v?`${i.name}/${v}`:i.name,i=i.parent}},hashName(i,v){for(var B=0,p=0;p<v.length;p++)B=(B<<5)-B+v.charCodeAt(p)|0;return(i+B>>>0)%o.nameTable.length},hashAddNode(i){var v=o.hashName(i.parent.id,i.name);i.name_next=o.nameTable[v],o.nameTable[v]=i},hashRemoveNode(i){var v=o.hashName(i.parent.id,i.name);if(o.nameTable[v]===i)o.nameTable[v]=i.name_next;else for(var B=o.nameTable[v];B;){if(B.name_next===i){B.name_next=i.name_next;break}B=B.name_next}},lookupNode(i,v){var B=o.mayLookup(i);if(B)throw new o.ErrnoError(B);for(var p=o.hashName(i.id,v),j=o.nameTable[p];j;j=j.name_next){var w=j.name;if(j.parent.id===i.id&&w===v)return j}return o.lookup(i,v)},createNode(i,v,B,p){var j=new o.FSNode(i,v,B,p);return o.hashAddNode(j),j},destroyNode(i){o.hashRemoveNode(i)},isRoot(i){return i===i.parent},isMountpoint(i){return!!i.mounted},isFile(i){return(i&61440)===32768},isDir(i){return(i&61440)===16384},isLink(i){return(i&61440)===40960},isChrdev(i){return(i&61440)===8192},isBlkdev(i){return(i&61440)===24576},isFIFO(i){return(i&61440)===4096},isSocket(i){return(i&49152)===49152},flagsToPermissionString(i){var v=["r","w","rw"][i&3];return i&512&&(v+="w"),v},nodePermissions(i,v){return o.ignorePermissions?0:v.includes("r")&&!(i.mode&292)||v.includes("w")&&!(i.mode&146)||v.includes("x")&&!(i.mode&73)?2:0},mayLookup(i){if(!o.isDir(i.mode))return 54;var v=o.nodePermissions(i,"x");return v||(i.node_ops.lookup?0:2)},mayCreate(i,v){if(!o.isDir(i.mode))return 54;try{var B=o.lookupNode(i,v);return 20}catch{}return o.nodePermissions(i,"wx")},mayDelete(i,v,B){var p;try{p=o.lookupNode(i,v)}catch(w){return w.errno}var j=o.nodePermissions(i,"wx");if(j)return j;if(B){if(!o.isDir(p.mode))return 54;if(o.isRoot(p)||o.getPath(p)===o.cwd())return 10}else if(o.isDir(p.mode))return 31;return 0},mayOpen(i,v){if(!i)return 44;if(o.isLink(i.mode))return 32;var B=o.flagsToPermissionString(v);return o.isDir(i.mode)&&(B!=="r"||v&576)?31:o.nodePermissions(i,B)},checkOpExists(i,v){if(!i)throw new o.ErrnoError(v);return i},MAX_OPEN_FDS:4096,nextfd(){for(var i=0;i<=o.MAX_OPEN_FDS;i++)if(!o.streams[i])return i;throw new o.ErrnoError(33)},getStreamChecked(i){var v=o.getStream(i);if(!v)throw new o.ErrnoError(8);return v},getStream:i=>o.streams[i],createStream(i,v=-1){return i=Object.assign(new o.FSStream,i),v==-1&&(v=o.nextfd()),i.fd=v,o.streams[v]=i,i},closeStream(i){o.streams[i]=null},dupStream(i,v=-1){var B=o.createStream(i,v);return B.stream_ops?.dup?.(B),B},doSetAttr(i,v,B){var p=i?.stream_ops.setattr,j=p?i:v;p??(p=v.node_ops.setattr),o.checkOpExists(p,63);try{p(j,B)}catch(w){throw w instanceof RangeError?new o.ErrnoError(22):w}},chrdev_stream_ops:{open(i){var v=o.getDevice(i.node.rdev);i.stream_ops=v.stream_ops,i.stream_ops.open?.(i)},llseek(){throw new o.ErrnoError(70)}},major:i=>i>>8,minor:i=>i&255,makedev:(i,v)=>i<<8|v,registerDevice(i,v){o.devices[i]={stream_ops:v}},getDevice:i=>o.devices[i],getMounts(i){for(var v=[],B=[i];B.length;){var p=B.pop();v.push(p),B.push(...p.mounts)}return v},syncfs(i,v){typeof i=="function"&&(v=i,i=!1),o.syncFSRequests++,o.syncFSRequests>1&&R(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var B=o.getMounts(o.root.mount),p=0;function j(K){return o.syncFSRequests--,v(K)}function w(K){if(K)return w.errored?void 0:(w.errored=!0,j(K));++p>=B.length&&j(null)}for(var M of B)M.type.syncfs?M.type.syncfs(M,i,w):w(null)},mount(i,v,B){var p=B==="/",j=!B,w;if(p&&o.root)throw new o.ErrnoError(10);if(!p&&!j){var M=o.lookupPath(B,{follow_mount:!1});if(B=M.path,w=M.node,o.isMountpoint(w))throw new o.ErrnoError(10);if(!o.isDir(w.mode))throw new o.ErrnoError(54)}var K={type:i,opts:v,mountpoint:B,mounts:[]},v0=i.mount(K);return v0.mount=K,K.root=v0,p?o.root=v0:w&&(w.mounted=K,w.mount&&w.mount.mounts.push(K)),v0},unmount(i){var v=o.lookupPath(i,{follow_mount:!1});if(!o.isMountpoint(v.node))throw new o.ErrnoError(28);var B=v.node,p=B.mounted,j=o.getMounts(p);for(var[w,M]of Object.entries(o.nameTable))for(;M;){var K=M.name_next;j.includes(M.mount)&&o.destroyNode(M),M=K}B.mounted=null;var v0=B.mount.mounts.indexOf(p);B.mount.mounts.splice(v0,1)},lookup(i,v){return i.node_ops.lookup(i,v)},mknod(i,v,B){var p=o.lookupPath(i,{parent:!0}),j=p.node,w=c0.basename(i);if(!w)throw new o.ErrnoError(28);if(w==="."||w==="..")throw new o.ErrnoError(20);var M=o.mayCreate(j,w);if(M)throw new o.ErrnoError(M);if(!j.node_ops.mknod)throw new o.ErrnoError(63);return j.node_ops.mknod(j,w,v,B)},statfs(i){return o.statfsNode(o.lookupPath(i,{follow:!0}).node)},statfsStream(i){return o.statfsNode(i.node)},statfsNode(i){var v={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return i.node_ops.statfs&&Object.assign(v,i.node_ops.statfs(i.mount.opts.root)),v},create(i,v=438){return v&=4095,v|=32768,o.mknod(i,v,0)},mkdir(i,v=511){return v&=1023,v|=16384,o.mknod(i,v,0)},mkdirTree(i,v){var B=i.split("/"),p="";for(var j of B)if(j){(p||c0.isAbs(i))&&(p+="/"),p+=j;try{o.mkdir(p,v)}catch(w){if(w.errno!=20)throw w}}},mkdev(i,v,B){return typeof B>"u"&&(B=v,v=438),v|=8192,o.mknod(i,v,B)},symlink(i,v){if(!Bx.resolve(i))throw new o.ErrnoError(44);var B=o.lookupPath(v,{parent:!0}),p=B.node;if(!p)throw new o.ErrnoError(44);var j=c0.basename(v),w=o.mayCreate(p,j);if(w)throw new o.ErrnoError(w);if(!p.node_ops.symlink)throw new o.ErrnoError(63);return p.node_ops.symlink(p,j,i)},rename(i,v){var B=c0.dirname(i),p=c0.dirname(v),j=c0.basename(i),w=c0.basename(v),M,K,v0;if(M=o.lookupPath(i,{parent:!0}),K=M.node,M=o.lookupPath(v,{parent:!0}),v0=M.node,!K||!v0)throw new o.ErrnoError(44);if(K.mount!==v0.mount)throw new o.ErrnoError(75);var w0=o.lookupNode(K,j),Y0=Bx.relative(i,p);if(Y0.charAt(0)!==".")throw new o.ErrnoError(28);if(Y0=Bx.relative(v,B),Y0.charAt(0)!==".")throw new o.ErrnoError(55);var L0;try{L0=o.lookupNode(v0,w)}catch{}if(w0!==L0){var q0=o.isDir(w0.mode),h0=o.mayDelete(K,j,q0);if(h0)throw new o.ErrnoError(h0);if(h0=L0?o.mayDelete(v0,w,q0):o.mayCreate(v0,w),h0)throw new o.ErrnoError(h0);if(!K.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(w0)||L0&&o.isMountpoint(L0))throw new o.ErrnoError(10);if(v0!==K&&(h0=o.nodePermissions(K,"w"),h0))throw new o.ErrnoError(h0);o.hashRemoveNode(w0);try{K.node_ops.rename(w0,v0,w),w0.parent=v0}catch(cx){throw cx}finally{o.hashAddNode(w0)}}},rmdir(i){var v=o.lookupPath(i,{parent:!0}),B=v.node,p=c0.basename(i),j=o.lookupNode(B,p),w=o.mayDelete(B,p,!0);if(w)throw new o.ErrnoError(w);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(j))throw new o.ErrnoError(10);B.node_ops.rmdir(B,p),o.destroyNode(j)},readdir(i){var v=o.lookupPath(i,{follow:!0}),B=v.node,p=o.checkOpExists(B.node_ops.readdir,54);return p(B)},unlink(i){var v=o.lookupPath(i,{parent:!0}),B=v.node;if(!B)throw new o.ErrnoError(44);var p=c0.basename(i),j=o.lookupNode(B,p),w=o.mayDelete(B,p,!1);if(w)throw new o.ErrnoError(w);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(j))throw new o.ErrnoError(10);B.node_ops.unlink(B,p),o.destroyNode(j)},readlink(i){var v=o.lookupPath(i),B=v.node;if(!B)throw new o.ErrnoError(44);if(!B.node_ops.readlink)throw new o.ErrnoError(28);return B.node_ops.readlink(B)},stat(i,v){var B=o.lookupPath(i,{follow:!v}),p=B.node,j=o.checkOpExists(p.node_ops.getattr,63);return j(p)},fstat(i){var v=o.getStreamChecked(i),B=v.node,p=v.stream_ops.getattr,j=p?v:B;return p??(p=B.node_ops.getattr),o.checkOpExists(p,63),p(j)},lstat(i){return o.stat(i,!0)},doChmod(i,v,B,p){o.doSetAttr(i,v,{mode:B&4095|v.mode&-4096,ctime:Date.now(),dontFollow:p})},chmod(i,v,B){var p;if(typeof i=="string"){var j=o.lookupPath(i,{follow:!B});p=j.node}else p=i;o.doChmod(null,p,v,B)},lchmod(i,v){o.chmod(i,v,!0)},fchmod(i,v){var B=o.getStreamChecked(i);o.doChmod(B,B.node,v,!1)},doChown(i,v,B){o.doSetAttr(i,v,{timestamp:Date.now(),dontFollow:B})},chown(i,v,B,p){var j;if(typeof i=="string"){var w=o.lookupPath(i,{follow:!p});j=w.node}else j=i;o.doChown(null,j,p)},lchown(i,v,B){o.chown(i,v,B,!0)},fchown(i,v,B){var p=o.getStreamChecked(i);o.doChown(p,p.node,!1)},doTruncate(i,v,B){if(o.isDir(v.mode))throw new o.ErrnoError(31);if(!o.isFile(v.mode))throw new o.ErrnoError(28);var p=o.nodePermissions(v,"w");if(p)throw new o.ErrnoError(p);o.doSetAttr(i,v,{size:B,timestamp:Date.now()})},truncate(i,v){if(v<0)throw new o.ErrnoError(28);var B;if(typeof i=="string"){var p=o.lookupPath(i,{follow:!0});B=p.node}else B=i;o.doTruncate(null,B,v)},ftruncate(i,v){var B=o.getStreamChecked(i);if(v<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,v)},utime(i,v,B){var p=o.lookupPath(i,{follow:!0}),j=p.node,w=o.checkOpExists(j.node_ops.setattr,63);w(j,{atime:v,mtime:B})},open(i,v,B=438){if(i==="")throw new o.ErrnoError(44);v=TA(v),v&64?B=B&4095|32768:B=0;var p,j;if(typeof i=="object")p=i;else{j=i.endsWith("/");var w=o.lookupPath(i,{follow:!(v&131072),noent_okay:!0});p=w.node,i=w.path}var M=!1;if(v&64)if(p){if(v&128)throw new o.ErrnoError(20)}else{if(j)throw new o.ErrnoError(31);p=o.mknod(i,B|511,0),M=!0}if(!p)throw new o.ErrnoError(44);if(o.isChrdev(p.mode)&&(v&=-513),v&65536&&!o.isDir(p.mode))throw new o.ErrnoError(54);if(!M){var K=o.mayOpen(p,v);if(K)throw new o.ErrnoError(K)}v&512&&!M&&o.truncate(p,0),v&=-131713;var v0=o.createStream({node:p,path:o.getPath(p),flags:v,seekable:!0,position:0,stream_ops:p.stream_ops,ungotten:[],error:!1});return v0.stream_ops.open&&v0.stream_ops.open(v0),M&&o.chmod(p,B&511),v0},close(i){if(o.isClosed(i))throw new o.ErrnoError(8);i.getdents&&(i.getdents=null);try{i.stream_ops.close&&i.stream_ops.close(i)}catch(v){throw v}finally{o.closeStream(i.fd)}i.fd=null},isClosed(i){return i.fd===null},llseek(i,v,B){if(o.isClosed(i))throw new o.ErrnoError(8);if(!i.seekable||!i.stream_ops.llseek)throw new o.ErrnoError(70);if(B!=0&&B!=1&&B!=2)throw new o.ErrnoError(28);return i.position=i.stream_ops.llseek(i,v,B),i.ungotten=[],i.position},read(i,v,B,p,j){if(p<0||j<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.read)throw new o.ErrnoError(28);var w=typeof j<"u";if(!w)j=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var M=i.stream_ops.read(i,v,B,p,j);return w||(i.position+=M),M},write(i,v,B,p,j,w){if(p<0||j<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.write)throw new o.ErrnoError(28);i.seekable&&i.flags&1024&&o.llseek(i,0,2);var M=typeof j<"u";if(!M)j=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var K=i.stream_ops.write(i,v,B,p,j,w);return M||(i.position+=K),K},mmap(i,v,B,p,j){if((p&2)!==0&&(j&2)===0&&(i.flags&2097155)!==2)throw new o.ErrnoError(2);if((i.flags&2097155)===1)throw new o.ErrnoError(2);if(!i.stream_ops.mmap)throw new o.ErrnoError(43);if(!v)throw new o.ErrnoError(28);return i.stream_ops.mmap(i,v,B,p,j)},msync(i,v,B,p,j){return i.stream_ops.msync?i.stream_ops.msync(i,v,B,p,j):0},ioctl(i,v,B){if(!i.stream_ops.ioctl)throw new o.ErrnoError(59);return i.stream_ops.ioctl(i,v,B)},readFile(i,v={}){v.flags=v.flags||0,v.encoding=v.encoding||"binary",v.encoding!=="utf8"&&v.encoding!=="binary"&&C0(`Invalid encoding type "${v.encoding}"`);var B=o.open(i,v.flags),p=o.stat(i),j=p.size,w=new Uint8Array(j);return o.read(B,w,0,j,0),v.encoding==="utf8"&&(w=BA(w)),o.close(B),w},writeFile(i,v,B={}){B.flags=B.flags||577;var p=o.open(i,B.flags,B.mode);v=Vx(v),o.write(p,v,0,v.byteLength,void 0,B.canOwn),o.close(p)},cwd:()=>o.currentPath,chdir(i){var v=o.lookupPath(i,{follow:!0});if(v.node===null)throw new o.ErrnoError(44);if(!o.isDir(v.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(v.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=v.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(p,j,w,M,K)=>M,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var i=new Uint8Array(1024),v=0,B=()=>(v===0&&(_e(i),v=i.byteLength),i[--v]);o.createDevice("/dev","random",B),o.createDevice("/dev","urandom",B),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var i=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var v=o.createNode(i,"fd",16895,73);return v.stream_ops={llseek:s0.stream_ops.llseek},v.node_ops={lookup(B,p){var j=+p,w=o.getStreamChecked(j),M={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>w.path},id:j+1};return M.parent=M,M},readdir(){return Array.from(o.streams.entries()).filter(([B,p])=>p).map(([B,p])=>B.toString())}},v}},{},"/proc/self/fd")},createStandardStreams(i,v,B){i?o.createDevice("/dev","stdin",i):o.symlink("/dev/tty","/dev/stdin"),v?o.createDevice("/dev","stdout",null,v):o.symlink("/dev/tty","/dev/stdout"),B?o.createDevice("/dev","stderr",null,B):o.symlink("/dev/tty1","/dev/stderr");var p=o.open("/dev/stdin",0),j=o.open("/dev/stdout",1),w=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(s0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:s0,PROXYFS:y0}},init(i,v,B){o.initialized=!0,i??(i=n.stdin),v??(v=n.stdout),B??(B=n.stderr),o.createStandardStreams(i,v,B)},quit(){o.initialized=!1,b(0);for(var i of o.streams)i&&o.close(i)},findObject(i,v){var B=o.analyzePath(i,v);return B.exists?B.object:null},analyzePath(i,v){try{var B=o.lookupPath(i,{follow:!v});i=B.path}catch{}var p={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var B=o.lookupPath(i,{parent:!0});p.parentExists=!0,p.parentPath=B.path,p.parentObject=B.node,p.name=c0.basename(i),B=o.lookupPath(i,{follow:!v}),p.exists=!0,p.path=B.path,p.object=B.node,p.name=B.node.name,p.isRoot=B.path==="/"}catch(j){p.error=j.errno}return p},createPath(i,v,B,p){i=typeof i=="string"?i:o.getPath(i);for(var j=v.split("/").reverse();j.length;){var w=j.pop();if(w){var M=c0.join2(i,w);try{o.mkdir(M)}catch(K){if(K.errno!=20)throw K}i=M}}return M},createFile(i,v,B,p,j){var w=c0.join2(typeof i=="string"?i:o.getPath(i),v),M=nA(p,j);return o.create(w,M)},createDataFile(i,v,B,p,j,w){var M=v;i&&(i=typeof i=="string"?i:o.getPath(i),M=v?c0.join2(i,v):i);var K=nA(p,j),v0=o.create(M,K);if(B){B=Vx(B),o.chmod(v0,K|146);var w0=o.open(v0,577);o.write(w0,B,0,B.length,0,w),o.close(w0),o.chmod(v0,K)}},createDevice(i,v,B,p){var j,w=c0.join2(typeof i=="string"?i:o.getPath(i),v),M=nA(!!B,!!p);(j=o.createDevice).major??(j.major=64);var K=o.makedev(o.createDevice.major++,0);return o.registerDevice(K,{open(v0){v0.seekable=!1},close(v0){p?.buffer?.length&&p(10)},read(v0,w0,Y0,L0,q0){for(var h0=0,cx=0;cx<L0;cx++){var kx;try{kx=B()}catch{throw new o.ErrnoError(29)}if(kx===void 0&&h0===0)throw new o.ErrnoError(6);if(kx==null)break;h0++,w0[Y0+cx]=kx}return h0&&(v0.node.atime=Date.now()),h0},write(v0,w0,Y0,L0,q0){for(var h0=0;h0<L0;h0++)try{p(w0[Y0+h0])}catch{throw new o.ErrnoError(29)}return L0&&(v0.node.mtime=v0.node.ctime=Date.now()),h0}}),o.mkdev(w,M,K)},forceLoadFile(i){if(i.isDevice||i.isFolder||i.link||i.contents)return!0;if(globalThis.XMLHttpRequest)C0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{i.contents=S(i.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(i,v,B,p,j){class w{constructor(){px(this,"lengthKnown",!1),px(this,"chunks",[])}get(q0){if(!(q0>this.length-1||q0<0)){var h0=q0%this.chunkSize,cx=q0/this.chunkSize|0;return this.getter(cx)[h0]}}setDataGetter(q0){this.getter=q0}cacheLength(){var q0=new XMLHttpRequest;q0.open("HEAD",B,!1),q0.send(null),q0.status>=200&&q0.status<300||q0.status===304||C0("Couldn't load "+B+". Status: "+q0.status);var h0=Number(q0.getResponseHeader("Content-length")),cx,kx=(cx=q0.getResponseHeader("Accept-Ranges"))&&cx==="bytes",Ux=(cx=q0.getResponseHeader("Content-Encoding"))&&cx==="gzip",Wx=1024*1024;kx||(Wx=h0);var Xx=(sA,ue)=>{sA>ue&&C0("invalid range ("+sA+", "+ue+") or no bytes requested!"),ue>h0-1&&C0("only "+h0+" bytes available! programmer error!");var jx=new XMLHttpRequest;return jx.open("GET",B,!1),h0!==Wx&&jx.setRequestHeader("Range","bytes="+sA+"-"+ue),jx.responseType="arraybuffer",jx.overrideMimeType&&jx.overrideMimeType("text/plain; charset=x-user-defined"),jx.send(null),jx.status>=200&&jx.status<300||jx.status===304||C0("Couldn't load "+B+". Status: "+jx.status),jx.response!==void 0?new Uint8Array(jx.response||[]):WA(jx.responseText||"",!0)},Ie=this;Ie.setDataGetter(sA=>{var ue=sA*Wx,jx=(sA+1)*Wx-1;return jx=Math.min(jx,h0-1),typeof Ie.chunks[sA]>"u"&&(Ie.chunks[sA]=Xx(ue,jx)),typeof Ie.chunks[sA]>"u"&&C0("doXHR failed!"),Ie.chunks[sA]}),(Ux||!h0)&&(Wx=h0=1,h0=this.getter(0).length,Wx=h0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h0,this._chunkSize=Wx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){f||C0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var M=new w,K={isDevice:!1,contents:M}}else var K={isDevice:!1,url:B};var v0=o.createFile(i,v,K,p,j);K.contents?v0.contents=K.contents:K.url&&(v0.contents=null,v0.url=K.url),Object.defineProperties(v0,{usedBytes:{get:function(){return this.contents.length}}});var w0={};for(let[L0,q0]of Object.entries(v0.stream_ops))w0[L0]=(...h0)=>(o.forceLoadFile(v0),q0(...h0));function Y0(L0,q0,h0,cx,kx){var Ux=L0.node.contents;if(kx>=Ux.length)return 0;var Wx=Math.min(Ux.length-kx,cx);if(Ux.slice)for(var Xx=0;Xx<Wx;Xx++)q0[h0+Xx]=Ux[kx+Xx];else for(var Xx=0;Xx<Wx;Xx++)q0[h0+Xx]=Ux.get(kx+Xx);return Wx}return w0.read=(L0,q0,h0,cx,kx)=>(o.forceLoadFile(v0),Y0(L0,q0,h0,cx,kx)),w0.mmap=(L0,q0,h0,cx,kx)=>{o.forceLoadFile(v0);var Ux=$A(q0);if(!Ux)throw new o.ErrnoError(48);return Y0(L0,Fx,Ux,q0,h0),{ptr:Ux,allocated:!0}},v0.stream_ops=w0,v0}},k0={currentUmask:18,calculateAt(i,v,B){if(c0.isAbs(v))return v;var p;if(i===-100)p=o.cwd();else{var j=k0.getStreamFromFD(i);p=j.path}if(v.length==0){if(!B)throw new o.ErrnoError(44);return p}return p+"/"+v},writeStat(i,v){l0[i>>2]=v.dev,l0[i+4>>2]=v.mode,l0[i+8>>2]=v.nlink,l0[i+12>>2]=v.uid,l0[i+16>>2]=v.gid,l0[i+20>>2]=v.rdev,K0[i+24>>3]=BigInt(v.size),O0[i+32>>2]=4096,O0[i+36>>2]=v.blocks;var B=v.atime.getTime(),p=v.mtime.getTime(),j=v.ctime.getTime();return K0[i+40>>3]=BigInt(Math.floor(B/1e3)),l0[i+48>>2]=B%1e3*1e3*1e3,K0[i+56>>3]=BigInt(Math.floor(p/1e3)),l0[i+64>>2]=p%1e3*1e3*1e3,K0[i+72>>3]=BigInt(Math.floor(j/1e3)),l0[i+80>>2]=j%1e3*1e3*1e3,K0[i+88>>3]=BigInt(v.ino),0},writeStatFs(i,v){l0[i+4>>2]=v.bsize,l0[i+60>>2]=v.bsize,K0[i+8>>3]=BigInt(v.blocks),K0[i+16>>3]=BigInt(v.bfree),K0[i+24>>3]=BigInt(v.bavail),K0[i+32>>3]=BigInt(v.files),K0[i+40>>3]=BigInt(v.ffree),l0[i+48>>2]=v.fsid,l0[i+64>>2]=v.flags,l0[i+56>>2]=v.namelen},doMsync(i,v,B,p,j){if(!o.isFile(v.node.mode))throw new o.ErrnoError(43);if(p&2)return 0;var w=eA.slice(i,i+B);o.msync(v,w,j,B,p)},getStreamFromFD(i){var v=o.getStreamChecked(i);return v},varargs:void 0,getStr(i){var v=tA(i);return v}};function Te(i,v,B,p){try{if(v=k0.getStr(v),v=k0.calculateAt(i,v),B&-8)return-28;var j=o.lookupPath(v,{follow:!0}),w=j.node;if(!w)return-44;var M="";return B&4&&(M+="r"),B&2&&(M+="w"),B&1&&(M+="x"),M&&o.nodePermissions(w,M)?-2:0}catch(K){if(typeof o>"u"||K.name!=="ErrnoError")throw K;return-K.errno}}var qA=()=>{var i=O0[+k0.varargs>>2];return k0.varargs+=4,i},uA=qA;function Jr(i,v,B){k0.varargs=B;try{var p=k0.getStreamFromFD(i);switch(v){case 0:{var j=qA();if(j<0)return-28;for(;o.streams[j];)j++;var w;return w=o.dupStream(p,j),w.fd}case 1:case 2:return 0;case 3:return p.flags;case 4:{var j=qA(),M=289792;return p.flags=p.flags&~M|j&M,0}case 12:{var j=uA(),K=0;return J0[j+K>>1]=2,0}case 13:case 14:return 0}return-28}catch(v0){if(typeof o>"u"||v0.name!=="ErrnoError")throw v0;return-v0.errno}}var ce=(i,v,B)=>we(i,eA,v,B);function nr(i,v){try{if(v===0)return-28;var B=o.cwd(),p=VA(B)+1;return v<p?-68:(ce(B,i,v),p)}catch(j){if(typeof o>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function sr(i,v,B){k0.varargs=B;try{var p=k0.getStreamFromFD(i);switch(v){case 21509:return p.tty?0:-59;case 21505:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcgets){var j=p.tty.ops.ioctl_tcgets(p),w=uA();O0[w>>2]=j.c_iflag||0,O0[w+4>>2]=j.c_oflag||0,O0[w+8>>2]=j.c_cflag||0,O0[w+12>>2]=j.c_lflag||0;for(var M=0;M<32;M++)Fx[w+M+17]=j.c_cc[M]||0;return 0}return 0}case 21510:case 21511:case 21512:return p.tty?0:-59;case 21506:case 21507:case 21508:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcsets){for(var w=uA(),K=O0[w>>2],v0=O0[w+4>>2],w0=O0[w+8>>2],Y0=O0[w+12>>2],L0=[],M=0;M<32;M++)L0.push(Fx[w+M+17]);return p.tty.ops.ioctl_tcsets(p.tty,v,{c_iflag:K,c_oflag:v0,c_cflag:w0,c_lflag:Y0,c_cc:L0})}return 0}case 21519:{if(!p.tty)return-59;var w=uA();return O0[w>>2]=0,0}case 21520:return p.tty?-28:-59;case 21537:case 21531:{var w=uA();return o.ioctl(p,v,w)}case 21523:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tiocgwinsz){var q0=p.tty.ops.ioctl_tiocgwinsz(p.tty),w=uA();J0[w>>1]=q0[0],J0[w+2>>1]=q0[1]}return 0}case 21524:return p.tty?0:-59;case 21515:return p.tty?0:-59;default:return-28}}catch(h0){if(typeof o>"u"||h0.name!=="ErrnoError")throw h0;return-h0.errno}}function Kr(i,v,B,p){k0.varargs=p;try{v=k0.getStr(v),v=k0.calculateAt(i,v);var j=p?qA():0;return B&64&&(j&=~k0.currentUmask),o.open(v,B,j).fd}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return-w.errno}}function zr(i,v,B,p){try{if(v=k0.getStr(v),v=k0.calculateAt(i,v),p<=0)return-28;var j=o.readlink(v),w=Math.min(p,VA(j)),M=Fx[B+w];return ce(j,B,p+1),Fx[B+w]=M,w}catch(K){if(typeof o>"u"||K.name!=="ErrnoError")throw K;return-K.errno}}function Vr(i,v,B,p){try{return v=k0.getStr(v),p=k0.getStr(p),v=k0.calculateAt(i,v),p=k0.calculateAt(B,p),o.rename(v,p),0}catch(j){if(typeof o>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function Ee(i){try{return i=k0.getStr(i),o.rmdir(i),0}catch(v){if(typeof o>"u"||v.name!=="ErrnoError")throw v;return-v.errno}}function ir(i,v,B){try{if(v=k0.getStr(v),v=k0.calculateAt(i,v),!B)o.unlink(v);else if(B===512)o.rmdir(v);else return-28;return 0}catch(p){if(typeof o>"u"||p.name!=="ErrnoError")throw p;return-p.errno}}var XA=()=>{throw new X},Be=()=>performance.now(),Wr=()=>Date.now(),ar=1,Xr=i=>i>=0&&i<=3,YA=9007199254740992,Pe=-9007199254740992,or=i=>i<Pe||i>YA?NaN:Number(i);function Fr(i,v,B){if(v=or(v),!Xr(i))return 28;var p;if(i===0)p=Wr();else if(ar)p=Be();else return 52;var j=Math.round(p*1e3*1e3);return K0[B>>3]=BigInt(j),0}var Yr=()=>2147483648,vr=(i,v)=>Math.ceil(i/v)*v,Qr=i=>{var v=M0.buffer.byteLength,B=(i-v+65535)/65536|0;try{return M0.grow(B),x0(),1}catch{}},Zr=i=>{var v=eA.length;i>>>=0;var B=Yr();if(i>B)return!1;for(var p=1;p<=4;p*=2){var j=v*(1+.2/p);j=Math.min(j,i+100663296);var w=Math.min(B,vr(Math.max(i,j),65536)),M=Qr(w);if(M)return!0}return!1};function Ce(i){try{var v=k0.getStreamFromFD(i);return o.close(v),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var xt=(i,v,B,p)=>{for(var j=0,w=0;w<B;w++){var M=l0[v>>2],K=l0[v+4>>2];v+=8;var v0=o.read(i,Fx,M,K,p);if(v0<0)return-1;if(j+=v0,v0<K)break;typeof p<"u"&&(p+=v0)}return j};function At(i,v,B,p){try{var j=k0.getStreamFromFD(i),w=xt(j,v,B);return l0[p>>2]=w,0}catch(M){if(typeof o>"u"||M.name!=="ErrnoError")throw M;return M.errno}}function fr(i,v,B,p){v=or(v);try{if(isNaN(v))return 22;var j=k0.getStreamFromFD(i);return o.llseek(j,v,B),K0[p>>3]=BigInt(j.position),j.getdents&&v===0&&B===0&&(j.getdents=null),0}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return w.errno}}var lr=(i,v,B,p)=>{for(var j=0,w=0;w<B;w++){var M=l0[v>>2],K=l0[v+4>>2];v+=8;var v0=o.write(i,Fx,M,K,p);if(v0<0)return-1;if(j+=v0,v0<K)break;typeof p<"u"&&(p+=v0)}return j};function QA(i,v,B,p){try{var j=k0.getStreamFromFD(i),w=lr(j,v,B);return l0[p>>2]=w,0}catch(M){if(typeof o>"u"||M.name!=="ErrnoError")throw M;return M.errno}}var cr=0,ZA=()=>fe||cr>0,qe=i=>{L=i,ZA()||(n.onExit?.(i),n0=!0),m(i,new AA(i))},Tx=(i,v)=>{L=i,ZA()||f0(),qe(i)},et=i=>{if(i instanceof AA||i=="unwind")return L;m(1,i)},NA=i=>V(i),xe=i=>{var v=VA(i)+1,B=NA(v);return ce(i,B,v),B},Ne=[],dx=i=>{var v=Ne[i];return v||(Ne[i]=v=$0.get(i)),v},de=(...i)=>o.createPath(...i),Ae=(...i)=>o.unlink(...i),a=(...i)=>o.createLazyFile(...i),l=(...i)=>o.createDevice(...i);if(o.createPreloadedFile=Hr,o.preloadFile=PA,o.staticInit(),n.noExitRuntime&&(fe=n.noExitRuntime),n.preloadPlugins&&(le=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=Mt,n.addRunDependency=$x,n.removeRunDependency=$e,n.FS_preloadFile=PA,n.FS_unlink=Ae,n.FS_createPath=de,n.FS_createDevice=l,n.FS=o,n.FS_createDataFile=Se,n.FS_createLazyFile=a,n.PROXYFS=y0;var d,b,y,$,U,V,F0,u0,z0,M0,$0;function j0(i){d=n._main=i.__main_argc_argv,b=i.fflush,y=i.__funcs_on_exit,$=i.setThrew,U=i._emscripten_stack_restore,V=i._emscripten_stack_alloc,F0=i.emscripten_stack_get_current,u0=M0=i.memory,z0=$0=i.__indirect_function_table}var rx={__assert_fail:SA,__syscall_faccessat:Te,__syscall_fcntl64:Jr,__syscall_getcwd:nr,__syscall_ioctl:sr,__syscall_openat:Kr,__syscall_readlinkat:zr,__syscall_renameat:Vr,__syscall_rmdir:Ee,__syscall_unlinkat:ir,_emscripten_throw_longjmp:XA,clock_time_get:Fr,emscripten_resize_heap:Zr,fd_close:Ce,fd_read:At,fd_seek:fr,fd_write:QA,invoke_i:ee,invoke_ii:Ix,invoke_iii:Lx,invoke_iiid:zn,invoke_iiii:Gx,invoke_iiiii:vx,invoke_iiiiii:Vn,invoke_iijii:Jn,invoke_v:mx,invoke_vi:Kn,invoke_vii:Px,invoke_viii:Nt,invoke_viiii:DA,invoke_viiiii:qt};function mx(i){var v=g0();try{dx(i)()}catch(B){if(ax(v),!(B instanceof I))throw B;$(1,0)}}function Px(i,v,B){var p=g0();try{dx(i)(v,B)}catch(j){if(ax(p),!(j instanceof I))throw j;$(1,0)}}function Ix(i,v){var B=g0();try{return dx(i)(v)}catch(p){if(ax(B),!(p instanceof I))throw p;$(1,0)}}function Lx(i,v,B){var p=g0();try{return dx(i)(v,B)}catch(j){if(ax(p),!(j instanceof I))throw j;$(1,0)}}function ee(i){var v=g0();try{return dx(i)()}catch(B){if(ax(v),!(B instanceof I))throw B;$(1,0)}}function Gx(i,v,B,p){var j=g0();try{return dx(i)(v,B,p)}catch(w){if(ax(j),!(w instanceof I))throw w;$(1,0)}}function DA(i,v,B,p,j){var w=g0();try{dx(i)(v,B,p,j)}catch(M){if(ax(w),!(M instanceof I))throw M;$(1,0)}}function vx(i,v,B,p,j){var w=g0();try{return dx(i)(v,B,p,j)}catch(M){if(ax(w),!(M instanceof I))throw M;$(1,0)}}function qt(i,v,B,p,j,w){var M=g0();try{dx(i)(v,B,p,j,w)}catch(K){if(ax(M),!(K instanceof I))throw K;$(1,0)}}function Jn(i,v,B,p,j){var w=g0();try{return dx(i)(v,B,p,j)}catch(M){if(ax(w),!(M instanceof I))throw M;$(1,0)}}function Kn(i,v){var B=g0();try{dx(i)(v)}catch(p){if(ax(B),!(p instanceof I))throw p;$(1,0)}}function Nt(i,v,B,p){var j=g0();try{dx(i)(v,B,p)}catch(w){if(ax(j),!(w instanceof I))throw w;$(1,0)}}function zn(i,v,B,p){var j=g0();try{return dx(i)(v,B,p)}catch(w){if(ax(j),!(w instanceof I))throw w;$(1,0)}}function Vn(i,v,B,p,j,w){var M=g0();try{return dx(i)(v,B,p,j,w)}catch(K){if(ax(M),!(K instanceof I))throw K;$(1,0)}}function Mt(i=[]){var v=d;i.unshift(D);var B=i.length,p=NA((B+1)*4),j=p;for(var w of i)l0[j>>2]=xe(w),j+=4;l0[j>>2]=0;try{var M=v(B,p);return Tx(M,!0),M}catch(K){return et(K)}}function rt(i=u){if(lx>0){m0=rt;return}if(o0(),lx>0){m0=rt;return}function v(){if(n.calledRun=!0,!n0){G(),H?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||Mt(i),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),v()},1)):v()}var Me;return Me=await Ax(),rt(),a0?s=n:s=new Promise((i,v)=>{H=i,J=v}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),tE=po({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,f=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",m=(a,l)=>{throw l};typeof __filename<"u"?r=__filename:f&&(r=self.location.href);var _="",h,S;if(E){var P=require("fs");_=__dirname+"/",S=a=>{a=k(a)?new URL(a):a;var l=P.readFileSync(a);return l},h=async(a,l=!0)=>{a=k(a)?new URL(a):a;var d=P.readFileSync(a,l?void 0:"utf8");return d},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(a,l)=>{throw process.exitCode=a,l}}else if(F||f){try{_=new URL(".",r).href}catch{}f&&(S=a=>{var l=new XMLHttpRequest;return l.open("GET",a,!1),l.responseType="arraybuffer",l.send(null),new Uint8Array(l.response)}),h=async a=>{if(k(a))return new Promise((d,b)=>{var y=new XMLHttpRequest;y.open("GET",a,!0),y.responseType="arraybuffer",y.onload=()=>{if(y.status==200||y.status==0&&y.response){d(y.response);return}b(y.status)},y.onerror=b,y.send(null)});var l=await fetch(a,{credentials:"same-origin"});if(l.ok)return l.arrayBuffer();throw new Error(l.status+" : "+l.url)}}var N=console.log.bind(console),R=console.error.bind(console),O,n0=!1,L,k=a=>a.startsWith("file://");class I{}class X extends I{}function W(a){for(var l=0,d=a.length,b=new Uint8Array(d),y;l<d;++l)y=a.charCodeAt(l),b[l]=~y>>8&y;return b}var H,J,a0=!1,t0=!1;function x0(){var a=NA.buffer;Fx=new Int8Array(a),J0=new Int16Array(a),eA=new Uint8Array(a),Rr=new Uint16Array(a),O0=new Int32Array(a),l0=new Uint32Array(a),Ir=new Float32Array(a),Lr=new Float64Array(a),K0=new BigInt64Array(a),Or=new BigUint64Array(a)}function o0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)tr(n.preRun.shift());_A(zx)}function G(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),ex.init(),Ae.__wasm_call_ctors(),o.ignorePermissions=!1}function i0(){}function f0(){lr(),o.quit(),ex.shutdown(),t0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)rr(n.postRun.shift());_A(wA)}function C0(a){n.onAbort?.(a),a=`Aborted(${a})`,R(a),n0=!0,a+=". Build with -sASSERTIONS for more info.";var l=new WebAssembly.RuntimeError(a);throw J?.(l),l}var _0;function N0(){return W(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
1161
+ \0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function ix(i){return i}async function Vx(i){return i}async function kA(i,l){try{var B=await Vx(i),p=await WebAssembly.instantiate(B,l);return p}catch(j){R(`failed to asynchronously prepare wasm: ${j}`),C0(j)}}async function _A(i,l,B){return kA(l,B)}function ox(){var i={env:rx,wasi_snapshot_preview1:rx};return i}async function Ax(){function i(w,I){return Me=w.exports,j0(Me),Z(),Me}function l(w){return i(w.instance)}var B=ox();if(n.instantiateWasm)return new Promise((w,I)=>{n.instantiateWasm(B,(K,v0)=>{w(i(K,v0))})});_0??(_0=$0());var p=await _A(U,_0,B),j=l(p);return j}class eA{constructor(l){px(this,"name","ExitStatus"),this.message=`Program terminated with exit(${l})`,this.status=l}}var J0,O0,K0,Fx,Mr,Lr,Rr,f0,Or,rA,wA=i=>{for(;i.length>0;)i.shift()(n)},SA=[],tr=i=>SA.push(i),Wx=[],nr=i=>Wx.push(i),fe=!1,ax=i=>G(i),g0=()=>F0(),tA=globalThis.TextDecoder&&new TextDecoder,bx=(i,l,B,p)=>{var j=l+B;if(p)return j;for(;i[l]&&!(l>=j);)++l;return l},CA=(i,l=0,B,p)=>{var j=bx(i,l,B,p);if(j-l>16&&i.buffer&&tA)return tA.decode(i.subarray(l,j));for(var w="";l<j;){var I=i[l++];if(!(I&128)){w+=String.fromCharCode(I);continue}var K=i[l++]&63;if((I&224)==192){w+=String.fromCharCode((I&31)<<6|K);continue}var v0=i[l++]&63;if((I&240)==224?I=(I&15)<<12|K<<6|v0:I=(I&7)<<18|K<<12|v0<<6|i[l++]&63,I<65536)w+=String.fromCharCode(I);else{var w0=I-65536;w+=String.fromCharCode(55296|w0>>10,56320|w0&1023)}}return w},nA=(i,l,B)=>i?CA(rA,i,l,B):"",$A=(i,l,B,p)=>C0(`Assertion failed: ${nA(i)}, at: `+[l?nA(l):"unknown filename",B,p?nA(p):"unknown function"]),c0={isAbs:i=>i.charAt(0)==="/",splitPath:i=>{var l=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return l.exec(i).slice(1)},normalizeArray:(i,l)=>{for(var B=0,p=i.length-1;p>=0;p--){var j=i[p];j==="."?i.splice(p,1):j===".."?(i.splice(p,1),B++):B&&(i.splice(p,1),B--)}if(l)for(;B;B--)i.unshift("..");return i},normalize:i=>{var l=c0.isAbs(i),B=i.slice(-1)==="/";return i=c0.normalizeArray(i.split("/").filter(p=>!!p),!l).join("/"),!i&&!l&&(i="."),i&&B&&(i+="/"),(l?"/":"")+i},dirname:i=>{var l=c0.splitPath(i),B=l[0],p=l[1];return!B&&!p?".":(p&&(p=p.slice(0,-1)),B+p)},basename:i=>i&&i.match(/([^\/]+|\/)\/*$/)[1],join:(...i)=>c0.normalize(i.join("/")),join2:(i,l)=>c0.normalize(i+"/"+l)},Gr=()=>{if(E){var i=require("crypto");return l=>i.randomFillSync(l)}return l=>(crypto.getRandomValues(l),0)},we=i=>(we=Gr())(i),Bx={resolve:(...i)=>{for(var l="",B=!1,p=i.length-1;p>=-1&&!B;p--){var j=p>=0?i[p]:o.cwd();if(typeof j!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!j)return"";l=j+"/"+l,B=c0.isAbs(j)}return l=c0.normalizeArray(l.split("/").filter(w=>!!w),!B).join("/"),(B?"/":"")+l||"."},relative:(i,l)=>{i=Bx.resolve(i).slice(1),l=Bx.resolve(l).slice(1);function B(w0){for(var Y0=0;Y0<w0.length&&w0[Y0]==="";Y0++);for(var L0=w0.length-1;L0>=0&&w0[L0]==="";L0--);return Y0>L0?[]:w0.slice(Y0,L0-Y0+1)}for(var p=B(i.split("/")),j=B(l.split("/")),w=Math.min(p.length,j.length),I=w,K=0;K<w;K++)if(p[K]!==j[K]){I=K;break}for(var v0=[],K=I;K<p.length;K++)v0.push("..");return v0=v0.concat(j.slice(I)),v0.join("/")}},Gx=[],WA=i=>{for(var l=0,B=0;B<i.length;++B){var p=i.charCodeAt(B);p<=127?l++:p<=2047?l+=2:p>=55296&&p<=57343?(l+=4,++B):l+=3}return l},Se=(i,l,B,p)=>{if(!(p>0))return 0;for(var j=B,w=B+p-1,I=0;I<i.length;++I){var K=i.codePointAt(I);if(K<=127){if(B>=w)break;l[B++]=K}else if(K<=2047){if(B+1>=w)break;l[B++]=192|K>>6,l[B++]=128|K&63}else if(K<=65535){if(B+2>=w)break;l[B++]=224|K>>12,l[B++]=128|K>>6&63,l[B++]=128|K&63}else{if(B+3>=w)break;l[B++]=240|K>>18,l[B++]=128|K>>12&63,l[B++]=128|K>>6&63,l[B++]=128|K&63,I++}}return l[B]=0,B-j},XA=(i,l,B)=>{var p=B>0?B:WA(i)+1,j=new Array(p),w=Se(i,j,0,j.length);return l&&(j.length=w),j},Ur=()=>{if(!Gx.length){var i=null;if(E){var l=256,B=Buffer.alloc(l),p=0,j=process.stdin.fd;try{p=P.readSync(j,B,0,l)}catch(w){if(w.toString().includes("EOF"))p=0;else throw w}p>0&&(i=B.slice(0,p).toString("utf-8"))}else globalThis.window?.prompt&&(i=window.prompt("Input: "),i!==null&&(i+=`
1162
+ `));if(!i)return null;Gx=XA(i,!0)}return Gx.shift()},ex={ttys:[],init(){},shutdown(){},register(i,l){ex.ttys[i]={input:[],output:[],ops:l},o.registerDevice(i,ex.stream_ops)},stream_ops:{open(i){var l=ex.ttys[i.node.rdev];if(!l)throw new o.ErrnoError(43);i.tty=l,i.seekable=!1},close(i){i.tty.ops.fsync(i.tty)},fsync(i){i.tty.ops.fsync(i.tty)},read(i,l,B,p,j){if(!i.tty||!i.tty.ops.get_char)throw new o.ErrnoError(60);for(var w=0,I=0;I<p;I++){var K;try{K=i.tty.ops.get_char(i.tty)}catch{throw new o.ErrnoError(29)}if(K===void 0&&w===0)throw new o.ErrnoError(6);if(K==null)break;w++,l[B+I]=K}return w&&(i.node.atime=Date.now()),w},write(i,l,B,p,j){if(!i.tty||!i.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var w=0;w<p;w++)i.tty.ops.put_char(i.tty,l[B+w])}catch{throw new o.ErrnoError(29)}return p&&(i.node.mtime=i.node.ctime=Date.now()),w}},default_tty_ops:{get_char(i){return Ur()},put_char(i,l){l===null||l===10?(N(CA(i.output)),i.output=[]):l!=0&&i.output.push(l)},fsync(i){i.output?.length>0&&(N(CA(i.output)),i.output=[])},ioctl_tcgets(i){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(i,l,B){return 0},ioctl_tiocgwinsz(i){return[24,80]}},default_tty1_ops:{put_char(i,l){l===null||l===10?(R(CA(i.output)),i.output=[]):l!=0&&i.output.push(l)},fsync(i){i.output?.length>0&&(R(CA(i.output)),i.output=[])}}},TA=i=>{C0()},s0={ops_table:null,mount(i){return s0.createNode(null,"/",16895,0)},createNode(i,l,B,p){if(o.isBlkdev(B)||o.isFIFO(B))throw new o.ErrnoError(63);s0.ops_table||(s0.ops_table={dir:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr,lookup:s0.node_ops.lookup,mknod:s0.node_ops.mknod,rename:s0.node_ops.rename,unlink:s0.node_ops.unlink,rmdir:s0.node_ops.rmdir,readdir:s0.node_ops.readdir,symlink:s0.node_ops.symlink},stream:{llseek:s0.stream_ops.llseek}},file:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr},stream:{llseek:s0.stream_ops.llseek,read:s0.stream_ops.read,write:s0.stream_ops.write,mmap:s0.stream_ops.mmap,msync:s0.stream_ops.msync}},link:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr,readlink:s0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr},stream:o.chrdev_stream_ops}});var j=o.createNode(i,l,B,p);return o.isDir(j.mode)?(j.node_ops=s0.ops_table.dir.node,j.stream_ops=s0.ops_table.dir.stream,j.contents={}):o.isFile(j.mode)?(j.node_ops=s0.ops_table.file.node,j.stream_ops=s0.ops_table.file.stream,j.usedBytes=0,j.contents=s0.emptyFileContents??(s0.emptyFileContents=new Uint8Array(0))):o.isLink(j.mode)?(j.node_ops=s0.ops_table.link.node,j.stream_ops=s0.ops_table.link.stream):o.isChrdev(j.mode)&&(j.node_ops=s0.ops_table.chrdev.node,j.stream_ops=s0.ops_table.chrdev.stream),j.atime=j.mtime=j.ctime=Date.now(),i&&(i.contents[l]=j,i.atime=i.mtime=i.ctime=j.atime),j},getFileDataAsTypedArray(i){return i.contents.subarray(0,i.usedBytes)},expandFileStorage(i,l){var B=i.contents.length;if(!(B>=l)){var p=1024*1024;l=Math.max(l,B*(B<p?2:1.125)>>>0),B&&(l=Math.max(l,256));var j=s0.getFileDataAsTypedArray(i);i.contents=new Uint8Array(l),i.contents.set(j)}},resizeFileStorage(i,l){if(i.usedBytes!=l){var B=i.contents;i.contents=new Uint8Array(l),i.contents.set(B.subarray(0,Math.min(l,i.usedBytes))),i.usedBytes=l}},node_ops:{getattr(i){var l={};return l.dev=o.isChrdev(i.mode)?i.id:1,l.ino=i.id,l.mode=i.mode,l.nlink=1,l.uid=0,l.gid=0,l.rdev=i.rdev,o.isDir(i.mode)?l.size=4096:o.isFile(i.mode)?l.size=i.usedBytes:o.isLink(i.mode)?l.size=i.link.length:l.size=0,l.atime=new Date(i.atime),l.mtime=new Date(i.mtime),l.ctime=new Date(i.ctime),l.blksize=4096,l.blocks=Math.ceil(l.size/l.blksize),l},setattr(i,l){for(let B of["mode","atime","mtime","ctime"])l[B]!=null&&(i[B]=l[B]);l.size!==void 0&&s0.resizeFileStorage(i,l.size)},lookup(i,l){throw s0.doesNotExistError||(s0.doesNotExistError=new o.ErrnoError(44),s0.doesNotExistError.stack="<generic error, no stack>"),s0.doesNotExistError},mknod(i,l,B,p){return s0.createNode(i,l,B,p)},rename(i,l,B){var p;try{p=o.lookupNode(l,B)}catch{}if(p){if(o.isDir(i.mode))for(var j in p.contents)throw new o.ErrnoError(55);o.hashRemoveNode(p)}delete i.parent.contents[i.name],l.contents[B]=i,i.name=B,l.ctime=l.mtime=i.parent.ctime=i.parent.mtime=Date.now()},unlink(i,l){delete i.contents[l],i.ctime=i.mtime=Date.now()},rmdir(i,l){var B=o.lookupNode(i,l);for(var p in B.contents)throw new o.ErrnoError(55);delete i.contents[l],i.ctime=i.mtime=Date.now()},readdir(i){return[".","..",...Object.keys(i.contents)]},symlink(i,l,B){var p=s0.createNode(i,l,41471,0);return p.link=B,p},readlink(i){if(!o.isLink(i.mode))throw new o.ErrnoError(28);return i.link}},stream_ops:{read(i,l,B,p,j){var w=i.node.contents;if(j>=i.node.usedBytes)return 0;var I=Math.min(i.node.usedBytes-j,p);return l.set(w.subarray(j,j+I),B),I},write(i,l,B,p,j,w){if(l.buffer===Fx.buffer&&(w=!1),!p)return 0;var I=i.node;return I.mtime=I.ctime=Date.now(),w?(I.contents=l.subarray(B,B+p),I.usedBytes=p):I.usedBytes===0&&j===0?(I.contents=l.slice(B,B+p),I.usedBytes=p):(s0.expandFileStorage(I,j+p),I.contents.set(l.subarray(B,B+p),j),I.usedBytes=Math.max(I.usedBytes,j+p)),p},llseek(i,l,B){var p=l;if(B===1?p+=i.position:B===2&&o.isFile(i.node.mode)&&(p+=i.node.usedBytes),p<0)throw new o.ErrnoError(28);return p},mmap(i,l,B,p,j){if(!o.isFile(i.node.mode))throw new o.ErrnoError(43);var w,I,K=i.node.contents;if(!(j&2)&&K.buffer===Fx.buffer)I=!1,w=K.byteOffset;else{if(I=!0,w=TA(l),!w)throw new o.ErrnoError(48);K&&((B>0||B+l<K.length)&&(K.subarray?K=K.subarray(B,B+l):K=Array.prototype.slice.call(K,B,B+l)),Fx.set(K,w))}return{ptr:w,allocated:I}},msync(i,l,B,p,j){return s0.stream_ops.write(i,l,0,p,B,!1),0}}},PA=i=>{if(typeof i!="string")return i;var l={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=l[i];if(typeof B>"u")throw new Error(`Unknown file open mode: ${i}`);return B},Xx=i=>(typeof i=="string"&&(i=XA(i,!0)),i.subarray||(i=new Uint8Array(i)),i),sA=(i,l)=>{var B=0;return i&&(B|=365),l&&(B|=146),B},q0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},y0={mount(i){return y0.createNode(null,"/",i.opts.fs.lstat(i.opts.root).mode,0)},createNode(i,l,B,p){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(q0.EINVAL);var j=o.createNode(i,l,B);return j.node_ops=y0.node_ops,j.stream_ops=y0.stream_ops,j},realPath(i){for(var l=[];i.parent!==i;)l.push(i.name),i=i.parent;return l.push(i.mount.opts.root),l.reverse(),c0.join(...l)},node_ops:{getattr(i){var l=y0.realPath(i),B;try{B=i.mount.opts.fs.lstat(l)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}return{dev:B.dev,ino:B.ino,mode:B.mode,nlink:B.nlink,uid:B.uid,gid:B.gid,rdev:B.rdev,size:B.size,atime:B.atime,mtime:B.mtime,ctime:B.ctime,blksize:B.blksize,blocks:B.blocks}},setattr(i,l){var B=y0.realPath(i);try{if(l.mode!==void 0&&(i.mount.opts.fs.chmod(B,l.mode),i.mode=l.mode),l.atime||l.mtime){var p=new Date(l.atime||l.mtime),j=new Date(l.mtime||l.atime);i.mount.opts.fs.utime(B,p,j)}l.size!==void 0&&i.mount.opts.fs.truncate(B,l.size)}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},lookup(i,l){try{var B=c0.join2(y0.realPath(i),l),p=i.mount.opts.fs.lstat(B).mode,j=y0.createNode(i,l,p);return j}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},mknod(i,l,B,p){var j=y0.createNode(i,l,B,p),w=y0.realPath(j);try{o.isDir(j.mode)?j.mount.opts.fs.mkdir(w,j.mode):j.mount.opts.fs.writeFile(w,"",{mode:j.mode})}catch(I){throw I.code?new o.ErrnoError(q0[I.code]):I}return j},rename(i,l,B){var p=y0.realPath(i),j=c0.join2(y0.realPath(l),B);try{i.mount.opts.fs.rename(p,j),i.name=B}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},unlink(i,l){var B=c0.join2(y0.realPath(i),l);try{i.mount.opts.fs.unlink(B)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}},rmdir(i,l){var B=c0.join2(y0.realPath(i),l);try{i.mount.opts.fs.rmdir(B)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}},readdir(i){var l=y0.realPath(i);try{return i.mount.opts.fs.readdir(l)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},symlink(i,l,B){var p=c0.join2(y0.realPath(i),l);try{i.mount.opts.fs.symlink(B,p)}catch(j){throw j.code?new o.ErrnoError(q0[j.code]):j}},readlink(i){var l=y0.realPath(i);try{return i.mount.opts.fs.readlink(l)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}}},stream_ops:{open(i){var l=y0.realPath(i.node);try{i.nfd=i.node.mount.opts.fs.open(l,i.flags)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},close(i){try{i.node.mount.opts.fs.close(i.nfd)}catch(l){throw l.code?new o.ErrnoError(q0[l.code]):l}},read(i,l,B,p,j){try{return i.node.mount.opts.fs.read(i.nfd,l,B,p,j)}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},write(i,l,B,p,j){try{return i.node.mount.opts.fs.write(i.nfd,l,B,p,j)}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},llseek(i,l,B){var p=l;if(B===1)p+=i.position;else if(B===2&&o.isFile(i.node.mode))try{var j=i.node.node_ops.getattr(i.node);p+=j.size}catch(w){throw new o.ErrnoError(q0[w.code])}if(p<0)throw new o.ErrnoError(q0.EINVAL);return p}}},dA=async i=>{var l=await h(i);return new Uint8Array(l)},$e=(...i)=>o.createDataFile(...i),Cx=i=>i,fx=0,m0=null,Te=i=>{if(fx--,n.monitorRunDependencies?.(fx),fx==0&&m0){var l=m0;m0=null,l()}},Tx=i=>{fx++,n.monitorRunDependencies?.(fx)},ce=[],uA=async(i,l)=>{typeof Browser<"u"&&Browser.init();for(var B of ce)if(B.canHandle(l))return B.handle(i,l);return i},qA=async(i,l,B,p,j,w,I,K)=>{var v0=l?Bx.resolve(c0.join2(i,l)):i,w0=Cx(`cp ${v0}`);Tx(w0);try{var Y0=B;typeof B=="string"&&(Y0=await dA(B)),Y0=await uA(Y0,v0),K?.(),w||$e(i,l,Y0,p,j,I)}finally{Te(w0)}},Hr=(i,l,B,p,j,w,I,K,v0,w0)=>{qA(i,l,B,p,j,K,v0,w0).then(w).catch(I)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(i){px(this,"name","ErrnoError"),this.errno=i}},FSStream:class{constructor(){px(this,"shared",{})}get object(){return this.node}set object(i){this.node=i}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(i){this.shared.flags=i}get position(){return this.shared.position}set position(i){this.shared.position=i}},FSNode:class{constructor(i,l,B,p){px(this,"node_ops",{}),px(this,"stream_ops",{}),px(this,"readMode",365),px(this,"writeMode",146),px(this,"mounted",null),i||(i=this),this.parent=i,this.mount=i.mount,this.id=o.nextInode++,this.name=l,this.mode=B,this.rdev=p,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(i){i?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(i){i?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(i,l={}){if(!i)throw new o.ErrnoError(44);l.follow_mount??(l.follow_mount=!0),c0.isAbs(i)||(i=o.cwd()+"/"+i);x:for(var B=0;B<40;B++){for(var p=i.split("/").filter(w0=>!!w0),j=o.root,w="/",I=0;I<p.length;I++){var K=I===p.length-1;if(K&&l.parent)break;if(p[I]!=="."){if(p[I]===".."){if(w=c0.dirname(w),o.isRoot(j)){i=w+"/"+p.slice(I+1).join("/"),B--;continue x}else j=j.parent;continue}w=c0.join2(w,p[I]);try{j=o.lookupNode(j,p[I])}catch(w0){if(w0?.errno===44&&K&&l.noent_okay)return{path:w};throw w0}if(o.isMountpoint(j)&&(!K||l.follow_mount)&&(j=j.mounted.root),o.isLink(j.mode)&&(!K||l.follow)){if(!j.node_ops.readlink)throw new o.ErrnoError(52);var v0=j.node_ops.readlink(j);c0.isAbs(v0)||(v0=c0.dirname(w)+"/"+v0),i=v0+"/"+p.slice(I+1).join("/");continue x}}}return{path:w,node:j}}throw new o.ErrnoError(32)},getPath(i){for(var l;;){if(o.isRoot(i)){var B=i.mount.mountpoint;return l?B[B.length-1]!=="/"?`${B}/${l}`:B+l:B}l=l?`${i.name}/${l}`:i.name,i=i.parent}},hashName(i,l){for(var B=0,p=0;p<l.length;p++)B=(B<<5)-B+l.charCodeAt(p)|0;return(i+B>>>0)%o.nameTable.length},hashAddNode(i){var l=o.hashName(i.parent.id,i.name);i.name_next=o.nameTable[l],o.nameTable[l]=i},hashRemoveNode(i){var l=o.hashName(i.parent.id,i.name);if(o.nameTable[l]===i)o.nameTable[l]=i.name_next;else for(var B=o.nameTable[l];B;){if(B.name_next===i){B.name_next=i.name_next;break}B=B.name_next}},lookupNode(i,l){var B=o.mayLookup(i);if(B)throw new o.ErrnoError(B);for(var p=o.hashName(i.id,l),j=o.nameTable[p];j;j=j.name_next){var w=j.name;if(j.parent.id===i.id&&w===l)return j}return o.lookup(i,l)},createNode(i,l,B,p){var j=new o.FSNode(i,l,B,p);return o.hashAddNode(j),j},destroyNode(i){o.hashRemoveNode(i)},isRoot(i){return i===i.parent},isMountpoint(i){return!!i.mounted},isFile(i){return(i&61440)===32768},isDir(i){return(i&61440)===16384},isLink(i){return(i&61440)===40960},isChrdev(i){return(i&61440)===8192},isBlkdev(i){return(i&61440)===24576},isFIFO(i){return(i&61440)===4096},isSocket(i){return(i&49152)===49152},flagsToPermissionString(i){var l=["r","w","rw"][i&3];return i&512&&(l+="w"),l},nodePermissions(i,l){return o.ignorePermissions?0:l.includes("r")&&!(i.mode&292)||l.includes("w")&&!(i.mode&146)||l.includes("x")&&!(i.mode&73)?2:0},mayLookup(i){if(!o.isDir(i.mode))return 54;var l=o.nodePermissions(i,"x");return l||(i.node_ops.lookup?0:2)},mayCreate(i,l){if(!o.isDir(i.mode))return 54;try{var B=o.lookupNode(i,l);return 20}catch{}return o.nodePermissions(i,"wx")},mayDelete(i,l,B){var p;try{p=o.lookupNode(i,l)}catch(w){return w.errno}var j=o.nodePermissions(i,"wx");if(j)return j;if(B){if(!o.isDir(p.mode))return 54;if(o.isRoot(p)||o.getPath(p)===o.cwd())return 10}else if(o.isDir(p.mode))return 31;return 0},mayOpen(i,l){if(!i)return 44;if(o.isLink(i.mode))return 32;var B=o.flagsToPermissionString(l);return o.isDir(i.mode)&&(B!=="r"||l&576)?31:o.nodePermissions(i,B)},checkOpExists(i,l){if(!i)throw new o.ErrnoError(l);return i},MAX_OPEN_FDS:4096,nextfd(){for(var i=0;i<=o.MAX_OPEN_FDS;i++)if(!o.streams[i])return i;throw new o.ErrnoError(33)},getStreamChecked(i){var l=o.getStream(i);if(!l)throw new o.ErrnoError(8);return l},getStream:i=>o.streams[i],createStream(i,l=-1){return i=Object.assign(new o.FSStream,i),l==-1&&(l=o.nextfd()),i.fd=l,o.streams[l]=i,i},closeStream(i){o.streams[i]=null},dupStream(i,l=-1){var B=o.createStream(i,l);return B.stream_ops?.dup?.(B),B},doSetAttr(i,l,B){var p=i?.stream_ops.setattr,j=p?i:l;p??(p=l.node_ops.setattr),o.checkOpExists(p,63);try{p(j,B)}catch(w){throw w instanceof RangeError?new o.ErrnoError(22):w}},chrdev_stream_ops:{open(i){var l=o.getDevice(i.node.rdev);i.stream_ops=l.stream_ops,i.stream_ops.open?.(i)},llseek(){throw new o.ErrnoError(70)}},major:i=>i>>8,minor:i=>i&255,makedev:(i,l)=>i<<8|l,registerDevice(i,l){o.devices[i]={stream_ops:l}},getDevice:i=>o.devices[i],getMounts(i){for(var l=[],B=[i];B.length;){var p=B.pop();l.push(p),B.push(...p.mounts)}return l},syncfs(i,l){typeof i=="function"&&(l=i,i=!1),o.syncFSRequests++,o.syncFSRequests>1&&R(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var B=o.getMounts(o.root.mount),p=0;function j(K){return o.syncFSRequests--,l(K)}function w(K){if(K)return w.errored?void 0:(w.errored=!0,j(K));++p>=B.length&&j(null)}for(var I of B)I.type.syncfs?I.type.syncfs(I,i,w):w(null)},mount(i,l,B){var p=B==="/",j=!B,w;if(p&&o.root)throw new o.ErrnoError(10);if(!p&&!j){var I=o.lookupPath(B,{follow_mount:!1});if(B=I.path,w=I.node,o.isMountpoint(w))throw new o.ErrnoError(10);if(!o.isDir(w.mode))throw new o.ErrnoError(54)}var K={type:i,opts:l,mountpoint:B,mounts:[]},v0=i.mount(K);return v0.mount=K,K.root=v0,p?o.root=v0:w&&(w.mounted=K,w.mount&&w.mount.mounts.push(K)),v0},unmount(i){var l=o.lookupPath(i,{follow_mount:!1});if(!o.isMountpoint(l.node))throw new o.ErrnoError(28);var B=l.node,p=B.mounted,j=o.getMounts(p);for(var[w,I]of Object.entries(o.nameTable))for(;I;){var K=I.name_next;j.includes(I.mount)&&o.destroyNode(I),I=K}B.mounted=null;var v0=B.mount.mounts.indexOf(p);B.mount.mounts.splice(v0,1)},lookup(i,l){return i.node_ops.lookup(i,l)},mknod(i,l,B){var p=o.lookupPath(i,{parent:!0}),j=p.node,w=c0.basename(i);if(!w)throw new o.ErrnoError(28);if(w==="."||w==="..")throw new o.ErrnoError(20);var I=o.mayCreate(j,w);if(I)throw new o.ErrnoError(I);if(!j.node_ops.mknod)throw new o.ErrnoError(63);return j.node_ops.mknod(j,w,l,B)},statfs(i){return o.statfsNode(o.lookupPath(i,{follow:!0}).node)},statfsStream(i){return o.statfsNode(i.node)},statfsNode(i){var l={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return i.node_ops.statfs&&Object.assign(l,i.node_ops.statfs(i.mount.opts.root)),l},create(i,l=438){return l&=4095,l|=32768,o.mknod(i,l,0)},mkdir(i,l=511){return l&=1023,l|=16384,o.mknod(i,l,0)},mkdirTree(i,l){var B=i.split("/"),p="";for(var j of B)if(j){(p||c0.isAbs(i))&&(p+="/"),p+=j;try{o.mkdir(p,l)}catch(w){if(w.errno!=20)throw w}}},mkdev(i,l,B){return typeof B>"u"&&(B=l,l=438),l|=8192,o.mknod(i,l,B)},symlink(i,l){if(!Bx.resolve(i))throw new o.ErrnoError(44);var B=o.lookupPath(l,{parent:!0}),p=B.node;if(!p)throw new o.ErrnoError(44);var j=c0.basename(l),w=o.mayCreate(p,j);if(w)throw new o.ErrnoError(w);if(!p.node_ops.symlink)throw new o.ErrnoError(63);return p.node_ops.symlink(p,j,i)},rename(i,l){var B=c0.dirname(i),p=c0.dirname(l),j=c0.basename(i),w=c0.basename(l),I,K,v0;if(I=o.lookupPath(i,{parent:!0}),K=I.node,I=o.lookupPath(l,{parent:!0}),v0=I.node,!K||!v0)throw new o.ErrnoError(44);if(K.mount!==v0.mount)throw new o.ErrnoError(75);var w0=o.lookupNode(K,j),Y0=Bx.relative(i,p);if(Y0.charAt(0)!==".")throw new o.ErrnoError(28);if(Y0=Bx.relative(l,B),Y0.charAt(0)!==".")throw new o.ErrnoError(55);var L0;try{L0=o.lookupNode(v0,w)}catch{}if(w0!==L0){var N0=o.isDir(w0.mode),h0=o.mayDelete(K,j,N0);if(h0)throw new o.ErrnoError(h0);if(h0=L0?o.mayDelete(v0,w,N0):o.mayCreate(v0,w),h0)throw new o.ErrnoError(h0);if(!K.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(w0)||L0&&o.isMountpoint(L0))throw new o.ErrnoError(10);if(v0!==K&&(h0=o.nodePermissions(K,"w"),h0))throw new o.ErrnoError(h0);o.hashRemoveNode(w0);try{K.node_ops.rename(w0,v0,w),w0.parent=v0}catch(cx){throw cx}finally{o.hashAddNode(w0)}}},rmdir(i){var l=o.lookupPath(i,{parent:!0}),B=l.node,p=c0.basename(i),j=o.lookupNode(B,p),w=o.mayDelete(B,p,!0);if(w)throw new o.ErrnoError(w);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(j))throw new o.ErrnoError(10);B.node_ops.rmdir(B,p),o.destroyNode(j)},readdir(i){var l=o.lookupPath(i,{follow:!0}),B=l.node,p=o.checkOpExists(B.node_ops.readdir,54);return p(B)},unlink(i){var l=o.lookupPath(i,{parent:!0}),B=l.node;if(!B)throw new o.ErrnoError(44);var p=c0.basename(i),j=o.lookupNode(B,p),w=o.mayDelete(B,p,!1);if(w)throw new o.ErrnoError(w);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(j))throw new o.ErrnoError(10);B.node_ops.unlink(B,p),o.destroyNode(j)},readlink(i){var l=o.lookupPath(i),B=l.node;if(!B)throw new o.ErrnoError(44);if(!B.node_ops.readlink)throw new o.ErrnoError(28);return B.node_ops.readlink(B)},stat(i,l){var B=o.lookupPath(i,{follow:!l}),p=B.node,j=o.checkOpExists(p.node_ops.getattr,63);return j(p)},fstat(i){var l=o.getStreamChecked(i),B=l.node,p=l.stream_ops.getattr,j=p?l:B;return p??(p=B.node_ops.getattr),o.checkOpExists(p,63),p(j)},lstat(i){return o.stat(i,!0)},doChmod(i,l,B,p){o.doSetAttr(i,l,{mode:B&4095|l.mode&-4096,ctime:Date.now(),dontFollow:p})},chmod(i,l,B){var p;if(typeof i=="string"){var j=o.lookupPath(i,{follow:!B});p=j.node}else p=i;o.doChmod(null,p,l,B)},lchmod(i,l){o.chmod(i,l,!0)},fchmod(i,l){var B=o.getStreamChecked(i);o.doChmod(B,B.node,l,!1)},doChown(i,l,B){o.doSetAttr(i,l,{timestamp:Date.now(),dontFollow:B})},chown(i,l,B,p){var j;if(typeof i=="string"){var w=o.lookupPath(i,{follow:!p});j=w.node}else j=i;o.doChown(null,j,p)},lchown(i,l,B){o.chown(i,l,B,!0)},fchown(i,l,B){var p=o.getStreamChecked(i);o.doChown(p,p.node,!1)},doTruncate(i,l,B){if(o.isDir(l.mode))throw new o.ErrnoError(31);if(!o.isFile(l.mode))throw new o.ErrnoError(28);var p=o.nodePermissions(l,"w");if(p)throw new o.ErrnoError(p);o.doSetAttr(i,l,{size:B,timestamp:Date.now()})},truncate(i,l){if(l<0)throw new o.ErrnoError(28);var B;if(typeof i=="string"){var p=o.lookupPath(i,{follow:!0});B=p.node}else B=i;o.doTruncate(null,B,l)},ftruncate(i,l){var B=o.getStreamChecked(i);if(l<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,l)},utime(i,l,B){var p=o.lookupPath(i,{follow:!0}),j=p.node,w=o.checkOpExists(j.node_ops.setattr,63);w(j,{atime:l,mtime:B})},open(i,l,B=438){if(i==="")throw new o.ErrnoError(44);l=PA(l),l&64?B=B&4095|32768:B=0;var p,j;if(typeof i=="object")p=i;else{j=i.endsWith("/");var w=o.lookupPath(i,{follow:!(l&131072),noent_okay:!0});p=w.node,i=w.path}var I=!1;if(l&64)if(p){if(l&128)throw new o.ErrnoError(20)}else{if(j)throw new o.ErrnoError(31);p=o.mknod(i,B|511,0),I=!0}if(!p)throw new o.ErrnoError(44);if(o.isChrdev(p.mode)&&(l&=-513),l&65536&&!o.isDir(p.mode))throw new o.ErrnoError(54);if(!I){var K=o.mayOpen(p,l);if(K)throw new o.ErrnoError(K)}l&512&&!I&&o.truncate(p,0),l&=-131713;var v0=o.createStream({node:p,path:o.getPath(p),flags:l,seekable:!0,position:0,stream_ops:p.stream_ops,ungotten:[],error:!1});return v0.stream_ops.open&&v0.stream_ops.open(v0),I&&o.chmod(p,B&511),v0},close(i){if(o.isClosed(i))throw new o.ErrnoError(8);i.getdents&&(i.getdents=null);try{i.stream_ops.close&&i.stream_ops.close(i)}catch(l){throw l}finally{o.closeStream(i.fd)}i.fd=null},isClosed(i){return i.fd===null},llseek(i,l,B){if(o.isClosed(i))throw new o.ErrnoError(8);if(!i.seekable||!i.stream_ops.llseek)throw new o.ErrnoError(70);if(B!=0&&B!=1&&B!=2)throw new o.ErrnoError(28);return i.position=i.stream_ops.llseek(i,l,B),i.ungotten=[],i.position},read(i,l,B,p,j){if(p<0||j<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.read)throw new o.ErrnoError(28);var w=typeof j<"u";if(!w)j=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var I=i.stream_ops.read(i,l,B,p,j);return w||(i.position+=I),I},write(i,l,B,p,j,w){if(p<0||j<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.write)throw new o.ErrnoError(28);i.seekable&&i.flags&1024&&o.llseek(i,0,2);var I=typeof j<"u";if(!I)j=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var K=i.stream_ops.write(i,l,B,p,j,w);return I||(i.position+=K),K},mmap(i,l,B,p,j){if((p&2)!==0&&(j&2)===0&&(i.flags&2097155)!==2)throw new o.ErrnoError(2);if((i.flags&2097155)===1)throw new o.ErrnoError(2);if(!i.stream_ops.mmap)throw new o.ErrnoError(43);if(!l)throw new o.ErrnoError(28);return i.stream_ops.mmap(i,l,B,p,j)},msync(i,l,B,p,j){return i.stream_ops.msync?i.stream_ops.msync(i,l,B,p,j):0},ioctl(i,l,B){if(!i.stream_ops.ioctl)throw new o.ErrnoError(59);return i.stream_ops.ioctl(i,l,B)},readFile(i,l={}){l.flags=l.flags||0,l.encoding=l.encoding||"binary",l.encoding!=="utf8"&&l.encoding!=="binary"&&C0(`Invalid encoding type "${l.encoding}"`);var B=o.open(i,l.flags),p=o.stat(i),j=p.size,w=new Uint8Array(j);return o.read(B,w,0,j,0),l.encoding==="utf8"&&(w=CA(w)),o.close(B),w},writeFile(i,l,B={}){B.flags=B.flags||577;var p=o.open(i,B.flags,B.mode);l=Xx(l),o.write(p,l,0,l.byteLength,void 0,B.canOwn),o.close(p)},cwd:()=>o.currentPath,chdir(i){var l=o.lookupPath(i,{follow:!0});if(l.node===null)throw new o.ErrnoError(44);if(!o.isDir(l.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(l.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=l.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(p,j,w,I,K)=>I,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var i=new Uint8Array(1024),l=0,B=()=>(l===0&&(we(i),l=i.byteLength),i[--l]);o.createDevice("/dev","random",B),o.createDevice("/dev","urandom",B),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var i=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var l=o.createNode(i,"fd",16895,73);return l.stream_ops={llseek:s0.stream_ops.llseek},l.node_ops={lookup(B,p){var j=+p,w=o.getStreamChecked(j),I={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>w.path},id:j+1};return I.parent=I,I},readdir(){return Array.from(o.streams.entries()).filter(([B,p])=>p).map(([B,p])=>B.toString())}},l}},{},"/proc/self/fd")},createStandardStreams(i,l,B){i?o.createDevice("/dev","stdin",i):o.symlink("/dev/tty","/dev/stdin"),l?o.createDevice("/dev","stdout",null,l):o.symlink("/dev/tty","/dev/stdout"),B?o.createDevice("/dev","stderr",null,B):o.symlink("/dev/tty1","/dev/stderr");var p=o.open("/dev/stdin",0),j=o.open("/dev/stdout",1),w=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(s0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:s0,PROXYFS:y0}},init(i,l,B){o.initialized=!0,i??(i=n.stdin),l??(l=n.stdout),B??(B=n.stderr),o.createStandardStreams(i,l,B)},quit(){o.initialized=!1,b(0);for(var i of o.streams)i&&o.close(i)},findObject(i,l){var B=o.analyzePath(i,l);return B.exists?B.object:null},analyzePath(i,l){try{var B=o.lookupPath(i,{follow:!l});i=B.path}catch{}var p={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var B=o.lookupPath(i,{parent:!0});p.parentExists=!0,p.parentPath=B.path,p.parentObject=B.node,p.name=c0.basename(i),B=o.lookupPath(i,{follow:!l}),p.exists=!0,p.path=B.path,p.object=B.node,p.name=B.node.name,p.isRoot=B.path==="/"}catch(j){p.error=j.errno}return p},createPath(i,l,B,p){i=typeof i=="string"?i:o.getPath(i);for(var j=l.split("/").reverse();j.length;){var w=j.pop();if(w){var I=c0.join2(i,w);try{o.mkdir(I)}catch(K){if(K.errno!=20)throw K}i=I}}return I},createFile(i,l,B,p,j){var w=c0.join2(typeof i=="string"?i:o.getPath(i),l),I=sA(p,j);return o.create(w,I)},createDataFile(i,l,B,p,j,w){var I=l;i&&(i=typeof i=="string"?i:o.getPath(i),I=l?c0.join2(i,l):i);var K=sA(p,j),v0=o.create(I,K);if(B){B=Xx(B),o.chmod(v0,K|146);var w0=o.open(v0,577);o.write(w0,B,0,B.length,0,w),o.close(w0),o.chmod(v0,K)}},createDevice(i,l,B,p){var j,w=c0.join2(typeof i=="string"?i:o.getPath(i),l),I=sA(!!B,!!p);(j=o.createDevice).major??(j.major=64);var K=o.makedev(o.createDevice.major++,0);return o.registerDevice(K,{open(v0){v0.seekable=!1},close(v0){p?.buffer?.length&&p(10)},read(v0,w0,Y0,L0,N0){for(var h0=0,cx=0;cx<L0;cx++){var _x;try{_x=B()}catch{throw new o.ErrnoError(29)}if(_x===void 0&&h0===0)throw new o.ErrnoError(6);if(_x==null)break;h0++,w0[Y0+cx]=_x}return h0&&(v0.node.atime=Date.now()),h0},write(v0,w0,Y0,L0,N0){for(var h0=0;h0<L0;h0++)try{p(w0[Y0+h0])}catch{throw new o.ErrnoError(29)}return L0&&(v0.node.mtime=v0.node.ctime=Date.now()),h0}}),o.mkdev(w,I,K)},forceLoadFile(i){if(i.isDevice||i.isFolder||i.link||i.contents)return!0;if(globalThis.XMLHttpRequest)C0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{i.contents=S(i.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(i,l,B,p,j){class w{constructor(){px(this,"lengthKnown",!1),px(this,"chunks",[])}get(N0){if(!(N0>this.length-1||N0<0)){var h0=N0%this.chunkSize,cx=N0/this.chunkSize|0;return this.getter(cx)[h0]}}setDataGetter(N0){this.getter=N0}cacheLength(){var N0=new XMLHttpRequest;N0.open("HEAD",B,!1),N0.send(null),N0.status>=200&&N0.status<300||N0.status===304||C0("Couldn't load "+B+". Status: "+N0.status);var h0=Number(N0.getResponseHeader("Content-length")),cx,_x=(cx=N0.getResponseHeader("Accept-Ranges"))&&cx==="bytes",Hx=(cx=N0.getResponseHeader("Content-Encoding"))&&cx==="gzip",Yx=1024*1024;_x||(Yx=h0);var Qx=(iA,De)=>{iA>De&&C0("invalid range ("+iA+", "+De+") or no bytes requested!"),De>h0-1&&C0("only "+h0+" bytes available! programmer error!");var jx=new XMLHttpRequest;return jx.open("GET",B,!1),h0!==Yx&&jx.setRequestHeader("Range","bytes="+iA+"-"+De),jx.responseType="arraybuffer",jx.overrideMimeType&&jx.overrideMimeType("text/plain; charset=x-user-defined"),jx.send(null),jx.status>=200&&jx.status<300||jx.status===304||C0("Couldn't load "+B+". Status: "+jx.status),jx.response!==void 0?new Uint8Array(jx.response||[]):XA(jx.responseText||"",!0)},Le=this;Le.setDataGetter(iA=>{var De=iA*Yx,jx=(iA+1)*Yx-1;return jx=Math.min(jx,h0-1),typeof Le.chunks[iA]>"u"&&(Le.chunks[iA]=Qx(De,jx)),typeof Le.chunks[iA]>"u"&&C0("doXHR failed!"),Le.chunks[iA]}),(Hx||!h0)&&(Yx=h0=1,h0=this.getter(0).length,Yx=h0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h0,this._chunkSize=Yx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||C0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var I=new w,K={isDevice:!1,contents:I}}else var K={isDevice:!1,url:B};var v0=o.createFile(i,l,K,p,j);K.contents?v0.contents=K.contents:K.url&&(v0.contents=null,v0.url=K.url),Object.defineProperties(v0,{usedBytes:{get:function(){return this.contents.length}}});var w0={};for(let[L0,N0]of Object.entries(v0.stream_ops))w0[L0]=(...h0)=>(o.forceLoadFile(v0),N0(...h0));function Y0(L0,N0,h0,cx,_x){var Hx=L0.node.contents;if(_x>=Hx.length)return 0;var Yx=Math.min(Hx.length-_x,cx);if(Hx.slice)for(var Qx=0;Qx<Yx;Qx++)N0[h0+Qx]=Hx[_x+Qx];else for(var Qx=0;Qx<Yx;Qx++)N0[h0+Qx]=Hx.get(_x+Qx);return Yx}return w0.read=(L0,N0,h0,cx,_x)=>(o.forceLoadFile(v0),Y0(L0,N0,h0,cx,_x)),w0.mmap=(L0,N0,h0,cx,_x)=>{o.forceLoadFile(v0);var Hx=TA(N0);if(!Hx)throw new o.ErrnoError(48);return Y0(L0,Fx,Hx,N0,h0),{ptr:Hx,allocated:!0}},v0.stream_ops=w0,v0}},k0={currentUmask:18,calculateAt(i,l,B){if(c0.isAbs(l))return l;var p;if(i===-100)p=o.cwd();else{var j=k0.getStreamFromFD(i);p=j.path}if(l.length==0){if(!B)throw new o.ErrnoError(44);return p}return p+"/"+l},writeStat(i,l){f0[i>>2]=l.dev,f0[i+4>>2]=l.mode,f0[i+8>>2]=l.nlink,f0[i+12>>2]=l.uid,f0[i+16>>2]=l.gid,f0[i+20>>2]=l.rdev,K0[i+24>>3]=BigInt(l.size),O0[i+32>>2]=4096,O0[i+36>>2]=l.blocks;var B=l.atime.getTime(),p=l.mtime.getTime(),j=l.ctime.getTime();return K0[i+40>>3]=BigInt(Math.floor(B/1e3)),f0[i+48>>2]=B%1e3*1e3*1e3,K0[i+56>>3]=BigInt(Math.floor(p/1e3)),f0[i+64>>2]=p%1e3*1e3*1e3,K0[i+72>>3]=BigInt(Math.floor(j/1e3)),f0[i+80>>2]=j%1e3*1e3*1e3,K0[i+88>>3]=BigInt(l.ino),0},writeStatFs(i,l){f0[i+4>>2]=l.bsize,f0[i+60>>2]=l.bsize,K0[i+8>>3]=BigInt(l.blocks),K0[i+16>>3]=BigInt(l.bfree),K0[i+24>>3]=BigInt(l.bavail),K0[i+32>>3]=BigInt(l.files),K0[i+40>>3]=BigInt(l.ffree),f0[i+48>>2]=l.fsid,f0[i+64>>2]=l.flags,f0[i+56>>2]=l.namelen},doMsync(i,l,B,p,j){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(p&2)return 0;var w=rA.slice(i,i+B);o.msync(l,w,j,B,p)},getStreamFromFD(i){var l=o.getStreamChecked(i);return l},varargs:void 0,getStr(i){var l=nA(i);return l}};function Pe(i,l,B,p){try{if(l=k0.getStr(l),l=k0.calculateAt(i,l),B&-8)return-28;var j=o.lookupPath(l,{follow:!0}),w=j.node;if(!w)return-44;var I="";return B&4&&(I+="r"),B&2&&(I+="w"),B&1&&(I+="x"),I&&o.nodePermissions(w,I)?-2:0}catch(K){if(typeof o>"u"||K.name!=="ErrnoError")throw K;return-K.errno}}var NA=()=>{var i=O0[+k0.varargs>>2];return k0.varargs+=4,i},DA=NA;function Jr(i,l,B){k0.varargs=B;try{var p=k0.getStreamFromFD(i);switch(l){case 0:{var j=NA();if(j<0)return-28;for(;o.streams[j];)j++;var w;return w=o.dupStream(p,j),w.fd}case 1:case 2:return 0;case 3:return p.flags;case 4:{var j=NA(),I=289792;return p.flags=p.flags&~I|j&I,0}case 12:{var j=DA(),K=0;return J0[j+K>>1]=2,0}case 13:case 14:return 0}return-28}catch(v0){if(typeof o>"u"||v0.name!=="ErrnoError")throw v0;return-v0.errno}}var Ee=(i,l,B)=>Se(i,rA,l,B);function sr(i,l){try{if(l===0)return-28;var B=o.cwd(),p=WA(B)+1;return l<p?-68:(Ee(B,i,l),p)}catch(j){if(typeof o>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function ir(i,l,B){k0.varargs=B;try{var p=k0.getStreamFromFD(i);switch(l){case 21509:return p.tty?0:-59;case 21505:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcgets){var j=p.tty.ops.ioctl_tcgets(p),w=DA();O0[w>>2]=j.c_iflag||0,O0[w+4>>2]=j.c_oflag||0,O0[w+8>>2]=j.c_cflag||0,O0[w+12>>2]=j.c_lflag||0;for(var I=0;I<32;I++)Fx[w+I+17]=j.c_cc[I]||0;return 0}return 0}case 21510:case 21511:case 21512:return p.tty?0:-59;case 21506:case 21507:case 21508:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcsets){for(var w=DA(),K=O0[w>>2],v0=O0[w+4>>2],w0=O0[w+8>>2],Y0=O0[w+12>>2],L0=[],I=0;I<32;I++)L0.push(Fx[w+I+17]);return p.tty.ops.ioctl_tcsets(p.tty,l,{c_iflag:K,c_oflag:v0,c_cflag:w0,c_lflag:Y0,c_cc:L0})}return 0}case 21519:{if(!p.tty)return-59;var w=DA();return O0[w>>2]=0,0}case 21520:return p.tty?-28:-59;case 21537:case 21531:{var w=DA();return o.ioctl(p,l,w)}case 21523:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tiocgwinsz){var N0=p.tty.ops.ioctl_tiocgwinsz(p.tty),w=DA();J0[w>>1]=N0[0],J0[w+2>>1]=N0[1]}return 0}case 21524:return p.tty?0:-59;case 21515:return p.tty?0:-59;default:return-28}}catch(h0){if(typeof o>"u"||h0.name!=="ErrnoError")throw h0;return-h0.errno}}function Kr(i,l,B,p){k0.varargs=p;try{l=k0.getStr(l),l=k0.calculateAt(i,l);var j=p?NA():0;return B&64&&(j&=~k0.currentUmask),o.open(l,B,j).fd}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return-w.errno}}function zr(i,l,B,p){try{if(l=k0.getStr(l),l=k0.calculateAt(i,l),p<=0)return-28;var j=o.readlink(l),w=Math.min(p,WA(j)),I=Fx[B+w];return Ee(j,B,p+1),Fx[B+w]=I,w}catch(K){if(typeof o>"u"||K.name!=="ErrnoError")throw K;return-K.errno}}function Vr(i,l,B,p){try{return l=k0.getStr(l),p=k0.getStr(p),l=k0.calculateAt(i,l),p=k0.calculateAt(B,p),o.rename(l,p),0}catch(j){if(typeof o>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function Be(i){try{return i=k0.getStr(i),o.rmdir(i),0}catch(l){if(typeof o>"u"||l.name!=="ErrnoError")throw l;return-l.errno}}function ar(i,l,B){try{if(l=k0.getStr(l),l=k0.calculateAt(i,l),!B)o.unlink(l);else if(B===512)o.rmdir(l);else return-28;return 0}catch(p){if(typeof o>"u"||p.name!=="ErrnoError")throw p;return-p.errno}}var YA=()=>{throw new W},Ce=()=>performance.now(),Wr=()=>Date.now(),or=1,Xr=i=>i>=0&&i<=3,QA=9007199254740992,qe=-9007199254740992,Fr=i=>i<qe||i>QA?NaN:Number(i);function vr(i,l,B){if(l=Fr(l),!Xr(i))return 28;var p;if(i===0)p=Wr();else if(or)p=Ce();else return 52;var j=Math.round(p*1e3*1e3);return K0[B>>3]=BigInt(j),0}var Yr=()=>2147483648,lr=(i,l)=>Math.ceil(i/l)*l,Qr=i=>{var l=I0.buffer.byteLength,B=(i-l+65535)/65536|0;try{return I0.grow(B),Z(),1}catch{}},Zr=i=>{var l=rA.length;i>>>=0;var B=Yr();if(i>B)return!1;for(var p=1;p<=4;p*=2){var j=l*(1+.2/p);j=Math.min(j,i+100663296);var w=Math.min(B,lr(Math.max(i,j),65536)),I=Qr(w);if(I)return!0}return!1};function de(i){try{var l=k0.getStreamFromFD(i);return o.close(l),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var xt=(i,l,B,p)=>{for(var j=0,w=0;w<B;w++){var I=f0[l>>2],K=f0[l+4>>2];l+=8;var v0=o.read(i,Fx,I,K,p);if(v0<0)return-1;if(j+=v0,v0<K)break;typeof p<"u"&&(p+=v0)}return j};function At(i,l,B,p){try{var j=k0.getStreamFromFD(i),w=xt(j,l,B);return f0[p>>2]=w,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}function fr(i,l,B,p){l=Fr(l);try{if(isNaN(l))return 22;var j=k0.getStreamFromFD(i);return o.llseek(j,l,B),K0[p>>3]=BigInt(j.position),j.getdents&&l===0&&B===0&&(j.getdents=null),0}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return w.errno}}var cr=(i,l,B,p)=>{for(var j=0,w=0;w<B;w++){var I=f0[l>>2],K=f0[l+4>>2];l+=8;var v0=o.write(i,Fx,I,K,p);if(v0<0)return-1;if(j+=v0,v0<K)break;typeof p<"u"&&(p+=v0)}return j};function ZA(i,l,B,p){try{var j=k0.getStreamFromFD(i),w=cr(j,l,B);return f0[p>>2]=w,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}var Er=0,xe=()=>fe||Er>0,Ne=i=>{M=i,xe()||(n.onExit?.(i),t0=!0),m(i,new eA(i))},Px=(i,l)=>{M=i,xe()||l0(),Ne(i)},et=i=>{if(i instanceof eA||i=="unwind")return M;m(1,i)},IA=i=>V(i),Ae=i=>{var l=WA(i)+1,B=IA(l);return Ee(i,B,l),B},Ie=[],dx=i=>{var l=Ie[i];return l||(Ie[i]=l=T0.get(i)),l},ue=(...i)=>o.createPath(...i),ee=(...i)=>o.unlink(...i),a=(...i)=>o.createLazyFile(...i),f=(...i)=>o.createDevice(...i);if(o.createPreloadedFile=Hr,o.preloadFile=qA,o.staticInit(),n.noExitRuntime&&(fe=n.noExitRuntime),n.preloadPlugins&&(ce=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(U=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=Mt,n.addRunDependency=Tx,n.removeRunDependency=Te,n.FS_preloadFile=qA,n.FS_unlink=ee,n.FS_createPath=ue,n.FS_createDevice=f,n.FS=o,n.FS_createDataFile=$e,n.FS_createLazyFile=a,n.PROXYFS=y0;var d,b,y,$,G,V,F0,u0,z0,I0,T0;function j0(i){d=n._main=i.__main_argc_argv,b=i.fflush,y=i.__funcs_on_exit,$=i.setThrew,G=i._emscripten_stack_restore,V=i._emscripten_stack_alloc,F0=i.emscripten_stack_get_current,u0=I0=i.memory,z0=T0=i.__indirect_function_table}var rx={__assert_fail:$A,__syscall_faccessat:Pe,__syscall_fcntl64:Jr,__syscall_getcwd:sr,__syscall_ioctl:ir,__syscall_openat:Kr,__syscall_readlinkat:zr,__syscall_renameat:Vr,__syscall_rmdir:Be,__syscall_unlinkat:ar,_emscripten_throw_longjmp:YA,clock_time_get:vr,emscripten_resize_heap:Zr,fd_close:de,fd_read:At,fd_seek:fr,fd_write:ZA,invoke_i:re,invoke_ii:Lx,invoke_iii:Rx,invoke_iiid:Vn,invoke_iiii:Ux,invoke_iiiii:vx,invoke_iiiiii:Wn,invoke_iijii:Kn,invoke_v:mx,invoke_vi:zn,invoke_vii:qx,invoke_viii:It,invoke_viiii:pA,invoke_viiiii:Nt};function mx(i){var l=g0();try{dx(i)()}catch(B){if(ax(l),!(B instanceof L))throw B;$(1,0)}}function qx(i,l,B){var p=g0();try{dx(i)(l,B)}catch(j){if(ax(p),!(j instanceof L))throw j;$(1,0)}}function Lx(i,l){var B=g0();try{return dx(i)(l)}catch(p){if(ax(B),!(p instanceof L))throw p;$(1,0)}}function Rx(i,l,B){var p=g0();try{return dx(i)(l,B)}catch(j){if(ax(p),!(j instanceof L))throw j;$(1,0)}}function re(i){var l=g0();try{return dx(i)()}catch(B){if(ax(l),!(B instanceof L))throw B;$(1,0)}}function Ux(i,l,B,p){var j=g0();try{return dx(i)(l,B,p)}catch(w){if(ax(j),!(w instanceof L))throw w;$(1,0)}}function pA(i,l,B,p,j){var w=g0();try{dx(i)(l,B,p,j)}catch(I){if(ax(w),!(I instanceof L))throw I;$(1,0)}}function vx(i,l,B,p,j){var w=g0();try{return dx(i)(l,B,p,j)}catch(I){if(ax(w),!(I instanceof L))throw I;$(1,0)}}function Nt(i,l,B,p,j,w){var I=g0();try{dx(i)(l,B,p,j,w)}catch(K){if(ax(I),!(K instanceof L))throw K;$(1,0)}}function Kn(i,l,B,p,j){var w=g0();try{return dx(i)(l,B,p,j)}catch(I){if(ax(w),!(I instanceof L))throw I;$(1,0)}}function zn(i,l){var B=g0();try{dx(i)(l)}catch(p){if(ax(B),!(p instanceof L))throw p;$(1,0)}}function It(i,l,B,p){var j=g0();try{dx(i)(l,B,p)}catch(w){if(ax(j),!(w instanceof L))throw w;$(1,0)}}function Vn(i,l,B,p){var j=g0();try{return dx(i)(l,B,p)}catch(w){if(ax(j),!(w instanceof L))throw w;$(1,0)}}function Wn(i,l,B,p,j,w){var I=g0();try{return dx(i)(l,B,p,j,w)}catch(K){if(ax(I),!(K instanceof L))throw K;$(1,0)}}function Mt(i=[]){var l=d;i.unshift(D);var B=i.length,p=IA((B+1)*4),j=p;for(var w of i)f0[j>>2]=Ae(w),j+=4;f0[j>>2]=0;try{var I=l(B,p);return Px(I,!0),I}catch(K){return et(K)}}function rt(i=u){if(fx>0){m0=rt;return}if(o0(),fx>0){m0=rt;return}function l(){if(n.calledRun=!0,!t0){O(),H?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||Mt(i),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var Me;return Me=await Ax(),rt(),a0?s=n:s=new Promise((i,l)=>{H=i,J=l}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),nE=mo({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",m=(a,f)=>{throw f};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var _="",h,S;if(E){var P=require("fs");_=__dirname+"/",S=a=>{a=k(a)?new URL(a):a;var f=P.readFileSync(a);return f},h=async(a,f=!0)=>{a=k(a)?new URL(a):a;var d=P.readFileSync(a,f?void 0:"utf8");return d},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(a,f)=>{throw process.exitCode=a,f}}else if(F||v){try{_=new URL(".",r).href}catch{}v&&(S=a=>{var f=new XMLHttpRequest;return f.open("GET",a,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),h=async a=>{if(k(a))return new Promise((d,b)=>{var y=new XMLHttpRequest;y.open("GET",a,!0),y.responseType="arraybuffer",y.onload=()=>{if(y.status==200||y.status==0&&y.response){d(y.response);return}b(y.status)},y.onerror=b,y.send(null)});var f=await fetch(a,{credentials:"same-origin"});if(f.ok)return f.arrayBuffer();throw new Error(f.status+" : "+f.url)}}var N=console.log.bind(console),R=console.error.bind(console),U,t0=!1,M,k=a=>a.startsWith("file://");class L{}class W extends L{}function Q(a){for(var f=0,d=a.length,b=new Uint8Array(d),y;f<d;++f)y=a.charCodeAt(f),b[f]=~y>>8&y;return b}var H,J,a0=!1,n0=!1;function Z(){var a=IA.buffer;Fx=new Int8Array(a),J0=new Int16Array(a),rA=new Uint8Array(a),Rr=new Uint16Array(a),O0=new Int32Array(a),f0=new Uint32Array(a),Mr=new Float32Array(a),Lr=new Float64Array(a),K0=new BigInt64Array(a),Or=new BigUint64Array(a)}function o0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)nr(n.preRun.shift());wA(Wx)}function O(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),ex.init(),ee.__wasm_call_ctors(),o.ignorePermissions=!1}function i0(){}function l0(){cr(),o.quit(),ex.shutdown(),n0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)tr(n.postRun.shift());wA(SA)}function C0(a){n.onAbort?.(a),a=`Aborted(${a})`,R(a),t0=!0,a+=". Build with -sASSERTIONS for more info.";var f=new WebAssembly.RuntimeError(a);throw J?.(f),f}var _0;function $0(){return Q(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
1163
1163
  
1164
1164
  \0\x07\v\v\0\b\0\0 \x07\0 \0\b\0\0\f\0\0\r\0\0\x07\0\f\x1B\x07\x07\f\0\v
1165
1165
  p\r\r\x07\x82\x80\x80\b\x7FA\x80\xAC\v\x07\xBD memory\0__wasm_call_ctors\0 __main_argc_argv\0
@@ -1523,8 +1523,8 @@ Usage: pawndbg -f <mapfile> [options]
1523
1523
  \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF
1524
1524
  \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x07\0A\xC0\x1B\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0A\xE4\x1B\v\x07\0A\xFC\x1B\v
1525
1525
  \0\0\0\0\0\0\xEC\0A\x94\v\0A\xA4\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xE8\v \xD8\r\0\0\0\0\0\0\0A\xFC\v\b\0A\x94\v\0\0\0 \0\0\0\xF8\0\0\0\0A\xAC\v\0A\xBC\v\xFF\xFF\xFF\xFF
1526
- \0A\x80\v\vp\0\0D\0\0\0`)}function ix(a){return a}async function Kx(a){return a}async function yA(a,l){try{var d=await Kx(a),b=await WebAssembly.instantiate(d,l);return b}catch(y){R(`failed to asynchronously prepare wasm: ${y}`),C0(y)}}async function kA(a,l,d){return yA(l,d)}function ox(){var a={env:Ne,wasi_snapshot_preview1:Ne};return a}async function Ax(){function a($,U){return Ae=$.exports,xe(Ae),x0(),Ae}function l($){return a($.instance)}var d=ox();if(n.instantiateWasm)return new Promise(($,U)=>{n.instantiateWasm(d,(V,F0)=>{$(a(V,F0))})});_0??(_0=N0());var b=await kA(O,_0,d),y=l(b);return y}class AA{constructor(l){px(this,"name","ExitStatus"),this.message=`Program terminated with exit(${l})`,this.status=l}}var J0,O0,K0,Fx,Ir,Lr,Rr,l0,Or,eA,_A=a=>{for(;a.length>0;)a.shift()(n)},wA=[],rr=a=>wA.push(a),zx=[],tr=a=>zx.push(a),fe=!1,ax=globalThis.TextDecoder&&new TextDecoder,g0=(a,l,d,b)=>{var y=l+d;if(b)return y;for(;a[l]&&!(l>=y);)++l;return l},rA=(a,l=0,d,b)=>{var y=g0(a,l,d,b);if(y-l>16&&a.buffer&&ax)return ax.decode(a.subarray(l,y));for(var $="";l<y;){var U=a[l++];if(!(U&128)){$+=String.fromCharCode(U);continue}var V=a[l++]&63;if((U&224)==192){$+=String.fromCharCode((U&31)<<6|V);continue}var F0=a[l++]&63;if((U&240)==224?U=(U&15)<<12|V<<6|F0:U=(U&7)<<18|V<<12|F0<<6|a[l++]&63,U<65536)$+=String.fromCharCode(U);else{var u0=U-65536;$+=String.fromCharCode(55296|u0>>10,56320|u0&1023)}}return $},bx=(a,l,d)=>a?rA(eA,a,l,d):"",BA=(a,l,d,b)=>C0(`Assertion failed: ${bx(a)}, at: `+[l?bx(l):"unknown filename",d,b?bx(b):"unknown function"]),tA=()=>{var a=O0[+k0.varargs>>2];return k0.varargs+=4,a},SA=tA,c0={isAbs:a=>a.charAt(0)==="/",splitPath:a=>{var l=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return l.exec(a).slice(1)},normalizeArray:(a,l)=>{for(var d=0,b=a.length-1;b>=0;b--){var y=a[b];y==="."?a.splice(b,1):y===".."?(a.splice(b,1),d++):d&&(a.splice(b,1),d--)}if(l)for(;d;d--)a.unshift("..");return a},normalize:a=>{var l=c0.isAbs(a),d=a.slice(-1)==="/";return a=c0.normalizeArray(a.split("/").filter(b=>!!b),!l).join("/"),!a&&!l&&(a="."),a&&d&&(a+="/"),(l?"/":"")+a},dirname:a=>{var l=c0.splitPath(a),d=l[0],b=l[1];return!d&&!b?".":(b&&(b=b.slice(0,-1)),d+b)},basename:a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],join:(...a)=>c0.normalize(a.join("/")),join2:(a,l)=>c0.normalize(a+"/"+l)},Gr=()=>{if(E){var a=require("crypto");return l=>a.randomFillSync(l)}return l=>(crypto.getRandomValues(l),0)},_e=a=>(_e=Gr())(a),Bx={resolve:(...a)=>{for(var l="",d=!1,b=a.length-1;b>=-1&&!d;b--){var y=b>=0?a[b]:o.cwd();if(typeof y!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!y)return"";l=y+"/"+l,d=c0.isAbs(y)}return l=c0.normalizeArray(l.split("/").filter($=>!!$),!d).join("/"),(d?"/":"")+l||"."},relative:(a,l)=>{a=Bx.resolve(a).slice(1),l=Bx.resolve(l).slice(1);function d(u0){for(var z0=0;z0<u0.length&&u0[z0]==="";z0++);for(var M0=u0.length-1;M0>=0&&u0[M0]==="";M0--);return z0>M0?[]:u0.slice(z0,M0-z0+1)}for(var b=d(a.split("/")),y=d(l.split("/")),$=Math.min(b.length,y.length),U=$,V=0;V<$;V++)if(b[V]!==y[V]){U=V;break}for(var F0=[],V=U;V<b.length;V++)F0.push("..");return F0=F0.concat(y.slice(U)),F0.join("/")}},Ox=[],VA=a=>{for(var l=0,d=0;d<a.length;++d){var b=a.charCodeAt(d);b<=127?l++:b<=2047?l+=2:b>=55296&&b<=57343?(l+=4,++d):l+=3}return l},we=(a,l,d,b)=>{if(!(b>0))return 0;for(var y=d,$=d+b-1,U=0;U<a.length;++U){var V=a.codePointAt(U);if(V<=127){if(d>=$)break;l[d++]=V}else if(V<=2047){if(d+1>=$)break;l[d++]=192|V>>6,l[d++]=128|V&63}else if(V<=65535){if(d+2>=$)break;l[d++]=224|V>>12,l[d++]=128|V>>6&63,l[d++]=128|V&63}else{if(d+3>=$)break;l[d++]=240|V>>18,l[d++]=128|V>>12&63,l[d++]=128|V>>6&63,l[d++]=128|V&63,U++}}return l[d]=0,d-y},WA=(a,l,d)=>{var b=d>0?d:VA(a)+1,y=new Array(b),$=we(a,y,0,y.length);return l&&(y.length=$),y},Ur=()=>{if(!Ox.length){var a=null;if(E){var l=256,d=Buffer.alloc(l),b=0,y=process.stdin.fd;try{b=P.readSync(y,d,0,l)}catch($){if($.toString().includes("EOF"))b=0;else throw $}b>0&&(a=d.slice(0,b).toString("utf-8"))}else globalThis.window?.prompt&&(a=window.prompt("Input: "),a!==null&&(a+=`
1527
- `));if(!a)return null;Ox=WA(a,!0)}return Ox.shift()},ex={ttys:[],init(){},shutdown(){},register(a,l){ex.ttys[a]={input:[],output:[],ops:l},o.registerDevice(a,ex.stream_ops)},stream_ops:{open(a){var l=ex.ttys[a.node.rdev];if(!l)throw new o.ErrnoError(43);a.tty=l,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,l,d,b,y){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var $=0,U=0;U<b;U++){var V;try{V=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&$===0)throw new o.ErrnoError(6);if(V==null)break;$++,l[d+U]=V}return $&&(a.node.atime=Date.now()),$},write(a,l,d,b,y){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var $=0;$<b;$++)a.tty.ops.put_char(a.tty,l[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return Ur()},put_char(a,l){l===null||l===10?(N(rA(a.output)),a.output=[]):l!=0&&a.output.push(l)},fsync(a){a.output?.length>0&&(N(rA(a.output)),a.output=[])},ioctl_tcgets(a){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(a,l,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,l){l===null||l===10?(R(rA(a.output)),a.output=[]):l!=0&&a.output.push(l)},fsync(a){a.output?.length>0&&(R(rA(a.output)),a.output=[])}}},$A=a=>{C0()},s0={ops_table:null,mount(a){return s0.createNode(null,"/",16895,0)},createNode(a,l,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);s0.ops_table||(s0.ops_table={dir:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr,lookup:s0.node_ops.lookup,mknod:s0.node_ops.mknod,rename:s0.node_ops.rename,unlink:s0.node_ops.unlink,rmdir:s0.node_ops.rmdir,readdir:s0.node_ops.readdir,symlink:s0.node_ops.symlink},stream:{llseek:s0.stream_ops.llseek}},file:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr},stream:{llseek:s0.stream_ops.llseek,read:s0.stream_ops.read,write:s0.stream_ops.write,mmap:s0.stream_ops.mmap,msync:s0.stream_ops.msync}},link:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr,readlink:s0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr},stream:o.chrdev_stream_ops}});var y=o.createNode(a,l,d,b);return o.isDir(y.mode)?(y.node_ops=s0.ops_table.dir.node,y.stream_ops=s0.ops_table.dir.stream,y.contents={}):o.isFile(y.mode)?(y.node_ops=s0.ops_table.file.node,y.stream_ops=s0.ops_table.file.stream,y.usedBytes=0,y.contents=s0.emptyFileContents??(s0.emptyFileContents=new Uint8Array(0))):o.isLink(y.mode)?(y.node_ops=s0.ops_table.link.node,y.stream_ops=s0.ops_table.link.stream):o.isChrdev(y.mode)&&(y.node_ops=s0.ops_table.chrdev.node,y.stream_ops=s0.ops_table.chrdev.stream),y.atime=y.mtime=y.ctime=Date.now(),a&&(a.contents[l]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,l){var d=a.contents.length;if(!(d>=l)){var b=1024*1024;l=Math.max(l,d*(d<b?2:1.125)>>>0),d&&(l=Math.max(l,256));var y=s0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(l),a.contents.set(y)}},resizeFileStorage(a,l){if(a.usedBytes!=l){var d=a.contents;a.contents=new Uint8Array(l),a.contents.set(d.subarray(0,Math.min(l,a.usedBytes))),a.usedBytes=l}},node_ops:{getattr(a){var l={};return l.dev=o.isChrdev(a.mode)?a.id:1,l.ino=a.id,l.mode=a.mode,l.nlink=1,l.uid=0,l.gid=0,l.rdev=a.rdev,o.isDir(a.mode)?l.size=4096:o.isFile(a.mode)?l.size=a.usedBytes:o.isLink(a.mode)?l.size=a.link.length:l.size=0,l.atime=new Date(a.atime),l.mtime=new Date(a.mtime),l.ctime=new Date(a.ctime),l.blksize=4096,l.blocks=Math.ceil(l.size/l.blksize),l},setattr(a,l){for(let d of["mode","atime","mtime","ctime"])l[d]!=null&&(a[d]=l[d]);l.size!==void 0&&s0.resizeFileStorage(a,l.size)},lookup(a,l){throw s0.doesNotExistError||(s0.doesNotExistError=new o.ErrnoError(44),s0.doesNotExistError.stack="<generic error, no stack>"),s0.doesNotExistError},mknod(a,l,d,b){return s0.createNode(a,l,d,b)},rename(a,l,d){var b;try{b=o.lookupNode(l,d)}catch{}if(b){if(o.isDir(a.mode))for(var y in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],l.contents[d]=a,a.name=d,l.ctime=l.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,l){delete a.contents[l],a.ctime=a.mtime=Date.now()},rmdir(a,l){var d=o.lookupNode(a,l);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[l],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,l,d){var b=s0.createNode(a,l,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,l,d,b,y){var $=a.node.contents;if(y>=a.node.usedBytes)return 0;var U=Math.min(a.node.usedBytes-y,b);return l.set($.subarray(y,y+U),d),U},write(a,l,d,b,y,$){if(l.buffer===Fx.buffer&&($=!1),!b)return 0;var U=a.node;return U.mtime=U.ctime=Date.now(),$?(U.contents=l.subarray(d,d+b),U.usedBytes=b):U.usedBytes===0&&y===0?(U.contents=l.slice(d,d+b),U.usedBytes=b):(s0.expandFileStorage(U,y+b),U.contents.set(l.subarray(d,d+b),y),U.usedBytes=Math.max(U.usedBytes,y+b)),b},llseek(a,l,d){var b=l;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,l,d,b,y){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var $,U,V=a.node.contents;if(!(y&2)&&V.buffer===Fx.buffer)U=!1,$=V.byteOffset;else{if(U=!0,$=$A(l),!$)throw new o.ErrnoError(48);V&&((d>0||d+l<V.length)&&(V.subarray?V=V.subarray(d,d+l):V=Array.prototype.slice.call(V,d,d+l)),Fx.set(V,$))}return{ptr:$,allocated:U}},msync(a,l,d,b,y){return s0.stream_ops.write(a,l,0,b,d,!1),0}}},TA=a=>{if(typeof a!="string")return a;var l={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=l[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Vx=a=>(typeof a=="string"&&(a=WA(a,!0)),a.subarray||(a=new Uint8Array(a)),a),nA=(a,l)=>{var d=0;return a&&(d|=365),l&&(d|=146),d},P0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},y0={mount(a){return y0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,l,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(P0.EINVAL);var y=o.createNode(a,l,d);return y.node_ops=y0.node_ops,y.stream_ops=y0.stream_ops,y},realPath(a){for(var l=[];a.parent!==a;)l.push(a.name),a=a.parent;return l.push(a.mount.opts.root),l.reverse(),c0.join(...l)},node_ops:{getattr(a){var l=y0.realPath(a),d;try{d=a.mount.opts.fs.lstat(l)}catch(b){throw b.code?new o.ErrnoError(P0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,l){var d=y0.realPath(a);try{if(l.mode!==void 0&&(a.mount.opts.fs.chmod(d,l.mode),a.mode=l.mode),l.atime||l.mtime){var b=new Date(l.atime||l.mtime),y=new Date(l.mtime||l.atime);a.mount.opts.fs.utime(d,b,y)}l.size!==void 0&&a.mount.opts.fs.truncate(d,l.size)}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},lookup(a,l){try{var d=c0.join2(y0.realPath(a),l),b=a.mount.opts.fs.lstat(d).mode,y=y0.createNode(a,l,b);return y}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},mknod(a,l,d,b){var y=y0.createNode(a,l,d,b),$=y0.realPath(y);try{o.isDir(y.mode)?y.mount.opts.fs.mkdir($,y.mode):y.mount.opts.fs.writeFile($,"",{mode:y.mode})}catch(U){throw U.code?new o.ErrnoError(P0[U.code]):U}return y},rename(a,l,d){var b=y0.realPath(a),y=c0.join2(y0.realPath(l),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},unlink(a,l){var d=c0.join2(y0.realPath(a),l);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(P0[b.code]):b}},rmdir(a,l){var d=c0.join2(y0.realPath(a),l);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(P0[b.code]):b}},readdir(a){var l=y0.realPath(a);try{return a.mount.opts.fs.readdir(l)}catch(d){throw d.code?new o.ErrnoError(P0[d.code]):d}},symlink(a,l,d){var b=c0.join2(y0.realPath(a),l);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(P0[y.code]):y}},readlink(a){var l=y0.realPath(a);try{return a.mount.opts.fs.readlink(l)}catch(d){throw d.code?new o.ErrnoError(P0[d.code]):d}}},stream_ops:{open(a){var l=y0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(l,a.flags)}catch(d){throw d.code?new o.ErrnoError(P0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(l){throw l.code?new o.ErrnoError(P0[l.code]):l}},read(a,l,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,l,d,b,y)}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},write(a,l,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,l,d,b,y)}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},llseek(a,l,d){var b=l;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var y=a.node.node_ops.getattr(a.node);b+=y.size}catch($){throw new o.ErrnoError(P0[$.code])}if(b<0)throw new o.ErrnoError(P0.EINVAL);return b}}},CA=async a=>{var l=await h(a);return new Uint8Array(l)},Se=(...a)=>o.createDataFile(...a),Cx=a=>a,lx=0,m0=null,$e=a=>{if(lx--,n.monitorRunDependencies?.(lx),lx==0&&m0){var l=m0;m0=null,l()}},$x=a=>{lx++,n.monitorRunDependencies?.(lx)},le=[],dA=async(a,l)=>{typeof Browser<"u"&&Browser.init();for(var d of le)if(d.canHandle(l))return d.handle(a,l);return a},PA=async(a,l,d,b,y,$,U,V)=>{var F0=l?Bx.resolve(c0.join2(a,l)):a,u0=Cx(`cp ${F0}`);$x(u0);try{var z0=d;typeof d=="string"&&(z0=await CA(d)),z0=await dA(z0,F0),V?.(),$||Se(a,l,z0,b,y,U)}finally{$e(u0)}},Hr=(a,l,d,b,y,$,U,V,F0,u0)=>{PA(a,l,d,b,y,V,F0,u0).then($).catch(U)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){px(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){px(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,l,d,b){px(this,"node_ops",{}),px(this,"stream_ops",{}),px(this,"readMode",365),px(this,"writeMode",146),px(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=l,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,l={}){if(!a)throw new o.ErrnoError(44);l.follow_mount??(l.follow_mount=!0),c0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(u0=>!!u0),y=o.root,$="/",U=0;U<b.length;U++){var V=U===b.length-1;if(V&&l.parent)break;if(b[U]!=="."){if(b[U]===".."){if($=c0.dirname($),o.isRoot(y)){a=$+"/"+b.slice(U+1).join("/"),d--;continue x}else y=y.parent;continue}$=c0.join2($,b[U]);try{y=o.lookupNode(y,b[U])}catch(u0){if(u0?.errno===44&&V&&l.noent_okay)return{path:$};throw u0}if(o.isMountpoint(y)&&(!V||l.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!V||l.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var F0=y.node_ops.readlink(y);c0.isAbs(F0)||(F0=c0.dirname($)+"/"+F0),a=F0+"/"+b.slice(U+1).join("/");continue x}}}return{path:$,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var l;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return l?d[d.length-1]!=="/"?`${d}/${l}`:d+l:d}l=l?`${a.name}/${l}`:a.name,a=a.parent}},hashName(a,l){for(var d=0,b=0;b<l.length;b++)d=(d<<5)-d+l.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var l=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[l],o.nameTable[l]=a},hashRemoveNode(a){var l=o.hashName(a.parent.id,a.name);if(o.nameTable[l]===a)o.nameTable[l]=a.name_next;else for(var d=o.nameTable[l];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,l){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,l),y=o.nameTable[b];y;y=y.name_next){var $=y.name;if(y.parent.id===a.id&&$===l)return y}return o.lookup(a,l)},createNode(a,l,d,b){var y=new o.FSNode(a,l,d,b);return o.hashAddNode(y),y},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var l=["r","w","rw"][a&3];return a&512&&(l+="w"),l},nodePermissions(a,l){return o.ignorePermissions?0:l.includes("r")&&!(a.mode&292)||l.includes("w")&&!(a.mode&146)||l.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var l=o.nodePermissions(a,"x");return l||(a.node_ops.lookup?0:2)},mayCreate(a,l){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,l);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,l,d){var b;try{b=o.lookupNode(a,l)}catch($){return $.errno}var y=o.nodePermissions(a,"wx");if(y)return y;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,l){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(l);return o.isDir(a.mode)&&(d!=="r"||l&576)?31:o.nodePermissions(a,d)},checkOpExists(a,l){if(!a)throw new o.ErrnoError(l);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var l=o.getStream(a);if(!l)throw new o.ErrnoError(8);return l},getStream:a=>o.streams[a],createStream(a,l=-1){return a=Object.assign(new o.FSStream,a),l==-1&&(l=o.nextfd()),a.fd=l,o.streams[l]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,l=-1){var d=o.createStream(a,l);return d.stream_ops?.dup?.(d),d},doSetAttr(a,l,d){var b=a?.stream_ops.setattr,y=b?a:l;b??(b=l.node_ops.setattr),o.checkOpExists(b,63);try{b(y,d)}catch($){throw $ instanceof RangeError?new o.ErrnoError(22):$}},chrdev_stream_ops:{open(a){var l=o.getDevice(a.node.rdev);a.stream_ops=l.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,l)=>a<<8|l,registerDevice(a,l){o.devices[a]={stream_ops:l}},getDevice:a=>o.devices[a],getMounts(a){for(var l=[],d=[a];d.length;){var b=d.pop();l.push(b),d.push(...b.mounts)}return l},syncfs(a,l){typeof a=="function"&&(l=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&R(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function y(V){return o.syncFSRequests--,l(V)}function $(V){if(V)return $.errored?void 0:($.errored=!0,y(V));++b>=d.length&&y(null)}for(var U of d)U.type.syncfs?U.type.syncfs(U,a,$):$(null)},mount(a,l,d){var b=d==="/",y=!d,$;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!y){var U=o.lookupPath(d,{follow_mount:!1});if(d=U.path,$=U.node,o.isMountpoint($))throw new o.ErrnoError(10);if(!o.isDir($.mode))throw new o.ErrnoError(54)}var V={type:a,opts:l,mountpoint:d,mounts:[]},F0=a.mount(V);return F0.mount=V,V.root=F0,b?o.root=F0:$&&($.mounted=V,$.mount&&$.mount.mounts.push(V)),F0},unmount(a){var l=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(l.node))throw new o.ErrnoError(28);var d=l.node,b=d.mounted,y=o.getMounts(b);for(var[$,U]of Object.entries(o.nameTable))for(;U;){var V=U.name_next;y.includes(U.mount)&&o.destroyNode(U),U=V}d.mounted=null;var F0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(F0,1)},lookup(a,l){return a.node_ops.lookup(a,l)},mknod(a,l,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,$=c0.basename(a);if(!$)throw new o.ErrnoError(28);if($==="."||$==="..")throw new o.ErrnoError(20);var U=o.mayCreate(y,$);if(U)throw new o.ErrnoError(U);if(!y.node_ops.mknod)throw new o.ErrnoError(63);return y.node_ops.mknod(y,$,l,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var l={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(l,a.node_ops.statfs(a.mount.opts.root)),l},create(a,l=438){return l&=4095,l|=32768,o.mknod(a,l,0)},mkdir(a,l=511){return l&=1023,l|=16384,o.mknod(a,l,0)},mkdirTree(a,l){var d=a.split("/"),b="";for(var y of d)if(y){(b||c0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,l)}catch($){if($.errno!=20)throw $}}},mkdev(a,l,d){return typeof d>"u"&&(d=l,l=438),l|=8192,o.mknod(a,l,d)},symlink(a,l){if(!Bx.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(l,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=c0.basename(l),$=o.mayCreate(b,y);if($)throw new o.ErrnoError($);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,y,a)},rename(a,l){var d=c0.dirname(a),b=c0.dirname(l),y=c0.basename(a),$=c0.basename(l),U,V,F0;if(U=o.lookupPath(a,{parent:!0}),V=U.node,U=o.lookupPath(l,{parent:!0}),F0=U.node,!V||!F0)throw new o.ErrnoError(44);if(V.mount!==F0.mount)throw new o.ErrnoError(75);var u0=o.lookupNode(V,y),z0=Bx.relative(a,b);if(z0.charAt(0)!==".")throw new o.ErrnoError(28);if(z0=Bx.relative(l,d),z0.charAt(0)!==".")throw new o.ErrnoError(55);var M0;try{M0=o.lookupNode(F0,$)}catch{}if(u0!==M0){var $0=o.isDir(u0.mode),j0=o.mayDelete(V,y,$0);if(j0)throw new o.ErrnoError(j0);if(j0=M0?o.mayDelete(F0,$,$0):o.mayCreate(F0,$),j0)throw new o.ErrnoError(j0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(u0)||M0&&o.isMountpoint(M0))throw new o.ErrnoError(10);if(F0!==V&&(j0=o.nodePermissions(V,"w"),j0))throw new o.ErrnoError(j0);o.hashRemoveNode(u0);try{V.node_ops.rename(u0,F0,$),u0.parent=F0}catch(rx){throw rx}finally{o.hashAddNode(u0)}}},rmdir(a){var l=o.lookupPath(a,{parent:!0}),d=l.node,b=c0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!0);if($)throw new o.ErrnoError($);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(y)},readdir(a){var l=o.lookupPath(a,{follow:!0}),d=l.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var l=o.lookupPath(a,{parent:!0}),d=l.node;if(!d)throw new o.ErrnoError(44);var b=c0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!1);if($)throw new o.ErrnoError($);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(y)},readlink(a){var l=o.lookupPath(a),d=l.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,l){var d=o.lookupPath(a,{follow:!l}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var l=o.getStreamChecked(a),d=l.node,b=l.stream_ops.getattr,y=b?l:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,l,d,b){o.doSetAttr(a,l,{mode:d&4095|l.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,l,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,l,d)},lchmod(a,l){o.chmod(a,l,!0)},fchmod(a,l){var d=o.getStreamChecked(a);o.doChmod(d,d.node,l,!1)},doChown(a,l,d){o.doSetAttr(a,l,{timestamp:Date.now(),dontFollow:d})},chown(a,l,d,b){var y;if(typeof a=="string"){var $=o.lookupPath(a,{follow:!b});y=$.node}else y=a;o.doChown(null,y,b)},lchown(a,l,d){o.chown(a,l,d,!0)},fchown(a,l,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,l,d){if(o.isDir(l.mode))throw new o.ErrnoError(31);if(!o.isFile(l.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(l,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,l,{size:d,timestamp:Date.now()})},truncate(a,l){if(l<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,l)},ftruncate(a,l){var d=o.getStreamChecked(a);if(l<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,l)},utime(a,l,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,$=o.checkOpExists(y.node_ops.setattr,63);$(y,{atime:l,mtime:d})},open(a,l,d=438){if(a==="")throw new o.ErrnoError(44);l=TA(l),l&64?d=d&4095|32768:d=0;var b,y;if(typeof a=="object")b=a;else{y=a.endsWith("/");var $=o.lookupPath(a,{follow:!(l&131072),noent_okay:!0});b=$.node,a=$.path}var U=!1;if(l&64)if(b){if(l&128)throw new o.ErrnoError(20)}else{if(y)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),U=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(l&=-513),l&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!U){var V=o.mayOpen(b,l);if(V)throw new o.ErrnoError(V)}l&512&&!U&&o.truncate(b,0),l&=-131713;var F0=o.createStream({node:b,path:o.getPath(b),flags:l,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),U&&o.chmod(b,d&511),F0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(l){throw l}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,l,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,l,d),a.ungotten=[],a.position},read(a,l,d,b,y){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var $=typeof y<"u";if(!$)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var U=a.stream_ops.read(a,l,d,b,y);return $||(a.position+=U),U},write(a,l,d,b,y,$){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.write)throw new o.ErrnoError(28);a.seekable&&a.flags&1024&&o.llseek(a,0,2);var U=typeof y<"u";if(!U)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,l,d,b,y,$);return U||(a.position+=V),V},mmap(a,l,d,b,y){if((b&2)!==0&&(y&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!l)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,l,d,b,y)},msync(a,l,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,l,d,b,y):0},ioctl(a,l,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,l,d)},readFile(a,l={}){l.flags=l.flags||0,l.encoding=l.encoding||"binary",l.encoding!=="utf8"&&l.encoding!=="binary"&&C0(`Invalid encoding type "${l.encoding}"`);var d=o.open(a,l.flags),b=o.stat(a),y=b.size,$=new Uint8Array(y);return o.read(d,$,0,y,0),l.encoding==="utf8"&&($=rA($)),o.close(d),$},writeFile(a,l,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);l=Vx(l),o.write(b,l,0,l.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var l=o.lookupPath(a,{follow:!0});if(l.node===null)throw new o.ErrnoError(44);if(!o.isDir(l.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(l.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=l.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,y,$,U,V)=>U,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),l=0,d=()=>(l===0&&(_e(a),l=a.byteLength),a[--l]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var l=o.createNode(a,"fd",16895,73);return l.stream_ops={llseek:s0.stream_ops.llseek},l.node_ops={lookup(d,b){var y=+b,$=o.getStreamChecked(y),U={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:y+1};return U.parent=U,U},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},l}},{},"/proc/self/fd")},createStandardStreams(a,l,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),l?o.createDevice("/dev","stdout",null,l):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),y=o.open("/dev/stdout",1),$=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(s0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:s0,PROXYFS:y0}},init(a,l,d){o.initialized=!0,a??(a=n.stdin),l??(l=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,l,d)},quit(){o.initialized=!1,QA(0);for(var a of o.streams)a&&o.close(a)},findObject(a,l){var d=o.analyzePath(a,l);return d.exists?d.object:null},analyzePath(a,l){try{var d=o.lookupPath(a,{follow:!l});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=c0.basename(a),d=o.lookupPath(a,{follow:!l}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(y){b.error=y.errno}return b},createPath(a,l,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=l.split("/").reverse();y.length;){var $=y.pop();if($){var U=c0.join2(a,$);try{o.mkdir(U)}catch(V){if(V.errno!=20)throw V}a=U}}return U},createFile(a,l,d,b,y){var $=c0.join2(typeof a=="string"?a:o.getPath(a),l),U=nA(b,y);return o.create($,U)},createDataFile(a,l,d,b,y,$){var U=l;a&&(a=typeof a=="string"?a:o.getPath(a),U=l?c0.join2(a,l):a);var V=nA(b,y),F0=o.create(U,V);if(d){d=Vx(d),o.chmod(F0,V|146);var u0=o.open(F0,577);o.write(u0,d,0,d.length,0,$),o.close(u0),o.chmod(F0,V)}},createDevice(a,l,d,b){var y,$=c0.join2(typeof a=="string"?a:o.getPath(a),l),U=nA(!!d,!!b);(y=o.createDevice).major??(y.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(F0){F0.seekable=!1},close(F0){b?.buffer?.length&&b(10)},read(F0,u0,z0,M0,$0){for(var j0=0,rx=0;rx<M0;rx++){var mx;try{mx=d()}catch{throw new o.ErrnoError(29)}if(mx===void 0&&j0===0)throw new o.ErrnoError(6);if(mx==null)break;j0++,u0[z0+rx]=mx}return j0&&(F0.node.atime=Date.now()),j0},write(F0,u0,z0,M0,$0){for(var j0=0;j0<M0;j0++)try{b(u0[z0+j0])}catch{throw new o.ErrnoError(29)}return M0&&(F0.node.mtime=F0.node.ctime=Date.now()),j0}}),o.mkdev($,U,V)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)C0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,l,d,b,y){class ${constructor(){px(this,"lengthKnown",!1),px(this,"chunks",[])}get($0){if(!($0>this.length-1||$0<0)){var j0=$0%this.chunkSize,rx=$0/this.chunkSize|0;return this.getter(rx)[j0]}}setDataGetter($0){this.getter=$0}cacheLength(){var $0=new XMLHttpRequest;$0.open("HEAD",d,!1),$0.send(null),$0.status>=200&&$0.status<300||$0.status===304||C0("Couldn't load "+d+". Status: "+$0.status);var j0=Number($0.getResponseHeader("Content-length")),rx,mx=(rx=$0.getResponseHeader("Accept-Ranges"))&&rx==="bytes",Px=(rx=$0.getResponseHeader("Content-Encoding"))&&rx==="gzip",Ix=1024*1024;mx||(Ix=j0);var Lx=(Gx,DA)=>{Gx>DA&&C0("invalid range ("+Gx+", "+DA+") or no bytes requested!"),DA>j0-1&&C0("only "+j0+" bytes available! programmer error!");var vx=new XMLHttpRequest;return vx.open("GET",d,!1),j0!==Ix&&vx.setRequestHeader("Range","bytes="+Gx+"-"+DA),vx.responseType="arraybuffer",vx.overrideMimeType&&vx.overrideMimeType("text/plain; charset=x-user-defined"),vx.send(null),vx.status>=200&&vx.status<300||vx.status===304||C0("Couldn't load "+d+". Status: "+vx.status),vx.response!==void 0?new Uint8Array(vx.response||[]):WA(vx.responseText||"",!0)},ee=this;ee.setDataGetter(Gx=>{var DA=Gx*Ix,vx=(Gx+1)*Ix-1;return vx=Math.min(vx,j0-1),typeof ee.chunks[Gx]>"u"&&(ee.chunks[Gx]=Lx(DA,vx)),typeof ee.chunks[Gx]>"u"&&C0("doXHR failed!"),ee.chunks[Gx]}),(Px||!j0)&&(Ix=j0=1,j0=this.getter(0).length,Ix=j0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=j0,this._chunkSize=Ix,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){f||C0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var U=new $,V={isDevice:!1,contents:U}}else var V={isDevice:!1,url:d};var F0=o.createFile(a,l,V,b,y);V.contents?F0.contents=V.contents:V.url&&(F0.contents=null,F0.url=V.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var u0={};for(let[M0,$0]of Object.entries(F0.stream_ops))u0[M0]=(...j0)=>(o.forceLoadFile(F0),$0(...j0));function z0(M0,$0,j0,rx,mx){var Px=M0.node.contents;if(mx>=Px.length)return 0;var Ix=Math.min(Px.length-mx,rx);if(Px.slice)for(var Lx=0;Lx<Ix;Lx++)$0[j0+Lx]=Px[mx+Lx];else for(var Lx=0;Lx<Ix;Lx++)$0[j0+Lx]=Px.get(mx+Lx);return Ix}return u0.read=(M0,$0,j0,rx,mx)=>(o.forceLoadFile(F0),z0(M0,$0,j0,rx,mx)),u0.mmap=(M0,$0,j0,rx,mx)=>{o.forceLoadFile(F0);var Px=$A($0);if(!Px)throw new o.ErrnoError(48);return z0(M0,Fx,Px,$0,j0),{ptr:Px,allocated:!0}},F0.stream_ops=u0,F0}},k0={currentUmask:18,calculateAt(a,l,d){if(c0.isAbs(l))return l;var b;if(a===-100)b=o.cwd();else{var y=k0.getStreamFromFD(a);b=y.path}if(l.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+l},writeStat(a,l){l0[a>>2]=l.dev,l0[a+4>>2]=l.mode,l0[a+8>>2]=l.nlink,l0[a+12>>2]=l.uid,l0[a+16>>2]=l.gid,l0[a+20>>2]=l.rdev,K0[a+24>>3]=BigInt(l.size),O0[a+32>>2]=4096,O0[a+36>>2]=l.blocks;var d=l.atime.getTime(),b=l.mtime.getTime(),y=l.ctime.getTime();return K0[a+40>>3]=BigInt(Math.floor(d/1e3)),l0[a+48>>2]=d%1e3*1e3*1e3,K0[a+56>>3]=BigInt(Math.floor(b/1e3)),l0[a+64>>2]=b%1e3*1e3*1e3,K0[a+72>>3]=BigInt(Math.floor(y/1e3)),l0[a+80>>2]=y%1e3*1e3*1e3,K0[a+88>>3]=BigInt(l.ino),0},writeStatFs(a,l){l0[a+4>>2]=l.bsize,l0[a+60>>2]=l.bsize,K0[a+8>>3]=BigInt(l.blocks),K0[a+16>>3]=BigInt(l.bfree),K0[a+24>>3]=BigInt(l.bavail),K0[a+32>>3]=BigInt(l.files),K0[a+40>>3]=BigInt(l.ffree),l0[a+48>>2]=l.fsid,l0[a+64>>2]=l.flags,l0[a+56>>2]=l.namelen},doMsync(a,l,d,b,y){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=eA.slice(a,a+d);o.msync(l,$,y,d,b)},getStreamFromFD(a){var l=o.getStreamChecked(a);return l},varargs:void 0,getStr(a){var l=bx(a);return l}};function Te(a,l,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(l){case 0:{var y=tA();if(y<0)return-28;for(;o.streams[y];)y++;var $;return $=o.dupStream(b,y),$.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var y=tA(),U=289792;return b.flags=b.flags&~U|y&U,0}case 12:{var y=SA(),V=0;return J0[y+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(F0){if(typeof o>"u"||F0.name!=="ErrnoError")throw F0;return-F0.errno}}function qA(a,l,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(l){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var y=b.tty.ops.ioctl_tcgets(b),$=SA();O0[$>>2]=y.c_iflag||0,O0[$+4>>2]=y.c_oflag||0,O0[$+8>>2]=y.c_cflag||0,O0[$+12>>2]=y.c_lflag||0;for(var U=0;U<32;U++)Fx[$+U+17]=y.c_cc[U]||0;return 0}return 0}case 21510:case 21511:case 21512:return b.tty?0:-59;case 21506:case 21507:case 21508:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcsets){for(var $=SA(),V=O0[$>>2],F0=O0[$+4>>2],u0=O0[$+8>>2],z0=O0[$+12>>2],M0=[],U=0;U<32;U++)M0.push(Fx[$+U+17]);return b.tty.ops.ioctl_tcsets(b.tty,l,{c_iflag:V,c_oflag:F0,c_cflag:u0,c_lflag:z0,c_cc:M0})}return 0}case 21519:{if(!b.tty)return-59;var $=SA();return O0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=SA();return o.ioctl(b,l,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var $0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=SA();J0[$>>1]=$0[0],J0[$+2>>1]=$0[1]}return 0}case 21524:return b.tty?0:-59;case 21515:return b.tty?0:-59;default:return-28}}catch(j0){if(typeof o>"u"||j0.name!=="ErrnoError")throw j0;return-j0.errno}}function uA(a,l,d,b){k0.varargs=b;try{l=k0.getStr(l),l=k0.calculateAt(a,l);var y=b?tA():0;return d&64&&(y&=~k0.currentUmask),o.open(l,d,y).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var Jr=()=>2147483648,ce=(a,l)=>Math.ceil(a/l)*l,nr=a=>{var l=NA.buffer.byteLength,d=(a-l+65535)/65536|0;try{return NA.grow(d),x0(),1}catch{}},sr=a=>{var l=eA.length;a>>>=0;var d=Jr();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=l*(1+.2/b);y=Math.min(y,a+100663296);var $=Math.min(d,ce(Math.max(a,y),65536)),U=nr($);if(U)return!0}return!1};function Kr(a){try{var l=k0.getStreamFromFD(a);return o.close(l),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var zr=(a,l,d,b)=>{for(var y=0,$=0;$<d;$++){var U=l0[l>>2],V=l0[l+4>>2];l+=8;var F0=o.read(a,Fx,U,V,b);if(F0<0)return-1;if(y+=F0,F0<V)break;typeof b<"u"&&(b+=F0)}return y};function Vr(a,l,d,b){try{var y=k0.getStreamFromFD(a),$=zr(y,l,d);return l0[b>>2]=$,0}catch(U){if(typeof o>"u"||U.name!=="ErrnoError")throw U;return U.errno}}var Ee=9007199254740992,ir=-9007199254740992,XA=a=>a<ir||a>Ee?NaN:Number(a);function Be(a,l,d,b){l=XA(l);try{if(isNaN(l))return 22;var y=k0.getStreamFromFD(a);return o.llseek(y,l,d),K0[b>>3]=BigInt(y.position),y.getdents&&l===0&&d===0&&(y.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var Wr=(a,l,d,b)=>{for(var y=0,$=0;$<d;$++){var U=l0[l>>2],V=l0[l+4>>2];l+=8;var F0=o.write(a,Fx,U,V,b);if(F0<0)return-1;if(y+=F0,F0<V)break;typeof b<"u"&&(b+=F0)}return y};function ar(a,l,d,b){try{var y=k0.getStreamFromFD(a),$=Wr(y,l,d);return l0[b>>2]=$,0}catch(U){if(typeof o>"u"||U.name!=="ErrnoError")throw U;return U.errno}}var Xr=0,YA=()=>fe||Xr>0,Pe=a=>{L=a,YA()||(n.onExit?.(a),n0=!0),m(a,new AA(a))},or=(a,l)=>{L=a,YA()||f0(),Pe(a)},Fr=a=>{if(a instanceof AA||a=="unwind")return L;m(1,a)},Yr=(a,l,d)=>we(a,eA,l,d),vr=a=>ZA(a),Qr=a=>{var l=VA(a)+1,d=vr(l);return Yr(a,d,l),d},Zr=(...a)=>o.createPath(...a),Ce=(...a)=>o.unlink(...a),xt=(...a)=>o.createLazyFile(...a),At=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=Hr,o.preloadFile=PA,o.staticInit(),n.noExitRuntime&&(fe=n.noExitRuntime),n.preloadPlugins&&(le=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=dx,n.addRunDependency=$x,n.removeRunDependency=$e,n.FS_preloadFile=PA,n.FS_unlink=Ce,n.FS_createPath=Zr,n.FS_createDevice=At,n.FS=o,n.FS_createDataFile=Se,n.FS_createLazyFile=xt,n.PROXYFS=y0;var fr,lr,QA,cr,ZA,qe,Tx,et,NA;function xe(a){fr=n._main=a.__main_argc_argv,lr=a.__funcs_on_exit,QA=a.fflush,cr=a._emscripten_stack_restore,ZA=a._emscripten_stack_alloc,qe=a.emscripten_stack_get_current,Tx=NA=a.memory,et=a.__indirect_function_table}var Ne={__assert_fail:BA,__syscall_fcntl64:Te,__syscall_ioctl:qA,__syscall_openat:uA,emscripten_resize_heap:sr,fd_close:Kr,fd_read:Vr,fd_seek:Be,fd_write:ar};function dx(a=[]){var l=fr;a.unshift(D);var d=a.length,b=vr((d+1)*4),y=b;for(var $ of a)l0[y>>2]=Qr($),y+=4;l0[y>>2]=0;try{var U=l(d,b);return or(U,!0),U}catch(V){return Fr(V)}}function de(a=u){if(lx>0){m0=de;return}if(o0(),lx>0){m0=de;return}function l(){if(n.calledRun=!0,!n0){G(),H?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||dx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var Ae;return Ae=await Ax(),de(),a0?s=n:s=new Promise((a,l)=>{H=a,J=l}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),jo={};AE(jo,{createPawnCC:()=>iE,createPawnDbg:()=>aE});ho.exports=eE(jo);var nE=mo(rE(),1),sE=mo(tE(),1),iE=nE.default,aE=sE.default});var ye=Ba((Bm,uv)=>{"use strict";var vB=Object.create,ht=Object.defineProperty,fB=Object.getOwnPropertyDescriptor,yF=Object.getOwnPropertyNames,lB=Object.getPrototypeOf,cB=Object.prototype.hasOwnProperty,EB=(x,A,e)=>A in x?ht(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,BB=(x,A)=>function(){try{return A||(0,x[yF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},CB=(x,A)=>{for(var e in A)ht(x,e,{get:A[e],enumerable:!0})},kF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of yF(A))!cB.call(x,t)&&t!==e&&ht(x,t,{get:()=>A[t],enumerable:!(r=fB(A,t))||r.enumerable});return x},dB=(x,A,e)=>(e=x!=null?vB(lB(x)):{},kF(A||!x||!x.__esModule?ht(e,"default",{value:x,enumerable:!0}):e,x)),uB=x=>kF(ht({},"__esModule",{value:!0}),x),A0=(x,A,e)=>EB(x,typeof A!="symbol"?A+"":A,e),DB=BB({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s;(function(){function c(e0){e0=e0.split("-")[0];for(var E0=e0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((D0,X0,V0)=>D0.padStart(2,"0")),E0.join("")}var C=e0=>[e0/1e4|0,(e0/100|0)%100,e0%100].join("."),g=2147483647,T=typeof process<"u"&&process.versions?.node?c(process.versions.node):g;if(T<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C(T)})`);var q=typeof navigator<"u"&&navigator.userAgent;if(q){var Q=q.includes("Safari/")&&!q.includes("Chrome/")&&q.match(/Version\/(\d+\.?\d*\.?\d*)/)?c(q.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):g;if(Q<15e4)throw new Error(`This emscripten-generated code requires Safari v${C(15e4)} (detected v${Q})`);var Y=q.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(q.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):g;if(Y<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${Y})`);var Z=q.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(q.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):g;if(Z<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${Z})`)}})();var n=t,F=!!globalThis.window,f=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=!F&&!E&&!f,D=[],m="./this.program",_=(c,C)=>{throw C};typeof __filename<"u"?r=__filename:f&&(r=self.location.href);var h="",S,P;if(E){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var N=require("fs");h=__dirname+"/",P=C=>{C=I(C)?new URL(C):C;var g=N.readFileSync(C);return k(Buffer.isBuffer(g)),g},S=async(C,g=!0)=>{C=I(C)?new URL(C):C;var T=N.readFileSync(C,g?void 0:"utf8");return k(g?Buffer.isBuffer(T):typeof T=="string"),T},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),D=process.argv.slice(2),_=(C,g)=>{throw process.exitCode=C,g}}else if(!u)if(F||f){try{h=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");f&&(P=c=>{var C=new XMLHttpRequest;return C.open("GET",c,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async c=>{if(I(c))return new Promise((g,T)=>{var q=new XMLHttpRequest;q.open("GET",c,!0),q.responseType="arraybuffer",q.onload=()=>{if(q.status==200||q.status==0&&q.response){g(q.response);return}T(q.status)},q.onerror=T,q.send(null)});var C=await fetch(c,{credentials:"same-origin"});if(C.ok)return C.arrayBuffer();throw new Error(C.status+" : "+C.url)}}else throw new Error("environment detection error");var R=console.log.bind(console),O=console.error.bind(console);k(!u,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var n0;globalThis.WebAssembly||O("no native wasm support detected");var L=!1;function k(c,C){c||ox("Assertion failed"+(C?": "+C:""))}var I=c=>c.startsWith("file://");function X(){var c=xs();k((c&3)==0),c==0&&(c+=4),g0[c>>2]=34821223,g0[c+4>>2]=2310721022,g0[0]=1668509029}function W(){if(!L){var c=xs();c==0&&(c+=4);var C=g0[c>>2],g=g0[c+4>>2];(C!=34821223||g!=2310721022)&&ox(`Stack overflow! Stack cookie has been overwritten at ${Bx(c)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${Bx(g)} ${Bx(C)}`),g0[0]!=1668509029&&ox("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class J extends H{}var a0=!0;(()=>{var c=new Int16Array(1),C=new Int8Array(c.buffer);c[0]=25459,(C[0]!==115||C[1]!==99)&&ox("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function t0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,set(){ox(`Attempt to set \`Module.${c}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function x0(c){return()=>k(!1,`call to '${c}' via reference taken before Wasm module initialization`)}function o0(c){Object.getOwnPropertyDescriptor(n,c)&&ox(`\`Module.${c}\` was supplied but \`${c}\` not included in INCOMING_MODULE_JS_API`)}function G(c){return c==="FS_createPath"||c==="FS_createDataFile"||c==="FS_createPreloadedFile"||c==="FS_preloadFile"||c==="FS_unlink"||c==="addRunDependency"||c==="FS_createLazyFile"||c==="FS_createDevice"||c==="removeRunDependency"}function i0(c){f0(c)}function f0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,get(){var C=`'${c}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;G(c)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),ox(C)}})}function B0(c){for(var C=0,g=c.length,T=new Uint8Array(g),q;C<g;++C)q=c.charCodeAt(C),T[C]=~q>>8&q;return T}var C0,_0,N0=!1;function ix(){var c=It.buffer;zx=new Int8Array(c),_A=new Int16Array(c),n.HEAPU8=bx=new Uint8Array(c),ax=new Uint16Array(c),wA=new Int32Array(c),g0=new Uint32Array(c),tr=new Float32Array(c),fe=new Float64Array(c),rr=new BigInt64Array(c),rA=new BigUint64Array(c)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Kx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Gr(n.preRun.shift());t0("preRun"),BA(c0)}function yA(){k(!N0),N0=!0,W(),Er.__wasm_call_ctors()}function kA(){if(W(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)SA(n.postRun.shift());t0("postRun"),BA(tA)}function ox(c){n.onAbort?.(c),c=`Aborted(${c})`,O(c),L=!0;var C=new WebAssembly.RuntimeError(c);throw _0?.(C),C}function Ax(){ox("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var AA={init:Ax,createDataFile:Ax,createPreloadedFile:Ax,createLazyFile:Ax,open:Ax,mkdev:Ax,registerDevice:Ax,analyzePath:Ax,ErrnoError:Ax};function J0(c,C){return(...g)=>{k(N0,`native function \`${c}\` called before runtime initialization`);var T=Er[c];return k(T,`exported native function \`${c}\` not found`),k(g.length<=C,`native function \`${c}\` called with ${g.length} args but expects ${C}`),T(...g)}}var O0;function K0(){return B0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
1526
+ \0A\x80\v\vp\0\0D\0\0\0`)}function ix(a){return a}async function Vx(a){return a}async function kA(a,f){try{var d=await Vx(a),b=await WebAssembly.instantiate(d,f);return b}catch(y){R(`failed to asynchronously prepare wasm: ${y}`),C0(y)}}async function _A(a,f,d){return kA(f,d)}function ox(){var a={env:Ie,wasi_snapshot_preview1:Ie};return a}async function Ax(){function a($,G){return ee=$.exports,Ae(ee),Z(),ee}function f($){return a($.instance)}var d=ox();if(n.instantiateWasm)return new Promise(($,G)=>{n.instantiateWasm(d,(V,F0)=>{$(a(V,F0))})});_0??(_0=$0());var b=await _A(U,_0,d),y=f(b);return y}class eA{constructor(f){px(this,"name","ExitStatus"),this.message=`Program terminated with exit(${f})`,this.status=f}}var J0,O0,K0,Fx,Mr,Lr,Rr,f0,Or,rA,wA=a=>{for(;a.length>0;)a.shift()(n)},SA=[],tr=a=>SA.push(a),Wx=[],nr=a=>Wx.push(a),fe=!1,ax=globalThis.TextDecoder&&new TextDecoder,g0=(a,f,d,b)=>{var y=f+d;if(b)return y;for(;a[f]&&!(f>=y);)++f;return f},tA=(a,f=0,d,b)=>{var y=g0(a,f,d,b);if(y-f>16&&a.buffer&&ax)return ax.decode(a.subarray(f,y));for(var $="";f<y;){var G=a[f++];if(!(G&128)){$+=String.fromCharCode(G);continue}var V=a[f++]&63;if((G&224)==192){$+=String.fromCharCode((G&31)<<6|V);continue}var F0=a[f++]&63;if((G&240)==224?G=(G&15)<<12|V<<6|F0:G=(G&7)<<18|V<<12|F0<<6|a[f++]&63,G<65536)$+=String.fromCharCode(G);else{var u0=G-65536;$+=String.fromCharCode(55296|u0>>10,56320|u0&1023)}}return $},bx=(a,f,d)=>a?tA(rA,a,f,d):"",CA=(a,f,d,b)=>C0(`Assertion failed: ${bx(a)}, at: `+[f?bx(f):"unknown filename",d,b?bx(b):"unknown function"]),nA=()=>{var a=O0[+k0.varargs>>2];return k0.varargs+=4,a},$A=nA,c0={isAbs:a=>a.charAt(0)==="/",splitPath:a=>{var f=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return f.exec(a).slice(1)},normalizeArray:(a,f)=>{for(var d=0,b=a.length-1;b>=0;b--){var y=a[b];y==="."?a.splice(b,1):y===".."?(a.splice(b,1),d++):d&&(a.splice(b,1),d--)}if(f)for(;d;d--)a.unshift("..");return a},normalize:a=>{var f=c0.isAbs(a),d=a.slice(-1)==="/";return a=c0.normalizeArray(a.split("/").filter(b=>!!b),!f).join("/"),!a&&!f&&(a="."),a&&d&&(a+="/"),(f?"/":"")+a},dirname:a=>{var f=c0.splitPath(a),d=f[0],b=f[1];return!d&&!b?".":(b&&(b=b.slice(0,-1)),d+b)},basename:a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],join:(...a)=>c0.normalize(a.join("/")),join2:(a,f)=>c0.normalize(a+"/"+f)},Gr=()=>{if(E){var a=require("crypto");return f=>a.randomFillSync(f)}return f=>(crypto.getRandomValues(f),0)},we=a=>(we=Gr())(a),Bx={resolve:(...a)=>{for(var f="",d=!1,b=a.length-1;b>=-1&&!d;b--){var y=b>=0?a[b]:o.cwd();if(typeof y!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!y)return"";f=y+"/"+f,d=c0.isAbs(y)}return f=c0.normalizeArray(f.split("/").filter($=>!!$),!d).join("/"),(d?"/":"")+f||"."},relative:(a,f)=>{a=Bx.resolve(a).slice(1),f=Bx.resolve(f).slice(1);function d(u0){for(var z0=0;z0<u0.length&&u0[z0]==="";z0++);for(var I0=u0.length-1;I0>=0&&u0[I0]==="";I0--);return z0>I0?[]:u0.slice(z0,I0-z0+1)}for(var b=d(a.split("/")),y=d(f.split("/")),$=Math.min(b.length,y.length),G=$,V=0;V<$;V++)if(b[V]!==y[V]){G=V;break}for(var F0=[],V=G;V<b.length;V++)F0.push("..");return F0=F0.concat(y.slice(G)),F0.join("/")}},Gx=[],WA=a=>{for(var f=0,d=0;d<a.length;++d){var b=a.charCodeAt(d);b<=127?f++:b<=2047?f+=2:b>=55296&&b<=57343?(f+=4,++d):f+=3}return f},Se=(a,f,d,b)=>{if(!(b>0))return 0;for(var y=d,$=d+b-1,G=0;G<a.length;++G){var V=a.codePointAt(G);if(V<=127){if(d>=$)break;f[d++]=V}else if(V<=2047){if(d+1>=$)break;f[d++]=192|V>>6,f[d++]=128|V&63}else if(V<=65535){if(d+2>=$)break;f[d++]=224|V>>12,f[d++]=128|V>>6&63,f[d++]=128|V&63}else{if(d+3>=$)break;f[d++]=240|V>>18,f[d++]=128|V>>12&63,f[d++]=128|V>>6&63,f[d++]=128|V&63,G++}}return f[d]=0,d-y},XA=(a,f,d)=>{var b=d>0?d:WA(a)+1,y=new Array(b),$=Se(a,y,0,y.length);return f&&(y.length=$),y},Ur=()=>{if(!Gx.length){var a=null;if(E){var f=256,d=Buffer.alloc(f),b=0,y=process.stdin.fd;try{b=P.readSync(y,d,0,f)}catch($){if($.toString().includes("EOF"))b=0;else throw $}b>0&&(a=d.slice(0,b).toString("utf-8"))}else globalThis.window?.prompt&&(a=window.prompt("Input: "),a!==null&&(a+=`
1527
+ `));if(!a)return null;Gx=XA(a,!0)}return Gx.shift()},ex={ttys:[],init(){},shutdown(){},register(a,f){ex.ttys[a]={input:[],output:[],ops:f},o.registerDevice(a,ex.stream_ops)},stream_ops:{open(a){var f=ex.ttys[a.node.rdev];if(!f)throw new o.ErrnoError(43);a.tty=f,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,f,d,b,y){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var $=0,G=0;G<b;G++){var V;try{V=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&$===0)throw new o.ErrnoError(6);if(V==null)break;$++,f[d+G]=V}return $&&(a.node.atime=Date.now()),$},write(a,f,d,b,y){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var $=0;$<b;$++)a.tty.ops.put_char(a.tty,f[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return Ur()},put_char(a,f){f===null||f===10?(N(tA(a.output)),a.output=[]):f!=0&&a.output.push(f)},fsync(a){a.output?.length>0&&(N(tA(a.output)),a.output=[])},ioctl_tcgets(a){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(a,f,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,f){f===null||f===10?(R(tA(a.output)),a.output=[]):f!=0&&a.output.push(f)},fsync(a){a.output?.length>0&&(R(tA(a.output)),a.output=[])}}},TA=a=>{C0()},s0={ops_table:null,mount(a){return s0.createNode(null,"/",16895,0)},createNode(a,f,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);s0.ops_table||(s0.ops_table={dir:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr,lookup:s0.node_ops.lookup,mknod:s0.node_ops.mknod,rename:s0.node_ops.rename,unlink:s0.node_ops.unlink,rmdir:s0.node_ops.rmdir,readdir:s0.node_ops.readdir,symlink:s0.node_ops.symlink},stream:{llseek:s0.stream_ops.llseek}},file:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr},stream:{llseek:s0.stream_ops.llseek,read:s0.stream_ops.read,write:s0.stream_ops.write,mmap:s0.stream_ops.mmap,msync:s0.stream_ops.msync}},link:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr,readlink:s0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:s0.node_ops.getattr,setattr:s0.node_ops.setattr},stream:o.chrdev_stream_ops}});var y=o.createNode(a,f,d,b);return o.isDir(y.mode)?(y.node_ops=s0.ops_table.dir.node,y.stream_ops=s0.ops_table.dir.stream,y.contents={}):o.isFile(y.mode)?(y.node_ops=s0.ops_table.file.node,y.stream_ops=s0.ops_table.file.stream,y.usedBytes=0,y.contents=s0.emptyFileContents??(s0.emptyFileContents=new Uint8Array(0))):o.isLink(y.mode)?(y.node_ops=s0.ops_table.link.node,y.stream_ops=s0.ops_table.link.stream):o.isChrdev(y.mode)&&(y.node_ops=s0.ops_table.chrdev.node,y.stream_ops=s0.ops_table.chrdev.stream),y.atime=y.mtime=y.ctime=Date.now(),a&&(a.contents[f]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,f){var d=a.contents.length;if(!(d>=f)){var b=1024*1024;f=Math.max(f,d*(d<b?2:1.125)>>>0),d&&(f=Math.max(f,256));var y=s0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(f),a.contents.set(y)}},resizeFileStorage(a,f){if(a.usedBytes!=f){var d=a.contents;a.contents=new Uint8Array(f),a.contents.set(d.subarray(0,Math.min(f,a.usedBytes))),a.usedBytes=f}},node_ops:{getattr(a){var f={};return f.dev=o.isChrdev(a.mode)?a.id:1,f.ino=a.id,f.mode=a.mode,f.nlink=1,f.uid=0,f.gid=0,f.rdev=a.rdev,o.isDir(a.mode)?f.size=4096:o.isFile(a.mode)?f.size=a.usedBytes:o.isLink(a.mode)?f.size=a.link.length:f.size=0,f.atime=new Date(a.atime),f.mtime=new Date(a.mtime),f.ctime=new Date(a.ctime),f.blksize=4096,f.blocks=Math.ceil(f.size/f.blksize),f},setattr(a,f){for(let d of["mode","atime","mtime","ctime"])f[d]!=null&&(a[d]=f[d]);f.size!==void 0&&s0.resizeFileStorage(a,f.size)},lookup(a,f){throw s0.doesNotExistError||(s0.doesNotExistError=new o.ErrnoError(44),s0.doesNotExistError.stack="<generic error, no stack>"),s0.doesNotExistError},mknod(a,f,d,b){return s0.createNode(a,f,d,b)},rename(a,f,d){var b;try{b=o.lookupNode(f,d)}catch{}if(b){if(o.isDir(a.mode))for(var y in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],f.contents[d]=a,a.name=d,f.ctime=f.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,f){delete a.contents[f],a.ctime=a.mtime=Date.now()},rmdir(a,f){var d=o.lookupNode(a,f);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[f],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,f,d){var b=s0.createNode(a,f,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,f,d,b,y){var $=a.node.contents;if(y>=a.node.usedBytes)return 0;var G=Math.min(a.node.usedBytes-y,b);return f.set($.subarray(y,y+G),d),G},write(a,f,d,b,y,$){if(f.buffer===Fx.buffer&&($=!1),!b)return 0;var G=a.node;return G.mtime=G.ctime=Date.now(),$?(G.contents=f.subarray(d,d+b),G.usedBytes=b):G.usedBytes===0&&y===0?(G.contents=f.slice(d,d+b),G.usedBytes=b):(s0.expandFileStorage(G,y+b),G.contents.set(f.subarray(d,d+b),y),G.usedBytes=Math.max(G.usedBytes,y+b)),b},llseek(a,f,d){var b=f;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,f,d,b,y){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var $,G,V=a.node.contents;if(!(y&2)&&V.buffer===Fx.buffer)G=!1,$=V.byteOffset;else{if(G=!0,$=TA(f),!$)throw new o.ErrnoError(48);V&&((d>0||d+f<V.length)&&(V.subarray?V=V.subarray(d,d+f):V=Array.prototype.slice.call(V,d,d+f)),Fx.set(V,$))}return{ptr:$,allocated:G}},msync(a,f,d,b,y){return s0.stream_ops.write(a,f,0,b,d,!1),0}}},PA=a=>{if(typeof a!="string")return a;var f={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=f[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Xx=a=>(typeof a=="string"&&(a=XA(a,!0)),a.subarray||(a=new Uint8Array(a)),a),sA=(a,f)=>{var d=0;return a&&(d|=365),f&&(d|=146),d},q0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},y0={mount(a){return y0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,f,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(q0.EINVAL);var y=o.createNode(a,f,d);return y.node_ops=y0.node_ops,y.stream_ops=y0.stream_ops,y},realPath(a){for(var f=[];a.parent!==a;)f.push(a.name),a=a.parent;return f.push(a.mount.opts.root),f.reverse(),c0.join(...f)},node_ops:{getattr(a){var f=y0.realPath(a),d;try{d=a.mount.opts.fs.lstat(f)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,f){var d=y0.realPath(a);try{if(f.mode!==void 0&&(a.mount.opts.fs.chmod(d,f.mode),a.mode=f.mode),f.atime||f.mtime){var b=new Date(f.atime||f.mtime),y=new Date(f.mtime||f.atime);a.mount.opts.fs.utime(d,b,y)}f.size!==void 0&&a.mount.opts.fs.truncate(d,f.size)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},lookup(a,f){try{var d=c0.join2(y0.realPath(a),f),b=a.mount.opts.fs.lstat(d).mode,y=y0.createNode(a,f,b);return y}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},mknod(a,f,d,b){var y=y0.createNode(a,f,d,b),$=y0.realPath(y);try{o.isDir(y.mode)?y.mount.opts.fs.mkdir($,y.mode):y.mount.opts.fs.writeFile($,"",{mode:y.mode})}catch(G){throw G.code?new o.ErrnoError(q0[G.code]):G}return y},rename(a,f,d){var b=y0.realPath(a),y=c0.join2(y0.realPath(f),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},unlink(a,f){var d=c0.join2(y0.realPath(a),f);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},rmdir(a,f){var d=c0.join2(y0.realPath(a),f);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},readdir(a){var f=y0.realPath(a);try{return a.mount.opts.fs.readdir(f)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},symlink(a,f,d){var b=c0.join2(y0.realPath(a),f);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(q0[y.code]):y}},readlink(a){var f=y0.realPath(a);try{return a.mount.opts.fs.readlink(f)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}}},stream_ops:{open(a){var f=y0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(f,a.flags)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(f){throw f.code?new o.ErrnoError(q0[f.code]):f}},read(a,f,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,f,d,b,y)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},write(a,f,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,f,d,b,y)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},llseek(a,f,d){var b=f;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var y=a.node.node_ops.getattr(a.node);b+=y.size}catch($){throw new o.ErrnoError(q0[$.code])}if(b<0)throw new o.ErrnoError(q0.EINVAL);return b}}},dA=async a=>{var f=await h(a);return new Uint8Array(f)},$e=(...a)=>o.createDataFile(...a),Cx=a=>a,fx=0,m0=null,Te=a=>{if(fx--,n.monitorRunDependencies?.(fx),fx==0&&m0){var f=m0;m0=null,f()}},Tx=a=>{fx++,n.monitorRunDependencies?.(fx)},ce=[],uA=async(a,f)=>{typeof Browser<"u"&&Browser.init();for(var d of ce)if(d.canHandle(f))return d.handle(a,f);return a},qA=async(a,f,d,b,y,$,G,V)=>{var F0=f?Bx.resolve(c0.join2(a,f)):a,u0=Cx(`cp ${F0}`);Tx(u0);try{var z0=d;typeof d=="string"&&(z0=await dA(d)),z0=await uA(z0,F0),V?.(),$||$e(a,f,z0,b,y,G)}finally{Te(u0)}},Hr=(a,f,d,b,y,$,G,V,F0,u0)=>{qA(a,f,d,b,y,V,F0,u0).then($).catch(G)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){px(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){px(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,f,d,b){px(this,"node_ops",{}),px(this,"stream_ops",{}),px(this,"readMode",365),px(this,"writeMode",146),px(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=f,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,f={}){if(!a)throw new o.ErrnoError(44);f.follow_mount??(f.follow_mount=!0),c0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(u0=>!!u0),y=o.root,$="/",G=0;G<b.length;G++){var V=G===b.length-1;if(V&&f.parent)break;if(b[G]!=="."){if(b[G]===".."){if($=c0.dirname($),o.isRoot(y)){a=$+"/"+b.slice(G+1).join("/"),d--;continue x}else y=y.parent;continue}$=c0.join2($,b[G]);try{y=o.lookupNode(y,b[G])}catch(u0){if(u0?.errno===44&&V&&f.noent_okay)return{path:$};throw u0}if(o.isMountpoint(y)&&(!V||f.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!V||f.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var F0=y.node_ops.readlink(y);c0.isAbs(F0)||(F0=c0.dirname($)+"/"+F0),a=F0+"/"+b.slice(G+1).join("/");continue x}}}return{path:$,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var f;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return f?d[d.length-1]!=="/"?`${d}/${f}`:d+f:d}f=f?`${a.name}/${f}`:a.name,a=a.parent}},hashName(a,f){for(var d=0,b=0;b<f.length;b++)d=(d<<5)-d+f.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var f=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[f],o.nameTable[f]=a},hashRemoveNode(a){var f=o.hashName(a.parent.id,a.name);if(o.nameTable[f]===a)o.nameTable[f]=a.name_next;else for(var d=o.nameTable[f];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,f){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,f),y=o.nameTable[b];y;y=y.name_next){var $=y.name;if(y.parent.id===a.id&&$===f)return y}return o.lookup(a,f)},createNode(a,f,d,b){var y=new o.FSNode(a,f,d,b);return o.hashAddNode(y),y},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var f=["r","w","rw"][a&3];return a&512&&(f+="w"),f},nodePermissions(a,f){return o.ignorePermissions?0:f.includes("r")&&!(a.mode&292)||f.includes("w")&&!(a.mode&146)||f.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var f=o.nodePermissions(a,"x");return f||(a.node_ops.lookup?0:2)},mayCreate(a,f){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,f);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,f,d){var b;try{b=o.lookupNode(a,f)}catch($){return $.errno}var y=o.nodePermissions(a,"wx");if(y)return y;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,f){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(f);return o.isDir(a.mode)&&(d!=="r"||f&576)?31:o.nodePermissions(a,d)},checkOpExists(a,f){if(!a)throw new o.ErrnoError(f);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var f=o.getStream(a);if(!f)throw new o.ErrnoError(8);return f},getStream:a=>o.streams[a],createStream(a,f=-1){return a=Object.assign(new o.FSStream,a),f==-1&&(f=o.nextfd()),a.fd=f,o.streams[f]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,f=-1){var d=o.createStream(a,f);return d.stream_ops?.dup?.(d),d},doSetAttr(a,f,d){var b=a?.stream_ops.setattr,y=b?a:f;b??(b=f.node_ops.setattr),o.checkOpExists(b,63);try{b(y,d)}catch($){throw $ instanceof RangeError?new o.ErrnoError(22):$}},chrdev_stream_ops:{open(a){var f=o.getDevice(a.node.rdev);a.stream_ops=f.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,f)=>a<<8|f,registerDevice(a,f){o.devices[a]={stream_ops:f}},getDevice:a=>o.devices[a],getMounts(a){for(var f=[],d=[a];d.length;){var b=d.pop();f.push(b),d.push(...b.mounts)}return f},syncfs(a,f){typeof a=="function"&&(f=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&R(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function y(V){return o.syncFSRequests--,f(V)}function $(V){if(V)return $.errored?void 0:($.errored=!0,y(V));++b>=d.length&&y(null)}for(var G of d)G.type.syncfs?G.type.syncfs(G,a,$):$(null)},mount(a,f,d){var b=d==="/",y=!d,$;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!y){var G=o.lookupPath(d,{follow_mount:!1});if(d=G.path,$=G.node,o.isMountpoint($))throw new o.ErrnoError(10);if(!o.isDir($.mode))throw new o.ErrnoError(54)}var V={type:a,opts:f,mountpoint:d,mounts:[]},F0=a.mount(V);return F0.mount=V,V.root=F0,b?o.root=F0:$&&($.mounted=V,$.mount&&$.mount.mounts.push(V)),F0},unmount(a){var f=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(f.node))throw new o.ErrnoError(28);var d=f.node,b=d.mounted,y=o.getMounts(b);for(var[$,G]of Object.entries(o.nameTable))for(;G;){var V=G.name_next;y.includes(G.mount)&&o.destroyNode(G),G=V}d.mounted=null;var F0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(F0,1)},lookup(a,f){return a.node_ops.lookup(a,f)},mknod(a,f,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,$=c0.basename(a);if(!$)throw new o.ErrnoError(28);if($==="."||$==="..")throw new o.ErrnoError(20);var G=o.mayCreate(y,$);if(G)throw new o.ErrnoError(G);if(!y.node_ops.mknod)throw new o.ErrnoError(63);return y.node_ops.mknod(y,$,f,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var f={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(f,a.node_ops.statfs(a.mount.opts.root)),f},create(a,f=438){return f&=4095,f|=32768,o.mknod(a,f,0)},mkdir(a,f=511){return f&=1023,f|=16384,o.mknod(a,f,0)},mkdirTree(a,f){var d=a.split("/"),b="";for(var y of d)if(y){(b||c0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,f)}catch($){if($.errno!=20)throw $}}},mkdev(a,f,d){return typeof d>"u"&&(d=f,f=438),f|=8192,o.mknod(a,f,d)},symlink(a,f){if(!Bx.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(f,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=c0.basename(f),$=o.mayCreate(b,y);if($)throw new o.ErrnoError($);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,y,a)},rename(a,f){var d=c0.dirname(a),b=c0.dirname(f),y=c0.basename(a),$=c0.basename(f),G,V,F0;if(G=o.lookupPath(a,{parent:!0}),V=G.node,G=o.lookupPath(f,{parent:!0}),F0=G.node,!V||!F0)throw new o.ErrnoError(44);if(V.mount!==F0.mount)throw new o.ErrnoError(75);var u0=o.lookupNode(V,y),z0=Bx.relative(a,b);if(z0.charAt(0)!==".")throw new o.ErrnoError(28);if(z0=Bx.relative(f,d),z0.charAt(0)!==".")throw new o.ErrnoError(55);var I0;try{I0=o.lookupNode(F0,$)}catch{}if(u0!==I0){var T0=o.isDir(u0.mode),j0=o.mayDelete(V,y,T0);if(j0)throw new o.ErrnoError(j0);if(j0=I0?o.mayDelete(F0,$,T0):o.mayCreate(F0,$),j0)throw new o.ErrnoError(j0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(u0)||I0&&o.isMountpoint(I0))throw new o.ErrnoError(10);if(F0!==V&&(j0=o.nodePermissions(V,"w"),j0))throw new o.ErrnoError(j0);o.hashRemoveNode(u0);try{V.node_ops.rename(u0,F0,$),u0.parent=F0}catch(rx){throw rx}finally{o.hashAddNode(u0)}}},rmdir(a){var f=o.lookupPath(a,{parent:!0}),d=f.node,b=c0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!0);if($)throw new o.ErrnoError($);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(y)},readdir(a){var f=o.lookupPath(a,{follow:!0}),d=f.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var f=o.lookupPath(a,{parent:!0}),d=f.node;if(!d)throw new o.ErrnoError(44);var b=c0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!1);if($)throw new o.ErrnoError($);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(y)},readlink(a){var f=o.lookupPath(a),d=f.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,f){var d=o.lookupPath(a,{follow:!f}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var f=o.getStreamChecked(a),d=f.node,b=f.stream_ops.getattr,y=b?f:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,f,d,b){o.doSetAttr(a,f,{mode:d&4095|f.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,f,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,f,d)},lchmod(a,f){o.chmod(a,f,!0)},fchmod(a,f){var d=o.getStreamChecked(a);o.doChmod(d,d.node,f,!1)},doChown(a,f,d){o.doSetAttr(a,f,{timestamp:Date.now(),dontFollow:d})},chown(a,f,d,b){var y;if(typeof a=="string"){var $=o.lookupPath(a,{follow:!b});y=$.node}else y=a;o.doChown(null,y,b)},lchown(a,f,d){o.chown(a,f,d,!0)},fchown(a,f,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,f,d){if(o.isDir(f.mode))throw new o.ErrnoError(31);if(!o.isFile(f.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(f,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,f,{size:d,timestamp:Date.now()})},truncate(a,f){if(f<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,f)},ftruncate(a,f){var d=o.getStreamChecked(a);if(f<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,f)},utime(a,f,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,$=o.checkOpExists(y.node_ops.setattr,63);$(y,{atime:f,mtime:d})},open(a,f,d=438){if(a==="")throw new o.ErrnoError(44);f=PA(f),f&64?d=d&4095|32768:d=0;var b,y;if(typeof a=="object")b=a;else{y=a.endsWith("/");var $=o.lookupPath(a,{follow:!(f&131072),noent_okay:!0});b=$.node,a=$.path}var G=!1;if(f&64)if(b){if(f&128)throw new o.ErrnoError(20)}else{if(y)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),G=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(f&=-513),f&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!G){var V=o.mayOpen(b,f);if(V)throw new o.ErrnoError(V)}f&512&&!G&&o.truncate(b,0),f&=-131713;var F0=o.createStream({node:b,path:o.getPath(b),flags:f,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),G&&o.chmod(b,d&511),F0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(f){throw f}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,f,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,f,d),a.ungotten=[],a.position},read(a,f,d,b,y){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var $=typeof y<"u";if(!$)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var G=a.stream_ops.read(a,f,d,b,y);return $||(a.position+=G),G},write(a,f,d,b,y,$){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.write)throw new o.ErrnoError(28);a.seekable&&a.flags&1024&&o.llseek(a,0,2);var G=typeof y<"u";if(!G)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,f,d,b,y,$);return G||(a.position+=V),V},mmap(a,f,d,b,y){if((b&2)!==0&&(y&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!f)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,f,d,b,y)},msync(a,f,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,f,d,b,y):0},ioctl(a,f,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,f,d)},readFile(a,f={}){f.flags=f.flags||0,f.encoding=f.encoding||"binary",f.encoding!=="utf8"&&f.encoding!=="binary"&&C0(`Invalid encoding type "${f.encoding}"`);var d=o.open(a,f.flags),b=o.stat(a),y=b.size,$=new Uint8Array(y);return o.read(d,$,0,y,0),f.encoding==="utf8"&&($=tA($)),o.close(d),$},writeFile(a,f,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);f=Xx(f),o.write(b,f,0,f.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var f=o.lookupPath(a,{follow:!0});if(f.node===null)throw new o.ErrnoError(44);if(!o.isDir(f.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(f.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=f.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,y,$,G,V)=>G,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),f=0,d=()=>(f===0&&(we(a),f=a.byteLength),a[--f]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var f=o.createNode(a,"fd",16895,73);return f.stream_ops={llseek:s0.stream_ops.llseek},f.node_ops={lookup(d,b){var y=+b,$=o.getStreamChecked(y),G={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:y+1};return G.parent=G,G},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},f}},{},"/proc/self/fd")},createStandardStreams(a,f,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),f?o.createDevice("/dev","stdout",null,f):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),y=o.open("/dev/stdout",1),$=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(s0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:s0,PROXYFS:y0}},init(a,f,d){o.initialized=!0,a??(a=n.stdin),f??(f=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,f,d)},quit(){o.initialized=!1,ZA(0);for(var a of o.streams)a&&o.close(a)},findObject(a,f){var d=o.analyzePath(a,f);return d.exists?d.object:null},analyzePath(a,f){try{var d=o.lookupPath(a,{follow:!f});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=c0.basename(a),d=o.lookupPath(a,{follow:!f}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(y){b.error=y.errno}return b},createPath(a,f,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=f.split("/").reverse();y.length;){var $=y.pop();if($){var G=c0.join2(a,$);try{o.mkdir(G)}catch(V){if(V.errno!=20)throw V}a=G}}return G},createFile(a,f,d,b,y){var $=c0.join2(typeof a=="string"?a:o.getPath(a),f),G=sA(b,y);return o.create($,G)},createDataFile(a,f,d,b,y,$){var G=f;a&&(a=typeof a=="string"?a:o.getPath(a),G=f?c0.join2(a,f):a);var V=sA(b,y),F0=o.create(G,V);if(d){d=Xx(d),o.chmod(F0,V|146);var u0=o.open(F0,577);o.write(u0,d,0,d.length,0,$),o.close(u0),o.chmod(F0,V)}},createDevice(a,f,d,b){var y,$=c0.join2(typeof a=="string"?a:o.getPath(a),f),G=sA(!!d,!!b);(y=o.createDevice).major??(y.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(F0){F0.seekable=!1},close(F0){b?.buffer?.length&&b(10)},read(F0,u0,z0,I0,T0){for(var j0=0,rx=0;rx<I0;rx++){var mx;try{mx=d()}catch{throw new o.ErrnoError(29)}if(mx===void 0&&j0===0)throw new o.ErrnoError(6);if(mx==null)break;j0++,u0[z0+rx]=mx}return j0&&(F0.node.atime=Date.now()),j0},write(F0,u0,z0,I0,T0){for(var j0=0;j0<I0;j0++)try{b(u0[z0+j0])}catch{throw new o.ErrnoError(29)}return I0&&(F0.node.mtime=F0.node.ctime=Date.now()),j0}}),o.mkdev($,G,V)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)C0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,f,d,b,y){class ${constructor(){px(this,"lengthKnown",!1),px(this,"chunks",[])}get(T0){if(!(T0>this.length-1||T0<0)){var j0=T0%this.chunkSize,rx=T0/this.chunkSize|0;return this.getter(rx)[j0]}}setDataGetter(T0){this.getter=T0}cacheLength(){var T0=new XMLHttpRequest;T0.open("HEAD",d,!1),T0.send(null),T0.status>=200&&T0.status<300||T0.status===304||C0("Couldn't load "+d+". Status: "+T0.status);var j0=Number(T0.getResponseHeader("Content-length")),rx,mx=(rx=T0.getResponseHeader("Accept-Ranges"))&&rx==="bytes",qx=(rx=T0.getResponseHeader("Content-Encoding"))&&rx==="gzip",Lx=1024*1024;mx||(Lx=j0);var Rx=(Ux,pA)=>{Ux>pA&&C0("invalid range ("+Ux+", "+pA+") or no bytes requested!"),pA>j0-1&&C0("only "+j0+" bytes available! programmer error!");var vx=new XMLHttpRequest;return vx.open("GET",d,!1),j0!==Lx&&vx.setRequestHeader("Range","bytes="+Ux+"-"+pA),vx.responseType="arraybuffer",vx.overrideMimeType&&vx.overrideMimeType("text/plain; charset=x-user-defined"),vx.send(null),vx.status>=200&&vx.status<300||vx.status===304||C0("Couldn't load "+d+". Status: "+vx.status),vx.response!==void 0?new Uint8Array(vx.response||[]):XA(vx.responseText||"",!0)},re=this;re.setDataGetter(Ux=>{var pA=Ux*Lx,vx=(Ux+1)*Lx-1;return vx=Math.min(vx,j0-1),typeof re.chunks[Ux]>"u"&&(re.chunks[Ux]=Rx(pA,vx)),typeof re.chunks[Ux]>"u"&&C0("doXHR failed!"),re.chunks[Ux]}),(qx||!j0)&&(Lx=j0=1,j0=this.getter(0).length,Lx=j0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=j0,this._chunkSize=Lx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||C0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var G=new $,V={isDevice:!1,contents:G}}else var V={isDevice:!1,url:d};var F0=o.createFile(a,f,V,b,y);V.contents?F0.contents=V.contents:V.url&&(F0.contents=null,F0.url=V.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var u0={};for(let[I0,T0]of Object.entries(F0.stream_ops))u0[I0]=(...j0)=>(o.forceLoadFile(F0),T0(...j0));function z0(I0,T0,j0,rx,mx){var qx=I0.node.contents;if(mx>=qx.length)return 0;var Lx=Math.min(qx.length-mx,rx);if(qx.slice)for(var Rx=0;Rx<Lx;Rx++)T0[j0+Rx]=qx[mx+Rx];else for(var Rx=0;Rx<Lx;Rx++)T0[j0+Rx]=qx.get(mx+Rx);return Lx}return u0.read=(I0,T0,j0,rx,mx)=>(o.forceLoadFile(F0),z0(I0,T0,j0,rx,mx)),u0.mmap=(I0,T0,j0,rx,mx)=>{o.forceLoadFile(F0);var qx=TA(T0);if(!qx)throw new o.ErrnoError(48);return z0(I0,Fx,qx,T0,j0),{ptr:qx,allocated:!0}},F0.stream_ops=u0,F0}},k0={currentUmask:18,calculateAt(a,f,d){if(c0.isAbs(f))return f;var b;if(a===-100)b=o.cwd();else{var y=k0.getStreamFromFD(a);b=y.path}if(f.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+f},writeStat(a,f){f0[a>>2]=f.dev,f0[a+4>>2]=f.mode,f0[a+8>>2]=f.nlink,f0[a+12>>2]=f.uid,f0[a+16>>2]=f.gid,f0[a+20>>2]=f.rdev,K0[a+24>>3]=BigInt(f.size),O0[a+32>>2]=4096,O0[a+36>>2]=f.blocks;var d=f.atime.getTime(),b=f.mtime.getTime(),y=f.ctime.getTime();return K0[a+40>>3]=BigInt(Math.floor(d/1e3)),f0[a+48>>2]=d%1e3*1e3*1e3,K0[a+56>>3]=BigInt(Math.floor(b/1e3)),f0[a+64>>2]=b%1e3*1e3*1e3,K0[a+72>>3]=BigInt(Math.floor(y/1e3)),f0[a+80>>2]=y%1e3*1e3*1e3,K0[a+88>>3]=BigInt(f.ino),0},writeStatFs(a,f){f0[a+4>>2]=f.bsize,f0[a+60>>2]=f.bsize,K0[a+8>>3]=BigInt(f.blocks),K0[a+16>>3]=BigInt(f.bfree),K0[a+24>>3]=BigInt(f.bavail),K0[a+32>>3]=BigInt(f.files),K0[a+40>>3]=BigInt(f.ffree),f0[a+48>>2]=f.fsid,f0[a+64>>2]=f.flags,f0[a+56>>2]=f.namelen},doMsync(a,f,d,b,y){if(!o.isFile(f.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=rA.slice(a,a+d);o.msync(f,$,y,d,b)},getStreamFromFD(a){var f=o.getStreamChecked(a);return f},varargs:void 0,getStr(a){var f=bx(a);return f}};function Pe(a,f,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(f){case 0:{var y=nA();if(y<0)return-28;for(;o.streams[y];)y++;var $;return $=o.dupStream(b,y),$.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var y=nA(),G=289792;return b.flags=b.flags&~G|y&G,0}case 12:{var y=$A(),V=0;return J0[y+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(F0){if(typeof o>"u"||F0.name!=="ErrnoError")throw F0;return-F0.errno}}function NA(a,f,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(f){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var y=b.tty.ops.ioctl_tcgets(b),$=$A();O0[$>>2]=y.c_iflag||0,O0[$+4>>2]=y.c_oflag||0,O0[$+8>>2]=y.c_cflag||0,O0[$+12>>2]=y.c_lflag||0;for(var G=0;G<32;G++)Fx[$+G+17]=y.c_cc[G]||0;return 0}return 0}case 21510:case 21511:case 21512:return b.tty?0:-59;case 21506:case 21507:case 21508:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcsets){for(var $=$A(),V=O0[$>>2],F0=O0[$+4>>2],u0=O0[$+8>>2],z0=O0[$+12>>2],I0=[],G=0;G<32;G++)I0.push(Fx[$+G+17]);return b.tty.ops.ioctl_tcsets(b.tty,f,{c_iflag:V,c_oflag:F0,c_cflag:u0,c_lflag:z0,c_cc:I0})}return 0}case 21519:{if(!b.tty)return-59;var $=$A();return O0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=$A();return o.ioctl(b,f,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var T0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=$A();J0[$>>1]=T0[0],J0[$+2>>1]=T0[1]}return 0}case 21524:return b.tty?0:-59;case 21515:return b.tty?0:-59;default:return-28}}catch(j0){if(typeof o>"u"||j0.name!=="ErrnoError")throw j0;return-j0.errno}}function DA(a,f,d,b){k0.varargs=b;try{f=k0.getStr(f),f=k0.calculateAt(a,f);var y=b?nA():0;return d&64&&(y&=~k0.currentUmask),o.open(f,d,y).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var Jr=()=>2147483648,Ee=(a,f)=>Math.ceil(a/f)*f,sr=a=>{var f=IA.buffer.byteLength,d=(a-f+65535)/65536|0;try{return IA.grow(d),Z(),1}catch{}},ir=a=>{var f=rA.length;a>>>=0;var d=Jr();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=f*(1+.2/b);y=Math.min(y,a+100663296);var $=Math.min(d,Ee(Math.max(a,y),65536)),G=sr($);if(G)return!0}return!1};function Kr(a){try{var f=k0.getStreamFromFD(a);return o.close(f),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var zr=(a,f,d,b)=>{for(var y=0,$=0;$<d;$++){var G=f0[f>>2],V=f0[f+4>>2];f+=8;var F0=o.read(a,Fx,G,V,b);if(F0<0)return-1;if(y+=F0,F0<V)break;typeof b<"u"&&(b+=F0)}return y};function Vr(a,f,d,b){try{var y=k0.getStreamFromFD(a),$=zr(y,f,d);return f0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var Be=9007199254740992,ar=-9007199254740992,YA=a=>a<ar||a>Be?NaN:Number(a);function Ce(a,f,d,b){f=YA(f);try{if(isNaN(f))return 22;var y=k0.getStreamFromFD(a);return o.llseek(y,f,d),K0[b>>3]=BigInt(y.position),y.getdents&&f===0&&d===0&&(y.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var Wr=(a,f,d,b)=>{for(var y=0,$=0;$<d;$++){var G=f0[f>>2],V=f0[f+4>>2];f+=8;var F0=o.write(a,Fx,G,V,b);if(F0<0)return-1;if(y+=F0,F0<V)break;typeof b<"u"&&(b+=F0)}return y};function or(a,f,d,b){try{var y=k0.getStreamFromFD(a),$=Wr(y,f,d);return f0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var Xr=0,QA=()=>fe||Xr>0,qe=a=>{M=a,QA()||(n.onExit?.(a),t0=!0),m(a,new eA(a))},Fr=(a,f)=>{M=a,QA()||l0(),qe(a)},vr=a=>{if(a instanceof eA||a=="unwind")return M;m(1,a)},Yr=(a,f,d)=>Se(a,rA,f,d),lr=a=>xe(a),Qr=a=>{var f=WA(a)+1,d=lr(f);return Yr(a,d,f),d},Zr=(...a)=>o.createPath(...a),de=(...a)=>o.unlink(...a),xt=(...a)=>o.createLazyFile(...a),At=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=Hr,o.preloadFile=qA,o.staticInit(),n.noExitRuntime&&(fe=n.noExitRuntime),n.preloadPlugins&&(ce=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(U=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=dx,n.addRunDependency=Tx,n.removeRunDependency=Te,n.FS_preloadFile=qA,n.FS_unlink=de,n.FS_createPath=Zr,n.FS_createDevice=At,n.FS=o,n.FS_createDataFile=$e,n.FS_createLazyFile=xt,n.PROXYFS=y0;var fr,cr,ZA,Er,xe,Ne,Px,et,IA;function Ae(a){fr=n._main=a.__main_argc_argv,cr=a.__funcs_on_exit,ZA=a.fflush,Er=a._emscripten_stack_restore,xe=a._emscripten_stack_alloc,Ne=a.emscripten_stack_get_current,Px=IA=a.memory,et=a.__indirect_function_table}var Ie={__assert_fail:CA,__syscall_fcntl64:Pe,__syscall_ioctl:NA,__syscall_openat:DA,emscripten_resize_heap:ir,fd_close:Kr,fd_read:Vr,fd_seek:Ce,fd_write:or};function dx(a=[]){var f=fr;a.unshift(D);var d=a.length,b=lr((d+1)*4),y=b;for(var $ of a)f0[y>>2]=Qr($),y+=4;f0[y>>2]=0;try{var G=f(d,b);return Fr(G,!0),G}catch(V){return vr(V)}}function ue(a=u){if(fx>0){m0=ue;return}if(o0(),fx>0){m0=ue;return}function f(){if(n.calledRun=!0,!t0){O(),H?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||dx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),f()},1)):f()}var ee;return ee=await Ax(),ue(),a0?s=n:s=new Promise((a,f)=>{H=a,J=f}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),go={};eE(go,{createPawnCC:()=>aE,createPawnDbg:()=>oE});yo.exports=rE(go);var sE=ho(tE(),1),iE=ho(nE(),1),aE=sE.default,oE=iE.default});var ke=ua((Cm,pv)=>{"use strict";var lB=Object.create,gt=Object.defineProperty,fB=Object.getOwnPropertyDescriptor,_F=Object.getOwnPropertyNames,cB=Object.getPrototypeOf,EB=Object.prototype.hasOwnProperty,BB=(x,A,e)=>A in x?gt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,CB=(x,A)=>function(){try{return A||(0,x[_F(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},dB=(x,A)=>{for(var e in A)gt(x,e,{get:A[e],enumerable:!0})},wF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of _F(A))!EB.call(x,t)&&t!==e&&gt(x,t,{get:()=>A[t],enumerable:!(r=fB(A,t))||r.enumerable});return x},uB=(x,A,e)=>(e=x!=null?lB(cB(x)):{},wF(A||!x||!x.__esModule?gt(e,"default",{value:x,enumerable:!0}):e,x)),DB=x=>wF(gt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>BB(x,typeof A!="symbol"?A+"":A,e),pB=CB({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s;(function(){function c(e0){e0=e0.split("-")[0];for(var E0=e0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((D0,X0,V0)=>D0.padStart(2,"0")),E0.join("")}var C=e0=>[e0/1e4|0,(e0/100|0)%100,e0%100].join("."),g=2147483647,T=typeof process<"u"&&process.versions?.node?c(process.versions.node):g;if(T<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C(T)})`);var q=typeof navigator<"u"&&navigator.userAgent;if(q){var Y=q.includes("Safari/")&&!q.includes("Chrome/")&&q.match(/Version\/(\d+\.?\d*\.?\d*)/)?c(q.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):g;if(Y<15e4)throw new Error(`This emscripten-generated code requires Safari v${C(15e4)} (detected v${Y})`);var X=q.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(q.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):g;if(X<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${X})`);var x0=q.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(q.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):g;if(x0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${x0})`)}})();var n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=!F&&!E&&!v,D=[],m="./this.program",_=(c,C)=>{throw C};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var h="",S,P;if(E){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var N=require("fs");h=__dirname+"/",P=C=>{C=L(C)?new URL(C):C;var g=N.readFileSync(C);return k(Buffer.isBuffer(g)),g},S=async(C,g=!0)=>{C=L(C)?new URL(C):C;var T=N.readFileSync(C,g?void 0:"utf8");return k(g?Buffer.isBuffer(T):typeof T=="string"),T},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),D=process.argv.slice(2),_=(C,g)=>{throw process.exitCode=C,g}}else if(!u)if(F||v){try{h=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");v&&(P=c=>{var C=new XMLHttpRequest;return C.open("GET",c,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async c=>{if(L(c))return new Promise((g,T)=>{var q=new XMLHttpRequest;q.open("GET",c,!0),q.responseType="arraybuffer",q.onload=()=>{if(q.status==200||q.status==0&&q.response){g(q.response);return}T(q.status)},q.onerror=T,q.send(null)});var C=await fetch(c,{credentials:"same-origin"});if(C.ok)return C.arrayBuffer();throw new Error(C.status+" : "+C.url)}}else throw new Error("environment detection error");var R=console.log.bind(console),U=console.error.bind(console);k(!u,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var t0;globalThis.WebAssembly||U("no native wasm support detected");var M=!1;function k(c,C){c||ox("Assertion failed"+(C?": "+C:""))}var L=c=>c.startsWith("file://");function W(){var c=As();k((c&3)==0),c==0&&(c+=4),g0[c>>2]=34821223,g0[c+4>>2]=2310721022,g0[0]=1668509029}function Q(){if(!M){var c=As();c==0&&(c+=4);var C=g0[c>>2],g=g0[c+4>>2];(C!=34821223||g!=2310721022)&&ox(`Stack overflow! Stack cookie has been overwritten at ${Bx(c)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${Bx(g)} ${Bx(C)}`),g0[0]!=1668509029&&ox("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class J extends H{}var a0=!0;(()=>{var c=new Int16Array(1),C=new Int8Array(c.buffer);c[0]=25459,(C[0]!==115||C[1]!==99)&&ox("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function n0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,set(){ox(`Attempt to set \`Module.${c}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Z(c){return()=>k(!1,`call to '${c}' via reference taken before Wasm module initialization`)}function o0(c){Object.getOwnPropertyDescriptor(n,c)&&ox(`\`Module.${c}\` was supplied but \`${c}\` not included in INCOMING_MODULE_JS_API`)}function O(c){return c==="FS_createPath"||c==="FS_createDataFile"||c==="FS_createPreloadedFile"||c==="FS_preloadFile"||c==="FS_unlink"||c==="addRunDependency"||c==="FS_createLazyFile"||c==="FS_createDevice"||c==="removeRunDependency"}function i0(c){l0(c)}function l0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,get(){var C=`'${c}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;O(c)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),ox(C)}})}function B0(c){for(var C=0,g=c.length,T=new Uint8Array(g),q;C<g;++C)q=c.charCodeAt(C),T[C]=~q>>8&q;return T}var C0,_0,$0=!1;function ix(){var c=Lt.buffer;Wx=new Int8Array(c),wA=new Int16Array(c),n.HEAPU8=bx=new Uint8Array(c),ax=new Uint16Array(c),SA=new Int32Array(c),g0=new Uint32Array(c),nr=new Float32Array(c),fe=new Float64Array(c),tr=new BigInt64Array(c),tA=new BigUint64Array(c)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Vx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Gr(n.preRun.shift());n0("preRun"),CA(c0)}function kA(){k(!$0),$0=!0,Q(),Br.__wasm_call_ctors()}function _A(){if(Q(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)$A(n.postRun.shift());n0("postRun"),CA(nA)}function ox(c){n.onAbort?.(c),c=`Aborted(${c})`,U(c),M=!0;var C=new WebAssembly.RuntimeError(c);throw _0?.(C),C}function Ax(){ox("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var eA={init:Ax,createDataFile:Ax,createPreloadedFile:Ax,createLazyFile:Ax,open:Ax,mkdev:Ax,registerDevice:Ax,analyzePath:Ax,ErrnoError:Ax};function J0(c,C){return(...g)=>{k($0,`native function \`${c}\` called before runtime initialization`);var T=Br[c];return k(T,`exported native function \`${c}\` not found`),k(g.length<=C,`native function \`${c}\` called with ${g.length} args but expects ${C}`),T(...g)}}var O0;function K0(){return B0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
1528
1528
  \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F|\`\r\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~~\0\`\x7F~\x7F\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`|\x7F|\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\xA7\x07env_emval_new_cstring\0env_emval_get_property\0env\r_emval_decref\0\0env_emval_create_invoker\0env\r_emval_incref\0\0env\r_emval_invoke\0env_emval_run_destructors\0\0env_emval_get_module_property\0env_embind_register_value_object\0\venv#_embind_register_value_object_field\0\renv_embind_finalize_value_object\0\0env_embind_register_class\0env"_embind_register_class_constructor\0\venv_embind_register_class_property\0\renv_embind_register_function\0env\v__cxa_throw\0env_embind_register_void\0env_embind_register_bool\0\x07env_embind_register_integer\0
1529
1529
  env_embind_register_bigint\0env_embind_register_float\0env\x1B_embind_register_std_string\0env_embind_register_std_wstring\0env_embind_register_emval\0\0env_embind_register_memory_view\0wasi_snapshot_preview1
1530
1530
  random_get\0env _abort_js\0wasi_snapshot_preview1\bfd_write\0 wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xB6\xB4 \0\b\0\0\0\b\b\0\b\0 \0\0\b\0\b\0\0 \x07  \x07
@@ -2172,50 +2172,50 @@ jv.\xC9\xC2\x81\x85,r\x92\xA1\xE8\xBF\xA2Kf\xA8p\x8BK\xC2\xA3Ql\xC7\xE8\x92\xD
2172
2172
  \x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\x91\x9C\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xCB\x9C\v\f\0A\xD7\x9C\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\x85\x9D\v\0A\x91\x9D\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xBF\x9D\v\0A\xCB\x9D\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\x82\x9E\v\0\0\0\0\0\0\0\0\0 \0A\xB3\x9E\v\0A\xBF\x9E\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xED\x9E\v\0A\xF9\x9E\v\xAF\b\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\x90\\\0\0\fR\0\0\xB0O\0\0\xF8R\0\0N10__cxxabiv116__shim_type_infoE\0\0\0\0\fR\0\0\xE0O\0\0\xA4O\0\0N10__cxxabiv117__class_type_infoE\0\0\0\fR\0\0P\0\0\xA4O\0\0N10__cxxabiv117__pbase_type_infoE\0\0\0\fR\0\0@P\0\0P\0\0N10__cxxabiv119__pointer_type_infoE\0\fR\0\0pP\0\0\xA4O\0\0N10__cxxabiv120__function_type_infoE\0\0\0\0\fR\0\0\xA4P\0\0P\0\0N10__cxxabiv129__pointer_to_member_type_infoE\0\0\0\0\0\0\0\xF0P\0\0G\0\0\0H\0\0\0I\0\0\0J\0\0\0K\0\0\0\fR\0\0\xFCP\0\0\xA4O\0\0N10__cxxabiv123__fundamental_type_infoE\0\xDCP\0\0,Q\0\0v\0Dn\0\0\0\0\xDCP\0\0<Q\0\0b\0\0\0\xDCP\0\0HQ\0\0c\0\0\0\xDCP\0\0TQ\0\0h\0\0\0\xDCP\0\0\`Q\0\0a\0\0\0\xDCP\0\0lQ\0\0s\0\0\0\xDCP\0\0xQ\0\0t\0\0\0\xDCP\0\0\x84Q\0\0i\0\0\0\xDCP\0\0\x90Q\0\0j\0\0\0\xDCP\0\0\x9CQ\0\0l\0\0\0\xDCP\0\0\xA8Q\0\0m\0\0\0\xDCP\0\0\xB4Q\0\0x\0\0\0\xDCP\0\0\xC0Q\0\0y\0\0\0\xDCP\0\0\xCCQ\0\0f\0\0\0\xDCP\0\0\xD8Q\0\0d\0\0\0\0\0\0\0\xD4O\0\0G\0\0\0L\0\0\0I\0\0\0J\0\0\0M\0\0\0N\0\0\0O\0\0\0P\0\0\0\0\0\0\0,R\0\0G\0\0\0Q\0\0\0I\0\0\0J\0\0\0M\0\0\0R\0\0\0S\0\0\0T\0\0\0\fR\0\x008R\0\0\xD4O\0\0N10__cxxabiv120__si_class_type_infoE\0\0\0\0\0\0\0\x004P\0\0G\0\0\0U\0\0\0I\0\0\0J\0\0\0V\0\0\0\xE4Q\0\0\x84R\0\0St9exception\0\0\0\0\0\0\0\0\xA8R\0\x009\0\0\0W\0\0\0X\0\0\0\fR\0\0\xB4R\0\0|R\0\0St11logic_error\0\0\0\0\0\xD8R\0\x009\0\0\0Y\0\0\0X\0\0\0\fR\0\0\xE4R\0\0\xA8R\0\0St12length_error\0\0\0\0\xE4Q\0\0\0S\0\0St9type_info\0\0\0\0\0\0\xA0N\0\xEB\xA7~ u\x86\xFA\0\xB9,\xFD\xB7\x8Az\xBC\0\xCC\xA2\0=I\xD7\0\b\0\x93\b\x8F*_\xB7\xFAX\xD9\xFD\xCA\xBD\xE1\xCD\xDC@x\0}ga\xEC\0\xE5
2173
2173
  \xD4\0\xCC>Ov\x98\xAF\0\0D\0\xAE\0\xAE\`\0\xFAw!\xEB+\0\`A\x92\0\xA9\xA3nN\0A\xD8\xA7\v\f\0\0\0\0\0\0\0\0*\0A\xF8\xA7\v'9H\0A\x8E\xA8\v\x92\0A\xA2\xA8\v\x8D8R\`S\0\0\xCA\0\0\0\0\0\0\0\0\xBB\xDB\xEB\x07+\x07;\x07P\x07Success\0Illegal byte sequence\0Domain error\0Result not representable\0Not a tty\0Permission denied\0Operation not permitted\0No such file or directory\0No such process\0File exists\0Value too large for defined data type\0No space left on device\0Out of memory\0Resource busy\0Interrupted system call\0Resource temporarily unavailable\0Invalid seek\0Cross-device link\0Read-only file system\0Directory not empty\0Connection reset by peer\0Operation timed out\0Connection refused\0Host is down\0Host is unreachable\0Address in use\0Broken pipe\0I/O error\0No such device or address\0Block device required\0No such device\0Not a directory\0Is a directory\0Text file busy\0Exec format error\0Invalid argument\0Argument list too long\0Symbolic link loop\0Filename too long\0Too many open files in system\0No file descriptors available\0Bad file descriptor\0No child process\0Bad address\0File too large\0Too many links\0No locks available\0Resource deadlock would occur\0State not recoverable\0Owner died\0Operation canceled\0Function not implemented\0No message of desired type\0Identifier removed\0Device not a stream\0No data available\0Device timeout\0Out of streams resources\0Link has been severed\0Protocol error\0Bad message\0File descriptor in bad state\0Not a socket\0Destination address required\0Message too large\0Protocol wrong type for socket\0Protocol not available\0Protocol not supported\0Socket type not supported\0Not supported\0Protocol family not supported\0Address family not supported by protocol\0Address not available\0Network is down\0Network unreachable\0Connection reset by network\0Connection aborted\0No buffer space available\0Socket is connected\0Socket not connected\0Cannot send after socket shutdown\0Operation already in progress\0Operation in progress\0Stale file handle\0Remote I/O error\0Quota exceeded\0No medium found\0Wrong medium type\0Multihop attempted\0Required key not available\0Key has expired\0Key has been revoked\0Key was rejected by service\0A\xB0\xB7\vI\0\0\0 F\0\0 K\0\0\0\0\0\0\0\0\0\xA0J\0\0\xA0K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 L\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\x84\xB8\v@\0A\x9C\xB8\vA\0\0\0B\0\0\0u\0\0\0\0A\xB4\xB8\v\0A\xC4\xB8\v\xFF\xFF\xFF\xFF
2174
2174
  \0A\x88\xB9\v \xF8[\0\x008y\0\0\0A\x9C\xB9\vE\0A\xB4\xB9\v
2175
- A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function Fx(c){return c}async function Ir(c){return c}async function Lr(c,C){try{var g=await Ir(c),T=await WebAssembly.instantiate(g,C);return T}catch(q){O(`failed to asynchronously prepare wasm: ${q}`),I(c)&&O(`warning: Loading from a file URI (${c}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),ox(q)}}async function Rr(c,C,g){return Lr(C,g)}function l0(){var c={env:va,wasi_snapshot_preview1:va};return c}async function Or(){function c(Y,Z){return Er=Y.exports,Zf(Er),ix(),Er}var C=n;function g(Y){return k(n===C,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),C=null,c(Y.instance)}var T=l0();if(n.instantiateWasm)return new Promise((Y,Z)=>{try{n.instantiateWasm(T,(e0,E0)=>{Y(c(e0,E0))})}catch(e0){O(`Module.instantiateWasm callback failed with error: ${e0}`),Z(e0)}});O0??(O0=K0());var q=await Rr(n0,O0,T),Q=g(q);return Q}class eA{constructor(C){A0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${C})`,this.status=C}}var _A,wA,rr,zx,tr,fe,ax,g0,rA,bx,BA=c=>{for(;c.length>0;)c.shift()(n)},tA=[],SA=c=>tA.push(c),c0=[],Gr=c=>c0.push(c),_e=!0;function Bx(c){return k(typeof c=="number",`ptrToString expects a number, got ${typeof c}`),c>>>=0,"0x"+c.toString(16).padStart(8,"0")}var Ox=c=>{Ox.shown||(Ox.shown={}),Ox.shown[c]||(Ox.shown[c]=1,E&&(c="warning: "+c),O(c))};class VA{constructor(C){this.excPtr=C,this.ptr=C-24}set_type(C){g0[this.ptr+4>>2]=C}get_type(){return g0[this.ptr+4>>2]}set_destructor(C){g0[this.ptr+8>>2]=C}get_destructor(){return g0[this.ptr+8>>2]}set_caught(C){C=C?1:0,zx[this.ptr+12]=C}get_caught(){return zx[this.ptr+12]!=0}set_rethrown(C){C=C?1:0,zx[this.ptr+13]=C}get_rethrown(){return zx[this.ptr+13]!=0}init(C,g){this.set_adjusted_ptr(0),this.set_type(C),this.set_destructor(g)}set_adjusted_ptr(C){g0[this.ptr+16>>2]=C}get_adjusted_ptr(){return g0[this.ptr+16>>2]}}var we=0,WA=(c,C,g)=>{var T=new VA(c);T.init(C,g),we++,k(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},Ur=()=>ox("native code called abort()"),ex={},$A=c=>{for(;c.length;){var C=c.pop(),g=c.pop();g(C)}};function s0(c){return this.fromWireType(g0[c>>2])}var TA={},Vx={},nA={},P0=class extends Error{constructor(C){super(C),this.name="InternalError"}},y0=c=>{throw new P0(c)},CA=(c,C,g)=>{c.forEach(Z=>nA[Z]=C);function T(Z){var e0=g(Z);e0.length!==c.length&&y0("Mismatched type converter count");for(var E0=0;E0<c.length;++E0)$x(c[E0],e0[E0])}var q=new Array(C.length),Q=[],Y=0;for(let[Z,e0]of C.entries())Vx.hasOwnProperty(e0)?q[Z]=Vx[e0]:(Q.push(e0),TA.hasOwnProperty(e0)||(TA[e0]=[]),TA[e0].push(()=>{q[Z]=Vx[e0],++Y,Y===Q.length&&T(q)}));Q.length===0&&T(q)},Se=c=>{var C=ex[c];delete ex[c];var g=C.rawConstructor,T=C.rawDestructor,q=C.fields,Q=q.map(Y=>Y.getterReturnType).concat(q.map(Y=>Y.setterArgumentType));CA([c],Q,Y=>{var Z={};for(var[e0,E0]of q.entries()){let D0=Y[e0],X0=E0.getter,V0=E0.getterContext,Q0=Y[e0+q.length],qx=E0.setter,hx=E0.setterContext;Z[E0.fieldName]={read:iA=>D0.fromWireType(X0(V0,iA)),write:(iA,MA)=>{var pA=[];qx(hx,iA,Q0.toWireType(pA,MA)),$A(pA)},optional:D0.optional}}return[{name:C.name,fromWireType:D0=>{var X0={};for(var V0 in Z)X0[V0]=Z[V0].read(D0);return T(D0),X0},toWireType:(D0,X0)=>{for(var V0 in Z)if(!(V0 in X0)&&!Z[V0].optional)throw new TypeError(`Missing field: "${V0}"`);var Q0=g();for(V0 in Z)Z[V0].write(Q0,X0[V0]);return D0!==null&&D0.push(T,Q0),Q0},readValueFromPointer:s0,destructorFunction:T}]})},Cx=c=>{for(var C="";;){var g=bx[c++];if(!g)return C;C+=String.fromCharCode(g)}},lx=class extends Error{constructor(C){super(C),this.name="BindingError"}},m0=c=>{throw new lx(c)};function $e(c,C,g={}){var T=C.name;if(c||m0(`type "${T}" must have a positive integer typeid pointer`),Vx.hasOwnProperty(c)){if(g.ignoreDuplicateRegistrations)return;m0(`Cannot register type '${T}' twice`)}if(Vx[c]=C,delete nA[c],TA.hasOwnProperty(c)){var q=TA[c];delete TA[c],q.forEach(Q=>Q())}}function $x(c,C,g={}){return $e(c,C,g)}var le=(c,C,g)=>{switch(C){case 1:return g?T=>zx[T]:T=>bx[T];case 2:return g?T=>_A[T>>1]:T=>ax[T>>1];case 4:return g?T=>wA[T>>2]:T=>g0[T>>2];case 8:return g?T=>rr[T>>3]:T=>rA[T>>3];default:throw new TypeError(`invalid integer width (${C}): ${c}`)}},dA=c=>{if(c===null)return"null";var C=typeof c;return C==="object"||C==="array"||C==="function"?c.toString():""+c},PA=(c,C,g,T)=>{if(C<g||C>T)throw new TypeError(`Passing a number "${dA(C)}" from JS side to C/C++ side to an argument of type "${c}", which is outside the valid range [${g}, ${T}]!`)},Hr=(c,C,g,T,q)=>{C=Cx(C);let Q=T===0n,Y=Z=>Z;if(Q){let Z=g*8;Y=e0=>BigInt.asUintN(Z,e0),q=Y(q)}$x(c,{name:C,fromWireType:Y,toWireType:(Z,e0)=>{if(typeof e0=="number")e0=BigInt(e0);else if(typeof e0!="bigint")throw new TypeError(`Cannot convert "${dA(e0)}" to ${C}`);return PA(C,e0,T,q),e0},readValueFromPointer:le(C,g,!Q),destructorFunction:null})},o=(c,C,g,T)=>{C=Cx(C),$x(c,{name:C,fromWireType:function(q){return!!q},toWireType:function(q,Q){return Q?g:T},readValueFromPointer:function(q){return this.fromWireType(bx[q])},destructorFunction:null})},k0=c=>({count:c.count,deleteScheduled:c.deleteScheduled,preservePointerOnDelete:c.preservePointerOnDelete,ptr:c.ptr,ptrType:c.ptrType,smartPtr:c.smartPtr,smartPtrType:c.smartPtrType}),Te=c=>{function C(g){return g.$$.ptrType.registeredClass.name}m0(C(c)+" instance already deleted")},qA=!1,uA=c=>{},Jr=c=>{c.smartPtr?c.smartPtrType.rawDestructor(c.smartPtr):c.ptrType.registeredClass.rawDestructor(c.ptr)},ce=c=>{c.count.value-=1;var C=c.count.value===0;C&&Jr(c)},nr=(c,C,g)=>{if(C===g)return c;if(g.baseClass===void 0)return null;var T=nr(c,C,g.baseClass);return T===null?null:g.downcast(T)},sr={},Kr={},zr=(c,C)=>{for(C===void 0&&m0("ptr should not be undefined");c.baseClass;)C=c.upcast(C),c=c.baseClass;return C},Vr=(c,C)=>(C=zr(c,C),Kr[C]),Ee=(c,C)=>{(!C.ptrType||!C.ptr)&&y0("makeClassHandle requires ptr and ptrType");var g=!!C.smartPtrType,T=!!C.smartPtr;return g!==T&&y0("Both smartPtrType and smartPtr must be specified"),C.count={value:1},XA(Object.create(c,{$$:{value:C,writable:!0}}))};function ir(c){var C=this.getPointee(c);if(!C)return this.destructor(c),null;var g=Vr(this.registeredClass,C);if(g!==void 0){if(g.$$.count.value===0)return g.$$.ptr=C,g.$$.smartPtr=c,g.clone();var T=g.clone();return this.destructor(c),T}function q(){return this.isSmartPointer?Ee(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:C,smartPtrType:this,smartPtr:c}):Ee(this.registeredClass.instancePrototype,{ptrType:this,ptr:c})}var Q=this.registeredClass.getActualType(C),Y=sr[Q];if(!Y)return q.call(this);var Z;this.isConst?Z=Y.constPointerType:Z=Y.pointerType;var e0=nr(C,this.registeredClass,Z.registeredClass);return e0===null?q.call(this):this.isSmartPointer?Ee(Z.registeredClass.instancePrototype,{ptrType:Z,ptr:e0,smartPtrType:this,smartPtr:c}):Ee(Z.registeredClass.instancePrototype,{ptrType:Z,ptr:e0})}var XA=c=>globalThis.FinalizationRegistry?(qA=new FinalizationRegistry(C=>{console.warn(C.leakWarning),ce(C.$$)}),XA=C=>{var g=C.$$,T=!!g.smartPtr;if(T){var q={$$:g},Q=g.ptrType.registeredClass,Y=new Error(`Embind found a leaked C++ instance ${Q.name} <${Bx(g.ptr)}>.
2175
+ A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function Fx(c){return c}async function Mr(c){return c}async function Lr(c,C){try{var g=await Mr(c),T=await WebAssembly.instantiate(g,C);return T}catch(q){U(`failed to asynchronously prepare wasm: ${q}`),L(c)&&U(`warning: Loading from a file URI (${c}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),ox(q)}}async function Rr(c,C,g){return Lr(C,g)}function f0(){var c={env:ca,wasi_snapshot_preview1:ca};return c}async function Or(){function c(X,x0){return Br=X.exports,xf(Br),ix(),Br}var C=n;function g(X){return k(n===C,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),C=null,c(X.instance)}var T=f0();if(n.instantiateWasm)return new Promise((X,x0)=>{try{n.instantiateWasm(T,(e0,E0)=>{X(c(e0,E0))})}catch(e0){U(`Module.instantiateWasm callback failed with error: ${e0}`),x0(e0)}});O0??(O0=K0());var q=await Rr(t0,O0,T),Y=g(q);return Y}class rA{constructor(C){A0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${C})`,this.status=C}}var wA,SA,tr,Wx,nr,fe,ax,g0,tA,bx,CA=c=>{for(;c.length>0;)c.shift()(n)},nA=[],$A=c=>nA.push(c),c0=[],Gr=c=>c0.push(c),we=!0;function Bx(c){return k(typeof c=="number",`ptrToString expects a number, got ${typeof c}`),c>>>=0,"0x"+c.toString(16).padStart(8,"0")}var Gx=c=>{Gx.shown||(Gx.shown={}),Gx.shown[c]||(Gx.shown[c]=1,E&&(c="warning: "+c),U(c))};class WA{constructor(C){this.excPtr=C,this.ptr=C-24}set_type(C){g0[this.ptr+4>>2]=C}get_type(){return g0[this.ptr+4>>2]}set_destructor(C){g0[this.ptr+8>>2]=C}get_destructor(){return g0[this.ptr+8>>2]}set_caught(C){C=C?1:0,Wx[this.ptr+12]=C}get_caught(){return Wx[this.ptr+12]!=0}set_rethrown(C){C=C?1:0,Wx[this.ptr+13]=C}get_rethrown(){return Wx[this.ptr+13]!=0}init(C,g){this.set_adjusted_ptr(0),this.set_type(C),this.set_destructor(g)}set_adjusted_ptr(C){g0[this.ptr+16>>2]=C}get_adjusted_ptr(){return g0[this.ptr+16>>2]}}var Se=0,XA=(c,C,g)=>{var T=new WA(c);T.init(C,g),Se++,k(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},Ur=()=>ox("native code called abort()"),ex={},TA=c=>{for(;c.length;){var C=c.pop(),g=c.pop();g(C)}};function s0(c){return this.fromWireType(g0[c>>2])}var PA={},Xx={},sA={},q0=class extends Error{constructor(C){super(C),this.name="InternalError"}},y0=c=>{throw new q0(c)},dA=(c,C,g)=>{c.forEach(x0=>sA[x0]=C);function T(x0){var e0=g(x0);e0.length!==c.length&&y0("Mismatched type converter count");for(var E0=0;E0<c.length;++E0)Tx(c[E0],e0[E0])}var q=new Array(C.length),Y=[],X=0;for(let[x0,e0]of C.entries())Xx.hasOwnProperty(e0)?q[x0]=Xx[e0]:(Y.push(e0),PA.hasOwnProperty(e0)||(PA[e0]=[]),PA[e0].push(()=>{q[x0]=Xx[e0],++X,X===Y.length&&T(q)}));Y.length===0&&T(q)},$e=c=>{var C=ex[c];delete ex[c];var g=C.rawConstructor,T=C.rawDestructor,q=C.fields,Y=q.map(X=>X.getterReturnType).concat(q.map(X=>X.setterArgumentType));dA([c],Y,X=>{var x0={};for(var[e0,E0]of q.entries()){let D0=X[e0],X0=E0.getter,V0=E0.getterContext,Q0=X[e0+q.length],Nx=E0.setter,hx=E0.setterContext;x0[E0.fieldName]={read:aA=>D0.fromWireType(X0(V0,aA)),write:(aA,MA)=>{var bA=[];Nx(hx,aA,Q0.toWireType(bA,MA)),TA(bA)},optional:D0.optional}}return[{name:C.name,fromWireType:D0=>{var X0={};for(var V0 in x0)X0[V0]=x0[V0].read(D0);return T(D0),X0},toWireType:(D0,X0)=>{for(var V0 in x0)if(!(V0 in X0)&&!x0[V0].optional)throw new TypeError(`Missing field: "${V0}"`);var Q0=g();for(V0 in x0)x0[V0].write(Q0,X0[V0]);return D0!==null&&D0.push(T,Q0),Q0},readValueFromPointer:s0,destructorFunction:T}]})},Cx=c=>{for(var C="";;){var g=bx[c++];if(!g)return C;C+=String.fromCharCode(g)}},fx=class extends Error{constructor(C){super(C),this.name="BindingError"}},m0=c=>{throw new fx(c)};function Te(c,C,g={}){var T=C.name;if(c||m0(`type "${T}" must have a positive integer typeid pointer`),Xx.hasOwnProperty(c)){if(g.ignoreDuplicateRegistrations)return;m0(`Cannot register type '${T}' twice`)}if(Xx[c]=C,delete sA[c],PA.hasOwnProperty(c)){var q=PA[c];delete PA[c],q.forEach(Y=>Y())}}function Tx(c,C,g={}){return Te(c,C,g)}var ce=(c,C,g)=>{switch(C){case 1:return g?T=>Wx[T]:T=>bx[T];case 2:return g?T=>wA[T>>1]:T=>ax[T>>1];case 4:return g?T=>SA[T>>2]:T=>g0[T>>2];case 8:return g?T=>tr[T>>3]:T=>tA[T>>3];default:throw new TypeError(`invalid integer width (${C}): ${c}`)}},uA=c=>{if(c===null)return"null";var C=typeof c;return C==="object"||C==="array"||C==="function"?c.toString():""+c},qA=(c,C,g,T)=>{if(C<g||C>T)throw new TypeError(`Passing a number "${uA(C)}" from JS side to C/C++ side to an argument of type "${c}", which is outside the valid range [${g}, ${T}]!`)},Hr=(c,C,g,T,q)=>{C=Cx(C);let Y=T===0n,X=x0=>x0;if(Y){let x0=g*8;X=e0=>BigInt.asUintN(x0,e0),q=X(q)}Tx(c,{name:C,fromWireType:X,toWireType:(x0,e0)=>{if(typeof e0=="number")e0=BigInt(e0);else if(typeof e0!="bigint")throw new TypeError(`Cannot convert "${uA(e0)}" to ${C}`);return qA(C,e0,T,q),e0},readValueFromPointer:ce(C,g,!Y),destructorFunction:null})},o=(c,C,g,T)=>{C=Cx(C),Tx(c,{name:C,fromWireType:function(q){return!!q},toWireType:function(q,Y){return Y?g:T},readValueFromPointer:function(q){return this.fromWireType(bx[q])},destructorFunction:null})},k0=c=>({count:c.count,deleteScheduled:c.deleteScheduled,preservePointerOnDelete:c.preservePointerOnDelete,ptr:c.ptr,ptrType:c.ptrType,smartPtr:c.smartPtr,smartPtrType:c.smartPtrType}),Pe=c=>{function C(g){return g.$$.ptrType.registeredClass.name}m0(C(c)+" instance already deleted")},NA=!1,DA=c=>{},Jr=c=>{c.smartPtr?c.smartPtrType.rawDestructor(c.smartPtr):c.ptrType.registeredClass.rawDestructor(c.ptr)},Ee=c=>{c.count.value-=1;var C=c.count.value===0;C&&Jr(c)},sr=(c,C,g)=>{if(C===g)return c;if(g.baseClass===void 0)return null;var T=sr(c,C,g.baseClass);return T===null?null:g.downcast(T)},ir={},Kr={},zr=(c,C)=>{for(C===void 0&&m0("ptr should not be undefined");c.baseClass;)C=c.upcast(C),c=c.baseClass;return C},Vr=(c,C)=>(C=zr(c,C),Kr[C]),Be=(c,C)=>{(!C.ptrType||!C.ptr)&&y0("makeClassHandle requires ptr and ptrType");var g=!!C.smartPtrType,T=!!C.smartPtr;return g!==T&&y0("Both smartPtrType and smartPtr must be specified"),C.count={value:1},YA(Object.create(c,{$$:{value:C,writable:!0}}))};function ar(c){var C=this.getPointee(c);if(!C)return this.destructor(c),null;var g=Vr(this.registeredClass,C);if(g!==void 0){if(g.$$.count.value===0)return g.$$.ptr=C,g.$$.smartPtr=c,g.clone();var T=g.clone();return this.destructor(c),T}function q(){return this.isSmartPointer?Be(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:C,smartPtrType:this,smartPtr:c}):Be(this.registeredClass.instancePrototype,{ptrType:this,ptr:c})}var Y=this.registeredClass.getActualType(C),X=ir[Y];if(!X)return q.call(this);var x0;this.isConst?x0=X.constPointerType:x0=X.pointerType;var e0=sr(C,this.registeredClass,x0.registeredClass);return e0===null?q.call(this):this.isSmartPointer?Be(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0,smartPtrType:this,smartPtr:c}):Be(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0})}var YA=c=>globalThis.FinalizationRegistry?(NA=new FinalizationRegistry(C=>{console.warn(C.leakWarning),Ee(C.$$)}),YA=C=>{var g=C.$$,T=!!g.smartPtr;if(T){var q={$$:g},Y=g.ptrType.registeredClass,X=new Error(`Embind found a leaked C++ instance ${Y.name} <${Bx(g.ptr)}>.
2176
2176
  We'll free it automatically in this case, but this functionality is not reliable across various environments.
2177
2177
  Make sure to invoke .delete() manually once you're done with the instance instead.
2178
- Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(Y,ir),q.leakWarning=Y.stack.replace(/^Error: /,""),qA.register(C,q,C)}return C},uA=C=>qA.unregister(C),XA(c)):(XA=C=>C,c),Be=[],Wr=()=>{for(;Be.length;){var c=Be.pop();c.$$.deleteScheduled=!1,c.delete()}},ar,Xr=()=>{let c=YA.prototype;Object.assign(c,{isAliasOf(g){if(!(this instanceof YA)||!(g instanceof YA))return!1;var T=this.$$.ptrType.registeredClass,q=this.$$.ptr;g.$$=g.$$;for(var Q=g.$$.ptrType.registeredClass,Y=g.$$.ptr;T.baseClass;)q=T.upcast(q),T=T.baseClass;for(;Q.baseClass;)Y=Q.upcast(Y),Q=Q.baseClass;return T===Q&&q===Y},clone(){if(this.$$.ptr||Te(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var g=XA(Object.create(Object.getPrototypeOf(this),{$$:{value:k0(this.$$)}}));return g.$$.count.value+=1,g.$$.deleteScheduled=!1,g},delete(){this.$$.ptr||Te(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&m0("Object already scheduled for deletion"),uA(this),ce(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Te(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&m0("Object already scheduled for deletion"),Be.push(this),Be.length===1&&ar&&ar(Wr),this.$$.deleteScheduled=!0,this}});let C=Symbol.dispose;C&&(c[C]=c.delete)};function YA(){}var Pe=(c,C)=>Object.defineProperty(C,"name",{value:c}),or=(c,C,g)=>{if(c[C].overloadTable===void 0){var T=c[C];c[C]=function(...q){return c[C].overloadTable.hasOwnProperty(q.length)||m0(`Function '${g}' called with an invalid number of arguments (${q.length}) - expects one of (${c[C].overloadTable})!`),c[C].overloadTable[q.length].apply(this,q)},c[C].overloadTable=[],c[C].overloadTable[T.argCount]=T}},Fr=(c,C,g)=>{n.hasOwnProperty(c)?((g===void 0||n[c].overloadTable!==void 0&&n[c].overloadTable[g]!==void 0)&&m0(`Cannot register public name '${c}' twice`),or(n,c,c),n[c].overloadTable.hasOwnProperty(g)&&m0(`Cannot register multiple overloads of a function with the same number of arguments (${g})!`),n[c].overloadTable[g]=C):(n[c]=C,n[c].argCount=g)},Yr=48,vr=57,Qr=c=>{k(typeof c=="string"),c=c.replace(/[^a-zA-Z0-9_]/g,"$");var C=c.charCodeAt(0);return C>=Yr&&C<=vr?`_${c}`:c};function Zr(c,C,g,T,q,Q,Y,Z){this.name=c,this.constructor=C,this.instancePrototype=g,this.rawDestructor=T,this.baseClass=q,this.getActualType=Q,this.upcast=Y,this.downcast=Z,this.pureVirtualFunctions=[]}var Ce=(c,C,g)=>{for(;C!==g;)C.upcast||m0(`Expected null or instance of ${g.name}, got an instance of ${C.name}`),c=C.upcast(c),C=C.baseClass;return c};function xt(c,C){if(C===null)return this.isReference&&m0(`null is not a valid ${this.name}`),0;C.$$||m0(`Cannot pass "${dA(C)}" as a ${this.name}`),C.$$.ptr||m0(`Cannot pass deleted object as a pointer of type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=Ce(C.$$.ptr,g,this.registeredClass);return T}function At(c,C){var g;if(C===null)return this.isReference&&m0(`null is not a valid ${this.name}`),this.isSmartPointer?(g=this.rawConstructor(),c!==null&&c.push(this.rawDestructor,g),g):0;(!C||!C.$$)&&m0(`Cannot pass "${dA(C)}" as a ${this.name}`),C.$$.ptr||m0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&C.$$.ptrType.isConst&&m0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);var T=C.$$.ptrType.registeredClass;if(g=Ce(C.$$.ptr,T,this.registeredClass),this.isSmartPointer)switch(C.$$.smartPtr===void 0&&m0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:C.$$.smartPtrType===this?g=C.$$.smartPtr:m0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:g=C.$$.smartPtr;break;case 2:if(C.$$.smartPtrType===this)g=C.$$.smartPtr;else{var q=C.clone();g=this.rawShare(g,u0.toHandle(()=>q.delete())),c!==null&&c.push(this.rawDestructor,g)}break;default:m0("Unsupported sharing policy")}return g}function fr(c,C){if(C===null)return this.isReference&&m0(`null is not a valid ${this.name}`),0;C.$$||m0(`Cannot pass "${dA(C)}" as a ${this.name}`),C.$$.ptr||m0(`Cannot pass deleted object as a pointer of type ${this.name}`),C.$$.ptrType.isConst&&m0(`Cannot convert argument of type ${C.$$.ptrType.name} to parameter type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=Ce(C.$$.ptr,g,this.registeredClass);return T}var lr=()=>{Object.assign(QA.prototype,{getPointee(c){return this.rawGetPointee&&(c=this.rawGetPointee(c)),c},destructor(c){this.rawDestructor?.(c)},readValueFromPointer:s0,fromWireType:ir})};function QA(c,C,g,T,q,Q,Y,Z,e0,E0,D0){this.name=c,this.registeredClass=C,this.isReference=g,this.isConst=T,this.isSmartPointer=q,this.pointeeType=Q,this.sharingPolicy=Y,this.rawGetPointee=Z,this.rawConstructor=e0,this.rawShare=E0,this.rawDestructor=D0,!q&&C.baseClass===void 0?T?(this.toWireType=xt,this.destructorFunction=null):(this.toWireType=fr,this.destructorFunction=null):this.toWireType=At}var cr=(c,C,g)=>{n.hasOwnProperty(c)||y0("Replacing nonexistent public symbol"),n[c].overloadTable!==void 0&&g!==void 0?n[c].overloadTable[g]=C:(n[c]=C,n[c].argCount=g)},ZA=[],qe=c=>{var C=ZA[c];return C||(ZA[c]=C=Re.get(c)),k(Re.get(c)==C,"table mirror is out of date"),C},Tx=(c,C,g=!1)=>{k(!g,"async bindings are only supported with JSPI"),c=Cx(c);function T(){var Q=qe(C);return Q}var q=T();return typeof q!="function"&&m0(`unknown function pointer with signature ${c}: ${C}`),q};class et extends Error{}var NA=c=>{var C=aa(c),g=Cx(C);return re(C),g},xe=(c,C)=>{var g=[],T={};function q(Q){if(!T[Q]&&!Vx[Q]){if(nA[Q]){nA[Q].forEach(q);return}g.push(Q),T[Q]=!0}}throw C.forEach(q),new et(`${c}: `+g.map(NA).join([", "]))},Ne=(c,C,g,T,q,Q,Y,Z,e0,E0,D0,X0,V0)=>{D0=Cx(D0),Q=Tx(q,Q),Z&&(Z=Tx(Y,Z)),E0&&(E0=Tx(e0,E0)),V0=Tx(X0,V0);var Q0=Qr(D0);Fr(Q0,function(){xe(`Cannot construct ${D0} due to unbound types`,[T])}),CA([c,C,g],T?[T]:[],qx=>{var hx;qx=qx[0];var iA,MA;T?(iA=qx.registeredClass,MA=iA.instancePrototype):MA=YA.prototype;var pA=Pe(D0,function(...As){if(Object.getPrototypeOf(this)!==Br)throw new lx(`Use 'new' to construct ${D0}`);if(IA.constructor_body===void 0)throw new lx(`${D0} has no accessible constructor`);var Ea=IA.constructor_body[As.length];if(Ea===void 0)throw new lx(`Tried to invoke ctor of ${D0} with invalid number of parameters (${As.length}) - expected (${Object.keys(IA.constructor_body).toString()}) parameters instead!`);return Ea.apply(this,As)}),Br=Object.create(MA,{constructor:{value:pA}});pA.prototype=Br;var IA=new Zr(D0,pA,Br,V0,iA,Q,Z,E0);IA.baseClass&&((hx=IA.baseClass).__derivedClasses??(hx.__derivedClasses=[]),IA.baseClass.__derivedClasses.push(IA));var el=new QA(D0,IA,!0,!1,!1),la=new QA(D0+"*",IA,!1,!1,!1),ca=new QA(D0+" const*",IA,!1,!0,!1);return sr[c]={pointerType:la,constPointerType:ca},cr(Q0,pA),[el,la,ca]})},dx=(c,C)=>{for(var g=[],T=0;T<c;T++)g.push(g0[C+T*4>>2]);return g};function de(c){for(var C=1;C<c.length;++C)if(c[C]!==null&&c[C].destructorFunction===void 0)return!0;return!1}function Ae(c,C,g,T,q){if(c<C||c>g){var Q=C==g?C:`${C} to ${g}`;q(`function ${T} called with ${c} arguments, expected ${Q}`)}}function a(c,C,g,T){var q=de(c),Q=c.length-2,Y=[],Z=["fn"];C&&Z.push("thisWired");for(var e0=0;e0<Q;++e0)Y.push(`arg${e0}`),Z.push(`arg${e0}Wired`);Y=Y.join(","),Z=Z.join(",");var E0=`return function (${Y}) {
2178
+ Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(X,ar),q.leakWarning=X.stack.replace(/^Error: /,""),NA.register(C,q,C)}return C},DA=C=>NA.unregister(C),YA(c)):(YA=C=>C,c),Ce=[],Wr=()=>{for(;Ce.length;){var c=Ce.pop();c.$$.deleteScheduled=!1,c.delete()}},or,Xr=()=>{let c=QA.prototype;Object.assign(c,{isAliasOf(g){if(!(this instanceof QA)||!(g instanceof QA))return!1;var T=this.$$.ptrType.registeredClass,q=this.$$.ptr;g.$$=g.$$;for(var Y=g.$$.ptrType.registeredClass,X=g.$$.ptr;T.baseClass;)q=T.upcast(q),T=T.baseClass;for(;Y.baseClass;)X=Y.upcast(X),Y=Y.baseClass;return T===Y&&q===X},clone(){if(this.$$.ptr||Pe(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var g=YA(Object.create(Object.getPrototypeOf(this),{$$:{value:k0(this.$$)}}));return g.$$.count.value+=1,g.$$.deleteScheduled=!1,g},delete(){this.$$.ptr||Pe(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&m0("Object already scheduled for deletion"),DA(this),Ee(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Pe(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&m0("Object already scheduled for deletion"),Ce.push(this),Ce.length===1&&or&&or(Wr),this.$$.deleteScheduled=!0,this}});let C=Symbol.dispose;C&&(c[C]=c.delete)};function QA(){}var qe=(c,C)=>Object.defineProperty(C,"name",{value:c}),Fr=(c,C,g)=>{if(c[C].overloadTable===void 0){var T=c[C];c[C]=function(...q){return c[C].overloadTable.hasOwnProperty(q.length)||m0(`Function '${g}' called with an invalid number of arguments (${q.length}) - expects one of (${c[C].overloadTable})!`),c[C].overloadTable[q.length].apply(this,q)},c[C].overloadTable=[],c[C].overloadTable[T.argCount]=T}},vr=(c,C,g)=>{n.hasOwnProperty(c)?((g===void 0||n[c].overloadTable!==void 0&&n[c].overloadTable[g]!==void 0)&&m0(`Cannot register public name '${c}' twice`),Fr(n,c,c),n[c].overloadTable.hasOwnProperty(g)&&m0(`Cannot register multiple overloads of a function with the same number of arguments (${g})!`),n[c].overloadTable[g]=C):(n[c]=C,n[c].argCount=g)},Yr=48,lr=57,Qr=c=>{k(typeof c=="string"),c=c.replace(/[^a-zA-Z0-9_]/g,"$");var C=c.charCodeAt(0);return C>=Yr&&C<=lr?`_${c}`:c};function Zr(c,C,g,T,q,Y,X,x0){this.name=c,this.constructor=C,this.instancePrototype=g,this.rawDestructor=T,this.baseClass=q,this.getActualType=Y,this.upcast=X,this.downcast=x0,this.pureVirtualFunctions=[]}var de=(c,C,g)=>{for(;C!==g;)C.upcast||m0(`Expected null or instance of ${g.name}, got an instance of ${C.name}`),c=C.upcast(c),C=C.baseClass;return c};function xt(c,C){if(C===null)return this.isReference&&m0(`null is not a valid ${this.name}`),0;C.$$||m0(`Cannot pass "${uA(C)}" as a ${this.name}`),C.$$.ptr||m0(`Cannot pass deleted object as a pointer of type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=de(C.$$.ptr,g,this.registeredClass);return T}function At(c,C){var g;if(C===null)return this.isReference&&m0(`null is not a valid ${this.name}`),this.isSmartPointer?(g=this.rawConstructor(),c!==null&&c.push(this.rawDestructor,g),g):0;(!C||!C.$$)&&m0(`Cannot pass "${uA(C)}" as a ${this.name}`),C.$$.ptr||m0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&C.$$.ptrType.isConst&&m0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);var T=C.$$.ptrType.registeredClass;if(g=de(C.$$.ptr,T,this.registeredClass),this.isSmartPointer)switch(C.$$.smartPtr===void 0&&m0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:C.$$.smartPtrType===this?g=C.$$.smartPtr:m0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:g=C.$$.smartPtr;break;case 2:if(C.$$.smartPtrType===this)g=C.$$.smartPtr;else{var q=C.clone();g=this.rawShare(g,u0.toHandle(()=>q.delete())),c!==null&&c.push(this.rawDestructor,g)}break;default:m0("Unsupported sharing policy")}return g}function fr(c,C){if(C===null)return this.isReference&&m0(`null is not a valid ${this.name}`),0;C.$$||m0(`Cannot pass "${uA(C)}" as a ${this.name}`),C.$$.ptr||m0(`Cannot pass deleted object as a pointer of type ${this.name}`),C.$$.ptrType.isConst&&m0(`Cannot convert argument of type ${C.$$.ptrType.name} to parameter type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=de(C.$$.ptr,g,this.registeredClass);return T}var cr=()=>{Object.assign(ZA.prototype,{getPointee(c){return this.rawGetPointee&&(c=this.rawGetPointee(c)),c},destructor(c){this.rawDestructor?.(c)},readValueFromPointer:s0,fromWireType:ar})};function ZA(c,C,g,T,q,Y,X,x0,e0,E0,D0){this.name=c,this.registeredClass=C,this.isReference=g,this.isConst=T,this.isSmartPointer=q,this.pointeeType=Y,this.sharingPolicy=X,this.rawGetPointee=x0,this.rawConstructor=e0,this.rawShare=E0,this.rawDestructor=D0,!q&&C.baseClass===void 0?T?(this.toWireType=xt,this.destructorFunction=null):(this.toWireType=fr,this.destructorFunction=null):this.toWireType=At}var Er=(c,C,g)=>{n.hasOwnProperty(c)||y0("Replacing nonexistent public symbol"),n[c].overloadTable!==void 0&&g!==void 0?n[c].overloadTable[g]=C:(n[c]=C,n[c].argCount=g)},xe=[],Ne=c=>{var C=xe[c];return C||(xe[c]=C=Oe.get(c)),k(Oe.get(c)==C,"table mirror is out of date"),C},Px=(c,C,g=!1)=>{k(!g,"async bindings are only supported with JSPI"),c=Cx(c);function T(){var Y=Ne(C);return Y}var q=T();return typeof q!="function"&&m0(`unknown function pointer with signature ${c}: ${C}`),q};class et extends Error{}var IA=c=>{var C=va(c),g=Cx(C);return te(C),g},Ae=(c,C)=>{var g=[],T={};function q(Y){if(!T[Y]&&!Xx[Y]){if(sA[Y]){sA[Y].forEach(q);return}g.push(Y),T[Y]=!0}}throw C.forEach(q),new et(`${c}: `+g.map(IA).join([", "]))},Ie=(c,C,g,T,q,Y,X,x0,e0,E0,D0,X0,V0)=>{D0=Cx(D0),Y=Px(q,Y),x0&&(x0=Px(X,x0)),E0&&(E0=Px(e0,E0)),V0=Px(X0,V0);var Q0=Qr(D0);vr(Q0,function(){Ae(`Cannot construct ${D0} due to unbound types`,[T])}),dA([c,C,g],T?[T]:[],Nx=>{var hx;Nx=Nx[0];var aA,MA;T?(aA=Nx.registeredClass,MA=aA.instancePrototype):MA=QA.prototype;var bA=qe(D0,function(...es){if(Object.getPrototypeOf(this)!==Cr)throw new fx(`Use 'new' to construct ${D0}`);if(LA.constructor_body===void 0)throw new fx(`${D0} has no accessible constructor`);var da=LA.constructor_body[es.length];if(da===void 0)throw new fx(`Tried to invoke ctor of ${D0} with invalid number of parameters (${es.length}) - expected (${Object.keys(LA.constructor_body).toString()}) parameters instead!`);return da.apply(this,es)}),Cr=Object.create(MA,{constructor:{value:bA}});bA.prototype=Cr;var LA=new Zr(D0,bA,Cr,V0,aA,Y,x0,E0);LA.baseClass&&((hx=LA.baseClass).__derivedClasses??(hx.__derivedClasses=[]),LA.baseClass.__derivedClasses.push(LA));var rf=new ZA(D0,LA,!0,!1,!1),Ba=new ZA(D0+"*",LA,!1,!1,!1),Ca=new ZA(D0+" const*",LA,!1,!0,!1);return ir[c]={pointerType:Ba,constPointerType:Ca},Er(Q0,bA),[rf,Ba,Ca]})},dx=(c,C)=>{for(var g=[],T=0;T<c;T++)g.push(g0[C+T*4>>2]);return g};function ue(c){for(var C=1;C<c.length;++C)if(c[C]!==null&&c[C].destructorFunction===void 0)return!0;return!1}function ee(c,C,g,T,q){if(c<C||c>g){var Y=C==g?C:`${C} to ${g}`;q(`function ${T} called with ${c} arguments, expected ${Y}`)}}function a(c,C,g,T){var q=ue(c),Y=c.length-2,X=[],x0=["fn"];C&&x0.push("thisWired");for(var e0=0;e0<Y;++e0)X.push(`arg${e0}`),x0.push(`arg${e0}Wired`);X=X.join(","),x0=x0.join(",");var E0=`return function (${X}) {
2179
2179
  `;E0+=`checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);
2180
2180
  `,q&&(E0+=`var destructors = [];
2181
2181
  `);var D0=q?"destructors":"null",X0=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];C&&(E0+=`var thisWired = toClassParamWire(${D0}, this);
2182
- `);for(var e0=0;e0<Q;++e0){var V0=`toArg${e0}Wire`;E0+=`var arg${e0}Wired = ${V0}(${D0}, arg${e0});
2183
- `,X0.push(V0)}if(E0+=(g||T?"var rv = ":"")+`invoker(${Z});
2182
+ `);for(var e0=0;e0<Y;++e0){var V0=`toArg${e0}Wire`;E0+=`var arg${e0}Wired = ${V0}(${D0}, arg${e0});
2183
+ `,X0.push(V0)}if(E0+=(g||T?"var rv = ":"")+`invoker(${x0});
2184
2184
  `,q)E0+=`runDestructors(destructors);
2185
2185
  `;else for(var e0=C?1:2;e0<c.length;++e0){var Q0=e0===1?"thisWired":"arg"+(e0-2)+"Wired";c[e0].destructorFunction!==null&&(E0+=`${Q0}_dtor(${Q0});
2186
2186
  `,X0.push(`${Q0}_dtor`))}return g&&(E0+=`var ret = fromRetWire(rv);
2187
2187
  return ret;
2188
2188
  `),E0+=`}
2189
2189
  `,X0.push("checkArgCount","minArgs","maxArgs"),E0=`if (arguments.length !== ${X0.length}){ throw new Error(humanName + "Expected ${X0.length} closure arguments " + arguments.length + " given."); }
2190
- ${E0}`,new Function(X0,E0)}function l(c){for(var C=c.length-2,g=c.length-1;g>=2&&c[g].optional;--g)C--;return C}function d(c,C,g,T,q,Q){var Y=C.length;Y<2&&m0("argTypes array size mismatch! Must at least get return value and 'this' types!"),k(!Q,"async bindings are only supported with JSPI");for(var Z=C[1]!==null&&g!==null,e0=de(C),E0=!C[0].isVoid,D0=Y-2,X0=l(C),V0=C[0],Q0=C[1],qx=[c,m0,T,q,$A,V0.fromWireType.bind(V0),Q0?.toWireType.bind(Q0)],hx=2;hx<Y;++hx){var iA=C[hx];qx.push(iA.toWireType.bind(iA))}if(!e0)for(var hx=Z?1:2;hx<C.length;++hx)C[hx].destructorFunction!==null&&qx.push(C[hx].destructorFunction);qx.push(Ae,X0,D0);var pA=a(C,Z,E0,Q)(...qx);return Pe(c,pA)}var b=(c,C,g,T,q,Q)=>{k(C>0);var Y=dx(C,g);q=Tx(T,q),CA([],[c],Z=>{Z=Z[0];var e0=`constructor ${Z.name}`;if(Z.registeredClass.constructor_body===void 0&&(Z.registeredClass.constructor_body=[]),Z.registeredClass.constructor_body[C-1]!==void 0)throw new lx(`Cannot register multiple constructors with identical number of parameters (${C-1}) for class '${Z.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return Z.registeredClass.constructor_body[C-1]=()=>{xe(`Cannot construct ${Z.name} due to unbound types`,Y)},CA([],Y,E0=>(E0.splice(1,0,null),Z.registeredClass.constructor_body[C-1]=d(e0,E0,null,q,Q),[])),[]})},y=(c,C,g)=>(c instanceof Object||m0(`${g} with invalid "this": ${c}`),c instanceof C.registeredClass.constructor||m0(`${g} incompatible with "this" of type ${c.constructor.name}`),c.$$.ptr||m0(`cannot call emscripten binding method ${g} on deleted object`),Ce(c.$$.ptr,c.$$.ptrType.registeredClass,C.registeredClass)),$=(c,C,g,T,q,Q,Y,Z,e0,E0)=>{C=Cx(C),q=Tx(T,q),CA([],[c],D0=>{D0=D0[0];var X0=`${D0.name}.${C}`,V0={get(){xe(`Cannot access ${X0} due to unbound types`,[g,Y])},enumerable:!0,configurable:!0};return e0?V0.set=()=>xe(`Cannot access ${X0} due to unbound types`,[g,Y]):V0.set=Q0=>m0(X0+" is a read-only property"),Object.defineProperty(D0.registeredClass.instancePrototype,C,V0),CA([],e0?[g,Y]:[g],Q0=>{var qx=Q0[0],hx={get(){var MA=y(this,D0,X0+" getter");return qx.fromWireType(q(Q,MA))},enumerable:!0};if(e0){e0=Tx(Z,e0);var iA=Q0[1];hx.set=function(MA){var pA=y(this,D0,X0+" setter"),Br=[];e0(E0,pA,iA.toWireType(Br,MA)),$A(Br)}}return Object.defineProperty(D0.registeredClass.instancePrototype,C,hx),[]}),[]})},U=[],V=[0,1,,1,null,1,!0,1,!1,1],F0=c=>{if(c>9&&--V[c+1]===0){k(V[c]!==void 0,"decref for unallocated handle");var C=V[c];V[c]=void 0,U.push(c)}},u0={toValue:c=>(c||m0(`Cannot use deleted val. handle = ${c}`),k(c===2||V[c]!==void 0&&c%2===0,`invalid handle: ${c}`),V[c]),toHandle:c=>{switch(c){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let C=U.pop()||V.length;return V[C]=c,V[C+1]=1,C}}}},z0={name:"emscripten::val",fromWireType:c=>{var C=u0.toValue(c);return F0(c),C},toWireType:(c,C)=>u0.toHandle(C),readValueFromPointer:s0,destructorFunction:null},M0=c=>$x(c,z0),$0=(c,C)=>{switch(C){case 4:return function(g){return this.fromWireType(tr[g>>2])};case 8:return function(g){return this.fromWireType(fe[g>>3])};default:throw new TypeError(`invalid float width (${C}): ${c}`)}},j0=(c,C,g)=>{C=Cx(C),$x(c,{name:C,fromWireType:T=>T,toWireType:(T,q)=>{if(typeof q!="number"&&typeof q!="boolean")throw new TypeError(`Cannot convert ${dA(q)} to ${C}`);return q},readValueFromPointer:$0(C,g),destructorFunction:null})},rx=c=>{c=c.trim();let C=c.indexOf("(");return C===-1?c:(k(c.endsWith(")"),"Parentheses for argument names should match."),c.slice(0,C))},mx=(c,C,g,T,q,Q,Y,Z)=>{var e0=dx(C,g);c=Cx(c),c=rx(c),q=Tx(T,q,Y),Fr(c,function(){xe(`Cannot call ${c} due to unbound types`,e0)},C-1),CA([],e0,E0=>{var D0=[E0[0],null].concat(E0.slice(1));return cr(c,d(c,D0,null,q,Q,Y),C-1),[]})},Px=(c,C,g,T,q)=>{C=Cx(C);let Q=T===0,Y=e0=>e0;if(Q){var Z=32-8*g;Y=e0=>e0<<Z>>>Z,q=Y(q)}$x(c,{name:C,fromWireType:Y,toWireType:(e0,E0)=>{if(typeof E0!="number"&&typeof E0!="boolean")throw new TypeError(`Cannot convert "${dA(E0)}" to ${C}`);return PA(C,E0,T,q),E0},readValueFromPointer:le(C,g,T!==0),destructorFunction:null})},Ix=(c,C,g)=>{var T=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],q=T[C];function Q(Y){var Z=g0[Y>>2],e0=g0[Y+4>>2];return new q(zx.buffer,e0,Z)}g=Cx(g),$x(c,{name:g,fromWireType:Q,readValueFromPointer:Q},{ignoreDuplicateRegistrations:!0})},Lx=(c,C,g,T)=>{if(k(typeof c=="string",`stringToUTF8Array expects a string (got ${typeof c})`),!(T>0))return 0;for(var q=g,Q=g+T-1,Y=0;Y<c.length;++Y){var Z=c.codePointAt(Y);if(Z<=127){if(g>=Q)break;C[g++]=Z}else if(Z<=2047){if(g+1>=Q)break;C[g++]=192|Z>>6,C[g++]=128|Z&63}else if(Z<=65535){if(g+2>=Q)break;C[g++]=224|Z>>12,C[g++]=128|Z>>6&63,C[g++]=128|Z&63}else{if(g+3>=Q)break;Z>1114111&&Ox(`Invalid Unicode code point ${Bx(Z)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),C[g++]=240|Z>>18,C[g++]=128|Z>>12&63,C[g++]=128|Z>>6&63,C[g++]=128|Z&63,Y++}}return C[g]=0,g-q},ee=(c,C,g)=>(k(typeof g=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Lx(c,bx,C,g)),Gx=c=>{for(var C=0,g=0;g<c.length;++g){var T=c.charCodeAt(g);T<=127?C++:T<=2047?C+=2:T>=55296&&T<=57343?(C+=4,++g):C+=3}return C},DA=globalThis.TextDecoder&&new TextDecoder,vx=(c,C,g,T)=>{var q=C+g;if(T)return q;for(;c[C]&&!(C>=q);)++C;return C},qt=(c,C=0,g,T)=>{var q=vx(c,C,g,T);if(q-C>16&&c.buffer&&DA)return DA.decode(c.subarray(C,q));for(var Q="";C<q;){var Y=c[C++];if(!(Y&128)){Q+=String.fromCharCode(Y);continue}var Z=c[C++]&63;if((Y&224)==192){Q+=String.fromCharCode((Y&31)<<6|Z);continue}var e0=c[C++]&63;if((Y&240)==224?Y=(Y&15)<<12|Z<<6|e0:((Y&248)!=240&&Ox(`Invalid UTF-8 leading byte ${Bx(Y)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),Y=(Y&7)<<18|Z<<12|e0<<6|c[C++]&63),Y<65536)Q+=String.fromCharCode(Y);else{var E0=Y-65536;Q+=String.fromCharCode(55296|E0>>10,56320|E0&1023)}}return Q},Jn=(c,C,g)=>(k(typeof c=="number",`UTF8ToString expects a number (got ${typeof c})`),c?qt(bx,c,C,g):""),Kn=(c,C)=>{C=Cx(C);var g=!0;$x(c,{name:C,fromWireType(T){var q=g0[T>>2],Q=T+4,Y;if(g)Y=Jn(Q,q,!0);else{Y="";for(var Z=0;Z<q;++Z)Y+=String.fromCharCode(bx[Q+Z])}return re(T),Y},toWireType(T,q){q instanceof ArrayBuffer&&(q=new Uint8Array(q));var Q,Y=typeof q=="string";Y||ArrayBuffer.isView(q)&&q.BYTES_PER_ELEMENT==1||m0("Cannot pass non-string to std::string"),g&&Y?Q=Gx(q):Q=q.length;var Z=Zn(4+Q+1),e0=Z+4;if(g0[Z>>2]=Q,Y)if(g)ee(q,e0,Q+1);else for(var E0=0;E0<Q;++E0){var D0=q.charCodeAt(E0);D0>255&&(re(Z),m0("String has UTF-16 code units that do not fit in 8 bits")),bx[e0+E0]=D0}else bx.set(q,e0);return T!==null&&T.push(re,Z),Z},readValueFromPointer:s0,destructorFunction(T){re(T)}})},Nt=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,zn=(c,C,g)=>{k(c%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var T=c>>1,q=vx(ax,T,C/2,g);if(q-T>16&&Nt)return Nt.decode(ax.subarray(T,q));for(var Q="",Y=T;Y<q;++Y){var Z=ax[Y];Q+=String.fromCharCode(Z)}return Q},Vn=(c,C,g)=>{if(k(C%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),k(typeof g=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<2)return 0;g-=2;for(var T=C,q=g<c.length*2?g/2:c.length,Q=0;Q<q;++Q){var Y=c.charCodeAt(Q);_A[C>>1]=Y,C+=2}return _A[C>>1]=0,C-T},Mt=c=>c.length*2,rt=(c,C,g)=>{k(c%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var T="",q=c>>2,Q=0;!(Q>=C/4);Q++){var Y=g0[q+Q];if(!Y&&!g)break;T+=String.fromCodePoint(Y)}return T},Me=(c,C,g)=>{if(k(C%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),k(typeof g=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<4)return 0;for(var T=C,q=T+g-4,Q=0;Q<c.length;++Q){var Y=c.codePointAt(Q);if(Y>65535&&Q++,wA[C>>2]=Y,C+=4,C+4>q)break}return wA[C>>2]=0,C-T},i=c=>{for(var C=0,g=0;g<c.length;++g){var T=c.codePointAt(g);T>65535&&g++,C+=4}return C},v=(c,C,g)=>{g=Cx(g);var T,q,Q;C===2?(T=zn,q=Vn,Q=Mt):(k(C===4,"only 2-byte and 4-byte strings are currently supported"),T=rt,q=Me,Q=i),$x(c,{name:g,fromWireType:Y=>{var Z=g0[Y>>2],e0=T(Y+4,Z*C,!0);return re(Y),e0},toWireType:(Y,Z)=>{typeof Z!="string"&&m0(`Cannot pass non-string to C++ string type ${g}`);var e0=Q(Z),E0=Zn(4+e0+C);return g0[E0>>2]=e0/C,q(Z,E0+4,e0+C),Y!==null&&Y.push(re,E0),E0},readValueFromPointer:s0,destructorFunction(Y){re(Y)}})},B=(c,C,g,T,q,Q)=>{ex[c]={name:Cx(C),rawConstructor:Tx(g,T),rawDestructor:Tx(q,Q),fields:[]}},p=(c,C,g,T,q,Q,Y,Z,e0,E0)=>{ex[c].fields.push({fieldName:Cx(C),getterReturnType:g,getter:Tx(T,q),getterContext:Q,setterArgumentType:Y,setter:Tx(Z,e0),setterContext:E0})},j=(c,C)=>{C=Cx(C),$x(c,{isVoid:!0,name:C,fromWireType:()=>{},toWireType:(g,T)=>{}})},w=[],M=c=>{var C=w.length;return w.push(c),C},K=(c,C)=>{var g=Vx[c];return g===void 0&&m0(`${C} has unknown type ${NA(c)}`),g},v0=(c,C)=>{for(var g=new Array(c),T=0;T<c;++T)g[T]=K(g0[C+T*4>>2],`parameter ${T}`);return g},w0=(c,C,g)=>{var T=[],q=c(T,g);return T.length&&(g0[C>>2]=u0.toHandle(T)),q},Y0={},L0=c=>{var C=Y0[c];return C===void 0?Cx(c):C},q0=(c,C,g)=>{var T=8,[q,...Q]=v0(c,C),Y=q.toWireType.bind(q),Z=Q.map(Q0=>Q0.readValueFromPointer.bind(Q0));c--;var e0={toValue:u0.toValue},E0=Z.map((Q0,qx)=>{var hx=`argFromPtr${qx}`;return e0[hx]=Q0,`${hx}(args${qx?"+"+qx*T:""})`}),D0;switch(g){case 0:D0="toValue(handle)";break;case 2:D0="new (toValue(handle))";break;case 3:D0="";break;case 1:e0.getStringOrSymbol=L0,D0="toValue(handle)[getStringOrSymbol(methodName)]";break}D0+=`(${E0})`,q.isVoid||(e0.toReturnWire=Y,e0.emval_returnValue=w0,D0=`return emval_returnValue(toReturnWire, destructorsRef, ${D0})`),D0=`return function (handle, methodName, destructorsRef, args) {
2190
+ ${E0}`,new Function(X0,E0)}function f(c){for(var C=c.length-2,g=c.length-1;g>=2&&c[g].optional;--g)C--;return C}function d(c,C,g,T,q,Y){var X=C.length;X<2&&m0("argTypes array size mismatch! Must at least get return value and 'this' types!"),k(!Y,"async bindings are only supported with JSPI");for(var x0=C[1]!==null&&g!==null,e0=ue(C),E0=!C[0].isVoid,D0=X-2,X0=f(C),V0=C[0],Q0=C[1],Nx=[c,m0,T,q,TA,V0.fromWireType.bind(V0),Q0?.toWireType.bind(Q0)],hx=2;hx<X;++hx){var aA=C[hx];Nx.push(aA.toWireType.bind(aA))}if(!e0)for(var hx=x0?1:2;hx<C.length;++hx)C[hx].destructorFunction!==null&&Nx.push(C[hx].destructorFunction);Nx.push(ee,X0,D0);var bA=a(C,x0,E0,Y)(...Nx);return qe(c,bA)}var b=(c,C,g,T,q,Y)=>{k(C>0);var X=dx(C,g);q=Px(T,q),dA([],[c],x0=>{x0=x0[0];var e0=`constructor ${x0.name}`;if(x0.registeredClass.constructor_body===void 0&&(x0.registeredClass.constructor_body=[]),x0.registeredClass.constructor_body[C-1]!==void 0)throw new fx(`Cannot register multiple constructors with identical number of parameters (${C-1}) for class '${x0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return x0.registeredClass.constructor_body[C-1]=()=>{Ae(`Cannot construct ${x0.name} due to unbound types`,X)},dA([],X,E0=>(E0.splice(1,0,null),x0.registeredClass.constructor_body[C-1]=d(e0,E0,null,q,Y),[])),[]})},y=(c,C,g)=>(c instanceof Object||m0(`${g} with invalid "this": ${c}`),c instanceof C.registeredClass.constructor||m0(`${g} incompatible with "this" of type ${c.constructor.name}`),c.$$.ptr||m0(`cannot call emscripten binding method ${g} on deleted object`),de(c.$$.ptr,c.$$.ptrType.registeredClass,C.registeredClass)),$=(c,C,g,T,q,Y,X,x0,e0,E0)=>{C=Cx(C),q=Px(T,q),dA([],[c],D0=>{D0=D0[0];var X0=`${D0.name}.${C}`,V0={get(){Ae(`Cannot access ${X0} due to unbound types`,[g,X])},enumerable:!0,configurable:!0};return e0?V0.set=()=>Ae(`Cannot access ${X0} due to unbound types`,[g,X]):V0.set=Q0=>m0(X0+" is a read-only property"),Object.defineProperty(D0.registeredClass.instancePrototype,C,V0),dA([],e0?[g,X]:[g],Q0=>{var Nx=Q0[0],hx={get(){var MA=y(this,D0,X0+" getter");return Nx.fromWireType(q(Y,MA))},enumerable:!0};if(e0){e0=Px(x0,e0);var aA=Q0[1];hx.set=function(MA){var bA=y(this,D0,X0+" setter"),Cr=[];e0(E0,bA,aA.toWireType(Cr,MA)),TA(Cr)}}return Object.defineProperty(D0.registeredClass.instancePrototype,C,hx),[]}),[]})},G=[],V=[0,1,,1,null,1,!0,1,!1,1],F0=c=>{if(c>9&&--V[c+1]===0){k(V[c]!==void 0,"decref for unallocated handle");var C=V[c];V[c]=void 0,G.push(c)}},u0={toValue:c=>(c||m0(`Cannot use deleted val. handle = ${c}`),k(c===2||V[c]!==void 0&&c%2===0,`invalid handle: ${c}`),V[c]),toHandle:c=>{switch(c){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let C=G.pop()||V.length;return V[C]=c,V[C+1]=1,C}}}},z0={name:"emscripten::val",fromWireType:c=>{var C=u0.toValue(c);return F0(c),C},toWireType:(c,C)=>u0.toHandle(C),readValueFromPointer:s0,destructorFunction:null},I0=c=>Tx(c,z0),T0=(c,C)=>{switch(C){case 4:return function(g){return this.fromWireType(nr[g>>2])};case 8:return function(g){return this.fromWireType(fe[g>>3])};default:throw new TypeError(`invalid float width (${C}): ${c}`)}},j0=(c,C,g)=>{C=Cx(C),Tx(c,{name:C,fromWireType:T=>T,toWireType:(T,q)=>{if(typeof q!="number"&&typeof q!="boolean")throw new TypeError(`Cannot convert ${uA(q)} to ${C}`);return q},readValueFromPointer:T0(C,g),destructorFunction:null})},rx=c=>{c=c.trim();let C=c.indexOf("(");return C===-1?c:(k(c.endsWith(")"),"Parentheses for argument names should match."),c.slice(0,C))},mx=(c,C,g,T,q,Y,X,x0)=>{var e0=dx(C,g);c=Cx(c),c=rx(c),q=Px(T,q,X),vr(c,function(){Ae(`Cannot call ${c} due to unbound types`,e0)},C-1),dA([],e0,E0=>{var D0=[E0[0],null].concat(E0.slice(1));return Er(c,d(c,D0,null,q,Y,X),C-1),[]})},qx=(c,C,g,T,q)=>{C=Cx(C);let Y=T===0,X=e0=>e0;if(Y){var x0=32-8*g;X=e0=>e0<<x0>>>x0,q=X(q)}Tx(c,{name:C,fromWireType:X,toWireType:(e0,E0)=>{if(typeof E0!="number"&&typeof E0!="boolean")throw new TypeError(`Cannot convert "${uA(E0)}" to ${C}`);return qA(C,E0,T,q),E0},readValueFromPointer:ce(C,g,T!==0),destructorFunction:null})},Lx=(c,C,g)=>{var T=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],q=T[C];function Y(X){var x0=g0[X>>2],e0=g0[X+4>>2];return new q(Wx.buffer,e0,x0)}g=Cx(g),Tx(c,{name:g,fromWireType:Y,readValueFromPointer:Y},{ignoreDuplicateRegistrations:!0})},Rx=(c,C,g,T)=>{if(k(typeof c=="string",`stringToUTF8Array expects a string (got ${typeof c})`),!(T>0))return 0;for(var q=g,Y=g+T-1,X=0;X<c.length;++X){var x0=c.codePointAt(X);if(x0<=127){if(g>=Y)break;C[g++]=x0}else if(x0<=2047){if(g+1>=Y)break;C[g++]=192|x0>>6,C[g++]=128|x0&63}else if(x0<=65535){if(g+2>=Y)break;C[g++]=224|x0>>12,C[g++]=128|x0>>6&63,C[g++]=128|x0&63}else{if(g+3>=Y)break;x0>1114111&&Gx(`Invalid Unicode code point ${Bx(x0)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),C[g++]=240|x0>>18,C[g++]=128|x0>>12&63,C[g++]=128|x0>>6&63,C[g++]=128|x0&63,X++}}return C[g]=0,g-q},re=(c,C,g)=>(k(typeof g=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Rx(c,bx,C,g)),Ux=c=>{for(var C=0,g=0;g<c.length;++g){var T=c.charCodeAt(g);T<=127?C++:T<=2047?C+=2:T>=55296&&T<=57343?(C+=4,++g):C+=3}return C},pA=globalThis.TextDecoder&&new TextDecoder,vx=(c,C,g,T)=>{var q=C+g;if(T)return q;for(;c[C]&&!(C>=q);)++C;return C},Nt=(c,C=0,g,T)=>{var q=vx(c,C,g,T);if(q-C>16&&c.buffer&&pA)return pA.decode(c.subarray(C,q));for(var Y="";C<q;){var X=c[C++];if(!(X&128)){Y+=String.fromCharCode(X);continue}var x0=c[C++]&63;if((X&224)==192){Y+=String.fromCharCode((X&31)<<6|x0);continue}var e0=c[C++]&63;if((X&240)==224?X=(X&15)<<12|x0<<6|e0:((X&248)!=240&&Gx(`Invalid UTF-8 leading byte ${Bx(X)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),X=(X&7)<<18|x0<<12|e0<<6|c[C++]&63),X<65536)Y+=String.fromCharCode(X);else{var E0=X-65536;Y+=String.fromCharCode(55296|E0>>10,56320|E0&1023)}}return Y},Kn=(c,C,g)=>(k(typeof c=="number",`UTF8ToString expects a number (got ${typeof c})`),c?Nt(bx,c,C,g):""),zn=(c,C)=>{C=Cx(C);var g=!0;Tx(c,{name:C,fromWireType(T){var q=g0[T>>2],Y=T+4,X;if(g)X=Kn(Y,q,!0);else{X="";for(var x0=0;x0<q;++x0)X+=String.fromCharCode(bx[Y+x0])}return te(T),X},toWireType(T,q){q instanceof ArrayBuffer&&(q=new Uint8Array(q));var Y,X=typeof q=="string";X||ArrayBuffer.isView(q)&&q.BYTES_PER_ELEMENT==1||m0("Cannot pass non-string to std::string"),g&&X?Y=Ux(q):Y=q.length;var x0=xs(4+Y+1),e0=x0+4;if(g0[x0>>2]=Y,X)if(g)re(q,e0,Y+1);else for(var E0=0;E0<Y;++E0){var D0=q.charCodeAt(E0);D0>255&&(te(x0),m0("String has UTF-16 code units that do not fit in 8 bits")),bx[e0+E0]=D0}else bx.set(q,e0);return T!==null&&T.push(te,x0),x0},readValueFromPointer:s0,destructorFunction(T){te(T)}})},It=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Vn=(c,C,g)=>{k(c%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var T=c>>1,q=vx(ax,T,C/2,g);if(q-T>16&&It)return It.decode(ax.subarray(T,q));for(var Y="",X=T;X<q;++X){var x0=ax[X];Y+=String.fromCharCode(x0)}return Y},Wn=(c,C,g)=>{if(k(C%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),k(typeof g=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<2)return 0;g-=2;for(var T=C,q=g<c.length*2?g/2:c.length,Y=0;Y<q;++Y){var X=c.charCodeAt(Y);wA[C>>1]=X,C+=2}return wA[C>>1]=0,C-T},Mt=c=>c.length*2,rt=(c,C,g)=>{k(c%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var T="",q=c>>2,Y=0;!(Y>=C/4);Y++){var X=g0[q+Y];if(!X&&!g)break;T+=String.fromCodePoint(X)}return T},Me=(c,C,g)=>{if(k(C%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),k(typeof g=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<4)return 0;for(var T=C,q=T+g-4,Y=0;Y<c.length;++Y){var X=c.codePointAt(Y);if(X>65535&&Y++,SA[C>>2]=X,C+=4,C+4>q)break}return SA[C>>2]=0,C-T},i=c=>{for(var C=0,g=0;g<c.length;++g){var T=c.codePointAt(g);T>65535&&g++,C+=4}return C},l=(c,C,g)=>{g=Cx(g);var T,q,Y;C===2?(T=Vn,q=Wn,Y=Mt):(k(C===4,"only 2-byte and 4-byte strings are currently supported"),T=rt,q=Me,Y=i),Tx(c,{name:g,fromWireType:X=>{var x0=g0[X>>2],e0=T(X+4,x0*C,!0);return te(X),e0},toWireType:(X,x0)=>{typeof x0!="string"&&m0(`Cannot pass non-string to C++ string type ${g}`);var e0=Y(x0),E0=xs(4+e0+C);return g0[E0>>2]=e0/C,q(x0,E0+4,e0+C),X!==null&&X.push(te,E0),E0},readValueFromPointer:s0,destructorFunction(X){te(X)}})},B=(c,C,g,T,q,Y)=>{ex[c]={name:Cx(C),rawConstructor:Px(g,T),rawDestructor:Px(q,Y),fields:[]}},p=(c,C,g,T,q,Y,X,x0,e0,E0)=>{ex[c].fields.push({fieldName:Cx(C),getterReturnType:g,getter:Px(T,q),getterContext:Y,setterArgumentType:X,setter:Px(x0,e0),setterContext:E0})},j=(c,C)=>{C=Cx(C),Tx(c,{isVoid:!0,name:C,fromWireType:()=>{},toWireType:(g,T)=>{}})},w=[],I=c=>{var C=w.length;return w.push(c),C},K=(c,C)=>{var g=Xx[c];return g===void 0&&m0(`${C} has unknown type ${IA(c)}`),g},v0=(c,C)=>{for(var g=new Array(c),T=0;T<c;++T)g[T]=K(g0[C+T*4>>2],`parameter ${T}`);return g},w0=(c,C,g)=>{var T=[],q=c(T,g);return T.length&&(g0[C>>2]=u0.toHandle(T)),q},Y0={},L0=c=>{var C=Y0[c];return C===void 0?Cx(c):C},N0=(c,C,g)=>{var T=8,[q,...Y]=v0(c,C),X=q.toWireType.bind(q),x0=Y.map(Q0=>Q0.readValueFromPointer.bind(Q0));c--;var e0={toValue:u0.toValue},E0=x0.map((Q0,Nx)=>{var hx=`argFromPtr${Nx}`;return e0[hx]=Q0,`${hx}(args${Nx?"+"+Nx*T:""})`}),D0;switch(g){case 0:D0="toValue(handle)";break;case 2:D0="new (toValue(handle))";break;case 3:D0="";break;case 1:e0.getStringOrSymbol=L0,D0="toValue(handle)[getStringOrSymbol(methodName)]";break}D0+=`(${E0})`,q.isVoid||(e0.toReturnWire=X,e0.emval_returnValue=w0,D0=`return emval_returnValue(toReturnWire, destructorsRef, ${D0})`),D0=`return function (handle, methodName, destructorsRef, args) {
2191
2191
  ${D0}
2192
- }`;var X0=new Function(Object.keys(e0),D0)(...Object.values(e0)),V0=`methodCaller<(${Q.map(Q0=>Q0.name)}) => ${q.name}>`;return M(Pe(V0,X0))},h0=c=>(c=L0(c),u0.toHandle(n[c])),cx=(c,C)=>(c=u0.toValue(c),C=u0.toValue(C),u0.toHandle(c[C])),kx=c=>{c>9&&(V[c+1]+=1)},Ux=(c,C,g,T,q)=>w[c](C,g,T,q),Wx=c=>u0.toHandle(L0(c)),Xx=c=>{var C=u0.toValue(c);$A(C),F0(c)},Ie=()=>2147483648,sA=(c,C)=>(k(C,"alignment argument is required"),Math.ceil(c/C)*C),ue=c=>{var C=It.buffer.byteLength,g=(c-C+65535)/65536|0;try{return It.grow(g),ix(),1}catch(T){O(`growMemory: Attempted to grow heap from ${C} bytes to ${c} bytes, but got error: ${T}`)}},jx=c=>{var C=bx.length;c>>>=0,k(c>C);var g=Ie();if(c>g)return O(`Cannot enlarge memory, requested ${c} bytes, but the limit is ${g} bytes!`),!1;for(var T=1;T<=4;T*=2){var q=C*(1+.2/T);q=Math.min(q,c+100663296);var Q=Math.min(g,sA(Math.max(c,q),65536)),Y=ue(Q);if(Y)return!0}return O(`Failed to grow the heap from ${C} bytes to ${Q} bytes, not enough memory!`),!1},cf=c=>{ox("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},Ef=9007199254740992,Bf=-9007199254740992,Cf=c=>c<Bf||c>Ef?NaN:Number(c);function df(c,C,g,T){return C=Cf(C),70}var Wn=[null,[],[]],Xn=(c,C)=>{var g=Wn[c];k(g),C===0||C===10?((c===1?R:O)(qt(g)),g.length=0):g.push(C)},i7=()=>{oa(0),Wn[1].length&&Xn(1,10),Wn[2].length&&Xn(2,10)},uf=(c,C,g,T)=>{for(var q=0,Q=0;Q<g;Q++){var Y=g0[C>>2],Z=g0[C+4>>2];C+=8;for(var e0=0;e0<Z;e0++)Xn(c,bx[Y+e0]);q+=Z}return g0[T>>2]=q,0},Df=()=>{if(E){var c=require("crypto");return C=>c.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},na=c=>(na=Df())(c),pf=(c,C)=>na(bx.subarray(c,c+C)),bf=(c,C)=>{if(Le)for(var g=c;g<c+C;g++){var T=qe(g);T&&Le.set(T,g)}},Le,mf=c=>(Le||(Le=new WeakMap,bf(0,Re.length)),Le.get(c)||0),Yn=[],jf=()=>{if(Yn.length)return Yn.pop();try{return Re.grow(1)}catch(c){if(!(c instanceof RangeError))throw c;ox("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},Qn=(c,C)=>{Re.set(c,C),ZA[c]=Re.get(c)},sa=c=>{let C=c.length;return k(C<16384),[C%128|128,C>>7,...c]},hf={i:127,p:127,j:126,f:125,d:124,e:111},ia=c=>sa(Array.from(c,C=>{var g=hf[C];return k(g,`invalid signature char: ${C}`),g})),gf=(c,C)=>{var g=Uint8Array.of(0,97,115,109,1,0,0,0,1,...sa([1,96,...ia(C.slice(1)),...ia(C[0]==="v"?"":C[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),T=new WebAssembly.Module(g),q=new WebAssembly.Instance(T,{e:{f:c}}),Q=q.exports.f;return Q},yf=(c,C)=>{k(typeof c<"u");var g=mf(c);if(g)return g;var T=jf();try{Qn(T,c)}catch(Q){if(!(Q instanceof TypeError))throw Q;k(typeof C<"u","Missing signature argument to addFunction: "+c);var q=gf(c,C);Qn(T,q)}return Le.set(c,T),T},kf=c=>{Le.delete(qe(c)),Qn(c,null),Yn.push(c)};Xr(),lr(),k(V.length===10);{if(n.noExitRuntime&&(_e=n.noExitRuntime),n.print&&(R=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(n0=n.wasmBinary),n.FS_createDataFile=AA.createDataFile,n.FS_createPreloadedFile=AA.createPreloadedFile,Sf(),n.arguments&&(D=n.arguments),n.thisProgram&&(m=n.thisProgram),k(typeof n.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),k(typeof n.read>"u","Module.read option was removed"),k(typeof n.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),k(typeof n.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),k(typeof n.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),k(typeof n.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),k(typeof n.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),k(typeof n.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),k(typeof n.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),k(typeof n.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();t0("preInit")}n.addFunction=yf,n.removeFunction=kf;var _f=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];_f.forEach(i0);var wf=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];wf.forEach(f0);function Sf(){o0("fetchSettings"),o0("logReadFiles"),o0("loadSplitModule"),o0("onMalloc"),o0("onRealloc"),o0("onFree"),o0("onSbrkGrow")}var aa=x0("___getTypeName"),Zn=x0("_malloc"),re=x0("_free"),$f=n._MdnCom_ESCHandler=x0("_MdnCom_ESCHandler"),Tf=n._MdnCom_Free=x0("_MdnCom_Free"),Pf=n._MdnCom_RawRx=x0("_MdnCom_RawRx"),qf=n._MdnCom_CryptoSelfTest=x0("_MdnCom_CryptoSelfTest"),Nf=n._MdnCom_SetCompanionKeypair=x0("_MdnCom_SetCompanionKeypair"),Mf=n._MdnCom_InitiateEcsHandshake=x0("_MdnCom_InitiateEcsHandshake"),If=n._MdnCom_SetSecDebug=x0("_MdnCom_SetSecDebug"),Lf=n._MdnCom_GetEcsState=x0("_MdnCom_GetEcsState"),Rf=n._MdnCom_ResetEcs=x0("_MdnCom_ResetEcs"),Of=n._MdnCom_RegisterEcsHandshakeCallback=x0("_MdnCom_RegisterEcsHandshakeCallback"),Gf=n._MdnCom_Init=x0("_MdnCom_Init"),Uf=n._SendUtoQuery=x0("_SendUtoQuery"),Hf=n._SendUtoCmdExt=x0("_SendUtoCmdExt"),oa=x0("_fflush"),xs=x0("_emscripten_stack_get_end"),Jf=x0("_emscripten_stack_get_base"),Kf=x0("_strerror"),Fa=x0("_emscripten_stack_init"),zf=x0("_emscripten_stack_get_free"),Vf=x0("__emscripten_stack_restore"),Wf=x0("__emscripten_stack_alloc"),Xf=x0("_emscripten_stack_get_current"),Yf=x0("memory"),Qf=x0("__indirect_function_table"),It=x0("wasmMemory"),Re=x0("wasmTable");function Zf(c){k(typeof c.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof c.malloc<"u","missing Wasm export: malloc"),k(typeof c.free<"u","missing Wasm export: free"),k(typeof c.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof c.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof c.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof c.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof c.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof c.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof c.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof c.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof c.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof c.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof c.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof c.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof c.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof c.fflush<"u","missing Wasm export: fflush"),k(typeof c.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof c.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof c.strerror<"u","missing Wasm export: strerror"),k(typeof c.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof c.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof c._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof c._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof c.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof c.memory<"u","missing Wasm export: memory"),k(typeof c.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),aa=J0("__getTypeName",1),Zn=J0("malloc",1),re=J0("free",1),$f=n._MdnCom_ESCHandler=J0("MdnCom_ESCHandler",1),Tf=n._MdnCom_Free=J0("MdnCom_Free",1),Pf=n._MdnCom_RawRx=J0("MdnCom_RawRx",1),qf=n._MdnCom_CryptoSelfTest=J0("MdnCom_CryptoSelfTest",0),Nf=n._MdnCom_SetCompanionKeypair=J0("MdnCom_SetCompanionKeypair",2),Mf=n._MdnCom_InitiateEcsHandshake=J0("MdnCom_InitiateEcsHandshake",0),If=n._MdnCom_SetSecDebug=J0("MdnCom_SetSecDebug",1),Lf=n._MdnCom_GetEcsState=J0("MdnCom_GetEcsState",0),Rf=n._MdnCom_ResetEcs=J0("MdnCom_ResetEcs",0),Of=n._MdnCom_RegisterEcsHandshakeCallback=J0("MdnCom_RegisterEcsHandshakeCallback",1),Gf=n._MdnCom_Init=J0("MdnCom_Init",2),Uf=n._SendUtoQuery=J0("SendUtoQuery",2),Hf=n._SendUtoCmdExt=J0("SendUtoCmdExt",4),oa=J0("fflush",1),xs=c.emscripten_stack_get_end,Jf=c.emscripten_stack_get_base,Kf=J0("strerror",1),Fa=c.emscripten_stack_init,zf=c.emscripten_stack_get_free,Vf=c._emscripten_stack_restore,Wf=c._emscripten_stack_alloc,Xf=c.emscripten_stack_get_current,Yf=It=c.memory,Qf=Re=c.__indirect_function_table}var va={__cxa_throw:WA,_abort_js:Ur,_embind_finalize_value_object:Se,_embind_register_bigint:Hr,_embind_register_bool:o,_embind_register_class:Ne,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:M0,_embind_register_float:j0,_embind_register_function:mx,_embind_register_integer:Px,_embind_register_memory_view:Ix,_embind_register_std_string:Kn,_embind_register_std_wstring:v,_embind_register_value_object:B,_embind_register_value_object_field:p,_embind_register_void:j,_emval_create_invoker:q0,_emval_decref:F0,_emval_get_module_property:h0,_emval_get_property:cx,_emval_incref:kx,_emval_invoke:Ux,_emval_new_cstring:Wx,_emval_run_destructors:Xx,emscripten_resize_heap:jx,fd_close:cf,fd_seek:df,fd_write:uf,random_get:pf},fa;function xl(){Fa(),X()}function Al(){xl(),Kx();function c(){k(!fa),fa=!0,n.calledRun=!0,!L&&(yA(),C0?.(n),n.onRuntimeInitialized?.(),t0("onRuntimeInitialized"),k(!n._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),kA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c(),W()}var Er;Er=await Or(),Al(),N0?s=n:s=new Promise((c,C)=>{C0=c,_0=C});for(let c of Object.keys(n))c in t||Object.defineProperty(t,c,{configurable:!0,get(){ox(`Access to module property ('${c}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),_F={};CB(_F,{API_STAMP_UNBOUNDED:()=>a8,AT_COMMANDS:()=>yx,AT_COMMAND_TIMEOUT_MS:()=>Hx,ApiBadRequestError:()=>S0,ApiForbiddenError:()=>wn,ApiMethodNotAllowedError:()=>ki,ApiNotFoundError:()=>cA,AtCommandHandler:()=>Hd,AtDeviceError:()=>yi,AtHandlerDisposedError:()=>Rx,BACKFILL_PENDING_HEADER:()=>tv,BACKFILL_PENDING_VALUE:()=>nv,BLE_CONFIGURATION:()=>fu,BLE_SCAN_TIMEOUT_MS:()=>cu,COMPANION_AUTH_ERROR_I18N_KEYS:()=>zd,COMPANION_CERT_PATH:()=>Ks,COMPANION_PRIVATE_KEY_SIZE:()=>LF,COMPANION_PUBLIC_KEY_SIZE:()=>IF,CertApiError:()=>pt,CompanionAuthErrorKind:()=>M8,CompanionAuthManager:()=>Kd,CompanionCertError:()=>q8,DDE_FIELD_UNUSED_INDEX:()=>n8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>GF,DEFAULT_RECONNECT_OPTIONS:()=>K8,DLO_FILENAME:()=>Sr,DdeMapper:()=>gd,DdeUnknownAliasError:()=>Bi,DdeUnknownContainerError:()=>ge,DdeUnknownFieldError:()=>hi,DdeWriteForbiddenError:()=>jt,DebugLogLevel:()=>e8,DebugMaster:()=>lC,DebugSync:()=>S8,DeviceManager:()=>Fu,DeviceState:()=>J8,FW_FILENAME:()=>vi,LIC_API_BASE_URL:()=>y8,LOCAL_API_LIFECYCLE_FLAGS:()=>Ye,LOCAL_API_SITE_MASK:()=>ni,LOCAL_API_SITE_MASTER_KEYS:()=>wt,LegacySync:()=>_8,LocalDataManager:()=>O8,MANUFACTURER_CODE:()=>lu,MS_1999_12_31:()=>zs,MemoryStorage:()=>EC,Mutex:()=>li,OfflineSyncManager:()=>qd,RAW_TERMINAL_PATTERN:()=>T8,RESPONSE_PATTERNS:()=>U0,Rm2mStateManager:()=>iu,SYNC_LOGIC_MASK:()=>YF,SyncManager:()=>Gd,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>$8,USB_CONFIGURATION:()=>vu,UplinkMode:()=>ZF,UtoCommand:()=>HF,UtoESC:()=>QF,UtoFileFlag:()=>WF,UtoFileFlagInt:()=>XF,UtoFileType:()=>zF,UtoFlag:()=>VF,UtoMaster:()=>A8,UtoResult:()=>JF,UtoSplitTag:()=>KF,UtoTag:()=>fi,WebSocketBridge:()=>gi,applyBlueprintNames:()=>h8,applyDecpl:()=>KC,assertValidRequestStamps:()=>qr,base64ToBytes:()=>Js,base64UrlToBytes:()=>KB,buildBlueprintNameMap:()=>ei,bytesToBase64:()=>Cn,bytesToBase64Url:()=>ai,checkDeviceCapabilities:()=>Yd,computeDisplayValue:()=>R8,computeDisplayValues:()=>ti,consoleLogger:()=>KA,convertToString:()=>Vs,crc16Modbus:()=>QB,crc32Ethernet:()=>Fi,createDebugBufferState:()=>P8,createLocalApiHandler:()=>jD,createLocalApiSession:()=>wi,createSiteInfoFromDde:()=>$D,dbStampToStamp40:()=>JA,decodeContainer:()=>Zs,decodeFloatm16:()=>C8,decodeLifecycleFlags:()=>X8,decodeRm2mStateResponse:()=>H8,decodeUplinkState:()=>G8,deriveDeviceLifecycleMirror:()=>Y8,encodeContainer:()=>Ai,encodeFloatm16:()=>d8,encodeLifecycleFlags:()=>$i,encodeNulPaddedJson:()=>V8,encodeSerialNumber:()=>ZB,extractBits:()=>pn,formatApiStamp:()=>$r,generateCompanionKeypair:()=>Hs,getDeviceAssignment:()=>k8,isCertValid:()=>oi,isDevicePushableTag:()=>s8,isUnusedField:()=>ve,isValidStamp:()=>_i,mapLocalApiError:()=>dv,nullLogger:()=>dn,parseApiStamp:()=>Pr,parseBlueprint:()=>kd,parseDde:()=>GC,parseMetadataResponse:()=>I8,parseNulPaddedJson:()=>_t,parseRm2mStateParams:()=>U8,parseSerialNumberFromDataView:()=>xC,parseValuesResponse:()=>L8,requestCompanionCert:()=>UF,resolveAuthErrorKind:()=>Vd,resolveBlueprintNameMap:()=>kt,resolveContainerTag:()=>Dn,resolveTagForContainer:()=>ut,resolveTagInModel:()=>dC,routeLocalApiRequest:()=>Bv,spreadBits:()=>F8,stamp40ToDbHex:()=>lA,syncLogic:()=>un,systemTimeSource:()=>yt,toHex:()=>he,toUint8Array:()=>Ws,utoStack:()=>H0});uv.exports=uB(_F);var wF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:cn,n:fn,Gx:rF,Gy:tF,a:ys,d:ks,h:pB}=wF,Dt=32,bB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Sx=(x="")=>{let A=new Error(x);throw bB(A,Sx),A},mB=x=>typeof x=="bigint",jB=x=>typeof x=="string",hB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Qe=(x,A,e="")=>{let r=hB(x),t=x?.length,s=A!==void 0;if(!r||s&&t!==A){let n=e&&`"${e}" `,F=s?` of length ${A}`:"",f=r?`length=${t}`:`type=${typeof x}`,E=n+"expected Uint8Array"+F+", got "+f;throw r?new RangeError(E):new TypeError(E)}return x},yn=x=>new Uint8Array(x),si=x=>Uint8Array.from(x),SF=(x,A)=>x.toString(16).padStart(A,"0"),$F=x=>Array.from(Qe(x)).map(A=>SF(A,2)).join(""),Fe={_0:48,_9:57,A:65,F:70,a:97,f:102},nF=x=>{if(x>=Fe._0&&x<=Fe._9)return x-Fe._0;if(x>=Fe.A&&x<=Fe.F)return x-(Fe.A-10);if(x>=Fe.a&&x<=Fe.f)return x-(Fe.a-10)},TF=x=>{let A="hex invalid";if(!jB(x))return Sx(A);let e=x.length,r=e/2;if(e%2)return Sx(A);let t=yn(r);for(let s=0,n=0;s<r;s++,n+=2){let F=nF(x.charCodeAt(n)),f=nF(x.charCodeAt(n+1));if(F===void 0||f===void 0)return Sx(A);t[s]=F*16+f}return t},PF=()=>globalThis?.crypto,gB=()=>PF()?.subtle??Sx("crypto.subtle must be defined, consider polyfill"),qF=(...x)=>{let A=0;for(let t of x)A+=Qe(t).length;let e=yn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},yB=(x=Dt)=>PF().getRandomValues(yn(x)),En=BigInt,Ke=(x,A,e,r="bad number: out of range")=>{if(!mB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},sx=(x,A=cn)=>{let e=x%A;return e>=0n?e:A+e},sF=(1n<<255n)-1n,d0=x=>{x<0n&&Sx("negative coordinate");let A=(x>>255n)*19n+(x&sF);return A=(A>>255n)*19n+(A&sF),A%cn},kB=x=>sx(x,fn),_B=(x,A)=>{(x===0n||A<=0n)&&Sx("no inverse n="+x+" mod="+A);let e=sx(x,A),r=A,t=0n,s=1n,n=1n,F=0n;for(;e!==0n;){let f=r/e,E=r%e,u=t-n*f,D=s-F*f;r=e,e=E,t=n,s=F,n=u,F=D}return r===1n?sx(t,A):Sx("no inverse")},wB=x=>{let A=RB[x];return typeof A!="function"&&Sx("hashes."+x+" not set"),A},SB=x=>Qe(x,64,"digest"),_s=x=>x instanceof gt?x:Sx("Point expected"),Gs=2n**256n,ii=class ze{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let s=Gs;this.X=Ke(A,0n,s),this.Y=Ke(e,0n,s),this.Z=Ke(r,1n,s),this.T=Ke(t,0n,s),Object.freeze(this)}static CURVE(){return wF}static fromAffine(A){return new ze(A.x,A.y,1n,d0(A.x*A.y))}static fromBytes(A,e=!1){let r=ks,t=si(Qe(A,Dt)),s=A[31];t[31]=s&-129;let n=NF(t);Ke(n,0n,e?Gs:cn);let f=d0(n*n),E=sx(f-1n),u=d0(r*f+1n),{isValid:D,value:m}=PB(E,u);D||Sx("bad point: y not sqrt");let _=(m&1n)===1n,h=(s&128)!==0;return!e&&m===0n&&h&&Sx("bad point: x==0, isLastByteOdd"),h!==_&&(m=sx(-m)),new ze(m,n,1n,d0(m*n))}static fromHex(A,e){return ze.fromBytes(TF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=ys,e=ks,r=this;if(r.is0())return Sx("bad point: ZERO");let{X:t,Y:s,Z:n,T:F}=r,f=d0(t*t),E=d0(s*s),u=d0(n*n),D=d0(u*u),m=d0(f*A),_=d0(u*(m+E)),h=sx(D+d0(e*d0(f*E)));if(_!==h)return Sx("bad point: equation left != right (1)");let S=d0(t*s),P=d0(n*F);return S!==P?Sx("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:s,Y:n,Z:F}=_s(A),f=d0(e*F),E=d0(s*t),u=d0(r*F),D=d0(n*t);return f===E&&u===D}is0(){return this.equals(We)}negate(){return new ze(sx(-this.X),this.Y,this.Z,sx(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=ys,s=d0(A*A),n=d0(e*e),F=d0(2n*r*r),f=d0(t*s),E=sx(A+e),u=sx(d0(E*E)-s-n),D=sx(f+n),m=sx(D-F),_=sx(f-n),h=d0(u*m),S=d0(D*_),P=d0(u*_),N=d0(m*D);return new ze(h,S,N,P)}add(A){let{X:e,Y:r,Z:t,T:s}=this,{X:n,Y:F,Z:f,T:E}=_s(A),u=ys,D=ks,m=d0(e*n),_=d0(r*F),h=d0(d0(s*D)*E),S=d0(t*f),P=sx(d0(sx(e+r)*sx(n+F))-m-_),N=sx(S-h),R=sx(S+h),O=sx(_-d0(u*m)),n0=d0(P*N),L=d0(R*O),k=d0(P*O),I=d0(N*R);return new ze(n0,L,I,k)}subtract(A){return this.add(_s(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(Ke(A,1n,fn),!e&&this.is0()))return We;if(A===1n)return this;if(this.equals(Tr))return JB(A).p;let r=We,t=Tr;for(let s=this;A>0n;s=s.double(),A>>=1n)A&1n?r=r.add(s):e&&(t=t.add(s));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(We))return{x:0n,y:1n};let t=_B(r,cn);d0(r*t)!==1n&&Sx("invalid inverse");let s=d0(A*t),n=d0(e*t);return{x:s,y:n}}toBytes(){let{x:A,y:e}=this.toAffine(),r=$B(e);return r[31]|=A&1n?128:0,r}toHex(){return $F(this.toBytes())}clearCofactor(){return this.multiply(En(pB),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(fn/2n,!1).double();return fn%2n&&(A=A.add(this)),A.is0()}};A0(ii,"BASE");A0(ii,"ZERO");var gt=ii,Tr=new gt(rF,tF,1n,sx(rF*tF)),We=new gt(0n,1n,1n,0n);gt.BASE=Tr;gt.ZERO=We;var $B=x=>TF(SF(Ke(x,0n,Gs),64)).reverse(),NF=x=>En("0x"+$F(si(Qe(x)).reverse())),HA=(x,A)=>{let e=x;for(;A-- >0n;)e=d0(e*e);return e},TB=x=>{let A=d0(x*x),e=d0(A*x),r=d0(HA(e,2n)*e),t=d0(HA(r,1n)*x),s=d0(HA(t,5n)*t),n=d0(HA(s,10n)*s),F=d0(HA(n,20n)*n),f=d0(HA(F,40n)*F),E=d0(HA(f,80n)*f),u=d0(HA(E,80n)*f),D=d0(HA(u,10n)*s);return{pow_p_5_8:d0(HA(D,2n)*x),b2:e}},iF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,PB=(x,A)=>{let e=d0(A*d0(A*A)),r=d0(d0(e*e)*A),t=TB(d0(x*r)).pow_p_5_8,s=d0(x*d0(e*t)),n=d0(A*d0(s*s)),F=s,f=d0(s*iF),E=n===x,u=n===sx(-x),D=n===sx(-x*iF);return E&&(s=F),(u||D)&&(s=f),(sx(s)&1n)===1n&&(s=sx(-s)),{isValid:E||u,value:s}},qB=x=>kB(NF(x)),NB=(...x)=>Promise.resolve(wB("sha512Async")(qF(...x))).then(SB),MB=x=>{let A=si(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=qB(e),s=Tr.multiply(t),n=s.toBytes();return{head:e,prefix:r,scalar:t,point:s,pointBytes:n}},IB=x=>NB(Qe(x,Dt)).then(MB),LB=x=>IB(x).then(A=>A.pointBytes),RB={sha512Async:async x=>{let A=gB(),e=qF(x);return yn(await A.digest("SHA-512",e.buffer))},sha512:void 0},OB=x=>(x=x===void 0?yB(Dt):x,Qe(x,Dt)),GB=async x=>{let A=OB(x),e=await LB(A);return{secretKey:A,publicKey:e}},Bn=8,UB=256,MF=Math.ceil(UB/Bn)+1,Us=2**(Bn-1),HB=()=>{let x=[],A=Tr,e=A;for(let r=0;r<MF;r++){e=A,x.push(e);for(let t=1;t<Us;t++)e=e.add(A),x.push(e);A=e.double()}return x},aF=void 0,oF=(x,A)=>{let e=A.negate();return x?e:A},JB=x=>{let A=aF||(aF=HB()),e=We,r=Tr,t=2**Bn,s=t,n=En(t-1),F=En(Bn);for(let f=0;f<MF;f++){let E=Number(x&n);x>>=F,E>Us&&(E-=s,x+=1n);let u=f*Us,D=u,m=u+Math.abs(E)-1,_=f%2!==0,h=E<0;E===0?r=r.add(oF(_,A[D])):e=e.add(oF(h,A[m]))}return x!==0n&&Sx("invalid wnaf"),{p:e,f:r}},IF=32,LF=64;async function Hs(){let{secretKey:x,publicKey:A}=await GB(),e=new Uint8Array(LF);return e.set(x,0),e.set(A,IF),{publicKey:A,privateKey:e}}function Cn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function Js(x,A="base64 value"){return OF(RF(x,A))}function RF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function ai(x){return Cn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function KB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return OF(RF(r,A))}function OF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var pt=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},Ks="/api/1/companion/cert",GF=10080*60*1e3,FF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function UF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=FF?Ks:e+Ks,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};FF&&e&&(t["x-target-host"]=e);let s=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:ai(A.publicKey),subject:A.subject})});if(!s.ok){let F="unknown_error",f=s.statusText||`Cert API request failed (${s.status})`;try{let E=await s.json();E.code&&(F=E.code),E.message&&(f=E.message)}catch{}throw new pt(s.status,F,f)}let n=await s.json();if(!n.certificate||!n.notAfter)throw new pt(s.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function oi(x,A=GF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var zB=require("events"),VB=dB(DB(),1),sn="[device-master]",KA={debug:(x,...A)=>console.debug(sn,x,...A),info:(x,...A)=>console.info(sn,x,...A),warn:(x,...A)=>console.warn(sn,x,...A),error:(x,...A)=>console.error(sn,x,...A)},dn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},WB=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function Fi(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^WB[(e^x[r])&255];return(e^-1)>>>0}var zs=Date.UTC(1999,11,31,0,0,0);function Vs(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),s=e.repeat(t);return A<0?r+s:s+r}function he(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function Ws(x){if(x instanceof Uint8Array)return x;if(x instanceof ArrayBuffer)return new Uint8Array(x);if(x&&Object.hasOwn(x,"type")&&x.type==="Buffer"&&Object.hasOwn(x,"data")&&x.data instanceof Array)return Uint8Array.from(x.data);if(x.buffer)return new Uint8Array(x.buffer,x.byteOffset,x.byteLength);throw new Error("can not convert value to Uint8Array")}var XB=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),YB=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);function QB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let s=(r^x[t])&255;r=(e^XB[s])&255,e=YB[s]}return 256*e|r}function ZB(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),e=new DataView(A),r=x.substring(8,16),t=x.substring(0,8),s=parseInt(r,16),n=parseInt(t,16);return e.setUint32(0,s,!0),e.setUint32(4,n,!0),e}function xC(x){let A=("0000000"+x.getUint32(4,!0).toString(16)).slice(-8),e=("0000000"+x.getUint32(0,!0).toString(16)).slice(-8),r=`${A}${e}`.toUpperCase();return r.startsWith("0000")||e.startsWith("0000")?null:r}var AC=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],eC=new Map(AC.map((x,A)=>[x,128+A]));function rC(x){return x<=127||x>=160&&x<=255?x:eC.get(x)??63}var Sr="uto_script.dat",vi="uto_fw.dat",HF=(x=>(x[x.RESULT=0]="RESULT",x[x.QUERY=1]="QUERY",x[x.DELETE=2]="DELETE",x[x.DATA=3]="DATA",x[x.UNS_DATA=4]="UNS_DATA",x[x.LIVE_DATA=5]="LIVE_DATA",x[x.FILE_LIST=7]="FILE_LIST",x[x.FILE_RETR=8]="FILE_RETR",x[x.FILE_STOR=9]="FILE_STOR",x[x.FILE_DELE=10]="FILE_DELE",x[x.SET_VALUE=11]="SET_VALUE",x))(HF||{}),JF=(x=>(x[x.OK=0]="OK",x[x.TAG=1]="TAG",x[x.DLEN=2]="DLEN",x[x.DATA=3]="DATA",x[x.STAMP=4]="STAMP",x[x.EOD=5]="EOD",x[x.COMMAND=6]="COMMAND",x[x.COMMAND_DENIED=7]="COMMAND_DENIED",x[x.FULL=8]="FULL",x[x.NOTSUPPORTED=9]="NOTSUPPORTED",x[x.OLDDATA=10]="OLDDATA",x[x.STORAGE=11]="STORAGE",x[x.BUSY=12]="BUSY",x[x.DISC=256]="DISC",x))(JF||{}),fi=(x=>(x[x.DEVINFO=0]="DEVINFO",x[x.STAMPS=1]="STAMPS",x[x.LIC_QUERY=2]="LIC_QUERY",x[x.FILEMAP=3]="FILEMAP",x[x.MNTCFG=4]="MNTCFG",x[x.MDNCFG=5]="MDNCFG",x[x.CONTEXT=128]="CONTEXT",x[x.ALERTS=4294901767]="ALERTS",x[x.HISTDATA0=26368]="HISTDATA0",x[x.LOG=26375]="LOG",x[x.SYSCFG=26378]="SYSCFG",x[x.STATE=26389]="STATE",x[x.LOCALS=26402]="LOCALS",x[x.POS=26404]="POS",x[x.CTRLAMX=26405]="CTRLAMX",x[x.DYNPOS__=26406]="DYNPOS__",x[x.CONFIG0=26416]="CONFIG0",x[x.CONFIG1=26417]="CONFIG1",x[x.CONFIG2=26418]="CONFIG2",x[x.CONFIG3=26419]="CONFIG3",x[x.CONFIG4=26420]="CONFIG4",x[x.CONFIG5=26421]="CONFIG5",x[x.CONFIG6=26422]="CONFIG6",x[x.CONFIG7=26423]="CONFIG7",x[x.CONFIG8=26424]="CONFIG8",x[x.CONFIG9=26425]="CONFIG9",x[x.SYSOTP=26432]="SYSOTP",x[x.SYSFLASH=26433]="SYSFLASH",x[x.APPOTP=26434]="APPOTP",x[x.APPFLASH=26435]="APPFLASH",x[x.APPSTATE=26436]="APPSTATE",x[x.SYSINFO=26437]="SYSINFO",x[x.APPINFO=26438]="APPINFO",x[x.SYSSTATE=26439]="SYSSTATE",x[x.HISTDATA1=26528]="HISTDATA1",x[x.HISTDATA2=26529]="HISTDATA2",x[x.HISTDATA3=26530]="HISTDATA3",x[x.HISTDATA4=26531]="HISTDATA4",x[x.HISTDATA5=26532]="HISTDATA5",x[x.HISTDATA6=26533]="HISTDATA6",x[x.HISTDATA7=26534]="HISTDATA7",x[x.HISTDATA8=26535]="HISTDATA8",x[x.HISTDATA9=26536]="HISTDATA9",x[x.HISTDATA_RAW=26623]="HISTDATA_RAW",x[x.CONFIGA=4294928218]="CONFIGA",x[x.CONFIGB=4294928219]="CONFIGB",x[x.CONFIGC=4294928220]="CONFIGC",x))(fi||{}),KF=(x=>(x[x.HISTDATA0=0]="HISTDATA0",x[x.HISTDATA1=1]="HISTDATA1",x[x.HISTDATA2=2]="HISTDATA2",x[x.HISTDATA3=3]="HISTDATA3",x[x.HISTDATA4=4]="HISTDATA4",x[x.HISTDATA5=5]="HISTDATA5",x[x.HISTDATA6=6]="HISTDATA6",x[x.HISTDATA7=7]="HISTDATA7",x[x.HISTDATA8=8]="HISTDATA8",x[x.HISTDATA9=9]="HISTDATA9",x[x.ALERTS=32]="ALERTS",x[x.APPLOG=40]="APPLOG",x))(KF||{}),zF=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(zF||{}),VF=(x=>(x[x.HISTORIC=1]="HISTORIC",x[x.UP=2]="UP",x[x.DOWN=4]="DOWN",x[x.DLEN_VAR=8]="DLEN_VAR",x[x.SET_VALUE=16]="SET_VALUE",x))(VF||{}),WF=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(WF||{}),XF=(x=>(x[x.CRC_STAMP=1]="CRC_STAMP",x[x.FORCE_DNLD=2]="FORCE_DNLD",x[x.FORCE_UPLD=4]="FORCE_UPLD",x[x.DEL=8]="DEL",x[x.CREATOR=16]="CREATOR",x[x.SYNCONLYDOWN=33]="SYNCONLYDOWN",x[x.SYNCONLYUP=65]="SYNCONLYUP",x[x.STAMP_ONLY=97]="STAMP_ONLY",x[x.TAKEFROMTPL=128]="TAKEFROMTPL",x[x.EXISTSONDEV=256]="EXISTSONDEV",x))(XF||{}),YF=97;function un(x){return x&YF}var QF=(x=>(x[x.KEEPALIVE=1]="KEEPALIVE",x[x.NEWDATA=2]="NEWDATA",x[x.DISC=3]="DISC",x[x.LIVE_ON=4]="LIVE_ON",x[x.LIVE_OFF=5]="LIVE_OFF",x[x.NO_GPRS=6]="NO_GPRS",x[x.ZLIB=7]="ZLIB",x[x.WAKEUP=8]="WAKEUP",x[x.SECURITY=9]="SECURITY",x[x.CAP_00=192]="CAP_00",x[x.CAP_01=193]="CAP_01",x[x.CAP_02=194]="CAP_02",x[x.CAP_03=195]="CAP_03",x[x.CAP_04=196]="CAP_04",x[x.CAP_05=197]="CAP_05",x[x.CAP_06=198]="CAP_06",x[x.CAP_07=199]="CAP_07",x[x.CAP_08=200]="CAP_08",x[x.CAP_09=201]="CAP_09",x[x.CAP_0a=202]="CAP_0a",x[x.CAP_0b=203]="CAP_0b",x[x.CAP_0c=204]="CAP_0c",x[x.CAP_0d=205]="CAP_0d",x[x.CAP_0e=206]="CAP_0e",x[x.CAP_0f=207]="CAP_0f",x))(QF||{}),ZF=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(ZF||{}),vF={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},tC=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+he(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+he(x,2)}tagToString(x){x|=0;let A=Object.entries(fi).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+he(x,4)}containerIdToTag(x,A){let e=vF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(vF).find(([,e])=>e===x.wTag);if(A)return A[0];if(x.wTag===26623){if(!x.data||!x.data.byteLength)return null;let e=x.data.getUint8(0);return e===32?"alerts":e>=0&&e<=9?`histdata${e}`:null}return null}formatSerialNumber(x,A="-"){return x?x.substr(0,4)+A+x.substr(4,4)+A+x.substr(8,4)+A+x.substr(12):"(none)"}decodeUplinkState(x){let A={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},e=!!(x&A.WAKEUPABLE),r=[];x&A.POSUPDATE_ACTIVE?r=["locating",!1]:x&A.RETRY?r=["retry",!1]:x&A.STARTED?r=["dialing",!1]:x&A.ACTIVE?r=["active",!1]:x&A.FAILED?r=["failed",e]:x&A.DISABLED?r=["disabled",!1]:r=["offline",e];let t=A.WAKEUPABLE|A.RETRY|A.STARTED|A.ACTIVE|A.POSUPDATE_ACTIVE|A.FAILED|A.DISABLED|A.EXTSIM;return{signal:r[0],wakeupAble:r[1],path:x&A.EXTSIM?"xsim ":"isim ",txStateUnknown:x&~t}}stamp40ToMS(x){let A=Math.trunc(x/256),e=x&255;return Math.round(A*1e3+1e3*e/256)+zs}msToStamp40(x){let A=(x-zs)/1e3,e=Math.trunc(A),r=Math.round((A-e)*256);return e*256+r}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&x.getUint8(A+t);)t++;let s=new Uint8Array(x.buffer,A,t);return r.decode(s)}ansiUnpack(x,A,e,r){try{let t=Ws(x),s=new TextDecoder(r),n=0;for(;n<e&&t[A+n];)n++;return s.decode(t.slice(A,A+n))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(x,A,e){return this.ansiUnpack(x,A,e,"cp1252")}ansiPack(x,A,e,r){let t=Ws(x);t.fill(0,A,A+e);for(let s=0;s<e&&s<r.length;s++)t[A+s]=rC(r.charCodeAt(s))}cp1252Pack(x,A,e,r){return this.ansiPack(x,A,e,r)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(0),r=A.getUint16(2),t=A.getUint16(4),s=A.getUint32(6),n=(he(s,8)+he(x.dwDevSN,8)).toUpperCase(),F=[];for(let f=0;f<(A.byteLength-10)/5;f++){let E=A.getUint8(10+f*5+2),u=A.getUint16(10+f*5);F.push({wTag:u,sTag:this.tagToString(u),size:A.getUint16(10+f*5+3),flags:{historic:!!(E&1),single:!(E&1),up:!!(E&2),down:!!(E&4),variableLength:!!(E&8),setValue:!!(E&16)}})}return{serialNumber:n,class:he(e,4),firmwareVersion:`${Vs(t>>8,2)}v${Vs(t&255,3,"0")}`,flags:he(r,4),utos:F}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,e={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(A.byteLength-8)/5;r++)e.stamps.push(A.getUint32(8+r*5+0)*256+A.getUint8(8+r*5+4));return e}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),e=new DataView(A.buffer);return e.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(e,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(13,!1),r={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(x){if(x.flags){let r=0;x.flags.extra&&(r|=x.flags.extra|0),x.flags.read&&(r|=1),x.flags.write&&(r|=2),x.flags.node&&(r|=4),x.flags.system&&(r|=8),x._flags=r}let A=new Uint8Array(15+x.name.length+1),e=new DataView(A.buffer);return e.setUint32(0,Math.trunc(x.stamp/256),!1),e.setUint8(4,x.stamp&255),e.setUint32(5,x.size,!1),e.setUint32(9,x.crc32,!1),e.setUint16(13,x._flags,!1),this.cp1252Pack(e,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},H0=new tC,yt={nowMs:()=>Date.now()},li=class{constructor(x="(unnamed)"){A0(this,"name"),A0(this,"_locked"),A0(this,"_chain"),this.name=x,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(x=>{this._chain.push(x)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(x){await this.requestLock();try{return await x()}finally{this.unlock()}}},fF=new WeakMap;function x8(x,A){let r=(fF.get(x)??Promise.resolve()).then(()=>nC(x,A));return fF.set(x,r.catch(()=>{})),r}async function nC(x,A){x.interface&&x.interface==="ble"?await sC(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function sC(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let s=0;s<r.byteLength;s+=t){let n=r.slice(s,s+t);await x(n.buffer)}}var lF=15e3,iC=500,aC=3,oC=1024;function cF(x){return x?.utos.find(e=>e.wTag===3)?.size||oC}var A8=class ln extends zB.EventEmitter{constructor(A,e,r=yt){super(),A0(this,"mdnComInterface"),A0(this,"receiveUto"),A0(this,"sendUto"),A0(this,"rxUto"),A0(this,"txStream"),A0(this,"SendUtoCmdExt"),A0(this,"utoPortLock"),A0(this,"transport"),A0(this,"logger"),A0(this,"ecsHandshakeResolver",null),A0(this,"disposeTransportListener",null),A0(this,"encrypted",!1),A0(this,"lastTxWrite",Promise.resolve()),A0(this,"timeSource"),A0(this,"fileChunkSize",cF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new li("UTO-Port"),this.transport=A,this.logger=e??KA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,VB.default)({print:s=>{this.logger.info(`[mdnCom] ${s}`),this.emit("mdnCom",s)},printErr:s=>{this.logger.error(`[mdnCom] ${s}`),this.emit("mdnComError",s)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let s=this.txStream();this.lastTxWrite=x8(this.transport,s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let s=this.rxUto(),n=this.parseUtoFrame(s);this.emit("utoFrame",n)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(s=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${s} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({success:s===0,resultCode:s})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async s=>{this.receiveUto&&await this.receiveUto(new Uint8Array(s))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:H0.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((s,n,F)=>{if(s.bCmd===0){let f=this.resultVerdict(s);f===5||f===0||f===4?n(null):F(s);return}if(s.wTagFull!==A)return F(s);n(s)},async()=>{this.sendUto(A,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:e,disc:r}=ln.resultCode(A);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),e}static concatChunks(A){let e=A.reduce((s,n)=>s+n.length,0),r=new Uint8Array(e),t=0;for(let s of A)r.set(s,t),t+=s.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??iC,s=r?.maxRetries??aC;return new Promise((n,F)=>{let f=0,E=!1,u=()=>{},D,m={resolve:h=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),n(h)},reject:h=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),F(h)}},_=async()=>{u=h=>A(h,m.resolve,m.reject),this.once("utoFrame",u);try{await e()}catch(h){if(E)return;this.removeListener("utoFrame",u),F(h);return}E||(D=setTimeout(()=>{if(this.removeListener("utoFrame",u),f>=s){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${s} retries`));return}f++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${f}/${s})`),_()},t))};_()})}createFrameIdleGuard(A,e,r){let t,s=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{s(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:s}}async requestHistoricUtos(A,e,r,t=lF,s=0,n){return await this.utoPortLock.requestLock(),new Promise((F,f)=>{if(!this.sendUto)return F([]);let E=[],u=0,D=Promise.resolve(),m=P=>{if(_.arm(),P.bCmd===0){_.clear(),this.settleHistoricTransfer(P,E,n,D,F,f);return}if(P.wTagFull===A&&P.data&&(E.push({stamp40:P.stamp,data:this.copyDataView(P.data)}),r?.(++u),n&&s>0&&E.length>=s)){let N=E.splice(0);D=D.then(()=>n(N))}this.once("utoFrame",m)},_=this.createFrameIdleGuard(m,t,()=>f(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${u} records received)`)));this.once("utoFrame",m),_.arm();let h=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:h,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,s,n){let F=this.resultVerdict(A);if(!(F===5||F===0||F===4)){t.then(()=>n(A)).catch(n);return}let E=r&&e.length>0?e.splice(0):null;(E?t.then(()=>r(E)):t).then(()=>s(r?[]:e)).catch(n)}async requestFile(A,e,r=lF){return await this.utoPortLock.requestLock(),new Promise((t,s)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,f=D=>{if(E.arm(),D.bCmd===0){E.clear();let m=this.resultVerdict(D);m===5||m===0?t(ln.concatChunks(n)):s(D);return}if(D.bCmd===3&&D.data){let m=this.copyDataView(D.data);n.push(m),F+=m.byteLength,e?.(F)}this.once("utoFrame",f)},E=this.createFrameIdleGuard(f,r,()=>s(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${F} bytes received)`)));this.once("utoFrame",f),E.arm();let u=new Uint8Array(A.length+1);for(let D=0;D<A.length;D++)u[D]=A.charCodeAt(D)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},u)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let e=new Uint8Array(A.length+1);for(let r=0;r<A.length;r++)e[r]=A.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(A,e,r){this.isInitialized();let t=new Uint8Array(e.length);H0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(s){let n=s;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=ln.resultCode(n),f=n.wTagFull;return F===4?{outcome:"stamp",resultCode:f}:F===7||F===9?{outcome:"denied",resultCode:f}:{outcome:"error",resultCode:f}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${s}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?H0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=cF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?H0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,H0.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},s=n=>this.handleFileListFrame(n,t,A,e,r,s);this.once("utoFrame",s),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,s,n){if(A.bCmd===0){let F=this.resultVerdict(A);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):s(A);return}try{let F=H0.decode_FILEMAP(A);e[F.name]=F}catch(F){s(F);return}this.once("utoFrame",n)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?H0.decode_STAMPS(A):null}async sendFile(A,e,r,t){let s=e;A===2&&(s=new Uint8Array(e.length+1),s.set(new Uint8Array(e),1),s[0]=A);let n={name:t??Sr,stamp:r===0?0:H0.msToStamp40(r??this.timeSource.nowMs()),size:s.length,_flags:11,crc32:Fi(s)},F=H0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let E=this.fileChunkSize;for(let u=0;u<s.length;u+=E){let D=Math.min(E,s.byteLength-u),m=new Uint8Array(s.buffer,s.byteOffset+u,D);await this.sendUTOCmdExt(3,3,m,u*256);let h=(u+D)/s.byteLength*100;this.emit("installing",h.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let s=t??this.utoStampNow40,n=Math.trunc(s/256),F=s&255;return await this.sendWithRetry((f,E,u)=>{if(f.bCmd!==0){u(f);return}this.resultVerdict(f)===0?E(null):u(f)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:n,u8SysTime:F},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,e,r){return this.sendUTOCmdExt(3,A,e,r)}packOtpFlashString(A){let e=new Uint8Array(1024);return H0.cp1252Pack(e,0,1024,A),e}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let e=A.companionPublicKey.slice(0,32),r=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((s,n)=>{if(A.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};A.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=E=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(E)}`),A.signal?.removeEventListener("abort",F),E.success&&(this.encrypted=!0),s(E)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let f=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${f} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),f<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",F),s({success:!1,resultCode:f})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},FC=require("events"),e8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(e8||{}),vC=5e3,fC=5e3,lC=class extends FC.EventEmitter{constructor(x,A){super(),A0(this,"atHandler"),A0(this,"debugCache",null),A0(this,"logger"),A0(this,"dataHandler"),this.atHandler=x,this.logger=A??KA,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[e,r,,t]=A.split(" "),s={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(s.level=this.logLevelFromPrefix(F)),s.message=n,this.emitMessageEvent(s)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:e,f11:r},t){for(let s of t){s==="\xFF"&&(s="%");let n=String.fromCharCode(...r.map(F=>F.tag));if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:s,start:Date.now()})}else if(s===""){switch(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+s;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:s,start:Date.now()})}else if(r.length){let F=r[r.length-1];if(F.tag===16&&s==="\r")continue;F.buf+=s,F.tag===16&&s===`
2192
+ }`;var X0=new Function(Object.keys(e0),D0)(...Object.values(e0)),V0=`methodCaller<(${Y.map(Q0=>Q0.name)}) => ${q.name}>`;return I(qe(V0,X0))},h0=c=>(c=L0(c),u0.toHandle(n[c])),cx=(c,C)=>(c=u0.toValue(c),C=u0.toValue(C),u0.toHandle(c[C])),_x=c=>{c>9&&(V[c+1]+=1)},Hx=(c,C,g,T,q)=>w[c](C,g,T,q),Yx=c=>u0.toHandle(L0(c)),Qx=c=>{var C=u0.toValue(c);TA(C),F0(c)},Le=()=>2147483648,iA=(c,C)=>(k(C,"alignment argument is required"),Math.ceil(c/C)*C),De=c=>{var C=Lt.buffer.byteLength,g=(c-C+65535)/65536|0;try{return Lt.grow(g),ix(),1}catch(T){U(`growMemory: Attempted to grow heap from ${C} bytes to ${c} bytes, but got error: ${T}`)}},jx=c=>{var C=bx.length;c>>>=0,k(c>C);var g=Le();if(c>g)return U(`Cannot enlarge memory, requested ${c} bytes, but the limit is ${g} bytes!`),!1;for(var T=1;T<=4;T*=2){var q=C*(1+.2/T);q=Math.min(q,c+100663296);var Y=Math.min(g,iA(Math.max(c,q),65536)),X=De(Y);if(X)return!0}return U(`Failed to grow the heap from ${C} bytes to ${Y} bytes, not enough memory!`),!1},El=c=>{ox("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},Bl=9007199254740992,Cl=-9007199254740992,dl=c=>c<Cl||c>Bl?NaN:Number(c);function ul(c,C,g,T){return C=dl(C),70}var Xn=[null,[],[]],Yn=(c,C)=>{var g=Xn[c];k(g),C===0||C===10?((c===1?R:U)(Nt(g)),g.length=0):g.push(C)},a7=()=>{la(0),Xn[1].length&&Yn(1,10),Xn[2].length&&Yn(2,10)},Dl=(c,C,g,T)=>{for(var q=0,Y=0;Y<g;Y++){var X=g0[C>>2],x0=g0[C+4>>2];C+=8;for(var e0=0;e0<x0;e0++)Yn(c,bx[X+e0]);q+=x0}return g0[T>>2]=q,0},pl=()=>{if(E){var c=require("crypto");return C=>c.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},aa=c=>(aa=pl())(c),bl=(c,C)=>aa(bx.subarray(c,c+C)),ml=(c,C)=>{if(Re)for(var g=c;g<c+C;g++){var T=Ne(g);T&&Re.set(T,g)}},Re,jl=c=>(Re||(Re=new WeakMap,ml(0,Oe.length)),Re.get(c)||0),Qn=[],hl=()=>{if(Qn.length)return Qn.pop();try{return Oe.grow(1)}catch(c){if(!(c instanceof RangeError))throw c;ox("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},Zn=(c,C)=>{Oe.set(c,C),xe[c]=Oe.get(c)},oa=c=>{let C=c.length;return k(C<16384),[C%128|128,C>>7,...c]},gl={i:127,p:127,j:126,f:125,d:124,e:111},Fa=c=>oa(Array.from(c,C=>{var g=gl[C];return k(g,`invalid signature char: ${C}`),g})),yl=(c,C)=>{var g=Uint8Array.of(0,97,115,109,1,0,0,0,1,...oa([1,96,...Fa(C.slice(1)),...Fa(C[0]==="v"?"":C[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),T=new WebAssembly.Module(g),q=new WebAssembly.Instance(T,{e:{f:c}}),Y=q.exports.f;return Y},kl=(c,C)=>{k(typeof c<"u");var g=jl(c);if(g)return g;var T=hl();try{Zn(T,c)}catch(Y){if(!(Y instanceof TypeError))throw Y;k(typeof C<"u","Missing signature argument to addFunction: "+c);var q=yl(c,C);Zn(T,q)}return Re.set(c,T),T},_l=c=>{Re.delete(Ne(c)),Zn(c,null),Qn.push(c)};Xr(),cr(),k(V.length===10);{if(n.noExitRuntime&&(we=n.noExitRuntime),n.print&&(R=n.print),n.printErr&&(U=n.printErr),n.wasmBinary&&(t0=n.wasmBinary),n.FS_createDataFile=eA.createDataFile,n.FS_createPreloadedFile=eA.createPreloadedFile,$l(),n.arguments&&(D=n.arguments),n.thisProgram&&(m=n.thisProgram),k(typeof n.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),k(typeof n.read>"u","Module.read option was removed"),k(typeof n.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),k(typeof n.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),k(typeof n.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),k(typeof n.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),k(typeof n.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),k(typeof n.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),k(typeof n.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),k(typeof n.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n0("preInit")}n.addFunction=kl,n.removeFunction=_l;var wl=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];wl.forEach(i0);var Sl=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];Sl.forEach(l0);function $l(){o0("fetchSettings"),o0("logReadFiles"),o0("loadSplitModule"),o0("onMalloc"),o0("onRealloc"),o0("onFree"),o0("onSbrkGrow")}var va=Z("___getTypeName"),xs=Z("_malloc"),te=Z("_free"),Tl=n._MdnCom_ESCHandler=Z("_MdnCom_ESCHandler"),Pl=n._MdnCom_Free=Z("_MdnCom_Free"),ql=n._MdnCom_RawRx=Z("_MdnCom_RawRx"),Nl=n._MdnCom_CryptoSelfTest=Z("_MdnCom_CryptoSelfTest"),Il=n._MdnCom_SetCompanionKeypair=Z("_MdnCom_SetCompanionKeypair"),Ml=n._MdnCom_InitiateEcsHandshake=Z("_MdnCom_InitiateEcsHandshake"),Ll=n._MdnCom_SetSecDebug=Z("_MdnCom_SetSecDebug"),Rl=n._MdnCom_GetEcsState=Z("_MdnCom_GetEcsState"),Ol=n._MdnCom_ResetEcs=Z("_MdnCom_ResetEcs"),Gl=n._MdnCom_RegisterEcsHandshakeCallback=Z("_MdnCom_RegisterEcsHandshakeCallback"),Ul=n._MdnCom_Init=Z("_MdnCom_Init"),Hl=n._SendUtoQuery=Z("_SendUtoQuery"),Jl=n._SendUtoCmdExt=Z("_SendUtoCmdExt"),la=Z("_fflush"),As=Z("_emscripten_stack_get_end"),Kl=Z("_emscripten_stack_get_base"),zl=Z("_strerror"),fa=Z("_emscripten_stack_init"),Vl=Z("_emscripten_stack_get_free"),Wl=Z("__emscripten_stack_restore"),Xl=Z("__emscripten_stack_alloc"),Yl=Z("_emscripten_stack_get_current"),Ql=Z("memory"),Zl=Z("__indirect_function_table"),Lt=Z("wasmMemory"),Oe=Z("wasmTable");function xf(c){k(typeof c.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof c.malloc<"u","missing Wasm export: malloc"),k(typeof c.free<"u","missing Wasm export: free"),k(typeof c.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof c.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof c.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof c.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof c.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof c.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof c.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof c.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof c.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof c.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof c.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof c.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof c.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof c.fflush<"u","missing Wasm export: fflush"),k(typeof c.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof c.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof c.strerror<"u","missing Wasm export: strerror"),k(typeof c.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof c.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof c._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof c._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof c.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof c.memory<"u","missing Wasm export: memory"),k(typeof c.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),va=J0("__getTypeName",1),xs=J0("malloc",1),te=J0("free",1),Tl=n._MdnCom_ESCHandler=J0("MdnCom_ESCHandler",1),Pl=n._MdnCom_Free=J0("MdnCom_Free",1),ql=n._MdnCom_RawRx=J0("MdnCom_RawRx",1),Nl=n._MdnCom_CryptoSelfTest=J0("MdnCom_CryptoSelfTest",0),Il=n._MdnCom_SetCompanionKeypair=J0("MdnCom_SetCompanionKeypair",2),Ml=n._MdnCom_InitiateEcsHandshake=J0("MdnCom_InitiateEcsHandshake",0),Ll=n._MdnCom_SetSecDebug=J0("MdnCom_SetSecDebug",1),Rl=n._MdnCom_GetEcsState=J0("MdnCom_GetEcsState",0),Ol=n._MdnCom_ResetEcs=J0("MdnCom_ResetEcs",0),Gl=n._MdnCom_RegisterEcsHandshakeCallback=J0("MdnCom_RegisterEcsHandshakeCallback",1),Ul=n._MdnCom_Init=J0("MdnCom_Init",2),Hl=n._SendUtoQuery=J0("SendUtoQuery",2),Jl=n._SendUtoCmdExt=J0("SendUtoCmdExt",4),la=J0("fflush",1),As=c.emscripten_stack_get_end,Kl=c.emscripten_stack_get_base,zl=J0("strerror",1),fa=c.emscripten_stack_init,Vl=c.emscripten_stack_get_free,Wl=c._emscripten_stack_restore,Xl=c._emscripten_stack_alloc,Yl=c.emscripten_stack_get_current,Ql=Lt=c.memory,Zl=Oe=c.__indirect_function_table}var ca={__cxa_throw:XA,_abort_js:Ur,_embind_finalize_value_object:$e,_embind_register_bigint:Hr,_embind_register_bool:o,_embind_register_class:Ie,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:I0,_embind_register_float:j0,_embind_register_function:mx,_embind_register_integer:qx,_embind_register_memory_view:Lx,_embind_register_std_string:zn,_embind_register_std_wstring:l,_embind_register_value_object:B,_embind_register_value_object_field:p,_embind_register_void:j,_emval_create_invoker:N0,_emval_decref:F0,_emval_get_module_property:h0,_emval_get_property:cx,_emval_incref:_x,_emval_invoke:Hx,_emval_new_cstring:Yx,_emval_run_destructors:Qx,emscripten_resize_heap:jx,fd_close:El,fd_seek:ul,fd_write:Dl,random_get:bl},Ea;function Af(){fa(),W()}function ef(){Af(),Vx();function c(){k(!Ea),Ea=!0,n.calledRun=!0,!M&&(kA(),C0?.(n),n.onRuntimeInitialized?.(),n0("onRuntimeInitialized"),k(!n._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),_A())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c(),Q()}var Br;Br=await Or(),ef(),$0?s=n:s=new Promise((c,C)=>{C0=c,_0=C});for(let c of Object.keys(n))c in t||Object.defineProperty(t,c,{configurable:!0,get(){ox(`Access to module property ('${c}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),SF={};dB(SF,{API_STAMP_UNBOUNDED:()=>F8,AT_COMMANDS:()=>kx,AT_COMMAND_TIMEOUT_MS:()=>Kx,ApiBadRequestError:()=>S0,ApiForbiddenError:()=>Sn,ApiMethodNotAllowedError:()=>Si,ApiNotFoundError:()=>EA,AtCommandHandler:()=>Jd,AtDeviceError:()=>wi,AtHandlerDisposedError:()=>Ox,BACKFILL_PENDING_HEADER:()=>sv,BACKFILL_PENDING_VALUE:()=>iv,BLE_CONFIGURATION:()=>fu,BLE_SCAN_TIMEOUT_MS:()=>Eu,COMPANION_AUTH_ERROR_I18N_KEYS:()=>Vd,COMPANION_CERT_PATH:()=>Ws,COMPANION_PRIVATE_KEY_SIZE:()=>OF,COMPANION_PUBLIC_KEY_SIZE:()=>RF,CertApiError:()=>bt,CompanionAuthErrorKind:()=>L8,CompanionAuthManager:()=>zd,CompanionCertError:()=>I8,DDE_FIELD_UNUSED_INDEX:()=>i8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>HF,DEFAULT_RECONNECT_OPTIONS:()=>V8,DLO_FILENAME:()=>Sr,DdeMapper:()=>yd,DdeUnknownAliasError:()=>ui,DdeUnknownContainerError:()=>ye,DdeUnknownFieldError:()=>ki,DdeWriteForbiddenError:()=>ht,DebugLogLevel:()=>t8,DebugMaster:()=>cC,DebugSync:()=>T8,DeviceManager:()=>vu,DeviceState:()=>z8,FW_FILENAME:()=>ci,LIC_API_BASE_URL:()=>_8,LOCAL_API_LIFECYCLE_FLAGS:()=>Qe,LOCAL_API_SITE_MASK:()=>ai,LOCAL_API_SITE_MASTER_KEYS:()=>St,LegacySync:()=>S8,LocalDataManager:()=>U8,MANUFACTURER_CODE:()=>cu,MS_1999_12_31:()=>Xs,MemoryStorage:()=>BC,Mutex:()=>Bi,OfflineSyncManager:()=>Nd,RAW_TERMINAL_PATTERN:()=>q8,RESPONSE_PATTERNS:()=>U0,Rm2mStateManager:()=>au,SYNC_LOGIC_MASK:()=>ZF,SyncManager:()=>Ud,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>P8,USB_CONFIGURATION:()=>lu,UplinkMode:()=>A8,UtoCommand:()=>KF,UtoESC:()=>x8,UtoFileFlag:()=>YF,UtoFileFlagInt:()=>QF,UtoFileType:()=>WF,UtoFlag:()=>XF,UtoMaster:()=>r8,UtoResult:()=>zF,UtoSplitTag:()=>VF,UtoTag:()=>Ei,WebSocketBridge:()=>_i,applyBlueprintNames:()=>y8,applyDecpl:()=>zC,assertValidRequestStamps:()=>qr,base64ToBytes:()=>Vs,base64UrlToBytes:()=>zB,buildBlueprintNameMap:()=>ni,bytesToBase64:()=>dn,bytesToBase64Url:()=>vi,checkDeviceCapabilities:()=>Qd,computeDisplayValue:()=>G8,computeDisplayValues:()=>ii,consoleLogger:()=>zA,convertToString:()=>Ys,crc16Modbus:()=>ZB,crc32Ethernet:()=>fi,createDebugBufferState:()=>N8,createLocalApiHandler:()=>hD,createLocalApiSession:()=>Ti,createSiteInfoFromDde:()=>TD,dbStampToStamp40:()=>KA,decodeContainer:()=>ei,decodeFloatm16:()=>u8,decodeLifecycleFlags:()=>Q8,decodeRm2mStateResponse:()=>K8,decodeUplinkState:()=>H8,deriveDeviceLifecycleMirror:()=>Z8,encodeContainer:()=>ti,encodeFloatm16:()=>D8,encodeLifecycleFlags:()=>qi,encodeNulPaddedJson:()=>X8,encodeSerialNumber:()=>xC,extractBits:()=>bn,formatApiStamp:()=>$r,generateCompanionKeypair:()=>zs,getDeviceAssignment:()=>w8,isCertValid:()=>li,isDevicePushableTag:()=>a8,isUnusedField:()=>le,isValidStamp:()=>$i,mapLocalApiError:()=>Dv,nullLogger:()=>un,parseApiStamp:()=>Pr,parseBlueprint:()=>_d,parseDde:()=>UC,parseMetadataResponse:()=>R8,parseNulPaddedJson:()=>wt,parseRm2mStateParams:()=>J8,parseSerialNumberFromDataView:()=>AC,parseValuesResponse:()=>O8,requestCompanionCert:()=>JF,resolveAuthErrorKind:()=>Wd,resolveBlueprintNameMap:()=>_t,resolveContainerTag:()=>pn,resolveTagForContainer:()=>Dt,resolveTagInModel:()=>uC,routeLocalApiRequest:()=>dv,spreadBits:()=>l8,stamp40ToDbHex:()=>cA,syncLogic:()=>Dn,systemTimeSource:()=>kt,toHex:()=>ge,toUint8Array:()=>Qs,utoStack:()=>H0});pv.exports=DB(SF);var $F=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:En,n:fn,Gx:nF,Gy:sF,a:ws,d:Ss,h:bB}=$F,pt=32,mB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},$x=(x="")=>{let A=new Error(x);throw mB(A,$x),A},jB=x=>typeof x=="bigint",hB=x=>typeof x=="string",gB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Ze=(x,A,e="")=>{let r=gB(x),t=x?.length,s=A!==void 0;if(!r||s&&t!==A){let n=e&&`"${e}" `,F=s?` of length ${A}`:"",v=r?`length=${t}`:`type=${typeof x}`,E=n+"expected Uint8Array"+F+", got "+v;throw r?new RangeError(E):new TypeError(E)}return x},kn=x=>new Uint8Array(x),oi=x=>Uint8Array.from(x),TF=(x,A)=>x.toString(16).padStart(A,"0"),PF=x=>Array.from(Ze(x)).map(A=>TF(A,2)).join(""),ve={_0:48,_9:57,A:65,F:70,a:97,f:102},iF=x=>{if(x>=ve._0&&x<=ve._9)return x-ve._0;if(x>=ve.A&&x<=ve.F)return x-(ve.A-10);if(x>=ve.a&&x<=ve.f)return x-(ve.a-10)},qF=x=>{let A="hex invalid";if(!hB(x))return $x(A);let e=x.length,r=e/2;if(e%2)return $x(A);let t=kn(r);for(let s=0,n=0;s<r;s++,n+=2){let F=iF(x.charCodeAt(n)),v=iF(x.charCodeAt(n+1));if(F===void 0||v===void 0)return $x(A);t[s]=F*16+v}return t},NF=()=>globalThis?.crypto,yB=()=>NF()?.subtle??$x("crypto.subtle must be defined, consider polyfill"),IF=(...x)=>{let A=0;for(let t of x)A+=Ze(t).length;let e=kn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},kB=(x=pt)=>NF().getRandomValues(kn(x)),Bn=BigInt,ze=(x,A,e,r="bad number: out of range")=>{if(!jB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},sx=(x,A=En)=>{let e=x%A;return e>=0n?e:A+e},aF=(1n<<255n)-1n,d0=x=>{x<0n&&$x("negative coordinate");let A=(x>>255n)*19n+(x&aF);return A=(A>>255n)*19n+(A&aF),A%En},_B=x=>sx(x,fn),wB=(x,A)=>{(x===0n||A<=0n)&&$x("no inverse n="+x+" mod="+A);let e=sx(x,A),r=A,t=0n,s=1n,n=1n,F=0n;for(;e!==0n;){let v=r/e,E=r%e,u=t-n*v,D=s-F*v;r=e,e=E,t=n,s=F,n=u,F=D}return r===1n?sx(t,A):$x("no inverse")},SB=x=>{let A=OB[x];return typeof A!="function"&&$x("hashes."+x+" not set"),A},$B=x=>Ze(x,64,"digest"),$s=x=>x instanceof yt?x:$x("Point expected"),Js=2n**256n,Fi=class Ve{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let s=Js;this.X=ze(A,0n,s),this.Y=ze(e,0n,s),this.Z=ze(r,1n,s),this.T=ze(t,0n,s),Object.freeze(this)}static CURVE(){return $F}static fromAffine(A){return new Ve(A.x,A.y,1n,d0(A.x*A.y))}static fromBytes(A,e=!1){let r=Ss,t=oi(Ze(A,pt)),s=A[31];t[31]=s&-129;let n=MF(t);ze(n,0n,e?Js:En);let v=d0(n*n),E=sx(v-1n),u=d0(r*v+1n),{isValid:D,value:m}=qB(E,u);D||$x("bad point: y not sqrt");let _=(m&1n)===1n,h=(s&128)!==0;return!e&&m===0n&&h&&$x("bad point: x==0, isLastByteOdd"),h!==_&&(m=sx(-m)),new Ve(m,n,1n,d0(m*n))}static fromHex(A,e){return Ve.fromBytes(qF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=ws,e=Ss,r=this;if(r.is0())return $x("bad point: ZERO");let{X:t,Y:s,Z:n,T:F}=r,v=d0(t*t),E=d0(s*s),u=d0(n*n),D=d0(u*u),m=d0(v*A),_=d0(u*(m+E)),h=sx(D+d0(e*d0(v*E)));if(_!==h)return $x("bad point: equation left != right (1)");let S=d0(t*s),P=d0(n*F);return S!==P?$x("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:s,Y:n,Z:F}=$s(A),v=d0(e*F),E=d0(s*t),u=d0(r*F),D=d0(n*t);return v===E&&u===D}is0(){return this.equals(Xe)}negate(){return new Ve(sx(-this.X),this.Y,this.Z,sx(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=ws,s=d0(A*A),n=d0(e*e),F=d0(2n*r*r),v=d0(t*s),E=sx(A+e),u=sx(d0(E*E)-s-n),D=sx(v+n),m=sx(D-F),_=sx(v-n),h=d0(u*m),S=d0(D*_),P=d0(u*_),N=d0(m*D);return new Ve(h,S,N,P)}add(A){let{X:e,Y:r,Z:t,T:s}=this,{X:n,Y:F,Z:v,T:E}=$s(A),u=ws,D=Ss,m=d0(e*n),_=d0(r*F),h=d0(d0(s*D)*E),S=d0(t*v),P=sx(d0(sx(e+r)*sx(n+F))-m-_),N=sx(S-h),R=sx(S+h),U=sx(_-d0(u*m)),t0=d0(P*N),M=d0(R*U),k=d0(P*U),L=d0(N*R);return new Ve(t0,M,L,k)}subtract(A){return this.add($s(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(ze(A,1n,fn),!e&&this.is0()))return Xe;if(A===1n)return this;if(this.equals(Tr))return KB(A).p;let r=Xe,t=Tr;for(let s=this;A>0n;s=s.double(),A>>=1n)A&1n?r=r.add(s):e&&(t=t.add(s));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(Xe))return{x:0n,y:1n};let t=wB(r,En);d0(r*t)!==1n&&$x("invalid inverse");let s=d0(A*t),n=d0(e*t);return{x:s,y:n}}toBytes(){let{x:A,y:e}=this.toAffine(),r=TB(e);return r[31]|=A&1n?128:0,r}toHex(){return PF(this.toBytes())}clearCofactor(){return this.multiply(Bn(bB),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(fn/2n,!1).double();return fn%2n&&(A=A.add(this)),A.is0()}};A0(Fi,"BASE");A0(Fi,"ZERO");var yt=Fi,Tr=new yt(nF,sF,1n,sx(nF*sF)),Xe=new yt(0n,1n,1n,0n);yt.BASE=Tr;yt.ZERO=Xe;var TB=x=>qF(TF(ze(x,0n,Js),64)).reverse(),MF=x=>Bn("0x"+PF(oi(Ze(x)).reverse())),JA=(x,A)=>{let e=x;for(;A-- >0n;)e=d0(e*e);return e},PB=x=>{let A=d0(x*x),e=d0(A*x),r=d0(JA(e,2n)*e),t=d0(JA(r,1n)*x),s=d0(JA(t,5n)*t),n=d0(JA(s,10n)*s),F=d0(JA(n,20n)*n),v=d0(JA(F,40n)*F),E=d0(JA(v,80n)*v),u=d0(JA(E,80n)*v),D=d0(JA(u,10n)*s);return{pow_p_5_8:d0(JA(D,2n)*x),b2:e}},oF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,qB=(x,A)=>{let e=d0(A*d0(A*A)),r=d0(d0(e*e)*A),t=PB(d0(x*r)).pow_p_5_8,s=d0(x*d0(e*t)),n=d0(A*d0(s*s)),F=s,v=d0(s*oF),E=n===x,u=n===sx(-x),D=n===sx(-x*oF);return E&&(s=F),(u||D)&&(s=v),(sx(s)&1n)===1n&&(s=sx(-s)),{isValid:E||u,value:s}},NB=x=>_B(MF(x)),IB=(...x)=>Promise.resolve(SB("sha512Async")(IF(...x))).then($B),MB=x=>{let A=oi(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=NB(e),s=Tr.multiply(t),n=s.toBytes();return{head:e,prefix:r,scalar:t,point:s,pointBytes:n}},LB=x=>IB(Ze(x,pt)).then(MB),RB=x=>LB(x).then(A=>A.pointBytes),OB={sha512Async:async x=>{let A=yB(),e=IF(x);return kn(await A.digest("SHA-512",e.buffer))},sha512:void 0},GB=x=>(x=x===void 0?kB(pt):x,Ze(x,pt)),UB=async x=>{let A=GB(x),e=await RB(A);return{secretKey:A,publicKey:e}},Cn=8,HB=256,LF=Math.ceil(HB/Cn)+1,Ks=2**(Cn-1),JB=()=>{let x=[],A=Tr,e=A;for(let r=0;r<LF;r++){e=A,x.push(e);for(let t=1;t<Ks;t++)e=e.add(A),x.push(e);A=e.double()}return x},FF=void 0,vF=(x,A)=>{let e=A.negate();return x?e:A},KB=x=>{let A=FF||(FF=JB()),e=Xe,r=Tr,t=2**Cn,s=t,n=Bn(t-1),F=Bn(Cn);for(let v=0;v<LF;v++){let E=Number(x&n);x>>=F,E>Ks&&(E-=s,x+=1n);let u=v*Ks,D=u,m=u+Math.abs(E)-1,_=v%2!==0,h=E<0;E===0?r=r.add(vF(_,A[D])):e=e.add(vF(h,A[m]))}return x!==0n&&$x("invalid wnaf"),{p:e,f:r}},RF=32,OF=64;async function zs(){let{secretKey:x,publicKey:A}=await UB(),e=new Uint8Array(OF);return e.set(x,0),e.set(A,RF),{publicKey:A,privateKey:e}}function dn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function Vs(x,A="base64 value"){return UF(GF(x,A))}function GF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function vi(x){return dn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function zB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return UF(GF(r,A))}function UF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var bt=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},Ws="/api/1/companion/cert",HF=10080*60*1e3,lF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function JF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=lF?Ws:e+Ws,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};lF&&e&&(t["x-target-host"]=e);let s=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:vi(A.publicKey),subject:A.subject})});if(!s.ok){let F="unknown_error",v=s.statusText||`Cert API request failed (${s.status})`;try{let E=await s.json();E.code&&(F=E.code),E.message&&(v=E.message)}catch{}throw new bt(s.status,F,v)}let n=await s.json();if(!n.certificate||!n.notAfter)throw new bt(s.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function li(x,A=HF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var VB=require("events"),WB=uB(pB(),1),an="[device-master]",zA={debug:(x,...A)=>console.debug(an,x,...A),info:(x,...A)=>console.info(an,x,...A),warn:(x,...A)=>console.warn(an,x,...A),error:(x,...A)=>console.error(an,x,...A)},un={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},XB=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function fi(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^XB[(e^x[r])&255];return(e^-1)>>>0}var Xs=Date.UTC(1999,11,31,0,0,0);function Ys(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),s=e.repeat(t);return A<0?r+s:s+r}function ge(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function Qs(x){if(x instanceof Uint8Array)return x;if(x instanceof ArrayBuffer)return new Uint8Array(x);if(x&&Object.hasOwn(x,"type")&&x.type==="Buffer"&&Object.hasOwn(x,"data")&&x.data instanceof Array)return Uint8Array.from(x.data);if(x.buffer)return new Uint8Array(x.buffer,x.byteOffset,x.byteLength);throw new Error("can not convert value to Uint8Array")}var YB=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),QB=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);function ZB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let s=(r^x[t])&255;r=(e^YB[s])&255,e=QB[s]}return 256*e|r}function xC(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),e=new DataView(A),r=x.substring(8,16),t=x.substring(0,8),s=parseInt(r,16),n=parseInt(t,16);return e.setUint32(0,s,!0),e.setUint32(4,n,!0),e}function AC(x){let A=("0000000"+x.getUint32(4,!0).toString(16)).slice(-8),e=("0000000"+x.getUint32(0,!0).toString(16)).slice(-8),r=`${A}${e}`.toUpperCase();return r.startsWith("0000")||e.startsWith("0000")?null:r}var eC=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],rC=new Map(eC.map((x,A)=>[x,128+A]));function tC(x){return x<=127||x>=160&&x<=255?x:rC.get(x)??63}var Sr="uto_script.dat",ci="uto_fw.dat",KF=(x=>(x[x.RESULT=0]="RESULT",x[x.QUERY=1]="QUERY",x[x.DELETE=2]="DELETE",x[x.DATA=3]="DATA",x[x.UNS_DATA=4]="UNS_DATA",x[x.LIVE_DATA=5]="LIVE_DATA",x[x.FILE_LIST=7]="FILE_LIST",x[x.FILE_RETR=8]="FILE_RETR",x[x.FILE_STOR=9]="FILE_STOR",x[x.FILE_DELE=10]="FILE_DELE",x[x.SET_VALUE=11]="SET_VALUE",x))(KF||{}),zF=(x=>(x[x.OK=0]="OK",x[x.TAG=1]="TAG",x[x.DLEN=2]="DLEN",x[x.DATA=3]="DATA",x[x.STAMP=4]="STAMP",x[x.EOD=5]="EOD",x[x.COMMAND=6]="COMMAND",x[x.COMMAND_DENIED=7]="COMMAND_DENIED",x[x.FULL=8]="FULL",x[x.NOTSUPPORTED=9]="NOTSUPPORTED",x[x.OLDDATA=10]="OLDDATA",x[x.STORAGE=11]="STORAGE",x[x.BUSY=12]="BUSY",x[x.DISC=256]="DISC",x))(zF||{}),Ei=(x=>(x[x.DEVINFO=0]="DEVINFO",x[x.STAMPS=1]="STAMPS",x[x.LIC_QUERY=2]="LIC_QUERY",x[x.FILEMAP=3]="FILEMAP",x[x.MNTCFG=4]="MNTCFG",x[x.MDNCFG=5]="MDNCFG",x[x.CONTEXT=128]="CONTEXT",x[x.ALERTS=4294901767]="ALERTS",x[x.HISTDATA0=26368]="HISTDATA0",x[x.LOG=26375]="LOG",x[x.SYSCFG=26378]="SYSCFG",x[x.STATE=26389]="STATE",x[x.LOCALS=26402]="LOCALS",x[x.POS=26404]="POS",x[x.CTRLAMX=26405]="CTRLAMX",x[x.DYNPOS__=26406]="DYNPOS__",x[x.CONFIG0=26416]="CONFIG0",x[x.CONFIG1=26417]="CONFIG1",x[x.CONFIG2=26418]="CONFIG2",x[x.CONFIG3=26419]="CONFIG3",x[x.CONFIG4=26420]="CONFIG4",x[x.CONFIG5=26421]="CONFIG5",x[x.CONFIG6=26422]="CONFIG6",x[x.CONFIG7=26423]="CONFIG7",x[x.CONFIG8=26424]="CONFIG8",x[x.CONFIG9=26425]="CONFIG9",x[x.SYSOTP=26432]="SYSOTP",x[x.SYSFLASH=26433]="SYSFLASH",x[x.APPOTP=26434]="APPOTP",x[x.APPFLASH=26435]="APPFLASH",x[x.APPSTATE=26436]="APPSTATE",x[x.SYSINFO=26437]="SYSINFO",x[x.APPINFO=26438]="APPINFO",x[x.SYSSTATE=26439]="SYSSTATE",x[x.HISTDATA1=26528]="HISTDATA1",x[x.HISTDATA2=26529]="HISTDATA2",x[x.HISTDATA3=26530]="HISTDATA3",x[x.HISTDATA4=26531]="HISTDATA4",x[x.HISTDATA5=26532]="HISTDATA5",x[x.HISTDATA6=26533]="HISTDATA6",x[x.HISTDATA7=26534]="HISTDATA7",x[x.HISTDATA8=26535]="HISTDATA8",x[x.HISTDATA9=26536]="HISTDATA9",x[x.HISTDATA_RAW=26623]="HISTDATA_RAW",x[x.CONFIGA=4294928218]="CONFIGA",x[x.CONFIGB=4294928219]="CONFIGB",x[x.CONFIGC=4294928220]="CONFIGC",x))(Ei||{}),VF=(x=>(x[x.HISTDATA0=0]="HISTDATA0",x[x.HISTDATA1=1]="HISTDATA1",x[x.HISTDATA2=2]="HISTDATA2",x[x.HISTDATA3=3]="HISTDATA3",x[x.HISTDATA4=4]="HISTDATA4",x[x.HISTDATA5=5]="HISTDATA5",x[x.HISTDATA6=6]="HISTDATA6",x[x.HISTDATA7=7]="HISTDATA7",x[x.HISTDATA8=8]="HISTDATA8",x[x.HISTDATA9=9]="HISTDATA9",x[x.ALERTS=32]="ALERTS",x[x.APPLOG=40]="APPLOG",x))(VF||{}),WF=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(WF||{}),XF=(x=>(x[x.HISTORIC=1]="HISTORIC",x[x.UP=2]="UP",x[x.DOWN=4]="DOWN",x[x.DLEN_VAR=8]="DLEN_VAR",x[x.SET_VALUE=16]="SET_VALUE",x))(XF||{}),YF=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(YF||{}),QF=(x=>(x[x.CRC_STAMP=1]="CRC_STAMP",x[x.FORCE_DNLD=2]="FORCE_DNLD",x[x.FORCE_UPLD=4]="FORCE_UPLD",x[x.DEL=8]="DEL",x[x.CREATOR=16]="CREATOR",x[x.SYNCONLYDOWN=33]="SYNCONLYDOWN",x[x.SYNCONLYUP=65]="SYNCONLYUP",x[x.STAMP_ONLY=97]="STAMP_ONLY",x[x.TAKEFROMTPL=128]="TAKEFROMTPL",x[x.EXISTSONDEV=256]="EXISTSONDEV",x))(QF||{}),ZF=97;function Dn(x){return x&ZF}var x8=(x=>(x[x.KEEPALIVE=1]="KEEPALIVE",x[x.NEWDATA=2]="NEWDATA",x[x.DISC=3]="DISC",x[x.LIVE_ON=4]="LIVE_ON",x[x.LIVE_OFF=5]="LIVE_OFF",x[x.NO_GPRS=6]="NO_GPRS",x[x.ZLIB=7]="ZLIB",x[x.WAKEUP=8]="WAKEUP",x[x.SECURITY=9]="SECURITY",x[x.CAP_00=192]="CAP_00",x[x.CAP_01=193]="CAP_01",x[x.CAP_02=194]="CAP_02",x[x.CAP_03=195]="CAP_03",x[x.CAP_04=196]="CAP_04",x[x.CAP_05=197]="CAP_05",x[x.CAP_06=198]="CAP_06",x[x.CAP_07=199]="CAP_07",x[x.CAP_08=200]="CAP_08",x[x.CAP_09=201]="CAP_09",x[x.CAP_0a=202]="CAP_0a",x[x.CAP_0b=203]="CAP_0b",x[x.CAP_0c=204]="CAP_0c",x[x.CAP_0d=205]="CAP_0d",x[x.CAP_0e=206]="CAP_0e",x[x.CAP_0f=207]="CAP_0f",x))(x8||{}),A8=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(A8||{}),fF={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},nC=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+ge(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+ge(x,2)}tagToString(x){x|=0;let A=Object.entries(Ei).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+ge(x,4)}containerIdToTag(x,A){let e=fF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(fF).find(([,e])=>e===x.wTag);if(A)return A[0];if(x.wTag===26623){if(!x.data||!x.data.byteLength)return null;let e=x.data.getUint8(0);return e===32?"alerts":e>=0&&e<=9?`histdata${e}`:null}return null}formatSerialNumber(x,A="-"){return x?x.substr(0,4)+A+x.substr(4,4)+A+x.substr(8,4)+A+x.substr(12):"(none)"}decodeUplinkState(x){let A={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},e=!!(x&A.WAKEUPABLE),r=[];x&A.POSUPDATE_ACTIVE?r=["locating",!1]:x&A.RETRY?r=["retry",!1]:x&A.STARTED?r=["dialing",!1]:x&A.ACTIVE?r=["active",!1]:x&A.FAILED?r=["failed",e]:x&A.DISABLED?r=["disabled",!1]:r=["offline",e];let t=A.WAKEUPABLE|A.RETRY|A.STARTED|A.ACTIVE|A.POSUPDATE_ACTIVE|A.FAILED|A.DISABLED|A.EXTSIM;return{signal:r[0],wakeupAble:r[1],path:x&A.EXTSIM?"xsim ":"isim ",txStateUnknown:x&~t}}stamp40ToMS(x){let A=Math.trunc(x/256),e=x&255;return Math.round(A*1e3+1e3*e/256)+Xs}msToStamp40(x){let A=(x-Xs)/1e3,e=Math.trunc(A),r=Math.round((A-e)*256);return e*256+r}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&x.getUint8(A+t);)t++;let s=new Uint8Array(x.buffer,A,t);return r.decode(s)}ansiUnpack(x,A,e,r){try{let t=Qs(x),s=new TextDecoder(r),n=0;for(;n<e&&t[A+n];)n++;return s.decode(t.slice(A,A+n))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(x,A,e){return this.ansiUnpack(x,A,e,"cp1252")}ansiPack(x,A,e,r){let t=Qs(x);t.fill(0,A,A+e);for(let s=0;s<e&&s<r.length;s++)t[A+s]=tC(r.charCodeAt(s))}cp1252Pack(x,A,e,r){return this.ansiPack(x,A,e,r)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(0),r=A.getUint16(2),t=A.getUint16(4),s=A.getUint32(6),n=(ge(s,8)+ge(x.dwDevSN,8)).toUpperCase(),F=[];for(let v=0;v<(A.byteLength-10)/5;v++){let E=A.getUint8(10+v*5+2),u=A.getUint16(10+v*5);F.push({wTag:u,sTag:this.tagToString(u),size:A.getUint16(10+v*5+3),flags:{historic:!!(E&1),single:!(E&1),up:!!(E&2),down:!!(E&4),variableLength:!!(E&8),setValue:!!(E&16)}})}return{serialNumber:n,class:ge(e,4),firmwareVersion:`${Ys(t>>8,2)}v${Ys(t&255,3,"0")}`,flags:ge(r,4),utos:F}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,e={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(A.byteLength-8)/5;r++)e.stamps.push(A.getUint32(8+r*5+0)*256+A.getUint8(8+r*5+4));return e}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),e=new DataView(A.buffer);return e.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(e,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(13,!1),r={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(x){if(x.flags){let r=0;x.flags.extra&&(r|=x.flags.extra|0),x.flags.read&&(r|=1),x.flags.write&&(r|=2),x.flags.node&&(r|=4),x.flags.system&&(r|=8),x._flags=r}let A=new Uint8Array(15+x.name.length+1),e=new DataView(A.buffer);return e.setUint32(0,Math.trunc(x.stamp/256),!1),e.setUint8(4,x.stamp&255),e.setUint32(5,x.size,!1),e.setUint32(9,x.crc32,!1),e.setUint16(13,x._flags,!1),this.cp1252Pack(e,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},H0=new nC,kt={nowMs:()=>Date.now()},Bi=class{constructor(x="(unnamed)"){A0(this,"name"),A0(this,"_locked"),A0(this,"_chain"),this.name=x,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(x=>{this._chain.push(x)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(x){await this.requestLock();try{return await x()}finally{this.unlock()}}},cF=new WeakMap;function e8(x,A){let r=(cF.get(x)??Promise.resolve()).then(()=>sC(x,A));return cF.set(x,r.catch(()=>{})),r}async function sC(x,A){x.interface&&x.interface==="ble"?await iC(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function iC(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let s=0;s<r.byteLength;s+=t){let n=r.slice(s,s+t);await x(n.buffer)}}var EF=15e3,aC=500,oC=3,FC=1024;function BF(x){return x?.utos.find(e=>e.wTag===3)?.size||FC}var r8=class cn extends VB.EventEmitter{constructor(A,e,r=kt){super(),A0(this,"mdnComInterface"),A0(this,"receiveUto"),A0(this,"sendUto"),A0(this,"rxUto"),A0(this,"txStream"),A0(this,"SendUtoCmdExt"),A0(this,"utoPortLock"),A0(this,"transport"),A0(this,"logger"),A0(this,"ecsHandshakeResolver",null),A0(this,"disposeTransportListener",null),A0(this,"encrypted",!1),A0(this,"lastTxWrite",Promise.resolve()),A0(this,"timeSource"),A0(this,"fileChunkSize",BF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new Bi("UTO-Port"),this.transport=A,this.logger=e??zA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,WB.default)({print:s=>{this.logger.info(`[mdnCom] ${s}`),this.emit("mdnCom",s)},printErr:s=>{this.logger.error(`[mdnCom] ${s}`),this.emit("mdnComError",s)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let s=this.txStream();this.lastTxWrite=e8(this.transport,s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let s=this.rxUto(),n=this.parseUtoFrame(s);this.emit("utoFrame",n)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(s=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${s} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({success:s===0,resultCode:s})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async s=>{this.receiveUto&&await this.receiveUto(new Uint8Array(s))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:H0.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((s,n,F)=>{if(s.bCmd===0){let v=this.resultVerdict(s);v===5||v===0||v===4?n(null):F(s);return}if(s.wTagFull!==A)return F(s);n(s)},async()=>{this.sendUto(A,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:e,disc:r}=cn.resultCode(A);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),e}static concatChunks(A){let e=A.reduce((s,n)=>s+n.length,0),r=new Uint8Array(e),t=0;for(let s of A)r.set(s,t),t+=s.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??aC,s=r?.maxRetries??oC;return new Promise((n,F)=>{let v=0,E=!1,u=()=>{},D,m={resolve:h=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),n(h)},reject:h=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),F(h)}},_=async()=>{u=h=>A(h,m.resolve,m.reject),this.once("utoFrame",u);try{await e()}catch(h){if(E)return;this.removeListener("utoFrame",u),F(h);return}E||(D=setTimeout(()=>{if(this.removeListener("utoFrame",u),v>=s){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${s} retries`));return}v++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${v}/${s})`),_()},t))};_()})}createFrameIdleGuard(A,e,r){let t,s=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{s(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:s}}async requestHistoricUtos(A,e,r,t=EF,s=0,n){return await this.utoPortLock.requestLock(),new Promise((F,v)=>{if(!this.sendUto)return F([]);let E=[],u=0,D=Promise.resolve(),m=P=>{if(_.arm(),P.bCmd===0){_.clear(),this.settleHistoricTransfer(P,E,n,D,F,v);return}if(P.wTagFull===A&&P.data&&(E.push({stamp40:P.stamp,data:this.copyDataView(P.data)}),r?.(++u),n&&s>0&&E.length>=s)){let N=E.splice(0);D=D.then(()=>n(N))}this.once("utoFrame",m)},_=this.createFrameIdleGuard(m,t,()=>v(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${u} records received)`)));this.once("utoFrame",m),_.arm();let h=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:h,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,s,n){let F=this.resultVerdict(A);if(!(F===5||F===0||F===4)){t.then(()=>n(A)).catch(n);return}let E=r&&e.length>0?e.splice(0):null;(E?t.then(()=>r(E)):t).then(()=>s(r?[]:e)).catch(n)}async requestFile(A,e,r=EF){return await this.utoPortLock.requestLock(),new Promise((t,s)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,v=D=>{if(E.arm(),D.bCmd===0){E.clear();let m=this.resultVerdict(D);m===5||m===0?t(cn.concatChunks(n)):s(D);return}if(D.bCmd===3&&D.data){let m=this.copyDataView(D.data);n.push(m),F+=m.byteLength,e?.(F)}this.once("utoFrame",v)},E=this.createFrameIdleGuard(v,r,()=>s(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${F} bytes received)`)));this.once("utoFrame",v),E.arm();let u=new Uint8Array(A.length+1);for(let D=0;D<A.length;D++)u[D]=A.charCodeAt(D)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},u)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let e=new Uint8Array(A.length+1);for(let r=0;r<A.length;r++)e[r]=A.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(A,e,r){this.isInitialized();let t=new Uint8Array(e.length);H0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(s){let n=s;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=cn.resultCode(n),v=n.wTagFull;return F===4?{outcome:"stamp",resultCode:v}:F===7||F===9?{outcome:"denied",resultCode:v}:{outcome:"error",resultCode:v}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${s}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?H0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=BF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?H0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,H0.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},s=n=>this.handleFileListFrame(n,t,A,e,r,s);this.once("utoFrame",s),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,s,n){if(A.bCmd===0){let F=this.resultVerdict(A);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):s(A);return}try{let F=H0.decode_FILEMAP(A);e[F.name]=F}catch(F){s(F);return}this.once("utoFrame",n)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?H0.decode_STAMPS(A):null}async sendFile(A,e,r,t){let s=e;A===2&&(s=new Uint8Array(e.length+1),s.set(new Uint8Array(e),1),s[0]=A);let n={name:t??Sr,stamp:r===0?0:H0.msToStamp40(r??this.timeSource.nowMs()),size:s.length,_flags:11,crc32:fi(s)},F=H0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let E=this.fileChunkSize;for(let u=0;u<s.length;u+=E){let D=Math.min(E,s.byteLength-u),m=new Uint8Array(s.buffer,s.byteOffset+u,D);await this.sendUTOCmdExt(3,3,m,u*256);let h=(u+D)/s.byteLength*100;this.emit("installing",h.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let s=t??this.utoStampNow40,n=Math.trunc(s/256),F=s&255;return await this.sendWithRetry((v,E,u)=>{if(v.bCmd!==0){u(v);return}this.resultVerdict(v)===0?E(null):u(v)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:n,u8SysTime:F},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,e,r){return this.sendUTOCmdExt(3,A,e,r)}packOtpFlashString(A){let e=new Uint8Array(1024);return H0.cp1252Pack(e,0,1024,A),e}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let e=A.companionPublicKey.slice(0,32),r=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((s,n)=>{if(A.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};A.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=E=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(E)}`),A.signal?.removeEventListener("abort",F),E.success&&(this.encrypted=!0),s(E)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let v=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${v} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),v<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",F),s({success:!1,resultCode:v})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},vC=require("events"),t8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(t8||{}),lC=5e3,fC=5e3,cC=class extends vC.EventEmitter{constructor(x,A){super(),A0(this,"atHandler"),A0(this,"debugCache",null),A0(this,"logger"),A0(this,"dataHandler"),this.atHandler=x,this.logger=A??zA,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[e,r,,t]=A.split(" "),s={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(s.level=this.logLevelFromPrefix(F)),s.message=n,this.emitMessageEvent(s)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:e,f11:r},t){for(let s of t){s==="\xFF"&&(s="%");let n=String.fromCharCode(...r.map(F=>F.tag));if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:s,start:Date.now()})}else if(s===""){switch(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+s;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:s,start:Date.now()})}else if(r.length){let F=r[r.length-1];if(F.tag===16&&s==="\r")continue;F.buf+=s,F.tag===16&&s===`
2193
2193
  `&&r.pop()}else{if(x||(A=Date.now()),s==="\r"||(x+=s,!(Date.now()>A+fC||s===`
2194
2194
  `)))continue;x.slice(0,-1).split(`
2195
- `).forEach(f=>{this.onConsole(f)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+vC&&r.splice(F,1)}}isHex(x){return/^[a-fA-F0-9]*$/.test(x)}onConsole(x){if(!(x[0]===""&&x[1]==="#"&&x.length<10)){if(x[0]===""&&x[1]==="."&&x.length<10050){let[A,e]=x.substr(2).split("=");if(A.length>1&&A.length<50){["~~","~h","~g","~i","~r","~s"].includes(A)||(this.emit("#watch",{key:A,value:e,date:new Date}),this.logger.debug(`#watch ${A} = ${e}`));return}}this.formatConsoleLine(x)}}process_x01(x,A){if(x.length<11)return;let e=x.substr(1,4);if(!this.isHex(e))return;let r=x.substr(-5,4);if(!this.isHex(r))return;let t=parseInt(e,16),s=parseInt(r,16),n=65535&(A<0?0:t-A),F=65535&s-t-x.length;if(n&&this.onConsole(`?console - x01 ${n} characters lost`),A=s,F){this.onConsole(`?console - x01 ${F} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function JA(x){return parseInt(x.slice(6),16)}function lA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function r8(x){return x?new Uint8Array(x):null}function an(x){return{...x,data:r8(x.data)}}function ws(x){return{...x,data:r8(x.data)}}var cC=/^400000[0-9A-F]{10}$/;function EF(x,A){if(!cC.test(A))throw new Error(`MemoryStorage: uto_data row for tag ${x} has non-canonical stamp "${A}"; expected 16-char uppercase hex output of stamp40ToDbHex ("400000" + 10 hex digits)`)}var EC=class t8{constructor(){A0(this,"metadata",new Map),A0(this,"utoData",new Map),A0(this,"changeRequests",[]),A0(this,"files",new Map)}async getMetadataValue(A){return this.metadata.get(A)??null}async setMetadataValue(A,e){this.metadata.set(A,e)}async deleteMetadataValue(A){this.metadata.delete(A)}async getUtoDataTags(){return[...this.utoData.keys()]}async getLatestStampForTag(A){let e=this.utoData.get(A);return!e||e.size===0?null:[...e.keys()].sort().at(-1)}async getRowForTag(A){let e=await this.getLatestStampForTag(A);return e===null?null:an(this.utoData.get(A).get(e))}async replaceUtoRow(A){EF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,an(A)]]))}async insertHistoricRows(A){for(let e of A){EF(e.tag,e.stamp);let r=this.utoData.get(e.tag);r||(r=new Map,this.utoData.set(e.tag,r)),r.has(e.stamp)||r.set(e.stamp,an(e))}}async getHistoricRows(A,e){let r=this.utoData.get(A);if(!r)return[];let t=[...r.values()];if(e.fromStamp!==void 0){let n=e.fromStamp;t=t.filter(F=>F.stamp>=n)}if(e.untilStamp!==void 0){let n=e.untilStamp;t=t.filter(F=>F.stamp<=n)}t.sort((n,F)=>e.order==="desc"?F.stamp.localeCompare(n.stamp):n.stamp.localeCompare(F.stamp));let s=e.offset??0;return t.slice(s,s+e.limit).map(an)}async getUtoChangeRequests(){return[...this.changeRequests].sort((A,e)=>A.tag-e.tag||A.stamp.localeCompare(e.stamp)).map(A=>({...A}))}async insertUtoChangeRequests(A){for(let e of A)this.changeRequests.push({tag:e.tag,stamp:lA(e.stamp40),user:e.user??"",json:e.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(ws)}async getFile(A){let e=this.files.get(A);return e?ws(e):null}async upsertFile(A){this.files.set(A.filename,ws(A))}async deleteFile(A){this.files.delete(A)}toJSON(){let A=[];for(let e of this.utoData.values())for(let r of e.values())A.push({tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?Cn(r.data):null});return{metadata:Object.fromEntries(this.metadata),utoData:A,changeRequests:this.changeRequests.map(e=>({...e})),files:[...this.files.values()].map(e=>({filename:e.filename,stamp:e.stamp,crc:e.crc,size:e.size,flags:e.flags,flags_int:e.flags_int,data:e.data?Cn(e.data):null}))}}static fromJSON(A){let e=new t8;for(let[r,t]of Object.entries(A.metadata??{}))e.metadata.set(r,t);for(let r of A.utoData??[]){let t=e.utoData.get(r.tag);t||(t=new Map,e.utoData.set(r.tag,t)),t.set(r.stamp,{tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?Js(r.data,`uto_data.data of tag ${r.tag}`):null})}e.changeRequests=(A.changeRequests??[]).map(r=>({...r}));for(let r of A.files??[])e.files.set(r.filename,{filename:r.filename,stamp:r.stamp,crc:r.crc,size:r.size,flags:r.flags,flags_int:r.flags_int,data:r.data?Js(r.data,`files.data of "${r.filename}"`):null});return e}},BC=new Set(["link","unknown"]);function bt(x){return BC.has(x)}var n8=-2;function ve(x){return x.index===n8}var CC=65535,BF={configa:4294928218,configb:4294928219,configc:4294928220};function ci(x){let A=x.toLowerCase();if(A==="histdata"||A==="histdata0")return"histdata0";let e=/^rm2mconfig([0-9a-c])$/.exec(A);return e?`config${e[1]}`:x}function Dn(x){let A=ci(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(BF,A)?BF[A]:H0.containerIdToTag(A,!1)}function ut(x){return Dn(x.name)}function dC(x,A){let e=x.byNameOrAlias(A);return Dn(e?e.name:A)}function s8(x){return Number.isInteger(x)&&x>=0&&x<=CC}var uC={u8:"u8",s8:"s8",u16:"u16",s16:"s16",u32:"u32",s32:"s32",s64:"s64",f32:"f32",f64:"f64",floatm16:"floatm16",stamp4:"stamp4",stamp:"stamp",stamp8:"stamp8",datetime:"datetime",ufm8:"ufm8",link:"link",string:"string",float:"f32",float32:"f32",float64:"f64",char:"string",bint:"s8",wint:"s16",dint:"s32",qint:"s64",byte:"u8",word:"u16",dword:"u32",time_span:"s64"};function DC(x){return x===void 0?"unknown":uC[x.toLowerCase()]??"unknown"}var pC={u8:1,s8:1,u16:2,s16:2,floatm16:2,u32:4,s32:4,f32:4,stamp4:4,stamp:5,stamp8:8,datetime:8,ufm8:1,link:0,unknown:0,s64:8,f64:8},bC=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),Ei="name",mC="type";function jC(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function hC(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function Ve(x,A){let e=x.get(A);if(e===void 0)return;let r=parseInt(e,10);return Number.isNaN(r)?void 0:r}function gC(x){let A=x.get("bitmask");if(A===void 0)return;let e=A.startsWith("$")?A.slice(1):A,r=parseInt(e,16);return Number.isNaN(r)?void 0:r}var yC=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function i8(x){let A=yC.exec(x);if(!A)return{};let e=A[1],r=e===""?NaN:Number(e);return{ref:{container:A[2],field:A[3]},prefixValue:Number.isFinite(r)?r:void 0}}function kC(x){let A=x.get("vscale");if(A===void 0)return{value:1};let e=i8(A);if(e.ref)return{value:e.prefixValue??1,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:1}}function _C(x){let A=x.get("vofs");if(A===void 0)return{value:0};let e=i8(A);if(e.ref)return{value:e.prefixValue??0,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:0}}function wC(x,A){return x==="string"?A??0:pC[x]}function SC(x){let A={};for(let[e,r]of x)bC.has(e)||(A[e]=r);return A}function $C(x,A,e){let r=DC(x.get(mC)),t=Ve(x,"max"),s=wC(r,t),n=A.fields[A.fields.length-1],f=Ve(x,"byteofs")??(n?n.byteofs+n.size:A.kind==="histdata"?1:0),E=A.fields.length,u=x.get(Ei)??(A.kind==="histdata"?`ch${E}`:`field${E}`),D=kC(x),m=_C(x),_=Ve(x,"index");return{name:u,alias:x.get("alias"),title:x.get("title"),index:_,sortIndex:_??e,byteofs:f,type:r,size:s,max:t,decpl:Ve(x,"decpl"),vscale:D.value,vofs:m.value,vscaleRef:D.ref,vofsRef:m.ref,units:x.get("units"),editmask:x.get("editmask"),view:Ve(x,"view"),edit:Ve(x,"edit"),default:x.get("default"),bitmask:gC(x),attrs:SC(x)}}function TC(){return{name:"",kind:"other",fields:[],recordSize:0}}function PC(x,A,e){switch(A){case Ei:{let r=ci(e);x.name=r,x.kind=hC(r);break}case"alias":x.alias=e;break;case"title":x.title=e;break;case"upload":x.upload=parseInt(e,10);break;case"download":x.download=parseInt(e,10);break;case"edit":x.edit=parseInt(e,10);break;default:break}}function qC(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!bt(A.type)).reduce((A,e)=>Math.max(A,e.byteofs+e.size),0),x.fields.sort((A,e)=>A.sortIndex-e.sortIndex)}function NC(x){if(x==="*")return{keyBytes:[],matchAll:!0};let A=x.slice(0,2).toLowerCase()==="0x"?x.slice(2):x;A.length%2!==0&&(A=`0${A}`);let e=[];for(let r=0;r<A.length;r+=2){let t=parseInt(A.slice(r,r+2),16);e.push(Number.isNaN(t)?0:t)}return{keyBytes:e,matchAll:!1}}function MC(x){return x.toLowerCase()==="histdata28"?"applog0":ci(x)}function IC(x){let{keyBytes:A,matchAll:e}=NC(x.get("key")??"00");return{source:x.get("source")??"",target:MC(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:Ve(x,"keepraw")}}function LC(x,A){return{containers:x,splits:A,byNameOrAlias(e){let r=e.toLowerCase();return x.find(t=>t.name.toLowerCase()===r||(t.alias??"").toLowerCase()===r)??null}}}function RC(x,A){switch(A){case"<table>":return x.container=TC(),x.expectName=!0,!0;case"</table>":return x.container&&(qC(x.container),x.containers.push(x.container)),x.container=null,!0;case"<field>":return x.field=new Map,!0;case"</field>":return x.container&&x.field&&x.container.fields.push($C(x.field,x.container,x.line)),x.field=null,!0;case"<split>":return x.split=new Map,!0;case"</split>":return x.split&&x.splits.push(IC(x.split)),x.split=null,!0;default:return!1}}function OC(x,A){let{key:e,value:r}=jC(A);if(x.split)x.split.set(e,r);else if(x.field)x.field.set(e,r);else if(x.container){if(x.expectName&&e!==Ei)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,PC(x.container,e,r)}}function GC(x){let A={containers:[],splits:[],container:null,field:null,split:null,expectName:!1,line:0};for(let[e,r]of x.replace(/\r\n/g,`
2195
+ `).forEach(v=>{this.onConsole(v)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+lC&&r.splice(F,1)}}isHex(x){return/^[a-fA-F0-9]*$/.test(x)}onConsole(x){if(!(x[0]===""&&x[1]==="#"&&x.length<10)){if(x[0]===""&&x[1]==="."&&x.length<10050){let[A,e]=x.substr(2).split("=");if(A.length>1&&A.length<50){["~~","~h","~g","~i","~r","~s"].includes(A)||(this.emit("#watch",{key:A,value:e,date:new Date}),this.logger.debug(`#watch ${A} = ${e}`));return}}this.formatConsoleLine(x)}}process_x01(x,A){if(x.length<11)return;let e=x.substr(1,4);if(!this.isHex(e))return;let r=x.substr(-5,4);if(!this.isHex(r))return;let t=parseInt(e,16),s=parseInt(r,16),n=65535&(A<0?0:t-A),F=65535&s-t-x.length;if(n&&this.onConsole(`?console - x01 ${n} characters lost`),A=s,F){this.onConsole(`?console - x01 ${F} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function KA(x){return parseInt(x.slice(6),16)}function cA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function n8(x){return x?new Uint8Array(x):null}function on(x){return{...x,data:n8(x.data)}}function Ts(x){return{...x,data:n8(x.data)}}var EC=/^400000[0-9A-F]{10}$/;function CF(x,A){if(!EC.test(A))throw new Error(`MemoryStorage: uto_data row for tag ${x} has non-canonical stamp "${A}"; expected 16-char uppercase hex output of stamp40ToDbHex ("400000" + 10 hex digits)`)}var BC=class s8{constructor(){A0(this,"metadata",new Map),A0(this,"utoData",new Map),A0(this,"changeRequests",[]),A0(this,"files",new Map)}async getMetadataValue(A){return this.metadata.get(A)??null}async setMetadataValue(A,e){this.metadata.set(A,e)}async deleteMetadataValue(A){this.metadata.delete(A)}async getUtoDataTags(){return[...this.utoData.keys()]}async getLatestStampForTag(A){let e=this.utoData.get(A);return!e||e.size===0?null:[...e.keys()].sort().at(-1)}async getRowForTag(A){let e=await this.getLatestStampForTag(A);return e===null?null:on(this.utoData.get(A).get(e))}async replaceUtoRow(A){CF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,on(A)]]))}async insertHistoricRows(A){for(let e of A){CF(e.tag,e.stamp);let r=this.utoData.get(e.tag);r||(r=new Map,this.utoData.set(e.tag,r)),r.has(e.stamp)||r.set(e.stamp,on(e))}}async getHistoricRows(A,e){let r=this.utoData.get(A);if(!r)return[];let t=[...r.values()];if(e.fromStamp!==void 0){let n=e.fromStamp;t=t.filter(F=>F.stamp>=n)}if(e.untilStamp!==void 0){let n=e.untilStamp;t=t.filter(F=>F.stamp<=n)}t.sort((n,F)=>e.order==="desc"?F.stamp.localeCompare(n.stamp):n.stamp.localeCompare(F.stamp));let s=e.offset??0;return t.slice(s,s+e.limit).map(on)}async getUtoChangeRequests(){return[...this.changeRequests].sort((A,e)=>A.tag-e.tag||A.stamp.localeCompare(e.stamp)).map(A=>({...A}))}async insertUtoChangeRequests(A){for(let e of A)this.changeRequests.push({tag:e.tag,stamp:cA(e.stamp40),user:e.user??"",json:e.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(Ts)}async getFile(A){let e=this.files.get(A);return e?Ts(e):null}async upsertFile(A){this.files.set(A.filename,Ts(A))}async deleteFile(A){this.files.delete(A)}toJSON(){let A=[];for(let e of this.utoData.values())for(let r of e.values())A.push({tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?dn(r.data):null});return{metadata:Object.fromEntries(this.metadata),utoData:A,changeRequests:this.changeRequests.map(e=>({...e})),files:[...this.files.values()].map(e=>({filename:e.filename,stamp:e.stamp,crc:e.crc,size:e.size,flags:e.flags,flags_int:e.flags_int,data:e.data?dn(e.data):null}))}}static fromJSON(A){let e=new s8;for(let[r,t]of Object.entries(A.metadata??{}))e.metadata.set(r,t);for(let r of A.utoData??[]){let t=e.utoData.get(r.tag);t||(t=new Map,e.utoData.set(r.tag,t)),t.set(r.stamp,{tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?Vs(r.data,`uto_data.data of tag ${r.tag}`):null})}e.changeRequests=(A.changeRequests??[]).map(r=>({...r}));for(let r of A.files??[])e.files.set(r.filename,{filename:r.filename,stamp:r.stamp,crc:r.crc,size:r.size,flags:r.flags,flags_int:r.flags_int,data:r.data?Vs(r.data,`files.data of "${r.filename}"`):null});return e}},CC=new Set(["link","unknown"]);function mt(x){return CC.has(x)}var i8=-2;function le(x){return x.index===i8}var dC=65535,dF={configa:4294928218,configb:4294928219,configc:4294928220};function Ci(x){let A=x.toLowerCase();if(A==="histdata"||A==="histdata0")return"histdata0";let e=/^rm2mconfig([0-9a-c])$/.exec(A);return e?`config${e[1]}`:x}function pn(x){let A=Ci(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(dF,A)?dF[A]:H0.containerIdToTag(A,!1)}function Dt(x){return pn(x.name)}function uC(x,A){let e=x.byNameOrAlias(A);return pn(e?e.name:A)}function a8(x){return Number.isInteger(x)&&x>=0&&x<=dC}var DC={u8:"u8",s8:"s8",u16:"u16",s16:"s16",u32:"u32",s32:"s32",s64:"s64",f32:"f32",f64:"f64",floatm16:"floatm16",stamp4:"stamp4",stamp:"stamp",stamp8:"stamp8",datetime:"datetime",ufm8:"ufm8",link:"link",string:"string",float:"f32",float32:"f32",float64:"f64",char:"string",bint:"s8",wint:"s16",dint:"s32",qint:"s64",byte:"u8",word:"u16",dword:"u32",time_span:"s64"};function pC(x){return x===void 0?"unknown":DC[x.toLowerCase()]??"unknown"}var bC={u8:1,s8:1,u16:2,s16:2,floatm16:2,u32:4,s32:4,f32:4,stamp4:4,stamp:5,stamp8:8,datetime:8,ufm8:1,link:0,unknown:0,s64:8,f64:8},mC=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),di="name",jC="type";function hC(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function gC(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function We(x,A){let e=x.get(A);if(e===void 0)return;let r=parseInt(e,10);return Number.isNaN(r)?void 0:r}function yC(x){let A=x.get("bitmask");if(A===void 0)return;let e=A.startsWith("$")?A.slice(1):A,r=parseInt(e,16);return Number.isNaN(r)?void 0:r}var kC=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function o8(x){let A=kC.exec(x);if(!A)return{};let e=A[1],r=e===""?NaN:Number(e);return{ref:{container:A[2],field:A[3]},prefixValue:Number.isFinite(r)?r:void 0}}function _C(x){let A=x.get("vscale");if(A===void 0)return{value:1};let e=o8(A);if(e.ref)return{value:e.prefixValue??1,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:1}}function wC(x){let A=x.get("vofs");if(A===void 0)return{value:0};let e=o8(A);if(e.ref)return{value:e.prefixValue??0,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:0}}function SC(x,A){return x==="string"?A??0:bC[x]}function $C(x){let A={};for(let[e,r]of x)mC.has(e)||(A[e]=r);return A}function TC(x,A,e){let r=pC(x.get(jC)),t=We(x,"max"),s=SC(r,t),n=A.fields[A.fields.length-1],v=We(x,"byteofs")??(n?n.byteofs+n.size:A.kind==="histdata"?1:0),E=A.fields.length,u=x.get(di)??(A.kind==="histdata"?`ch${E}`:`field${E}`),D=_C(x),m=wC(x),_=We(x,"index");return{name:u,alias:x.get("alias"),title:x.get("title"),index:_,sortIndex:_??e,byteofs:v,type:r,size:s,max:t,decpl:We(x,"decpl"),vscale:D.value,vofs:m.value,vscaleRef:D.ref,vofsRef:m.ref,units:x.get("units"),editmask:x.get("editmask"),view:We(x,"view"),edit:We(x,"edit"),default:x.get("default"),bitmask:yC(x),attrs:$C(x)}}function PC(){return{name:"",kind:"other",fields:[],recordSize:0}}function qC(x,A,e){switch(A){case di:{let r=Ci(e);x.name=r,x.kind=gC(r);break}case"alias":x.alias=e;break;case"title":x.title=e;break;case"upload":x.upload=parseInt(e,10);break;case"download":x.download=parseInt(e,10);break;case"edit":x.edit=parseInt(e,10);break;default:break}}function NC(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!mt(A.type)).reduce((A,e)=>Math.max(A,e.byteofs+e.size),0),x.fields.sort((A,e)=>A.sortIndex-e.sortIndex)}function IC(x){if(x==="*")return{keyBytes:[],matchAll:!0};let A=x.slice(0,2).toLowerCase()==="0x"?x.slice(2):x;A.length%2!==0&&(A=`0${A}`);let e=[];for(let r=0;r<A.length;r+=2){let t=parseInt(A.slice(r,r+2),16);e.push(Number.isNaN(t)?0:t)}return{keyBytes:e,matchAll:!1}}function MC(x){return x.toLowerCase()==="histdata28"?"applog0":Ci(x)}function LC(x){let{keyBytes:A,matchAll:e}=IC(x.get("key")??"00");return{source:x.get("source")??"",target:MC(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:We(x,"keepraw")}}function RC(x,A){return{containers:x,splits:A,byNameOrAlias(e){let r=e.toLowerCase();return x.find(t=>t.name.toLowerCase()===r||(t.alias??"").toLowerCase()===r)??null}}}function OC(x,A){switch(A){case"<table>":return x.container=PC(),x.expectName=!0,!0;case"</table>":return x.container&&(NC(x.container),x.containers.push(x.container)),x.container=null,!0;case"<field>":return x.field=new Map,!0;case"</field>":return x.container&&x.field&&x.container.fields.push(TC(x.field,x.container,x.line)),x.field=null,!0;case"<split>":return x.split=new Map,!0;case"</split>":return x.split&&x.splits.push(LC(x.split)),x.split=null,!0;default:return!1}}function GC(x,A){let{key:e,value:r}=hC(A);if(x.split)x.split.set(e,r);else if(x.field)x.field.set(e,r);else if(x.container){if(x.expectName&&e!==di)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,qC(x.container,e,r)}}function UC(x){let A={containers:[],splits:[],container:null,field:null,split:null,expectName:!1,line:0};for(let[e,r]of x.replace(/\r\n/g,`
2196
2196
  `).replace(/\r/g,`
2197
2197
  `).split(`
2198
- `).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||RC(A,t)||t.includes("=")&&OC(A,t)}return LC(A.containers,A.splits)}var a8=null,UC=4;function $r(x){let A=new Date(x),e=(r,t)=>r.toString().padStart(t,"0");return e(A.getUTCFullYear(),4)+e(A.getUTCMonth()+1,2)+e(A.getUTCDate(),2)+e(A.getUTCHours(),2)+e(A.getUTCMinutes(),2)+e(A.getUTCSeconds(),2)+e(A.getUTCMilliseconds(),3)}function Pr(x){let A=x.trim();if(A==="*")return a8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,D,m)=>{let _=A.slice(u,u+D);return parseInt(_.length?_.padEnd(D,"0"):m,10)},r=parseInt(A.slice(0,UC),10),t=A.length>=6?e(4,2,"01"):1,s=A.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),f=e(12,2,"00"),E=e(14,3,"000");return Date.UTC(r,t-1,s,n,F,f,E)}var mt="NAN",HC="%HEX%",JC=65535,Bi=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function kn(x){return(x.alias??x.name).toLowerCase()}function _n(x){return x==="string"}function Ci(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function o8(x){return(x.editmask??"").toUpperCase()===HC}function KC(x,A){return A===void 0||!Number.isFinite(x)?x:di(x,A)}function di(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function zC(x,A){if(!Number.isFinite(x)||x===0)return x;let e=Math.abs(x),r=Math.floor(Math.log10(e));return 10**(r+1)<=e?r+=1:10**r>e&&(r-=1),di(x,A-1-r)}function VC(x){return x==="floatm16"||x==="f32"||x==="f64"}function WC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(VC(x.type)?9:0),r=di(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return zC(r,t)}function pn(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,s=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=s),s<<=1n),e>>=1n,r>>=1n;return Number(t)}function F8(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),s=BigInt.asUintN(64,BigInt(Math.trunc(e))),n=1n;for(;s!==0n;)s&1n&&(r=t&1n?r|n:r&~n,t>>=1n),s>>=1n,n<<=1n;return Number(r)}var XC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function bn(x){return!!x.bitmask&&XC.has(x.type)}var v8=255,f8=254,l8=253,c8=252,E8=251,YC=207,ui=65535,mn=65534,Di=65533,pi=65532,bi=65531;function QC(x){switch(x){case v8:return ui;case f8:return mn;case l8:return Di;case c8:return pi;case E8:return bi;default:return x<=31?x:x>YC?mn:(x&15|16)<<(x>>4)-1}}function ZC(x){switch(x){case ui:return v8;case mn:return f8;case Di:return l8;case pi:return c8;case bi:return E8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var jn=1023,Xs=31,B8=127,Ss=8388607,xd=255,Ys=15,Ad=-14,CF=15;function C8(x){let A=(x&jn)<<13,e=(x&31744)>>10;if(e===Xs)return u8(1024-(x&jn));e!==0&&(e=e-Ys+4+B8);let r=(A|e<<23)>>>0;x&32768&&(r=(r|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,r),t.getFloat32(0)}function d8(x){if(typeof x=="string"||Number.isNaN(x))return JC;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&Ss)+4096,s=(t>Ss?1:0)+(e>>>23&xd),n=(t&Ss)>>>13;return s!==0&&(s=s-B8-4,s<Ad?(n=0,s=0):s>CF?(n=jn,s=CF+Ys):s=s+Ys),r|s<<10|n}var ed=["OF","UF","OL","SC"],Qs={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:ui,OF:mn,UF:Di,OL:pi,SC:bi}},rd={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Jx={NAN:1,OF:2,UF:3,OL:4,SC:5},td=new Set(["u8","u16","u32","ufm8"]);function nd(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function mi(x){let A=x.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(A))return null;let e=Number(A);return Number.isFinite(e)?e:null}function ji(x,A,e){switch(x){case"u8":return A.getUint8(e);case"s8":return A.getInt8(e);case"u16":return A.getUint16(e,!1);case"s16":return A.getInt16(e,!1);case"u32":return A.getUint32(e,!1);case"s32":return A.getInt32(e,!1);case"s64":return Number(A.getBigInt64(e,!1));case"f32":return A.getFloat32(e,!1);case"f64":return A.getFloat64(e,!1);case"floatm16":return C8(A.getUint16(e,!1));case"ufm8":return QC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function u8(x){switch(x){case Jx.OF:return"OF";case Jx.UF:return"UF";case Jx.OL:return"OL";case Jx.SC:return"SC";default:return mt}}var dF=[["NAN",Jx.NAN],["OF",Jx.OF],["UF",Jx.UF],["OL",Jx.OL],["SC",Jx.SC]];function sd(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Jx.NAN:(r=r&4194304?8388608-r:r&255,r===0?Jx.NAN:r)}function id(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Jx.NAN:r}function ad(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);bn(x)&&(t=BigInt(pn(Number(t),x.bitmask)));let s=Qs.s64;return dF.find(([n])=>t===BigInt(s[n]))?.[1]??0}let e=Qs[x.type];if(!e)return 0;let r=ji(x.type,A,x.byteofs);return bn(x)&&(r=pn(r,x.bitmask)),dF.find(([t])=>r===e[t])?.[1]??0}function D8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&Xs)===Xs?1024-(e&jn):0}case"f32":return sd(A,x.byteofs);case"f64":return id(A,x.byteofs);default:return ad(x,A)}}function p8(x,A){let e=ji(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(bn(x)&&(e=pn(e,x.bitmask)),e*x.vscale+x.vofs)}function od(x,A){let e=D8(x,A);if(e!==0)return u8(e);let r=p8(x,A);return Number.isNaN(r)?mt:WC(x,r)}function Fd(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(_n(x.type)||Ci(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return D8(x,e)!==0?NaN:p8(x,e)}function vd(x,A){if(o8(x)){let e="";for(let r=0;r<x.size;r++)e+=A.getUint8(x.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return H0.cp1252Unpack(A,x.byteofs,x.size)}var b8=25569,m8=864e5;function fd(x){return(x-b8)*m8}function ld(x){return x/m8+b8}function cd(x,A){if(x.type==="datetime")return $r(fd(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return $r(H0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),$r(H0.stamp40ToMS(e))}var Ed=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Bd(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function Cd(x){let A=x.default;if(A===void 0)return;if(_n(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===mt)return mt;if(Ed.has(x.type))return Bd(e,0);let r=mi(e);return r!==null?r:A}function dd(x,A,e){return x.byteofs+x.size>e?Cd(x):_n(x.type)?vd(x,A):Ci(x.type)?cd(x,A):od(x,A)}function Zs(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)ve(t)||bt(t.type)||(r[kn(t)]=dd(t,e,A.byteLength));return r}function ud(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===mt||A==="")return{kind:"sentinel",state:"NAN"};let e=ed.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=mi(A);return r!==null?{kind:"value",physical:r}:uF(x)}return uF(x)}function uF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?mi(A):null)??0}}function xi(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,rd[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|Jx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(Jx[e]),!1);default:break}let r=Qs[x.type]?.[e];if(r===void 0)throw new Error(`?ddeCodec.non-numeric-type."${x.type}"`);if(x.type==="s64")return A.setBigInt64(x.byteofs,BigInt(r),!1);j8(x,A,Number(r))}function Dd(x,A,e){if(x.vscale===0)return;let r=(e-x.vofs)/x.vscale;switch(x.type){case"f32":return A.setFloat32(x.byteofs,r,!1);case"f64":return A.setFloat64(x.byteofs,r,!1);case"floatm16":return A.setUint16(x.byteofs,d8(r),!1);default:break}if(Number.isNaN(r))return xi(x,A,"NAN");if(!Number.isFinite(r))return xi(x,A,"OF");let t=r;td.has(x.type)&&t<0&&(t=0),j8(x,A,nd(t))}function j8(x,A,e){if(bn(x)){let r=ji(x.type,A,x.byteofs);e=F8(r,e,x.bitmask)}pd(x.type,A,x.byteofs,e)}function pd(x,A,e,r){switch(x){case"u8":return A.setUint8(e,r);case"s8":return A.setInt8(e,r);case"u16":return A.setUint16(e,r,!1);case"s16":return A.setInt16(e,r,!1);case"u32":return A.setUint32(e,r,!1);case"s32":return A.setInt32(e,r,!1);case"s64":return A.setBigInt64(e,BigInt(r),!1);case"ufm8":return A.setUint8(e,ZC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function bd(x,A,e){let r=String(e);if(o8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${kn(x)}"`);for(let s=0;s<x.size;s++){let n=s*2<t.length?parseInt(t.substr(s*2,2),16):0;A.setUint8(x.byteofs+s,n)}return}H0.cp1252Pack(A,x.byteofs,x.size,r)}function md(x,A,e){let r=Pr(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${kn(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,ld(r),!1);return}let t=H0.msToStamp40(r);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function jd(x,A,e){if(_n(x.type))return bd(x,A,e);if(Ci(x.type))return md(x,A,e);let r=ud(x,e);switch(r.kind){case"skip":return;case"sentinel":return xi(x,A,r.state);case"value":return Dd(x,A,r.physical)}}function Ai(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=new Map(x.fields.filter(n=>!ve(n)&&!bt(n.type)).map(n=>[kn(n),n]));for(let[n,F]of Object.entries(A)){let f=s.get(n.toLowerCase());if(!f)throw new Bi(n);jd(f,t,F)}return r}var DF=99,hd=256,ge=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},jt=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),A0(this,"container",x),A0(this,"field",A),this.name="DdeWriteForbiddenError"}},hi=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function $s(x){return(x.alias??x.name).toLowerCase()}var gd=class{constructor(x,A,e=yt){A0(this,"model",x),A0(this,"storage",A),A0(this,"timeSource",e)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=ut(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=Zs(await this.resolveScaleRefs(A),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ge(x);let r=ut(e);if(r===null)throw new ge(x);if(e.edit===DF)throw new jt(e.name);let{stamp:t,...s}=A;this.assertFieldsWritable(e,s);let n=await this.storage.getRowForTag(r),F=Ai(await this.resolveScaleRefs(e),s,n?.data??null),f=H0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),E=lA(f);return await this.storage.replaceUtoRow({tag:r,stamp:E,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:E,stamp40:f,data:F,devicePushable:s8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ge(x);let r=ut(e);if(r===null)throw new ge(x);let{stamp:t,...s}=A,n=Ai(await this.resolveScaleRefs(e),s,null),F=H0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:lA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return Pr(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ge(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new ge(x);let t=Math.abs(A.count),s=A.offset??0,n=this.buildSelectSet(e,A.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,s+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:n})).slice(s,s+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((e,r)=>x[r]===e)}async collectMatched(x,A,e,r){let t=[];if(e<=0)return t;let s=Math.max(e,hd);for(let n=0;;n+=s){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:s,offset:n});for(let f of F)if(f.data&&this.matchesSplit(f.data,A)&&(t.push(this.recordFromRow(x,f,r.selectSet)),t.length>=e))return t;if(F.length<s)return t}}async readTimeseriesEdge(x,A,e){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(x,A,e){let r=Zs(x,A.data),t={stamp:this.rowStamp(A)};for(let[s,n]of Object.entries(r))s!=="stamp"&&(!e||e.has(s))&&(t[s]=n);return t}rowStamp(x){return $r(H0.stamp40ToMS(JA(x.stamp)))}boundHex(x){if(x!=null)return lA(H0.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(r=>r.vscaleRef||r.vofsRef))return x;let A=new Map,e=[];for(let r of x.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,A,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,A,r.vofs):r.vofs})}return{...x,fields:e}}async resolveRef(x,A,e){if(!/^config[0-9a-f]$/i.test(x.container))return e;let r=this.referencedField(x);if(!r)return e;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let s=A.get(t);if(!s)return e;let n=Fd(r,s);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>$s(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=ut(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!ve(r)&&!bt(r.type)).map(r=>[$s(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===DF)throw new jt(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!ve(t)&&!bt(t.type)).map(t=>$s(t))),r=new Set;for(let t of A){let s=t.toLowerCase();if(s!=="stamp"){if(!e.has(s))throw new hi(t);r.add(s)}}return r}},yd=new Set(["$titles","$meta"]);function kd(x){let A=x;if(typeof x=="string")try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function ei(x,A){let e=A.toLowerCase();if(yd.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[s,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(s.toLowerCase(),F)}return t}function h8(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let s=A?.get(r.toLowerCase());e[s??r]=t}return e}function kt(x,A){if(!x)return null;let e=ei(x,A.name);return e||(A.alias?ei(x,A.alias):null)}var _d=require("events"),R0="[OfflineSyncManager]",wd=500,Sd="site_info",$d=new Set(["local-data-interface.json"]);function Mx(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function Td(x){let A=un(x);return!!(x&2)||A!==0&&A!==65}function pF(x){return x.filter(A=>(A.filename===Sr||A.filename===vi)&&A.outcome==="download").map(A=>A.filename)}var He="skip-equal",wr="skip-device-readonly",Ts="delete",je="error",Ps="upload",qs="uploading-utos",bF="downloading-utos",on="fetching-device-state",Ns="uploading-files",Fn="downloading-files",mF="executing-change-requests",jF="executed",Pd="error",Ms="skip-old-stamp",qd=class extends _d.EventEmitter{constructor(x,A,e){super(),A0(this,"utoMaster",x),A0(this,"storage",A),A0(this,"logger",e)}emitProgress(x,A,e,r,t){let s={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",s)}async uploadHistoricTag(x,A,e,r,t){try{let s=await this.storage.getRowForTag(x),n=0,F=async f=>{let E=f.filter(u=>u.stamp40>e).map(u=>({tag:x,stamp:lA(u.stamp40),flags:s?.flags??0,site_related:s?.site_related??0,data:u.data}));await this.storage.insertHistoricRows(E),n+=E.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,wd,F),this.logger?.info(`${R0} historic upload tag=0x${x.toString(16)} +${n} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(s){return this.logger?.error(`${R0} historic upload error tag=0x${x.toString(16)}: ${s}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${R0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:He,dbStamp40:e,deviceStamp40:r};let s=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:lA(t.stamp),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${R0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${R0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(qs,null,0,t);let s=0;for(let n of x){Mx(r);let F=A.get(n),{tagInfo:f,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(qs,f?.sTag??`0x${n.toString(16)}`,s,t),!f||u===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:E,deviceStamp40:u});else if(!(!f.flags.up||u<=E)){let D=f.sTag,m=s,_=f.historic?await this.uploadHistoricTag(n,f,E,u,h=>{this.emitProgress(qs,D,m,t,{recordsReceived:h})}):await this.uploadSingleTag(n,f,E,u);e.set(n,_)}++s}}async pullFileFromDevice(x,A,e,r,t,s){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(Ns,x,s,t,{bytesTransferred:E})}),f=Fi(F);if(f!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${f.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:lA(n),crc:A.crc32,size:F.byteLength,flags:A._flags,flags_int:r,data:F}),{filename:x,outcome:Ps,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${R0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:je,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(x,A,e,r,t,s,n,F){let f=A.stamp;if(f>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):s?this.pullFileFromDevice(x,A,r,t,n,F):void 0;if(f===r&&this.fileContentMatches(A,e))return{filename:x,outcome:He,dbStamp40:r,deviceStamp40:f}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:lA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:He,dbStamp40:r,deviceStamp40:t}}catch(s){return this.logger?.error(`${R0} file upload error ${x}: ${JSON.stringify(s)}`),{filename:x,outcome:je,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,s,n){let F=A.stamp;if(F!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,s,n):{filename:x,outcome:wr,dbStamp40:r,deviceStamp40:F}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),s=!!(A._flags&1);if(!t)return s?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let n=JA(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,n,t.flags_int,s,e,r):this.decideNonSystemUpload(x,A,t,n,s,e,r)}pullIfReadable(x,A,e,r,t,s,n){return x?this.pullFileFromDevice(A,e,r,t,s,n):void 0}async decideNonSystemUpload(x,A,e,r,t,s,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,x,A,r,F,s,n):this.decideUploadBySyncLogic(x,A,e,r,t,s,n)}async decideUploadBySyncLogic(x,A,e,r,t,s,n){let F=e.flags_int,f=un(F);if(f===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,F,s,n);if(f===1)return this.autoSyncUploadFile(x,A,e,r,F,t,s,n);if(f===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,F,s,n):void 0;if(f!==33)return this.mirrorUploadFile(x,A,e,r,t,s,n)}async uploadFiles(x,A,e,r){let t=Object.entries(x),s=t.length;this.emitProgress(Ns,null,0,s);let n=0;for(let[F,f]of t){if(Mx(r),!(F===vi||F===Sr&&!e)){let u=await this.decideFileUpload(F,f,s,n);u&&A.set(F,u)}this.emitProgress(Ns,F,++n,s)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,e,r){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,e),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${R0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(x,A,e,r,t){if(e===r&&!t.has(x)){let s=A.flags.up?He:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:s,dbStamp40:e,deviceStamp40:r});return}if(e>r){let s=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:wr,dbStamp40:e,deviceStamp40:r};t.set(x,s)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(bF,null,0,t);let s=0;for(let n of x){Mx(r);let{tagInfo:F,dbStamp40:f,deviceStamp40:E}=A.get(n);F&&E!==null&&!F.historic&&await this.processDownloadTag(n,F,f,E,e),this.emitProgress(bF,F?.sTag??`0x${n.toString(16)}`,++s,t)}}async sendFileToDevice(x,A,e,r,t){let s=x.data.byteLength,n=F=>{if(F!==null){let f=Math.round(s*parseInt(F,10)/100);this.emitProgress(Fn,x.filename,t,r,{bytesTransferred:f,bytesTotal:s})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,H0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${R0} file download error ${x.filename}: ${F}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let s=A?.stamp??0,n=JA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===s?void 0:{filename:x.filename,outcome:He,dbStamp40:n,deviceStamp40:s};if(!(!t&&n<s))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:wr,dbStamp40:n,deviceStamp40:s}:this.sendFileToDevice(x,n,s,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(Sd);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${R0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),s=t.filter(D=>D.flags&8),n=t.filter(D=>!(D.flags&8)),F=[...s,...n].filter(D=>D.filename),f=Object.entries(x).filter(([,D])=>D._flags&4).map(([D])=>D),E=F.length;this.emitProgress(Fn,null,0,E);let u=0;for(let D of F){if(Mx(r),e&&D.filename===Sr){this.emitProgress(Fn,D.filename,++u,E);continue}let m=D.filename===Sr&&!e,_=await this.decideFileDownload(D,x[D.filename],A.get(D.filename),f,m,E,u);_&&A.set(D.filename,_),this.emitProgress(Fn,D.filename,++u,E)}}async decideFileDownload(x,A,e,r,t,s,n){return A!==void 0?this.decideDownloadExisting(x,A,e,t,s,n):this.decideDownloadMissing(x,r,s,n)}async decideDownloadExisting(x,A,e,r,t,s){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,s,r);let n=x.flags_int;if(n&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(n&4))return this.pushToDevice(x,A,t,s)}async pushToDevice(x,A,e,r){let t=A.stamp,s=JA(x.stamp),n=this.wantDownloadPush(x,A,s,t);if(n==="match")return{filename:x.filename,outcome:He,dbStamp40:s,deviceStamp40:t};if(n!=="none"&&!(s===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,s,t,e,r):{filename:x.filename,outcome:wr,dbStamp40:s,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let s=this.fileContentMatches(A,x),n=un(t);return n===33||n===1&&e>=r?s?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=JA(x.stamp);if(!(e&&(e.outcome===Ps||e.outcome===je))){if(!(A._flags&2))return{filename:x.filename,outcome:wr,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Ts,dbStamp40:t,deviceStamp40:r}}catch(s){return this.logger?.error(`${R0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:je,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,s=JA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Ts,dbStamp40:s,deviceStamp40:null}}catch(n){return this.logger?.error(`${R0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:je,dbStamp40:s,deviceStamp40:null}}if(!(x.flags&12)&&Td(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,s,0,e,r)}hasMatchingNode(x,A){return A.some(e=>e.slice(0,-1)===x.slice(0,e.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${R0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),e=new Set(Object.keys(A)),r=await this.storage.getFiles(),t=new Map(r.map(s=>[s.filename,s]));for(let[s,n]of Object.entries(A))Mx(x),await this.reconcileDeviceFile(s,n,t.get(s)??null);for(let s of r)Mx(x),e.has(s.filename)||await this.dropRowMissingFromDevice(s)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${R0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:lA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e?.flags_int??16,data:this.keepBlob(x,r)?e?.data??null:null};e&&this.fileRowMatches(e,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||$d.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${R0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Mx(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${R0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${R0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${R0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),e=A.serialNumber}if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${R0} DB device_id "${e}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let e=0;e<x.utos.length;e++){let r=x.utos[e];A.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),e=new Set(A);for(let[r,t]of x)t.historic&&!e.has(r)&&A.push(r);return A}async buildTagStampCache(x,A,e){let r=new Map;for(let t of x){let s=A.get(t),n=await this.storage.getLatestStampForTag(t),F=n?JA(n):0,f=s&&s.index<e.stamps.length?e.stamps[s.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:f,tagInfo:s})}return r}async executeChangeRequests(x,A,e,r,t,s){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),f=F.size;if(this.emitProgress(mF,null,0,f),f===0)return;let E=new Set,u=0;for(let[D,m]of F){Mx(s);let _=x.get(D),h=_?.sTag??`0x${D.toString(16)}`;this.emitProgress(mF,h,u,f),await this.executeChangeRequestTag(D,h,_,m,A,r,t,E),++u}E.size>0&&await this.repullExecutedTags(E,x,e,s)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:JA(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,s,n,F){if(!e){this.pushChangeResults(n,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,x,A,r,"skip-unsupported");return}let f=e.index<t.stamps.length?t.stamps[e.index]:0,E=r.filter(D=>D.stamp40<=f),u=r.filter(D=>D.stamp40>f);this.pushChangeResults(n,x,A,E,Ms),u.length>0&&await this.coalesceAndSend(x,A,e,u,s,n,F)}async coalesceAndSend(x,A,e,r,t,s,n){let F=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===je||!F||!F.data){this.pushChangeResults(s,x,A,r,"error");return}let f=this.resolveSetObject(F.data,r,A);if(f===null){this.pushChangeResults(s,x,A,r,"error");return}if(Object.keys(f).length===0){this.pushChangeResults(s,x,A,r,"skip-no-change");return}let E=r[r.length-1].stamp40,u=await this.utoMaster.sendSetValue(x,JSON.stringify(f),E);u.outcome==="ok"||u.outcome==="stamp"?(n.add(x),this.pushChangeResults(s,x,A,r,jF,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${R0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(s,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${R0} change-request error ${A} (result=${u.resultCode})`),this.pushChangeResults(s,x,A,r,"error",u.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(H0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${R0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let s=JSON.parse(t.json);if(!this.isPlainRecord(s))throw new Error(`change-request JSON is not an object on ${e}`);for(let[n,F]of Object.entries(s)){let f=this.resolveChangeField(x[n],F,n,e);f.apply&&(r[n]=f.value,x[n]=f.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:s}=A;return this.resolveBitwiseOp(x,t,s,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${R0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${R0} change-request op "${A}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:e}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${R0} change-request op "${A}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|e:x&e}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,e,r,t,s){for(let n of r)x.push({tag:A,sTag:e,stamp40:n.stamp40,user:n.user,outcome:t,resultCode:s})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(s){this.logger?.warn(`${R0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${s}`)}for(let s of x)Mx(r),await this.repullExecutedTag(s,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${R0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let s=await this.storage.getRowForTag(x),n=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:lA(n),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let F=r.get(x);if(F){let f=A.get(x),E=e&&f&&f.index<e.stamps.length?e.stamps[f.index]:n;F.dbStamp40=n,F.deviceStamp40=E}this.logger?.info(`${R0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${R0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],s=pF(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:s.length>0,rebootFilesDeployed:s,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===He||n.outcome==="skip-db-readonly"||n.outcome===wr).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===Ps).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===Ts).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===jF).length,totalErrors:r.filter(n=>n.outcome===je).length+t.filter(n=>n.outcome===je).length+e.filter(n=>n.outcome===Pd).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Mx(A),this.emitProgress(on,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${R0} requestStamps returned null`);this.emitProgress(on,"stamps",1,3);let s=await this.utoMaster.requestFileList();this.emitProgress(on,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(on,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),f=new Map,E=new Map,u=[],D=await this.isAppInDevPhase();return Mx(A),await this.uploadUtoTags(n,F,f,A),Mx(A),await this.uploadFiles(s,E,D,A),Mx(A),await this.executeChangeRequests(r,t,F,f,u,A),Mx(A),await this.downloadUtoTags(n,F,f,A),Mx(A),await this.downloadFiles(s,E,D,A),Mx(A),pF([...E.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(f,E,u)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${R0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${R0} requestStamps returned null`);let s=r.get(x),n=s?.sTag??`0x${x.toString(16)}`,F=A.map(m=>({stamp40:m.stamp40,user:"",json:m.json})).sort((m,_)=>m.stamp40-_.stamp40),f=new Map,E=[],u=new Set;return await this.executeChangeRequestTag(x,n,s,F,t,f,E,u),u.size>0&&await this.repullExecutedTags(u,r,new Map,void 0),E.find(m=>m.outcome!==Ms)?.outcome??Ms}},Nd=require("events"),Md=require("events"),Id=require("events"),Ld=5e3,gi=class g8 extends Id.EventEmitter{constructor(A=KA){super(),A0(this,"logger",A),A0(this,"ws",null),A0(this,"bridgeTransport",null),A0(this,"bridgeSignal"),A0(this,"bridgeResolve",null),A0(this,"bridgeReject",null),A0(this,"serverMessageCount",0),A0(this,"settled",!1),A0(this,"abortHandler",null),A0(this,"connectTimeout"),A0(this,"writeQueue",[]),A0(this,"isProcessingQueue",!1),A0(this,"queueAborted",!1),A0(this,"queueDrainPromise",Promise.resolve()),A0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,e){return`wss://${A}/uto/1/sync/${e}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await x8(this.bridgeTransport,A)}catch(e){let r=e instanceof Error?e.message:String(e);this.logger.error(`Error writing to transport: ${r}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,e){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(e))}attachWebSocketHandlers(A,e){let r=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${e}`),this.transportUnsubscribe=this.bridgeTransport.onData(r),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${e}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${e})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,e,r,t){return new Promise((s,n)=>{if(t?.aborted){n(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=s,this.bridgeReject=n;let F=g8.buildSyncUrl(e,r);this.logger.info(`Opening WebSocket: ${F}`);let f=new WebSocket(F);f.binaryType="arraybuffer",this.ws=f,this.connectTimeout=setTimeout(()=>{f.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),f.close(),this.settle("reject",new Error("WebSocket connection timeout")))},Ld),this.attachWebSocketHandlers(f,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},y8="https://lic.mydatanet.at/api/2/";async function k8(x,A=y8){let e=`${A}devices/${x}/assignment`,r=await fetch(e);if(!r.ok)throw new Error(`Failed to get device assignment: ${r.status} ${r.statusText}`);return r.json()}var _8=class extends Md.EventEmitter{constructor(x=KA){super(),A0(this,"logger",x)}async execute(x,A,e,r){let t=e;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await k8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let s=new gi(this.logger);s.on("wsConnected",()=>this.emit("wsConnected")),s.on("wsClosed",(F,f)=>this.emit("wsClosed",F,f)),s.on("wsError",F=>this.emit("wsError",F)),s.on("serverMessage",F=>this.emit("serverMessage",F));let n=await s.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+n.serverMessageCount+")"),{serverMessageCount:n.serverMessageCount}}},Rd=require("events"),w8="Operation aborted";function Od(x){return x instanceof Error?x.message:String(x)}function Is(x){if(x?.aborted)throw new Error(w8)}var S8=class extends Rd.EventEmitter{constructor(x,A=KA){super(),A0(this,"atHandler",x),A0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:n=>this.atHandler.queryMntServerConfig(n),initiateSync:n=>this.atHandler.initiateMntSync(n)},{name:"mdn",queryServer:n=>this.atHandler.queryMdnServerConfig(n),initiateSync:n=>this.atHandler.initiateMdnSync(n)}],s={};for(let n of t)try{s[n.name]=await this.runSyncPhase(n,x,A,r)}catch(F){if(r?.aborted)throw new Error(w8);let f=`${n.name.toUpperCase()} sync phase failed: ${Od(F)}`;throw this.logger.error(f),new Error(f)}return this.logger.info(`Debug sync completed (mntMessages=${s.mnt}, mdnMessages=${s.mdn})`),{mntServerMessageCount:s.mnt,mdnServerMessageCount:s.mdn}}async runSyncPhase(x,A,e,r){Is(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let s=await x.queryServer(r);this.logger.info(`${t} server domain: ${s}`),Is(r),await x.initiateSync(r),Is(r);let n=await this.syncWithServer(A,s,e,r);return this.logger.info(`${t} phase completed (serverMessages=${n.serverMessageCount})`),n.serverMessageCount}async syncWithServer(x,A,e,r){let t=new gi(this.logger),s=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let n=this.atHandler.createConCloseMonitor(()=>{s=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let F=await t.bridge(x,A,e,r);return s?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),F}finally{n()}}},Gd=class extends Nd.EventEmitter{constructor(x,A,e=KA){super(),A0(this,"syncTransport",x),A0(this,"logger",e),A0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(e){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(e instanceof Error?e.message:String(e))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(e){throw this.emit("syncError",e),e}}async syncLegacy(x){let A=new _8(this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let r={mode:"legacy",serverMessageCount:(await A.execute(this.syncTransport,x.serialNumber,x.serverUrl,x.signal)).serverMessageCount};return this.emit("syncComplete",r),r}async syncWithDebug(x){let A=new S8(this.atHandler,this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let e=await A.execute(this.syncTransport,x.serialNumber,x.serverUrl??"",x.signal),r={mode:"debug",serverMessageCount:e.mntServerMessageCount+e.mdnServerMessageCount,mntServerMessageCount:e.mntServerMessageCount,mdnServerMessageCount:e.mdnServerMessageCount};return this.emit("syncComplete",r),r}dispose(){}},Ud=require("events"),yx={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},U0={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},Hx=1e4,$8=9e4,T8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function P8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var Je="Operation aborted",Rx=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},yi=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},Hd=class extends Ud.EventEmitter{constructor(x,A=KA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new li("AtCommandHandler")),A0(this,"bufferState",P8()),A0(this,"responseCallback",null),A0(this,"decoder",new TextDecoder),A0(this,"dataHandler"),A0(this,"disposeTransportListener"),A0(this,"isDisposed",!1),A0(this,"activeAbort",null),A0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=Hx,s)=>this.executeSendAndWait(e,r,t,s),sendRaw:(e,r=Hx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(yx.MNT_CFG,U0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(yx.MDN_CFG,U0.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new Rx;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&e&&A.removeEventListener("abort",e)}}makeResponseChecker(x,A,e,r){let t=x instanceof RegExp;return s=>{if(x!==U0.ERROR&&s.includes(U0.ERROR)){A(),r(new yi);return}let n=!1,F=s;if(t){let f=s.match(x);f&&(n=!0,F=f[0])}else n=s.includes(x);if(n){A(),e(F);return}s.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,s)=>{if(this.isDisposed){s(new Rx);return}if(r?.aborted){s(new Error(Je));return}x&&(this.bufferState.buffer="");let F=A instanceof RegExp?A.source:A,f={cleanup:()=>{}},E=setTimeout(()=>{f.cleanup(),s(new Error(`Timeout waiting for response: ${F}`))},e),u=()=>{f.cleanup(),s(new Error(Je))};f.cleanup=this.makeCleanup(E,r,u),r&&r.addEventListener("abort",u);let D=this.makeResponseChecker(A,f.cleanup,t,s);this.responseCallback=D,this.activeAbort=()=>{f.cleanup(),s(new Rx)},!x&&this.bufferState.buffer&&D(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(m=>{f.cleanup(),s(m)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Rx);return}this.bufferState.buffer="";let t=setTimeout(()=>{s(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),s=this.makeCleanup(t);this.activeAbort=()=>{s(),r(new Rx)},this.responseCallback=n=>{T8.test(n)&&(s(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(n=>{s(),r(n)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Rx);return}if(e?.aborted){t(new Error(Je));return}this.bufferState.buffer="";let s={cleanup:()=>{}},n=setTimeout(()=>{s.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},Hx),F=()=>{s.cleanup(),t(new Error(Je))};s.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let f=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{s.cleanup(),t(new Rx)},this.responseCallback=E=>{let u=E.match(f);if(u){s.cleanup();let D=u[1].trim();this.logger.info(`Server config ${A}: ${D}`),r(D);return}E.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(E=>{s.cleanup(),this.logger.error(`Failed to send ${A} command: `+(E instanceof Error?E.message:String(E))),t(E)})})}async sendAndWait(x,A,e=Hx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=Hx){return this.withAtLock(e=>e.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(e=>e.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(yx.MNT_SYNC,U0.OK,Hx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(yx.MDN_SYNC,U0.OK,Hx,x),await this.executeSendAndWait(null,U0.SYNC_START,Hx,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new Rx;if(A?.aborted)throw new Error(Je);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${yx.COMPANION_CERT}=${r}`,U0.OK,Hx,A),s=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(s,r-n),f=e.slice(n,n+F);await this.executeSendAndWait(`${yx.COMPANION_CERT}=${F},${n},${f}`,U0.OK,Hx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Rx);return}if(A?.aborted){r(new Error(Je));return}this.bufferState.buffer="";let t={cleanup:()=>{}},s=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},Hx),n=()=>{t.cleanup(),r(new Error(Je))};t.cleanup=this.makeCleanup(s,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Rx)},this.responseCallback=f=>{let E=f.match(U0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(f.includes(U0.OK)){t.cleanup(),e({success:!0});return}f.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${yx.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(f=>{t.cleanup(),r(f)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(yx.COMPANION_CERT_TEST,U0.OK,Hx,x),!0}catch(A){if(A instanceof Rx)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(yx.CON_CLOSE,U0.CON_CLOSE,Hx,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",e=r=>{A+=r,A.includes(U0.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},q8=(x=>(x[x.FORMAT=1]="FORMAT",x[x.SIGNATURE=2]="SIGNATURE",x[x.EXPIRED=3]="EXPIRED",x[x.NO_MDN_PUBKEY=4]="NO_MDN_PUBKEY",x[x.BUSY=5]="BUSY",x[x.INTERNAL=6]="INTERNAL",x))(q8||{}),Jd=require("events"),Ls="requesting-cert",Rs="cert-revoked",N8=class ri extends Jd.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??dn,{signal:r,atHandler:t}=A,s=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),s();let n=await this.loadOrGenerateKeypair(A.storage),F=await A.storage.getCertificate(A.apiConfig.apiHost);(F===null||!oi(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Ls),s(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new A8(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),s();let f=F;F=await t.withAtLock(async D=>{let m=await this.presentCertWithRefresh(D,f,n,A);return await D.initiateMdnSync(r),m}),this.emitPhase("ecs-handshake"),s(),await this.utoMaster.init();let E=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!E.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${E.resultCode})`);this.emitPhase("connected");let u=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:u}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await Hs();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await UF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof pt&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new Os(Rs,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await ri.fetchCertOrThrowRevoked(A,e),t={base64Url:r.certificateBase64Url,notAfter:r.notAfter};return await e.storage.saveCertificate(t,e.apiConfig.apiHost),t}static async refreshCertificate(A){let e=await A.storage.getKeypair(),r=e!==null?e:await(async()=>{let n=await Hs();return await A.storage.saveKeypair(n),n})(),t=await ri.fetchCertOrThrowRevoked(r,A),s={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(s,A.apiConfig.apiHost),s}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let s=await A.sendCompanionCert(e.base64Url,t.signal);if(s.success||s.errorCode===3&&((t.logger??dn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Ls),e=await this.requestAndStoreCert(r,t),s=await A.sendCompanionCert(e.base64Url,t.signal),s.success))return e;throw new Os("cert-presenting",`AT+COMPCERT rejected (code ${s.errorCode??"?"})`,{certErrorCode:s.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,e){return this.emit("phase","error"),{success:!1,phase:A,error:e}}handleError(A){return A instanceof Os?(this.emit("phase",A.phase===Rs?Rs:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof pt?{success:!1,phase:Ls,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(N8,"encodePublicKeyBase64Url",ai);var Kd=N8,Os=class extends Error{constructor(x,A,e={}){super(A),A0(this,"phase",x),A0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},M8=(x=>(x.CERT_FORMAT="cert_format",x.CERT_SIGNATURE="cert_signature",x.CERT_EXPIRED="cert_expired",x.NO_MDN_PUBKEY="no_mdn_pubkey",x.DEVICE_BUSY="device_busy",x.DEVICE_INTERNAL="device_internal",x.ECS_FAILURE="ecs_failure",x.CERT_REVOKED="cert_revoked",x.SESSION_EXPIRED="session_expired",x.ABORTED="aborted",x.UNKNOWN="unknown",x))(M8||{}),zd={cert_format:"companion_auth.error.cert_format",cert_signature:"companion_auth.error.cert_signature",cert_expired:"companion_auth.error.cert_expired",no_mdn_pubkey:"companion_auth.error.no_mdn_pubkey",device_busy:"companion_auth.error.device_busy",device_internal:"companion_auth.error.device_internal",ecs_failure:"companion_auth.error.ecs_failure",cert_revoked:"companion_auth.error.cert_revoked",session_expired:"companion_auth.error.session_expired",aborted:"companion_auth.error.aborted",unknown:"companion_auth.error.unknown"};function Vd(x){if(x.certErrorCode!==void 0)switch(x.certErrorCode){case 1:return"cert_format";case 2:return"cert_signature";case 3:return"cert_expired";case 4:return"no_mdn_pubkey";case 5:return"device_busy";case 6:return"device_internal"}return x.phase==="cert-revoked"?x.httpStatus===401?"session_expired":"cert_revoked":x.phase==="ecs-handshake"?"ecs_failure":x.error==="Operation aborted"?"aborted":"unknown"}var Wd=require("events");function I8(x){let A=x.replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f").map(e=>{let r=e.split(" ");return r.length<4?null:{name:r[0],scale:parseFloat(r[1]),offset:parseFloat(r[2]),unit:r[3]}}).filter(e=>e!==null):[]}function L8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function R8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function ti(x,A){return x.map((e,r)=>({name:e.name,displayValue:R8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var Xd=2e3,O8=class extends Wd.EventEmitter{constructor(x,A=KA){super(),A0(this,"atHandler",x),A0(this,"logger",A),A0(this,"datapoints",[]),A0(this,"values",[]),A0(this,"polling",!1),A0(this,"pollTimer",null),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(yx.APP_GET_METADATA),A=x.includes(U0.OK)?{supported:!0,pinRequired:!1}:x.includes(U0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(U0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(U0.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${yx.APP_GET_METADATA}=${x}`:yx.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(U0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(U0.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(U0.OK)){let r=I8(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(U0.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let e=A?`${yx.APP_GET_DATAVALUE}=${A}`:yx.APP_GET_DATAVALUE,r=await x(e);if(r.includes(U0.OK)){let t=L8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",ti(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(yx.APP_TRIG_MEASURE_TEST)).includes(U0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Rx)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:e=$8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let s=await t.sendRaw(yx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+s),!s.includes(U0.OK))return this.logger.warn("Measurement trigger rejected: "+s.trim()),{outcome:"rejected",values:[],response:s};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,U0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(f=>t.sendRaw(f),A),response:n}}catch(n){if(n instanceof Rx)throw n;let F="timeout";return n instanceof yi?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${U0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:s}}})}async startPolling(x,A=Xd){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+A+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(x),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(x).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},A))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return ti(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function Yd(x,A,e){let r=s=>{if(s instanceof Rx)throw s},t=new O8(x);try{let s=await x.queryMdnServerConfig(e).catch(D=>(r(D),!1)),n=await t.checkSupport().catch(D=>(r(D),{supported:!1,pinRequired:!1})),F=n.supported?await t.checkMeasurementTriggerSupport().catch(D=>(r(D),!1)):!1,f=n.supported?{pinRequired:n.pinRequired,canTriggerMeasurement:F}:!1,E=!1,u=!1;if(s){let[D,m]=await Promise.all([x.queryCompanionCertSupport(e).catch(_=>(r(_),!1)),A?.getCertificate(s)]);E=D,u=m!=null&&oi(m.notAfter)}return{hostname:s,localData:f,secureConnection:E,validCert:u}}finally{t.dispose()}}var Qd=require("events"),Zd={0:"trigger",1:"wakeup",2:"online"},xu={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},Au={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},wx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},eu=wx.FAILED|wx.ACTIVE|wx.STARTED|wx.RETRY|wx.WAKEUPABLE|wx.EXTSIM|wx.DISABLED|wx.WAKEUP|wx.POSUPDATE_ACTIVE,hF=`${U0.RM2M_STATE}: `;function G8(x=0){let A=(x&wx.WAKEUPABLE)!==0,e="offline",r=A;return x&wx.POSUPDATE_ACTIVE?(e="locating",r=!1):x&wx.RETRY?(e="retry",r=!1):x&wx.STARTED?(e="dialing",r=!1):x&wx.ACTIVE?(e="active",r=!1):x&wx.FAILED?(e="failed",r=A):x&wx.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&wx.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~eu}}function ru(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:Zd[A]??x}function tu(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:xu[A]??["unknown",`itf#${x}`,`itf#${x}`]}function nu(x){if(x.length===0)return null;let A=x.join(",");return Au[A]??A}function U8(x){let A=x.split(","),[e,r,t,s,...n]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),f=tu(s),E=s!==void 0?parseInt(s,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:G8(F),uplinkMode:ru(t),uplinkInterface:f?f[0]:null,uplinkInterfaceExtended:f?f[1]:null,uplinkInterfaceTechnical:f?f[2]:null,scriptState:nu(n)}}function H8(x){let A=x.indexOf(hF);if(A===-1)return null;let e=x.substring(A+hF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?U8(t):null}var su=5e3,iu=class extends Qd.EventEmitter{constructor(x,A=dn){super(),A0(this,"atHandler"),A0(this,"logger"),A0(this,"lastState",null),A0(this,"pollingTimer",null),A0(this,"polling",!1),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(yx.RM2M_STATE),A=H8(x);return A?(this.lastState=A,this.emit("state",A),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),A}catch(x){let A=x instanceof Error?x.message:String(x);return this.logger.error(`Failed to fetch RM2M state: ${A}`),this.emit("error",A),null}}startPolling(x=su){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${x}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),x)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}},au=require("events"),J8=class extends au.EventEmitter{constructor(){super(...arguments),A0(this,"serialNumber",""),A0(this,"serverUrl",""),A0(this,"deviceId",""),A0(this,"rssi",null),A0(this,"hasDebugSupport",!1),A0(this,"connectionState","disconnected"),A0(this,"connectionError",""),A0(this,"mtuSize",23)}get isConnected(){return this.connectionState==="connected"}setConnected(x){this.serialNumber=x.serialNumber,this.deviceId=x.deviceId,this.serverUrl=x.serverUrl??this.serverUrl,this.hasDebugSupport=x.hasDebugSupport??!1,this.mtuSize=x.mtuSize??23,this.rssi=x.rssi??null,this.connectionState="connected",this.connectionError="",this.emit("connected",this.snapshot()),this.emit("stateChange",this.snapshot())}setDisconnected(){this.connectionState="disconnected",this.rssi=null,this.emit("disconnected"),this.emit("stateChange",this.snapshot())}setError(x){this.connectionError=x,this.connectionState="disconnected",this.emit("error",x),this.emit("stateChange",this.snapshot())}setConnectionState(x){this.connectionState=x,this.emit("stateChange",this.snapshot())}updateRssi(x){this.rssi=x,this.emit("rssiUpdate",x)}reset(){this.serialNumber="",this.serverUrl="",this.deviceId="",this.rssi=null,this.hasDebugSupport=!1,this.connectionState="disconnected",this.connectionError="",this.mtuSize=23,this.emit("reset"),this.emit("stateChange",this.snapshot())}snapshot(){return{serialNumber:this.serialNumber,serverUrl:this.serverUrl,deviceId:this.deviceId,rssi:this.rssi,hasDebugSupport:this.hasDebugSupport,connectionState:this.connectionState,connectionError:this.connectionError,mtuSize:this.mtuSize,isConnected:this.isConnected}}},ou=require("events"),K8={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},Fu=class extends ou.EventEmitter{constructor(x=KA,A){super(),A0(this,"logger",x),A0(this,"state"),A0(this,"transports",null),A0(this,"transportFactory",null),A0(this,"disconnectFn",null),A0(this,"reconnectOptions"),A0(this,"reconnectAbortController",null),this.state=new J8,this.reconnectOptions={...K8,...A}}async connect(x,A,e){this.transportFactory=x,this.disconnectFn=A,this.state.setConnectionState("connecting");try{return this.transports=await x(),this.state.setConnected(e),this.logger.info(`Connected to device ${e.serialNumber}`),this.transports}catch(r){let t=r instanceof Error?r.message:String(r);throw this.state.setError(t),this.logger.error(`Connection failed: ${t}`),r}}async disconnect(){if(this.stopReconnect(),this.disconnectFn)try{await this.disconnectFn()}catch(x){this.logger.warn(`Disconnect error: ${x}`)}this.transports=null,this.state.setDisconnected(),this.logger.info("Disconnected from device")}async reconnect(){if(!this.transportFactory||!this.disconnectFn)return this.logger.error("Cannot reconnect: no transport factory"),!1;this.state.setConnectionState("reconnecting"),this.reconnectAbortController=new AbortController;let{signal:x}=this.reconnectAbortController,A=Date.now(),e=this.reconnectOptions.initialDelay;for(;Date.now()-A<this.reconnectOptions.maxDuration;){if(x.aborted||(this.logger.info(`Reconnecting in ${e}ms...`),await this.sleep(e,x),x.aborted))return!1;try{return this.transports=await this.transportFactory(),this.state.setConnectionState("connected"),this.state.connectionError="",this.logger.info("Reconnected successfully"),this.emit("reconnected"),!0}catch(r){this.logger.warn(`Reconnect attempt failed: ${r}`),e=Math.min(e*2,this.reconnectOptions.maxDelay)}}return this.state.setError("Reconnect timeout exceeded"),this.logger.error("Reconnect failed: timeout exceeded"),this.emit("reconnectFailed"),!1}stopReconnect(){this.reconnectAbortController?.abort(),this.reconnectAbortController=null}getTransports(){return this.transports}sleep(x,A){return new Promise(e=>{let r=setTimeout(e,x);A?.addEventListener("abort",()=>{clearTimeout(r),e()},{once:!0})})}},vu={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},fu={service:"BC300000-0FA0-4ED4-860A-CF95434B5A4E",txCharacteristic:"BC30E1FF-0FA0-4ED4-860A-CF95434B5A4E",rxCharacteristic:"BC30E1FE-0FA0-4ED4-860A-CF95434B5A4E",txDebugCharacteristic:"BC30E201-0FA0-4ED4-860A-CF95434B5A4E",rxDebugCharacteristic:"BC30E200-0FA0-4ED4-860A-CF95434B5A4E"},lu=590,cu=3e4,S0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},cA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},wn=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},ki=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function EA(x){try{return decodeURIComponent(x)}catch{throw new S0("malformed url encoding")}}var Eu=2e3,Bu=2136;function _i(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=Eu&&A<=Bu}function qr(x){if(x)for(let A of["stamp","from","until"]){let e=x[A];if(typeof e=="string"&&!(A==="until"&&e==="*")&&!(A!=="stamp"&&e.trim().length===0)&&!_i(e))throw new S0(`attribute '${A}' is not valid`)}}function Cu(x){return typeof x.setMetadataValue=="function"?x:null}function du(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function wi(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function uu(x){return{status:200,body:x.ctx.siteInfo}}async function Du(x){let{blueprint:A}=x.ctx;if(!A)throw new cA("blueprint unavailable");return{status:200,body:A}}async function pu(x){let{me:A}=x.ctx;if(A==null)throw new cA("no profile stored");return{status:200,body:A}}function z8(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(s){x.logger?.error(`[localApi] device push for tag ${A} failed:`,s)}})()}async function bu(x,A,e){let r=x.push;if(!r)return null;try{return await r.adHocChangeRequest(A,e)}catch(t){return x.logger?.error(`[localApi] change request for tag ${A} failed:`,t),null}}var mu=1024;function _t(x){let A=x.indexOf(0),e=A<0?x:x.subarray(0,A);try{let r=new TextDecoder("utf-8").decode(e),t=JSON.parse(r);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function V8(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(mu,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var Si=26432,Ye={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},W8=Object.keys(Ye),wt=["standby","commissioned","offline","commissioning","online"],ni=wt.reduce((x,A)=>x|Ye[A],0)>>>0;function X8(x){let A=0;for(let e of W8)x[e]===!0&&(A|=Ye[e]);return A>>>0}function $i(x,A){let e={};for(let r of W8)x&Ye[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function Y8(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(Si);if(!r?.data)return!1;let t=_t(r.data);if(!t)return!1;let s=!1;if(typeof t.lifecycleFlags=="number"){let n=$i(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,s=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,s=!0),s}var ju=new Set([...wt,"service","lifecycle_state"]);function hu(x,A){let e=Math.max(H0.msToStamp40((x.timeSource??yt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function gu(x){let A=wu(x.request.body??null);if(!A)throw new S0("invalid or missing request body");yu(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!_u(r))throw new S0("this site does not support lifecycle flags!");let t=X8(r),s=t;for(let E of wt){let u=A[E];typeof u=="boolean"&&(s=u?s|Ye[E]:s&~Ye[E])}if(s>>>=0,s===t)return{status:204,body:""};let n=hu(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~ni>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:s&ni}}),stamp40:n+1}],f=du(e.storage);return f&&await f.insertUtoChangeRequests(F.map(E=>({tag:Si,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=$i(s,r),await Q8(e),ku(e,F),{status:204,body:""}}function yu(x){let A=[];for(let[e,r]of Object.entries(x))ju.has(e)?(e==="lifecycle_state"?typeof r!="string":typeof r!="boolean")&&A.push(`"${e}" is not valid`):A.push(`"${e}" is not an allowed lifecycle property`);if(A.length>0)throw new S0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!wt.includes(e)))throw new S0("invalid parameters")}async function ku(x,A){try{let e=await bu(x,Si,A);e==="executed"?await Y8(x.storage,x.siteInfo)&&await Q8(x):e!==null&&x.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${e})`)}catch(e){x.logger?.error("[localApi] lifecycle device-mirror refresh failed:",e)}}async function Q8(x){await Cu(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function _u(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function wu(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function Z8(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0('"select" must be an array')}}function Su(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0("invalid parameter, select must be an array")}}function $u(x,A){let e=new Map;if(A){for(let[r,t]of A)e.set(t,r);return e}for(let r of x?.fields??[]){if(ve(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function Tu(x){let A=new Map;for(let e of x.fields){if(ve(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function Pu(x){let A=new Set;for(let e of x.fields)ve(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function qu(x,A,e){if(!e)return null;let r=$u(x,A),t=new Set,s=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):s.push(n)}if(s.length>0)throw xv(s);return t}function Nu(x,A){let e=Tu(x),r=[],t=[],s=!1;for(let n of A){if(n==="stamp"){s=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw xv(t);return s||r.unshift("stamp"),r}function Mu(x,A){if(A===void 0)return;let e=Pu(x),r=A.map(s=>s.toLowerCase()),t=r.filter(s=>!e.has(s));if(t.length>0)throw new S0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function Iu(x,A){if(!A)return x;let e={};for(let[r,t]of Object.entries(x))(r==="stamp"||A.has(r))&&(e[r]=t);return e}function Ti(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function xv(x){return new S0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function Sn(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function Lu(x){let A=x.ctx,e=EA(x.params[1]),r=Sn(A.model,e);if(!r)throw new S0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new cA(`no data for container "${e}"`);let s=Ou(A,r,t,Ru(x));return{status:200,body:Av(A,e,s)}}function Ru(x){let A=x.query.json??{};return Z8(A.select)}function Ou(x,A,e,r){let t=qu(A,kt(x.blueprint??null,A),r);return Iu(e,t)}function Av(x,A,e){let r=x.model.byNameOrAlias(A);return r?h8(e,kt(x.blueprint??null,r)):e}async function Gu(x){let A=x.ctx,e=EA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new cA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new cA(`unknown container "${e}"`);let s=x.query.json??{},n=Su(s.select),F=Mu(r,n);return{status:200,body:Ti(t,F)}}async function Uu(x){let A=EA(x.params[1]);return ev(x,A,"canonical")}async function Hu(x){let A=EA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new cA(`unknown container "${A}"`);return ev(x,A,"legacy")}async function ev(x,A,e){let r=Xu(x);if(!r)throw new S0("invalid or missing request body");qr(r);let{stamp:t,...s}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new S0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!Sn(n.model,A))throw new S0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new cA(`unknown container "${A}"`);let f=e==="canonical"?zu(n,F,s):Vu(F,s);try{let E=e==="canonical"&&t!==void 0?{...f,stamp:t}:f,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&z8(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw Ju(E,A,e,n,F)}}function Ju(x,A,e,r,t){if(x instanceof jt){let s=x.field?Ku(r,t,x.field,e):void 0;return e==="canonical"?s?new S0(`no permission to modify container field \`${s}\``):new S0(`no permission to modify container \`${A}\``):s?new wn(`unknown field name(s): ${s}`):new ki(`no permission to modify '${A}'`)}return x}function Ku(x,A,e,r){if(!A)return e;let t=A.fields.find(n=>n.name===e||n.name.toLowerCase()===e||(n.alias??n.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():kt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function zu(x,A,e){if(!A)return e;let r=kt(x.blueprint??null,A),t=new Map;if(r)for(let[s,n]of r)t.set(n,s);else for(let s of A.fields){let n=s.alias??s.name;t.set(n,n.toLowerCase()),t.set(n.toLowerCase(),n.toLowerCase())}return rv(A,t,e,s=>new S0(`unknown field name(s): ${s}`))}function Vu(x,A){if(!x)return A;let e=new Map;for(let r of x.fields){let t=r.alias??r.name;e.set(t.toLowerCase(),t.toLowerCase()),e.set(t,t.toLowerCase())}return rv(x,e,A,r=>new wn(`unknown field name(s): ${r}`))}var Wu=new Set(["stamp","stamp4","stamp8","datetime"]);function rv(x,A,e,r){let t=new Map(x.fields.map(f=>[(f.alias??f.name).toLowerCase(),f])),s={},n=[],F=[];for(let[f,E]of Object.entries(e)){let u=A.get(f);if(!u){n.push(f);continue}let D=t.get(u);if(D&&Wu.has(D.type)&&!(typeof E=="string"&&_i(E))){F.push(f);continue}s[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new S0(`value(s) of field(s) ${F.join(",")} are not valid`);return s}function Xu(x){let A=x.query.json,e=A!=null&&typeof A=="object"&&!Array.isArray(A)?A:void 0,r=x.request.body;if(!r)return e?{...e}:null;let t=Yu(r);if(t===void 0)throw new S0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function Yu(x){try{return JSON.parse(x)}catch{return}}var tv="x-mt-backfill",nv="pending";async function Pi(x,A,e){let r=x.push?.backfill;if(!(!r||A===void 0||A===null||e===null))try{return await r.call(x.push,{fromMs:e})==="pending"?{[tv]:nv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var Qu=1e3,vn=1e3,sv="20000101",iv="*";async function Zu(x){let A=x.query.json??{};lv(A,["from","until","count","offset","select"]),qr(A);let e=x.ctx,r=EA(x.params[1]),{mapperSelect:t,order:s}=ov(e,r,A.select);Fv(e,r);let n=hn(A.from,sv,"from"),F=hn(A.until,iv,"until");vv(n,F),F!==null&&(F=AD(F));let f=eD(A.count),E=fv(A.offset),u=await Pi(e,A.from,n);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:n,untilMs:F,count:f,offset:E,select:t})).map(m=>av(x,e,r,Ti(m,s))),headers:u}}async function xD(x){let A=x.query.json??{};lv(A,["from","until","offset","select"]),qr(A);let e=x.ctx,r=EA(x.params[1]),t=x.params[2],{mapperSelect:s,order:n}=ov(e,r,A.select);Fv(e,r);let F=hn(A.from,sv,"from"),f=hn(A.until,iv,"until");vv(F,f);let E=fv(A.offset),u=await Pi(e,A.from,F),m=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:f,count:t==="youngest"?-1:1,offset:E,select:s}))[0];return m?{status:200,body:av(x,e,r,Ti(m,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function av(x,A,e,r){return x.apiVersion==="1"?r:Av(A,e,r)}function ov(x,A,e){let r=Z8(e);if(!r)return{mapperSelect:void 0,order:null};let t=Sn(x.model,A);if(!t)return{mapperSelect:r,order:null};let s=Nu(t,r),n=s.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:s}}function Fv(x,A){if(!Sn(x.model,A))throw new S0("timeseries does not exist")}function hn(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return Pr(t)}catch{throw new S0(`attribute '${e}' is not valid`)}}function vv(x,A){if(x!==null&&A!==null&&x>A)throw new S0('E_BAD_REQUEST "from" value must be older than "until"')}function AD(x){let A=H0.msToStamp40(x);return H0.stamp40ToMS(A)>=x&&(A-=1),H0.stamp40ToMS(A)}function eD(x){if(x==null||x==="")return Qu;let A=Number(x);if(!Number.isInteger(A))throw new S0('"count" must be an integer');if(A===0)throw new S0("`count` cannot be 0");if(A<-vn)throw new S0(`"count" must be greater than or equal to -${vn}`);if(A>vn)throw new S0(`"count" must be less than or equal to ${vn}`);return A}function fv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new S0('"offset" must be an integer');if(A<0)throw new S0('"offset" must be greater than or equal to 0');return A}function lv(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new S0(`"${e}" is not allowed`)}var rD=1e5,tD="20000101",nD="*";async function sD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new cA(`unknown container "${e}"`);let s=x.query.json??{};qr(s);let{fromMs:n,untilMs:F}=oD(s);FD(n,F);let f=vD(s),E=fD(s),u=cv(t,s.select)??["stamp"],D=gn(s.from)?await Pi(r,s.from,n):void 0,m=u.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:f,offset:E,select:m.length>0?m:void 0})).map(S=>u.map(P=>P==="stamp"?S.stamp:S[P]??null)),headers:D}}async function iD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,s=t.model.byNameOrAlias(e);if(!s)throw new cA(`unknown container "${e}"`);let n=x.query.json??{};qr(n);let F=cv(s,n.select)??["stamp"],f=aD(n),E=F.filter(m=>m!=="stamp"),D=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:f??null,count:f!==void 0||r==="youngest"?-1:1,select:E.length>0?E:void 0}))[0];return D?{status:200,body:[F.map(m=>m==="stamp"?D.stamp:D[m]??null)]}:{status:200,body:[]}}function aD(x){if(!(!gn(x.until)||x.until==="*"))try{return Pr(String(x.until))??void 0}catch{throw new S0("from or until value invalid")}}function oD(x){let A=gn(x.from),e=gn(x.until);if((!A||!e)&&!qi(x.count))throw new S0("missing or invalid parameters (from and until and/or count)");return{fromMs:gF(A?x.from:tD),untilMs:gF(e?x.until:nD)}}function FD(x,A){if(x!==null&&A!==null&&x>A)throw new S0('"from" value must be older than "until"')}function gF(x){let A=String(x);try{return Pr(A)}catch{throw new S0(`invalid stamp "${A}"`)}}function vD(x){if(!qi(x.count))return rD;if(typeof x.count!="number")throw new S0("invalid parameter count");return x.count}function fD(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new S0("invalid parameter offset");return A}function cv(x,A){if(A==null)return;if(!Array.isArray(A))throw new S0("invalid parameter, select must be an array");let e=A.map(F=>String(F).toLowerCase()),r=e.filter(F=>F.includes(" "));if(r.length>0)throw new S0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],s=new Set(x.fields.filter(F=>!ve(F)).map(F=>(F.alias??F.name).toLowerCase()));s.add("stamp");let n=t.filter(F=>!s.has(F));if(n.length>0)throw new S0(`invalid channel(s) ${n.join(",")}`);return t}function qi(x){return!!x}function gn(x){return typeof x=="string"?x.trim().length>0:qi(x)}var lD="device_id";function cD(x){return async A=>(await $n(A),{status:200,body:await BD(A.ctx,x)})}async function $n(x){let A=EA(x.params[0]),e=await ED(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new cA(`unknown device "${A}"`)}async function ED(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(lD)}async function BD(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=_t(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=$r(H0.stamp40ToMS(JA(e.stamp))),r):{}}function Ni(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function CD(x){return async A=>{await $n(A);let e=DD(A.request.body??null);if(!e)throw new S0("invalid or missing request body");return Ni(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?_t(r.data)??{}:{};return await Mi(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function dD(x){return async A=>(await $n(A),Ni(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await Mi(A.ctx,x,e,{}),{status:204,body:""})}))}function uD(x){return async A=>{await $n(A);let e=EA(A.params[1]);return Ni(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=_t(r.data)??{},s=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===s&&delete t[n];return await Mi(A.ctx,x,r,t),{status:204,body:""}})}}function DD(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}async function Mi(x,A,e,r){let t=V8(JSON.stringify(r),e?.data?.length??0),s=H0.msToStamp40((x.timeSource??yt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:lA(s),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),z8(x,A,t,s)}var Ev={"content-type":"application/json"},pD=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:pu,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:uu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:Du,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:gu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:xD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:Zu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Lu,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Uu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:iD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:sD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Gu,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Hu,checksUid:!0},...bD()];function bD(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},e=Object.entries(x).map(([t,s])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:cD(s),checksUid:!1})),r=Object.entries(A).flatMap(([t,s])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:CD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:dD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:uD(s),checksUid:!1}]);return[...e,...r]}var mD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function jD(x){let A=wi();return e=>Bv(x,e,A)}async function Bv(x,A,e=wi()){try{let[r,t]=yD(A.path),s=kD(t),n=gD(r,x);if(n===null)return Xe(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let f of pD){if(f.method!==F)continue;let E=f.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(f.checksUid&&!hD(x,u[0]))return Xe(404,"E_NOT_FOUND","unknown site");let D=/^\/api\/([12])\//.exec(n)?.[1]??"1",m=await f.handler({request:A,params:u,query:s,ctx:x,session:e,apiVersion:D});return SD(m)}return Xe(404,"E_NOT_FOUND","not found")}catch(r){return dv(r)}}function hD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&EA(A)===x.siteUid}function gD(x,A){let e=mD.exec(x);if(!e)return x;let r=EA(e[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===r||(A.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function yD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function kD(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&_D(A,e);return A}function _D(x,A){let e=A.indexOf("="),r=EA(e<0?A:A.slice(0,e)),t=e<0?"":EA(A.slice(e+1));r==="json"?x.json=wD(t):x.params[r]=t}function wD(x){try{return JSON.parse(x)}catch{throw new S0("request supplied data which is not json formatted ")}}function SD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...Ev,...x.headers},body:A}}function Cv(x,A){return{status:x,headers:{...Ev},body:JSON.stringify(A)}}function dv(x){return x instanceof S0||x instanceof hi||x instanceof Bi?Xe(400,"E_BAD_REQUEST",x.message):x instanceof wn||x instanceof jt?Xe(403,"E_FORBIDDEN",x.message):x instanceof ki?Xe(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof cA||x instanceof ge?Xe(404,"E_NOT_FOUND",x.message):Cv(500,{err:x instanceof Error?x.message:String(x)})}function Xe(x,A,e){return Cv(x,{err:`${A} ${e}`})}function $D(x,A){let e=A.apmId??"local",r=A.version??1;return{uid:A.siteUid,name:A.name??A.siteUid,customer_id:e,customer_uid:e,app:{apmid:e,version:String(r)},device:{device_id:A.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:x.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}});var s7={};al(s7,{APM:()=>p0,DDE:()=>vA,DDE_Core:()=>G0,DFILES:()=>Ct,DLO:()=>Bt,DefaultFiles:()=>r0,Dependencies:()=>Z0,DevError:()=>Ex,DevExitCode:()=>St,DevSession:()=>Ar,DeviceProfiles:()=>Jt,Diagnostics:()=>tt,ENV:()=>gs,Globals:()=>ux,Helper:()=>b0,HttpMethod:()=>ra,Library:()=>Oe,Log:()=>oe,Manifest:()=>z,MyDatanetClient:()=>Hn,Package:()=>gx,Registry:()=>tx,build:()=>e7,buildDevelopmentInstallInfo:()=>lf,dev:()=>of,generateDevApmId:()=>ta,install:()=>A7,pack:()=>n7,publish:()=>t7});module.exports=ol(s7);var fx=require("vscode-uri");var kr=require("vscode-uri");var Fl=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function Rt(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^Fl[(e^x[r])&255];return(e^-1)>>>0}var o7=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),F7=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var b0;(_=>{function x(h,S){let[P,N]=S,{line:R,col:O}=h.linePos(P);return{line:Number(R)-1,startCharacter:O-1,endCharacter:O+(N-P)}}_.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(h){return Rt(A.encode(h)).toString(16)}_.generateHashForLibraryName=e;function r(h){return Rt(A.encode(h)).toString(16)}_.generateHashForFilePath=r;function t(h){return Rt(h).toString(16).toUpperCase().padStart(8,"0")}_.generateCRC32ForFileContent=t;function s(h){try{let S=null;return h?.type==="Buffer"?S=Uint8Array.from(h.data):S=h,new TextDecoder("utf8").decode(S)}catch{return""}}_.convertBlobToString=s;function n(h=""){return h.replace(/\r\n|\n\r|\r/g,`
2198
+ `).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||OC(A,t)||t.includes("=")&&GC(A,t)}return RC(A.containers,A.splits)}var F8=null,HC=4;function $r(x){let A=new Date(x),e=(r,t)=>r.toString().padStart(t,"0");return e(A.getUTCFullYear(),4)+e(A.getUTCMonth()+1,2)+e(A.getUTCDate(),2)+e(A.getUTCHours(),2)+e(A.getUTCMinutes(),2)+e(A.getUTCSeconds(),2)+e(A.getUTCMilliseconds(),3)}function Pr(x){let A=x.trim();if(A==="*")return F8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,D,m)=>{let _=A.slice(u,u+D);return parseInt(_.length?_.padEnd(D,"0"):m,10)},r=parseInt(A.slice(0,HC),10),t=A.length>=6?e(4,2,"01"):1,s=A.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),v=e(12,2,"00"),E=e(14,3,"000");return Date.UTC(r,t-1,s,n,F,v,E)}var jt="NAN",JC="%HEX%",KC=65535,ui=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function _n(x){return(x.alias??x.name).toLowerCase()}function wn(x){return x==="string"}function Di(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function v8(x){return(x.editmask??"").toUpperCase()===JC}function zC(x,A){return A===void 0||!Number.isFinite(x)?x:pi(x,A)}function pi(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function VC(x,A){if(!Number.isFinite(x)||x===0)return x;let e=Math.abs(x),r=Math.floor(Math.log10(e));return 10**(r+1)<=e?r+=1:10**r>e&&(r-=1),pi(x,A-1-r)}function WC(x){return x==="floatm16"||x==="f32"||x==="f64"}function XC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(WC(x.type)?9:0),r=pi(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return VC(r,t)}function bn(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,s=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=s),s<<=1n),e>>=1n,r>>=1n;return Number(t)}function l8(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),s=BigInt.asUintN(64,BigInt(Math.trunc(e))),n=1n;for(;s!==0n;)s&1n&&(r=t&1n?r|n:r&~n,t>>=1n),s>>=1n,n<<=1n;return Number(r)}var YC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function mn(x){return!!x.bitmask&&YC.has(x.type)}var f8=255,c8=254,E8=253,B8=252,C8=251,QC=207,bi=65535,jn=65534,mi=65533,ji=65532,hi=65531;function ZC(x){switch(x){case f8:return bi;case c8:return jn;case E8:return mi;case B8:return ji;case C8:return hi;default:return x<=31?x:x>QC?jn:(x&15|16)<<(x>>4)-1}}function xd(x){switch(x){case bi:return f8;case jn:return c8;case mi:return E8;case ji:return B8;case hi:return C8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var hn=1023,Zs=31,d8=127,Ps=8388607,Ad=255,xi=15,ed=-14,uF=15;function u8(x){let A=(x&hn)<<13,e=(x&31744)>>10;if(e===Zs)return p8(1024-(x&hn));e!==0&&(e=e-xi+4+d8);let r=(A|e<<23)>>>0;x&32768&&(r=(r|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,r),t.getFloat32(0)}function D8(x){if(typeof x=="string"||Number.isNaN(x))return KC;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&Ps)+4096,s=(t>Ps?1:0)+(e>>>23&Ad),n=(t&Ps)>>>13;return s!==0&&(s=s-d8-4,s<ed?(n=0,s=0):s>uF?(n=hn,s=uF+xi):s=s+xi),r|s<<10|n}var rd=["OF","UF","OL","SC"],Ai={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:bi,OF:jn,UF:mi,OL:ji,SC:hi}},td={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},zx={NAN:1,OF:2,UF:3,OL:4,SC:5},nd=new Set(["u8","u16","u32","ufm8"]);function sd(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function gi(x){let A=x.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(A))return null;let e=Number(A);return Number.isFinite(e)?e:null}function yi(x,A,e){switch(x){case"u8":return A.getUint8(e);case"s8":return A.getInt8(e);case"u16":return A.getUint16(e,!1);case"s16":return A.getInt16(e,!1);case"u32":return A.getUint32(e,!1);case"s32":return A.getInt32(e,!1);case"s64":return Number(A.getBigInt64(e,!1));case"f32":return A.getFloat32(e,!1);case"f64":return A.getFloat64(e,!1);case"floatm16":return u8(A.getUint16(e,!1));case"ufm8":return ZC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function p8(x){switch(x){case zx.OF:return"OF";case zx.UF:return"UF";case zx.OL:return"OL";case zx.SC:return"SC";default:return jt}}var DF=[["NAN",zx.NAN],["OF",zx.OF],["UF",zx.UF],["OL",zx.OL],["SC",zx.SC]];function id(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?zx.NAN:(r=r&4194304?8388608-r:r&255,r===0?zx.NAN:r)}function ad(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?zx.NAN:r}function od(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);mn(x)&&(t=BigInt(bn(Number(t),x.bitmask)));let s=Ai.s64;return DF.find(([n])=>t===BigInt(s[n]))?.[1]??0}let e=Ai[x.type];if(!e)return 0;let r=yi(x.type,A,x.byteofs);return mn(x)&&(r=bn(r,x.bitmask)),DF.find(([t])=>r===e[t])?.[1]??0}function b8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&Zs)===Zs?1024-(e&hn):0}case"f32":return id(A,x.byteofs);case"f64":return ad(A,x.byteofs);default:return od(x,A)}}function m8(x,A){let e=yi(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(mn(x)&&(e=bn(e,x.bitmask)),e*x.vscale+x.vofs)}function Fd(x,A){let e=b8(x,A);if(e!==0)return p8(e);let r=m8(x,A);return Number.isNaN(r)?jt:XC(x,r)}function vd(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(wn(x.type)||Di(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return b8(x,e)!==0?NaN:m8(x,e)}function ld(x,A){if(v8(x)){let e="";for(let r=0;r<x.size;r++)e+=A.getUint8(x.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return H0.cp1252Unpack(A,x.byteofs,x.size)}var j8=25569,h8=864e5;function fd(x){return(x-j8)*h8}function cd(x){return x/h8+j8}function Ed(x,A){if(x.type==="datetime")return $r(fd(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return $r(H0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),$r(H0.stamp40ToMS(e))}var Bd=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Cd(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function dd(x){let A=x.default;if(A===void 0)return;if(wn(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===jt)return jt;if(Bd.has(x.type))return Cd(e,0);let r=gi(e);return r!==null?r:A}function ud(x,A,e){return x.byteofs+x.size>e?dd(x):wn(x.type)?ld(x,A):Di(x.type)?Ed(x,A):Fd(x,A)}function ei(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)le(t)||mt(t.type)||(r[_n(t)]=ud(t,e,A.byteLength));return r}function Dd(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===jt||A==="")return{kind:"sentinel",state:"NAN"};let e=rd.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=gi(A);return r!==null?{kind:"value",physical:r}:pF(x)}return pF(x)}function pF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?gi(A):null)??0}}function ri(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,td[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|zx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(zx[e]),!1);default:break}let r=Ai[x.type]?.[e];if(r===void 0)throw new Error(`?ddeCodec.non-numeric-type."${x.type}"`);if(x.type==="s64")return A.setBigInt64(x.byteofs,BigInt(r),!1);g8(x,A,Number(r))}function pd(x,A,e){if(x.vscale===0)return;let r=(e-x.vofs)/x.vscale;switch(x.type){case"f32":return A.setFloat32(x.byteofs,r,!1);case"f64":return A.setFloat64(x.byteofs,r,!1);case"floatm16":return A.setUint16(x.byteofs,D8(r),!1);default:break}if(Number.isNaN(r))return ri(x,A,"NAN");if(!Number.isFinite(r))return ri(x,A,"OF");let t=r;nd.has(x.type)&&t<0&&(t=0),g8(x,A,sd(t))}function g8(x,A,e){if(mn(x)){let r=yi(x.type,A,x.byteofs);e=l8(r,e,x.bitmask)}bd(x.type,A,x.byteofs,e)}function bd(x,A,e,r){switch(x){case"u8":return A.setUint8(e,r);case"s8":return A.setInt8(e,r);case"u16":return A.setUint16(e,r,!1);case"s16":return A.setInt16(e,r,!1);case"u32":return A.setUint32(e,r,!1);case"s32":return A.setInt32(e,r,!1);case"s64":return A.setBigInt64(e,BigInt(r),!1);case"ufm8":return A.setUint8(e,xd(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function md(x,A,e){let r=String(e);if(v8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${_n(x)}"`);for(let s=0;s<x.size;s++){let n=s*2<t.length?parseInt(t.substr(s*2,2),16):0;A.setUint8(x.byteofs+s,n)}return}H0.cp1252Pack(A,x.byteofs,x.size,r)}function jd(x,A,e){let r=Pr(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${_n(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,cd(r),!1);return}let t=H0.msToStamp40(r);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function hd(x,A,e){if(wn(x.type))return md(x,A,e);if(Di(x.type))return jd(x,A,e);let r=Dd(x,e);switch(r.kind){case"skip":return;case"sentinel":return ri(x,A,r.state);case"value":return pd(x,A,r.physical)}}function ti(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=new Map(x.fields.filter(n=>!le(n)&&!mt(n.type)).map(n=>[_n(n),n]));for(let[n,F]of Object.entries(A)){let v=s.get(n.toLowerCase());if(!v)throw new ui(n);hd(v,t,F)}return r}var bF=99,gd=256,ye=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},ht=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),A0(this,"container",x),A0(this,"field",A),this.name="DdeWriteForbiddenError"}},ki=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function qs(x){return(x.alias??x.name).toLowerCase()}var yd=class{constructor(x,A,e=kt){A0(this,"model",x),A0(this,"storage",A),A0(this,"timeSource",e)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=Dt(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=ei(await this.resolveScaleRefs(A),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ye(x);let r=Dt(e);if(r===null)throw new ye(x);if(e.edit===bF)throw new ht(e.name);let{stamp:t,...s}=A;this.assertFieldsWritable(e,s);let n=await this.storage.getRowForTag(r),F=ti(await this.resolveScaleRefs(e),s,n?.data??null),v=H0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),E=cA(v);return await this.storage.replaceUtoRow({tag:r,stamp:E,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:E,stamp40:v,data:F,devicePushable:a8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ye(x);let r=Dt(e);if(r===null)throw new ye(x);let{stamp:t,...s}=A,n=ti(await this.resolveScaleRefs(e),s,null),F=H0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:cA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return Pr(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ye(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new ye(x);let t=Math.abs(A.count),s=A.offset??0,n=this.buildSelectSet(e,A.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,s+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:n})).slice(s,s+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((e,r)=>x[r]===e)}async collectMatched(x,A,e,r){let t=[];if(e<=0)return t;let s=Math.max(e,gd);for(let n=0;;n+=s){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:s,offset:n});for(let v of F)if(v.data&&this.matchesSplit(v.data,A)&&(t.push(this.recordFromRow(x,v,r.selectSet)),t.length>=e))return t;if(F.length<s)return t}}async readTimeseriesEdge(x,A,e){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(x,A,e){let r=ei(x,A.data),t={stamp:this.rowStamp(A)};for(let[s,n]of Object.entries(r))s!=="stamp"&&(!e||e.has(s))&&(t[s]=n);return t}rowStamp(x){return $r(H0.stamp40ToMS(KA(x.stamp)))}boundHex(x){if(x!=null)return cA(H0.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(r=>r.vscaleRef||r.vofsRef))return x;let A=new Map,e=[];for(let r of x.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,A,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,A,r.vofs):r.vofs})}return{...x,fields:e}}async resolveRef(x,A,e){if(!/^config[0-9a-f]$/i.test(x.container))return e;let r=this.referencedField(x);if(!r)return e;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let s=A.get(t);if(!s)return e;let n=vd(r,s);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>qs(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=Dt(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!le(r)&&!mt(r.type)).map(r=>[qs(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===bF)throw new ht(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!le(t)&&!mt(t.type)).map(t=>qs(t))),r=new Set;for(let t of A){let s=t.toLowerCase();if(s!=="stamp"){if(!e.has(s))throw new ki(t);r.add(s)}}return r}},kd=new Set(["$titles","$meta"]);function _d(x){let A=x;if(typeof x=="string")try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function ni(x,A){let e=A.toLowerCase();if(kd.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[s,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(s.toLowerCase(),F)}return t}function y8(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let s=A?.get(r.toLowerCase());e[s??r]=t}return e}function _t(x,A){if(!x)return null;let e=ni(x,A.name);return e||(A.alias?ni(x,A.alias):null)}var wd=require("events"),R0="[OfflineSyncManager]",Sd=500,$d="site_info",Td=new Set(["local-data-interface.json"]);function Mx(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function Pd(x){let A=Dn(x);return!!(x&2)||A!==0&&A!==65}function mF(x){return x.filter(A=>(A.filename===Sr||A.filename===ci)&&A.outcome==="download").map(A=>A.filename)}var Je="skip-equal",wr="skip-device-readonly",Ns="delete",he="error",Is="upload",Ms="uploading-utos",jF="downloading-utos",Fn="fetching-device-state",Ls="uploading-files",vn="downloading-files",hF="executing-change-requests",gF="executed",qd="error",Rs="skip-old-stamp",Nd=class extends wd.EventEmitter{constructor(x,A,e){super(),A0(this,"utoMaster",x),A0(this,"storage",A),A0(this,"logger",e)}emitProgress(x,A,e,r,t){let s={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",s)}async uploadHistoricTag(x,A,e,r,t){try{let s=await this.storage.getRowForTag(x),n=0,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>({tag:x,stamp:cA(u.stamp40),flags:s?.flags??0,site_related:s?.site_related??0,data:u.data}));await this.storage.insertHistoricRows(E),n+=E.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,Sd,F),this.logger?.info(`${R0} historic upload tag=0x${x.toString(16)} +${n} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(s){return this.logger?.error(`${R0} historic upload error tag=0x${x.toString(16)}: ${s}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${R0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:Je,dbStamp40:e,deviceStamp40:r};let s=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:cA(t.stamp),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${R0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${R0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(Ms,null,0,t);let s=0;for(let n of x){Mx(r);let F=A.get(n),{tagInfo:v,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(Ms,v?.sTag??`0x${n.toString(16)}`,s,t),!v||u===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:E,deviceStamp40:u});else if(!(!v.flags.up||u<=E)){let D=v.sTag,m=s,_=v.historic?await this.uploadHistoricTag(n,v,E,u,h=>{this.emitProgress(Ms,D,m,t,{recordsReceived:h})}):await this.uploadSingleTag(n,v,E,u);e.set(n,_)}++s}}async pullFileFromDevice(x,A,e,r,t,s){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(Ls,x,s,t,{bytesTransferred:E})}),v=fi(F);if(v!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${v.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:cA(n),crc:A.crc32,size:F.byteLength,flags:A._flags,flags_int:r,data:F}),{filename:x,outcome:Is,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${R0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:he,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(x,A,e,r,t,s,n,F){let v=A.stamp;if(v>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):s?this.pullFileFromDevice(x,A,r,t,n,F):void 0;if(v===r&&this.fileContentMatches(A,e))return{filename:x,outcome:Je,dbStamp40:r,deviceStamp40:v}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:cA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:Je,dbStamp40:r,deviceStamp40:t}}catch(s){return this.logger?.error(`${R0} file upload error ${x}: ${JSON.stringify(s)}`),{filename:x,outcome:he,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,s,n){let F=A.stamp;if(F!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,s,n):{filename:x,outcome:wr,dbStamp40:r,deviceStamp40:F}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),s=!!(A._flags&1);if(!t)return s?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let n=KA(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,n,t.flags_int,s,e,r):this.decideNonSystemUpload(x,A,t,n,s,e,r)}pullIfReadable(x,A,e,r,t,s,n){return x?this.pullFileFromDevice(A,e,r,t,s,n):void 0}async decideNonSystemUpload(x,A,e,r,t,s,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,x,A,r,F,s,n):this.decideUploadBySyncLogic(x,A,e,r,t,s,n)}async decideUploadBySyncLogic(x,A,e,r,t,s,n){let F=e.flags_int,v=Dn(F);if(v===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,F,s,n);if(v===1)return this.autoSyncUploadFile(x,A,e,r,F,t,s,n);if(v===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,F,s,n):void 0;if(v!==33)return this.mirrorUploadFile(x,A,e,r,t,s,n)}async uploadFiles(x,A,e,r){let t=Object.entries(x),s=t.length;this.emitProgress(Ls,null,0,s);let n=0;for(let[F,v]of t){if(Mx(r),!(F===ci||F===Sr&&!e)){let u=await this.decideFileUpload(F,v,s,n);u&&A.set(F,u)}this.emitProgress(Ls,F,++n,s)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,e,r){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,e),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${R0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(x,A,e,r,t){if(e===r&&!t.has(x)){let s=A.flags.up?Je:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:s,dbStamp40:e,deviceStamp40:r});return}if(e>r){let s=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:wr,dbStamp40:e,deviceStamp40:r};t.set(x,s)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(jF,null,0,t);let s=0;for(let n of x){Mx(r);let{tagInfo:F,dbStamp40:v,deviceStamp40:E}=A.get(n);F&&E!==null&&!F.historic&&await this.processDownloadTag(n,F,v,E,e),this.emitProgress(jF,F?.sTag??`0x${n.toString(16)}`,++s,t)}}async sendFileToDevice(x,A,e,r,t){let s=x.data.byteLength,n=F=>{if(F!==null){let v=Math.round(s*parseInt(F,10)/100);this.emitProgress(vn,x.filename,t,r,{bytesTransferred:v,bytesTotal:s})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,H0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${R0} file download error ${x.filename}: ${F}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let s=A?.stamp??0,n=KA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===s?void 0:{filename:x.filename,outcome:Je,dbStamp40:n,deviceStamp40:s};if(!(!t&&n<s))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:wr,dbStamp40:n,deviceStamp40:s}:this.sendFileToDevice(x,n,s,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue($d);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${R0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),s=t.filter(D=>D.flags&8),n=t.filter(D=>!(D.flags&8)),F=[...s,...n].filter(D=>D.filename),v=Object.entries(x).filter(([,D])=>D._flags&4).map(([D])=>D),E=F.length;this.emitProgress(vn,null,0,E);let u=0;for(let D of F){if(Mx(r),e&&D.filename===Sr){this.emitProgress(vn,D.filename,++u,E);continue}let m=D.filename===Sr&&!e,_=await this.decideFileDownload(D,x[D.filename],A.get(D.filename),v,m,E,u);_&&A.set(D.filename,_),this.emitProgress(vn,D.filename,++u,E)}}async decideFileDownload(x,A,e,r,t,s,n){return A!==void 0?this.decideDownloadExisting(x,A,e,t,s,n):this.decideDownloadMissing(x,r,s,n)}async decideDownloadExisting(x,A,e,r,t,s){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,s,r);let n=x.flags_int;if(n&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(n&4))return this.pushToDevice(x,A,t,s)}async pushToDevice(x,A,e,r){let t=A.stamp,s=KA(x.stamp),n=this.wantDownloadPush(x,A,s,t);if(n==="match")return{filename:x.filename,outcome:Je,dbStamp40:s,deviceStamp40:t};if(n!=="none"&&!(s===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,s,t,e,r):{filename:x.filename,outcome:wr,dbStamp40:s,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let s=this.fileContentMatches(A,x),n=Dn(t);return n===33||n===1&&e>=r?s?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=KA(x.stamp);if(!(e&&(e.outcome===Is||e.outcome===he))){if(!(A._flags&2))return{filename:x.filename,outcome:wr,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Ns,dbStamp40:t,deviceStamp40:r}}catch(s){return this.logger?.error(`${R0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:he,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,s=KA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Ns,dbStamp40:s,deviceStamp40:null}}catch(n){return this.logger?.error(`${R0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:he,dbStamp40:s,deviceStamp40:null}}if(!(x.flags&12)&&Pd(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,s,0,e,r)}hasMatchingNode(x,A){return A.some(e=>e.slice(0,-1)===x.slice(0,e.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${R0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),e=new Set(Object.keys(A)),r=await this.storage.getFiles(),t=new Map(r.map(s=>[s.filename,s]));for(let[s,n]of Object.entries(A))Mx(x),await this.reconcileDeviceFile(s,n,t.get(s)??null);for(let s of r)Mx(x),e.has(s.filename)||await this.dropRowMissingFromDevice(s)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${R0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:cA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e?.flags_int??16,data:this.keepBlob(x,r)?e?.data??null:null};e&&this.fileRowMatches(e,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||Td.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${R0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Mx(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${R0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${R0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${R0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),e=A.serialNumber}if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${R0} DB device_id "${e}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let e=0;e<x.utos.length;e++){let r=x.utos[e];A.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),e=new Set(A);for(let[r,t]of x)t.historic&&!e.has(r)&&A.push(r);return A}async buildTagStampCache(x,A,e){let r=new Map;for(let t of x){let s=A.get(t),n=await this.storage.getLatestStampForTag(t),F=n?KA(n):0,v=s&&s.index<e.stamps.length?e.stamps[s.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:v,tagInfo:s})}return r}async executeChangeRequests(x,A,e,r,t,s){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),v=F.size;if(this.emitProgress(hF,null,0,v),v===0)return;let E=new Set,u=0;for(let[D,m]of F){Mx(s);let _=x.get(D),h=_?.sTag??`0x${D.toString(16)}`;this.emitProgress(hF,h,u,v),await this.executeChangeRequestTag(D,h,_,m,A,r,t,E),++u}E.size>0&&await this.repullExecutedTags(E,x,e,s)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:KA(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,s,n,F){if(!e){this.pushChangeResults(n,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,x,A,r,"skip-unsupported");return}let v=e.index<t.stamps.length?t.stamps[e.index]:0,E=r.filter(D=>D.stamp40<=v),u=r.filter(D=>D.stamp40>v);this.pushChangeResults(n,x,A,E,Rs),u.length>0&&await this.coalesceAndSend(x,A,e,u,s,n,F)}async coalesceAndSend(x,A,e,r,t,s,n){let F=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===he||!F||!F.data){this.pushChangeResults(s,x,A,r,"error");return}let v=this.resolveSetObject(F.data,r,A);if(v===null){this.pushChangeResults(s,x,A,r,"error");return}if(Object.keys(v).length===0){this.pushChangeResults(s,x,A,r,"skip-no-change");return}let E=r[r.length-1].stamp40,u=await this.utoMaster.sendSetValue(x,JSON.stringify(v),E);u.outcome==="ok"||u.outcome==="stamp"?(n.add(x),this.pushChangeResults(s,x,A,r,gF,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${R0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(s,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${R0} change-request error ${A} (result=${u.resultCode})`),this.pushChangeResults(s,x,A,r,"error",u.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(H0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${R0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let s=JSON.parse(t.json);if(!this.isPlainRecord(s))throw new Error(`change-request JSON is not an object on ${e}`);for(let[n,F]of Object.entries(s)){let v=this.resolveChangeField(x[n],F,n,e);v.apply&&(r[n]=v.value,x[n]=v.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:s}=A;return this.resolveBitwiseOp(x,t,s,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${R0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${R0} change-request op "${A}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:e}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${R0} change-request op "${A}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|e:x&e}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,e,r,t,s){for(let n of r)x.push({tag:A,sTag:e,stamp40:n.stamp40,user:n.user,outcome:t,resultCode:s})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(s){this.logger?.warn(`${R0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${s}`)}for(let s of x)Mx(r),await this.repullExecutedTag(s,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${R0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let s=await this.storage.getRowForTag(x),n=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:cA(n),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let F=r.get(x);if(F){let v=A.get(x),E=e&&v&&v.index<e.stamps.length?e.stamps[v.index]:n;F.dbStamp40=n,F.deviceStamp40=E}this.logger?.info(`${R0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${R0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],s=mF(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:s.length>0,rebootFilesDeployed:s,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===Je||n.outcome==="skip-db-readonly"||n.outcome===wr).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===Is).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===Ns).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===gF).length,totalErrors:r.filter(n=>n.outcome===he).length+t.filter(n=>n.outcome===he).length+e.filter(n=>n.outcome===qd).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Mx(A),this.emitProgress(Fn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${R0} requestStamps returned null`);this.emitProgress(Fn,"stamps",1,3);let s=await this.utoMaster.requestFileList();this.emitProgress(Fn,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(Fn,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),v=new Map,E=new Map,u=[],D=await this.isAppInDevPhase();return Mx(A),await this.uploadUtoTags(n,F,v,A),Mx(A),await this.uploadFiles(s,E,D,A),Mx(A),await this.executeChangeRequests(r,t,F,v,u,A),Mx(A),await this.downloadUtoTags(n,F,v,A),Mx(A),await this.downloadFiles(s,E,D,A),Mx(A),mF([...E.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(v,E,u)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${R0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${R0} requestStamps returned null`);let s=r.get(x),n=s?.sTag??`0x${x.toString(16)}`,F=A.map(m=>({stamp40:m.stamp40,user:"",json:m.json})).sort((m,_)=>m.stamp40-_.stamp40),v=new Map,E=[],u=new Set;return await this.executeChangeRequestTag(x,n,s,F,t,v,E,u),u.size>0&&await this.repullExecutedTags(u,r,new Map,void 0),E.find(m=>m.outcome!==Rs)?.outcome??Rs}},Id=require("events"),Md=require("events"),Ld=require("events"),Rd=5e3,_i=class k8 extends Ld.EventEmitter{constructor(A=zA){super(),A0(this,"logger",A),A0(this,"ws",null),A0(this,"bridgeTransport",null),A0(this,"bridgeSignal"),A0(this,"bridgeResolve",null),A0(this,"bridgeReject",null),A0(this,"serverMessageCount",0),A0(this,"settled",!1),A0(this,"abortHandler",null),A0(this,"connectTimeout"),A0(this,"writeQueue",[]),A0(this,"isProcessingQueue",!1),A0(this,"queueAborted",!1),A0(this,"queueDrainPromise",Promise.resolve()),A0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,e){return`wss://${A}/uto/1/sync/${e}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await e8(this.bridgeTransport,A)}catch(e){let r=e instanceof Error?e.message:String(e);this.logger.error(`Error writing to transport: ${r}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,e){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(e))}attachWebSocketHandlers(A,e){let r=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${e}`),this.transportUnsubscribe=this.bridgeTransport.onData(r),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${e}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${e})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,e,r,t){return new Promise((s,n)=>{if(t?.aborted){n(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=s,this.bridgeReject=n;let F=k8.buildSyncUrl(e,r);this.logger.info(`Opening WebSocket: ${F}`);let v=new WebSocket(F);v.binaryType="arraybuffer",this.ws=v,this.connectTimeout=setTimeout(()=>{v.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),v.close(),this.settle("reject",new Error("WebSocket connection timeout")))},Rd),this.attachWebSocketHandlers(v,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},_8="https://lic.mydatanet.at/api/2/";async function w8(x,A=_8){let e=`${A}devices/${x}/assignment`,r=await fetch(e);if(!r.ok)throw new Error(`Failed to get device assignment: ${r.status} ${r.statusText}`);return r.json()}var S8=class extends Md.EventEmitter{constructor(x=zA){super(),A0(this,"logger",x)}async execute(x,A,e,r){let t=e;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await w8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let s=new _i(this.logger);s.on("wsConnected",()=>this.emit("wsConnected")),s.on("wsClosed",(F,v)=>this.emit("wsClosed",F,v)),s.on("wsError",F=>this.emit("wsError",F)),s.on("serverMessage",F=>this.emit("serverMessage",F));let n=await s.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+n.serverMessageCount+")"),{serverMessageCount:n.serverMessageCount}}},Od=require("events"),$8="Operation aborted";function Gd(x){return x instanceof Error?x.message:String(x)}function Os(x){if(x?.aborted)throw new Error($8)}var T8=class extends Od.EventEmitter{constructor(x,A=zA){super(),A0(this,"atHandler",x),A0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:n=>this.atHandler.queryMntServerConfig(n),initiateSync:n=>this.atHandler.initiateMntSync(n)},{name:"mdn",queryServer:n=>this.atHandler.queryMdnServerConfig(n),initiateSync:n=>this.atHandler.initiateMdnSync(n)}],s={};for(let n of t)try{s[n.name]=await this.runSyncPhase(n,x,A,r)}catch(F){if(r?.aborted)throw new Error($8);let v=`${n.name.toUpperCase()} sync phase failed: ${Gd(F)}`;throw this.logger.error(v),new Error(v)}return this.logger.info(`Debug sync completed (mntMessages=${s.mnt}, mdnMessages=${s.mdn})`),{mntServerMessageCount:s.mnt,mdnServerMessageCount:s.mdn}}async runSyncPhase(x,A,e,r){Os(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let s=await x.queryServer(r);this.logger.info(`${t} server domain: ${s}`),Os(r),await x.initiateSync(r),Os(r);let n=await this.syncWithServer(A,s,e,r);return this.logger.info(`${t} phase completed (serverMessages=${n.serverMessageCount})`),n.serverMessageCount}async syncWithServer(x,A,e,r){let t=new _i(this.logger),s=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let n=this.atHandler.createConCloseMonitor(()=>{s=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let F=await t.bridge(x,A,e,r);return s?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),F}finally{n()}}},Ud=class extends Id.EventEmitter{constructor(x,A,e=zA){super(),A0(this,"syncTransport",x),A0(this,"logger",e),A0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(e){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(e instanceof Error?e.message:String(e))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(e){throw this.emit("syncError",e),e}}async syncLegacy(x){let A=new S8(this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let r={mode:"legacy",serverMessageCount:(await A.execute(this.syncTransport,x.serialNumber,x.serverUrl,x.signal)).serverMessageCount};return this.emit("syncComplete",r),r}async syncWithDebug(x){let A=new T8(this.atHandler,this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let e=await A.execute(this.syncTransport,x.serialNumber,x.serverUrl??"",x.signal),r={mode:"debug",serverMessageCount:e.mntServerMessageCount+e.mdnServerMessageCount,mntServerMessageCount:e.mntServerMessageCount,mdnServerMessageCount:e.mdnServerMessageCount};return this.emit("syncComplete",r),r}dispose(){}},Hd=require("events"),kx={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},U0={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},Kx=1e4,P8=9e4,q8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function N8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var Ke="Operation aborted",Ox=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},wi=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},Jd=class extends Hd.EventEmitter{constructor(x,A=zA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new Bi("AtCommandHandler")),A0(this,"bufferState",N8()),A0(this,"responseCallback",null),A0(this,"decoder",new TextDecoder),A0(this,"dataHandler"),A0(this,"disposeTransportListener"),A0(this,"isDisposed",!1),A0(this,"activeAbort",null),A0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=Kx,s)=>this.executeSendAndWait(e,r,t,s),sendRaw:(e,r=Kx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(kx.MNT_CFG,U0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(kx.MDN_CFG,U0.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new Ox;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&e&&A.removeEventListener("abort",e)}}makeResponseChecker(x,A,e,r){let t=x instanceof RegExp;return s=>{if(x!==U0.ERROR&&s.includes(U0.ERROR)){A(),r(new wi);return}let n=!1,F=s;if(t){let v=s.match(x);v&&(n=!0,F=v[0])}else n=s.includes(x);if(n){A(),e(F);return}s.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,s)=>{if(this.isDisposed){s(new Ox);return}if(r?.aborted){s(new Error(Ke));return}x&&(this.bufferState.buffer="");let F=A instanceof RegExp?A.source:A,v={cleanup:()=>{}},E=setTimeout(()=>{v.cleanup(),s(new Error(`Timeout waiting for response: ${F}`))},e),u=()=>{v.cleanup(),s(new Error(Ke))};v.cleanup=this.makeCleanup(E,r,u),r&&r.addEventListener("abort",u);let D=this.makeResponseChecker(A,v.cleanup,t,s);this.responseCallback=D,this.activeAbort=()=>{v.cleanup(),s(new Ox)},!x&&this.bufferState.buffer&&D(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(m=>{v.cleanup(),s(m)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ox);return}this.bufferState.buffer="";let t=setTimeout(()=>{s(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),s=this.makeCleanup(t);this.activeAbort=()=>{s(),r(new Ox)},this.responseCallback=n=>{q8.test(n)&&(s(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(n=>{s(),r(n)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Ox);return}if(e?.aborted){t(new Error(Ke));return}this.bufferState.buffer="";let s={cleanup:()=>{}},n=setTimeout(()=>{s.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},Kx),F=()=>{s.cleanup(),t(new Error(Ke))};s.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let v=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{s.cleanup(),t(new Ox)},this.responseCallback=E=>{let u=E.match(v);if(u){s.cleanup();let D=u[1].trim();this.logger.info(`Server config ${A}: ${D}`),r(D);return}E.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(E=>{s.cleanup(),this.logger.error(`Failed to send ${A} command: `+(E instanceof Error?E.message:String(E))),t(E)})})}async sendAndWait(x,A,e=Kx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=Kx){return this.withAtLock(e=>e.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(e=>e.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(kx.MNT_SYNC,U0.OK,Kx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(kx.MDN_SYNC,U0.OK,Kx,x),await this.executeSendAndWait(null,U0.SYNC_START,Kx,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new Ox;if(A?.aborted)throw new Error(Ke);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${kx.COMPANION_CERT}=${r}`,U0.OK,Kx,A),s=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(s,r-n),v=e.slice(n,n+F);await this.executeSendAndWait(`${kx.COMPANION_CERT}=${F},${n},${v}`,U0.OK,Kx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ox);return}if(A?.aborted){r(new Error(Ke));return}this.bufferState.buffer="";let t={cleanup:()=>{}},s=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},Kx),n=()=>{t.cleanup(),r(new Error(Ke))};t.cleanup=this.makeCleanup(s,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Ox)},this.responseCallback=v=>{let E=v.match(U0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(v.includes(U0.OK)){t.cleanup(),e({success:!0});return}v.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${kx.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(v=>{t.cleanup(),r(v)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(kx.COMPANION_CERT_TEST,U0.OK,Kx,x),!0}catch(A){if(A instanceof Ox)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(kx.CON_CLOSE,U0.CON_CLOSE,Kx,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",e=r=>{A+=r,A.includes(U0.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},I8=(x=>(x[x.FORMAT=1]="FORMAT",x[x.SIGNATURE=2]="SIGNATURE",x[x.EXPIRED=3]="EXPIRED",x[x.NO_MDN_PUBKEY=4]="NO_MDN_PUBKEY",x[x.BUSY=5]="BUSY",x[x.INTERNAL=6]="INTERNAL",x))(I8||{}),Kd=require("events"),Gs="requesting-cert",Us="cert-revoked",M8=class si extends Kd.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??un,{signal:r,atHandler:t}=A,s=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),s();let n=await this.loadOrGenerateKeypair(A.storage),F=await A.storage.getCertificate(A.apiConfig.apiHost);(F===null||!li(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Gs),s(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new r8(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),s();let v=F;F=await t.withAtLock(async D=>{let m=await this.presentCertWithRefresh(D,v,n,A);return await D.initiateMdnSync(r),m}),this.emitPhase("ecs-handshake"),s(),await this.utoMaster.init();let E=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!E.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${E.resultCode})`);this.emitPhase("connected");let u=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:u}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await zs();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await JF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof bt&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new Hs(Us,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await si.fetchCertOrThrowRevoked(A,e),t={base64Url:r.certificateBase64Url,notAfter:r.notAfter};return await e.storage.saveCertificate(t,e.apiConfig.apiHost),t}static async refreshCertificate(A){let e=await A.storage.getKeypair(),r=e!==null?e:await(async()=>{let n=await zs();return await A.storage.saveKeypair(n),n})(),t=await si.fetchCertOrThrowRevoked(r,A),s={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(s,A.apiConfig.apiHost),s}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let s=await A.sendCompanionCert(e.base64Url,t.signal);if(s.success||s.errorCode===3&&((t.logger??un).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Gs),e=await this.requestAndStoreCert(r,t),s=await A.sendCompanionCert(e.base64Url,t.signal),s.success))return e;throw new Hs("cert-presenting",`AT+COMPCERT rejected (code ${s.errorCode??"?"})`,{certErrorCode:s.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,e){return this.emit("phase","error"),{success:!1,phase:A,error:e}}handleError(A){return A instanceof Hs?(this.emit("phase",A.phase===Us?Us:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof bt?{success:!1,phase:Gs,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(M8,"encodePublicKeyBase64Url",vi);var zd=M8,Hs=class extends Error{constructor(x,A,e={}){super(A),A0(this,"phase",x),A0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},L8=(x=>(x.CERT_FORMAT="cert_format",x.CERT_SIGNATURE="cert_signature",x.CERT_EXPIRED="cert_expired",x.NO_MDN_PUBKEY="no_mdn_pubkey",x.DEVICE_BUSY="device_busy",x.DEVICE_INTERNAL="device_internal",x.ECS_FAILURE="ecs_failure",x.CERT_REVOKED="cert_revoked",x.SESSION_EXPIRED="session_expired",x.ABORTED="aborted",x.UNKNOWN="unknown",x))(L8||{}),Vd={cert_format:"companion_auth.error.cert_format",cert_signature:"companion_auth.error.cert_signature",cert_expired:"companion_auth.error.cert_expired",no_mdn_pubkey:"companion_auth.error.no_mdn_pubkey",device_busy:"companion_auth.error.device_busy",device_internal:"companion_auth.error.device_internal",ecs_failure:"companion_auth.error.ecs_failure",cert_revoked:"companion_auth.error.cert_revoked",session_expired:"companion_auth.error.session_expired",aborted:"companion_auth.error.aborted",unknown:"companion_auth.error.unknown"};function Wd(x){if(x.certErrorCode!==void 0)switch(x.certErrorCode){case 1:return"cert_format";case 2:return"cert_signature";case 3:return"cert_expired";case 4:return"no_mdn_pubkey";case 5:return"device_busy";case 6:return"device_internal"}return x.phase==="cert-revoked"?x.httpStatus===401?"session_expired":"cert_revoked":x.phase==="ecs-handshake"?"ecs_failure":x.error==="Operation aborted"?"aborted":"unknown"}var Xd=require("events");function R8(x){let A=x.replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f").map(e=>{let r=e.split(" ");return r.length<4?null:{name:r[0],scale:parseFloat(r[1]),offset:parseFloat(r[2]),unit:r[3]}}).filter(e=>e!==null):[]}function O8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function G8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function ii(x,A){return x.map((e,r)=>({name:e.name,displayValue:G8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var Yd=2e3,U8=class extends Xd.EventEmitter{constructor(x,A=zA){super(),A0(this,"atHandler",x),A0(this,"logger",A),A0(this,"datapoints",[]),A0(this,"values",[]),A0(this,"polling",!1),A0(this,"pollTimer",null),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(kx.APP_GET_METADATA),A=x.includes(U0.OK)?{supported:!0,pinRequired:!1}:x.includes(U0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(U0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(U0.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${kx.APP_GET_METADATA}=${x}`:kx.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(U0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(U0.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(U0.OK)){let r=R8(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(U0.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let e=A?`${kx.APP_GET_DATAVALUE}=${A}`:kx.APP_GET_DATAVALUE,r=await x(e);if(r.includes(U0.OK)){let t=O8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",ii(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(kx.APP_TRIG_MEASURE_TEST)).includes(U0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Ox)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:e=P8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let s=await t.sendRaw(kx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+s),!s.includes(U0.OK))return this.logger.warn("Measurement trigger rejected: "+s.trim()),{outcome:"rejected",values:[],response:s};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,U0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(v=>t.sendRaw(v),A),response:n}}catch(n){if(n instanceof Ox)throw n;let F="timeout";return n instanceof wi?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${U0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:s}}})}async startPolling(x,A=Yd){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+A+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(x),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(x).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},A))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return ii(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function Qd(x,A,e){let r=s=>{if(s instanceof Ox)throw s},t=new U8(x);try{let s=await x.queryMdnServerConfig(e).catch(D=>(r(D),!1)),n=await t.checkSupport().catch(D=>(r(D),{supported:!1,pinRequired:!1})),F=n.supported?await t.checkMeasurementTriggerSupport().catch(D=>(r(D),!1)):!1,v=n.supported?{pinRequired:n.pinRequired,canTriggerMeasurement:F}:!1,E=!1,u=!1;if(s){let[D,m]=await Promise.all([x.queryCompanionCertSupport(e).catch(_=>(r(_),!1)),A?.getCertificate(s)]);E=D,u=m!=null&&li(m.notAfter)}return{hostname:s,localData:v,secureConnection:E,validCert:u}}finally{t.dispose()}}var Zd=require("events"),xu={0:"trigger",1:"wakeup",2:"online"},Au={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},eu={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},Sx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},ru=Sx.FAILED|Sx.ACTIVE|Sx.STARTED|Sx.RETRY|Sx.WAKEUPABLE|Sx.EXTSIM|Sx.DISABLED|Sx.WAKEUP|Sx.POSUPDATE_ACTIVE,yF=`${U0.RM2M_STATE}: `;function H8(x=0){let A=(x&Sx.WAKEUPABLE)!==0,e="offline",r=A;return x&Sx.POSUPDATE_ACTIVE?(e="locating",r=!1):x&Sx.RETRY?(e="retry",r=!1):x&Sx.STARTED?(e="dialing",r=!1):x&Sx.ACTIVE?(e="active",r=!1):x&Sx.FAILED?(e="failed",r=A):x&Sx.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&Sx.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~ru}}function tu(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:xu[A]??x}function nu(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:Au[A]??["unknown",`itf#${x}`,`itf#${x}`]}function su(x){if(x.length===0)return null;let A=x.join(",");return eu[A]??A}function J8(x){let A=x.split(","),[e,r,t,s,...n]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),v=nu(s),E=s!==void 0?parseInt(s,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:H8(F),uplinkMode:tu(t),uplinkInterface:v?v[0]:null,uplinkInterfaceExtended:v?v[1]:null,uplinkInterfaceTechnical:v?v[2]:null,scriptState:su(n)}}function K8(x){let A=x.indexOf(yF);if(A===-1)return null;let e=x.substring(A+yF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?J8(t):null}var iu=5e3,au=class extends Zd.EventEmitter{constructor(x,A=un){super(),A0(this,"atHandler"),A0(this,"logger"),A0(this,"lastState",null),A0(this,"pollingTimer",null),A0(this,"polling",!1),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(kx.RM2M_STATE),A=K8(x);return A?(this.lastState=A,this.emit("state",A),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),A}catch(x){let A=x instanceof Error?x.message:String(x);return this.logger.error(`Failed to fetch RM2M state: ${A}`),this.emit("error",A),null}}startPolling(x=iu){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${x}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),x)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}},ou=require("events"),z8=class extends ou.EventEmitter{constructor(){super(...arguments),A0(this,"serialNumber",""),A0(this,"serverUrl",""),A0(this,"deviceId",""),A0(this,"rssi",null),A0(this,"hasDebugSupport",!1),A0(this,"connectionState","disconnected"),A0(this,"connectionError",""),A0(this,"mtuSize",23)}get isConnected(){return this.connectionState==="connected"}setConnected(x){this.serialNumber=x.serialNumber,this.deviceId=x.deviceId,this.serverUrl=x.serverUrl??this.serverUrl,this.hasDebugSupport=x.hasDebugSupport??!1,this.mtuSize=x.mtuSize??23,this.rssi=x.rssi??null,this.connectionState="connected",this.connectionError="",this.emit("connected",this.snapshot()),this.emit("stateChange",this.snapshot())}setDisconnected(){this.connectionState="disconnected",this.rssi=null,this.emit("disconnected"),this.emit("stateChange",this.snapshot())}setError(x){this.connectionError=x,this.connectionState="disconnected",this.emit("error",x),this.emit("stateChange",this.snapshot())}setConnectionState(x){this.connectionState=x,this.emit("stateChange",this.snapshot())}updateRssi(x){this.rssi=x,this.emit("rssiUpdate",x)}reset(){this.serialNumber="",this.serverUrl="",this.deviceId="",this.rssi=null,this.hasDebugSupport=!1,this.connectionState="disconnected",this.connectionError="",this.mtuSize=23,this.emit("reset"),this.emit("stateChange",this.snapshot())}snapshot(){return{serialNumber:this.serialNumber,serverUrl:this.serverUrl,deviceId:this.deviceId,rssi:this.rssi,hasDebugSupport:this.hasDebugSupport,connectionState:this.connectionState,connectionError:this.connectionError,mtuSize:this.mtuSize,isConnected:this.isConnected}}},Fu=require("events"),V8={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},vu=class extends Fu.EventEmitter{constructor(x=zA,A){super(),A0(this,"logger",x),A0(this,"state"),A0(this,"transports",null),A0(this,"transportFactory",null),A0(this,"disconnectFn",null),A0(this,"reconnectOptions"),A0(this,"reconnectAbortController",null),this.state=new z8,this.reconnectOptions={...V8,...A}}async connect(x,A,e){this.transportFactory=x,this.disconnectFn=A,this.state.setConnectionState("connecting");try{return this.transports=await x(),this.state.setConnected(e),this.logger.info(`Connected to device ${e.serialNumber}`),this.transports}catch(r){let t=r instanceof Error?r.message:String(r);throw this.state.setError(t),this.logger.error(`Connection failed: ${t}`),r}}async disconnect(){if(this.stopReconnect(),this.disconnectFn)try{await this.disconnectFn()}catch(x){this.logger.warn(`Disconnect error: ${x}`)}this.transports=null,this.state.setDisconnected(),this.logger.info("Disconnected from device")}async reconnect(){if(!this.transportFactory||!this.disconnectFn)return this.logger.error("Cannot reconnect: no transport factory"),!1;this.state.setConnectionState("reconnecting"),this.reconnectAbortController=new AbortController;let{signal:x}=this.reconnectAbortController,A=Date.now(),e=this.reconnectOptions.initialDelay;for(;Date.now()-A<this.reconnectOptions.maxDuration;){if(x.aborted||(this.logger.info(`Reconnecting in ${e}ms...`),await this.sleep(e,x),x.aborted))return!1;try{return this.transports=await this.transportFactory(),this.state.setConnectionState("connected"),this.state.connectionError="",this.logger.info("Reconnected successfully"),this.emit("reconnected"),!0}catch(r){this.logger.warn(`Reconnect attempt failed: ${r}`),e=Math.min(e*2,this.reconnectOptions.maxDelay)}}return this.state.setError("Reconnect timeout exceeded"),this.logger.error("Reconnect failed: timeout exceeded"),this.emit("reconnectFailed"),!1}stopReconnect(){this.reconnectAbortController?.abort(),this.reconnectAbortController=null}getTransports(){return this.transports}sleep(x,A){return new Promise(e=>{let r=setTimeout(e,x);A?.addEventListener("abort",()=>{clearTimeout(r),e()},{once:!0})})}},lu={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},fu={service:"BC300000-0FA0-4ED4-860A-CF95434B5A4E",txCharacteristic:"BC30E1FF-0FA0-4ED4-860A-CF95434B5A4E",rxCharacteristic:"BC30E1FE-0FA0-4ED4-860A-CF95434B5A4E",txDebugCharacteristic:"BC30E201-0FA0-4ED4-860A-CF95434B5A4E",rxDebugCharacteristic:"BC30E200-0FA0-4ED4-860A-CF95434B5A4E"},cu=590,Eu=3e4,S0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},EA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},Sn=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Si=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function BA(x){try{return decodeURIComponent(x)}catch{throw new S0("malformed url encoding")}}var Bu=2e3,Cu=2136;function $i(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=Bu&&A<=Cu}function qr(x){if(x)for(let A of["stamp","from","until"]){let e=x[A];if(typeof e=="string"&&!(A==="until"&&e==="*")&&!(A!=="stamp"&&e.trim().length===0)&&!$i(e))throw new S0(`attribute '${A}' is not valid`)}}function du(x){return typeof x.setMetadataValue=="function"?x:null}function uu(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Ti(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function Du(x){return{status:200,body:x.ctx.siteInfo}}async function pu(x){let{blueprint:A}=x.ctx;if(!A)throw new EA("blueprint unavailable");return{status:200,body:A}}async function bu(x){let{me:A}=x.ctx;if(A==null)throw new EA("no profile stored");return{status:200,body:A}}function W8(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(s){x.logger?.error(`[localApi] device push for tag ${A} failed:`,s)}})()}async function mu(x,A,e){let r=x.push;if(!r)return null;try{return await r.adHocChangeRequest(A,e)}catch(t){return x.logger?.error(`[localApi] change request for tag ${A} failed:`,t),null}}var ju=1024;function wt(x){let A=x.indexOf(0),e=A<0?x:x.subarray(0,A);try{let r=new TextDecoder("utf-8").decode(e),t=JSON.parse(r);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function X8(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(ju,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var Pi=26432,Qe={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},Y8=Object.keys(Qe),St=["standby","commissioned","offline","commissioning","online"],ai=St.reduce((x,A)=>x|Qe[A],0)>>>0;function Q8(x){let A=0;for(let e of Y8)x[e]===!0&&(A|=Qe[e]);return A>>>0}function qi(x,A){let e={};for(let r of Y8)x&Qe[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function Z8(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(Pi);if(!r?.data)return!1;let t=wt(r.data);if(!t)return!1;let s=!1;if(typeof t.lifecycleFlags=="number"){let n=qi(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,s=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,s=!0),s}var hu=new Set([...St,"service","lifecycle_state"]);function gu(x,A){let e=Math.max(H0.msToStamp40((x.timeSource??kt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function yu(x){let A=Su(x.request.body??null);if(!A)throw new S0("invalid or missing request body");ku(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!wu(r))throw new S0("this site does not support lifecycle flags!");let t=Q8(r),s=t;for(let E of St){let u=A[E];typeof u=="boolean"&&(s=u?s|Qe[E]:s&~Qe[E])}if(s>>>=0,s===t)return{status:204,body:""};let n=gu(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~ai>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:s&ai}}),stamp40:n+1}],v=uu(e.storage);return v&&await v.insertUtoChangeRequests(F.map(E=>({tag:Pi,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=qi(s,r),await xv(e),_u(e,F),{status:204,body:""}}function ku(x){let A=[];for(let[e,r]of Object.entries(x))hu.has(e)?(e==="lifecycle_state"?typeof r!="string":typeof r!="boolean")&&A.push(`"${e}" is not valid`):A.push(`"${e}" is not an allowed lifecycle property`);if(A.length>0)throw new S0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!St.includes(e)))throw new S0("invalid parameters")}async function _u(x,A){try{let e=await mu(x,Pi,A);e==="executed"?await Z8(x.storage,x.siteInfo)&&await xv(x):e!==null&&x.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${e})`)}catch(e){x.logger?.error("[localApi] lifecycle device-mirror refresh failed:",e)}}async function xv(x){await du(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function wu(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function Su(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function Av(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0('"select" must be an array')}}function $u(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0("invalid parameter, select must be an array")}}function Tu(x,A){let e=new Map;if(A){for(let[r,t]of A)e.set(t,r);return e}for(let r of x?.fields??[]){if(le(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function Pu(x){let A=new Map;for(let e of x.fields){if(le(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function qu(x){let A=new Set;for(let e of x.fields)le(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function Nu(x,A,e){if(!e)return null;let r=Tu(x,A),t=new Set,s=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):s.push(n)}if(s.length>0)throw ev(s);return t}function Iu(x,A){let e=Pu(x),r=[],t=[],s=!1;for(let n of A){if(n==="stamp"){s=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw ev(t);return s||r.unshift("stamp"),r}function Mu(x,A){if(A===void 0)return;let e=qu(x),r=A.map(s=>s.toLowerCase()),t=r.filter(s=>!e.has(s));if(t.length>0)throw new S0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function Lu(x,A){if(!A)return x;let e={};for(let[r,t]of Object.entries(x))(r==="stamp"||A.has(r))&&(e[r]=t);return e}function Ni(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function ev(x){return new S0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function $n(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function Ru(x){let A=x.ctx,e=BA(x.params[1]),r=$n(A.model,e);if(!r)throw new S0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new EA(`no data for container "${e}"`);let s=Gu(A,r,t,Ou(x));return{status:200,body:rv(A,e,s)}}function Ou(x){let A=x.query.json??{};return Av(A.select)}function Gu(x,A,e,r){let t=Nu(A,_t(x.blueprint??null,A),r);return Lu(e,t)}function rv(x,A,e){let r=x.model.byNameOrAlias(A);return r?y8(e,_t(x.blueprint??null,r)):e}async function Uu(x){let A=x.ctx,e=BA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new EA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new EA(`unknown container "${e}"`);let s=x.query.json??{},n=$u(s.select),F=Mu(r,n);return{status:200,body:Ni(t,F)}}async function Hu(x){let A=BA(x.params[1]);return tv(x,A,"canonical")}async function Ju(x){let A=BA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new EA(`unknown container "${A}"`);return tv(x,A,"legacy")}async function tv(x,A,e){let r=Yu(x);if(!r)throw new S0("invalid or missing request body");qr(r);let{stamp:t,...s}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new S0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!$n(n.model,A))throw new S0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new EA(`unknown container "${A}"`);let v=e==="canonical"?Vu(n,F,s):Wu(F,s);try{let E=e==="canonical"&&t!==void 0?{...v,stamp:t}:v,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&W8(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw Ku(E,A,e,n,F)}}function Ku(x,A,e,r,t){if(x instanceof ht){let s=x.field?zu(r,t,x.field,e):void 0;return e==="canonical"?s?new S0(`no permission to modify container field \`${s}\``):new S0(`no permission to modify container \`${A}\``):s?new Sn(`unknown field name(s): ${s}`):new Si(`no permission to modify '${A}'`)}return x}function zu(x,A,e,r){if(!A)return e;let t=A.fields.find(n=>n.name===e||n.name.toLowerCase()===e||(n.alias??n.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():_t(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function Vu(x,A,e){if(!A)return e;let r=_t(x.blueprint??null,A),t=new Map;if(r)for(let[s,n]of r)t.set(n,s);else for(let s of A.fields){let n=s.alias??s.name;t.set(n,n.toLowerCase()),t.set(n.toLowerCase(),n.toLowerCase())}return nv(A,t,e,s=>new S0(`unknown field name(s): ${s}`))}function Wu(x,A){if(!x)return A;let e=new Map;for(let r of x.fields){let t=r.alias??r.name;e.set(t.toLowerCase(),t.toLowerCase()),e.set(t,t.toLowerCase())}return nv(x,e,A,r=>new Sn(`unknown field name(s): ${r}`))}var Xu=new Set(["stamp","stamp4","stamp8","datetime"]);function nv(x,A,e,r){let t=new Map(x.fields.map(v=>[(v.alias??v.name).toLowerCase(),v])),s={},n=[],F=[];for(let[v,E]of Object.entries(e)){let u=A.get(v);if(!u){n.push(v);continue}let D=t.get(u);if(D&&Xu.has(D.type)&&!(typeof E=="string"&&$i(E))){F.push(v);continue}s[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new S0(`value(s) of field(s) ${F.join(",")} are not valid`);return s}function Yu(x){let A=x.query.json,e=A!=null&&typeof A=="object"&&!Array.isArray(A)?A:void 0,r=x.request.body;if(!r)return e?{...e}:null;let t=Qu(r);if(t===void 0)throw new S0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function Qu(x){try{return JSON.parse(x)}catch{return}}var sv="x-mt-backfill",iv="pending";async function Ii(x,A,e){let r=x.push?.backfill;if(!(!r||A===void 0||A===null||e===null))try{return await r.call(x.push,{fromMs:e})==="pending"?{[sv]:iv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var Zu=1e3,ln=1e3,av="20000101",ov="*";async function xD(x){let A=x.query.json??{};Ev(A,["from","until","count","offset","select"]),qr(A);let e=x.ctx,r=BA(x.params[1]),{mapperSelect:t,order:s}=vv(e,r,A.select);lv(e,r);let n=gn(A.from,av,"from"),F=gn(A.until,ov,"until");fv(n,F),F!==null&&(F=eD(F));let v=rD(A.count),E=cv(A.offset),u=await Ii(e,A.from,n);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:n,untilMs:F,count:v,offset:E,select:t})).map(m=>Fv(x,e,r,Ni(m,s))),headers:u}}async function AD(x){let A=x.query.json??{};Ev(A,["from","until","offset","select"]),qr(A);let e=x.ctx,r=BA(x.params[1]),t=x.params[2],{mapperSelect:s,order:n}=vv(e,r,A.select);lv(e,r);let F=gn(A.from,av,"from"),v=gn(A.until,ov,"until");fv(F,v);let E=cv(A.offset),u=await Ii(e,A.from,F),m=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:v,count:t==="youngest"?-1:1,offset:E,select:s}))[0];return m?{status:200,body:Fv(x,e,r,Ni(m,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function Fv(x,A,e,r){return x.apiVersion==="1"?r:rv(A,e,r)}function vv(x,A,e){let r=Av(e);if(!r)return{mapperSelect:void 0,order:null};let t=$n(x.model,A);if(!t)return{mapperSelect:r,order:null};let s=Iu(t,r),n=s.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:s}}function lv(x,A){if(!$n(x.model,A))throw new S0("timeseries does not exist")}function gn(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return Pr(t)}catch{throw new S0(`attribute '${e}' is not valid`)}}function fv(x,A){if(x!==null&&A!==null&&x>A)throw new S0('E_BAD_REQUEST "from" value must be older than "until"')}function eD(x){let A=H0.msToStamp40(x);return H0.stamp40ToMS(A)>=x&&(A-=1),H0.stamp40ToMS(A)}function rD(x){if(x==null||x==="")return Zu;let A=Number(x);if(!Number.isInteger(A))throw new S0('"count" must be an integer');if(A===0)throw new S0("`count` cannot be 0");if(A<-ln)throw new S0(`"count" must be greater than or equal to -${ln}`);if(A>ln)throw new S0(`"count" must be less than or equal to ${ln}`);return A}function cv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new S0('"offset" must be an integer');if(A<0)throw new S0('"offset" must be greater than or equal to 0');return A}function Ev(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new S0(`"${e}" is not allowed`)}var tD=1e5,nD="20000101",sD="*";async function iD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new EA(`unknown container "${e}"`);let s=x.query.json??{};qr(s);let{fromMs:n,untilMs:F}=FD(s);vD(n,F);let v=lD(s),E=fD(s),u=Bv(t,s.select)??["stamp"],D=yn(s.from)?await Ii(r,s.from,n):void 0,m=u.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:v,offset:E,select:m.length>0?m:void 0})).map(S=>u.map(P=>P==="stamp"?S.stamp:S[P]??null)),headers:D}}async function aD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,s=t.model.byNameOrAlias(e);if(!s)throw new EA(`unknown container "${e}"`);let n=x.query.json??{};qr(n);let F=Bv(s,n.select)??["stamp"],v=oD(n),E=F.filter(m=>m!=="stamp"),D=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:v??null,count:v!==void 0||r==="youngest"?-1:1,select:E.length>0?E:void 0}))[0];return D?{status:200,body:[F.map(m=>m==="stamp"?D.stamp:D[m]??null)]}:{status:200,body:[]}}function oD(x){if(!(!yn(x.until)||x.until==="*"))try{return Pr(String(x.until))??void 0}catch{throw new S0("from or until value invalid")}}function FD(x){let A=yn(x.from),e=yn(x.until);if((!A||!e)&&!Mi(x.count))throw new S0("missing or invalid parameters (from and until and/or count)");return{fromMs:kF(A?x.from:nD),untilMs:kF(e?x.until:sD)}}function vD(x,A){if(x!==null&&A!==null&&x>A)throw new S0('"from" value must be older than "until"')}function kF(x){let A=String(x);try{return Pr(A)}catch{throw new S0(`invalid stamp "${A}"`)}}function lD(x){if(!Mi(x.count))return tD;if(typeof x.count!="number")throw new S0("invalid parameter count");return x.count}function fD(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new S0("invalid parameter offset");return A}function Bv(x,A){if(A==null)return;if(!Array.isArray(A))throw new S0("invalid parameter, select must be an array");let e=A.map(F=>String(F).toLowerCase()),r=e.filter(F=>F.includes(" "));if(r.length>0)throw new S0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],s=new Set(x.fields.filter(F=>!le(F)).map(F=>(F.alias??F.name).toLowerCase()));s.add("stamp");let n=t.filter(F=>!s.has(F));if(n.length>0)throw new S0(`invalid channel(s) ${n.join(",")}`);return t}function Mi(x){return!!x}function yn(x){return typeof x=="string"?x.trim().length>0:Mi(x)}var cD="device_id";function ED(x){return async A=>(await Tn(A),{status:200,body:await CD(A.ctx,x)})}async function Tn(x){let A=BA(x.params[0]),e=await BD(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new EA(`unknown device "${A}"`)}async function BD(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(cD)}async function CD(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=wt(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=$r(H0.stamp40ToMS(KA(e.stamp))),r):{}}function Li(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function dD(x){return async A=>{await Tn(A);let e=pD(A.request.body??null);if(!e)throw new S0("invalid or missing request body");return Li(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?wt(r.data)??{}:{};return await Ri(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function uD(x){return async A=>(await Tn(A),Li(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await Ri(A.ctx,x,e,{}),{status:204,body:""})}))}function DD(x){return async A=>{await Tn(A);let e=BA(A.params[1]);return Li(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=wt(r.data)??{},s=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===s&&delete t[n];return await Ri(A.ctx,x,r,t),{status:204,body:""}})}}function pD(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}async function Ri(x,A,e,r){let t=X8(JSON.stringify(r),e?.data?.length??0),s=H0.msToStamp40((x.timeSource??kt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:cA(s),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),W8(x,A,t,s)}var Cv={"content-type":"application/json"},bD=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:bu,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:Du,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:pu,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:yu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:AD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:xD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Ru,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Hu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:aD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:iD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Uu,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Ju,checksUid:!0},...mD()];function mD(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},e=Object.entries(x).map(([t,s])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:ED(s),checksUid:!1})),r=Object.entries(A).flatMap(([t,s])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:dD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:uD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:DD(s),checksUid:!1}]);return[...e,...r]}var jD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function hD(x){let A=Ti();return e=>dv(x,e,A)}async function dv(x,A,e=Ti()){try{let[r,t]=kD(A.path),s=_D(t),n=yD(r,x);if(n===null)return Ye(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let v of bD){if(v.method!==F)continue;let E=v.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(v.checksUid&&!gD(x,u[0]))return Ye(404,"E_NOT_FOUND","unknown site");let D=/^\/api\/([12])\//.exec(n)?.[1]??"1",m=await v.handler({request:A,params:u,query:s,ctx:x,session:e,apiVersion:D});return $D(m)}return Ye(404,"E_NOT_FOUND","not found")}catch(r){return Dv(r)}}function gD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&BA(A)===x.siteUid}function yD(x,A){let e=jD.exec(x);if(!e)return x;let r=BA(e[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===r||(A.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function kD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function _D(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&wD(A,e);return A}function wD(x,A){let e=A.indexOf("="),r=BA(e<0?A:A.slice(0,e)),t=e<0?"":BA(A.slice(e+1));r==="json"?x.json=SD(t):x.params[r]=t}function SD(x){try{return JSON.parse(x)}catch{throw new S0("request supplied data which is not json formatted ")}}function $D(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...Cv,...x.headers},body:A}}function uv(x,A){return{status:x,headers:{...Cv},body:JSON.stringify(A)}}function Dv(x){return x instanceof S0||x instanceof ki||x instanceof ui?Ye(400,"E_BAD_REQUEST",x.message):x instanceof Sn||x instanceof ht?Ye(403,"E_FORBIDDEN",x.message):x instanceof Si?Ye(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof EA||x instanceof ye?Ye(404,"E_NOT_FOUND",x.message):uv(500,{err:x instanceof Error?x.message:String(x)})}function Ye(x,A,e){return uv(x,{err:`${A} ${e}`})}function TD(x,A){let e=A.apmId??"local",r=A.version??1;return{uid:A.siteUid,name:A.name??A.siteUid,customer_id:e,customer_uid:e,app:{apmid:e,version:String(r)},device:{device_id:A.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:x.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}});var i7={};Ff(i7,{APM:()=>p0,DDE:()=>lA,DDE_Core:()=>G0,DFILES:()=>dt,DLO:()=>Ct,DefaultFiles:()=>r0,Dependencies:()=>Z0,DevError:()=>Ex,DevExitCode:()=>$t,DevSession:()=>er,DeviceProfiles:()=>Kt,Diagnostics:()=>tt,ENV:()=>_s,Globals:()=>ux,Helper:()=>b0,HttpMethod:()=>sa,Library:()=>Ge,Log:()=>Fe,Manifest:()=>z,MyDatanetClient:()=>Jn,Package:()=>gx,Registry:()=>tx,build:()=>r7,buildDevelopmentInstallInfo:()=>cl,dev:()=>Fl,generateDevApmId:()=>ia,install:()=>e7,pack:()=>s7,publish:()=>n7});module.exports=vf(i7);var lx=require("vscode-uri");var kr=require("vscode-uri");var lf=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function Ot(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^lf[(e^x[r])&255];return(e^-1)>>>0}var F7=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),v7=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var b0;(_=>{function x(h,S){let[P,N]=S,{line:R,col:U}=h.linePos(P);return{line:Number(R)-1,startCharacter:U-1,endCharacter:U+(N-P)}}_.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(h){return Ot(A.encode(h)).toString(16)}_.generateHashForLibraryName=e;function r(h){return Ot(A.encode(h)).toString(16)}_.generateHashForFilePath=r;function t(h){return Ot(h).toString(16).toUpperCase().padStart(8,"0")}_.generateCRC32ForFileContent=t;function s(h){try{let S=null;return h?.type==="Buffer"?S=Uint8Array.from(h.data):S=h,new TextDecoder("utf8").decode(S)}catch{return""}}_.convertBlobToString=s;function n(h=""){return h.replace(/\r\n|\n\r|\r/g,`
2199
2199
  `)}_.normalizeLF=n;function F(h){try{let S=s(h);return n(S).split(`
2200
- `)}catch{return[]}}_.convertBlobToStringArray=F,_.isNumeric=h=>!Array.isArray(h)&&h-parseFloat(h)+1>=0;function E(h){let S="",P=h.byteLength;for(let N=0;N<P;N++)S+=String.fromCharCode(h[N]);return btoa(S)}_.bufferToBase64=E;function u(h,S){let P=`${h}`.match(/\{\d*(index)(\+\d*)?}/g);if(P){let N=h;return P.forEach(R=>{let O=R.replace(/\+0$/,""),n0=O.match(/index/)?.[0];if(n0){let L=O.slice(1,-1).split(n0)[1],k=parseInt(L)||0;N=N.replace(R,`${S+k}`)}}),N}else return h}_.patchValueWithArrayInfo=u;let D={};function m(h,S,P){let N=D[h];N&&clearTimeout(N.timer),D[h]={timer:setTimeout(()=>{delete D[h],P()},S),handler:P}}_.defer=m})(b0||={});var Ho=require("image-dimensions"),Jo=require("file-type-checker");var p7=require("cross-fetch/polyfill"),ga=W0(require("openapi-fetch"));var De=require("vscode-uri");var Nx="dist/",da="dde/",es="dlo/",rs=".studio/",ua="dfiles/",r0;(f=>{f.fileNames={projectSettings:"studio.json",mainAmx:"main.amx",mainAmxReport:"main.xml",ddeXml:"dde.xml",ddeOpenApi:"main.yaml",historyJson:"history.json",mainDDE:"main.dde",autoInc:"auto.inc",defaultInc:"default.inc",autoUplinkInc:"app-uplink.inc",autoDdeInc:"X-dde.inc",mainDdeInc:"main-dde.inc",autoLocalDataInc:"auto-local-data.inc",legacyAutoInc:"legacy-auto.inc",legacyAutoDdeInc:"legacy-auto-dde.inc",legacyAutoUplinkInc:"legacy-auto-uplink.inc",reportTemplate:"mdn_report_template.json",dloCfg:"dlo.cfg",devMirror:"mirror.json",devDeviceLog:"device.jsonl"};let A=`${rs}auto/`,e=`${rs}dev/`,r=`${A}dlo/`,t=`${A}dde/`;f.filePaths={studio:{initFile:`${A}.init`,auto:{path:A,dlo:{path:r,autoInc:`${r}${f.fileNames.autoInc}`,defaultInc:`${r}${f.fileNames.defaultInc}`,autoUplinkInc:`${r}${f.fileNames.autoUplinkInc}`,autoLocalDataInc:`${r}${f.fileNames.autoLocalDataInc}`,autoDdeInc:`${r}${f.fileNames.autoDdeInc}`,mainDdeInc:`${r}${f.fileNames.mainDdeInc}`,legacyAutoInc:`${r}${f.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${r}${f.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${r}${f.fileNames.legacyAutoUplinkInc}`,cfg:`${r}${f.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${f.fileNames.historyJson}`}},libdeps:`${rs}libdeps/`,dev:{path:e,mirror:`${e}${f.fileNames.devMirror}`,deviceLog:`${e}${f.fileNames.devDeviceLog}`}},dist:{path:Nx,dloPath:`${Nx}dlo/`,mainAmxPath:`${Nx}dlo/${f.fileNames.mainAmx}`,mainAmxReportPath:`${Nx}dlo/${f.fileNames.mainAmxReport}`,ddeXmlPath:`${Nx}dde/${f.fileNames.ddeXml}`,ddeApiPath:`${Nx}api/`,ddeApi:`${Nx}api/${f.fileNames.ddeOpenApi}`,historyJson:`${Nx}dde/${f.fileNames.historyJson}`,povPath:`${Nx}pov`,povDetailsPath:`${Nx}pov/details`,dfilesPath:`${Nx}dfiles`,dfilesProperties:`${Nx}dfiles/properties.json`,bloPath:`${Nx}blo`,reportTemplate:`${Nx}/${f.fileNames.reportTemplate}`,definesTs:`${Nx}defines.ts`,definesAppTs:`${Nx}defines.app.ts`},dlo:{path:es,mainDLO:`${es}main.dlo`,mainINI:`${es}main.ini`},dde:{path:da,mainDDE:`${da}main.dde`},dfiles:{path:ua,mainDFILES:`${ua}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},f.readme=E=>`# ${E} README
2200
+ `)}catch{return[]}}_.convertBlobToStringArray=F,_.isNumeric=h=>!Array.isArray(h)&&h-parseFloat(h)+1>=0;function E(h){let S="",P=h.byteLength;for(let N=0;N<P;N++)S+=String.fromCharCode(h[N]);return btoa(S)}_.bufferToBase64=E;function u(h,S){let P=`${h}`.match(/\{\d*(index)(\+\d*)?}/g);if(P){let N=h;return P.forEach(R=>{let U=R.replace(/\+0$/,""),t0=U.match(/index/)?.[0];if(t0){let M=U.slice(1,-1).split(t0)[1],k=parseInt(M)||0;N=N.replace(R,`${S+k}`)}}),N}else return h}_.patchValueWithArrayInfo=u;let D={};function m(h,S,P){let N=D[h];N&&clearTimeout(N.timer),D[h]={timer:setTimeout(()=>{delete D[h],P()},S),handler:P}}_.defer=m})(b0||={});var Ko=require("image-dimensions"),zo=require("file-type-checker");var b7=require("cross-fetch/polyfill"),_a=W0(require("openapi-fetch"));var pe=require("vscode-uri");var Ix="dist/",pa="dde/",rs="dlo/",ts=".studio/",ba="dfiles/",r0;(v=>{v.fileNames={projectSettings:"studio.json",mainAmx:"main.amx",mainAmxReport:"main.xml",ddeXml:"dde.xml",ddeOpenApi:"main.yaml",historyJson:"history.json",mainDDE:"main.dde",autoInc:"auto.inc",defaultInc:"default.inc",autoUplinkInc:"app-uplink.inc",autoDdeInc:"X-dde.inc",mainDdeInc:"main-dde.inc",autoLocalDataInc:"auto-local-data.inc",legacyAutoInc:"legacy-auto.inc",legacyAutoDdeInc:"legacy-auto-dde.inc",legacyAutoUplinkInc:"legacy-auto-uplink.inc",reportTemplate:"mdn_report_template.json",dloCfg:"dlo.cfg",devMirror:"mirror.json",devDeviceLog:"device.jsonl"};let A=`${ts}auto/`,e=`${ts}dev/`,r=`${A}dlo/`,t=`${A}dde/`;v.filePaths={studio:{initFile:`${A}.init`,auto:{path:A,dlo:{path:r,autoInc:`${r}${v.fileNames.autoInc}`,defaultInc:`${r}${v.fileNames.defaultInc}`,autoUplinkInc:`${r}${v.fileNames.autoUplinkInc}`,autoLocalDataInc:`${r}${v.fileNames.autoLocalDataInc}`,autoDdeInc:`${r}${v.fileNames.autoDdeInc}`,mainDdeInc:`${r}${v.fileNames.mainDdeInc}`,legacyAutoInc:`${r}${v.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${r}${v.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${r}${v.fileNames.legacyAutoUplinkInc}`,cfg:`${r}${v.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${v.fileNames.historyJson}`}},libdeps:`${ts}libdeps/`,dev:{path:e,mirror:`${e}${v.fileNames.devMirror}`,deviceLog:`${e}${v.fileNames.devDeviceLog}`}},dist:{path:Ix,dloPath:`${Ix}dlo/`,mainAmxPath:`${Ix}dlo/${v.fileNames.mainAmx}`,mainAmxReportPath:`${Ix}dlo/${v.fileNames.mainAmxReport}`,ddeXmlPath:`${Ix}dde/${v.fileNames.ddeXml}`,ddeApiPath:`${Ix}api/`,ddeApi:`${Ix}api/${v.fileNames.ddeOpenApi}`,historyJson:`${Ix}dde/${v.fileNames.historyJson}`,povPath:`${Ix}pov`,povDetailsPath:`${Ix}pov/details`,dfilesPath:`${Ix}dfiles`,dfilesProperties:`${Ix}dfiles/properties.json`,bloPath:`${Ix}blo`,reportTemplate:`${Ix}/${v.fileNames.reportTemplate}`,definesTs:`${Ix}defines.ts`,definesAppTs:`${Ix}defines.app.ts`},dlo:{path:rs,mainDLO:`${rs}main.dlo`,mainINI:`${rs}main.ini`},dde:{path:pa,mainDDE:`${pa}main.dde`},dfiles:{path:ba,mainDFILES:`${ba}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},v.readme=E=>`# ${E} README
2201
2201
 
2202
- This is the README for your project "${E}". Write a brief description what this project is about.`,f.changelog=`# Changelog
2202
+ This is the README for your project "${E}". Write a brief description what this project is about.`,v.changelog=`# Changelog
2203
2203
 
2204
2204
  All notable changes to this project will be documented in this file.
2205
2205
 
2206
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(r0||={});var ba=W0(require("ini"));var vl=b0.convertBlobToString,fl=r0.filePaths.dlo.path,ux;(t=>{let x;(f=>(f.lucky="lucky",f.wynni="wynni",f.production="production"))(x=t.ENV||={});async function A(s,n,F){let f=await z.read(s,n),E=await Z0.getAll(f),u={},D={},m={};for(let R in E){let O=Z0.dependencyToPath(s,R),n0=Z0.dependencyIdToName(R),L=De.Utils.joinPath(O,fl,`${n0}.ini`);await Cr(n,L,u,D,m,n0);let k=De.Utils.joinPath(O,r0.filePaths.defaultsIni);await Cr(n,k,u,D,m,n0)}if(z.isLibrary(f)){let R=De.Utils.joinPath(s,r0.filePaths.dlo.path,`${f.name}.ini`);F&&await n.stat(R)&&F.warn(`dlo/${f.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await Cr(n,R,u,D,m,f.name)}let _=f.dlo?.iniFile||r0.filePaths.dlo.mainINI,h=De.Utils.joinPath(s,_);F&&await n.stat(h)&&F.warn(`${_} is deprecated. Please migrate your defines to app.ini in the project root.`);let S=Bl(_);if(await Cr(n,h,u,D,m,S),z.isLibrary(f)){let R=De.Utils.joinPath(s,r0.filePaths.defaultsIni);await Cr(n,R,u,D,m,"defaults")}let P=ll(f,u,D,m),N=De.Utils.joinPath(s,r0.filePaths.appIni);return await Cr(n,N,u,D,m,"app"),{flat:u,sections:D,definesWithSource:m,defaultsOnly:P}}t.read=A;async function e(s,n,F,f){let E=Object.entries(F.flat),u=[];for(let[_,h]of E){let S=F.definesWithSource[_];if(S?.comment){let N=Da(S.comment);for(let R of N.split(`
2207
- `))u.push(` ${R}`)}let P=pa(h)?"number":"string";u.push(` ${_}: ${P};`)}let D=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...u," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[_,h]of E){let S=F.definesWithSource[_];if(S?.comment&&D.push(Da(S.comment)),pa(h))D.push(`globalThis.STUDIO_DEFINES['${_}'] = ${Number(h)};`);else{let P=h.replace(/\\/g,"\\\\").replace(/'/g,"\\'");D.push(`globalThis.STUDIO_DEFINES['${_}'] = '${P}';`)}}D.push(""),D.push("export {};"),D.push("");let m=De.Utils.joinPath(s,f??r0.filePaths.dist.definesTs);await n.writeFile(m,D.join(`
2208
- `))}t.exportDefinesTs=e;function r(s,n){let F=[];return{result:s.replace(/\{\{([^}]+)\}\}/g,(E,u)=>{let D=u.trim();return Object.hasOwn(n,D)?n[D]:(F.push(D),E)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(ux||={});function ll(x,A,e,r){if(z.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function cl(x){if(x==="")return{kind:"empty"};if(x.startsWith("#")||x.startsWith(";"))return{kind:"comment",text:x.replace(/^[#;]\s?/,"")};if(x.startsWith("[")&&x.endsWith("]"))return{kind:"section",name:x.slice(1,-1)};let A=x.indexOf("=");return A>0?{kind:"keyValue",key:x.slice(0,A).trim()}:{kind:"other"}}function El(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let s of e){let n=cl(s.trim());if(n.kind==="empty"||n.kind==="other"){r=[];continue}if(n.kind==="comment"){r.push(n.text);continue}if(n.kind==="section"){t=n.name;continue}let F=t?`${t}_${n.key}`:n.key;r.length>0&&(A[F]=r.join(`
2209
- `)),r=[]}return A}function Da(x){let A=x.split(`
2206
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(r0||={});var ha=W0(require("ini"));var ff=b0.convertBlobToString,cf=r0.filePaths.dlo.path,ux;(t=>{let x;(v=>(v.lucky="lucky",v.wynni="wynni",v.production="production"))(x=t.ENV||={});async function A(s,n,F){let v=await z.read(s,n),E=await Z0.getAll(v),u={},D={},m={};for(let R in E){let U=Z0.dependencyToPath(s,R),t0=Z0.dependencyIdToName(R),M=pe.Utils.joinPath(U,cf,`${t0}.ini`);await dr(n,M,u,D,m,t0);let k=pe.Utils.joinPath(U,r0.filePaths.defaultsIni);await dr(n,k,u,D,m,t0)}if(z.isLibrary(v)){let R=pe.Utils.joinPath(s,r0.filePaths.dlo.path,`${v.name}.ini`);F&&await n.stat(R)&&F.warn(`dlo/${v.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await dr(n,R,u,D,m,v.name)}let _=v.dlo?.iniFile||r0.filePaths.dlo.mainINI,h=pe.Utils.joinPath(s,_);F&&await n.stat(h)&&F.warn(`${_} is deprecated. Please migrate your defines to app.ini in the project root.`);let S=df(_);if(await dr(n,h,u,D,m,S),z.isLibrary(v)){let R=pe.Utils.joinPath(s,r0.filePaths.defaultsIni);await dr(n,R,u,D,m,"defaults")}let P=Ef(v,u,D,m),N=pe.Utils.joinPath(s,r0.filePaths.appIni);return await dr(n,N,u,D,m,"app"),{flat:u,sections:D,definesWithSource:m,defaultsOnly:P}}t.read=A;async function e(s,n,F,v){let E=Object.entries(F.flat),u=[];for(let[_,h]of E){let S=F.definesWithSource[_];if(S?.comment){let N=ma(S.comment);for(let R of N.split(`
2207
+ `))u.push(` ${R}`)}let P=ja(h)?"number":"string";u.push(` ${_}: ${P};`)}let D=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...u," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[_,h]of E){let S=F.definesWithSource[_];if(S?.comment&&D.push(ma(S.comment)),ja(h))D.push(`globalThis.STUDIO_DEFINES['${_}'] = ${Number(h)};`);else{let P=h.replace(/\\/g,"\\\\").replace(/'/g,"\\'");D.push(`globalThis.STUDIO_DEFINES['${_}'] = '${P}';`)}}D.push(""),D.push("export {};"),D.push("");let m=pe.Utils.joinPath(s,v??r0.filePaths.dist.definesTs);await n.writeFile(m,D.join(`
2208
+ `))}t.exportDefinesTs=e;function r(s,n){let F=[];return{result:s.replace(/\{\{([^}]+)\}\}/g,(E,u)=>{let D=u.trim();return Object.hasOwn(n,D)?n[D]:(F.push(D),E)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(ux||={});function Ef(x,A,e,r){if(z.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function Bf(x){if(x==="")return{kind:"empty"};if(x.startsWith("#")||x.startsWith(";"))return{kind:"comment",text:x.replace(/^[#;]\s?/,"")};if(x.startsWith("[")&&x.endsWith("]"))return{kind:"section",name:x.slice(1,-1)};let A=x.indexOf("=");return A>0?{kind:"keyValue",key:x.slice(0,A).trim()}:{kind:"other"}}function Cf(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let s of e){let n=Bf(s.trim());if(n.kind==="empty"||n.kind==="other"){r=[];continue}if(n.kind==="comment"){r.push(n.text);continue}if(n.kind==="section"){t=n.name;continue}let F=t?`${t}_${n.key}`:n.key;r.length>0&&(A[F]=r.join(`
2209
+ `)),r=[]}return A}function ma(x){let A=x.split(`
2210
2210
  `);return A.length===1?`/** ${A[0]} */`:`/**
2211
2211
  ${A.map(r=>` * ${r}`).join(`
2212
2212
  `)}
2213
- */`}function pa(x){return x!==""&&!isNaN(Number(x))}function Bl(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function ma(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
2214
- ${r}`:r||x}function ja(x,A,e,r,t,s,n){let F=t?`${t}_${r}`:r,f={value:x,sourceUri:A,sourceLine:dl(e,r,t)};return s[F]&&(f.comment=`${n}: ${s[F]}`),f}function Cl(x,A,e,r,t,s,n,F,f){r[x]||(r[x]={});for(let[E,u]of Object.entries(A)){let D=`${x}_${E}`,m=F[D],_=`${u}`;e[D]=_,r[x][E]=_;let h=ja(_,s,n,E,x,F,f);h.comment=ma(t[D]?.comment,m,f),t[D]=h}}async function Cr(x,A,e,r,t,s){if(!await x.stat(A))return;let n=await x.readFile(A),F=vl(n),f=ba.parse(F),E=A.toString(),u=F.split(/\r?\n/),D=El(F);for(let[m,_]of Object.entries(f))if(typeof _=="object"&&_!==null)Cl(m,_,e,r,t,E,u,D,s);else{let h=D[m],S=`${_}`;e[m]=S;let P=ja(S,E,u,m,null,D,s);P.comment=ma(t[m]?.comment,h,s),t[m]=P}}function dl(x,A,e){let r=e===null,t=e?`[${e}]`:null,s=new RegExp(`^\\s*${ul(A)}\\s*=`);for(let n=0;n<x.length;n++){let F=x[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&s.test(x[n]))return n}return 0}function ul(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Gt=W0(require("semver/preload")),{GET:ts,POST:Ot,PUT:ha}=(0,ga.default)();function aA(x){if(x)return{authorization:`Bearer ${x}`}}var tx;(_=>{_.getAPIUrl=h=>{let S="https://api.registry.microtronics.com";return h===ux.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":h===ux.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(h,S,P,N){let{data:R,error:O}=await ts("/publisher/{publisherId}/libraries/{libraryId}",{...(0,_.getAPIUrl)(N),headers:{...aA(h)},params:{path:{publisherId:S,libraryId:P}}});if(O)throw new Error(O.reason);return R}_.getLibraryProfile=A;async function e(h,S,P=!1){let N=await fetch(S,{headers:{...aA(h),...m(!0)}});if(N.status===200)return P?await N.json():await N.arrayBuffer();throw new Error("Failed to fetch the library content")}_.fetchCustomContent=e;async function r(h,S,P){try{let{data:N,error:R}=await ts("/publisher/{publisherId}",{...(0,_.getAPIUrl)(P),headers:{...aA(h)},params:{path:{publisherId:S}}});return R?(console.error(R),null):N}catch(N){return console.error(N),null}}_.getPublisher=r;async function t(h,S,P,N){try{let{data:R,error:O}=await Ot("/packages/{publisherId}/applications",{...(0,_.getAPIUrl)(N),headers:{...aA(h),...m(!0)},params:{path:{publisherId:S}},body:{...P}});if(O)throw new Error(O.reason);return R.id}catch{return null}}_.createNewApplication=t;async function s(h,S,P,N){let{data:R,error:O}=await ts("/publisher/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(N),headers:{...aA(h),...m(!0)},params:{path:{publisherId:S,applicationId:P}}});if(O)throw new Error(O.reason);return R}_.getExistingApplication=s;async function n(h,S,P,N,R){try{let{error:O}=await ha("/packages/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(R),headers:{...aA(h),...m(!0)},params:{path:{publisherId:S,applicationId:P}},body:{...N}});if(O)throw new Error(O.reason);return}catch{return null}}_.updateExistingApplication=n;async function F(h,S,P,N,R,O){let n0=!!Gt.default.valid(N);try{let{error:L}=await ha("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(O),headers:{...aA(h),...m(n0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{...R}});if(L)throw new Error(L.reason);return}catch{return null}}_.updateExistingApplicationVersion=F;async function f(h,S,P,N,R,O){let n0=!!Gt.default.valid(N),{data:L,error:k}=await Ot("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(O),headers:{...aA(h),...m(n0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{},bodySerializer(){return R}});if(k)throw new Error(k.reason||k.err||k);return L}_.publishApplicationVersion=f;let E={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function u(h,S,P,N,R,O){try{let{error:n0}=await Ot("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,_.getAPIUrl)(O),headers:{...aA(h),...m(!0)},params:{path:{publisherId:S,libraryId:P,libraryVersion:N}},body:{...R},bodySerializer(L){let k=new FormData;for(let[I,X]of Object.entries(L))X!==void 0&&k.append(I,new Blob([X],{type:E[I]}),I);return k}});if(n0)throw new Error(n0.reason)}catch(n0){throw console.error(n0),n0}}_.publishLibraryVersion=u;async function D(h,S,P,N,R,O,n0){let L=!!Gt.default.valid(N),{error:k}=await Ot("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,_.getAPIUrl)(n0),headers:{...aA(h),...m(L),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:P,applicationVersion:N,applicationFileName:R}},body:{},bodySerializer(){return O}});if(k)throw new Error(k.reason)}_.updateApplicationFile=D;function m(h=!1){return h?{"X-Semver":"true"}:{}}_.injectSemverHeader=m})(tx||={});var Ko=W0(require("semver/preload"));var ie=require("vscode-uri");var Ge=require("vscode-uri");var Dx=require("vscode-uri");var Xa=W0(require("ajv")),Ya=W0(require("ajv-formats"));var ya={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
2213
+ */`}function ja(x){return x!==""&&!isNaN(Number(x))}function df(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function ga(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
2214
+ ${r}`:r||x}function ya(x,A,e,r,t,s,n){let F=t?`${t}_${r}`:r,v={value:x,sourceUri:A,sourceLine:Df(e,r,t)};return s[F]&&(v.comment=`${n}: ${s[F]}`),v}function uf(x,A,e,r,t,s,n,F,v){r[x]||(r[x]={});for(let[E,u]of Object.entries(A)){let D=`${x}_${E}`,m=F[D],_=`${u}`;e[D]=_,r[x][E]=_;let h=ya(_,s,n,E,x,F,v);h.comment=ga(t[D]?.comment,m,v),t[D]=h}}async function dr(x,A,e,r,t,s){if(!await x.stat(A))return;let n=await x.readFile(A),F=ff(n),v=ha.parse(F),E=A.toString(),u=F.split(/\r?\n/),D=Cf(F);for(let[m,_]of Object.entries(v))if(typeof _=="object"&&_!==null)uf(m,_,e,r,t,E,u,D,s);else{let h=D[m],S=`${_}`;e[m]=S;let P=ya(S,E,u,m,null,D,s);P.comment=ga(t[m]?.comment,h,s),t[m]=P}}function Df(x,A,e){let r=e===null,t=e?`[${e}]`:null,s=new RegExp(`^\\s*${pf(A)}\\s*=`);for(let n=0;n<x.length;n++){let F=x[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&s.test(x[n]))return n}return 0}function pf(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Ut=W0(require("semver/preload")),{GET:ns,POST:Gt,PUT:ka}=(0,_a.default)();function oA(x){if(x)return{authorization:`Bearer ${x}`}}var tx;(_=>{_.getAPIUrl=h=>{let S="https://api.registry.microtronics.com";return h===ux.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":h===ux.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(h,S,P,N){let{data:R,error:U}=await ns("/publisher/{publisherId}/libraries/{libraryId}",{...(0,_.getAPIUrl)(N),headers:{...oA(h)},params:{path:{publisherId:S,libraryId:P}}});if(U)throw new Error(U.reason);return R}_.getLibraryProfile=A;async function e(h,S,P=!1){let N=await fetch(S,{headers:{...oA(h),...m(!0)}});if(N.status===200)return P?await N.json():await N.arrayBuffer();throw new Error("Failed to fetch the library content")}_.fetchCustomContent=e;async function r(h,S,P){try{let{data:N,error:R}=await ns("/publisher/{publisherId}",{...(0,_.getAPIUrl)(P),headers:{...oA(h)},params:{path:{publisherId:S}}});return R?(console.error(R),null):N}catch(N){return console.error(N),null}}_.getPublisher=r;async function t(h,S,P,N){try{let{data:R,error:U}=await Gt("/packages/{publisherId}/applications",{...(0,_.getAPIUrl)(N),headers:{...oA(h),...m(!0)},params:{path:{publisherId:S}},body:{...P}});if(U)throw new Error(U.reason);return R.id}catch{return null}}_.createNewApplication=t;async function s(h,S,P,N){let{data:R,error:U}=await ns("/publisher/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(N),headers:{...oA(h),...m(!0)},params:{path:{publisherId:S,applicationId:P}}});if(U)throw new Error(U.reason);return R}_.getExistingApplication=s;async function n(h,S,P,N,R){try{let{error:U}=await ka("/packages/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(R),headers:{...oA(h),...m(!0)},params:{path:{publisherId:S,applicationId:P}},body:{...N}});if(U)throw new Error(U.reason);return}catch{return null}}_.updateExistingApplication=n;async function F(h,S,P,N,R,U){let t0=!!Ut.default.valid(N);try{let{error:M}=await ka("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(U),headers:{...oA(h),...m(t0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{...R}});if(M)throw new Error(M.reason);return}catch{return null}}_.updateExistingApplicationVersion=F;async function v(h,S,P,N,R,U){let t0=!!Ut.default.valid(N),{data:M,error:k}=await Gt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(U),headers:{...oA(h),...m(t0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{},bodySerializer(){return R}});if(k)throw new Error(k.reason||k.err||k);return M}_.publishApplicationVersion=v;let E={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function u(h,S,P,N,R,U){try{let{error:t0}=await Gt("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,_.getAPIUrl)(U),headers:{...oA(h),...m(!0)},params:{path:{publisherId:S,libraryId:P,libraryVersion:N}},body:{...R},bodySerializer(M){let k=new FormData;for(let[L,W]of Object.entries(M))W!==void 0&&k.append(L,new Blob([W],{type:E[L]}),L);return k}});if(t0)throw new Error(t0.reason)}catch(t0){throw console.error(t0),t0}}_.publishLibraryVersion=u;async function D(h,S,P,N,R,U,t0){let M=!!Ut.default.valid(N),{error:k}=await Gt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,_.getAPIUrl)(t0),headers:{...oA(h),...m(M),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:P,applicationVersion:N,applicationFileName:R}},body:{},bodySerializer(){return U}});if(k)throw new Error(k.reason)}_.updateApplicationFile=D;function m(h=!1){return h?{"X-Semver":"true"}:{}}_.injectSemverHeader=m})(tx||={});var Vo=W0(require("semver/preload"));var ae=require("vscode-uri");var Ue=require("vscode-uri");var Dx=require("vscode-uri");var Qa=W0(require("ajv")),Za=W0(require("ajv-formats"));var wa={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
2215
2215
 
2216
- \u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
2216
+ \u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},flexibleContainers:{type:"object",additionalProperties:!1,description:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length up/down.",markdownDescription:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length `up`/`down`.",properties:{timeseries:{type:"boolean",description:"Use up+ for timeseries (histdata) containers so records can be transferred with a dynamic length.",markdownDescription:"Use `up+` for timeseries (histdata) containers so records can be transferred with a dynamic length."},config:{type:"boolean",description:"Use up+/down+ for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions.",markdownDescription:"Use `up+`/`down+` for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions."}}},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
2217
2217
 
2218
- Used for real-time data exchange between device and server during commissioning.`,$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)(?!(dde|cloudProject|constants|state|result|volatile|timeseries|aloha|setting|command|storage|relations))[a-zA-Z_][0-9a-zA-Z_]*$":{type:"object",description:"Custom configuration container. Field names must start with a letter or underscore and may contain letters, digits, and underscores.",$ref:"#/$defs/configurationFields"}},allOf:[{if:{properties:{cloudProject:{const:!1}}},then:{type:"object",additionalProperties:!1,errorMessage:{additionalProperties:"Non-cloud projects only allow standard containers (state, result, volatile, timeseries, aloha, setting, command, storage, relations). Set 'cloudProject' to true to use custom top-level containers."},properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value."},cloudProject:{type:"boolean"},constants:{type:"object",description:"Declare constants that can be used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}}}}],$defs:{stateContainer:{type:"object",title:"state - Transferred from the device",description:"Use this container for low-frequency state changes. Data is transferred from the device to the server.",markdownDescription:`**state** \u2013 Transferred from the device
2218
+ Used for real-time data exchange between device and server during commissioning.`,$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)(?!(dde|cloudProject|flexibleContainers|constants|state|result|volatile|timeseries|aloha|setting|command|storage|relations))[a-zA-Z_][0-9a-zA-Z_]*$":{type:"object",description:"Custom configuration container. Field names must start with a letter or underscore and may contain letters, digits, and underscores.",$ref:"#/$defs/configurationFields"}},allOf:[{if:{properties:{cloudProject:{const:!1}}},then:{type:"object",additionalProperties:!1,errorMessage:{additionalProperties:"Non-cloud projects only allow standard containers (state, result, volatile, timeseries, aloha, setting, command, storage, relations). Set 'cloudProject' to true to use custom top-level containers."},properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value."},cloudProject:{type:"boolean"},flexibleContainers:{type:"object",additionalProperties:!1,description:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length up/down.",markdownDescription:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length `up`/`down`.",properties:{timeseries:{type:"boolean",description:"Use up+ for timeseries (histdata) containers so records can be transferred with a dynamic length.",markdownDescription:"Use `up+` for timeseries (histdata) containers so records can be transferred with a dynamic length."},config:{type:"boolean",description:"Use up+/down+ for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions.",markdownDescription:"Use `up+`/`down+` for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions."}}},constants:{type:"object",description:"Declare constants that can be used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}}}}],$defs:{stateContainer:{type:"object",title:"state - Transferred from the device",description:"Use this container for low-frequency state changes. Data is transferred from the device to the server.",markdownDescription:`**state** \u2013 Transferred from the device
2219
2219
 
2220
2220
  Use this container for **low-frequency state changes**.
2221
2221
 
@@ -2309,40 +2309,40 @@ Accepts a number (\u2265 0) or a relation link (\`@container.field\`).`,minimum:
2309
2309
 
2310
2310
  \u26A0\uFE0F **Important:** This does not activate any alarming. Alarming must be implemented in the DLO.
2311
2311
 
2312
- Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var Qt=require("yaml");var pe=require("yaml");var tt;(A=>A.CODE={ddeFieldLength:"field_name_length"})(tt||={});var G0;(H=>{let x;(B0=>(B0.state="state",B0.result="result",B0.aloha="aloha",B0.volatile="volatile",B0.setting="setting",B0.command="command",B0.storage="storage",B0.relations="relations"))(x=H.DDEContainerName||={});let A;(l0=>(l0.configA="configA",l0.configB="configB",l0.configC="configC",l0.config0="config0",l0.config1="config1",l0.config2="config2",l0.config3="config3",l0.config4="config4",l0.config5="config5",l0.config6="config6",l0.config7="config7",l0.config8="config8",l0.config9="config9",l0.histdata0="histdata0",l0.histdata1="histdata1",l0.histdata2="histdata2",l0.histdata3="histdata3",l0.histdata4="histdata4",l0.histdata5="histdata5",l0.histdata6="histdata6",l0.histdata7="histdata7",l0.histdata8="histdata8",l0.histdata9="histdata9",l0.aloha="aloha",l0.alerts="alerts",l0.applog="applog"))(A=H.ContainerName||={});let e;(G=>(G.cx="cx",G.hx="hx",G.cb="cb",G.aloha="aloha",G.applog="applog"))(e=H.ContainerType||={});let r;(_0=>(_0.up="up",_0.down="down",_0.upPlus="up+",_0.downPlus="down+",_0.none="none",_0.backendOnly="backend-only",_0.deviceOnly="device-only",_0.both="both",_0.bothPlus="both+",_0.noneBackend="none-be"))(r=H.TransferDirection||={});function t(J,a0){return J==="cx"&&!["backend-only"].includes(a0)?"DDE_CID_CONFIG":J==="hx"?"DDE_CID_HISTDATA":J==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let s=["up","up+","down","down+","both","none","both+","backend-only","device-only"],n=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:s},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:s},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:s},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:s},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:s},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:s},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:s},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:s},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:s},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:s},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let m=["astring","nstring","cstring","wstring","ustring"],_=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:m,unit:m,chartMinimum:_,chartMaximum:_,scale:_,offset:_,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:_,chartAlarmHigh:_,chartWarningLow:_,chartWarningHigh:_,chartHysteresis:_,chartTriggerThreshold:_,chartTriggerRelation:_,chartSetPoint:_};function S(J,a0,t0){let x0=a0[J];if(x0!==void 0)if(H.regexRelation.exec(`${x0}`)){let o0=J==="chartSetPoint",[G,...i0]=x0.split("."),[,f0]=G.split("@"),B0=Object.values(t0.containers).find(ix=>ix.title===f0),C0=i0.join("."),_0=o0?";":"%",N0=(o0?"":"%")+(B0?.name||f0)+_0;if(N0=N0+`${C0}`,o0){let ix=t0.setPointList[a0.name];N0=N0+`;actual_output_value_${ix}`}return N0}else return x0}H.parseXMLValueWithRelation=S;function P(J){let{bitmask:a0}=J;if(!a0)return;let t0="$",x0=a0.replaceAll(" ","");if(a0.startsWith("0x"))t0+=x0.substring(2);else if(x0.startsWith("0b")){let o0=x0.substring(2).replaceAll(" ","");t0+=parseInt(o0,2).toString(16).toUpperCase()}return t0}H.parseXMLBitmask=P;function N(J){return J.type==="binary"?J.defaultValue.substring(2):J.defaultValue==="NaN"?"NAN":J.defaultValue}H.parseXMLDefaultValue=N,H.TDEF_NUMBER={xmlOut(J,a0,t0){J.decpl=S("decimalPlaces",a0,t0),J.decpl===void 0&&(J.decpl=0),J.vscale=S("scale",a0,t0),J.vofs=S("offset",a0,t0),J.min=S("chartMinimum",a0,t0),J.max=S("chartMaximum",a0,t0)}};let O={isBlob:1,xmlOut(J,a0){J.max=a0.byteSize}},n0={xmlOut(J){J.decpl=-1,J.param0="local",J.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...H.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...n0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...n0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...O,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...O,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...O,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...O,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...O,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...O,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let I=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function X(J){let a0=J.toLowerCase();return I.includes(a0)||/^field\d+$/.test(a0)||/^ch\d+$/.test(a0)}H.checkForReservedFieldName=X;function W(J){return!!J.fields.find(a0=>a0.library===null&&a0.type!=="shadow")}H.hasContainerAppFields=W})(G0||={});var te=G0.DDEContainerName,ka=G0.allowedRelationTypes,pl=G0.regexRelation,bl=G0.ContainerType,ml=G0.checkForReservedFieldName,Ut=G0.ContainerName,_a=G0.CONTAINER_DEFS,jl=G0.SERVER_CONTAINER,hl=G0.HISTDATA_CONTAINER,gl=G0.CONFIG_CONTAINER,dr=G0.TransferDirection,wa=G0.fieldTypeDefinitions,Yx=b0.yamlRangeToLineInformation,Ht;(A=>{class x{constructor(r,t,s){this.manifest=r;this.libraryFiles=t;this.ddeHistory=s}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:s,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(s),this.libraryYaml[t.libraryName]=F}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,s=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(n=>n.title===s)||null}parseMainDDE(r,t){let{parsedDDE:s,diagnostics:n}=this.parseYamlFile(r,t);return n.find(E=>E.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(s),diagnostics:n}}parseYamlFile(r,t,s){this.fileDiagnostics.length=0;let n=new pe.LineCounter,F=(0,pe.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null};let f=F.contents||new pe.YAMLMap;return this.validateContainerDefinition(f.items).forEach(u=>{this.validateAllowedContainer(r,u,n,s),this.validateContainerFields(F,r,u,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),r,n,F,s),diagnostics:[...this.fileDiagnostics],parsedYaml:F}}yamlDocToDdeJson(r,t,s,n,F){let f={containers:{},setPointList:{}},E=new Map,u=[...Object.values(te)];if(r.get("cloudProject")){let m=Object.values(this.previousVersion.containers).map(S=>S.title),_=[...r.keys()].filter(S=>!this.reservedTopLevelKeys().has(S)),h=[...new Set([...u,...m,..._])];u.length=0,u.push(...h)}for(let m of u)r.has(m)&&E.set(m,r.get(m));let D=r.get("timeseries");if(D)for(let[m,_]of D)E.set(m,_);for(let[m,_]of E){let{realContainer:h,transferDirection:S,legacyTitle:P}=this.getRealContainerInformation(m);if(!h){let n0=this.findContainerKeyRange(n,m);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${m}" could not be placed - no free container slot available.`,...n0?Yx(s,n0):{line:0,startCharacter:0,endCharacter:0}});continue}let N=_a[h],R=m.includes("timeseries_")?m.replace("timeseries_",""):m,O={name:h,title:R,previousTitle:P,containerType:N.ctype,volatile:m===te.volatile,transferDirection:S,fieldCount:_.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};F&&O.libraries.push(F);for(let[n0,L]of _){let k=[],I=L.get("type"),X=wa[I];if(!(!X&&I!=="array")){if(I==="array"){let W=[],H=L.get("length"),J=L.get("fields"),a0={name:n0,length:H,library:F||null,fields:[]};O.arrays[n0]=a0;for(let t0=0;t0<H;t0++){let x0={name:n0,index:t0};for(let[o0,G]of J){let i0=wa[G.get("type")];if(!i0)continue;a0.fields?.find(_0=>_0.name===o0)||a0.fields.push({name:o0,type:G.get("type"),byteSize:i0.len||G.get("bytes")||G.get("length")});let f0=`${n0}[${t0}].${o0}`,{fields:B0,shadowInfo:C0}=this.createDDEJsonFields(f0,F,i0,G);B0.forEach(_0=>{_0.arrayRef=x0}),C0&&(O.shadows[C0.name]=C0),W.push(...B0)}}k.push(...W)}else{let{arrayInfo:W,fields:H,shadowInfo:J}=this.createDDEJsonFields(n0,F,X,L);W&&(O.arrays[W.name]=W),J&&(O.shadows[J.name]=J),k.push(...H)}k.forEach(W=>{W.index=++O.fieldIndex,O.fields.push(W),O.size+=W.byteSize})}}f.containers[h]=O}return f}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants","timeseries",...Object.values(te)])}getRealContainerInformation(r){let t,s,n;if(this.previousVersion){let F=r.startsWith("timeseries_")?r.substring(11):r,{name:f,direction:E,previousTitle:u}=this.findPreviousUsedContainer(F);t=f,s=E,n=u}if(!t){let F=Object.entries(this.usedContainerNames).find(([,f])=>f===r);F&&(t=F[0])}return t||(t=this.findNextFreeContainer(r)),t&&(this.usedContainerNames[t]=r),s||(s=[te.setting,te.command].includes(r)?dr.down:dr.up),s===dr.up&&t&&_a[t].xmits.includes(dr.upPlus)&&(s=dr.upPlus),t&&[Ut.configA,Ut.configB].includes(t)&&(s=dr.backendOnly),{realContainer:t,transferDirection:s,legacyTitle:n}}findContainerKeyRange(r,t){let s=r.contents;return s?.items?t.startsWith("timeseries_")?s.items.find(u=>u.key.value==="timeseries")?.value?.items.find(u=>u.key.value===t)?.key.range:s.items.find(F=>F.key.value===t)?.key.range:void 0}findNextFreeContainer(r){if(r===Ut.aloha)return Ut.aloha;let t=gl;r.startsWith("timeseries_")?t=hl:[te.relations,te.storage].includes(r)&&(t=jl);let s=this.previousVersion?.containers;return s&&(t=t.filter(n=>!Object.hasOwn(s,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,s=Object.values(t).find(n=>n.title===r);return{name:s?.name,direction:s?.transferDirection,previousTitle:s?.previousTitle}}createDDEJsonFields(r,t,s,n){let F=n.get("array"),f=[],E,u;if(F){E={name:r,library:t||null,length:F};for(let D=0;D<F;D++){let m=`${r.toLowerCase()}[${D}]`;f.push(this.buildDDEJsonField(m,n,{name:r,index:D},s,t,null))}}else{let D=this.buildDDEJsonField(r,n,null,s,t,null);f.push(D);let m=n.get("shadowFields");if(m){u={name:D.name,byteSize:D.byteSize,byteOffset:D.byteOffset};for(let[_,h]of m){let S=_;r.includes(".")&&(S=r.split(".")[0]+`.${_}`),f.push(this.buildDDEJsonField(S,h,null,s,t,D.name))}}}return{arrayInfo:E,shadowInfo:u,fields:f}}buildDDEJsonField(r,t,s,n,F,f){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:s,shadowRef:f,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,pe.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(s=>{let F=s.key.value;F==="timeseries"?s.value.items.forEach(f=>{f.key.value=`timeseries_${f.key}`,t.push(f)}):["dde","cloudProject","constants"].includes(F)||t.push(s)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,s,n){if(!t.value)return;let f=t.key.value;if(n&&(f.startsWith("aloha")||f.startsWith("timeseries"))){let E=f.includes("_")?f.split("_")[1]:f;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within a library`,...Yx(s,t.key.range)})}if(z.isAnalytics(this.manifest)&&![te.relations,te.storage].includes(f)){let E=f.includes("_")?f.split("_")[1]:f;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...Yx(s,t.key.range)})}}validateContainerFields(r,t,s,n){let F=s.value;if(!F)return;let f=s.key.value;Object.hasOwn(this.fieldNamesPerContainer,f)||(this.fieldNamesPerContainer[f]=[]);let E=this.getContainerOfPreviousVersion(f);F.items.forEach(u=>{let m=u.key.value;this.checkForContainerRelation(u,r,t,n),this.validateFieldName(u,f,t,n),this.checkFieldNameLength(u,f,t,n);let _=E?.fields.find(O=>O.id===m.toLowerCase()),h=u.value,S=h.get("type",!0),P=this.resolvePossibleAlias(r,S),N=h.get("bytes",!0),R=this.resolvePossibleAlias(r,N);_&&(S&&P&&_.type!==P&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${_.type}" to "${P}".
2313
- Changing the type of an existing field can result in data loss or unexpected behaviour.`,...Yx(n,S.range)}),N&&R&&_.byteSize!==R&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${_.byteSize}' to '${R}'.
2314
- Changing the size of an existing field can result in data loss or unexpected behaviour.`,...Yx(n,N.range)}))})}checkForContainerRelation(r,t,s,n){let F=r.value.get("fields");F&&F.items.forEach(E=>{this.checkForContainerRelation(E,t,s,n)}),r.value.items.forEach(E=>{let u=E.value;if(u?.value&&pl.exec(`${u.value}`)){let D=E.key.value;if(D){if(!Object.hasOwn(ka,D))return this.fileDiagnostics.push({file:s,level:"error",message:`Property "${D}" does not allow relations.`,...Yx(n,u.range)});if(["scale","offset"].includes(D))return this.fileDiagnostics.push({file:s,level:"warning",message:`Container relations for "${D}" are not available within the dlo source.`,...Yx(n,u.range)})}return this.validateContainerRelation(D,u,t,s,n)}})}validateFieldName(r,t,s,n){let F=this.fieldNamesPerContainer[t],f=r.key,E=f.value;ml(E)&&this.fileDiagnostics.push({file:s,level:"error",message:`Reserved property "${E}" is not allowed.`,...Yx(n,f.range)});let u=r.value.get("shadowFields");u&&u.items.forEach(D=>{this.validateFieldName(D,t,s,n)}),F.includes(E.toLowerCase())?this.fileDiagnostics.push({file:s,level:"error",message:`Field name "${E}" is already occupied`,...Yx(n,f.range)}):F.push(E.toLowerCase())}checkFieldNameLength(r,t,s,n){let F=r.key,f=F.value,u=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,D=31-u.length;u.length+f.length>31&&this.fileDiagnostics.push({file:s,level:"error",code:tt.CODE.ddeFieldLength,message:`Field name "${f}" to long. ${D} characters allowed for this field/container.`,...Yx(n,F.range)})}validateContainerRelation(r,t,s,n,F){let[f,E,u]=t.value.split(".",3),[D,m]=f.split("@"),_=D?D.split(":")[1]:null,S=(_&&this.libraryYaml[_]?this.libraryYaml[_]:s).contents?.get(m),P=E.split("[")[0],N=null;if(S){let R=S.get(P);if(R)if(u){let O=R.get("fields");O&&O.get(u)&&(N=O.get(u))}else N=R;else N=this.findRelatedShadowField(S,P)}if(N){let R=ka[r],O=N.get("type");R.includes(O)||this.fileDiagnostics.push({file:n,level:"error",message:`Related field type "${O}" is not allowed for attribute "${r}".`,...Yx(F,t.range)})}else _&&!this.libraryYaml[_]?this.fileDiagnostics.push({file:n,level:"error",message:`Related library "${_}" does not exist.`,...Yx(F,t.range)}):this.fileDiagnostics.push({file:n,level:"error",message:`Related field "${t.value}" does not exist.`,...Yx(F,t.range)})}findRelatedShadowField(r,t){for(let s of r.items){let F=s.value.get("shadowFields");if(!F)continue;let f=F.get(t);if(f)return f}}mergeAndFormat(r){let t={containers:{},setPointList:{}};for(let s of this.libraryDDE)this.combineDDE(t,s);return this.combineDDE(t,r),this.sortContainerFields(t),this.generateSetPointList(t),t}combineDDE(r,t){for(let[s,n]of Object.entries(t.containers)){let F=r.containers[s];F?(F.title=n.title,F.knownNames.unshift(n.title),F.libraries.push(...n.libraries),F.fields.push(...n.fields),F.arrays={...F.arrays,...n.arrays},F.shadows={...F.shadows,...n.shadows}):(F=r.containers[s]=structuredClone(n),F.knownNames.unshift(n.title),F.fieldCount=F.fields.length,F.fieldIndex=0);let f=this.initialContainerByteOffset(F);for(let[E,u]of F.fields.entries()){if(u.shadowRef){let D=F.shadows[u.shadowRef];u.byteOffset=D.byteOffset}else u.byteOffset=f,this.updateShadowFieldInformation(r.containers[s],u),f+=u.byteSize||0;E>F.fieldCount-1&&(u.index+=F.fieldIndex)}F.fieldIndex+=n.fieldIndex,F.knownNames=[...new Set(F.knownNames)],F.libraries=[...new Set(F.libraries)],F.fieldCount=F.fields.length}}initialContainerByteOffset(r){return r.containerType===bl.hx?1:0}updateShadowFieldInformation(r,t){t&&Object.hasOwn(r.shadows,t.name)&&(r.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(r){for(let t of Object.values(r.containers)){let{sortedFields:s,containerSize:n}=this.sortFields(t);t.fields=s,t.size=n,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(D=>!D.shadowRef),s=r.fields.filter(D=>D.shadowRef),n=[],F=r.name;if(this.previousVersion.containers[F]){let D=this.sortPreviousContainerFields(r,t);n.push(...D)}else n.push(...t);n.forEach(D=>{this.updateShadowFieldInformation(r,D)});let E=n[n.length-1],u=E.byteSize+E.byteOffset;return s.forEach(D=>{D.byteOffset=r.shadows[D.shadowRef].byteOffset,n.push(D)}),{sortedFields:n,containerSize:u}}sortPreviousContainerFields(r,t){let s=r.name,n=this.previousVersion.containers[s],F=[],f=this.initialContainerByteOffset(r);for(let E of n.fields){if(E.shadowRef)continue;let u=t.findIndex(m=>E.id===m.name?.toLowerCase());if(u===-1){f=E.byteOffset+E.byteSize;continue}let D=t[u];if(E.type!==D.type&&E.byteSize!==D.byteSize){f=E.byteOffset+E.byteSize;continue}D.byteOffset=E.byteOffset,t.splice(u,1),F.push(D),f=this.initialContainerByteOffset(r)}if(f>this.initialContainerByteOffset(r)){let E=t.shift();F.push(...this.generatePlaceholderFieldIfNeeded(f,E)),this.updateShadowFieldInformation(r,E)}for(let E of t){if(E.shadowRef)E.byteOffset=r.shadows[E.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,E);let u=F[F.length-1];u.shadowRef&&(u=r.shadows[u.shadowRef]),E.byteOffset=u.byteOffset+u.byteSize}F.push(E)}return F}generatePlaceholderFieldIfNeeded(r,t){let s=[];if(t)t.byteOffset=r,s.push(t);else{let n={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};s.push(n)}return s}generateSetPointList(r){r.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(r.containers))for(let s of t.fields)s.chartSetPoint&&(Object.hasOwn(r.setPointList,s.name)||(r.setPointList[s.name]=this.getNextSetpointValue(r.setPointList)))}getNextSetpointValue(r){let t=[...Object.values(r),0];return Math.max(...t)+1}}A.PreCompiler=x})(Ht||={});var Qx=G0.TransferDirection,bA=G0.parseXMLValueWithRelation,yl=G0.parseXMLBitmask,kl=G0.parseXMLDefaultValue,_l=G0.fieldTypeDefinitions;function ns(x,A){let r=[];function t(F,f=!0){if(f){if(Array.isArray(F)){r.push.apply(r,F);return}r.push(""+F)}}function s(F,f){F!=="mergeofs"&&t(`${F}=${f}`)}t("// DDE STRUCTURE created by Microtronics Studio");let n="source=rm2mraw";for(let[F,f]of Object.entries(A.containers)){F.startsWith("histdata")&&f.transferDirection!==Qx.deviceOnly&&(t("<split>"),t(n),t("target="+F),t("key=0"+F.substr(-1,1)),t("</split>")),t("<table>"),s("name",F),s("alias",f.title),s("title",f.title.replace("_"," "));let E={};[Qx.none,Qx.backendOnly,Qx.deviceOnly,Qx.down,Qx.downPlus].includes(f.transferDirection)&&s("upload","0"),[Qx.none,Qx.backendOnly,Qx.deviceOnly,Qx.up,Qx.upPlus].includes(f.transferDirection)&&s("download","0"),(z.isIotApp(x)||z.isLibrary(x))&&[Qx.up,Qx.upPlus].includes(f.transferDirection)&&s("edit","99");for(let u of f.fields){if(u.type==="shadow")continue;let D=wl(u),m=_l[D.type],_=bA("title",D,A)||D.name;!_.startsWith("%")&&D.library&&(_=`${D.library}: ${_}`);let h={title:_,alias:D.name,index:u.index,...E};h.byteofs=`${D.byteOffset}`;for(let[S,P]of Object.entries(m.xml))h[S]=P;Object.hasOwn(m,"xmlOut")&&m.xmlOut(h,D,A),h.units=bA("unit",D,A),h.chmode=bA("channelMode",D,A),h.ialarm_high=bA("chartAlarmHigh",D,A),h.ialarm_low=bA("chartAlarmLow",D,A),h.iwarn_high=bA("chartWarningHigh",D,A),h.iwarn_low=bA("chartWarningLow",D,A),h.hysterese=bA("chartHysteresis",D,A),h.itrigger=bA("chartTriggerThreshold",D,A),h.itriggerus=bA("chartTriggerRelation",D,A),h.setpoint=bA("chartSetPoint",D,A),h.bitmask=yl(D),D.hex&&(h.editmask="%HEX%"),D.readPermission&&(h.view=D.readPermission),D.writePermission&&(h.edit=D.writePermission),D.defaultValue!==void 0&&(h.default=kl(D)),D.utilsTransferInterval===!0&&(h.param0="%FFFF0005%transfer_interval"),t("<field>"),D.library&&t(`// declared by ${D.library} library`,!0);for(let[S,P]of Object.entries(h))P!==void 0&&s(S,`${P}`);t("</field>")}["alerts","applog"].includes(F)||(t("</table>"),t("// "+f.size+" bytes total size"))}return t("<split>"),t(n),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(n),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
2315
- `)}function wl(x){let A=structuredClone(x),e=x.arrayRef?.index;if(e===void 0)return A;for(let[r,t]of Object.entries(A))A[r]=b0.patchValueWithArrayInfo(t,e);return A}var RA=W0(require("semver"));var jA=W0(require("semver"));var ur={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},ss={max_size:1e5,max_fields:1e3},LA={max_size:4e3,max_fields:1e3},mA={max_size:1024,max_fields:1e3},Dr={configA:ss,configB:ss,configC:ss,config0:LA,config1:LA,config2:LA,config3:LA,config4:LA,config5:LA,config6:LA,config7:LA,config8:LA,config9:LA,histdata0:mA,histdata1:mA,histdata2:mA,histdata3:mA,histdata4:mA,histdata5:mA,histdata6:mA,histdata7:mA,histdata8:mA,histdata9:mA,aloha:{...mA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Jt={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var os=require("vscode-uri");var _x=G0.ContainerType,I0=G0.TransferDirection,nt=G0.regexRelation,Sl=G0.CONFIG_CONTAINER,as=G0.CONTAINER_DEF_DLO_CID_BASE,at=G0.CONTAINER_DEFS,it=G0.fieldTypeDefinitions,$a=b0.isNumeric;function oA(x){let A=it[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var Kt="Microtronics/dlo-core";function Fs(x){return z.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,Kt)?Z0.rangeToVersion(x.libraryDependencies[Kt]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,Kt)?Z0.rangeToVersion(x.libraryDevDependencies[Kt]):null}function $l(x){let A=Fs(x);return A===null||jA.gte(A,"0.3.0")?jA.valid(x.version)?x.version:jA.coerce(`${x.version}`):jA.coerce(x.version)?.major}function is(x){let A=Fs(x);if(A===null)return!1;let e=jA.coerce(A);return jA.gte(e,"1.1.0")}function Tl(x){let A=Fs(x);if(A===null)return!1;let e=jA.coerce(A);return jA.gte(e,"1.15.0")}var Pl=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function ql(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=oA(x);return!A||A==="skip"?!1:Pl.includes(`${A.rwfunc}`)}function Nl(x,A,e){x("PROJECT META");let{dpid:r,registry:t}=e;if(!r)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:s}=Jt[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let n=$l(e);A("APM_VERSION",`${n}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[F,f]of Object.entries(s))$a(f)?A(F,`${f}`):A(F,`"${f}"`)}function Ml(x,A,e,r){let t=r.flat,{definesWithSource:s}=r;A("GLOBAL DEFINES");for(let[n,F]of Object.entries(t)){let f=s[n]?.comment;if(f){let u=f.split(`
2316
- `);if(u.length===1)x(`/** ${u[0]} */`);else{x("/**");for(let D of u)x(` * ${D}`);x(" */")}}let E=Object.hasOwn(t,F);e(n,`${F}`,E)}}function Il(x,A,e,r){let t=parseInt(x.substring(6)),s=1<<t;e[t]=A.size,r.cx_isupm|=[I0.both,I0.none,I0.deviceOnly,I0.up,I0.upPlus].includes(A.transferDirection)?s:0,r.cx_isvolatilem|=A.volatile?s:0,r.cx_isdnm|=[I0.both,I0.none,I0.deviceOnly,I0.down,I0.downPlus].includes(A.transferDirection)?s:0,r.cx_isvlm|=[I0.bothPlus,I0.upPlus,I0.downPlus].includes(A.transferDirection)?s:0}function Ll(x,A,e,r){let t=parseInt(x.substring(8));e[t]=A.size,r.hx_isvlm|=[I0.upPlus].includes(A.transferDirection)?1<<t:0}function Rl(x){return[I0.upPlus].includes(x.transferDirection)}function Ol(x,A,e){let r=0,t=Array(10).fill(0),s={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},n=0,F=Array(10).fill(0),f={hx_isvlm:0},E;for(let[D,m]of Object.entries(e.containers))m.containerType===_x.cx&&m.transferDirection!==I0.backendOnly?(Il(D,m,t,s),r=Math.max(r,m.size)):m.containerType===_x.hx?(Ll(D,m,F,f),r=Math.max(r,m.size)):m.containerType===_x.aloha&&(E=Rl(m),r=Math.max(r,m.size));A("DDE CORE"),x(`#define _DDE_BUF_BYTES (${r}+10)`),x(""),x("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),x(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),x(`#define _DDE_CONFIGS_upm 0b${s.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),x(`#define _DDE_CONFIGS_volatilem 0b${s.cx_isvolatilem.toString(2)} // inits container as volatile`),x(`#define _DDE_CONFIGS_downm 0b${s.cx_isdnm.toString(2)} // reading the container expects strict length`),x(`#define _DDE_CONFIGS_varlenm 0b${s.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),x(`#define _DDE_CONFIGS_rdef 0b${n.toString(2)} // ..apply defaults reading a container with under-length`),x(""),x("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),x(`stock _DDE_HISTS_size[] =[ ${F.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${f.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let u=[...F];Object.hasOwn(e,"applog")&&u.push(125),Object.hasOwn(e,"alerts")&&u.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...u)}`),x(""),E!==void 0&&(x(`#define _DDE_ALOHA_varlen ${E?1:0}`),x(""))}function Gl(x,A,e){for(let[r,t]of Object.entries(e.containers)){if(t.containerType==="applog")continue;A(`${t.title.toUpperCase()} - ${t.transferDirection} via #${r}`);let s=as(t.containerType,t.transferDirection);if(!s){x("// ... container not available in DLO");continue}let n=`DDE_${t.containerType===_x.aloha?_x.aloha:t.title}`,F=at[r];x(`// ${n}_id - container identifier required for ${n}_read/_write operations`),x(`#define ${n}_id (${s}+${F.cnum||0})`),x(`// ${n}_sz - [byte] container total size`),x(`#define ${n}_sz ${t.size}`),F.cnum!==void 0&&(x(`// ${n}_idx - 0+ container index number`),x(`#define ${n}_idx ${F.cnum}`))}}function Ta(x,A,e){let r=[],t=r.push.bind(r);function s(F){t(`
2312
+ Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var Zt=require("yaml");var be=require("yaml");var tt;(A=>A.CODE={ddeFieldLength:"field_name_length"})(tt||={});var G0;(H=>{let x;(B0=>(B0.state="state",B0.result="result",B0.aloha="aloha",B0.volatile="volatile",B0.setting="setting",B0.command="command",B0.storage="storage",B0.relations="relations"))(x=H.DDEContainerName||={});let A;(f0=>(f0.configA="configA",f0.configB="configB",f0.configC="configC",f0.config0="config0",f0.config1="config1",f0.config2="config2",f0.config3="config3",f0.config4="config4",f0.config5="config5",f0.config6="config6",f0.config7="config7",f0.config8="config8",f0.config9="config9",f0.histdata0="histdata0",f0.histdata1="histdata1",f0.histdata2="histdata2",f0.histdata3="histdata3",f0.histdata4="histdata4",f0.histdata5="histdata5",f0.histdata6="histdata6",f0.histdata7="histdata7",f0.histdata8="histdata8",f0.histdata9="histdata9",f0.aloha="aloha",f0.alerts="alerts",f0.applog="applog"))(A=H.ContainerName||={});let e;(O=>(O.cx="cx",O.hx="hx",O.cb="cb",O.aloha="aloha",O.applog="applog"))(e=H.ContainerType||={});let r;(_0=>(_0.up="up",_0.down="down",_0.upPlus="up+",_0.downPlus="down+",_0.none="none",_0.backendOnly="backend-only",_0.deviceOnly="device-only",_0.both="both",_0.bothPlus="both+",_0.noneBackend="none-be"))(r=H.TransferDirection||={});function t(J,a0){return J==="cx"&&!["backend-only"].includes(a0)?"DDE_CID_CONFIG":J==="hx"?"DDE_CID_HISTDATA":J==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let s=["up","up+","down","down+","both","none","both+","backend-only","device-only"],n=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:s},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:s},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:s},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:s},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:s},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:s},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:s},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:s},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:s},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:s},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let m=["astring","nstring","cstring","wstring","ustring"],_=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:m,unit:m,chartMinimum:_,chartMaximum:_,scale:_,offset:_,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:_,chartAlarmHigh:_,chartWarningLow:_,chartWarningHigh:_,chartHysteresis:_,chartTriggerThreshold:_,chartTriggerRelation:_,chartSetPoint:_};function S(J,a0,n0){let Z=a0[J];if(Z!==void 0)if(H.regexRelation.exec(`${Z}`)){let o0=J==="chartSetPoint",[O,...i0]=Z.split("."),[,l0]=O.split("@"),B0=Object.values(n0.containers).find(ix=>ix.title===l0),C0=i0.join("."),_0=o0?";":"%",$0=(o0?"":"%")+(B0?.name||l0)+_0;if($0=$0+`${C0}`,o0){let ix=n0.setPointList[a0.name];$0=$0+`;actual_output_value_${ix}`}return $0}else return Z}H.parseXMLValueWithRelation=S;function P(J){let{bitmask:a0}=J;if(!a0)return;let n0="$",Z=a0.replaceAll(" ","");if(a0.startsWith("0x"))n0+=Z.substring(2);else if(Z.startsWith("0b")){let o0=Z.substring(2).replaceAll(" ","");n0+=parseInt(o0,2).toString(16).toUpperCase()}return n0}H.parseXMLBitmask=P;function N(J){return J.type==="binary"?J.defaultValue.substring(2):J.defaultValue==="NaN"?"NAN":J.defaultValue}H.parseXMLDefaultValue=N,H.TDEF_NUMBER={xmlOut(J,a0,n0){J.decpl=S("decimalPlaces",a0,n0),J.decpl===void 0&&(J.decpl=0),J.vscale=S("scale",a0,n0),J.vofs=S("offset",a0,n0),J.min=S("chartMinimum",a0,n0),J.max=S("chartMaximum",a0,n0)}};let U={isBlob:1,xmlOut(J,a0){J.max=a0.byteSize}},t0={xmlOut(J){J.decpl=-1,J.param0="local",J.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...H.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...t0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...t0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...U,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...U,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...U,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...U,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...U,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...U,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let L=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function W(J){let a0=J.toLowerCase();return L.includes(a0)||/^field\d+$/.test(a0)||/^ch\d+$/.test(a0)}H.checkForReservedFieldName=W;function Q(J){return!!J.fields.find(a0=>a0.library===null&&a0.type!=="shadow")}H.hasContainerAppFields=Q})(G0||={});var ne=G0.DDEContainerName,Sa=G0.allowedRelationTypes,mf=G0.regexRelation,nt=G0.ContainerType,jf=G0.checkForReservedFieldName,Ht=G0.ContainerName,ss=G0.CONTAINER_DEFS,hf=G0.SERVER_CONTAINER,gf=G0.HISTDATA_CONTAINER,yf=G0.CONFIG_CONTAINER,yx=G0.TransferDirection,$a=G0.fieldTypeDefinitions,Jx=b0.yamlRangeToLineInformation,is="flexibleContainers",Jt;(A=>{class x{constructor(r,t,s){this.manifest=r;this.libraryFiles=t;this.ddeHistory=s}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};flexibleContainers={timeseries:!1,config:!1};historyPlusDirectionContainers=new Set;parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:s,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(s),this.libraryYaml[t.libraryName]=F}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,s=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(n=>n.title===s)||null}parseMainDDE(r,t){let{parsedDDE:s,diagnostics:n,parsedYaml:F,lineCounter:v}=this.parseYamlFile(r,t);return n.find(D=>D.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(s,r,v,F),diagnostics:[...this.fileDiagnostics]}}parseYamlFile(r,t,s){this.fileDiagnostics.length=0;let n=new be.LineCounter,F=(0,be.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null,lineCounter:n};let v=F.contents||new be.YAMLMap;return this.validateContainerDefinition(v.items).forEach(u=>{this.validateAllowedContainer(r,u,n,s),this.validateContainerFields(F,r,u,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),r,n,F,s),diagnostics:[...this.fileDiagnostics],parsedYaml:F,lineCounter:n}}yamlDocToDdeJson(r,t,s,n,F){F||(this.flexibleContainers=this.readFlexibleContainers(r.get(is)));let v={containers:{},setPointList:{}},E=new Map,u=[...Object.values(ne)];if(r.get("cloudProject")){let m=Object.values(this.previousVersion.containers).map(S=>S.title),_=[...r.keys()].filter(S=>!this.reservedTopLevelKeys().has(S)),h=[...new Set([...u,...m,..._])];u.length=0,u.push(...h)}for(let m of u)r.has(m)&&E.set(m,r.get(m));let D=r.get("timeseries");if(D)for(let[m,_]of D)E.set(m,_);for(let[m,_]of E){let{realContainer:h,transferDirection:S,legacyTitle:P,directionFromHistory:N}=this.getRealContainerInformation(m);if(!h){let M=this.findContainerKeyRange(n,m);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${m}" could not be placed - no free container slot available.`,...M?Jx(s,M):{line:0,startCharacter:0,endCharacter:0}});continue}N&&this.isPlusDirection(S)&&this.historyPlusDirectionContainers.add(h);let R=ss[h],U=m.includes("timeseries_")?m.replace("timeseries_",""):m,t0={name:h,title:U,previousTitle:P,containerType:R.ctype,volatile:m===ne.volatile,transferDirection:S,fieldCount:_.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};F&&t0.libraries.push(F);for(let[M,k]of _){let L=[],W=k.get("type"),Q=$a[W];if(!(!Q&&W!=="array")){if(W==="array"){let H=[],J=k.get("length"),a0=k.get("fields"),n0={name:M,length:J,library:F||null,fields:[]};t0.arrays[M]=n0;for(let Z=0;Z<J;Z++){let o0={name:M,index:Z};for(let[O,i0]of a0){let l0=$a[i0.get("type")];if(!l0)continue;n0.fields?.find($0=>$0.name===O)||n0.fields.push({name:O,type:i0.get("type"),byteSize:l0.len||i0.get("bytes")||i0.get("length")});let B0=`${M}[${Z}].${O}`,{fields:C0,shadowInfo:_0}=this.createDDEJsonFields(B0,F,l0,i0);C0.forEach($0=>{$0.arrayRef=o0}),_0&&(t0.shadows[_0.name]=_0),H.push(...C0)}}L.push(...H)}else{let{arrayInfo:H,fields:J,shadowInfo:a0}=this.createDDEJsonFields(M,F,Q,k);H&&(t0.arrays[H.name]=H),a0&&(t0.shadows[a0.name]=a0),L.push(...J)}L.forEach(H=>{H.index=++t0.fieldIndex,t0.fields.push(H),t0.size+=H.byteSize})}}v.containers[h]=t0}return v}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants",is,"timeseries",...Object.values(ne)])}getRealContainerInformation(r){let t,s,n,F=!1;if(this.previousVersion){let v=r.startsWith("timeseries_")?r.substring(11):r,{name:E,direction:u,previousTitle:D}=this.findPreviousUsedContainer(v);t=E,s=u,n=D,F=s!==void 0}if(!t){let v=Object.entries(this.usedContainerNames).find(([,E])=>E===r);v&&(t=v[0])}return t||(t=this.findNextFreeContainer(r)),t&&(this.usedContainerNames[t]=r),s||(s=[ne.setting,ne.command].includes(r)?yx.down:yx.up),t&&[Ht.configA,Ht.configB].includes(t)&&(s=yx.backendOnly,F=!1),{realContainer:t,transferDirection:s,legacyTitle:n,directionFromHistory:F}}findContainerKeyRange(r,t){let s=r.contents;return s?.items?t.startsWith("timeseries_")?s.items.find(u=>u.key.value==="timeseries")?.value?.items.find(u=>u.key.value===t)?.key.range:s.items.find(F=>F.key.value===t)?.key.range:void 0}findNextFreeContainer(r){if(r===Ht.aloha)return Ht.aloha;let t=yf;r.startsWith("timeseries_")?t=gf:[ne.relations,ne.storage].includes(r)&&(t=hf);let s=this.previousVersion?.containers;return s&&(t=t.filter(n=>!Object.hasOwn(s,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,s=Object.values(t).find(n=>n.title===r);return{name:s?.name,direction:s?.transferDirection,previousTitle:s?.previousTitle}}createDDEJsonFields(r,t,s,n){let F=n.get("array"),v=[],E,u;if(F){E={name:r,library:t||null,length:F};for(let D=0;D<F;D++){let m=`${r.toLowerCase()}[${D}]`;v.push(this.buildDDEJsonField(m,n,{name:r,index:D},s,t,null))}}else{let D=this.buildDDEJsonField(r,n,null,s,t,null);v.push(D);let m=n.get("shadowFields");if(m){u={name:D.name,byteSize:D.byteSize,byteOffset:D.byteOffset};for(let[_,h]of m){let S=_;r.includes(".")&&(S=r.split(".")[0]+`.${_}`),v.push(this.buildDDEJsonField(S,h,null,s,t,D.name))}}}return{arrayInfo:E,shadowInfo:u,fields:v}}buildDDEJsonField(r,t,s,n,F,v){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:s,shadowRef:v,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,be.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(s=>{let F=s.key.value;F==="timeseries"?s.value.items.forEach(v=>{v.key.value=`timeseries_${v.key}`,t.push(v)}):["dde","cloudProject","constants",is].includes(F)||t.push(s)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,s,n){if(!t.value)return;let v=t.key.value;if(n&&(v.startsWith("aloha")||v.startsWith("timeseries"))){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within a library`,...Jx(s,t.key.range)})}if(z.isAnalytics(this.manifest)&&![ne.relations,ne.storage].includes(v)){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...Jx(s,t.key.range)})}}validateContainerFields(r,t,s,n){let F=s.value;if(!F)return;let v=s.key.value;Object.hasOwn(this.fieldNamesPerContainer,v)||(this.fieldNamesPerContainer[v]=[]);let E=this.getContainerOfPreviousVersion(v);F.items.forEach(u=>{let m=u.key.value;this.checkForContainerRelation(u,r,t,n),this.validateFieldName(u,v,t,n),this.checkFieldNameLength(u,v,t,n);let _=E?.fields.find(U=>U.id===m.toLowerCase()),h=u.value,S=h.get("type",!0),P=this.resolvePossibleAlias(r,S),N=h.get("bytes",!0),R=this.resolvePossibleAlias(r,N);_&&(S&&P&&_.type!==P&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${_.type}" to "${P}".
2313
+ Changing the type of an existing field can result in data loss or unexpected behaviour.`,...Jx(n,S.range)}),N&&R&&_.byteSize!==R&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${_.byteSize}' to '${R}'.
2314
+ Changing the size of an existing field can result in data loss or unexpected behaviour.`,...Jx(n,N.range)}))})}checkForContainerRelation(r,t,s,n){let F=r.value.get("fields");F&&F.items.forEach(E=>{this.checkForContainerRelation(E,t,s,n)}),r.value.items.forEach(E=>{let u=E.value;if(u?.value&&mf.exec(`${u.value}`)){let D=E.key.value;if(D){if(!Object.hasOwn(Sa,D))return this.fileDiagnostics.push({file:s,level:"error",message:`Property "${D}" does not allow relations.`,...Jx(n,u.range)});if(["scale","offset"].includes(D))return this.fileDiagnostics.push({file:s,level:"warning",message:`Container relations for "${D}" are not available within the dlo source.`,...Jx(n,u.range)})}return this.validateContainerRelation(D,u,t,s,n)}})}validateFieldName(r,t,s,n){let F=this.fieldNamesPerContainer[t],v=r.key,E=v.value;jf(E)&&this.fileDiagnostics.push({file:s,level:"error",message:`Reserved property "${E}" is not allowed.`,...Jx(n,v.range)});let u=r.value.get("shadowFields");u&&u.items.forEach(D=>{this.validateFieldName(D,t,s,n)}),F.includes(E.toLowerCase())?this.fileDiagnostics.push({file:s,level:"error",message:`Field name "${E}" is already occupied`,...Jx(n,v.range)}):F.push(E.toLowerCase())}checkFieldNameLength(r,t,s,n){let F=r.key,v=F.value,u=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,D=31-u.length;u.length+v.length>31&&this.fileDiagnostics.push({file:s,level:"error",code:tt.CODE.ddeFieldLength,message:`Field name "${v}" to long. ${D} characters allowed for this field/container.`,...Jx(n,F.range)})}validateContainerRelation(r,t,s,n,F){let[v,E,u]=t.value.split(".",3),[D,m]=v.split("@"),_=D?D.split(":")[1]:null,S=(_&&this.libraryYaml[_]?this.libraryYaml[_]:s).contents?.get(m),P=E.split("[")[0],N=null;if(S){let R=S.get(P);if(R)if(u){let U=R.get("fields");U&&U.get(u)&&(N=U.get(u))}else N=R;else N=this.findRelatedShadowField(S,P)}if(N){let R=Sa[r],U=N.get("type");R.includes(U)||this.fileDiagnostics.push({file:n,level:"error",message:`Related field type "${U}" is not allowed for attribute "${r}".`,...Jx(F,t.range)})}else _&&!this.libraryYaml[_]?this.fileDiagnostics.push({file:n,level:"error",message:`Related library "${_}" does not exist.`,...Jx(F,t.range)}):this.fileDiagnostics.push({file:n,level:"error",message:`Related field "${t.value}" does not exist.`,...Jx(F,t.range)})}findRelatedShadowField(r,t){for(let s of r.items){let F=s.value.get("shadowFields");if(!F)continue;let v=F.get(t);if(v)return v}}mergeAndFormat(r,t,s,n){let F={containers:{},setPointList:{}};for(let v of this.libraryDDE)this.combineDDE(F,v);this.combineDDE(F,r);for(let v of Object.values(F.containers)){let E=v.transferDirection;v.transferDirection=this.normalizeTransferDirection(v.name,E),this.warnIfHistoryDirectionNarrowed(v,E,t,s,n)}return this.sortContainerFields(F),this.generateSetPointList(F),F}readFlexibleContainers(r){let t=s=>r instanceof Map?r.get(s)===!0:r&&typeof r=="object"?r[s]===!0:!1;return{timeseries:t("timeseries"),config:t("config")}}flexibleSwitchGroupFor(r){let t=ss[r]?.ctype;if(t===nt.hx)return"timeseries";if(t===nt.cx||t===nt.aloha)return"config"}flexibleSwitchFor(r){let t=this.flexibleSwitchGroupFor(r);return t?this.flexibleContainers[t]:void 0}isPlusDirection(r){return r===yx.upPlus||r===yx.downPlus||r===yx.bothPlus}normalizeTransferDirection(r,t){let s=ss[r]?.xmits,n=this.flexibleSwitchFor(r);if(!s||n===void 0)return t;let v=(n?[[yx.up,yx.upPlus],[yx.down,yx.downPlus],[yx.both,yx.bothPlus]]:[[yx.upPlus,yx.up],[yx.downPlus,yx.down],[yx.bothPlus,yx.both]]).find(([E,u])=>t===E&&s.includes(u));return v?v[1]:t}warnIfHistoryDirectionNarrowed(r,t,s,n,F){if(!this.historyPlusDirectionContainers.has(r.name)||!this.isPlusDirection(t)||r.transferDirection===t)return;let v=this.flexibleSwitchGroupFor(r.name),E=r.containerType===nt.hx?`timeseries_${r.title}`:r.title,u=F?this.findContainerKeyRange(F,E):void 0;this.fileDiagnostics.push({file:s,level:"warning",message:`Container "${r.title}" was transferred with variable length ("${t}") in a previous build but "flexibleContainers.${v}" is not enabled - it now uses fixed-length "${r.transferDirection}". Enable the switch to keep variable-length transfer.`,...u?Jx(n,u):{line:0,startCharacter:0,endCharacter:0}})}combineDDE(r,t){for(let[s,n]of Object.entries(t.containers)){let F=r.containers[s];F?(F.title=n.title,F.knownNames.unshift(n.title),F.libraries.push(...n.libraries),F.fields.push(...n.fields),F.arrays={...F.arrays,...n.arrays},F.shadows={...F.shadows,...n.shadows}):(F=r.containers[s]=structuredClone(n),F.knownNames.unshift(n.title),F.fieldCount=F.fields.length,F.fieldIndex=0);let v=this.initialContainerByteOffset(F);for(let[E,u]of F.fields.entries()){if(u.shadowRef){let D=F.shadows[u.shadowRef];u.byteOffset=D.byteOffset}else u.byteOffset=v,this.updateShadowFieldInformation(r.containers[s],u),v+=u.byteSize||0;E>F.fieldCount-1&&(u.index+=F.fieldIndex)}F.fieldIndex+=n.fieldIndex,F.knownNames=[...new Set(F.knownNames)],F.libraries=[...new Set(F.libraries)],F.fieldCount=F.fields.length}}initialContainerByteOffset(r){return r.containerType===nt.hx?1:0}updateShadowFieldInformation(r,t){t&&Object.hasOwn(r.shadows,t.name)&&(r.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(r){for(let t of Object.values(r.containers)){let{sortedFields:s,containerSize:n}=this.sortFields(t);t.fields=s,t.size=n,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(D=>!D.shadowRef),s=r.fields.filter(D=>D.shadowRef),n=[],F=r.name;if(this.previousVersion.containers[F]){let D=this.sortPreviousContainerFields(r,t);n.push(...D)}else n.push(...t);n.forEach(D=>{this.updateShadowFieldInformation(r,D)});let E=n[n.length-1],u=E.byteSize+E.byteOffset;return s.forEach(D=>{D.byteOffset=r.shadows[D.shadowRef].byteOffset,n.push(D)}),{sortedFields:n,containerSize:u}}sortPreviousContainerFields(r,t){let s=r.name,n=this.previousVersion.containers[s],F=[],v=this.initialContainerByteOffset(r);for(let E of n.fields){if(E.shadowRef)continue;let u=t.findIndex(m=>E.id===m.name?.toLowerCase());if(u===-1){v=E.byteOffset+E.byteSize;continue}let D=t[u];if(E.type!==D.type&&E.byteSize!==D.byteSize){v=E.byteOffset+E.byteSize;continue}D.byteOffset=E.byteOffset,t.splice(u,1),F.push(D),v=this.initialContainerByteOffset(r)}if(v>this.initialContainerByteOffset(r)){let E=t.shift();F.push(...this.generatePlaceholderFieldIfNeeded(v,E)),this.updateShadowFieldInformation(r,E)}for(let E of t){if(E.shadowRef)E.byteOffset=r.shadows[E.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,E);let u=F[F.length-1];u.shadowRef&&(u=r.shadows[u.shadowRef]),E.byteOffset=u.byteOffset+u.byteSize}F.push(E)}return F}generatePlaceholderFieldIfNeeded(r,t){let s=[];if(t)t.byteOffset=r,s.push(t);else{let n={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};s.push(n)}return s}generateSetPointList(r){r.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(r.containers))for(let s of t.fields)s.chartSetPoint&&(Object.hasOwn(r.setPointList,s.name)||(r.setPointList[s.name]=this.getNextSetpointValue(r.setPointList)))}getNextSetpointValue(r){let t=[...Object.values(r),0];return Math.max(...t)+1}}A.PreCompiler=x})(Jt||={});var Zx=G0.TransferDirection,mA=G0.parseXMLValueWithRelation,kf=G0.parseXMLBitmask,_f=G0.parseXMLDefaultValue,wf=G0.fieldTypeDefinitions;function as(x,A){let r=[];function t(F,v=!0){if(v){if(Array.isArray(F)){r.push.apply(r,F);return}r.push(""+F)}}function s(F,v){F!=="mergeofs"&&t(`${F}=${v}`)}t("// DDE STRUCTURE created by Microtronics Studio");let n="source=rm2mraw";for(let[F,v]of Object.entries(A.containers)){F.startsWith("histdata")&&v.transferDirection!==Zx.deviceOnly&&(t("<split>"),t(n),t("target="+F),t("key=0"+F.substr(-1,1)),t("</split>")),t("<table>"),s("name",F),s("alias",v.title),s("title",v.title.replace("_"," "));let E={};[Zx.none,Zx.backendOnly,Zx.deviceOnly,Zx.down,Zx.downPlus].includes(v.transferDirection)&&s("upload","0"),[Zx.none,Zx.backendOnly,Zx.deviceOnly,Zx.up,Zx.upPlus].includes(v.transferDirection)&&s("download","0"),(z.isIotApp(x)||z.isLibrary(x))&&[Zx.up,Zx.upPlus].includes(v.transferDirection)&&s("edit","99");for(let u of v.fields){if(u.type==="shadow")continue;let D=Sf(u),m=wf[D.type],_=mA("title",D,A)||D.name;!_.startsWith("%")&&D.library&&(_=`${D.library}: ${_}`);let h={title:_,alias:D.name,index:u.index,...E};h.byteofs=`${D.byteOffset}`;for(let[S,P]of Object.entries(m.xml))h[S]=P;Object.hasOwn(m,"xmlOut")&&m.xmlOut(h,D,A),h.units=mA("unit",D,A),h.chmode=mA("channelMode",D,A),h.ialarm_high=mA("chartAlarmHigh",D,A),h.ialarm_low=mA("chartAlarmLow",D,A),h.iwarn_high=mA("chartWarningHigh",D,A),h.iwarn_low=mA("chartWarningLow",D,A),h.hysterese=mA("chartHysteresis",D,A),h.itrigger=mA("chartTriggerThreshold",D,A),h.itriggerus=mA("chartTriggerRelation",D,A),h.setpoint=mA("chartSetPoint",D,A),h.bitmask=kf(D),D.hex&&(h.editmask="%HEX%"),D.readPermission&&(h.view=D.readPermission),D.writePermission&&(h.edit=D.writePermission),D.defaultValue!==void 0&&(h.default=_f(D)),D.utilsTransferInterval===!0&&(h.param0="%FFFF0005%transfer_interval"),t("<field>"),D.library&&t(`// declared by ${D.library} library`,!0);for(let[S,P]of Object.entries(h))P!==void 0&&s(S,`${P}`);t("</field>")}["alerts","applog"].includes(F)||(t("</table>"),t("// "+v.size+" bytes total size"))}return t("<split>"),t(n),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(n),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
2315
+ `)}function Sf(x){let A=structuredClone(x),e=x.arrayRef?.index;if(e===void 0)return A;for(let[r,t]of Object.entries(A))A[r]=b0.patchValueWithArrayInfo(t,e);return A}var OA=W0(require("semver"));var hA=W0(require("semver"));var ur={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},os={max_size:1e5,max_fields:1e3},RA={max_size:4e3,max_fields:1e3},jA={max_size:1024,max_fields:1e3},Dr={configA:os,configB:os,configC:os,config0:RA,config1:RA,config2:RA,config3:RA,config4:RA,config5:RA,config6:RA,config7:RA,config8:RA,config9:RA,histdata0:jA,histdata1:jA,histdata2:jA,histdata3:jA,histdata4:jA,histdata5:jA,histdata6:jA,histdata7:jA,histdata8:jA,histdata9:jA,aloha:{...jA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Kt={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Dr,auto_inc:{...ur,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var ls=require("vscode-uri");var wx=G0.ContainerType,M0=G0.TransferDirection,st=G0.regexRelation,$f=G0.CONFIG_CONTAINER,vs=G0.CONTAINER_DEF_DLO_CID_BASE,ot=G0.CONTAINER_DEFS,at=G0.fieldTypeDefinitions,Pa=b0.isNumeric;function FA(x){let A=at[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var zt="Microtronics/dlo-core";function fs(x){return z.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,zt)?Z0.rangeToVersion(x.libraryDependencies[zt]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,zt)?Z0.rangeToVersion(x.libraryDevDependencies[zt]):null}function Tf(x){let A=fs(x);return A===null||hA.gte(A,"0.3.0")?hA.valid(x.version)?x.version:hA.coerce(`${x.version}`):hA.coerce(x.version)?.major}function Fs(x){let A=fs(x);if(A===null)return!1;let e=hA.coerce(A);return hA.gte(e,"1.1.0")}function Pf(x){let A=fs(x);if(A===null)return!1;let e=hA.coerce(A);return hA.gte(e,"1.15.0")}var qf=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function Nf(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=FA(x);return!A||A==="skip"?!1:qf.includes(`${A.rwfunc}`)}function If(x,A,e){x("PROJECT META");let{dpid:r,registry:t}=e;if(!r)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:s}=Kt[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let n=Tf(e);A("APM_VERSION",`${n}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[F,v]of Object.entries(s))Pa(v)?A(F,`${v}`):A(F,`"${v}"`)}function Mf(x,A,e,r){let t=r.flat,{definesWithSource:s}=r;A("GLOBAL DEFINES");for(let[n,F]of Object.entries(t)){let v=s[n]?.comment;if(v){let u=v.split(`
2316
+ `);if(u.length===1)x(`/** ${u[0]} */`);else{x("/**");for(let D of u)x(` * ${D}`);x(" */")}}let E=Object.hasOwn(t,F);e(n,`${F}`,E)}}function Lf(x,A,e,r){let t=parseInt(x.substring(6)),s=1<<t;e[t]=A.size,r.cx_isupm|=[M0.both,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)?s:0,r.cx_isvolatilem|=A.volatile?s:0,r.cx_isdnm|=[M0.both,M0.none,M0.deviceOnly,M0.down,M0.downPlus].includes(A.transferDirection)?s:0,r.cx_isvlm|=[M0.bothPlus,M0.upPlus,M0.downPlus].includes(A.transferDirection)?s:0}function Rf(x,A,e,r){let t=parseInt(x.substring(8));e[t]=A.size,r.hx_isvlm|=[M0.upPlus].includes(A.transferDirection)?1<<t:0}function Of(x){return[M0.upPlus].includes(x.transferDirection)}function Gf(x,A,e){let r=0,t=Array(10).fill(0),s={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},n=0,F=Array(10).fill(0),v={hx_isvlm:0},E;for(let[D,m]of Object.entries(e.containers))m.containerType===wx.cx&&m.transferDirection!==M0.backendOnly?(Lf(D,m,t,s),r=Math.max(r,m.size)):m.containerType===wx.hx?(Rf(D,m,F,v),r=Math.max(r,m.size)):m.containerType===wx.aloha&&(E=Of(m),r=Math.max(r,m.size));A("DDE CORE"),x(`#define _DDE_BUF_BYTES (${r}+10)`),x(""),x("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),x(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),x(`#define _DDE_CONFIGS_upm 0b${s.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),x(`#define _DDE_CONFIGS_volatilem 0b${s.cx_isvolatilem.toString(2)} // inits container as volatile`),x(`#define _DDE_CONFIGS_downm 0b${s.cx_isdnm.toString(2)} // reading the container expects strict length`),x(`#define _DDE_CONFIGS_varlenm 0b${s.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),x(`#define _DDE_CONFIGS_rdef 0b${n.toString(2)} // ..apply defaults reading a container with under-length`),x(""),x("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),x(`stock _DDE_HISTS_size[] =[ ${F.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${v.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let u=[...F];Object.hasOwn(e,"applog")&&u.push(125),Object.hasOwn(e,"alerts")&&u.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...u)}`),x(""),E!==void 0&&(x(`#define _DDE_ALOHA_varlen ${E?1:0}`),x(""))}function Uf(x,A,e){for(let[r,t]of Object.entries(e.containers)){if(t.containerType==="applog")continue;A(`${t.title.toUpperCase()} - ${t.transferDirection} via #${r}`);let s=vs(t.containerType,t.transferDirection);if(!s){x("// ... container not available in DLO");continue}let n=`DDE_${t.containerType===wx.aloha?wx.aloha:t.title}`,F=ot[r];x(`// ${n}_id - container identifier required for ${n}_read/_write operations`),x(`#define ${n}_id (${s}+${F.cnum||0})`),x(`// ${n}_sz - [byte] container total size`),x(`#define ${n}_sz ${t.size}`),F.cnum!==void 0&&(x(`// ${n}_idx - 0+ container index number`),x(`#define ${n}_idx ${F.cnum}`))}}function qa(x,A,e){let r=[],t=r.push.bind(r);function s(F){t(`
2317
2317
  // === ${F} ===
2318
- `)}function n(F,f,E=!1){let u=$a(f)?"":'"';E&&(u=""),t(`#define ${F} ${u}${f}${u}`)}return Nl(s,n,e),Ml(t,s,n,A),Ol(t,s,x),Gl(t,s,x),r.join(`
2319
- `)}var ot=class{constructor(A,e,r){this.manifest=A;this.ddeMap=e;this.context=r;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(A,e){e&&A==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(e||A)),e&&A===">"&&this.pawnIndent++}generate(){for(let[A,e]of Object.entries(this.ddeMap.containers))this.context&&!e.libraries.includes(this.context)||!as(e.containerType,e.transferDirection)||!e.fields||!this.context&&!G0.hasContainerAppFields(e)||at[A].ctype!==_x.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e,r=""){this.sourceType="globalVariables";let t=e?this.variableNameForPawnDefinition(A,e):A;if(e){let s=this.generateCommentForField(e);s&&(Array.isArray(s)?(this.pawn("/**"),s.forEach(n=>{this.pawn(` * ${n}`)}),this.pawn(" */")):this.pawn(`// ${s}`))}this.pawn(`stock ${t}${e?this.initialiserForGlobalVar(e):r};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${A.title}`,r=this.createFieldDefaultDefines(e,A);this.generateArrayDefines(e,A,r);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let s=this.generateFieldVariableName(e,t);this.createGlobalVar(`${s}`,t)}}createFieldDefaultDefines(A,e){let r=new Map;for(let t of e.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let s=e.arrays[t.arrayRef.name],n=`${A}_${t.arrayRef.name}`,F="";s.fields?.length&&(F=t.name.split(".")[1],n+=`_${F}`),this.createDefaultDefineForField(n,t),t.defaultDloDefine!==void 0&&(r.has(t.arrayRef.name)||r.set(t.arrayRef.name,new Map),r.get(t.arrayRef.name).set(F,t))}return r}isPlainCellField(A){if(A.type==="struct"||!it[A.type])return!1;let e=oA(A);return!e||e==="skip"?!1:!`${e.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let e=A?.get("");return e?.defaultDloDefine===void 0||!this.isPlainCellField(e)?"":` = [ ${e.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,e){if(!e?.size||!A.fields?.length)return"";let r=[];for(let s of A.fields){let n=e.get(s.name);if(n!==void 0&&!this.isPlainCellField(n)||!this.isPlainCellField({type:s.type}))return"";r.push(n?.defaultDloDefine??"0")}let t=`[ ${r.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,e,r){for(let t of Object.values(e.arrays)){if(this.context!==t.library)continue;let s=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${s} ${t.length}`),t.fields){for(let f of t.fields)it[f.type]?.isBlob&&f.byteSize&&this.addDefine(`${A}_${t.name}_${f.name}_dim`,f.byteSize);let n={...e};n.fields=[],t.fields.forEach(f=>{n.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:f.byteSize,id:f.name,library:t.library,name:f.name,type:f.type,title:null,index:0})});let F=`${A}_${t.name}_def`;this.generateTypeDefinitions(n,F),this.createGlobalVar(`${A}_${t.name}[${s}][${F}]`,void 0,this.structuredArrayInitialiser(t,r.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${s}]`,void 0,this.simpleArrayInitialiser(r.get(t.name)))}}generateCommentForField(A){let e=[`@type ${A.type}`];if(A.description&&e.unshift(A.description),A.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(A);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(A,e){let r=`${A}_${e.name}`,t=Object.hasOwn(it,e.type)&&it[e.type].isBlob,s=e.byteSize;return s&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${s}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${s};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(A,e){this.sourceType="defines";let r=A.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let s of r){let n=this.generateFieldTypeDefinition(s,A,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let s=A.arrayRef;if(s){let f=e.arrays[s.name];if(!r.includes(s.name)&&!f.fields)r.push(s.name);else return null}let n=A.arrayRef?A.arrayRef.name:A.name,F=A.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let s=this.handleArrayFieldDedup(A,e,r,t);if(s===null)return null;let{fieldName:n,fld_dim:F}=s,f="";if(A.type==="struct")f="// ."+n+F;else{let E=oA(A);if(!E)return null;E==="skip"?f=`// skipped - .${n}${F}`:f+=E.rwp.replace("%n",`.${n}${F}`).replace("%l",A.byteSize)}return f+=",",A.library&&(f+=` // declared by ${A.library} library`),f}variableNameForPawnDefinition(A,e){let r=oA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${A}`).replace("%l",e.byteSize):A}createDefaultDefineForField(A,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${A}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${A}_offset`,e.offset),e.defaultValue!==void 0&&ql(e)){let{value:r,reason:t}=this.parseFieldDefault(e),s=`${A}_default`;this.addDefine(s,r,t)&&(e.defaultDloDefine=s)}}addDefine(A,e,r){return nt.exec(`${e}`)?!1:(this.knownDefines.includes(A)||(r&&this.pawn(`// ${r}`),this.pawn(`#define ${A} ${e}`),this.knownDefines.push(A)),!0)}generateReadWriteFunctions(A){let e=A.name,r=at[e],t=`DDE_${A.containerType===_x.aloha?_x.aloha:A.title}`;[I0.both,I0.bothPlus,I0.none,I0.deviceOnly,I0.up,I0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===_x.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[_x.hx,_x.aloha].includes(e.containerType),s=e.containerType===_x.hx,n=e.containerType===_x.aloha,F=`_${A}_write`,f=is(this.manifest)?", flags":"",E=s?`stamp${f}`:"",u=is(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${s?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?_x.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${E});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let D=`${A}_transfer`,m=`${A}_persist`,_=this.functionArgumentsForDdeWrite(s,t);if(this.pawn(">",`${this.context?"stock ":""}${D}(${_}) {`),t)this.pawn(`${F}(${E});`);else{let h=e.name.slice(-1);this.pawn(`dde_flush(${h}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${m}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=is(this.manifest)?", const flags=0":"";return A?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(A,e){this.sourceType="readWrite";let r=`_${A}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(A,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,e,r,t,s,n,F){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,F);let f=e.arrayRef.name,E=s.get(f);return E?n.has(f)?F:(n.add(f),this.emitArrayLoop(A,E,r)):this.emitSingleField(A,e,r,t,F)}generateRWFunctionBody(A,e,r){let t=e.fields,s=this.analyzeArrayGroups(t,A,e),n=new Set,F=-1;for(let f of t){if(this.isFieldSkipped(f))continue;let E=oA(f);!E||E==="skip"||(F=this.emitFieldRW(A,f,r,E,s,n,F))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||Tl(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,s){e.byteOffset!==s&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${A}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let s of e.templateFields){let n=oA(s);if(!n||n==="skip")continue;let F=s.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+s.byteSize;let f=`${A}_${s.name.replace(/\[\d+\]/,"[_i]")}`,E=`${r}${n.rwfunc}(${f}`;n.rwlen&&(E+=`, ${s.byteSize}`),E+=this.defaultArgumentFor(s,r),this.pawn(E+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,e,r){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(A){let e=new Map;for(let r of A){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=oA(r);if(!t||t==="skip")continue;let{name:s,index:n}=r.arrayRef;e.has(s)||e.set(s,new Map);let F=e.get(s);F.has(n)||F.set(n,[]),F.get(n).push(r)}return e}validateArrayStride(A,e){let r=e[0].byteOffset-A[0].byteOffset;if(r<=0)return null;for(let t=0;t<A.length;t++)if(e[t].byteOffset-A[t].byteOffset!==r)return null;return r}buildArrayGroups(A,e,r){let t=new Map;for(let[s,n]of A){let F=r.arrays[s];if(!F||F.length<2)continue;let f=n.get(0),E=n.get(1);if(!f||!E||f.length===0||E.length===0||f.length!==E.length)continue;let u=this.validateArrayStride(f,E);u!==null&&t.set(s,{arrayName:s,dimDefine:`${e}_${s}_dim`,stride:u,templateFields:f})}return t}parseFieldDefault(A){let e=oA(A),r=A.defaultValue;function t(n,F){return{value:n,reason:F}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let s=this.parseFieldScaleOffset(A);return s?t(s.calculated,s.reason):(r!==void 0&&!nt.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!nt.exec(`${A.offset}`)||!!nt.exec(`${A.scale}`)||!!nt.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,s=A.scale!==void 0?Number(A.scale):1;if(s===0)return null;let n=(Number(e)-t)/s,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${s}`;return A.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function Ul(x){return`${`onUplinkApply_${x}()`};`}function Pa(x,A,e){A.libraries.forEach(r=>{let t=b0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function Hl(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${b0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function Jl(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))at[r].ctype===_x.cx&&([I0.up,I0.upPlus,I0.deviceOnly].includes(t.transferDirection)&&e.push(t),[I0.bothPlus,I0.both,I0.downPlus,I0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function Kl(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkRestore_${r}();`)}),x(""),x(`stock restoreUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),Pa(x,e,"Restore"),G0.hasContainerAppFields(e)&&x(` onUplinkRestore_${e.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function zl(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkApply_${r}();`)}),x(""),x(`stock applyUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),Pa(x,e,"Apply"),G0.hasContainerAppFields(e)&&x(` ${Ul(e.title)}`),x(" return(OK);"),x("}");if(x("#pragma warning push"),x("stock _onUplinkApply(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: return applyUplink${e.name}(); // ${e.name}`);x(" }"),x(" return ERROR;")}else x(" #pragma warning disable 203"),x(" // no containers to apply"),x(" return OK;");x("}"),x("#pragma warning pop")}function qa(x,A){let e=[],r=e.push.bind(e);Hl(r,A);let{containerApply:t,containerRestore:s}=Jl(x);return Kl(r,s),zl(r,t),e.join(`
2320
- `)}var Vl=Sl.map(x=>`_DDE_${x}_write`);function Na(x){let A=[],e=A.push.bind(A),r=[...Vl];for(let[t,s]of Object.entries(x.containers)){let n=as(s.containerType,s.transferDirection),F=at[t];if(!n||!s.fields||F.ctype!==_x.cx)continue;let f=`DDE_${s.name}`,E=`DDE_${s.title}_id`;if([I0.both,I0.bothPlus,I0.none,I0.deviceOnly,I0.up,I0.upPlus].includes(s.transferDirection)){let u=`_${f}_write`;e(`stock ${u}() {`),e(` dde_wbegin(${E});`),Sa(e,s,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(u),1)}if(F.ctype===_x.cx){let u=`_${f}_read`;e(`stock ${u}() {`),e(` if (dde_rbegin(${E})) return ERROR;`),Sa(e,s,"read"),e(" dde_rend();"),e(" return OK;"),e("}")}}if(r.length){e(""),e("// Dummy functions needed by the dde library");for(let t of r)e(`stock ${t}() { return OK; }`)}return A.join(`
2321
- `)}function Sa(x,A,e){A.libraries.forEach(r=>{let t=b0.generateHashForLibraryName(r);x(` #ifdef __${t}${A.title}_${e}`),x(` __${t}${A.title}_${e}();`),x(" #endif")}),G0.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function Ma(x,A){let e=[],r=await Z0.getApmPartDependencies(x,A,p0.Part.dlo,!0);await st(x,A,e,r0.fileNames.autoInc);let t=await Wl(x,A,r);for(let s of r)s.name==="local-data-interface"&&await st(x,A,e,r0.fileNames.autoLocalDataInc),e.push(`#include <${s.name}>`),s.name==="dlo-core"&&(e.push(...t),await st(x,A,e,r0.fileNames.autoDdeInc.replace("X","app")),await st(x,A,e,r0.fileNames.autoDdeInc.replace("X","main")));return r.some(s=>s.name==="dlo-core")&&await st(x,A,e,r0.fileNames.autoUplinkInc),e.join(`
2322
- `)}async function Wl(x,A,e){let r=[];for(let t of e){let s=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(os.Utils.joinPath(x,s))&&r.push(`#include "${r0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function st(x,A,e,r){let t=os.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var La=W0(require("semver")),Ra=require("yaml");var FA=G0.ContainerType,Vt=G0.TransferDirection,Xl=G0.fieldTypeDefinitions,pr={$ref:"#/components/parameters/contextId"},Yl={$ref:"#/components/parameters/addonId"},Ql={$ref:"#/components/parameters/appId"},Ia={$ref:"#/components/schemas/histdataResponse"},Zl={$ref:"#/components/schemas/histdataRequest"},Wt={$ref:"#/components/schemas/rapidM2MStamp"},xc={$ref:"#/components/schemas/timeseriesRequestBase"},zt="rapidM2M Stamp",hA={description:"Successful operation"},Oa={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}}},Ga={...structuredClone(Oa)};Object.assign(Ga.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[Wt,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:zt,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:zt,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:zt,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:zt,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var Ft={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},be={401:{description:"Permission denied",...Ft},403:{description:"Forbidden",...Ft},404:{description:"Resource not found",...Ft},500:{description:"Internal error",...Ft}};function vs(x,A,e=null){let r=La.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{}}};e?Object.assign(t.components,structuredClone(Oa)):Object.assign(t.components,structuredClone(Ga));let s=z.isAddon(A),n=z.isAnalytics(A);s&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(x.containers))e&&(!F.libraries.includes(e)||F.containerType===FA.hx)||!e&&!G0.hasContainerAppFields(F)||F.containerType===FA.aloha||(Ac(t,F),rc(t,F,e),sc(t,F,s,n),!s&&!n&&(ec(t,F,e),nc(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,Ra.stringify)(t)}function Ac(x,A){x.tags.push({name:Zx(A.title),description:`Transfer direction ${A.transferDirection}`})}function Zx(x){return x.split("_").join(" ")}function ec(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},s=[];A.containerType===FA.hx&&(r+="Select",s.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of A.fields)n.library!==e||n.type==="shadow"||(A.containerType===FA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=Ua(n),!n.readPermission&&!n.writePermission&&s.push(n.id)));t.required=s.length?s:void 0,x.components.schemas[r]=t}function rc(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},s=[],n=A.containerType===FA.hx;for(let f of A.fields)f.library!==e||f.type==="shadow"||(t.properties[f.name]=Ua(f),!f.readPermission&&!f.writePermission&&s.push(f.name));t.required=s.length?s:void 0,x.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(E=>E.toLowerCase());let f={};for(let[E,u]of Object.entries(t.properties))f[E.toLowerCase()]=u;t.properties=f}if(n){let f={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(F)}}}};x.components.schemas[`${r}RequestSingle`]=f,x.components.schemas[`${r}Request`]={allOf:[xc,f]},t.properties.stamp=Wt,s.push("stamp")}}function Ua(x){let e={...Xl[x.type].openApi},r=tc(x);return e.default=r,e.example=r,e.description=x.description,e}function tc(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function nc(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([FA.cx,FA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[Zx(A.title)],summary:`Retrieve the data of the "${Zx(A.title)}" container`,parameters:[pr],responses:{200:{...hA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Wt}},{$ref:`#/components/schemas/${A.name}`}]}}}},...be}},[Vt.down,Vt.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[Zx(A.title)],summary:`Modify the data of the "${Zx(A.title)}" container`,parameters:[pr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...hA},204:{...hA},...be}});else if(A.containerType===FA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[Zx(A.title)],summary:`Retrieve the youngest data of the "${Zx(A.title)}" container`,parameters:[pr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...hA,content:{"application/json":{schema:Ia}}},...be}},x.paths[t]={get:{deprecated:!0,tags:[Zx(A.title)],summary:`Get the historical data of the "${Zx(A.title)}" container.`,parameters:[pr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},Zl]}}],responses:{200:{...hA,content:{"application/json":{schema:Ia}}},...be}}}}x.paths[e]=r}function sc(x,A,e=!1,r=!1){let s=A.containerType===FA.hx?"timeseries":"containers",n=[],F=Zx(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${s}/${A.title}`,params:[pr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${A.title}`,params:[pr,Yl],tags:[F]}]);let f={path:`/api/1/app-center/apps/{appUid}/${s}/${A.title}`,params:[Ql],tags:["app-center"]};r&&f.tags.push(F),n.push(f);let E={get:void 0,put:void 0,post:void 0},u={tags:[],summary:`Retrieve the data of the "${Zx(A.title)}" container`,parameters:[],responses:{200:{...hA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Wt}},{$ref:`#/components/schemas/${A.title}`}]}}}},...be}};if([FA.cx,FA.cb].includes(A.containerType)&&(E.get=u,[Vt.down,Vt.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${Zx(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...hA},204:{...hA},...be}}),n.forEach(D=>{let m=structuredClone(E);Object.values(m).forEach(_=>{_?.parameters?.unshift(...D.params),_?.tags?.unshift(...D.tags)}),x.paths[D.path]=m})),A.containerType===FA.hx){E.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...hA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...be}},e&&(E.post={tags:[],summary:`Insert data into the "${Zx(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...hA},400:{description:"Bad request",...Ft},...be}});let D=n[0],m=structuredClone(E);Object.values(m).forEach(O=>{O?.parameters?.unshift(...D.params),O?.tags?.unshift(...D.tags)}),x.paths[D.path]=m;let _={...hA,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},h=`${D.path}/youngest`,S={get:structuredClone(m.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=_;let P=e?2:1;S.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[h]=S;let N=`${D.path}/oldest`,R={get:structuredClone(m.get)};R.get.summary=`Get the oldest record of "${A.title}" container`,R.get.responses[200]=_,R.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[N]=R}}var Ja=G0.TransferDirection,Xt=" new szTemp{64};",Yt=" return strcat(aData, szTemp, sizeof(szTemp));";function Ka(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",e=A.includes("["),t=A.includes("{")||e;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return e?null:"s";default:return null}}function fs(x){if(x.type==="shadow"||x.shadowRef)return null;let A=oA(x);return!A||A==="skip"?null:Ka(A)}function za(x){return[G0.ContainerType.hx,G0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==Ja.backendOnly}function ic(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=oA(x);return!!A&&A!=="skip"}function ac(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",s=`${x.arrayRef.name}|${t}|${A}`;e.has(s)||e.set(s,{fields:[],formatType:A}),e.get(s).fields.push(x)}function oc(x){let A=[],e=new Map,r=new Set,t=!1;for(let s of x){if(!ic(s))continue;let n=fs(s);s.arrayRef&&n?ac(s,n,e):(A.push(s),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function Fc(x,A,e){e.sort((E,u)=>E.arrayRef.index-u.arrayRef.index);let r=e.map(E=>E.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((E,u)=>u===0||E-r[u-1]===t)))return null;let[n,F]=A.split("|"),f=e[0].library?`_${b0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:fs(e[0]),pawnVarBase:`${f}${x}_${n}`}}function vc(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=oc(A),n=[];for(let[F,f]of r){let{fields:E,formatType:u}=f;if(E.length<2){e.push(...E),t.add(u);continue}let D=Fc(x,F,E);D?(t.add(u),n.push(D)):(e.push(...E),t.add(u))}return e.sort((F,f)=>F.byteOffset-f.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:s}}function fc(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(za(e))for(let r of e.fields){let t=fs(r);t&&A.add(t)}return A}function lc(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(Xt),x(' sprintf(szTemp, _, "%d", value);'),x(Yt),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(Xt),x(' sprintf(szTemp, _, "%.3f", value);'),x(Yt),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(Xt),x(' sprintf(szTemp, _, "%s", value);'),x(Yt),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(Xt),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(Yt),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function cc(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function Ec(x,A,e){let r=`idx >= ${x} && idx <= ${A}`;if(e===1)return r;let t=x===0?`idx % ${e} == 0`:`(idx - ${x}) % ${e} == 0`;return`${r} && ${t}`}function Bc(x,A){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:n,subField:F}=A,f=cc(e,t),E=Ec(e,r,t);if(x(` if (${E}) {`),s==="bin"){let u=`${n}[${f}]${F}`,D=F?F.substring(1):"",m=D?`${n}_${D}_dim`:`${n}_dim`;x(` return _DDE_fmt_bin(aData, ${u}, ${m});`)}else x(` return _DDE_fmt_${s}(aData, ${n}[${f}]${F});`);x(" }")}function Cc(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=oA(e);if(!r||r==="skip")return;let s=`${e.library?`_${b0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=Ka(r);if(n==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${s}, ${s}_dim);`);else if(n)x(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${s});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let F=s;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),x(` sprintf(szTemp, _, "${r.printf}", ${F});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function dc(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function Ha(x,A,e){let r=e===G0.ContainerType.cx?"c":"h",t=e===G0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[s,n]of Object.entries(A.containers))e===n.containerType&&s.startsWith(t)&&n.transferDirection!==Ja.backendOnly&&dc(x,s,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function uc(x,A){let e=vc(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),e.hasInlineFields&&x(" new szTemp{64};");for(let r of e.arrayGroups)Bc(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)Cc(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function Dc(x,A){for(let[,e]of Object.entries(A.containers))za(e)&&uc(x,e)}function Va(x){let A=[],e=A.push.bind(A),r=fc(x);return lc(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),Ha(e,x,G0.ContainerType.cx),Ha(e,x,G0.ContainerType.hx),e(" return OK;"),e("}"),Dc(e,x),A.join(`
2323
- `)}var Qa=b0.yamlRangeToLineInformation,vt=r0.filePaths.dde.path,vA;(n0=>{let x=G0.DDEJson,A=b0.convertBlobToString;n0.DDE_SCHEMA=ya;async function r(L,k){let I=await k.readFile(L);return A(I)}n0.readYamlFile=r;async function t(L,k,I=r0.fileNames.mainDDE,X){let W=[],H=await z.read(L,k),J=await Wa(L,k,H);if(X)for(let x0 of J){let{result:o0,unresolvedKeys:G}=ux.replaceDefineTemplates(x0.yaml,X);x0.yaml=o0;for(let i0 of G)W.push({file:x0.path,level:"error",message:`Unresolved define template: {{${i0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let x0 of J)W.push(...f(x0.path,x0.yaml));let a0=Dx.Utils.joinPath(L,vt,I),t0=await r(a0,k);if(X){let{result:x0,unresolvedKeys:o0}=ux.replaceDefineTemplates(t0,X);t0=x0;for(let G of o0)W.push({file:a0,level:"error",message:`Unresolved define template: {{${G}}}`,line:0,startCharacter:0,endCharacter:0})}return W.push(...f(a0,t0)),{manifest:H,libraryFiles:J,main:{path:a0,yaml:t0},diagnostics:W}}n0.validate=t;async function s(L,k,I,X=r0.fileNames.mainDDE){let W=await z.read(L,k),H=await ux.read(L,k,I),J=await t(L,k,X,H.flat);if(J.diagnostics.filter(B0=>B0.level==="error").length>0)return{ddeJSON:null,diagnostics:J.diagnostics};let t0=await _(L,k,I),x0=new Ht.PreCompiler(W,J.libraryFiles,t0),o0=x0.parseLibraries();if(o0.find(B0=>B0.level==="error"))return{ddeJSON:null,diagnostics:[...J.diagnostics,...o0]};let{ddeJSON:i0,diagnostics:f0}=x0.parseMainDDE(J.main.path,J.main.yaml);return{ddeJSON:i0,diagnostics:[...J.diagnostics,...f0]}}n0.compileDDE=s;let n=new Xa.default({strict:!1,allErrors:!0,verbose:!0});(0,Ya.default)(n);let F=n.compile(n0.DDE_SCHEMA);function f(L,k){let I=new Qt.LineCounter,X=(0,Qt.parseDocument)(k,{lineCounter:I,keepSourceTokens:!0}),W=[];for(let a0 of X.errors){let t0=a0.pos?Qa(I,[a0.pos[0],a0.pos[1],a0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};W.push({file:L,level:"error",message:a0.message,...t0})}if(W.length>0)return W;let H=X.toJSON();if(!F(H)){let t0=(F.errors||[]).filter(o0=>o0.keyword!=="if"),x0=new Set;for(let o0 of t0){let G=mc(o0);if(x0.has(G))continue;x0.add(G);let i0=hc(X,I,o0);W.push({file:L,level:"error",message:G,...i0})}}return W}n0.validateJsonSchema=f,n0.PreCompiler=(L,k,I)=>new Ht.PreCompiler(L,k,I);function u(L,k){return ns(L,k)}n0.generateMyDatanetXML=u;async function D(L,k,I,X){let W=await z.read(L,k),H=ns(W,X),J=Dx.Utils.joinPath(L,r0.filePaths.dist.ddeXmlPath);await k.writeFile(J,H),I.log("Generated",r0.filePaths.dist.ddeXmlPath)}n0.exportMyDatanetXML=D;async function m(L,k,I,X,W){let H=Dx.Utils.joinPath(L,r0.filePaths.studio.auto.dde.historyJson);await k.rm(H).catch(console.error);let J=await z.read(L,k);if(!z.isApp(J)||!J.registry?.id)return;if(!W){I.warn("Could not fetch dde of previous version: No API token provided.");return}let a0=RA.coerce(J.version);try{let o0=(await tx.getExistingApplication(W,J.publisher,J.registry.id,X)).versions.find(B0=>!RA.prerelease(B0.version)&&RA.lte(B0.version,a0)),G=o0?.files.find(B0=>B0.name==="dde.json");if(!G){I.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let i0=await fetch(G.downloadUrl,{headers:{...aA(W),...tx.injectSemverHeader(!0)}});if(i0.status!==200){I.warn(`Could not fetch the dde.json of version "${o0?.version}"`);return}let f0=await i0.text();await k.writeFile(H,f0),I.log(`Saved history.json of previous app version ${o0.version}`)}catch(t0){I.error("Failed to fetch the dde of previous version",t0)}}n0.fetchPreviousHistoryJson=m;async function _(L,k,I){try{let X=Dx.Utils.joinPath(L,r0.filePaths.studio.auto.dde.historyJson);if(await k.stat(X)){let H=await k.readFile(X);return JSON.parse(A(H))}let W=Dx.Utils.joinPath(L,vt,"history.json");if(await k.stat(W)){I.warn(`"${r0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${vt}history.json"`);let H=await k.readFile(W),J=JSON.parse(A(H)),a0=await z.read(L,k),t0=RA.coerce(a0.version)?.version,x0=Object.keys(J||{}).sort(RA.rcompare).find(G=>G!==t0);if(!x0)return null;let o0=J[x0];return{version:x0,...o0}}}catch(X){I.error("Failed to read history.json",X)}return I.warn("history.json does not exist"),null}n0.getHistoryJson=_;function h(L,k){return{version:RA.coerce(k.version)?.version||"1.0.0",...structuredClone(L)}}n0.buildHistoryJson=h;async function S(L,k,I,X){let W=await z.read(L,k),H=h(X,W),J=Dx.Utils.joinPath(L,r0.filePaths.dist.historyJson);await k.writeFile(J,JSON.stringify(H,null," ")),I.log("Generated",r0.filePaths.dist.historyJson)}n0.exportHistoryJson=S;async function P(L,k){return k.rm(Dx.Utils.joinPath(L,r0.filePaths.studio.auto.dlo.path))}n0.clearAutoDloDir=P;async function N(L,k,I,X){await P(L,k);let W=await z.read(L,k),H=await Wa(L,k,W),J=await ux.read(L,k,I),a0=Ta(X,J,W),x0=new ot(W,X,null).generate();for(let ix of H){let Kx=new ot(W,X,ix.libraryName),{globals:yA,helper:kA}=Kx.generate(),ox=[...yA,...kA].join(`\r
2324
- `),Ax=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",ix.libraryName),AA=Dx.Utils.joinPath(L,Ax);ox.length&&(I.log("Generated",Ax),await k.writeFile(AA,ox))}let o0=Na(X),G=qa(X,H.map(ix=>ix.libraryName)),i0=Va(X),f0=Dx.Utils.joinPath(L,r0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(f0,a0),I.log("Generated",r0.filePaths.studio.auto.dlo.autoInc);let B0=Dx.Utils.joinPath(L,r0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(B0,G),I.log("Generated",r0.filePaths.studio.auto.dlo.autoUplinkInc);let C0=Dx.Utils.joinPath(L,r0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(C0,i0),I.log("Generated",r0.filePaths.studio.auto.dlo.autoLocalDataInc);let _0=Dx.Utils.joinPath(L,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile(_0,[...x0.globals,...x0.helper].join(`
2325
- `)),I.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let N0=Dx.Utils.joinPath(L,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(N0,o0),I.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await O(L,k,I)}n0.exportAutoDloFiles=N;async function R(L,k,I,X){let W=await z.read(L,k),H=z.isLibrary(W),J=Dx.Utils.joinPath(L,r0.filePaths.dist.path,"dde-api.yaml");await k.rm(J).catch(()=>{});let a0=Dx.Utils.joinPath(L,r0.filePaths.dist.ddeApi);if(await k.writeFile(a0,vs(X,W)),I.log("Generated",r0.filePaths.dist.ddeApi),H){let t0=Dx.Utils.joinPath(L,r0.filePaths.dist.ddeApiPath,`${W.name}.yaml`),x0=vs(X,W,W.name);x0.length&&(await k.writeFile(t0,x0),I.log("Generated",r0.filePaths.dist.ddeApiPath+`${W.name}.yaml`))}}n0.exportOpenApi=R;async function O(L,k,I){let X=Dx.Utils.joinPath(L,r0.filePaths.studio.auto.dlo.defaultInc),W=await Ma(L,k);await k.writeFile(X,W),I.log("Generated",r0.filePaths.studio.auto.dlo.defaultInc)}n0.exportDefaultInc=O})(vA||={});async function Wa(x,A,e){let r=[],t=await Z0.getAll(e);for(let s in t){let n=Z0.dependencyToPath(x,s),F=Z0.dependencyIdToName(s),f=Dx.Utils.joinPath(n,`${vt}/${F}.dde`);await A.stat(f)&&r.push({libraryName:F,path:f,yaml:await vA.readYamlFile(f,A)})}if(z.isLibrary(e)){let s=Dx.Utils.joinPath(x,`/${vt}/${e.name}.dde`);await A.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await vA.readYamlFile(s,A)})}return r}function pc(x,A,e){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let r=x[A];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function bc(x,A,e,r){let s={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return s?s():e}function mc(x){let A=x.instancePath||"/",e=x.parentSchema,r=pc(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${bc(x.keyword,x.params,t,e)}`}function jc(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),s=x.getIn(t,!0);if(s?.range)return s.range}return null}function hc(x,A,e){let r=jc(x,e.instancePath||"");return r?Qa(A,r):{line:0,startCharacter:0,endCharacter:0}}var ls=require("vscode-uri");var br=class{dloFileMap={};rootUri=ls.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let e=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=b0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?ls.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var Ao=require("vscode-uri");function cs(x){return x.replace(/\\/g,"/").split("/").pop()??""}function mr(x){return/\.spec\.dlo$/i.test(cs(x))}function ft(x,A){let e=cs(x);if(!e)return!1;if(mr(e))return!0;let r=A?.dlo?.mainFile;return r?cs(r)===e:e==="main.dlo"}var gc=/^\s*#define\s+TEST_OWN_MAIN\b/m;function yc(x){return gc.test(x)}function Zt(x,A){if(!mr(x))return[];let e=["DLO_TEST_SPEC=1"];return A!==void 0&&yc(A)&&e.push("TEST_OWN_MAIN=1"),e}var kc=/^(?:\s*#options\s+)(.*)(?:\s*)$/,_c=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,wc=/^(?:\s*#ifdef\s+)(.*)$/,Sc=/^(?:\s*#ifndef\s+)(.*)$/,$c=/^(?:\s*#elseifdef\s+)(.*)$/,Tc=/^(?:\s*#elseifndef\s+)(.*)$/,eo=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,ro=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,to=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,no=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,so=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Pc=/^\s*#include\s*</,qc=/^\s*#endinput\s*/,Nc=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,io=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,ao=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function Za(x,A=""){let e=" ",r=x;return A.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(e=x.substring(1,1),r=`"${x.substring(2,x.length-1)}"`),{priority:`'${e}'`,code:r}}var oo=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Fo=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(Fo||{}),Mc=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,Ic=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,Lc=/^(.*)(^|\s*)onUplinkEvent/,Rc=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,Oc=/^\s*#callback\s+\w+\s*\(/;function xo(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let s=x[t];if(e){if(s==="\\"){t++;continue}s===r&&(e=!1);continue}if(s==='"'||s==="'"){e=!0,r=s;continue}s==="("?A++:s===")"&&A--}return A}function vo(x){return eo.test(x)||no.test(x)||ro.test(x)||to.test(x)||so.test(x)||io.test(x)||ao.test(x)||oo.test(x)}function Gc(x,A,e){if(!(Rc.test(e)||Oc.test(e)))return null;let t=xo(e);if(t<=0)return null;let s=t,n=[x[A]],F=[e],f=A+1,E=100;for(;s>0&&f<x.length&&f-A<E;){let m=x[f],_=m.split("//",1)[0];n.push(m),F.push(_),s+=xo(_),f++}if(n.length<=1||s>0)return null;let u=n.map((m,_)=>_===0?m:m.trim()).join(" "),D=F.map((m,_)=>_===0?m:m.trim()).join(" ");return vo(D)?{joinedOriginal:u,joinedStripped:D,extraLineCount:n.length-1}:null}var jr=class{pragmaDynamic=null;dloFileSequencer=new br;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,s){this.dloFileSequencer.workspacePath=A;let n=[],F=t.path,f=!1,E=Ao.Utils.basename(t);if(F.includes(r0.filePaths.studio.auto.dlo.path)){let h=E.substring(0,E.length-8);!["app","main"].includes(h)&&E.endsWith("-dde.inc")&&(f=b0.generateHashForLibraryName(h))}else if(F.includes(r0.filePaths.studio.libdeps)){let h=F.split("libdeps/")[1],[S]=h.split("/");["dlo-core"].includes(S)||(f=b0.generateHashForLibraryName(S))}else z.isLibrary(r)&&(E.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",E):f=b0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:s.join(`
2326
- `),diagnostics:n};let u=[],D=this.dloFileSequencer.getSequenceForFile(F);u.push(`stock static __file{} = "${D}";`),u.push(`stock static __refid{} = "${D}";`),u.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),u.push("#line 0");let _=0;for(let h=0;h<s.length;h++){let S=s[h],P=S.split("//",1)[0],N=null,R=0;if(!vo(P)){let O=Gc(s,h,P);O&&(S=O.joinedOriginal,P=O.joinedStripped,R=O.extraLineCount)}if(N=kc.exec(P))S="// "+S,n.push({file:t,level:"error",line:h,message:"#options is not supported here. Use the DLO settings instead."});else if(N=_c.exec(P))S="// "+S,n.push({file:t,level:"error",line:h,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(N=Nc.exec(P)){let O=Number(N[1].startsWith("(")?N[1].substring(1,N[1].length-1):N[1]);!Number.isInteger(O)||O<64?n.push({file:t,level:"error",line:h,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||O>this.pragmaDynamic)&&(this.pragmaDynamic=O)}else if(N=wc.exec(P))S=S.replace("#ifdef ","#if defined ");else if(N=Sc.exec(P))S=S.replace("#ifndef ","#if !defined ");else if(N=$c.exec(P))S=S.replace("#elseifdef ","#elseif defined ");else if(N=Tc.exec(P))S=S.replace("#elseifndef ","#elseif !defined ");else if(N=eo.exec(P)){let[,O,n0,L,k]=N;S=`${O}#define ${n0} _catch_funcidx( "___${n0}")
2327
- forward ___${n0}( ${L});
2318
+ `)}function n(F,v,E=!1){let u=Pa(v)?"":'"';E&&(u=""),t(`#define ${F} ${u}${v}${u}`)}return If(s,n,e),Mf(t,s,n,A),Gf(t,s,x),Uf(t,s,x),r.join(`
2319
+ `)}var Ft=class{constructor(A,e,r){this.manifest=A;this.ddeMap=e;this.context=r;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(A,e){e&&A==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(e||A)),e&&A===">"&&this.pawnIndent++}generate(){for(let[A,e]of Object.entries(this.ddeMap.containers))this.context&&!e.libraries.includes(this.context)||!vs(e.containerType,e.transferDirection)||!e.fields||!this.context&&!G0.hasContainerAppFields(e)||ot[A].ctype!==wx.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e,r=""){this.sourceType="globalVariables";let t=e?this.variableNameForPawnDefinition(A,e):A;if(e){let s=this.generateCommentForField(e);s&&(Array.isArray(s)?(this.pawn("/**"),s.forEach(n=>{this.pawn(` * ${n}`)}),this.pawn(" */")):this.pawn(`// ${s}`))}this.pawn(`stock ${t}${e?this.initialiserForGlobalVar(e):r};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${A.title}`,r=this.createFieldDefaultDefines(e,A);this.generateArrayDefines(e,A,r);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let s=this.generateFieldVariableName(e,t);this.createGlobalVar(`${s}`,t)}}createFieldDefaultDefines(A,e){let r=new Map;for(let t of e.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let s=e.arrays[t.arrayRef.name],n=`${A}_${t.arrayRef.name}`,F="";s.fields?.length&&(F=t.name.split(".")[1],n+=`_${F}`),this.createDefaultDefineForField(n,t),t.defaultDloDefine!==void 0&&(r.has(t.arrayRef.name)||r.set(t.arrayRef.name,new Map),r.get(t.arrayRef.name).set(F,t))}return r}isPlainCellField(A){if(A.type==="struct"||!at[A.type])return!1;let e=FA(A);return!e||e==="skip"?!1:!`${e.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let e=A?.get("");return e?.defaultDloDefine===void 0||!this.isPlainCellField(e)?"":` = [ ${e.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,e){if(!e?.size||!A.fields?.length)return"";let r=[];for(let s of A.fields){let n=e.get(s.name);if(n!==void 0&&!this.isPlainCellField(n)||!this.isPlainCellField({type:s.type}))return"";r.push(n?.defaultDloDefine??"0")}let t=`[ ${r.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,e,r){for(let t of Object.values(e.arrays)){if(this.context!==t.library)continue;let s=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${s} ${t.length}`),t.fields){for(let v of t.fields)at[v.type]?.isBlob&&v.byteSize&&this.addDefine(`${A}_${t.name}_${v.name}_dim`,v.byteSize);let n={...e};n.fields=[],t.fields.forEach(v=>{n.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:v.byteSize,id:v.name,library:t.library,name:v.name,type:v.type,title:null,index:0})});let F=`${A}_${t.name}_def`;this.generateTypeDefinitions(n,F),this.createGlobalVar(`${A}_${t.name}[${s}][${F}]`,void 0,this.structuredArrayInitialiser(t,r.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${s}]`,void 0,this.simpleArrayInitialiser(r.get(t.name)))}}generateCommentForField(A){let e=[`@type ${A.type}`];if(A.description&&e.unshift(A.description),A.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(A);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(A,e){let r=`${A}_${e.name}`,t=Object.hasOwn(at,e.type)&&at[e.type].isBlob,s=e.byteSize;return s&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${s}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${s};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(A,e){this.sourceType="defines";let r=A.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let s of r){let n=this.generateFieldTypeDefinition(s,A,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let s=A.arrayRef;if(s){let v=e.arrays[s.name];if(!r.includes(s.name)&&!v.fields)r.push(s.name);else return null}let n=A.arrayRef?A.arrayRef.name:A.name,F=A.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let s=this.handleArrayFieldDedup(A,e,r,t);if(s===null)return null;let{fieldName:n,fld_dim:F}=s,v="";if(A.type==="struct")v="// ."+n+F;else{let E=FA(A);if(!E)return null;E==="skip"?v=`// skipped - .${n}${F}`:v+=E.rwp.replace("%n",`.${n}${F}`).replace("%l",A.byteSize)}return v+=",",A.library&&(v+=` // declared by ${A.library} library`),v}variableNameForPawnDefinition(A,e){let r=FA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${A}`).replace("%l",e.byteSize):A}createDefaultDefineForField(A,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${A}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${A}_offset`,e.offset),e.defaultValue!==void 0&&Nf(e)){let{value:r,reason:t}=this.parseFieldDefault(e),s=`${A}_default`;this.addDefine(s,r,t)&&(e.defaultDloDefine=s)}}addDefine(A,e,r){return st.exec(`${e}`)?!1:(this.knownDefines.includes(A)||(r&&this.pawn(`// ${r}`),this.pawn(`#define ${A} ${e}`),this.knownDefines.push(A)),!0)}generateReadWriteFunctions(A){let e=A.name,r=ot[e],t=`DDE_${A.containerType===wx.aloha?wx.aloha:A.title}`;[M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===wx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[wx.hx,wx.aloha].includes(e.containerType),s=e.containerType===wx.hx,n=e.containerType===wx.aloha,F=`_${A}_write`,v=Fs(this.manifest)?", flags":"",E=s?`stamp${v}`:"",u=Fs(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${s?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?wx.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${E});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let D=`${A}_transfer`,m=`${A}_persist`,_=this.functionArgumentsForDdeWrite(s,t);if(this.pawn(">",`${this.context?"stock ":""}${D}(${_}) {`),t)this.pawn(`${F}(${E});`);else{let h=e.name.slice(-1);this.pawn(`dde_flush(${h}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${m}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=Fs(this.manifest)?", const flags=0":"";return A?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(A,e){this.sourceType="readWrite";let r=`_${A}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(A,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,e,r,t,s,n,F){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,F);let v=e.arrayRef.name,E=s.get(v);return E?n.has(v)?F:(n.add(v),this.emitArrayLoop(A,E,r)):this.emitSingleField(A,e,r,t,F)}generateRWFunctionBody(A,e,r){let t=e.fields,s=this.analyzeArrayGroups(t,A,e),n=new Set,F=-1;for(let v of t){if(this.isFieldSkipped(v))continue;let E=FA(v);!E||E==="skip"||(F=this.emitFieldRW(A,v,r,E,s,n,F))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||Pf(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,s){e.byteOffset!==s&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${A}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let s of e.templateFields){let n=FA(s);if(!n||n==="skip")continue;let F=s.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+s.byteSize;let v=`${A}_${s.name.replace(/\[\d+\]/,"[_i]")}`,E=`${r}${n.rwfunc}(${v}`;n.rwlen&&(E+=`, ${s.byteSize}`),E+=this.defaultArgumentFor(s,r),this.pawn(E+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,e,r){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(A){let e=new Map;for(let r of A){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=FA(r);if(!t||t==="skip")continue;let{name:s,index:n}=r.arrayRef;e.has(s)||e.set(s,new Map);let F=e.get(s);F.has(n)||F.set(n,[]),F.get(n).push(r)}return e}validateArrayStride(A,e){let r=e[0].byteOffset-A[0].byteOffset;if(r<=0)return null;for(let t=0;t<A.length;t++)if(e[t].byteOffset-A[t].byteOffset!==r)return null;return r}buildArrayGroups(A,e,r){let t=new Map;for(let[s,n]of A){let F=r.arrays[s];if(!F||F.length<2)continue;let v=n.get(0),E=n.get(1);if(!v||!E||v.length===0||E.length===0||v.length!==E.length)continue;let u=this.validateArrayStride(v,E);u!==null&&t.set(s,{arrayName:s,dimDefine:`${e}_${s}_dim`,stride:u,templateFields:v})}return t}parseFieldDefault(A){let e=FA(A),r=A.defaultValue;function t(n,F){return{value:n,reason:F}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let s=this.parseFieldScaleOffset(A);return s?t(s.calculated,s.reason):(r!==void 0&&!st.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!st.exec(`${A.offset}`)||!!st.exec(`${A.scale}`)||!!st.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,s=A.scale!==void 0?Number(A.scale):1;if(s===0)return null;let n=(Number(e)-t)/s,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${s}`;return A.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function Hf(x){return`${`onUplinkApply_${x}()`};`}function Na(x,A,e){A.libraries.forEach(r=>{let t=b0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function Jf(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${b0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function Kf(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))ot[r].ctype===wx.cx&&([M0.up,M0.upPlus,M0.deviceOnly].includes(t.transferDirection)&&e.push(t),[M0.bothPlus,M0.both,M0.downPlus,M0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function zf(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkRestore_${r}();`)}),x(""),x(`stock restoreUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),Na(x,e,"Restore"),G0.hasContainerAppFields(e)&&x(` onUplinkRestore_${e.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function Vf(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkApply_${r}();`)}),x(""),x(`stock applyUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),Na(x,e,"Apply"),G0.hasContainerAppFields(e)&&x(` ${Hf(e.title)}`),x(" return(OK);"),x("}");if(x("#pragma warning push"),x("stock _onUplinkApply(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: return applyUplink${e.name}(); // ${e.name}`);x(" }"),x(" return ERROR;")}else x(" #pragma warning disable 203"),x(" // no containers to apply"),x(" return OK;");x("}"),x("#pragma warning pop")}function Ia(x,A){let e=[],r=e.push.bind(e);Jf(r,A);let{containerApply:t,containerRestore:s}=Kf(x);return zf(r,s),Vf(r,t),e.join(`
2320
+ `)}var Wf=$f.map(x=>`_DDE_${x}_write`);function Ma(x){let A=[],e=A.push.bind(A),r=[...Wf];for(let[t,s]of Object.entries(x.containers)){let n=vs(s.containerType,s.transferDirection),F=ot[t];if(!n||!s.fields||F.ctype!==wx.cx)continue;let v=`DDE_${s.name}`,E=`DDE_${s.title}_id`;if([M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(s.transferDirection)){let u=`_${v}_write`;e(`stock ${u}() {`),e(` dde_wbegin(${E});`),Ta(e,s,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(u),1)}if(F.ctype===wx.cx){let u=`_${v}_read`;e(`stock ${u}() {`),e(` if (dde_rbegin(${E})) return ERROR;`),Ta(e,s,"read"),e(" dde_rend();"),e(" return OK;"),e("}")}}if(r.length){e(""),e("// Dummy functions needed by the dde library");for(let t of r)e(`stock ${t}() { return OK; }`)}return A.join(`
2321
+ `)}function Ta(x,A,e){A.libraries.forEach(r=>{let t=b0.generateHashForLibraryName(r);x(` #ifdef __${t}${A.title}_${e}`),x(` __${t}${A.title}_${e}();`),x(" #endif")}),G0.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function La(x,A){let e=[],r=await Z0.getApmPartDependencies(x,A,p0.Part.dlo,!0);await it(x,A,e,r0.fileNames.autoInc);let t=await Xf(x,A,r);for(let s of r)s.name==="local-data-interface"&&await it(x,A,e,r0.fileNames.autoLocalDataInc),e.push(`#include <${s.name}>`),s.name==="dlo-core"&&(e.push(...t),await it(x,A,e,r0.fileNames.autoDdeInc.replace("X","app")),await it(x,A,e,r0.fileNames.autoDdeInc.replace("X","main")));return r.some(s=>s.name==="dlo-core")&&await it(x,A,e,r0.fileNames.autoUplinkInc),e.join(`
2322
+ `)}async function Xf(x,A,e){let r=[];for(let t of e){let s=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(ls.Utils.joinPath(x,s))&&r.push(`#include "${r0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function it(x,A,e,r){let t=ls.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var Oa=W0(require("semver")),Ga=require("yaml");var vA=G0.ContainerType,Wt=G0.TransferDirection,Yf=G0.fieldTypeDefinitions,pr={$ref:"#/components/parameters/contextId"},Qf={$ref:"#/components/parameters/addonId"},Zf={$ref:"#/components/parameters/appId"},Ra={$ref:"#/components/schemas/histdataResponse"},xc={$ref:"#/components/schemas/histdataRequest"},Xt={$ref:"#/components/schemas/rapidM2MStamp"},Ac={$ref:"#/components/schemas/timeseriesRequestBase"},Vt="rapidM2M Stamp",gA={description:"Successful operation"},Ua={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}}},Ha={...structuredClone(Ua)};Object.assign(Ha.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[Xt,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:Vt,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:Vt,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:Vt,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:Vt,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var vt={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},me={401:{description:"Permission denied",...vt},403:{description:"Forbidden",...vt},404:{description:"Resource not found",...vt},500:{description:"Internal error",...vt}};function cs(x,A,e=null){let r=Oa.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{}}};e?Object.assign(t.components,structuredClone(Ua)):Object.assign(t.components,structuredClone(Ha));let s=z.isAddon(A),n=z.isAnalytics(A);s&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(x.containers))e&&(!F.libraries.includes(e)||F.containerType===vA.hx)||!e&&!G0.hasContainerAppFields(F)||F.containerType===vA.aloha||(ec(t,F),tc(t,F,e),ic(t,F,s,n),!s&&!n&&(rc(t,F,e),sc(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,Ga.stringify)(t)}function ec(x,A){x.tags.push({name:xA(A.title),description:`Transfer direction ${A.transferDirection}`})}function xA(x){return x.split("_").join(" ")}function rc(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},s=[];A.containerType===vA.hx&&(r+="Select",s.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of A.fields)n.library!==e||n.type==="shadow"||(A.containerType===vA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=Ja(n),!n.readPermission&&!n.writePermission&&s.push(n.id)));t.required=s.length?s:void 0,x.components.schemas[r]=t}function tc(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},s=[],n=A.containerType===vA.hx;for(let v of A.fields)v.library!==e||v.type==="shadow"||(t.properties[v.name]=Ja(v),!v.readPermission&&!v.writePermission&&s.push(v.name));t.required=s.length?s:void 0,x.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(E=>E.toLowerCase());let v={};for(let[E,u]of Object.entries(t.properties))v[E.toLowerCase()]=u;t.properties=v}if(n){let v={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(F)}}}};x.components.schemas[`${r}RequestSingle`]=v,x.components.schemas[`${r}Request`]={allOf:[Ac,v]},t.properties.stamp=Xt,s.push("stamp")}}function Ja(x){let e={...Yf[x.type].openApi},r=nc(x);return e.default=r,e.example=r,e.description=x.description,e}function nc(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function sc(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([vA.cx,vA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[xA(A.title)],summary:`Retrieve the data of the "${xA(A.title)}" container`,parameters:[pr],responses:{200:{...gA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Xt}},{$ref:`#/components/schemas/${A.name}`}]}}}},...me}},[Wt.down,Wt.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[xA(A.title)],summary:`Modify the data of the "${xA(A.title)}" container`,parameters:[pr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...gA},204:{...gA},...me}});else if(A.containerType===vA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[xA(A.title)],summary:`Retrieve the youngest data of the "${xA(A.title)}" container`,parameters:[pr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...gA,content:{"application/json":{schema:Ra}}},...me}},x.paths[t]={get:{deprecated:!0,tags:[xA(A.title)],summary:`Get the historical data of the "${xA(A.title)}" container.`,parameters:[pr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},xc]}}],responses:{200:{...gA,content:{"application/json":{schema:Ra}}},...me}}}}x.paths[e]=r}function ic(x,A,e=!1,r=!1){let s=A.containerType===vA.hx?"timeseries":"containers",n=[],F=xA(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${s}/${A.title}`,params:[pr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${A.title}`,params:[pr,Qf],tags:[F]}]);let v={path:`/api/1/app-center/apps/{appUid}/${s}/${A.title}`,params:[Zf],tags:["app-center"]};r&&v.tags.push(F),n.push(v);let E={get:void 0,put:void 0,post:void 0},u={tags:[],summary:`Retrieve the data of the "${xA(A.title)}" container`,parameters:[],responses:{200:{...gA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Xt}},{$ref:`#/components/schemas/${A.title}`}]}}}},...me}};if([vA.cx,vA.cb].includes(A.containerType)&&(E.get=u,[Wt.down,Wt.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${xA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...gA},204:{...gA},...me}}),n.forEach(D=>{let m=structuredClone(E);Object.values(m).forEach(_=>{_?.parameters?.unshift(...D.params),_?.tags?.unshift(...D.tags)}),x.paths[D.path]=m})),A.containerType===vA.hx){E.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...gA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...me}},e&&(E.post={tags:[],summary:`Insert data into the "${xA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...gA},400:{description:"Bad request",...vt},...me}});let D=n[0],m=structuredClone(E);Object.values(m).forEach(U=>{U?.parameters?.unshift(...D.params),U?.tags?.unshift(...D.tags)}),x.paths[D.path]=m;let _={...gA,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},h=`${D.path}/youngest`,S={get:structuredClone(m.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=_;let P=e?2:1;S.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[h]=S;let N=`${D.path}/oldest`,R={get:structuredClone(m.get)};R.get.summary=`Get the oldest record of "${A.title}" container`,R.get.responses[200]=_,R.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[N]=R}}var za=G0.TransferDirection,Yt=" new szTemp{64};",Qt=" return strcat(aData, szTemp, sizeof(szTemp));";function Va(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",e=A.includes("["),t=A.includes("{")||e;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return e?null:"s";default:return null}}function Es(x){if(x.type==="shadow"||x.shadowRef)return null;let A=FA(x);return!A||A==="skip"?null:Va(A)}function Wa(x){return[G0.ContainerType.hx,G0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==za.backendOnly}function ac(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=FA(x);return!!A&&A!=="skip"}function oc(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",s=`${x.arrayRef.name}|${t}|${A}`;e.has(s)||e.set(s,{fields:[],formatType:A}),e.get(s).fields.push(x)}function Fc(x){let A=[],e=new Map,r=new Set,t=!1;for(let s of x){if(!ac(s))continue;let n=Es(s);s.arrayRef&&n?oc(s,n,e):(A.push(s),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function vc(x,A,e){e.sort((E,u)=>E.arrayRef.index-u.arrayRef.index);let r=e.map(E=>E.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((E,u)=>u===0||E-r[u-1]===t)))return null;let[n,F]=A.split("|"),v=e[0].library?`_${b0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:Es(e[0]),pawnVarBase:`${v}${x}_${n}`}}function lc(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=Fc(A),n=[];for(let[F,v]of r){let{fields:E,formatType:u}=v;if(E.length<2){e.push(...E),t.add(u);continue}let D=vc(x,F,E);D?(t.add(u),n.push(D)):(e.push(...E),t.add(u))}return e.sort((F,v)=>F.byteOffset-v.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:s}}function fc(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(Wa(e))for(let r of e.fields){let t=Es(r);t&&A.add(t)}return A}function cc(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(Yt),x(' sprintf(szTemp, _, "%d", value);'),x(Qt),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(Yt),x(' sprintf(szTemp, _, "%.3f", value);'),x(Qt),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(Yt),x(' sprintf(szTemp, _, "%s", value);'),x(Qt),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(Yt),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(Qt),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function Ec(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function Bc(x,A,e){let r=`idx >= ${x} && idx <= ${A}`;if(e===1)return r;let t=x===0?`idx % ${e} == 0`:`(idx - ${x}) % ${e} == 0`;return`${r} && ${t}`}function Cc(x,A){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:n,subField:F}=A,v=Ec(e,t),E=Bc(e,r,t);if(x(` if (${E}) {`),s==="bin"){let u=`${n}[${v}]${F}`,D=F?F.substring(1):"",m=D?`${n}_${D}_dim`:`${n}_dim`;x(` return _DDE_fmt_bin(aData, ${u}, ${m});`)}else x(` return _DDE_fmt_${s}(aData, ${n}[${v}]${F});`);x(" }")}function dc(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=FA(e);if(!r||r==="skip")return;let s=`${e.library?`_${b0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=Va(r);if(n==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${s}, ${s}_dim);`);else if(n)x(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${s});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let F=s;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),x(` sprintf(szTemp, _, "${r.printf}", ${F});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function uc(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function Ka(x,A,e){let r=e===G0.ContainerType.cx?"c":"h",t=e===G0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[s,n]of Object.entries(A.containers))e===n.containerType&&s.startsWith(t)&&n.transferDirection!==za.backendOnly&&uc(x,s,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function Dc(x,A){let e=lc(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),e.hasInlineFields&&x(" new szTemp{64};");for(let r of e.arrayGroups)Cc(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)dc(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function pc(x,A){for(let[,e]of Object.entries(A.containers))Wa(e)&&Dc(x,e)}function Xa(x){let A=[],e=A.push.bind(A),r=fc(x);return cc(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),Ka(e,x,G0.ContainerType.cx),Ka(e,x,G0.ContainerType.hx),e(" return OK;"),e("}"),pc(e,x),A.join(`
2323
+ `)}var xo=b0.yamlRangeToLineInformation,lt=r0.filePaths.dde.path,lA;(t0=>{let x=G0.DDEJson,A=b0.convertBlobToString;t0.DDE_SCHEMA=wa;async function r(M,k){let L=await k.readFile(M);return A(L)}t0.readYamlFile=r;async function t(M,k,L=r0.fileNames.mainDDE,W){let Q=[],H=await z.read(M,k),J=await Ya(M,k,H);if(W)for(let Z of J){let{result:o0,unresolvedKeys:O}=ux.replaceDefineTemplates(Z.yaml,W);Z.yaml=o0;for(let i0 of O)Q.push({file:Z.path,level:"error",message:`Unresolved define template: {{${i0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let Z of J)Q.push(...v(Z.path,Z.yaml));let a0=Dx.Utils.joinPath(M,lt,L),n0=await r(a0,k);if(W){let{result:Z,unresolvedKeys:o0}=ux.replaceDefineTemplates(n0,W);n0=Z;for(let O of o0)Q.push({file:a0,level:"error",message:`Unresolved define template: {{${O}}}`,line:0,startCharacter:0,endCharacter:0})}return Q.push(...v(a0,n0)),{manifest:H,libraryFiles:J,main:{path:a0,yaml:n0},diagnostics:Q}}t0.validate=t;async function s(M,k,L,W=r0.fileNames.mainDDE){let Q=await z.read(M,k),H=await ux.read(M,k,L),J=await t(M,k,W,H.flat);if(J.diagnostics.filter(B0=>B0.level==="error").length>0)return{ddeJSON:null,diagnostics:J.diagnostics};let n0=await _(M,k,L),Z=new Jt.PreCompiler(Q,J.libraryFiles,n0),o0=Z.parseLibraries();if(o0.find(B0=>B0.level==="error"))return{ddeJSON:null,diagnostics:[...J.diagnostics,...o0]};let{ddeJSON:i0,diagnostics:l0}=Z.parseMainDDE(J.main.path,J.main.yaml);return{ddeJSON:i0,diagnostics:[...J.diagnostics,...l0]}}t0.compileDDE=s;let n=new Qa.default({strict:!1,allErrors:!0,verbose:!0});(0,Za.default)(n);let F=n.compile(t0.DDE_SCHEMA);function v(M,k){let L=new Zt.LineCounter,W=(0,Zt.parseDocument)(k,{lineCounter:L,keepSourceTokens:!0}),Q=[];for(let a0 of W.errors){let n0=a0.pos?xo(L,[a0.pos[0],a0.pos[1],a0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};Q.push({file:M,level:"error",message:a0.message,...n0})}if(Q.length>0)return Q;let H=W.toJSON();if(!F(H)){let n0=(F.errors||[]).filter(o0=>o0.keyword!=="if"),Z=new Set;for(let o0 of n0){let O=jc(o0);if(Z.has(O))continue;Z.add(O);let i0=gc(W,L,o0);Q.push({file:M,level:"error",message:O,...i0})}}return Q}t0.validateJsonSchema=v,t0.PreCompiler=(M,k,L)=>new Jt.PreCompiler(M,k,L);function u(M,k){return as(M,k)}t0.generateMyDatanetXML=u;async function D(M,k,L,W){let Q=await z.read(M,k),H=as(Q,W),J=Dx.Utils.joinPath(M,r0.filePaths.dist.ddeXmlPath);await k.writeFile(J,H),L.log("Generated",r0.filePaths.dist.ddeXmlPath)}t0.exportMyDatanetXML=D;async function m(M,k,L,W,Q){let H=Dx.Utils.joinPath(M,r0.filePaths.studio.auto.dde.historyJson);await k.rm(H).catch(console.error);let J=await z.read(M,k);if(!z.isApp(J)||!J.registry?.id)return;if(!Q){L.warn("Could not fetch dde of previous version: No API token provided.");return}let a0=OA.coerce(J.version);try{let o0=(await tx.getExistingApplication(Q,J.publisher,J.registry.id,W)).versions.find(B0=>!OA.prerelease(B0.version)&&OA.lte(B0.version,a0)),O=o0?.files.find(B0=>B0.name==="dde.json");if(!O){L.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let i0=await fetch(O.downloadUrl,{headers:{...oA(Q),...tx.injectSemverHeader(!0)}});if(i0.status!==200){L.warn(`Could not fetch the dde.json of version "${o0?.version}"`);return}let l0=await i0.text();await k.writeFile(H,l0),L.log(`Saved history.json of previous app version ${o0.version}`)}catch(n0){L.error("Failed to fetch the dde of previous version",n0)}}t0.fetchPreviousHistoryJson=m;async function _(M,k,L){try{let W=Dx.Utils.joinPath(M,r0.filePaths.studio.auto.dde.historyJson);if(await k.stat(W)){let H=await k.readFile(W);return JSON.parse(A(H))}let Q=Dx.Utils.joinPath(M,lt,"history.json");if(await k.stat(Q)){L.warn(`"${r0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${lt}history.json"`);let H=await k.readFile(Q),J=JSON.parse(A(H)),a0=await z.read(M,k),n0=OA.coerce(a0.version)?.version,Z=Object.keys(J||{}).sort(OA.rcompare).find(O=>O!==n0);if(!Z)return null;let o0=J[Z];return{version:Z,...o0}}}catch(W){L.error("Failed to read history.json",W)}return L.warn("history.json does not exist"),null}t0.getHistoryJson=_;function h(M,k){return{version:OA.coerce(k.version)?.version||"1.0.0",...structuredClone(M)}}t0.buildHistoryJson=h;async function S(M,k,L,W){let Q=await z.read(M,k),H=h(W,Q),J=Dx.Utils.joinPath(M,r0.filePaths.dist.historyJson);await k.writeFile(J,JSON.stringify(H,null," ")),L.log("Generated",r0.filePaths.dist.historyJson)}t0.exportHistoryJson=S;async function P(M,k){return k.rm(Dx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.path))}t0.clearAutoDloDir=P;async function N(M,k,L,W){await P(M,k);let Q=await z.read(M,k),H=await Ya(M,k,Q),J=await ux.read(M,k,L),a0=qa(W,J,Q),Z=new Ft(Q,W,null).generate();for(let ix of H){let Vx=new Ft(Q,W,ix.libraryName),{globals:kA,helper:_A}=Vx.generate(),ox=[...kA,..._A].join(`\r
2324
+ `),Ax=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",ix.libraryName),eA=Dx.Utils.joinPath(M,Ax);ox.length&&(L.log("Generated",Ax),await k.writeFile(eA,ox))}let o0=Ma(W),O=Ia(W,H.map(ix=>ix.libraryName)),i0=Xa(W),l0=Dx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(l0,a0),L.log("Generated",r0.filePaths.studio.auto.dlo.autoInc);let B0=Dx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(B0,O),L.log("Generated",r0.filePaths.studio.auto.dlo.autoUplinkInc);let C0=Dx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(C0,i0),L.log("Generated",r0.filePaths.studio.auto.dlo.autoLocalDataInc);let _0=Dx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile(_0,[...Z.globals,...Z.helper].join(`
2325
+ `)),L.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let $0=Dx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile($0,o0),L.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await U(M,k,L)}t0.exportAutoDloFiles=N;async function R(M,k,L,W){let Q=await z.read(M,k),H=z.isLibrary(Q),J=Dx.Utils.joinPath(M,r0.filePaths.dist.path,"dde-api.yaml");await k.rm(J).catch(()=>{});let a0=Dx.Utils.joinPath(M,r0.filePaths.dist.ddeApi);if(await k.writeFile(a0,cs(W,Q)),L.log("Generated",r0.filePaths.dist.ddeApi),H){let n0=Dx.Utils.joinPath(M,r0.filePaths.dist.ddeApiPath,`${Q.name}.yaml`),Z=cs(W,Q,Q.name);Z.length&&(await k.writeFile(n0,Z),L.log("Generated",r0.filePaths.dist.ddeApiPath+`${Q.name}.yaml`))}}t0.exportOpenApi=R;async function U(M,k,L){let W=Dx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.defaultInc),Q=await La(M,k);await k.writeFile(W,Q),L.log("Generated",r0.filePaths.studio.auto.dlo.defaultInc)}t0.exportDefaultInc=U})(lA||={});async function Ya(x,A,e){let r=[],t=await Z0.getAll(e);for(let s in t){let n=Z0.dependencyToPath(x,s),F=Z0.dependencyIdToName(s),v=Dx.Utils.joinPath(n,`${lt}/${F}.dde`);await A.stat(v)&&r.push({libraryName:F,path:v,yaml:await lA.readYamlFile(v,A)})}if(z.isLibrary(e)){let s=Dx.Utils.joinPath(x,`/${lt}/${e.name}.dde`);await A.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await lA.readYamlFile(s,A)})}return r}function bc(x,A,e){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let r=x[A];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function mc(x,A,e,r){let s={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return s?s():e}function jc(x){let A=x.instancePath||"/",e=x.parentSchema,r=bc(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${mc(x.keyword,x.params,t,e)}`}function hc(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),s=x.getIn(t,!0);if(s?.range)return s.range}return null}function gc(x,A,e){let r=hc(x,e.instancePath||"");return r?xo(A,r):{line:0,startCharacter:0,endCharacter:0}}var Bs=require("vscode-uri");var br=class{dloFileMap={};rootUri=Bs.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let e=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=b0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?Bs.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var ro=require("vscode-uri");function Cs(x){return x.replace(/\\/g,"/").split("/").pop()??""}function mr(x){return/\.spec\.dlo$/i.test(Cs(x))}function ft(x,A){let e=Cs(x);if(!e)return!1;if(mr(e))return!0;let r=A?.dlo?.mainFile;return r?Cs(r)===e:e==="main.dlo"}var yc=/^\s*#define\s+TEST_OWN_MAIN\b/m;function kc(x){return yc.test(x)}function xn(x,A){if(!mr(x))return[];let e=["DLO_TEST_SPEC=1"];return A!==void 0&&kc(A)&&e.push("TEST_OWN_MAIN=1"),e}var _c=/^(?:\s*#options\s+)(.*)(?:\s*)$/,wc=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,Sc=/^(?:\s*#ifdef\s+)(.*)$/,$c=/^(?:\s*#ifndef\s+)(.*)$/,Tc=/^(?:\s*#elseifdef\s+)(.*)$/,Pc=/^(?:\s*#elseifndef\s+)(.*)$/,to=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,no=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,so=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,io=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,ao=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,qc=/^\s*#include\s*</,Nc=/^\s*#endinput\s*/,Ic=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,oo=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Fo=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function Ao(x,A=""){let e=" ",r=x;return A.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(e=x.substring(1,1),r=`"${x.substring(2,x.length-1)}"`),{priority:`'${e}'`,code:r}}var vo=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,lo=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(lo||{}),Mc=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,Lc=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,Rc=/^(.*)(^|\s*)onUplinkEvent/,Oc=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,Gc=/^\s*#callback\s+\w+\s*\(/;function eo(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let s=x[t];if(e){if(s==="\\"){t++;continue}s===r&&(e=!1);continue}if(s==='"'||s==="'"){e=!0,r=s;continue}s==="("?A++:s===")"&&A--}return A}function fo(x){return to.test(x)||io.test(x)||no.test(x)||so.test(x)||ao.test(x)||oo.test(x)||Fo.test(x)||vo.test(x)}function Uc(x,A,e){if(!(Oc.test(e)||Gc.test(e)))return null;let t=eo(e);if(t<=0)return null;let s=t,n=[x[A]],F=[e],v=A+1,E=100;for(;s>0&&v<x.length&&v-A<E;){let m=x[v],_=m.split("//",1)[0];n.push(m),F.push(_),s+=eo(_),v++}if(n.length<=1||s>0)return null;let u=n.map((m,_)=>_===0?m:m.trim()).join(" "),D=F.map((m,_)=>_===0?m:m.trim()).join(" ");return fo(D)?{joinedOriginal:u,joinedStripped:D,extraLineCount:n.length-1}:null}var jr=class{pragmaDynamic=null;dloFileSequencer=new br;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,s){this.dloFileSequencer.workspacePath=A;let n=[],F=t.path,v=!1,E=ro.Utils.basename(t);if(F.includes(r0.filePaths.studio.auto.dlo.path)){let h=E.substring(0,E.length-8);!["app","main"].includes(h)&&E.endsWith("-dde.inc")&&(v=b0.generateHashForLibraryName(h))}else if(F.includes(r0.filePaths.studio.libdeps)){let h=F.split("libdeps/")[1],[S]=h.split("/");["dlo-core"].includes(S)||(v=b0.generateHashForLibraryName(S))}else z.isLibrary(r)&&(E.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",E):v=b0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:s.join(`
2326
+ `),diagnostics:n};let u=[],D=this.dloFileSequencer.getSequenceForFile(F);u.push(`stock static __file{} = "${D}";`),u.push(`stock static __refid{} = "${D}";`),u.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),u.push("#line 0");let _=0;for(let h=0;h<s.length;h++){let S=s[h],P=S.split("//",1)[0],N=null,R=0;if(!fo(P)){let U=Uc(s,h,P);U&&(S=U.joinedOriginal,P=U.joinedStripped,R=U.extraLineCount)}if(N=_c.exec(P))S="// "+S,n.push({file:t,level:"error",line:h,message:"#options is not supported here. Use the DLO settings instead."});else if(N=wc.exec(P))S="// "+S,n.push({file:t,level:"error",line:h,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(N=Ic.exec(P)){let U=Number(N[1].startsWith("(")?N[1].substring(1,N[1].length-1):N[1]);!Number.isInteger(U)||U<64?n.push({file:t,level:"error",line:h,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||U>this.pragmaDynamic)&&(this.pragmaDynamic=U)}else if(N=Sc.exec(P))S=S.replace("#ifdef ","#if defined ");else if(N=$c.exec(P))S=S.replace("#ifndef ","#if !defined ");else if(N=Tc.exec(P))S=S.replace("#elseifdef ","#elseif defined ");else if(N=Pc.exec(P))S=S.replace("#elseifndef ","#elseif !defined ");else if(N=to.exec(P)){let[,U,t0,M,k]=N;S=`${U}#define ${t0} _catch_funcidx( "___${t0}")
2327
+ forward ___${t0}( ${M});
2328
2328
  #line
2329
2329
  ${_}
2330
- public ___${n0}( ${L})${k}`}else if(N=no.exec(P)){let[,O,n0]=N;S=`${O}${n0}{_log_string="";_assert(__refid,__line);}`}else if(N=ro.exec(P)){let[,O,n0,L,k]=N;S=`${O}${n0}{ if (!(${L})) { sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(N=to.exec(P)){let[,O,n0,L]=N;S=`${O}${n0}{ if (!(${L})) { _log_string="";_assert(__refid,__line); }}`}else if(N=so.exec(P)){let[,O,n0,L]=N;S=`${O}${n0}_catch(__refid,__line,${L});`}else if(N=io.exec(P)){let[,O,n0,L,k,I]=N,{priority:X,code:W}=Za(k,L.substring(1));X!==null&&(S=`${O}${n0}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${I});DDE_applog_write(${X}, ${W}, params_str, __applog_src_id);}`)}else if(N=ao.exec(P)){let[,O,n0,L,k]=N,{priority:I,code:X}=Za(k,L.substring(1));I!==null&&(S=`${O}${n0}DDE_applog_write(${I}, ${X}, "", __applog_src_id);`)}else if(N=oo.exec(P)){let[,O,n0,L,k]=N,I=L.substring(1),X=Fo[I];S=`${O}${n0}{ if(_log_level <= ${X}){ sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")}); _log${L}(__refid,__line); }}`}else(N=Pc.exec(P))&&!F.includes(r0.filePaths.studio.auto.path)&&!ft(F,r)?(F.includes(r0.filePaths.studio.libdeps)||n.push({file:t,level:"warning",line:h,message:"Libraries are included automatically - remove this #include line"}),S="// Libraries are included automatically! - "+P):(N=qc.exec(P))&&(n.push({file:t,level:"error",line:h,message:"#endinput is not supported - use #if/#endif instead"}),S=P);f&&!r.legacyProject&&(Mc.exec(P)&&(S=S.replaceAll("DDE_",`_${f}`)),Ic.exec(P)&&(S=S.replace("onUplink",`_${f}`)),Lc.exec(P)&&(S=S.replace("onUplink",`_${f}Uplink`))),u.push(S),_++;for(let O=0;O<R;O++)u.push(""),_++,h++}if(!ft(F,r)){let h=E.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),S=`_inc_${h}`.substring(0,31),P=`_inc_${h}_inc`.substring(0,31);u.push(`#if defined ${S}`),u.push(`#undef ${S}`),u.push("#endif"),u.push(`#if defined ${P}`),u.push(`#undef ${P}`),u.push("#endif")}return{data:u.join(`
2331
- `),diagnostics:n}}};var OA=require("vscode-uri");var T0=W0(require("fs")),nx=require("vscode-uri");var Eo=W0(require("iconv-lite")),Uc=b0.convertBlobToStringArray,Bo=16384,Co=511,Es=Bo|Co,Hc=32768,Jc=438,fo=Hc|Jc,Kc=new jr,hr={};function An(){let x=[];for(let A of Object.keys(hr))x.push(...hr[A].diagnostics);return x}var xn=!!process.env.DLO_PROFILE,ne={precompileCount:0,cacheHits:0,precompileMs:0};function uo(x){xn&&(x.log(`[DLO_PROFILE] precompile: ${ne.precompileCount} runs, ${ne.cacheHits} cache hits, ${ne.precompileMs.toFixed(1)}ms`),ne.precompileCount=0,ne.cacheHits=0,ne.precompileMs=0)}var Bs=(x,A,e,r)=>{let t={getattr(n){let F=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)),f=F.fsPath;if(!T0.existsSync(f))throw new x.ErrnoError(44);let E=co(A,r,e,F),u=T0.statSync(f),D=E?.length||u.size;return{mode:u.isDirectory()?Es:fo,size:D,atime:u.atime,mtime:u.mtime,ctime:u.ctime}},setattr(n,F){let f=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;if(!T0.existsSync(f))throw new x.ErrnoError(44);if(typeof F.size=="number"&&T0.truncateSync(f,F.size),typeof F.mode=="number"&&T0.chmodSync(f,F.mode),F.atime||F.mtime){let E=T0.statSync(f);T0.utimesSync(f,F.atime??E.atime,F.mtime??E.mtime)}},lookup(n,F){let E=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;if(!T0.existsSync(E))throw new x.ErrnoError(44);let u=T0.statSync(E),D=x.createNode(n,F,u.isDirectory()?Es:fo,0);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},readdir(n){let F=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;return[".","..",...T0.readdirSync(F)]},mknod(n,F,f,E){let u=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.writeFileSync(u,"");let D=x.createNode(n,F,f,E);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},unlink(n,F){let f=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.unlinkSync(f)},mkdir(n,F,f){let E=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.mkdirSync(E,{mode:f});let u=x.createNode(n,F,f|Es,0);return u.node_ops=n.node_ops,u.stream_ops=n.stream_ops,u},rmdir(n,F){let f=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.rmdirSync(f)},rename(n,F,f){let E=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath,u=nx.Utils.joinPath(nx.URI.parse(F.mount.opts.root),x.getPath(F),f).fsPath;T0.renameSync(E,u)}},s={open(n){let F=nx.Utils.joinPath(nx.URI.parse(n.node.mount.opts.root),x.getPath(n.node));n.modifiedContent=co(A,r,e,F),n.modifiedContent||(n.nfd=T0.openSync(F.fsPath,lo(n.flags)))},close(n){n.nfd&&T0.closeSync(n.nfd)},read(n,F,f,E,u){if(!n.modifiedContent)return T0.readSync(n.nfd,F,f,E,u);let D=n.modifiedContent;if(u>=D.length)return 0;let m=D.length-u,_=Math.min(E,m);return zc(D,F,f,u,u+_),_},write(n,F,f,E,u){return T0.writeSync(n.nfd,F,f,E,u)},flagsToMode:lo,llseek(n,F,f){let E=F;if(f===1)E+=n.position;else if(f===2){let u=T0.fstatSync(n.nfd);E+=u.size}if(E<0)throw new x.ErrnoError(28);return n.position=E,E}};return{mount(){let n=se(A),F=x.createNode(null,n,Bo|Co,0);return F.node_ops=t,F.stream_ops=s,F},node_ops:t,stream_ops:s}};function lo(x){let A=x&2097155;if(A===0)return"r";if(A===1)return"r+";if(A===65)return"w";if(A===577)return"w+";if(A===1089)return"a";if(A===1217)return"a+";throw new Error(`Unknown file open flags: ${x}`)}function zc(x,A,e,r,t){if(Buffer.isBuffer(x)&&Buffer.isBuffer(A))x.copy(A,e,r,t);else{let s=x.subarray(r,t);Buffer.isBuffer(A)?Uint8Array.prototype.set.call(A,s,e):A.set(s,e)}}function co(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let s=Vc(t);if(!s){delete hr[t];return}let n=hr[t];if(n&&n.mtimeMs===s.mtimeMs&&n.size===s.size)return xn&&ne.cacheHits++,n.buffer;let F=xn?performance.now():0,f=Wc(x,A,e,r);return xn&&(ne.precompileCount++,ne.precompileMs+=performance.now()-F),hr[t]={buffer:f.buffer,mtimeMs:s.mtimeMs,size:s.size,diagnostics:f.diagnostics},hr[t].buffer}function Vc(x){try{return T0.statSync(x)}catch{return null}}function Wc(x,A,e,r){let t=T0.readFileSync(r.fsPath),s=Uc(t),n=Kc.preCompileDloFile(x,A,e,r,s);return{buffer:Eo.encode(n.data,"cp1252"),diagnostics:n.diagnostics}}function se(x){return x.fsPath.replace(/\\/g,"/")}function lt(x,A){let e=se(x);return se(A).replace(e,"")}var yo=go(),Et=yo.createPawnCC,ko=yo.createPawnDbg;var gr=class{constructor(A,e,r){this.cwd=A;this.fs=e;this.logger=r;this.dloCC=null}cwd;fs;logger;dloCC;stdout=[];stderr=[];async initDloCC(A=!1){this.stdout.length=0,this.stderr.length=0,this.dloCC=await Et({noExitRuntime:A,print:n=>{let F=Cs(this.cwd,n);this.logger.log(F?F.message:n),this.stdout.push(n)},printErr:n=>{let F=Cs(this.cwd,n);n.includes(": warning")?this.logger.warn(F?F.message:n):this.logger.error(F?F.message:n),this.stderr.push(n),this.stdout.push(n)}});let e=se(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,s=await z.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=Bs(t,this.cwd,s,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(se(this.cwd))}async compile(A,e){let r=await z.read(A,e);if(!await z.isApmPartEnabled(A,e,p0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(OA.Utils.joinPath(A,"dist/dlo"));let t=OA.Utils.joinPath(A,r.dlo?.mainFile||r0.filePaths.dlo.mainDLO),s=[],n=OA.Utils.joinPath(A,r0.filePaths.studio.auto.dlo.cfg),F=lt(A,n);if(s.push(`-T.${F}`),mr(t.path)){let E="";try{E=b0.convertBlobToString(await e.readFile(t))}catch(u){this.logger.error(u)}s.push(...Zt(t.path,E))}let f=0;try{let E=`.${lt(A,t)}`;f=await this.dloCC.callMain([E,...s])}catch(E){this.logger.error(E)}return{code:f,stdout:this.stdout,stderr:this.stderr,diagnostics:[...An(),...ds(A,this.stderr,t)]}}async getDloSymbols(A,e){let r=e.map(D=>{let m=D.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(m)?`${m}.${D.substring(2)}`:D}),t=!!process.env.DLO_PROFILE,s=t?performance.now():0,{compiler:n,print:F}=await this.getSymbolCompiler(),f=t?performance.now()-s:0,E=t?performance.now():0,u=0;try{u=await n.callMain(["."+A,...r,"-R"])||0}catch(D){if(D.stack?.startsWith("RuntimeError"))return null;throw D}finally{if(t){let D=performance.now()-E;this.logger.log(`[DLO_PROFILE] instantiate: ${f.toFixed(1)}ms, callMain: ${D.toFixed(1)}ms`),uo(this.logger)}}return{exitCode:u,lines:[...F.stdout,...F.stderr]}}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await Et({noExitRuntime:!1,print:F=>{A.stdout.push(F)},printErr:F=>{A.stderr.push(F)}}),r=se(this.cwd),[t]=r.split("/"),s=e.FS,n=await z.read(this.cwd,this.fs);return s.filesystems.NODEFS_TS=Bs(s,this.cwd,n,this.logger),s.mkdir(t),s.mount(s.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function ds(x,A,e){let r=[],t=A.filter(s=>!!s.trim());for(let s of t){if((s.includes("Assertion failed:")||s.includes("Compilation aborted."))&&e){r.push({file:e,level:"error",line:0,message:s});continue}let n=Cs(x,s);n&&r.push({file:OA.URI.parse(`file:///${n?.posixPath}`),level:n.level,line:Number(n.lineNumber)-1,message:n.msg})}return r}function Cs(x,A){let e=A.indexOf(" : "),r=A.indexOf(": ",e+3),t=A.substring(0,e).trim(),s=A.substring(e+3,r).trim(),n=A.substring(r+2).trim();if(!t||!s||!n)return null;let[F,f]=t.split(/[()(-)]/),E=s.split(" "),u=E[E.length-2],m=OA.Utils.joinPath(x,F).fsPath.replace(/\\/g,"/");m.startsWith("/")&&(m=m.substring(1));let _=A.replace(F,m);return{level:u,msg:n,posixPath:m,lineNumber:f,message:_}}async function _o(x,A,e){let r=["-M","-v2"],t=OA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${lt(x,t)}`);let s=await Z0.getApmPartDependencies(x,A,p0.Part.dlo);for(let F of s){let f=OA.Utils.dirname(F.path);r.push(`-i.${lt(x,f)}`)}let n=e.dlo;return n&&r.push(...n.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:OA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.cfg),data:r.join(`
2332
- `)}}var Bt;(m=>{m.createPawnCC=Et,m.createPawnDbg=ko,m.FileSequencer=br,m.PreCompiler=jr;function t(_,h){return ft(_,h)}m.isDloRootFile=t;function s(_){return mr(_)}m.isDloSpecFile=s;function n(_,h){return Zt(_,h)}m.getSpecCompileDefines=n,m.Compiler=gr,m.uriToMemFs=se,m.getPrecompilerDiagnostics=An,m.parseCompilerWarningsAndErrors=ds;async function D(_,h,S){let P=await z.read(_,h),N=await _o(_,h,P);await h.writeFile(N.path,N.data),S.log("Generated",r0.filePaths.studio.auto.dlo.cfg)}m.exportDloConfig=D})(Bt||={});var us=require("vscode-uri");var So=W0(require("node:child_process"));var en;(e=>{async function x(r,t,s){let n=await z.read(r,t);if(await z.isApmPartEnabled(r,t,p0.Part.pov)){s.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:f}=n.pov.details,E=us.Utils.joinPath(r,f);try{await wo(E,F,s)}catch(u){throw u.code?new Error(`APM part '${p0.Part.pov}' has errors. Aborted.`):u}}}e.tryBuildPov=x;async function A(r,t,s){let n=await z.read(r,t);if(await z.isApmPartEnabled(r,t,p0.Part.blo,n)){s.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:f}=n.blo,E=us.Utils.joinPath(r,f);try{await wo(E,F,s)}catch(u){throw u.code?new Error(`APM part '${p0.Part.blo}' has errors. Aborted.`):u}}}e.tryBuildBlo=A})(en||={});async function wo(x,A,e){return new Promise((r,t)=>{So.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{e.log(n),F&&e.error(F),s&&t(s),r(null)})})}var To=require("vscode-uri");var ps=require("minimatch");var Po=require("@gera2ld/tarjs"),FE=b0.convertBlobToString,vE=require("pako"),qo=".studioignore",No=[".vscodeignore","package-lock.json","npm-debug.log","yarn.lock","yarn-error.log","npm-shrinkwrap.json",".editorconfig",".npmrc",".yarnrc",".gitattributes","*.todo","tslint.yaml",".eslintrc*",".babelrc*",".prettierrc*",".cz-config.js",".commitlintrc*","webpack.config.js","ISSUE_TEMPLATE.md","CONTRIBUTING.md","PULL_REQUEST_TEMPLATE.md","CODE_OF_CONDUCT.md",".github",".travis.yml","appveyor.yml","**/.git","**/.git/**","**/*.vsix","**/.DS_Store","**/*.vsixmanifest","**/.vscode-test/**","**/.vscode-test-web/**"];No.push("**/.studio/**","**/node_modules/**",qo,"dist/defines.app.ts");var $o={dot:!0},Oe;(r=>{async function x(t,s){let n=new Po.TarWriter;(await A(t,s)).forEach(E=>{n.addFile(E.name,E.data)});let f=await n.write();return vE.gzip(await f.arrayBuffer())}r.createArchive=x;async function A(t,s){let n=[],{ignore:F,negate:f}=await fE(t,s),u=(await s.findFiles(t,"**/*")).filter(({path:D})=>{let m=D.slice(t.path.length+1);return!F.some(_=>(0,ps.minimatch)(m,_,$o))||f.some(_=>(0,ps.minimatch)(m,_.slice(1),$o))});for(let D of u){let m=D.path.slice(t.path.length+1),[_,h]=await Promise.all([s.stat(D),s.readFile(D)]);_&&n.push({name:m,data:h,modifyTime:new Date(_.mtime)})}return n}r.getFilesForArchive=A;async function e(t,s,n,F=ux.ENV.production){let{publisher:f,name:E,version:u}=s,D=await gx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),m={"CHANGELOG.md":await Ds(D["CHANGELOG.md"]),"README.md":await Ds(D["README.md"]),"studio.json":await Ds(D["studio.json"]),"library.tar.gz":n};return await tx.publishLibraryVersion(t,f,E,u,m,F)}r.publishPackage=e})(Oe||={});async function fE(x,A){let e=["!studio.json","!README.md"],t=(await lE(x,A)).split(/[\n\r]/).map(E=>E.trim()).filter(E=>!!E).filter(E=>!/^\s*#/.test(E)),s=[...t,...t.filter(E=>!/(^|\/)[^/]*\*[^/]*$/.test(E)).map(E=>/\/$/.test(E)?`${E}**`:`${E}/**`)],n=[...No,...s,...e],[F,f]=n.reduce((E,u)=>/^\s*!/.test(u)?[E[0],[...E[1],u]]:[[...E[0],u],E[1]],[[],[]]);return{ignore:F,negate:f}}async function lE(x,A){let e=To.Utils.joinPath(x,qo);if(await A.stat(e)){let t=await A.readFile(e);return FE(t)}else return""}async function Ds(x){return new Uint8Array(await x.arrayBuffer())}var GA=require("vscode-uri");var me=require("yaml");var cE=b0.convertBlobToString,rn=b0.yamlRangeToLineInformation,Ct;(n=>{let x;(u=>(u.static="static",u.dynamic="dynamic",u.appDynamic="app-dynamic"))(x=n.Type||={});let A;(D=>(D.crcStamp="crc_stamp",D.stampOnly="stamp_only",D.onlyDown="only_down",D.onlyUp="only_up"))(A=n.SyncLogic||={});let e;(u=>(u.down="down",u.up="up",u.off="off"))(e=n.Force||={});async function r(F,f,E){let{properties:u,diagnostics:D,libraryFiles:m}=await t(F,f),_=GA.Utils.joinPath(F,r0.filePaths.dist.dfilesPath);await f.stat(_)&&await f.rm(_);for(let[h,S]of Object.entries(u))await BE(F,f,h,S,m);return Object.keys(u).length&&(E.done(`${Object.keys(u).length} dfiles processed.`),await f.writeFile(GA.Utils.joinPath(F,r0.filePaths.dist.dfilesProperties),JSON.stringify(u,null," "))),D}n.process=r;async function t(F,f){let E=[],u={},D=await Z0.getApmPartDependencies(F,f,p0.Part.dfiles);for(let h of D){let{properties:S,diagnostics:P}=await s(f,h.path,h.name);Object.assign(u,S),E.push(...P)}let{properties:m,diagnostics:_}=await s(f,GA.Utils.joinPath(F,r0.filePaths.dfiles.mainDFILES),null);return Object.assign(u,m),E.push(..._),{properties:u,diagnostics:E,libraryFiles:D}}n.parseDfile=t;async function s(F,f,E){let u=[],D={};if(!await F.stat(f))return{properties:D,diagnostics:u};let m=await F.readFile(f),_=cE(m),h=new me.LineCounter,P=(0,me.parseDocument)(_,{lineCounter:h}).contents||new me.YAMLMap;for(let N of P.items){let R=N.key.value,O=(0,me.isMap)(N.value)?N.value:null,n0=rn(h,N.key.range),L=O?O.has("syncMode"):!1,k=L?O.get("syncMode"):"crc_stamp";if(L){let J=Object.values(n.SyncLogic);if(!J.includes(k)){let a0=O.items.find(x0=>x0.key.value==="syncMode"),t0=rn(h,a0.key.range);u.push({file:f,code:"",message:`Property syncMode does not match any of "${J.join(", ")}"`,line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"})}}else u.push({file:f,code:"",message:'Property "syncMode" missing',line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.endCharacter,level:"error"});let I=O?O.has("type"):!1,X=I?O.get("type"):"static";if(I){let J=Object.values(n.Type);if(!J.includes(X)){let a0=O.items.find(x0=>x0.key.value==="type"),t0=rn(h,a0.key.range);u.push({file:f,code:"",message:`Property type does not match any of "${J.join(", ")}"`,line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"})}}R.match(/^[a-z0-9._-]*$/)||u.push({file:f,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.endCharacter,level:"error"});let W=GA.Utils.joinPath(GA.Utils.dirname(f),R),H=await EE(F,W);if(H)D[R]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:k,type:X,library:E};else{let J=rn(h,N.key.range);u.push({file:f,code:"",message:`Could not find file "${R}"`,line:J.line,startCharacter:J.startCharacter,endCharacter:J.endCharacter,level:"error"})}}return{properties:D,diagnostics:u}}n.parseYamlFile=s})(Ct||={});async function EE(x,A){let e=await x.stat(A);if(!e)return null;let r=await x.readFile(A);return{size:e.size,stamp:Math.trunc(e.ctime),crc:b0.generateCRC32ForFileContent(r)}}async function BE(x,A,e,r,t){let n=r.library!==null?GA.Utils.dirname(t.find(E=>E.name===r.library).path):GA.Utils.joinPath(x,r0.filePaths.dfiles.path),F=GA.Utils.joinPath(x,r0.filePaths.dist.dfilesPath,e),f=GA.Utils.joinPath(n,e);await A.copy(f,F)}var bs=require("vscode-uri");var Mo=W0(require("semver")),CE="package.json",dE=["peerDependencies","dependencies","optionalDependencies"],uE=" ",yr;(r=>{r.PART_DIST_PATHS=[r0.filePaths.dist.bloPath,r0.filePaths.dist.povDetailsPath,r0.filePaths.dist.dloPath.replace(/\/$/,"")];async function A(t,s,n,F){let f=bs.Utils.joinPath(t,CE),E=`${n.name}/${hE(t)}`;if(!await s.stat(f))return!1;let D=await DE(s,f,E,F);if(!D)return!1;let m=D.pkg;if(typeof m!="object"||m===null||Array.isArray(m))return F.warn(`"${E}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!Mo.valid(n.version))return F.warn(`Library manifest version "${n.version}" is not a valid semantic version - skipped normalizing "${E}/package.json".`),!1;pE(m,n,E,F);let _=bE(m,n.version);m=_.pkg;let h=_.changed;h&&F.warn(`Patched version "${_.oldVersion??"<none>"}" -> "${n.version}" in "${E}/package.json" (studio.json is the source of truth).`);let S=jE(n);if(mE(m,S,E,F)&&(h=!0),!h)return!1;let P=gE(D.raw),N=D.raw.endsWith(`
2330
+ public ___${t0}( ${M})${k}`}else if(N=io.exec(P)){let[,U,t0]=N;S=`${U}${t0}{_log_string="";_assert(__refid,__line);}`}else if(N=no.exec(P)){let[,U,t0,M,k]=N;S=`${U}${t0}{ if (!(${M})) { sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(N=so.exec(P)){let[,U,t0,M]=N;S=`${U}${t0}{ if (!(${M})) { _log_string="";_assert(__refid,__line); }}`}else if(N=ao.exec(P)){let[,U,t0,M]=N;S=`${U}${t0}_catch(__refid,__line,${M});`}else if(N=oo.exec(P)){let[,U,t0,M,k,L]=N,{priority:W,code:Q}=Ao(k,M.substring(1));W!==null&&(S=`${U}${t0}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${L});DDE_applog_write(${W}, ${Q}, params_str, __applog_src_id);}`)}else if(N=Fo.exec(P)){let[,U,t0,M,k]=N,{priority:L,code:W}=Ao(k,M.substring(1));L!==null&&(S=`${U}${t0}DDE_applog_write(${L}, ${W}, "", __applog_src_id);`)}else if(N=vo.exec(P)){let[,U,t0,M,k]=N,L=M.substring(1),W=lo[L];S=`${U}${t0}{ if(_log_level <= ${W}){ sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")}); _log${M}(__refid,__line); }}`}else(N=qc.exec(P))&&!F.includes(r0.filePaths.studio.auto.path)&&!ft(F,r)?(F.includes(r0.filePaths.studio.libdeps)||n.push({file:t,level:"warning",line:h,message:"Libraries are included automatically - remove this #include line"}),S="// Libraries are included automatically! - "+P):(N=Nc.exec(P))&&(n.push({file:t,level:"error",line:h,message:"#endinput is not supported - use #if/#endif instead"}),S=P);v&&!r.legacyProject&&(Mc.exec(P)&&(S=S.replaceAll("DDE_",`_${v}`)),Lc.exec(P)&&(S=S.replace("onUplink",`_${v}`)),Rc.exec(P)&&(S=S.replace("onUplink",`_${v}Uplink`))),u.push(S),_++;for(let U=0;U<R;U++)u.push(""),_++,h++}if(!ft(F,r)){let h=E.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),S=`_inc_${h}`.substring(0,31),P=`_inc_${h}_inc`.substring(0,31);u.push(`#if defined ${S}`),u.push(`#undef ${S}`),u.push("#endif"),u.push(`#if defined ${P}`),u.push(`#undef ${P}`),u.push("#endif")}return{data:u.join(`
2331
+ `),diagnostics:n}}};var GA=require("vscode-uri");var P0=W0(require("fs")),nx=require("vscode-uri");var Co=W0(require("iconv-lite")),Hc=b0.convertBlobToStringArray,uo=16384,Do=511,ds=uo|Do,Jc=32768,Kc=438,co=Jc|Kc,zc=new jr,hr={};function en(){let x=[];for(let A of Object.keys(hr))x.push(...hr[A].diagnostics);return x}var An=!!process.env.DLO_PROFILE,se={precompileCount:0,cacheHits:0,precompileMs:0};function po(x){An&&(x.log(`[DLO_PROFILE] precompile: ${se.precompileCount} runs, ${se.cacheHits} cache hits, ${se.precompileMs.toFixed(1)}ms`),se.precompileCount=0,se.cacheHits=0,se.precompileMs=0)}var us=(x,A,e,r)=>{let t={getattr(n){let F=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)),v=F.fsPath;if(!P0.existsSync(v))throw new x.ErrnoError(44);let E=Bo(A,r,e,F),u=P0.statSync(v),D=E?.length||u.size;return{mode:u.isDirectory()?ds:co,size:D,atime:u.atime,mtime:u.mtime,ctime:u.ctime}},setattr(n,F){let v=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;if(!P0.existsSync(v))throw new x.ErrnoError(44);if(typeof F.size=="number"&&P0.truncateSync(v,F.size),typeof F.mode=="number"&&P0.chmodSync(v,F.mode),F.atime||F.mtime){let E=P0.statSync(v);P0.utimesSync(v,F.atime??E.atime,F.mtime??E.mtime)}},lookup(n,F){let E=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;if(!P0.existsSync(E))throw new x.ErrnoError(44);let u=P0.statSync(E),D=x.createNode(n,F,u.isDirectory()?ds:co,0);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},readdir(n){let F=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;return[".","..",...P0.readdirSync(F)]},mknod(n,F,v,E){let u=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.writeFileSync(u,"");let D=x.createNode(n,F,v,E);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},unlink(n,F){let v=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.unlinkSync(v)},mkdir(n,F,v){let E=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.mkdirSync(E,{mode:v});let u=x.createNode(n,F,v|ds,0);return u.node_ops=n.node_ops,u.stream_ops=n.stream_ops,u},rmdir(n,F){let v=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.rmdirSync(v)},rename(n,F,v){let E=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath,u=nx.Utils.joinPath(nx.URI.parse(F.mount.opts.root),x.getPath(F),v).fsPath;P0.renameSync(E,u)}},s={open(n){let F=nx.Utils.joinPath(nx.URI.parse(n.node.mount.opts.root),x.getPath(n.node));n.modifiedContent=Bo(A,r,e,F),n.modifiedContent||(n.nfd=P0.openSync(F.fsPath,Eo(n.flags)))},close(n){n.nfd&&P0.closeSync(n.nfd)},read(n,F,v,E,u){if(!n.modifiedContent)return P0.readSync(n.nfd,F,v,E,u);let D=n.modifiedContent;if(u>=D.length)return 0;let m=D.length-u,_=Math.min(E,m);return Vc(D,F,v,u,u+_),_},write(n,F,v,E,u){return P0.writeSync(n.nfd,F,v,E,u)},flagsToMode:Eo,llseek(n,F,v){let E=F;if(v===1)E+=n.position;else if(v===2){let u=P0.fstatSync(n.nfd);E+=u.size}if(E<0)throw new x.ErrnoError(28);return n.position=E,E}};return{mount(){let n=ie(A),F=x.createNode(null,n,uo|Do,0);return F.node_ops=t,F.stream_ops=s,F},node_ops:t,stream_ops:s}};function Eo(x){let A=x&2097155;if(A===0)return"r";if(A===1)return"r+";if(A===65)return"w";if(A===577)return"w+";if(A===1089)return"a";if(A===1217)return"a+";throw new Error(`Unknown file open flags: ${x}`)}function Vc(x,A,e,r,t){if(Buffer.isBuffer(x)&&Buffer.isBuffer(A))x.copy(A,e,r,t);else{let s=x.subarray(r,t);Buffer.isBuffer(A)?Uint8Array.prototype.set.call(A,s,e):A.set(s,e)}}function Bo(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let s=Wc(t);if(!s){delete hr[t];return}let n=hr[t];if(n&&n.mtimeMs===s.mtimeMs&&n.size===s.size)return An&&se.cacheHits++,n.buffer;let F=An?performance.now():0,v=Xc(x,A,e,r);return An&&(se.precompileCount++,se.precompileMs+=performance.now()-F),hr[t]={buffer:v.buffer,mtimeMs:s.mtimeMs,size:s.size,diagnostics:v.diagnostics},hr[t].buffer}function Wc(x){try{return P0.statSync(x)}catch{return null}}function Xc(x,A,e,r){let t=P0.readFileSync(r.fsPath),s=Hc(t),n=zc.preCompileDloFile(x,A,e,r,s);return{buffer:Co.encode(n.data,"cp1252"),diagnostics:n.diagnostics}}function ie(x){return x.fsPath.replace(/\\/g,"/")}function ct(x,A){let e=ie(x);return ie(A).replace(e,"")}var _o=ko(),Bt=_o.createPawnCC,wo=_o.createPawnDbg;var gr=class{constructor(A,e,r){this.cwd=A;this.fs=e;this.logger=r;this.dloCC=null}cwd;fs;logger;dloCC;stdout=[];stderr=[];async initDloCC(A=!1){this.stdout.length=0,this.stderr.length=0,this.dloCC=await Bt({noExitRuntime:A,print:n=>{let F=Ds(this.cwd,n);this.logger.log(F?F.message:n),this.stdout.push(n)},printErr:n=>{let F=Ds(this.cwd,n);n.includes(": warning")?this.logger.warn(F?F.message:n):this.logger.error(F?F.message:n),this.stderr.push(n),this.stdout.push(n)}});let e=ie(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,s=await z.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=us(t,this.cwd,s,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(ie(this.cwd))}async compile(A,e){let r=await z.read(A,e);if(!await z.isApmPartEnabled(A,e,p0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(GA.Utils.joinPath(A,"dist/dlo"));let t=GA.Utils.joinPath(A,r.dlo?.mainFile||r0.filePaths.dlo.mainDLO),s=[],n=GA.Utils.joinPath(A,r0.filePaths.studio.auto.dlo.cfg),F=ct(A,n);if(s.push(`-T.${F}`),mr(t.path)){let E="";try{E=b0.convertBlobToString(await e.readFile(t))}catch(u){this.logger.error(u)}s.push(...xn(t.path,E))}let v=0;try{let E=`.${ct(A,t)}`;v=await this.dloCC.callMain([E,...s])}catch(E){this.logger.error(E)}return{code:v,stdout:this.stdout,stderr:this.stderr,diagnostics:[...en(),...ps(A,this.stderr,t)]}}async getDloSymbols(A,e){let r=e.map(D=>{let m=D.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(m)?`${m}.${D.substring(2)}`:D}),t=!!process.env.DLO_PROFILE,s=t?performance.now():0,{compiler:n,print:F}=await this.getSymbolCompiler(),v=t?performance.now()-s:0,E=t?performance.now():0,u=0;try{u=await n.callMain(["."+A,...r,"-R"])||0}catch(D){if(D.stack?.startsWith("RuntimeError"))return null;throw D}finally{if(t){let D=performance.now()-E;this.logger.log(`[DLO_PROFILE] instantiate: ${v.toFixed(1)}ms, callMain: ${D.toFixed(1)}ms`),po(this.logger)}}return{exitCode:u,lines:[...F.stdout,...F.stderr]}}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await Bt({noExitRuntime:!1,print:F=>{A.stdout.push(F)},printErr:F=>{A.stderr.push(F)}}),r=ie(this.cwd),[t]=r.split("/"),s=e.FS,n=await z.read(this.cwd,this.fs);return s.filesystems.NODEFS_TS=us(s,this.cwd,n,this.logger),s.mkdir(t),s.mount(s.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function ps(x,A,e){let r=[],t=A.filter(s=>!!s.trim());for(let s of t){if((s.includes("Assertion failed:")||s.includes("Compilation aborted."))&&e){r.push({file:e,level:"error",line:0,message:s});continue}let n=Ds(x,s);n&&r.push({file:GA.URI.parse(`file:///${n?.posixPath}`),level:n.level,line:Number(n.lineNumber)-1,message:n.msg})}return r}function Ds(x,A){let e=A.indexOf(" : "),r=A.indexOf(": ",e+3),t=A.substring(0,e).trim(),s=A.substring(e+3,r).trim(),n=A.substring(r+2).trim();if(!t||!s||!n)return null;let[F,v]=t.split(/[()(-)]/),E=s.split(" "),u=E[E.length-2],m=GA.Utils.joinPath(x,F).fsPath.replace(/\\/g,"/");m.startsWith("/")&&(m=m.substring(1));let _=A.replace(F,m);return{level:u,msg:n,posixPath:m,lineNumber:v,message:_}}async function So(x,A,e){let r=["-M","-v2"],t=GA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${ct(x,t)}`);let s=await Z0.getApmPartDependencies(x,A,p0.Part.dlo);for(let F of s){let v=GA.Utils.dirname(F.path);r.push(`-i.${ct(x,v)}`)}let n=e.dlo;return n&&r.push(...n.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:GA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.cfg),data:r.join(`
2332
+ `)}}var Ct;(m=>{m.createPawnCC=Bt,m.createPawnDbg=wo,m.FileSequencer=br,m.PreCompiler=jr;function t(_,h){return ft(_,h)}m.isDloRootFile=t;function s(_){return mr(_)}m.isDloSpecFile=s;function n(_,h){return xn(_,h)}m.getSpecCompileDefines=n,m.Compiler=gr,m.uriToMemFs=ie,m.getPrecompilerDiagnostics=en,m.parseCompilerWarningsAndErrors=ps;async function D(_,h,S){let P=await z.read(_,h),N=await So(_,h,P);await h.writeFile(N.path,N.data),S.log("Generated",r0.filePaths.studio.auto.dlo.cfg)}m.exportDloConfig=D})(Ct||={});var bs=require("vscode-uri");var To=W0(require("node:child_process"));var rn;(e=>{async function x(r,t,s){let n=await z.read(r,t);if(await z.isApmPartEnabled(r,t,p0.Part.pov)){s.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:v}=n.pov.details,E=bs.Utils.joinPath(r,v);try{await $o(E,F,s)}catch(u){throw u.code?new Error(`APM part '${p0.Part.pov}' has errors. Aborted.`):u}}}e.tryBuildPov=x;async function A(r,t,s){let n=await z.read(r,t);if(await z.isApmPartEnabled(r,t,p0.Part.blo,n)){s.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:v}=n.blo,E=bs.Utils.joinPath(r,v);try{await $o(E,F,s)}catch(u){throw u.code?new Error(`APM part '${p0.Part.blo}' has errors. Aborted.`):u}}}e.tryBuildBlo=A})(rn||={});async function $o(x,A,e){return new Promise((r,t)=>{To.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{e.log(n),F&&e.error(F),s&&t(s),r(null)})})}var qo=require("vscode-uri");var js=require("minimatch");var No=require("@gera2ld/tarjs"),vE=b0.convertBlobToString,lE=require("pako"),Io=".studioignore",Mo=[".vscodeignore","package-lock.json","npm-debug.log","yarn.lock","yarn-error.log","npm-shrinkwrap.json",".editorconfig",".npmrc",".yarnrc",".gitattributes","*.todo","tslint.yaml",".eslintrc*",".babelrc*",".prettierrc*",".cz-config.js",".commitlintrc*","webpack.config.js","ISSUE_TEMPLATE.md","CONTRIBUTING.md","PULL_REQUEST_TEMPLATE.md","CODE_OF_CONDUCT.md",".github",".travis.yml","appveyor.yml","**/.git","**/.git/**","**/*.vsix","**/.DS_Store","**/*.vsixmanifest","**/.vscode-test/**","**/.vscode-test-web/**"];Mo.push("**/.studio/**","**/node_modules/**",Io,"dist/defines.app.ts");var Po={dot:!0},Ge;(r=>{async function x(t,s){let n=new No.TarWriter;(await A(t,s)).forEach(E=>{n.addFile(E.name,E.data)});let v=await n.write();return lE.gzip(await v.arrayBuffer())}r.createArchive=x;async function A(t,s){let n=[],{ignore:F,negate:v}=await fE(t,s),u=(await s.findFiles(t,"**/*")).filter(({path:D})=>{let m=D.slice(t.path.length+1);return!F.some(_=>(0,js.minimatch)(m,_,Po))||v.some(_=>(0,js.minimatch)(m,_.slice(1),Po))});for(let D of u){let m=D.path.slice(t.path.length+1),[_,h]=await Promise.all([s.stat(D),s.readFile(D)]);_&&n.push({name:m,data:h,modifyTime:new Date(_.mtime)})}return n}r.getFilesForArchive=A;async function e(t,s,n,F=ux.ENV.production){let{publisher:v,name:E,version:u}=s,D=await gx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),m={"CHANGELOG.md":await ms(D["CHANGELOG.md"]),"README.md":await ms(D["README.md"]),"studio.json":await ms(D["studio.json"]),"library.tar.gz":n};return await tx.publishLibraryVersion(t,v,E,u,m,F)}r.publishPackage=e})(Ge||={});async function fE(x,A){let e=["!studio.json","!README.md"],t=(await cE(x,A)).split(/[\n\r]/).map(E=>E.trim()).filter(E=>!!E).filter(E=>!/^\s*#/.test(E)),s=[...t,...t.filter(E=>!/(^|\/)[^/]*\*[^/]*$/.test(E)).map(E=>/\/$/.test(E)?`${E}**`:`${E}/**`)],n=[...Mo,...s,...e],[F,v]=n.reduce((E,u)=>/^\s*!/.test(u)?[E[0],[...E[1],u]]:[[...E[0],u],E[1]],[[],[]]);return{ignore:F,negate:v}}async function cE(x,A){let e=qo.Utils.joinPath(x,Io);if(await A.stat(e)){let t=await A.readFile(e);return vE(t)}else return""}async function ms(x){return new Uint8Array(await x.arrayBuffer())}var UA=require("vscode-uri");var je=require("yaml");var EE=b0.convertBlobToString,tn=b0.yamlRangeToLineInformation,dt;(n=>{let x;(u=>(u.static="static",u.dynamic="dynamic",u.appDynamic="app-dynamic"))(x=n.Type||={});let A;(D=>(D.crcStamp="crc_stamp",D.stampOnly="stamp_only",D.onlyDown="only_down",D.onlyUp="only_up"))(A=n.SyncLogic||={});let e;(u=>(u.down="down",u.up="up",u.off="off"))(e=n.Force||={});async function r(F,v,E){let{properties:u,diagnostics:D,libraryFiles:m}=await t(F,v),_=UA.Utils.joinPath(F,r0.filePaths.dist.dfilesPath);await v.stat(_)&&await v.rm(_);for(let[h,S]of Object.entries(u))await CE(F,v,h,S,m);return Object.keys(u).length&&(E.done(`${Object.keys(u).length} dfiles processed.`),await v.writeFile(UA.Utils.joinPath(F,r0.filePaths.dist.dfilesProperties),JSON.stringify(u,null," "))),D}n.process=r;async function t(F,v){let E=[],u={},D=await Z0.getApmPartDependencies(F,v,p0.Part.dfiles);for(let h of D){let{properties:S,diagnostics:P}=await s(v,h.path,h.name);Object.assign(u,S),E.push(...P)}let{properties:m,diagnostics:_}=await s(v,UA.Utils.joinPath(F,r0.filePaths.dfiles.mainDFILES),null);return Object.assign(u,m),E.push(..._),{properties:u,diagnostics:E,libraryFiles:D}}n.parseDfile=t;async function s(F,v,E){let u=[],D={};if(!await F.stat(v))return{properties:D,diagnostics:u};let m=await F.readFile(v),_=EE(m),h=new je.LineCounter,P=(0,je.parseDocument)(_,{lineCounter:h}).contents||new je.YAMLMap;for(let N of P.items){let R=N.key.value,U=(0,je.isMap)(N.value)?N.value:null,t0=tn(h,N.key.range),M=U?U.has("syncMode"):!1,k=M?U.get("syncMode"):"crc_stamp";if(M){let J=Object.values(n.SyncLogic);if(!J.includes(k)){let a0=U.items.find(Z=>Z.key.value==="syncMode"),n0=tn(h,a0.key.range);u.push({file:v,code:"",message:`Property syncMode does not match any of "${J.join(", ")}"`,line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.endCharacter,level:"error"})}}else u.push({file:v,code:"",message:'Property "syncMode" missing',line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"});let L=U?U.has("type"):!1,W=L?U.get("type"):"static";if(L){let J=Object.values(n.Type);if(!J.includes(W)){let a0=U.items.find(Z=>Z.key.value==="type"),n0=tn(h,a0.key.range);u.push({file:v,code:"",message:`Property type does not match any of "${J.join(", ")}"`,line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.endCharacter,level:"error"})}}R.match(/^[a-z0-9._-]*$/)||u.push({file:v,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"});let Q=UA.Utils.joinPath(UA.Utils.dirname(v),R),H=await BE(F,Q);if(H)D[R]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:k,type:W,library:E};else{let J=tn(h,N.key.range);u.push({file:v,code:"",message:`Could not find file "${R}"`,line:J.line,startCharacter:J.startCharacter,endCharacter:J.endCharacter,level:"error"})}}return{properties:D,diagnostics:u}}n.parseYamlFile=s})(dt||={});async function BE(x,A){let e=await x.stat(A);if(!e)return null;let r=await x.readFile(A);return{size:e.size,stamp:Math.trunc(e.ctime),crc:b0.generateCRC32ForFileContent(r)}}async function CE(x,A,e,r,t){let n=r.library!==null?UA.Utils.dirname(t.find(E=>E.name===r.library).path):UA.Utils.joinPath(x,r0.filePaths.dfiles.path),F=UA.Utils.joinPath(x,r0.filePaths.dist.dfilesPath,e),v=UA.Utils.joinPath(n,e);await A.copy(v,F)}var hs=require("vscode-uri");var Lo=W0(require("semver")),dE="package.json",uE=["peerDependencies","dependencies","optionalDependencies"],DE=" ",yr;(r=>{r.PART_DIST_PATHS=[r0.filePaths.dist.bloPath,r0.filePaths.dist.povDetailsPath,r0.filePaths.dist.dloPath.replace(/\/$/,"")];async function A(t,s,n,F){let v=hs.Utils.joinPath(t,dE),E=`${n.name}/${gE(t)}`;if(!await s.stat(v))return!1;let D=await pE(s,v,E,F);if(!D)return!1;let m=D.pkg;if(typeof m!="object"||m===null||Array.isArray(m))return F.warn(`"${E}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!Lo.valid(n.version))return F.warn(`Library manifest version "${n.version}" is not a valid semantic version - skipped normalizing "${E}/package.json".`),!1;bE(m,n,E,F);let _=mE(m,n.version);m=_.pkg;let h=_.changed;h&&F.warn(`Patched version "${_.oldVersion??"<none>"}" -> "${n.version}" in "${E}/package.json" (studio.json is the source of truth).`);let S=hE(n);if(jE(m,S,E,F)&&(h=!0),!h)return!1;let P=yE(D.raw),N=D.raw.endsWith(`
2333
2333
  `),R=JSON.stringify(m,null,P)+(N?`
2334
- `:"");try{await s.writeFile(f,R)}catch(O){return F.warn(`Could not write "${E}/package.json": ${O}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,s,n,F){for(let f of r.PART_DIST_PATHS){let E=bs.Utils.joinPath(t,f);await A(E,s,n,F)}}r.normalizeLibraryParts=e})(yr||={});async function DE(x,A,e,r){try{let t=await x.readFile(A),s=b0.convertBlobToString(t),n=JSON.parse(s);return{raw:s,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function pE(x,A,e,r){x.name!==void 0&&x.name!==A.name&&r.warn(`"${e}/package.json" name "${x.name}" does not match library name "${A.name}".`)}function bE(x,A){if(x.version===A)return{pkg:x,changed:!1,oldVersion:x.version};let e=x.version;if(x.version===void 0&&Object.hasOwn(x,"name")){let{name:r,...t}=x;x={name:r,version:A,...t}}else x.version=A;return{pkg:x,changed:!0,oldVersion:e}}function mE(x,A,e,r){let t=!1;for(let s of dE){let n=x[s];if(!n)continue;let F=!1;for(let f of Object.keys(n)){if(!A.has(f))continue;let E=n[f];if(typeof E!="string"||E.startsWith("npm:")||E.includes("://")){r.warn(`Left "${f}" in ${s} of ${e}/package.json untouched - its value "${E}" does not look like a Studio library reference.`);continue}delete n[f],F=!0,t=!0,r.warn(`Removed "${f}" from ${s} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete x[s]}return t}function jE(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function hE(x){let A=x.path.replace(/\\/g,"/");for(let e of yr.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function gE(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:uE}var dt=require("@gera2ld/tarjs"),Io=b0.convertBlobToString,ms=require("pako"),gx;(D=>{class x extends Error{_mergedDiagnostics;constructor(_,h){super(_),this.name="BuildError",this._mergedDiagnostics=h}get mergedDiagnostics(){return this._mergedDiagnostics}}D.BuildError=x;async function A(m,_,h,S,P,N=!0,R){N=yE(h,N),await kE(m,_,h,S,P,N);try{let L=await ux.read(m,_,h);await _E(m,_,h,L)}catch(L){h.warn("Could not generate defines.ts:",L)}let O={[p0.Part.dde]:[],[p0.Part.dlo]:[],[p0.Part.dfiles]:[]},n0={[p0.Part.dde]:wE,[p0.Part.dlo]:SE,[p0.Part.dfiles]:$E};try{for(let L of[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles])if(N.includes(L)&&(h.info(`Building ${L.toUpperCase()}...`),await NE(h,L,n0[L],O[L],m,_)))return O}catch(L){throw R?new x(L?.message,O):L}return N.includes(p0.Part.pov)?await en.tryBuildPov(m,_,h):h.info("Skipping pov build"),N.includes(p0.Part.blo)?await en.tryBuildBlo(m,_,h):h.info("Skipping blo build"),await TE(m,_,h),await PE(m,_,h),h.done("Project build completed."),O}D.buildAll=A;async function e(m,_,h,S,P,N,R){let O=await z.read(m,_);return z.isLibrary(O)?(h.info("Library project detected. Publishing library..."),s(m,_,h,P,S)):(h.info("App project detected. Publishing app..."),t(m,_,h,P,N,R,S))}D.release=e;async function r(m,_,h,S,P,N){let R=await z.read(m,_),O=`${R.name}-${R.version}.tar.gz`,n0=null;if(z.isLibrary(R))h.info("Library project detected. Packing library..."),n0=await Lo(m,_,h,P,S);else{h.info("App project detected. Packing app...");let k=await Ro(m,_,h,P,N,S);n0=await IE(k)}let L=Ge.Utils.joinPath(m,O);n0!==null?(await _.writeFile(L,n0),h.done(`Packaged: ${L.fsPath}`)):h.error(`Could not create archive: ${L.fsPath}`)}D.pack=r;async function t(m,_,h,S,P,N=null,R){if(!await p0.validateAccess(m,_,S,!1,R))throw new Error("Could not validate access to application");let n0=await Ro(m,_,h,S,P,R);await p0.updateProfile(m,_,S,R);let L=await p0.publishTag(m,_,S,n0,R);if(N!==null){let k=await z.read(m,_);await tx.updateExistingApplicationVersion(S,k.publisher,k.registry?.id,k.version,{allowedBackends:N},R),h.info(`Tag "${L.version}" with phase "${L.phase}" shared with ${[...N].join(";")}!`)}h.done(`Tag "${L.version}" with phase "${L.phase}" published!`)}D.releaseAPM=t;async function s(m,_,h,S,P){let N=await z.read(m,_),R=await Lo(m,_,h,S,P);await Oe.publishPackage(S,N,R,P),h.done(`Library "${N.publisher}/${N.name}" with version "${N.version}" published!`)}D.releaseLibrary=s;async function n(m,_,h,S,P,N,R,O=null){if(N==="*"){let H=await z.read(m,_);N=`${H.name}-${H.version}.tar.gz`,h.info(`Publishing detected archive package "${N}"...`)}let n0=Ge.Utils.joinPath(m,N);if(!await _.stat(n0))throw new Error(`Archive package not found: ${n0.fsPath}`);let L=await _.readFile(n0),k=await LE(L),{publisher:I,registry:X,version:W}=k;z.isLibrary(k)?(await Oe.publishPackage(S,k,L,P),h.done(`Library "${I}/${k.name}" with version "${k.version}" published!`)):(await tx.updateApplicationFile(S,I,X.id,W,"app.tar.gz",L,P),await tx.updateExistingApplicationVersion(S,I,X?.id,W,{allowedBackends:O||void 0,phase:R||void 0},P),h.info(`Tag "${W}" with phase "${R}" shared with ${[...O||""].join(";")}!`),h.done(`Tag "${W}" with phase "${R}" published!`))}D.publishArchive=n;async function F(m,_,h){let S;try{S=await _.readFile(Ge.Utils.joinPath(m,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(Io(S)===r0.readme(h))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}D.getReadmeFile=F;async function f(m,_){let h;try{h=await _.readFile(Ge.Utils.joinPath(m,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(Io(h)===r0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return h}D.getChangelogFile=f;async function E(m,_,h,S){let P=await z.read(m,_),{name:N,publisher:R,description:O}=P,n0=z.validateProjectName(N,z.isLibrary(P));if(n0)throw new Error(`name: ${n0}`);let L=z.validateDescription(O);if(L)throw new Error(`description: ${L}`);let k=z.validatePublisherId(R)||await z.validatePublisherOnline(h,R,S);if(k)throw new Error(`publisher: ${k}`);if(!z.isLibrary(P)&&(await z.validateApplicationIcon(m,_,P),z.validateEngineSettings(P),z.isApp(P)&&await z.isApmPartEnabled(m,_,p0.Part.dlo,P)&&(!P.dpid||!Object.values(z.DeviceProfiles).includes(P.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}D.validatePublishSettings=E;async function u(m,_){let h=ms.ungzip(m),S=await dt.TarReader.load(h),P={};for(let N of S.fileInfos)_.includes(N.name)&&(P[N.name]=S.getFileBlob(N.name));return P}D.readFilesFromTarGz=u})(gx||={});function yE(x,A){let e=Object.values(p0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function kE(x,A,e,r,t,s){await Z0.validateMinimumBackendVersion(x,A,e),s.includes(p0.Part.dde)&&await vA.fetchPreviousHistoryJson(x,A,e,r,t)}async function _E(x,A,e,r){r.defaultsOnly?(await ux.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",r0.filePaths.dist.definesTs,"(defaults only)"),await ux.exportDefinesTs(x,A,r,r0.filePaths.dist.definesAppTs),e.log("Generated",r0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await ux.exportDefinesTs(x,A,r),e.log("Generated",r0.filePaths.dist.definesTs))}async function wE(x,A,e){let r=await vA.compileDDE(x,A,e);if(r.ddeJSON){await vA.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await z.read(x,A);z.isLibrary(t)||await vA.exportHistoryJson(x,A,e,r.ddeJSON),await vA.exportOpenApi(x,A,e,r.ddeJSON),await z.isApmPartEnabled(x,A,p0.Part.dlo,t)&&(await vA.exportAutoDloFiles(x,A,e,r.ddeJSON),await Bt.exportDloConfig(x,A,e))}return r.diagnostics}async function SE(x,A,e){let r=new gr(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function $E(x,A,e){return await Ct.process(x,A,e)}async function TE(x,A,e){let r=await z.read(x,A);z.isLibrary(r)&&await yr.normalizeLibraryParts(x,A,r,e)}async function PE(x,A,e){let r=Ge.Utils.joinPath(x,r0.fileNames.reportTemplate);if(await A.stat(r)){let t=Ge.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${r0.fileNames.reportTemplate}" to dist folder.`)}}function qE(x,A,e){A!==p0.Part.dlo&&ME(x,e);let r=e.some(t=>t.level==="error");if(r){let t=`APM part "${A}" has errors. Aborted.`;throw new Error(t)}return r}async function NE(x,A,e,r,t,s){let n=await e(t,s,x);return r.push(...n),qE(x,A,n)}function ME(x,A){A.forEach(e=>{let r=e.startCharacter?`:${e.startCharacter+1}`:"",t=`${e.file.path}:${e.line+1}${r} - ${e.message}`;e.level==="error"?x.error(t):e.level==="warning"?x.warn(t):x.log(t)})}async function Lo(x,A,e,r,t){let s=await z.read(x,A);return await z.validateBasicManifest(x,A,s),await gx.buildAll(x,A,e,t,r),await Oe.createArchive(x,A)}async function Ro(x,A,e,r,t,s){if(!Object.values(p0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await z.validateBasicManifest(x,A,null),await gx.buildAll(x,A,e,s,r),await p0.createTag(x,A,t)}async function IE(x){let A=new dt.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let s=t;A.addFile(r,s)}else{let s=t;A.addFile(r,await s.arrayBuffer())}let e=await A.write();return ms.gzip(await e.arrayBuffer())}async function LE(x){let A=await RE(x,["studio.json","src/studio.json"]);if(!A)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await A.text())}async function RE(x,A){let e=ms.ungzip(x),r=await dt.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var OE=b0.bufferToBase64;var p0;(u=>{let x;(R=>(R.alpha="alpha",R.beta="beta",R.rc="rc",R.release="release",R.stage="stage",R.passive="passive",R.withdrawn="withdrawn"))(x=u.TagPhase||={});let A;(P=>(P.dde="dde",P.dlo="dlo",P.pov="pov",P.blo="blo",P.dfiles="dfiles"))(A=u.Part||={});function e(D){let{description:m,name:_,pov:h,engines:S,blo:P,publisher:N,type:R}=D,O=R||z.ProjectTypes.app,n0={name:_,abstract:m,author:N||"",pov_location:z.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:P?.accessLevel||z.BloAccessLevel.restricted,pip_id:""};return h&&h.details&&(n0.pov_location=z.PovLocation.pure,n0.pov_details_lowlevel=!!h.details.lowLevel),O==="addon"&&(n0.required_hwfw=void 0,n0.required_productcode=void 0,n0.addon_max_sources=1,n0.addon_max_per_site=D.maxInstancesPerSite),n0}u.createBaseTagHeader=e;async function r(D,m,_){let h=await z.read(D,m),S=e(h),P={version:h.version,...S,phase:_};return await s(D,m,h,P)}u.createTag=r;async function t(D,m){let _=await z.read(D,m),S={...e(_),blo_autostart:!1};return s(D,m,_,S)}u.createDevTag=t;async function s(D,m,_,h){let S=new FormData;S.append("tag",JSON.stringify(h)),S.append(`src/${z.fileName}`,new Blob([await z.readAsBlob(D,m)]));let P=new Blob([await m.readFile(ie.Utils.joinPath(D,r0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",P),_.icon){let R=await m.readFile(ie.Utils.joinPath(D,_.icon)),O=OE(R);S.append("previews/00.png",new Blob([`data:image/png;base64,${O}`]))}if(Object.hasOwn(h,"phase")){let R=await gx.getReadmeFile(D,m,h.name),O=await gx.getChangelogFile(D,m);S.append("previews/README.md",new Blob([R])),S.append("previews/CHANGELOG.md",new Blob([O]))}if(await z.isApmPartEnabled(D,m,"dlo")){let R=new Blob([await m.readFile(ie.Utils.joinPath(D,r0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",R)}if(await z.isApmPartEnabled(D,m,"pov",_)){await Oo(D,m,S,r0.filePaths.dist.povDetailsPath,"bin/pov/details");let R=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');S.append("bin/pov/list/index.html",new Blob([R]))}let N=await m.findFiles(D,`${r0.filePaths.dist.dfilesPath}/*`);for(let R of N){let O=new Blob([await m.readFile(R)]);S.append(`bin/dfiles/${ie.Utils.basename(R)}`,O)}return await z.isApmPartEnabled(D,m,"blo",_)&&await Oo(D,m,S,r0.filePaths.dist.bloPath,"bin/blo"),await GE(D,m,S),S}u.createBuffer=s;async function n(D,m,_,h,S){let P=await z.read(D,m);h||await gx.validatePublishSettings(D,m,_,S);let{registry:N}=P,R=N?.id;if(!R&&!h&&(R=await F(D,m,_,P,S)),R){let{publisher:O}=P;if(!O)return null;try{return{id:R,...await tx.getExistingApplication(_,O,R,S)}}catch(n0){if(n0?.message==="Could not find given application")return R=await F(D,m,_,P,S),{id:R,...await tx.getExistingApplication(_,O,R,S)}}}return null}u.validateAccess=n;async function F(D,m,_,h,S){let P="myDatanet",{publisher:N,name:R,description:O,registry:n0}=h,L={id:n0?.id,type:h.type||z.ProjectTypes.app,name:R,targetSystem:P,description:O||"",allowedBackends:null};z.isAddon(h)&&(L.allowedApplications=null);let k=await tx.createNewApplication(_,N,L,S);if(!k)throw new Error("Failed to initialize application");return h.registry={id:k},await z.write(D,m,h),k}u.registerNew=F;async function f(D,m,_,h){let{name:S,publisher:P,description:N,registry:R}=await z.read(D,m),O=R?.id;await tx.updateExistingApplication(_,P,O,{description:N,name:S,targetSystem:"myDatanet"},h)}u.updateProfile=f;async function E(D,m,_,h,S){let{publisher:P,registry:N,version:R}=await z.read(D,m);return await tx.publishApplicationVersion(_,P,N?.id,R,h,S)}u.publishTag=E})(p0||={});async function Oo(x,A,e,r,t){let s=await A.findFiles(x,`${r}/**`);for(let n of s){let F=ie.Utils.joinPath(x,r),f=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(ie.Utils.joinPath(x,`${r}/${f}`))]);e.append(`${t}/${f}`,E)}}async function GE(x,A,e){let r=ie.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);if(await A.stat(r)){let s=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",s)}let t=ie.Utils.joinPath(x,r0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var zo=require("deepmerge-ts"),UE=b0.isNumeric,Go="52v007",Uo="53v001",HE="54v001",JE="56v001",fA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,zo.deepmerge)(structuredClone(this._manifest),fA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},z;(o0=>{let x=b0.convertBlobToString;o0.fileName="studio.json";let e;(N0=>(N0.m22x="m22x",N0.m23x="m23x",N0.nrf91="nrf91",N0.m2blegw="m2blegw",N0.m2easyv3="m2easyv3",N0.m2easyiot="m2easyiot"))(e=o0.DeviceProfiles||={});let r;(C0=>(C0.app="app",C0.library="library",C0.addon="addon",C0.analytics="analytics"))(r=o0.ProjectTypes||={});let t;(f0=>(f0.restricted="restricted",f0.global="global"))(t=o0.BloAccessLevel||={});let s;(f0=>(f0.embedded="$embedded",f0.pure="$pure"))(s=o0.PovLocation||={});function n(G){fA.overwrites=G}o0.setOverwrites=n;function F(){fA.overwrites=null}o0.clearOverwrites=F;async function f(G,i0){let f0=kr.Utils.joinPath(G,o0.fileName),B0=await i0.stat(f0);if(fA.manifest===null||f0?.fsPath!==fA.stat?.path.fsPath||B0?.ctime!==fA.stat?.ctime||B0?.mtime!==fA.stat?.mtime||B0?.size!==fA.stat?.size){let C0=await i0.readFile(f0),_0=x(C0);fA.manifest=JSON.parse(_0),fA.stat={...B0,path:f0}}return fA.manifest}o0.read=f;async function E(G,i0){return await i0.readFile(kr.Utils.joinPath(G,o0.fileName))}o0.readAsBlob=E;async function u(G,i0){let f0=kr.Utils.joinPath(G,o0.fileName),B0=await i0.readFile(f0),C0=x(B0);return JSON.parse(C0)}o0.readRaw=u;async function D(G,i0,f0){return fA.clear(),QE(f0),i0.writeFile(kr.Utils.joinPath(G,o0.fileName),JSON.stringify(f0,null," "))}o0.write=D;function m(G){return G.library!==void 0?G.library:G.type==="library"}o0.isLibrary=m;function _(G){return G.type==="addon"}o0.isAddon=_;function h(G){return G.type===void 0&&!m(G)?!0:G.type==="app"}o0.isApp=h;function S(G){return G.type===void 0?!0:G.type==="app"}o0.isIotApp=S;function P(G){return G.type==="analytics"}o0.isAnalytics=P;async function N(G,i0,f0){f0||(f0=await f(G,i0)),YE(f0),KE(f0),zE(f0),XE(f0)}o0.validateBasicManifest=N;function R(G){let i0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(G.match(/^[a-z0-9-_]+$/)){let B0=["-","_"];if(B0.includes(G[0])||B0.includes(G[G.length-1]))return i0}else return i0;return G.length<3||G.length>20?"The library name is beyond permissible length of 20 characters.":null}o0.validateLibraryName=R;function O(G,i0){if(i0)return R(G);{let f0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!G.match(/^([a-zA-Z0-9 _-]+)$/))return f0;if(G.length<3||G.length>40)return"The project name is beyond permissible length of 40 characters.";let C0=["-","_"," "];return C0.includes(G[0])||C0.includes(G[G.length-1])?f0:null}}o0.validateProjectName=O;function n0(G){return G.length<5?"The description must have at least 5 characters.":null}o0.validateDescription=n0;function L(G){if(!G)return"No publisher set yet";let i0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(G.match(/^[a-zA-Z0-9-]+$/)){let B0=["_"];if(B0.includes(G[0])||B0.includes(G[G.length-1]))return i0}else return i0;return null}o0.validatePublisherId=L;async function k(G,i0,f0){return await tx.getPublisher(G,i0,f0)?null:`Publisher '${i0}' does not exist.`}o0.validatePublisherOnline=k;let I=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function X(G){if(G===void 0)return"Allowed backends not specified yet";if(G===null)return null;if(Array.isArray(G)||G?.includes(";")){let i0=G?.includes(";")?G.split(";"):G;for(let f0 of i0)if(!f0.match(I))return`Domain "${f0}" is invalid`}else if(!G?.match(I)&&G!=="*")return'Invalid value for "allowedBackends"';return null}o0.validateRegistryAllowedBackends=X;let W=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function H(G){if(G===void 0)return"Allowed applications not specified yet";if(G===null)return null;if(Array.isArray(G)||G?.includes(";")){let i0=G?.includes(";")?G.split(";"):G;for(let f0 of i0)if(!f0.match(W))return`Application id "${f0}" is invalid`}else if(!G?.match(W)&&G!=="*")return'Invalid value for "allowedApplications"';return null}o0.validateRegistryAllowedApplications=H;async function J(G,i0,f0){let B0=f0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let C0=kr.Utils.joinPath(G,B0);if(!await i0.stat(C0))throw new Error(`Could not load icon "${B0}"`);let N0=await i0.readFile(C0),ix=(0,Ho.imageDimensionsFromData)(N0);if(!ix)throw new Error("App icon could not be validated!");if(ix?.width!==ix?.height)throw new Error("App icon has to be a square!");if(ix.width>512||ix.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,Jo.isPNG)(N0))throw new Error("App icon has to be of type PNG!")}o0.validateApplicationIcon=J;function a0(G){let{engines:i0}=G;if(i0?.backend&&!i0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');VE(G),WE(G)}o0.validateEngineSettings=a0;function t0(G,i0){let f0=_0=>{let N0=/^(\d+)v(\d+)$/.exec(_0);return N0?[Number(N0[1]),Number(N0[2])]:null},B0=f0(G),C0=f0(i0);return B0&&C0?B0[0]-C0[0]||B0[1]-C0[1]:G===i0?0:G<i0?-1:1}o0.compareBackendVersion=t0;async function x0(G,i0,f0,B0){B0||(B0=await o0.read(G,i0));let C0=o0.isAddon(B0),_0=o0.isAnalytics(B0);switch(f0){case p0.Part.dlo:return!!B0?.dlo?.mainFile&&!C0&&!_0;case p0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case p0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case p0.Part.dde:case p0.Part.dfiles:return!0;default:return!1}}o0.isApmPartEnabled=x0})(z||={});function KE(x){let{pov:A}=x;if(A&&A.details){if(!Object.hasOwn(A.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(A.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function zE(x){let{blo:A}=x;if(A){if(!Object.hasOwn(A,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(A,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(A.accessLevel&&!["restricted","global"].includes(A.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function VE(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(z.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=Go){if(r&&e)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(e)throw new Error(`"engines.productId" requires "engines.backend" to be "${Go}"`)}function WE(x){if(!z.isAddon(x)&&!z.isAnalytics(x))return;let{backend:A}=x.engines,e=z.isAddon(x)?HE:JE;if(!A||A<e)throw new Error(`Project type "${x.type}" requires "engines.backend" to be ">=${e}"`);if(x.dlo)throw new Error(`For project type "${x.type}", "dlo" is not supported!"`);if(x.dpid)throw new Error(`For project type "${x.type}", "dpid" is not supported!"`)}function XE(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function YE(x){if((x.engines?.backend||"00v000")>=Uo||z.isLibrary(x)){if(!Ko.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${Uo} onwards "version" has to be a semantic version string!"`)}else if(!UE(x.version))throw new Error('"version" has to be a number!')}function QE(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var UA=W0(require("semver"));var Qo=W0(require("node:child_process")),Zo=require("minimatch");var ZE=require("tinytar-fix"),xB=require("pako"),ae=".studio/libdeps",Ue="package.json",AB="package-lock.json";function js(x){let A=x.dlo?.mainFile,e=[{partName:"blo",partDistPath:"blo",workingPath:Vo(x.blo?.workingPath)},{partName:"pov",partDistPath:"pov/details",workingPath:Vo(x.pov?.details?.workingPath)},{partName:"dlo",partDistPath:"dlo",workingPath:A?eB(A):void 0}],r=[],t=[],s=new Set;for(let n of e){if(n.workingPath!==void 0){if(s.has(n.workingPath)){t.push(n);continue}s.add(n.workingPath)}r.push(n)}return{parts:r,duplicates:t}}function hs(x,A){for(let e of x)A.warn(`Skipping npm part "${e.partName}" - its working path (${e.workingPath}) is already used by another part in studio.json`)}function nn(x){let A=x.replace(/\\/g,"/").split("/").filter(e=>e!==""&&e!==".");if(!A.some(e=>e===".."))return A.join("/")}function Vo(x){if(x)return nn(x)||void 0}function eB(x){let A=nn(x);if(A===void 0)return;let e=A.lastIndexOf("/");return e===-1?void 0:A.slice(0,e)}function Wo(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(Z0.dependencyIdToName)}async function rB(x,A,e,r){let t=fx.Utils.joinPath(x,ae,r);try{return await A.stat(fx.Utils.joinPath(t,z.fileName))?await z.readRaw(t,A):null}catch(s){return e.warn(`Could not read manifest for library "${r}": ${s}`),null}}async function tB(x,A,e,r){let t=new Set,s=Wo(r),n=null;for(;s.length>0;){let F=s.shift();if(t.has(F))continue;t.add(F);let f=await rB(x,A,e,F);if(!f)continue;let E=f.engines?.backend;E&&(!n||z.compareBackendVersion(E,n.backend)>0)&&(n={backend:E,requiredBy:`${f.publisher}/${f.name}`}),s.push(...Wo(f))}return n}var Z0;(L=>{async function x(k,I=!1){let X={...k.libraryDependencies||{}};return I||Object.assign(X,k.libraryDevDependencies||{}),X}L.getAll=x;function A(k){return k.split("/")[1]}L.dependencyIdToName=A;function e(k,I){let X=A(I);return fx.Utils.joinPath(k,ae,X)}L.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}L.rangeToVersion=r;function t(k,I,X){if(!UA.satisfies(I,X,{includePrerelease:!0}))throw new Error(`${k}, version ${I} does not satisfy required constraint ${X}`)}L.satisfiesSemverRange=t;async function s(k,I,X={},W=!1){let H=await z.read(k,I),J=H.libraryDependencies||{};W&&Object.assign(J,H.libraryDevDependencies);let a0=Object.keys(X);for(let t0 of a0)if(Object.hasOwn(J,t0)){let x0=X[t0],o0=J[t0],G=r(x0),i0=r(o0),f0=UA.compare(G,i0);f0===1?(J[t0]=x0,t(t0,G,o0)):f0===-1&&(J[t0]=o0,t(t0,i0,x0))}else J[t0]=X[t0];return J}L.validateDependencyTree=s;async function n(k,I,X,W,H){let J=r(H),a0=fx.Utils.joinPath(k,ae,W);try{let t0=await z.read(a0,I);return UA.gte(t0.version,J)&&t0.publisher.toLowerCase()===X.toLowerCase()}catch{return!1}}L.isDependencyInstalled=n;async function F(k,I,X,W){let H=fx.Utils.joinPath(k,ae,W);await I.rm(H).catch(J=>{X.error("removeExisting",J)})}L.removeExisting=F;async function f(k,I,X,W,H){let J=ZE.untar(xB.ungzip(H));await F(k,I,X,W);for(let a0 of J.values())try{let t0=fx.Utils.joinPath(k,ae,W,a0.name);await I.writeFile(t0,a0.data)}catch(t0){X.error("Extracting lib",t0)}}L.extractLibraryContent=f;async function E(k,I,X,W,H,J,a0,t0=!1){let[x0,o0]=J.split("/");if(a0&&await n(k,I,x0,o0,a0))return;await F(k,I,X,o0);let G=await tx.getLibraryProfile(H,x0,o0,W),i0=a0?G.versions?.find(Ax=>UA.eq(Ax.name,L.rangeToVersion(a0))):G.versions[0];if(!i0)throw new Error(`Library ${J} with version ${a0} does not exist!`);let f0=i0.files.find(Ax=>Ax.name==="studio.json"),C0=(await nB(H,f0.downloadUrl)).libraryDependencies||{},_0={...C0};_0[J]=`^${i0.name}`,await s(k,I,_0,t0);for(let[Ax,AA]of Object.entries(C0))await E(k,I,X,W,H,Ax,AA,t0);let N0=i0.files.find(Ax=>Ax.name==="library.tar.gz");if(!N0)throw new Error(`Library ${J} has no content!`);let ix=await tx.fetchCustomContent(H,N0.downloadUrl);await f(k,I,X,o0,ix),await O(k,I,X,o0,t0);let Kx=await z.read(k,I),yA=Kx.libraryDependencies||{},kA=Kx.libraryDevDependencies||{},ox=t0?kA:yA;ox[J]=`^${i0.name}`,Kx.libraryDependencies=yA,Kx.libraryDevDependencies=kA,await z.write(k,I,Kx)}L.installDependency=E;async function u(k,I,X,W,H){let J=await z.read(k,I),a0=J.libraryDependencies||{},t0=J.libraryDevDependencies||{},x0=Object.assign(a0,t0);for(let[o0,G]of Object.entries(x0)){let i0=Object.hasOwn(t0,o0);await E(k,I,X,W,H,o0,G,i0)}for(let[o0]of Object.entries(x0)){let G=A(o0),i0=Object.hasOwn(t0,o0);await O(k,I,X,G,i0)}X.done(`Installed ${Object.entries(x0).length} dependencies`)}L.installDependencies=u;async function D(k,I,X,W,H){let J=await z.read(k,I),a0=J.libraryDependencies||{},t0=J.libraryDevDependencies||{},x0=Object.assign(a0,t0),o0=`${W}/${H}`;delete x0[o0];let G=await sB(k,I,x0);if(!Object.hasOwn(G,o0))await n0(k,I,X,H),await F(k,I,X,H),delete t0[o0],delete a0[o0],await z.write(k,I,J);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}L.uninstallDependency=D;async function m(k,I){try{let W=(await xF(fx.Utils.joinPath(k,Ue),I)).workspaces;if(Array.isArray(W)&&W.every(J=>typeof J=="string")&&W.length>0)return W;let H=W?.packages;return Array.isArray(H)&&H.every(J=>typeof J=="string")&&H.length>0?H:null}catch{return null}}L.readNpmWorkspacePatterns=m;function _(k,I){let X=nn(k);return X===void 0?!1:I.some(W=>{let H=nn(W);return H===void 0?!1:H===X||(0,Zo.minimatch)(X,H)})}L.isPathInWorkspaces=_;function h(k,I){if(!I)return{rootInstall:!1,partInstalls:k.map(H=>H.workingPath)};let X=[],W=!1;for(let H of k)_(H.workingPath,I)?W=!0:X.push(H.workingPath);return{rootInstall:W,partInstalls:X}}L.planNpmInstalls=h;async function S(k,I,X){let W=await z.read(k,I),H=new Set([...Object.keys(W.libraryDependencies||{}),...Object.keys(W.libraryDevDependencies||{})].map(A)),J=new Set,a0=[...H];for(;a0.length>0;){let t0=a0.shift();if(J.has(t0))continue;J.add(t0);let x0=fx.Utils.joinPath(k,ae,t0);try{let o0=fx.Utils.joinPath(x0,z.fileName);if(!await I.stat(o0))continue;let G=await z.readRaw(x0,I);await yr.normalizeLibraryParts(x0,I,G,X),a0.push(...[...Object.keys(G.libraryDependencies||{}),...Object.keys(G.libraryDevDependencies||{})].map(A))}catch(o0){X.warn(`Could not normalize library parts for "${t0}": ${o0}`)}}}L.normalizeInstalledLibraryParts=S;async function P(k,I,X){let W=await z.read(k,I),H=await tB(k,I,X,W);if(!H)return;let J=W.engines?.backend;if(!J||z.compareBackendVersion(H.backend,J)>0){let a0=J?`"${J}"`:"none",t0=z.isLibrary(W)?"library":"application",x0=z.isLibrary(W)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${t0} "${W.publisher}/${W.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${x0}`)}}L.validateMinimumBackendVersion=P;async function N(k,I,X){await S(k,I,X);let W=await z.read(k,I),{parts:H,duplicates:J}=js(W);hs(J,X);let a0=H.filter(({workingPath:i0})=>!!i0).map(({partName:i0,workingPath:f0})=>({name:i0,workingPath:f0})),t0=[];for(let i0 of a0){let f0=fx.Utils.joinPath(k,i0.workingPath),B0=fx.Utils.joinPath(f0,Ue);await I.stat(B0)&&t0.push(i0)}if(t0.length===0)return;let x0=await m(k,I),{rootInstall:o0,partInstalls:G}=h(t0,x0);if(o0){let i0=t0.filter(f0=>!G.includes(f0.workingPath)).map(f0=>f0.workingPath).join(", ");X.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${i0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await tn(k,"npm install --no-audit --no-fund",X)}for(let i0 of t0){if(!G.includes(i0.workingPath))continue;x0?X.warn(`${i0.workingPath} (${i0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):X.info(`Installing npm dependencies for ${i0.name} (${i0.workingPath})...`);let f0=fx.Utils.joinPath(k,i0.workingPath);await oB(f0,I,X)}}L.installNpmInApmParts=N;async function R(k,I,X,W=!1){let H=await z.read(k,I),J=await x(H,W),a0=[],t0=r0.filePaths[X].path,x0=X===p0.Part.dlo?"inc":"dfiles";for(let o0 in J){let G=L.dependencyToPath(k,o0),i0=L.dependencyIdToName(o0),f0=fx.Utils.joinPath(G,t0,`${i0}.${x0}`);await I.stat(f0)&&a0.push({name:i0,path:f0})}if(z.isLibrary(H)){let o0=fx.Utils.joinPath(k,t0,`${H.name}.${x0}`);await I.stat(o0)&&a0.push({name:H.name,path:o0})}return a0}L.getApmPartDependencies=R;async function O(k,I,X,W,H){let J=await z.read(k,I),{parts:a0,duplicates:t0}=js(J);hs(t0,X);for(let{partName:x0,partDistPath:o0,workingPath:G}of a0){if(!G)continue;let i0=fx.Utils.joinPath(k,ae,W,"dist",...o0.split("/"),Ue);if(!await I.stat(i0))continue;let B0=fx.Utils.joinPath(k,G,Ue);if(!await I.stat(B0)){X.info(`${G} (${x0}) has no package.json, skipping link`);continue}try{let C0=await Xo(k,I,G),_0=H?"devDependencies":"dependencies";C0[_0]=C0[_0]||{};let N0=G.split("/").length,ix=Array(N0).fill("..").join("/");C0[_0][W]=`file:${ix}/${ae}/${W}/dist/${o0}`,await Yo(k,I,G,C0),X.info(`Linked ${W} to ${x0} (${G})`)}catch(C0){X.warn(`Could not link ${W} to ${x0}: ${C0}`)}}}L.linkLibraryApmParts=O;async function n0(k,I,X,W){let H=await z.read(k,I),{parts:J,duplicates:a0}=js(H);hs(a0,X);for(let{partName:t0,workingPath:x0}of J){if(!x0)continue;let o0=fx.Utils.joinPath(k,x0,Ue);if(await I.stat(o0))try{let G=await Xo(k,I,x0),i0=!1;G.dependencies?.[W]?.startsWith("file:")&&(delete G.dependencies[W],i0=!0),G.devDependencies?.[W]?.startsWith("file:")&&(delete G.devDependencies[W],i0=!0),i0&&(await Yo(k,I,x0,G),X.info(`Unlinked ${W} from ${t0}`))}catch(G){X.warn(`Could not unlink ${W} from ${t0}: ${G}`)}}}L.unlinkLibraryApmParts=n0})(Z0||={});async function xF(x,A){let e=await A.readFile(x);return JSON.parse(b0.convertBlobToString(e))}function Xo(x,A,e){return xF(fx.Utils.joinPath(x,e,Ue),A)}async function Yo(x,A,e,r){let t=fx.Utils.joinPath(x,e,Ue),s=JSON.stringify(r,null," ")+`
2335
- `;await A.writeFile(t,s)}async function nB(x,A){return await tx.fetchCustomContent(x,A,!0)}async function sB(x,A,e){let r={};function t(E,u,D,m=!1){let _=r[E],h=Z0.rangeToVersion(D),S=Z0.rangeToVersion(D);(!_||UA.gt(h,S))&&(r[E]={publisherId:u,version:D,installed:m})}let s=Object.entries(e).map(([E,u])=>{let[D,m]=E.split("/");return t(m,D,u,!0),m}),n={};for(let E of s)try{let u=await iB(x,A,E);n[E]=Object.entries(u).map(([D,m])=>{let[_,h]=D.split("/");return t(h,_,m),h}),s.push(...n[E])}catch{let D=r[E];throw new Error(`Please import "${D.publisherId}/${E}" first.`)}let F=[];for(;;){let E=s.filter(u=>F.includes(u)?!1:(n[u]||[]).every(m=>F.includes(m)));if(F.push(...E),s.length===F.length||!E.length)break}let f={};return[...new Set(F)].forEach(E=>{let{version:u,publisherId:D}=r[E],m=aB(D,E,u);f[m.libraryId]=m.libraryVersion}),f}async function iB(x,A,e){let r=fx.Utils.joinPath(x,ae,e);return(await z.read(r,A))?.libraryDependencies||{}}function aB(x,A,e){return{libraryName:A,publisherId:x,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${x}/${A}`}}function tn(x,A,e){return new Promise((r,t)=>{Qo.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{if(n&&e.log(n),F&&e.error(F),s){t(new Error(`${s.message}
2334
+ `:"");try{await s.writeFile(v,R)}catch(U){return F.warn(`Could not write "${E}/package.json": ${U}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,s,n,F){for(let v of r.PART_DIST_PATHS){let E=hs.Utils.joinPath(t,v);await A(E,s,n,F)}}r.normalizeLibraryParts=e})(yr||={});async function pE(x,A,e,r){try{let t=await x.readFile(A),s=b0.convertBlobToString(t),n=JSON.parse(s);return{raw:s,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function bE(x,A,e,r){x.name!==void 0&&x.name!==A.name&&r.warn(`"${e}/package.json" name "${x.name}" does not match library name "${A.name}".`)}function mE(x,A){if(x.version===A)return{pkg:x,changed:!1,oldVersion:x.version};let e=x.version;if(x.version===void 0&&Object.hasOwn(x,"name")){let{name:r,...t}=x;x={name:r,version:A,...t}}else x.version=A;return{pkg:x,changed:!0,oldVersion:e}}function jE(x,A,e,r){let t=!1;for(let s of uE){let n=x[s];if(!n)continue;let F=!1;for(let v of Object.keys(n)){if(!A.has(v))continue;let E=n[v];if(typeof E!="string"||E.startsWith("npm:")||E.includes("://")){r.warn(`Left "${v}" in ${s} of ${e}/package.json untouched - its value "${E}" does not look like a Studio library reference.`);continue}delete n[v],F=!0,t=!0,r.warn(`Removed "${v}" from ${s} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete x[s]}return t}function hE(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function gE(x){let A=x.path.replace(/\\/g,"/");for(let e of yr.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function yE(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:DE}var ut=require("@gera2ld/tarjs"),Ro=b0.convertBlobToString,gs=require("pako"),gx;(D=>{class x extends Error{_mergedDiagnostics;constructor(_,h){super(_),this.name="BuildError",this._mergedDiagnostics=h}get mergedDiagnostics(){return this._mergedDiagnostics}}D.BuildError=x;async function A(m,_,h,S,P,N=!0,R){N=kE(h,N),await _E(m,_,h,S,P,N);try{let M=await ux.read(m,_,h);await wE(m,_,h,M)}catch(M){h.warn("Could not generate defines.ts:",M)}let U={[p0.Part.dde]:[],[p0.Part.dlo]:[],[p0.Part.dfiles]:[]},t0={[p0.Part.dde]:SE,[p0.Part.dlo]:$E,[p0.Part.dfiles]:TE};try{for(let M of[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles])if(N.includes(M)&&(h.info(`Building ${M.toUpperCase()}...`),await IE(h,M,t0[M],U[M],m,_)))return U}catch(M){throw R?new x(M?.message,U):M}return N.includes(p0.Part.pov)?await rn.tryBuildPov(m,_,h):h.info("Skipping pov build"),N.includes(p0.Part.blo)?await rn.tryBuildBlo(m,_,h):h.info("Skipping blo build"),await PE(m,_,h),await qE(m,_,h),h.done("Project build completed."),U}D.buildAll=A;async function e(m,_,h,S,P,N,R){let U=await z.read(m,_);return z.isLibrary(U)?(h.info("Library project detected. Publishing library..."),s(m,_,h,P,S)):(h.info("App project detected. Publishing app..."),t(m,_,h,P,N,R,S))}D.release=e;async function r(m,_,h,S,P,N){let R=await z.read(m,_),U=`${R.name}-${R.version}.tar.gz`,t0=null;if(z.isLibrary(R))h.info("Library project detected. Packing library..."),t0=await Oo(m,_,h,P,S);else{h.info("App project detected. Packing app...");let k=await Go(m,_,h,P,N,S);t0=await LE(k)}let M=Ue.Utils.joinPath(m,U);t0!==null?(await _.writeFile(M,t0),h.done(`Packaged: ${M.fsPath}`)):h.error(`Could not create archive: ${M.fsPath}`)}D.pack=r;async function t(m,_,h,S,P,N=null,R){if(!await p0.validateAccess(m,_,S,!1,R))throw new Error("Could not validate access to application");let t0=await Go(m,_,h,S,P,R);await p0.updateProfile(m,_,S,R);let M=await p0.publishTag(m,_,S,t0,R);if(N!==null){let k=await z.read(m,_);await tx.updateExistingApplicationVersion(S,k.publisher,k.registry?.id,k.version,{allowedBackends:N},R),h.info(`Tag "${M.version}" with phase "${M.phase}" shared with ${[...N].join(";")}!`)}h.done(`Tag "${M.version}" with phase "${M.phase}" published!`)}D.releaseAPM=t;async function s(m,_,h,S,P){let N=await z.read(m,_),R=await Oo(m,_,h,S,P);await Ge.publishPackage(S,N,R,P),h.done(`Library "${N.publisher}/${N.name}" with version "${N.version}" published!`)}D.releaseLibrary=s;async function n(m,_,h,S,P,N,R,U=null){if(N==="*"){let H=await z.read(m,_);N=`${H.name}-${H.version}.tar.gz`,h.info(`Publishing detected archive package "${N}"...`)}let t0=Ue.Utils.joinPath(m,N);if(!await _.stat(t0))throw new Error(`Archive package not found: ${t0.fsPath}`);let M=await _.readFile(t0),k=await RE(M),{publisher:L,registry:W,version:Q}=k;z.isLibrary(k)?(await Ge.publishPackage(S,k,M,P),h.done(`Library "${L}/${k.name}" with version "${k.version}" published!`)):(await tx.updateApplicationFile(S,L,W.id,Q,"app.tar.gz",M,P),await tx.updateExistingApplicationVersion(S,L,W?.id,Q,{allowedBackends:U||void 0,phase:R||void 0},P),h.info(`Tag "${Q}" with phase "${R}" shared with ${[...U||""].join(";")}!`),h.done(`Tag "${Q}" with phase "${R}" published!`))}D.publishArchive=n;async function F(m,_,h){let S;try{S=await _.readFile(Ue.Utils.joinPath(m,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(Ro(S)===r0.readme(h))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}D.getReadmeFile=F;async function v(m,_){let h;try{h=await _.readFile(Ue.Utils.joinPath(m,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(Ro(h)===r0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return h}D.getChangelogFile=v;async function E(m,_,h,S){let P=await z.read(m,_),{name:N,publisher:R,description:U}=P,t0=z.validateProjectName(N,z.isLibrary(P));if(t0)throw new Error(`name: ${t0}`);let M=z.validateDescription(U);if(M)throw new Error(`description: ${M}`);let k=z.validatePublisherId(R)||await z.validatePublisherOnline(h,R,S);if(k)throw new Error(`publisher: ${k}`);if(!z.isLibrary(P)&&(await z.validateApplicationIcon(m,_,P),z.validateEngineSettings(P),z.isApp(P)&&await z.isApmPartEnabled(m,_,p0.Part.dlo,P)&&(!P.dpid||!Object.values(z.DeviceProfiles).includes(P.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}D.validatePublishSettings=E;async function u(m,_){let h=gs.ungzip(m),S=await ut.TarReader.load(h),P={};for(let N of S.fileInfos)_.includes(N.name)&&(P[N.name]=S.getFileBlob(N.name));return P}D.readFilesFromTarGz=u})(gx||={});function kE(x,A){let e=Object.values(p0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function _E(x,A,e,r,t,s){await Z0.validateMinimumBackendVersion(x,A,e),s.includes(p0.Part.dde)&&await lA.fetchPreviousHistoryJson(x,A,e,r,t)}async function wE(x,A,e,r){r.defaultsOnly?(await ux.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",r0.filePaths.dist.definesTs,"(defaults only)"),await ux.exportDefinesTs(x,A,r,r0.filePaths.dist.definesAppTs),e.log("Generated",r0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await ux.exportDefinesTs(x,A,r),e.log("Generated",r0.filePaths.dist.definesTs))}async function SE(x,A,e){let r=await lA.compileDDE(x,A,e);if(r.ddeJSON){await lA.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await z.read(x,A);z.isLibrary(t)||await lA.exportHistoryJson(x,A,e,r.ddeJSON),await lA.exportOpenApi(x,A,e,r.ddeJSON),await z.isApmPartEnabled(x,A,p0.Part.dlo,t)&&(await lA.exportAutoDloFiles(x,A,e,r.ddeJSON),await Ct.exportDloConfig(x,A,e))}return r.diagnostics}async function $E(x,A,e){let r=new gr(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function TE(x,A,e){return await dt.process(x,A,e)}async function PE(x,A,e){let r=await z.read(x,A);z.isLibrary(r)&&await yr.normalizeLibraryParts(x,A,r,e)}async function qE(x,A,e){let r=Ue.Utils.joinPath(x,r0.fileNames.reportTemplate);if(await A.stat(r)){let t=Ue.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${r0.fileNames.reportTemplate}" to dist folder.`)}}function NE(x,A,e){A!==p0.Part.dlo&&ME(x,e);let r=e.some(t=>t.level==="error");if(r){let t=`APM part "${A}" has errors. Aborted.`;throw new Error(t)}return r}async function IE(x,A,e,r,t,s){let n=await e(t,s,x);return r.push(...n),NE(x,A,n)}function ME(x,A){A.forEach(e=>{let r=e.startCharacter?`:${e.startCharacter+1}`:"",t=`${e.file.path}:${e.line+1}${r} - ${e.message}`;e.level==="error"?x.error(t):e.level==="warning"?x.warn(t):x.log(t)})}async function Oo(x,A,e,r,t){let s=await z.read(x,A);return await z.validateBasicManifest(x,A,s),await gx.buildAll(x,A,e,t,r),await Ge.createArchive(x,A)}async function Go(x,A,e,r,t,s){if(!Object.values(p0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await z.validateBasicManifest(x,A,null),await gx.buildAll(x,A,e,s,r),await p0.createTag(x,A,t)}async function LE(x){let A=new ut.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let s=t;A.addFile(r,s)}else{let s=t;A.addFile(r,await s.arrayBuffer())}let e=await A.write();return gs.gzip(await e.arrayBuffer())}async function RE(x){let A=await OE(x,["studio.json","src/studio.json"]);if(!A)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await A.text())}async function OE(x,A){let e=gs.ungzip(x),r=await ut.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var GE=b0.bufferToBase64;var p0;(u=>{let x;(R=>(R.alpha="alpha",R.beta="beta",R.rc="rc",R.release="release",R.stage="stage",R.passive="passive",R.withdrawn="withdrawn"))(x=u.TagPhase||={});let A;(P=>(P.dde="dde",P.dlo="dlo",P.pov="pov",P.blo="blo",P.dfiles="dfiles"))(A=u.Part||={});function e(D){let{description:m,name:_,pov:h,engines:S,blo:P,publisher:N,type:R}=D,U=R||z.ProjectTypes.app,t0={name:_,abstract:m,author:N||"",pov_location:z.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:P?.accessLevel||z.BloAccessLevel.restricted,pip_id:""};return h&&h.details&&(t0.pov_location=z.PovLocation.pure,t0.pov_details_lowlevel=!!h.details.lowLevel),U==="addon"&&(t0.required_hwfw=void 0,t0.required_productcode=void 0,t0.addon_max_sources=1,t0.addon_max_per_site=D.maxInstancesPerSite),t0}u.createBaseTagHeader=e;async function r(D,m,_){let h=await z.read(D,m),S=e(h),P={version:h.version,...S,phase:_};return await s(D,m,h,P)}u.createTag=r;async function t(D,m){let _=await z.read(D,m),S={...e(_),blo_autostart:!1};return s(D,m,_,S)}u.createDevTag=t;async function s(D,m,_,h){let S=new FormData;S.append("tag",JSON.stringify(h)),S.append(`src/${z.fileName}`,new Blob([await z.readAsBlob(D,m)]));let P=new Blob([await m.readFile(ae.Utils.joinPath(D,r0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",P),_.icon){let R=await m.readFile(ae.Utils.joinPath(D,_.icon)),U=GE(R);S.append("previews/00.png",new Blob([`data:image/png;base64,${U}`]))}if(Object.hasOwn(h,"phase")){let R=await gx.getReadmeFile(D,m,h.name),U=await gx.getChangelogFile(D,m);S.append("previews/README.md",new Blob([R])),S.append("previews/CHANGELOG.md",new Blob([U]))}if(await z.isApmPartEnabled(D,m,"dlo")){let R=new Blob([await m.readFile(ae.Utils.joinPath(D,r0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",R)}if(await z.isApmPartEnabled(D,m,"pov",_)){await Uo(D,m,S,r0.filePaths.dist.povDetailsPath,"bin/pov/details");let R=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');S.append("bin/pov/list/index.html",new Blob([R]))}let N=await m.findFiles(D,`${r0.filePaths.dist.dfilesPath}/*`);for(let R of N){let U=new Blob([await m.readFile(R)]);S.append(`bin/dfiles/${ae.Utils.basename(R)}`,U)}return await z.isApmPartEnabled(D,m,"blo",_)&&await Uo(D,m,S,r0.filePaths.dist.bloPath,"bin/blo"),await UE(D,m,S),S}u.createBuffer=s;async function n(D,m,_,h,S){let P=await z.read(D,m);h||await gx.validatePublishSettings(D,m,_,S);let{registry:N}=P,R=N?.id;if(!R&&!h&&(R=await F(D,m,_,P,S)),R){let{publisher:U}=P;if(!U)return null;try{return{id:R,...await tx.getExistingApplication(_,U,R,S)}}catch(t0){if(t0?.message==="Could not find given application")return R=await F(D,m,_,P,S),{id:R,...await tx.getExistingApplication(_,U,R,S)}}}return null}u.validateAccess=n;async function F(D,m,_,h,S){let P="myDatanet",{publisher:N,name:R,description:U,registry:t0}=h,M={id:t0?.id,type:h.type||z.ProjectTypes.app,name:R,targetSystem:P,description:U||"",allowedBackends:null};z.isAddon(h)&&(M.allowedApplications=null);let k=await tx.createNewApplication(_,N,M,S);if(!k)throw new Error("Failed to initialize application");return h.registry={id:k},await z.write(D,m,h),k}u.registerNew=F;async function v(D,m,_,h){let{name:S,publisher:P,description:N,registry:R}=await z.read(D,m),U=R?.id;await tx.updateExistingApplication(_,P,U,{description:N,name:S,targetSystem:"myDatanet"},h)}u.updateProfile=v;async function E(D,m,_,h,S){let{publisher:P,registry:N,version:R}=await z.read(D,m);return await tx.publishApplicationVersion(_,P,N?.id,R,h,S)}u.publishTag=E})(p0||={});async function Uo(x,A,e,r,t){let s=await A.findFiles(x,`${r}/**`);for(let n of s){let F=ae.Utils.joinPath(x,r),v=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(ae.Utils.joinPath(x,`${r}/${v}`))]);e.append(`${t}/${v}`,E)}}async function UE(x,A,e){let r=ae.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);if(await A.stat(r)){let s=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",s)}let t=ae.Utils.joinPath(x,r0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var Wo=require("deepmerge-ts"),HE=b0.isNumeric,Ho="52v007",Jo="53v001",JE="54v001",KE="56v001",fA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Wo.deepmerge)(structuredClone(this._manifest),fA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},z;(o0=>{let x=b0.convertBlobToString;o0.fileName="studio.json";let e;($0=>($0.m22x="m22x",$0.m23x="m23x",$0.nrf91="nrf91",$0.m2blegw="m2blegw",$0.m2easyv3="m2easyv3",$0.m2easyiot="m2easyiot"))(e=o0.DeviceProfiles||={});let r;(C0=>(C0.app="app",C0.library="library",C0.addon="addon",C0.analytics="analytics"))(r=o0.ProjectTypes||={});let t;(l0=>(l0.restricted="restricted",l0.global="global"))(t=o0.BloAccessLevel||={});let s;(l0=>(l0.embedded="$embedded",l0.pure="$pure"))(s=o0.PovLocation||={});function n(O){fA.overwrites=O}o0.setOverwrites=n;function F(){fA.overwrites=null}o0.clearOverwrites=F;async function v(O,i0){let l0=kr.Utils.joinPath(O,o0.fileName),B0=await i0.stat(l0);if(fA.manifest===null||l0?.fsPath!==fA.stat?.path.fsPath||B0?.ctime!==fA.stat?.ctime||B0?.mtime!==fA.stat?.mtime||B0?.size!==fA.stat?.size){let C0=await i0.readFile(l0),_0=x(C0);fA.manifest=JSON.parse(_0),fA.stat={...B0,path:l0}}return fA.manifest}o0.read=v;async function E(O,i0){return await i0.readFile(kr.Utils.joinPath(O,o0.fileName))}o0.readAsBlob=E;async function u(O,i0){let l0=kr.Utils.joinPath(O,o0.fileName),B0=await i0.readFile(l0),C0=x(B0);return JSON.parse(C0)}o0.readRaw=u;async function D(O,i0,l0){return fA.clear(),ZE(l0),i0.writeFile(kr.Utils.joinPath(O,o0.fileName),JSON.stringify(l0,null," "))}o0.write=D;function m(O){return O.library!==void 0?O.library:O.type==="library"}o0.isLibrary=m;function _(O){return O.type==="addon"}o0.isAddon=_;function h(O){return O.type===void 0&&!m(O)?!0:O.type==="app"}o0.isApp=h;function S(O){return O.type===void 0?!0:O.type==="app"}o0.isIotApp=S;function P(O){return O.type==="analytics"}o0.isAnalytics=P;async function N(O,i0,l0){l0||(l0=await v(O,i0)),QE(l0),zE(l0),VE(l0),YE(l0)}o0.validateBasicManifest=N;function R(O){let i0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(O.match(/^[a-z0-9-_]+$/)){let B0=["-","_"];if(B0.includes(O[0])||B0.includes(O[O.length-1]))return i0}else return i0;return O.length<3||O.length>20?"The library name is beyond permissible length of 20 characters.":null}o0.validateLibraryName=R;function U(O,i0){if(i0)return R(O);{let l0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!O.match(/^([a-zA-Z0-9 _-]+)$/))return l0;if(O.length<3||O.length>40)return"The project name is beyond permissible length of 40 characters.";let C0=["-","_"," "];return C0.includes(O[0])||C0.includes(O[O.length-1])?l0:null}}o0.validateProjectName=U;function t0(O){return O.length<5?"The description must have at least 5 characters.":null}o0.validateDescription=t0;function M(O){if(!O)return"No publisher set yet";let i0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(O.match(/^[a-zA-Z0-9-]+$/)){let B0=["_"];if(B0.includes(O[0])||B0.includes(O[O.length-1]))return i0}else return i0;return null}o0.validatePublisherId=M;async function k(O,i0,l0){return await tx.getPublisher(O,i0,l0)?null:`Publisher '${i0}' does not exist.`}o0.validatePublisherOnline=k;let L=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function W(O){if(O===void 0)return"Allowed backends not specified yet";if(O===null)return null;if(Array.isArray(O)||O?.includes(";")){let i0=O?.includes(";")?O.split(";"):O;for(let l0 of i0)if(!l0.match(L))return`Domain "${l0}" is invalid`}else if(!O?.match(L)&&O!=="*")return'Invalid value for "allowedBackends"';return null}o0.validateRegistryAllowedBackends=W;let Q=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function H(O){if(O===void 0)return"Allowed applications not specified yet";if(O===null)return null;if(Array.isArray(O)||O?.includes(";")){let i0=O?.includes(";")?O.split(";"):O;for(let l0 of i0)if(!l0.match(Q))return`Application id "${l0}" is invalid`}else if(!O?.match(Q)&&O!=="*")return'Invalid value for "allowedApplications"';return null}o0.validateRegistryAllowedApplications=H;async function J(O,i0,l0){let B0=l0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let C0=kr.Utils.joinPath(O,B0);if(!await i0.stat(C0))throw new Error(`Could not load icon "${B0}"`);let $0=await i0.readFile(C0),ix=(0,Ko.imageDimensionsFromData)($0);if(!ix)throw new Error("App icon could not be validated!");if(ix?.width!==ix?.height)throw new Error("App icon has to be a square!");if(ix.width>512||ix.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,zo.isPNG)($0))throw new Error("App icon has to be of type PNG!")}o0.validateApplicationIcon=J;function a0(O){let{engines:i0}=O;if(i0?.backend&&!i0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');WE(O),XE(O)}o0.validateEngineSettings=a0;function n0(O,i0){let l0=_0=>{let $0=/^(\d+)v(\d+)$/.exec(_0);return $0?[Number($0[1]),Number($0[2])]:null},B0=l0(O),C0=l0(i0);return B0&&C0?B0[0]-C0[0]||B0[1]-C0[1]:O===i0?0:O<i0?-1:1}o0.compareBackendVersion=n0;async function Z(O,i0,l0,B0){B0||(B0=await o0.read(O,i0));let C0=o0.isAddon(B0),_0=o0.isAnalytics(B0);switch(l0){case p0.Part.dlo:return!!B0?.dlo?.mainFile&&!C0&&!_0;case p0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case p0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case p0.Part.dde:case p0.Part.dfiles:return!0;default:return!1}}o0.isApmPartEnabled=Z})(z||={});function zE(x){let{pov:A}=x;if(A&&A.details){if(!Object.hasOwn(A.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(A.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function VE(x){let{blo:A}=x;if(A){if(!Object.hasOwn(A,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(A,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(A.accessLevel&&!["restricted","global"].includes(A.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function WE(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(z.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=Ho){if(r&&e)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(e)throw new Error(`"engines.productId" requires "engines.backend" to be "${Ho}"`)}function XE(x){if(!z.isAddon(x)&&!z.isAnalytics(x))return;let{backend:A}=x.engines,e=z.isAddon(x)?JE:KE;if(!A||A<e)throw new Error(`Project type "${x.type}" requires "engines.backend" to be ">=${e}"`);if(x.dlo)throw new Error(`For project type "${x.type}", "dlo" is not supported!"`);if(x.dpid)throw new Error(`For project type "${x.type}", "dpid" is not supported!"`)}function YE(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function QE(x){if((x.engines?.backend||"00v000")>=Jo||z.isLibrary(x)){if(!Vo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${Jo} onwards "version" has to be a semantic version string!"`)}else if(!HE(x.version))throw new Error('"version" has to be a number!')}function ZE(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var HA=W0(require("semver"));var xF=W0(require("node:child_process")),AF=require("minimatch");var xB=require("tinytar-fix"),AB=require("pako"),oe=".studio/libdeps",He="package.json",eB="package-lock.json";function ys(x){let A=x.dlo?.mainFile,e=[{partName:"blo",partDistPath:"blo",workingPath:Xo(x.blo?.workingPath)},{partName:"pov",partDistPath:"pov/details",workingPath:Xo(x.pov?.details?.workingPath)},{partName:"dlo",partDistPath:"dlo",workingPath:A?rB(A):void 0}],r=[],t=[],s=new Set;for(let n of e){if(n.workingPath!==void 0){if(s.has(n.workingPath)){t.push(n);continue}s.add(n.workingPath)}r.push(n)}return{parts:r,duplicates:t}}function ks(x,A){for(let e of x)A.warn(`Skipping npm part "${e.partName}" - its working path (${e.workingPath}) is already used by another part in studio.json`)}function sn(x){let A=x.replace(/\\/g,"/").split("/").filter(e=>e!==""&&e!==".");if(!A.some(e=>e===".."))return A.join("/")}function Xo(x){if(x)return sn(x)||void 0}function rB(x){let A=sn(x);if(A===void 0)return;let e=A.lastIndexOf("/");return e===-1?void 0:A.slice(0,e)}function Yo(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(Z0.dependencyIdToName)}async function tB(x,A,e,r){let t=lx.Utils.joinPath(x,oe,r);try{return await A.stat(lx.Utils.joinPath(t,z.fileName))?await z.readRaw(t,A):null}catch(s){return e.warn(`Could not read manifest for library "${r}": ${s}`),null}}async function nB(x,A,e,r){let t=new Set,s=Yo(r),n=null;for(;s.length>0;){let F=s.shift();if(t.has(F))continue;t.add(F);let v=await tB(x,A,e,F);if(!v)continue;let E=v.engines?.backend;E&&(!n||z.compareBackendVersion(E,n.backend)>0)&&(n={backend:E,requiredBy:`${v.publisher}/${v.name}`}),s.push(...Yo(v))}return n}var Z0;(M=>{async function x(k,L=!1){let W={...k.libraryDependencies||{}};return L||Object.assign(W,k.libraryDevDependencies||{}),W}M.getAll=x;function A(k){return k.split("/")[1]}M.dependencyIdToName=A;function e(k,L){let W=A(L);return lx.Utils.joinPath(k,oe,W)}M.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}M.rangeToVersion=r;function t(k,L,W){if(!HA.satisfies(L,W,{includePrerelease:!0}))throw new Error(`${k}, version ${L} does not satisfy required constraint ${W}`)}M.satisfiesSemverRange=t;async function s(k,L,W={},Q=!1){let H=await z.read(k,L),J=H.libraryDependencies||{};Q&&Object.assign(J,H.libraryDevDependencies);let a0=Object.keys(W);for(let n0 of a0)if(Object.hasOwn(J,n0)){let Z=W[n0],o0=J[n0],O=r(Z),i0=r(o0),l0=HA.compare(O,i0);l0===1?(J[n0]=Z,t(n0,O,o0)):l0===-1&&(J[n0]=o0,t(n0,i0,Z))}else J[n0]=W[n0];return J}M.validateDependencyTree=s;async function n(k,L,W,Q,H){let J=r(H),a0=lx.Utils.joinPath(k,oe,Q);try{let n0=await z.read(a0,L);return HA.gte(n0.version,J)&&n0.publisher.toLowerCase()===W.toLowerCase()}catch{return!1}}M.isDependencyInstalled=n;async function F(k,L,W,Q){let H=lx.Utils.joinPath(k,oe,Q);await L.rm(H).catch(J=>{W.error("removeExisting",J)})}M.removeExisting=F;async function v(k,L,W,Q,H){let J=xB.untar(AB.ungzip(H));await F(k,L,W,Q);for(let a0 of J.values())try{let n0=lx.Utils.joinPath(k,oe,Q,a0.name);await L.writeFile(n0,a0.data)}catch(n0){W.error("Extracting lib",n0)}}M.extractLibraryContent=v;async function E(k,L,W,Q,H,J,a0,n0=!1){let[Z,o0]=J.split("/");if(a0&&await n(k,L,Z,o0,a0))return;await F(k,L,W,o0);let O=await tx.getLibraryProfile(H,Z,o0,Q),i0=a0?O.versions?.find(Ax=>HA.eq(Ax.name,M.rangeToVersion(a0))):O.versions[0];if(!i0)throw new Error(`Library ${J} with version ${a0} does not exist!`);let l0=i0.files.find(Ax=>Ax.name==="studio.json"),C0=(await sB(H,l0.downloadUrl)).libraryDependencies||{},_0={...C0};_0[J]=`^${i0.name}`,await s(k,L,_0,n0);for(let[Ax,eA]of Object.entries(C0))await E(k,L,W,Q,H,Ax,eA,n0);let $0=i0.files.find(Ax=>Ax.name==="library.tar.gz");if(!$0)throw new Error(`Library ${J} has no content!`);let ix=await tx.fetchCustomContent(H,$0.downloadUrl);await v(k,L,W,o0,ix),await U(k,L,W,o0,n0);let Vx=await z.read(k,L),kA=Vx.libraryDependencies||{},_A=Vx.libraryDevDependencies||{},ox=n0?_A:kA;ox[J]=`^${i0.name}`,Vx.libraryDependencies=kA,Vx.libraryDevDependencies=_A,await z.write(k,L,Vx)}M.installDependency=E;async function u(k,L,W,Q,H){let J=await z.read(k,L),a0=J.libraryDependencies||{},n0=J.libraryDevDependencies||{},Z=Object.assign(a0,n0);for(let[o0,O]of Object.entries(Z)){let i0=Object.hasOwn(n0,o0);await E(k,L,W,Q,H,o0,O,i0)}for(let[o0]of Object.entries(Z)){let O=A(o0),i0=Object.hasOwn(n0,o0);await U(k,L,W,O,i0)}W.done(`Installed ${Object.entries(Z).length} dependencies`)}M.installDependencies=u;async function D(k,L,W,Q,H){let J=await z.read(k,L),a0=J.libraryDependencies||{},n0=J.libraryDevDependencies||{},Z=Object.assign(a0,n0),o0=`${Q}/${H}`;delete Z[o0];let O=await iB(k,L,Z);if(!Object.hasOwn(O,o0))await t0(k,L,W,H),await F(k,L,W,H),delete n0[o0],delete a0[o0],await z.write(k,L,J);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}M.uninstallDependency=D;async function m(k,L){try{let Q=(await eF(lx.Utils.joinPath(k,He),L)).workspaces;if(Array.isArray(Q)&&Q.every(J=>typeof J=="string")&&Q.length>0)return Q;let H=Q?.packages;return Array.isArray(H)&&H.every(J=>typeof J=="string")&&H.length>0?H:null}catch{return null}}M.readNpmWorkspacePatterns=m;function _(k,L){let W=sn(k);return W===void 0?!1:L.some(Q=>{let H=sn(Q);return H===void 0?!1:H===W||(0,AF.minimatch)(W,H)})}M.isPathInWorkspaces=_;function h(k,L){if(!L)return{rootInstall:!1,partInstalls:k.map(H=>H.workingPath)};let W=[],Q=!1;for(let H of k)_(H.workingPath,L)?Q=!0:W.push(H.workingPath);return{rootInstall:Q,partInstalls:W}}M.planNpmInstalls=h;async function S(k,L,W){let Q=await z.read(k,L),H=new Set([...Object.keys(Q.libraryDependencies||{}),...Object.keys(Q.libraryDevDependencies||{})].map(A)),J=new Set,a0=[...H];for(;a0.length>0;){let n0=a0.shift();if(J.has(n0))continue;J.add(n0);let Z=lx.Utils.joinPath(k,oe,n0);try{let o0=lx.Utils.joinPath(Z,z.fileName);if(!await L.stat(o0))continue;let O=await z.readRaw(Z,L);await yr.normalizeLibraryParts(Z,L,O,W),a0.push(...[...Object.keys(O.libraryDependencies||{}),...Object.keys(O.libraryDevDependencies||{})].map(A))}catch(o0){W.warn(`Could not normalize library parts for "${n0}": ${o0}`)}}}M.normalizeInstalledLibraryParts=S;async function P(k,L,W){let Q=await z.read(k,L),H=await nB(k,L,W,Q);if(!H)return;let J=Q.engines?.backend;if(!J||z.compareBackendVersion(H.backend,J)>0){let a0=J?`"${J}"`:"none",n0=z.isLibrary(Q)?"library":"application",Z=z.isLibrary(Q)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${n0} "${Q.publisher}/${Q.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${Z}`)}}M.validateMinimumBackendVersion=P;async function N(k,L,W){await S(k,L,W);let Q=await z.read(k,L),{parts:H,duplicates:J}=ys(Q);ks(J,W);let a0=H.filter(({workingPath:i0})=>!!i0).map(({partName:i0,workingPath:l0})=>({name:i0,workingPath:l0})),n0=[];for(let i0 of a0){let l0=lx.Utils.joinPath(k,i0.workingPath),B0=lx.Utils.joinPath(l0,He);await L.stat(B0)&&n0.push(i0)}if(n0.length===0)return;let Z=await m(k,L),{rootInstall:o0,partInstalls:O}=h(n0,Z);if(o0){let i0=n0.filter(l0=>!O.includes(l0.workingPath)).map(l0=>l0.workingPath).join(", ");W.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${i0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await nn(k,"npm install --no-audit --no-fund",W)}for(let i0 of n0){if(!O.includes(i0.workingPath))continue;Z?W.warn(`${i0.workingPath} (${i0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):W.info(`Installing npm dependencies for ${i0.name} (${i0.workingPath})...`);let l0=lx.Utils.joinPath(k,i0.workingPath);await FB(l0,L,W)}}M.installNpmInApmParts=N;async function R(k,L,W,Q=!1){let H=await z.read(k,L),J=await x(H,Q),a0=[],n0=r0.filePaths[W].path,Z=W===p0.Part.dlo?"inc":"dfiles";for(let o0 in J){let O=M.dependencyToPath(k,o0),i0=M.dependencyIdToName(o0),l0=lx.Utils.joinPath(O,n0,`${i0}.${Z}`);await L.stat(l0)&&a0.push({name:i0,path:l0})}if(z.isLibrary(H)){let o0=lx.Utils.joinPath(k,n0,`${H.name}.${Z}`);await L.stat(o0)&&a0.push({name:H.name,path:o0})}return a0}M.getApmPartDependencies=R;async function U(k,L,W,Q,H){let J=await z.read(k,L),{parts:a0,duplicates:n0}=ys(J);ks(n0,W);for(let{partName:Z,partDistPath:o0,workingPath:O}of a0){if(!O)continue;let i0=lx.Utils.joinPath(k,oe,Q,"dist",...o0.split("/"),He);if(!await L.stat(i0))continue;let B0=lx.Utils.joinPath(k,O,He);if(!await L.stat(B0)){W.info(`${O} (${Z}) has no package.json, skipping link`);continue}try{let C0=await Qo(k,L,O),_0=H?"devDependencies":"dependencies";C0[_0]=C0[_0]||{};let $0=O.split("/").length,ix=Array($0).fill("..").join("/");C0[_0][Q]=`file:${ix}/${oe}/${Q}/dist/${o0}`,await Zo(k,L,O,C0),W.info(`Linked ${Q} to ${Z} (${O})`)}catch(C0){W.warn(`Could not link ${Q} to ${Z}: ${C0}`)}}}M.linkLibraryApmParts=U;async function t0(k,L,W,Q){let H=await z.read(k,L),{parts:J,duplicates:a0}=ys(H);ks(a0,W);for(let{partName:n0,workingPath:Z}of J){if(!Z)continue;let o0=lx.Utils.joinPath(k,Z,He);if(await L.stat(o0))try{let O=await Qo(k,L,Z),i0=!1;O.dependencies?.[Q]?.startsWith("file:")&&(delete O.dependencies[Q],i0=!0),O.devDependencies?.[Q]?.startsWith("file:")&&(delete O.devDependencies[Q],i0=!0),i0&&(await Zo(k,L,Z,O),W.info(`Unlinked ${Q} from ${n0}`))}catch(O){W.warn(`Could not unlink ${Q} from ${n0}: ${O}`)}}}M.unlinkLibraryApmParts=t0})(Z0||={});async function eF(x,A){let e=await A.readFile(x);return JSON.parse(b0.convertBlobToString(e))}function Qo(x,A,e){return eF(lx.Utils.joinPath(x,e,He),A)}async function Zo(x,A,e,r){let t=lx.Utils.joinPath(x,e,He),s=JSON.stringify(r,null," ")+`
2335
+ `;await A.writeFile(t,s)}async function sB(x,A){return await tx.fetchCustomContent(x,A,!0)}async function iB(x,A,e){let r={};function t(E,u,D,m=!1){let _=r[E],h=Z0.rangeToVersion(D),S=Z0.rangeToVersion(D);(!_||HA.gt(h,S))&&(r[E]={publisherId:u,version:D,installed:m})}let s=Object.entries(e).map(([E,u])=>{let[D,m]=E.split("/");return t(m,D,u,!0),m}),n={};for(let E of s)try{let u=await aB(x,A,E);n[E]=Object.entries(u).map(([D,m])=>{let[_,h]=D.split("/");return t(h,_,m),h}),s.push(...n[E])}catch{let D=r[E];throw new Error(`Please import "${D.publisherId}/${E}" first.`)}let F=[];for(;;){let E=s.filter(u=>F.includes(u)?!1:(n[u]||[]).every(m=>F.includes(m)));if(F.push(...E),s.length===F.length||!E.length)break}let v={};return[...new Set(F)].forEach(E=>{let{version:u,publisherId:D}=r[E],m=oB(D,E,u);v[m.libraryId]=m.libraryVersion}),v}async function aB(x,A,e){let r=lx.Utils.joinPath(x,oe,e);return(await z.read(r,A))?.libraryDependencies||{}}function oB(x,A,e){return{libraryName:A,publisherId:x,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${x}/${A}`}}function nn(x,A,e){return new Promise((r,t)=>{xF.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{if(n&&e.log(n),F&&e.error(F),s){t(new Error(`${s.message}
2336
2336
  ${n}
2337
- ${F}`));return}r()})})}async function oB(x,A,e){let r=fx.Utils.joinPath(x,AB);if(!await A.stat(r)){e.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await tn(x,"npm install",e);return}try{await tn(x,"npm ci",e)}catch{e.warn(`'npm ci' failed in ${x.fsPath} - falling back to 'npm install'. If package-lock.json changed afterwards, commit it.`),await tn(x,"npm install",e)}}var AF=W0(require("dotenv")),eF=require("vscode-uri");var FB=".env.local",gs;(A=>{async function x(e,r){let t=eF.Utils.joinPath(e,FB);if(await r.stat(t)){let s=await r.readFile(t);return AF.default.parse(b0.convertBlobToString(s))}return{}}A.read=x})(gs||={});var _r=W0(require("chalk")),oe;(r=>{let x;(u=>(u[u.log=0]="log",u[u.done=1]="done",u[u.info=2]="info",u[u.warning=3]="warning",u[u.error=4]="error",u[u.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:_r.default.bgGreen.black(" DONE "),0:"",2:_r.default.bgBlueBright.black(" INFO "),3:_r.default.bgYellow.black(" WARNING "),4:_r.default.bgRed.black(" ERROR "),5:_r.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(s=console){this._logHandler=s}_log(s,n,...F){this._silent&&s!==4||(F=[r.LOG_PREFIX[s],n,...F],this._logHandler.log(...F))}set silent(s){this._silent=s}set output(s){this._logHandler=s}log(s,...n){this._log(0,s,...n)}debug(s,...n){this._debugEnabled&&this._log(5,s,...n)}set debugEnabled(s){this._debugEnabled=s}error(s,...n){this._log(4,s,...n)}info(s,...n){this._log(2,s,...n)}warn(s,...n){this._log(3,s,...n)}done(s,...n){this._log(1,s,...n)}}r.Logger=e})(oe||={});var ea=require("node:child_process"),sf=require("node:fs"),af=W0(require("node:path")),Mr=require("vscode-uri");var Pv=require("node:events"),Gi=require("vscode-uri"),xx=W0(ye());var xA=W0(ye());var Ii=W0(ye()),Dv=2e3;function TD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function PD(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var Tn=class{interface="usb";#A=new Set;#e;#r;#s;#t;#x=!1;#n;constructor(A,e){this.#e=A;let t=A.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(s=>s.direction==="in"),this.#s=t.find(s=>s.direction==="out"),this.#t=PD(A,e)}async write(A){await this.#e.transferOut(this.#s.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#i(),()=>{this.#A.delete(e)}}#i(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),A.on("error",()=>{}),A.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let A=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(A.data&&A.data.byteLength>0)for(let e of this.#A)e.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(e=>{let r=setTimeout(e,Dv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,TD(Dv)])}},Pn=class extends Tn{constructor(A){super(A,Ii.USB_CONFIGURATION.utoInterface)}},qn=class extends Tn{constructor(A){super(A,Ii.USB_CONFIGURATION.debugInterface)}};var qD=9540,Li;function ND(){if(!Li){let{WebUSB:x}=require("usb");Li=new x({allowedDevices:[{vendorId:qD}]})}return Li}async function MD(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await ND().getDevices();for(let r of e)if((r.serialNumber||r.productName?.split(" ").pop())?.toLowerCase()===x.toLowerCase())return A.info(`Device found: ${r.productName}`),r;return null}function Ri(x){return`Device not found with serial number: ${x}`}var ID=500;function LD(x){if(x instanceof Nn)return!0;let A=x instanceof Error?x.message:String(x);return/LIBUSB_ERROR_(ACCESS|BUSY|NO_DEVICE|NOT_FOUND|IO)/.test(A)||A.startsWith(Ri(""))}var Nn=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function RD(x,A){try{return{uto:new Pn(x),debug:A?new qn(x):void 0}}catch(e){throw new Nn("Device descriptors not ready",e)}}function OD(x){return async(A,e=!0)=>{let r=await MD(A,x);if(!r)throw new Error(Ri(A));try{await r.open(),await r.selectConfiguration(xA.USB_CONFIGURATION.configurationNumber),await r.claimInterface(xA.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(xA.USB_CONFIGURATION.debugInterface);let{uto:t,debug:s}=RD(r,e);return{uto:t,debug:s,async close(){await t.stop(),await s?.stop(),r.opened&&(await r.releaseInterface(xA.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(xA.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function GD(x){return new Promise(A=>setTimeout(A,x))}async function UD(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(s){if(!LD(s)||Date.now()>=t)throw s;await GD(ID)}}function Ze(x){return{debug:(A,...e)=>x.debug(A,...e),info:(A,...e)=>x.debug(A,...e),warn:(A,...e)=>x.warn(A,...e),error:(A,...e)=>x.error(A,...e)}}async function Oi(x,A={}){let e=A.logger??new oe.Logger,r=A.transportFactory??OD(e),t=A.needDebug!==!1,s=await UD(r,x,t,A.retryMs??0),n=t?s.debug:void 0,F=Ze(e),f=n?new xA.AtCommandHandler(n,F):void 0,E=new xA.UtoMaster(s.uto,F);return{utoMaster:E,atHandler:f,transports:s,serial:x,close:async()=>{try{await E.dispose(f)}catch{}f?.dispose(),await s.close()}}}async function pv(x,A,e,r,t=!1,s=0,n){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let f=await e.readFile(A),E;try{E=await Oi(x,{logger:r,debug:t,needDebug:!1,retryMs:s,transportFactory:n});let{utoMaster:u}=E;if(t){u.on("mdnCom",m=>{r.debug("mdnCom",m)}),u.on("mdnComError",m=>{r.debug("mdnComError",m)});let D=-1;u.on("installing",m=>{m&&m!==D&&(D=m,r.info(`Upload progress: ${m}%`))})}return await u.init(),await u.requestDeviceInfo(),r.info("Device connected, starting upload..."),await u.sendFile(xA.UtoFileType.pawn,new Uint8Array(f.buffer,f.byteOffset,f.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(u){let D=u instanceof Error?u.message:String(u);return{success:!1,message:D===Ri(x)?D:`Upload failed: ${D}`}}finally{await E?.close()}}var bv=require("vscode-uri"),Mn=W0(ye());var In=class x{constructor(A,e,r,t,s){this.fs=r;this.persist=t;this.logger=s;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=bv.Utils.joinPath(A,r0.filePaths.studio.dev.mirror),s=new Mn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));s=Mn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),s=new Mn.MemoryStorage}return new x(s,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var hv=require("node:events"),Ln=require("node:fs/promises"),gv=require("node:path"),yv=W0(require("iconv-lite")),xr=W0(ye());var HD=5e3,mv=500;function jv(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function JD(x){let A=x.level===xr.DebugLogLevel.info?"":`${xr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function KD(x){if(x.length===0)return!1;let A=0,e=0;for(let r of x){e++;let t=r.codePointAt(0)??0;(t===9||t===10||t===13||t>=32&&t!==127)&&A++}return A/e>.8}var Nr=class extends hv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??HD,this.logFile=A.logFile,this.logger=A.logger}push(A,e,r){let t={seq:++this.seq,ts:Date.now(),source:A,text:e};return r&&(t.raw=Buffer.from(r).toString("base64")),this.buffer.push(t),this.buffer.length>this.capacity&&this.buffer.splice(0,this.buffer.length-this.capacity),this.emit("record",t),this.appendToFile(t),t}appendToFile(A){let e=this.logFile;e&&(this.logDirReady??=(0,Ln.mkdir)((0,gv.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,Ln.appendFile)(e,`${JSON.stringify(A)}
2338
- `,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=mv){let r=e>0?e:mv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==xr.UtoTag.LOG||!r.data)return;let t=new Uint8Array(r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",e),this.disposers.push(()=>A.off("utoFrame",e))}attachAtHandler(A){let e=new xr.DebugMaster(A,Ze(this.logger??new oe.Logger));e.on("message",r=>{let t=JD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[jv(yv.default.decode(Buffer.from(e),"win1252")),jv(Buffer.from(e).toString("utf8"))].find(KD);if(t){this.push(A,t);return}let s=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${s}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var _v=require("node:events"),gA=W0(ye()),zD=1e3,VD=1e4,WD=200,kv=new Set([gA.UtoTag.HISTDATA_RAW,gA.UtoTag.LOG,gA.UtoTag.ALERTS]),Rn=class extends _v.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let e of A.model.containers){let r=(0,gA.resolveTagForContainer)(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||kv.has(e.wTag))&&this.relevantTags.add(e.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(A){return this.deviceStamps.get(A)??null}knowsTag(A){return this.tagMap.has(A)}async refreshStamps(){try{let A=await this.utoMaster.requestStamps();if(!A)return;for(let[e,r]of this.tagMap)r.index<A.stamps.length&&this.deviceStamps.set(e,A.stamps[r.index])}catch(A){this.opts.logger?.warn(`Stamp refresh failed: ${A instanceof Error?A.message:String(A)}`)}}schedule(A){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},A),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let A=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,A?this.pullAdvancedTags(A.stamps):[]}catch(A){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:zD,VD),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,A);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(A,e){let r=this.tagMap.get(A);if(!r||r.index>=e.length)return null;let t=e[r.index],s=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let n=await this.mirrorStamp(A);return(s===void 0?t>n:t!==s)?this.pull(A,r,n,t):null}async pullTags(A){let e=[];for(let r of A){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},s=await this.mirrorStamp(r),n=await this.pull(r,t,t.historic?s:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,gA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||kv.has(A)?this.pullHistoric(A,r,t):this.pullSingle(A,t)}async pullSingle(A,e){let r=await this.utoMaster.requestUto(A,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,gA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?XD(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),s=0,n=e,F=async f=>{let E=f.filter(u=>u.stamp40>e).map(u=>(n=Math.max(n,u.stamp40),{tag:A,stamp:(0,gA.stamp40ToDbHex)(u.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:u.data}));await this.opts.storage.insertHistoricRows(E),s+=E.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,WD,F),s===0?null:this.describeChange(A,n||r)}async describeChange(A,e){let r=this.containerByTag.get(A);if(!r)return{tag:A,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:A,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function XD(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var St=(F=>(F[F.Success=0]="Success",F[F.BuildFailed=1]="BuildFailed",F[F.DeviceNotFound=2]="DeviceNotFound",F[F.UsbFailed=3]="UsbFailed",F[F.ModelMissing=7]="ModelMissing",F[F.UnknownContainer=8]="UnknownContainer",F[F.WriteForbidden=9]="WriteForbidden",F))(St||{}),Ex=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},YD=2e3,QD=3e3,ZD=3e4,x6=1e4,A6=3e4,e6=1e3,Ui="dev",wv=`/api/1/sites/${Ui}`,Sv="local",On="Device not connected",$v="device_id",Hi=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(s=>{t=s});try{await r6(r,e)}catch(s){throw this.depth--,r.then(t,t),s}try{return await A()}finally{this.depth--,t()}}};function r6(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new Ex(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Ar=class extends Pv.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new Hi;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??xx.systemTimeSource,this.logStream=new Nr({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",e=>this.emit("log",e))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new Ex("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new Ex("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new Ex(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await In.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new xx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new Ex(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=Gi.Utils.joinPath(this.opts.cwd,r0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new Ex(`No DDE model at ${r0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,xx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await Oi(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let s=t instanceof Error?t.message:String(t);throw new Ex(`Could not open device ${this.opts.serial}: ${s}`,/not found/i.test(s)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new Ex(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(e),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue($v)===null&&await this.storage.setMetadataValue($v,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new Ex(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=Ze(this.logger);this.stateManager=new xx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new xx.LocalDataManager(e,r),this.offlineSync=new xx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Rn({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??YD,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new Ex(On,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new Ex(On,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,s)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(xx.UtoCommand.DATA,r,t,s))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:Ui,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,xx.createSiteInfoFromDde)(this.ddeModel,{siteUid:Ui,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:Sv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,xx.createLocalApiHandler)(e)}buildBlueprint(){let A={};for(let e of this.ddeModel.containers){let r={};for(let t of e.fields){let s=t.alias??t.name;r[s.toLowerCase()]={alias:s}}A[e.name.toLowerCase()]=r}return A}async handleApi(A){if(!this.apiHandler)throw new Ex("Session not started",7);let e=this.writtenTag(A),r=await this.apiHandler(A);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(A){let e=A.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let s=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!s)return null;let n=(0,xx.resolveTagInModel)(this.ddeModel,decodeURIComponent(s[1]));return n===null||!(0,xx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??QD,t=this.poller;if(r<=0||!t)return!0;let s=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=s)return!1;await Tv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await z.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await gx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??ux.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof gx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=Gi.Utils.joinPath(this.opts.cwd,A??r0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??pv)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,x6,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+A6;for(let e=0;;e++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(r){if(await this.closeDevice(),this.stopped||Date.now()>=A){this.reportReconnectFailure(r);return}e===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await Tv(e6)}}reportReconnectFailure(A){let e=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(e))}async sync(A){let e=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(s=>s.outcome==="upload").map(s=>s.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new Ex(On,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new Ex(On,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:Sv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,xx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},e=[];for(let r of this.configContainers()){let t=r.alias??r.name;e.push(t);let s=await this.handleApi({path:`${wv}/containers/${encodeURIComponent(r.name)}`,method:"GET"});A[t]=s.status<400&&s.body?JSON.parse(s.body):{}}return{configs:A,order:e}}async applyConfigs(A){let e={};for(let[r,t]of Object.entries(A)){let s=this.ddeModel.byNameOrAlias(r);if(!s||s.kind!=="config"){e[r]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${r}"`};continue}let n=await this.handleApi({path:`${wv}/containers/${encodeURIComponent(s.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=n.status>=400?{ok:!1,err:t6(n.body)}:n.headers?.["x-mt-mirror"]==="stale"?{ok:!0,stale:!0}:{ok:!0}}return e}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let e=await this.storage.getLatestStampForTag(A);return e?(0,xx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??ZD)}async closeDevice(){let A=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await A?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function Tv(x){return new Promise(A=>setTimeout(A,x))}function t6(x){try{return JSON.parse(x).err??x}catch{return x}}var Rv=W0(require("node:http")),Ov=require("vscode-uri"),Gv=W0(require("yaml"));var Uv=["log","state","sync","build","uto","container-changed","error"],n6=15e3,qv=4*1024*1024,s6="127.0.0.1",i6=8765,Hv="no-store",Jv="E_NOT_FOUND",Nv="E_BAD_REQUEST",a6=2e3,o6=20;function er(x,A){return JSON.stringify({err:`${x} ${A}`})}function zA(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":Hv,...r}),x.end(e)}function F6(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function v6(x,A){if(!(F6(A)||x.token)){if(!x.allowRemote)throw new Error(`Refusing to bind to ${A} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);x.logger.warn(`Serving the unauthenticated device API on ${A} \u2014 anyone who can reach this port can write to and flash the device.`)}}function f6(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function l6(x,A){let e=x.headers.origin;typeof e=="string"&&f6(e)&&(A.setHeader("access-control-allow-origin",e),A.setHeader("access-control-allow-credentials","true"),A.setHeader("vary","origin")),A.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),A.setHeader("access-control-allow-headers","authorization,content-type"),A.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),A.setHeader("access-control-max-age","600")}function c6(x,A,e){if(!A)return!0;let r=x.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let s=process.env.MYDATANET_TOKEN;return t===A||s!==void 0&&s!==""&&t===s}var ke=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function Kv(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>qv)throw x.pause(),new ke(413,"E_TOO_LARGE",`request body exceeds ${qv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function zv(x){return x!=="GET"&&x!=="HEAD"}function Mv(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new ke(400,Nv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new ke(400,Nv,"JSON body must be an object");return A}function Iv(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function E6(x,A){let e=x[A];if(!Array.isArray(e))return;let r=e.map(Number).filter(t=>Number.isFinite(t));return r.length>0?r:void 0}function Lv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var Ji=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
2337
+ ${F}`));return}r()})})}async function FB(x,A,e){let r=lx.Utils.joinPath(x,eB);if(!await A.stat(r)){e.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await nn(x,"npm install",e);return}try{await nn(x,"npm ci",e)}catch{e.warn(`'npm ci' failed in ${x.fsPath} - falling back to 'npm install'. If package-lock.json changed afterwards, commit it.`),await nn(x,"npm install",e)}}var rF=W0(require("dotenv")),tF=require("vscode-uri");var vB=".env.local",_s;(A=>{async function x(e,r){let t=tF.Utils.joinPath(e,vB);if(await r.stat(t)){let s=await r.readFile(t);return rF.default.parse(b0.convertBlobToString(s))}return{}}A.read=x})(_s||={});var _r=W0(require("chalk")),Fe;(r=>{let x;(u=>(u[u.log=0]="log",u[u.done=1]="done",u[u.info=2]="info",u[u.warning=3]="warning",u[u.error=4]="error",u[u.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:_r.default.bgGreen.black(" DONE "),0:"",2:_r.default.bgBlueBright.black(" INFO "),3:_r.default.bgYellow.black(" WARNING "),4:_r.default.bgRed.black(" ERROR "),5:_r.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(s=console){this._logHandler=s}_log(s,n,...F){this._silent&&s!==4||(F=[r.LOG_PREFIX[s],n,...F],this._logHandler.log(...F))}set silent(s){this._silent=s}set output(s){this._logHandler=s}log(s,...n){this._log(0,s,...n)}debug(s,...n){this._debugEnabled&&this._log(5,s,...n)}set debugEnabled(s){this._debugEnabled=s}error(s,...n){this._log(4,s,...n)}info(s,...n){this._log(2,s,...n)}warn(s,...n){this._log(3,s,...n)}done(s,...n){this._log(1,s,...n)}}r.Logger=e})(Fe||={});var na=require("node:child_process"),al=require("node:fs"),ol=W0(require("node:path")),Ir=require("vscode-uri");var Nv=require("node:events"),Ji=require("vscode-uri"),xx=W0(ke());var AA=W0(ke());var Oi=W0(ke()),bv=2e3;function PD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function qD(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var Pn=class{interface="usb";#A=new Set;#e;#r;#s;#t;#x=!1;#n;constructor(A,e){this.#e=A;let t=A.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(s=>s.direction==="in"),this.#s=t.find(s=>s.direction==="out"),this.#t=qD(A,e)}async write(A){await this.#e.transferOut(this.#s.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#i(),()=>{this.#A.delete(e)}}#i(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),A.on("error",()=>{}),A.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let A=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(A.data&&A.data.byteLength>0)for(let e of this.#A)e.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(e=>{let r=setTimeout(e,bv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,PD(bv)])}},qn=class extends Pn{constructor(A){super(A,Oi.USB_CONFIGURATION.utoInterface)}},Nn=class extends Pn{constructor(A){super(A,Oi.USB_CONFIGURATION.debugInterface)}};var ND=9540,Gi;function ID(){if(!Gi){let{WebUSB:x}=require("usb");Gi=new x({allowedDevices:[{vendorId:ND}]})}return Gi}async function MD(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await ID().getDevices();for(let r of e)if((r.serialNumber||r.productName?.split(" ").pop())?.toLowerCase()===x.toLowerCase())return A.info(`Device found: ${r.productName}`),r;return null}function Ui(x){return`Device not found with serial number: ${x}`}var LD=500;function RD(x){if(x instanceof In)return!0;let A=x instanceof Error?x.message:String(x);return/LIBUSB_ERROR_(ACCESS|BUSY|NO_DEVICE|NOT_FOUND|IO)/.test(A)||A.startsWith(Ui(""))}var In=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function OD(x,A){try{return{uto:new qn(x),debug:A?new Nn(x):void 0}}catch(e){throw new In("Device descriptors not ready",e)}}function GD(x){return async(A,e=!0)=>{let r=await MD(A,x);if(!r)throw new Error(Ui(A));try{await r.open(),await r.selectConfiguration(AA.USB_CONFIGURATION.configurationNumber),await r.claimInterface(AA.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(AA.USB_CONFIGURATION.debugInterface);let{uto:t,debug:s}=OD(r,e);return{uto:t,debug:s,async close(){await t.stop(),await s?.stop(),r.opened&&(await r.releaseInterface(AA.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(AA.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function UD(x){return new Promise(A=>setTimeout(A,x))}async function HD(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(s){if(!RD(s)||Date.now()>=t)throw s;await UD(LD)}}function xr(x){return{debug:(A,...e)=>x.debug(A,...e),info:(A,...e)=>x.debug(A,...e),warn:(A,...e)=>x.warn(A,...e),error:(A,...e)=>x.error(A,...e)}}async function Hi(x,A={}){let e=A.logger??new Fe.Logger,r=A.transportFactory??GD(e),t=A.needDebug!==!1,s=await HD(r,x,t,A.retryMs??0),n=t?s.debug:void 0,F=xr(e),v=n?new AA.AtCommandHandler(n,F):void 0,E=new AA.UtoMaster(s.uto,F);return{utoMaster:E,atHandler:v,transports:s,serial:x,close:async()=>{try{await E.dispose(v)}catch{}v?.dispose(),await s.close()}}}async function mv(x,A,e,r,t=!1,s=0,n){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let v=await e.readFile(A),E;try{E=await Hi(x,{logger:r,debug:t,needDebug:!1,retryMs:s,transportFactory:n});let{utoMaster:u}=E;if(t){u.on("mdnCom",m=>{r.debug("mdnCom",m)}),u.on("mdnComError",m=>{r.debug("mdnComError",m)});let D=-1;u.on("installing",m=>{m&&m!==D&&(D=m,r.info(`Upload progress: ${m}%`))})}return await u.init(),await u.requestDeviceInfo(),r.info("Device connected, starting upload..."),await u.sendFile(AA.UtoFileType.pawn,new Uint8Array(v.buffer,v.byteOffset,v.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(u){let D=u instanceof Error?u.message:String(u);return{success:!1,message:D===Ui(x)?D:`Upload failed: ${D}`}}finally{await E?.close()}}var jv=require("vscode-uri"),Mn=W0(ke());var Ln=class x{constructor(A,e,r,t,s){this.fs=r;this.persist=t;this.logger=s;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=jv.Utils.joinPath(A,r0.filePaths.studio.dev.mirror),s=new Mn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));s=Mn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),s=new Mn.MemoryStorage}return new x(s,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var yv=require("node:events"),Rn=require("node:fs/promises"),kv=require("node:path"),_v=W0(require("iconv-lite")),Ar=W0(ke());var JD=5e3,hv=500;function gv(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function KD(x){let A=x.level===Ar.DebugLogLevel.info?"":`${Ar.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function zD(x){if(x.length===0)return!1;let A=0,e=0;for(let r of x){e++;let t=r.codePointAt(0)??0;(t===9||t===10||t===13||t>=32&&t!==127)&&A++}return A/e>.8}var Nr=class extends yv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??JD,this.logFile=A.logFile,this.logger=A.logger}push(A,e,r){let t={seq:++this.seq,ts:Date.now(),source:A,text:e};return r&&(t.raw=Buffer.from(r).toString("base64")),this.buffer.push(t),this.buffer.length>this.capacity&&this.buffer.splice(0,this.buffer.length-this.capacity),this.emit("record",t),this.appendToFile(t),t}appendToFile(A){let e=this.logFile;e&&(this.logDirReady??=(0,Rn.mkdir)((0,kv.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,Rn.appendFile)(e,`${JSON.stringify(A)}
2338
+ `,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=hv){let r=e>0?e:hv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==Ar.UtoTag.LOG||!r.data)return;let t=new Uint8Array(r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",e),this.disposers.push(()=>A.off("utoFrame",e))}attachAtHandler(A){let e=new Ar.DebugMaster(A,xr(this.logger??new Fe.Logger));e.on("message",r=>{let t=KD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[gv(_v.default.decode(Buffer.from(e),"win1252")),gv(Buffer.from(e).toString("utf8"))].find(zD);if(t){this.push(A,t);return}let s=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${s}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var Sv=require("node:events"),yA=W0(ke()),VD=1e3,WD=1e4,XD=200,wv=new Set([yA.UtoTag.HISTDATA_RAW,yA.UtoTag.LOG,yA.UtoTag.ALERTS]),On=class extends Sv.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let e of A.model.containers){let r=(0,yA.resolveTagForContainer)(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||wv.has(e.wTag))&&this.relevantTags.add(e.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(A){return this.deviceStamps.get(A)??null}knowsTag(A){return this.tagMap.has(A)}async refreshStamps(){try{let A=await this.utoMaster.requestStamps();if(!A)return;for(let[e,r]of this.tagMap)r.index<A.stamps.length&&this.deviceStamps.set(e,A.stamps[r.index])}catch(A){this.opts.logger?.warn(`Stamp refresh failed: ${A instanceof Error?A.message:String(A)}`)}}schedule(A){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},A),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let A=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,A?this.pullAdvancedTags(A.stamps):[]}catch(A){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:VD,WD),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,A);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(A,e){let r=this.tagMap.get(A);if(!r||r.index>=e.length)return null;let t=e[r.index],s=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let n=await this.mirrorStamp(A);return(s===void 0?t>n:t!==s)?this.pull(A,r,n,t):null}async pullTags(A){let e=[];for(let r of A){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},s=await this.mirrorStamp(r),n=await this.pull(r,t,t.historic?s:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,yA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||wv.has(A)?this.pullHistoric(A,r,t):this.pullSingle(A,t)}async pullSingle(A,e){let r=await this.utoMaster.requestUto(A,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,yA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?YD(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),s=0,n=e,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>(n=Math.max(n,u.stamp40),{tag:A,stamp:(0,yA.stamp40ToDbHex)(u.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:u.data}));await this.opts.storage.insertHistoricRows(E),s+=E.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,XD,F),s===0?null:this.describeChange(A,n||r)}async describeChange(A,e){let r=this.containerByTag.get(A);if(!r)return{tag:A,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:A,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function YD(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var $t=(F=>(F[F.Success=0]="Success",F[F.BuildFailed=1]="BuildFailed",F[F.DeviceNotFound=2]="DeviceNotFound",F[F.UsbFailed=3]="UsbFailed",F[F.ModelMissing=7]="ModelMissing",F[F.UnknownContainer=8]="UnknownContainer",F[F.WriteForbidden=9]="WriteForbidden",F))($t||{}),Ex=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},QD=2e3,ZD=3e3,x6=3e4,A6=1e4,e6=3e4,r6=1e3,Ki="dev",$v=`/api/1/sites/${Ki}`,Tv="local",Gn="Device not connected",Pv="device_id",zi=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(s=>{t=s});try{await t6(r,e)}catch(s){throw this.depth--,r.then(t,t),s}try{return await A()}finally{this.depth--,t()}}};function t6(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new Ex(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var er=class extends Nv.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new zi;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??xx.systemTimeSource,this.logStream=new Nr({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",e=>this.emit("log",e))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new Ex("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new Ex("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new Ex(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Ln.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new xx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new Ex(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=Ji.Utils.joinPath(this.opts.cwd,r0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new Ex(`No DDE model at ${r0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,xx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await Hi(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let s=t instanceof Error?t.message:String(t);throw new Ex(`Could not open device ${this.opts.serial}: ${s}`,/not found/i.test(s)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new Ex(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(e),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue(Pv)===null&&await this.storage.setMetadataValue(Pv,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new Ex(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=xr(this.logger);this.stateManager=new xx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new xx.LocalDataManager(e,r),this.offlineSync=new xx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new On({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??QD,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new Ex(Gn,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new Ex(Gn,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,s)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(xx.UtoCommand.DATA,r,t,s))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:Ki,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,xx.createSiteInfoFromDde)(this.ddeModel,{siteUid:Ki,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:Tv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,xx.createLocalApiHandler)(e)}buildBlueprint(){let A={};for(let e of this.ddeModel.containers){let r={};for(let t of e.fields){let s=t.alias??t.name;r[s.toLowerCase()]={alias:s}}A[e.name.toLowerCase()]=r}return A}async handleApi(A){if(!this.apiHandler)throw new Ex("Session not started",7);let e=this.writtenTag(A),r=await this.apiHandler(A);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(A){let e=A.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let s=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!s)return null;let n=(0,xx.resolveTagInModel)(this.ddeModel,decodeURIComponent(s[1]));return n===null||!(0,xx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??ZD,t=this.poller;if(r<=0||!t)return!0;let s=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=s)return!1;await qv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await z.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await gx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??ux.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof gx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=Ji.Utils.joinPath(this.opts.cwd,A??r0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??mv)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,A6,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+e6;for(let e=0;;e++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(r){if(await this.closeDevice(),this.stopped||Date.now()>=A){this.reportReconnectFailure(r);return}e===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await qv(r6)}}reportReconnectFailure(A){let e=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(e))}async sync(A){let e=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(s=>s.outcome==="upload").map(s=>s.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new Ex(Gn,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new Ex(Gn,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:Tv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,xx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},e=[];for(let r of this.configContainers()){let t=r.alias??r.name;e.push(t);let s=await this.handleApi({path:`${$v}/containers/${encodeURIComponent(r.name)}`,method:"GET"});A[t]=s.status<400&&s.body?JSON.parse(s.body):{}}return{configs:A,order:e}}async applyConfigs(A){let e={};for(let[r,t]of Object.entries(A)){let s=this.ddeModel.byNameOrAlias(r);if(!s||s.kind!=="config"){e[r]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${r}"`};continue}let n=await this.handleApi({path:`${$v}/containers/${encodeURIComponent(s.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=n.status>=400?{ok:!1,err:n6(n.body)}:n.headers?.["x-mt-mirror"]==="stale"?{ok:!0,stale:!0}:{ok:!0}}return e}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let e=await this.storage.getLatestStampForTag(A);return e?(0,xx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??x6)}async closeDevice(){let A=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await A?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function qv(x){return new Promise(A=>setTimeout(A,x))}function n6(x){try{return JSON.parse(x).err??x}catch{return x}}var Gv=W0(require("node:http")),Uv=require("vscode-uri"),Hv=W0(require("yaml"));var Jv=["log","state","sync","build","uto","container-changed","error"],s6=15e3,Iv=4*1024*1024,i6="127.0.0.1",a6=8765,Kv="no-store",zv="E_NOT_FOUND",Mv="E_BAD_REQUEST",o6=2e3,F6=20;function rr(x,A){return JSON.stringify({err:`${x} ${A}`})}function VA(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":Kv,...r}),x.end(e)}function v6(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function l6(x,A){if(!(v6(A)||x.token)){if(!x.allowRemote)throw new Error(`Refusing to bind to ${A} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);x.logger.warn(`Serving the unauthenticated device API on ${A} \u2014 anyone who can reach this port can write to and flash the device.`)}}function f6(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function c6(x,A){let e=x.headers.origin;typeof e=="string"&&f6(e)&&(A.setHeader("access-control-allow-origin",e),A.setHeader("access-control-allow-credentials","true"),A.setHeader("vary","origin")),A.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),A.setHeader("access-control-allow-headers","authorization,content-type"),A.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),A.setHeader("access-control-max-age","600")}function E6(x,A,e){if(!A)return!0;let r=x.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let s=process.env.MYDATANET_TOKEN;return t===A||s!==void 0&&s!==""&&t===s}var _e=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function Vv(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>Iv)throw x.pause(),new _e(413,"E_TOO_LARGE",`request body exceeds ${Iv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function Wv(x){return x!=="GET"&&x!=="HEAD"}function Lv(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new _e(400,Mv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new _e(400,Mv,"JSON body must be an object");return A}function Rv(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function B6(x,A){let e=x[A];if(!Array.isArray(e))return;let r=e.map(Number).filter(t=>Number.isFinite(t));return r.length>0?r:void 0}function Ov(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var Vi=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
2339
2339
 
2340
- `),n6),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
2340
+ `),s6),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
2341
2341
  data: ${JSON.stringify(e)}
2342
2342
 
2343
- `;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,r)}writeAll(A){for(let e of this.clients)this.write(e,A)}write(A,e){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(e)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=o6&&(this.clients.delete(A),A.res.destroy())}subscribe(A,e,r){let t=new URLSearchParams(r).get("types"),s=t?new Set(t.split(",").map(F=>F.trim()).filter(F=>Uv.includes(F))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":Hv,connection:"keep-alive"}),e.write(`: connected
2343
+ `;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,r)}writeAll(A){for(let e of this.clients)this.write(e,A)}write(A,e){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(e)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=F6&&(this.clients.delete(A),A.res.destroy())}subscribe(A,e,r){let t=new URLSearchParams(r).get("types"),s=t?new Set(t.split(",").map(F=>F.trim()).filter(F=>Jv.includes(F))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":Kv,connection:"keep-alive"}),e.write(`: connected
2344
2344
 
2345
- `);let n={res:e,types:s,stalled:0};this.clients.add(n),A.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function B6(x,A,e,r){let t=A.method??"GET",s={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([F,f])=>[F,Array.isArray(f)?f.join(","):f??""])),body:zv(t)?await Kv(A):null},n=await x.handleApi(s);zA(e,n.status,n.body,n.headers)}async function C6(x,A,e,r){let{session:t}=x;switch(A){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(Iv(r,"file"));case"POST /dev/sync":return t.sync(E6(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Lv(e,"since",0),Lv(e,"limit",500))};case"POST /dev/at":return d6(t,Iv(r,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return m6(x);case"GET /dev/configs":return t.configs();default:return}}async function d6(x,A){if(!A)throw new ke(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function u6(x,A,e,r){let[t,s=""]=r.split("?"),n=A.method??"GET",F=zv(n)?await Kv(A):"";try{if(n==="PUT"&&t==="/dev/configs"){let E=await x.session.applyConfigs(Mv(F)),u=Object.values(E).every(D=>D.ok);zA(e,u?200:400,JSON.stringify({results:E}));return}let f=await C6(x,`${n} ${t}`,new URLSearchParams(s),Mv(F));if(f===void 0){zA(e,404,er(Jv,`no route for ${n} ${t}`));return}zA(e,200,JSON.stringify(f))}catch(f){if(f instanceof ke){zA(e,f.status,er(f.code,f.message));return}zA(e,500,er("E_DEV",f instanceof Error?f.message:String(f)))}}async function D6(x,A,e,r){if(l6(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",s=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(s).get("token")??void 0:void 0;if(!c6(e,x.token,F)){zA(r,401,er("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await B6(x.session,e,r,t):n?A.subscribe(e,r,s):t.startsWith("/dev/")?await u6(x,e,r,t):zA(r,404,er(Jv,`no route for ${t}`))}catch(f){if(f instanceof ke&&!r.headersSent){zA(r,f.status,er(f.code,f.message),{connection:"close"});return}throw f}}async function Ki(x){let{session:A,logger:e}=x,r=x.host??s6;v6(x,r);let t=new Ji;for(let F of Uv)A.on(F,f=>t.broadcast(F,f));let s=Rv.default.createServer((F,f)=>{D6(x,t,F,f).catch(E=>{let u=E instanceof Error?E.message:String(E);e.error(`Dev server error: ${u}`),f.headersSent||zA(f,500,er("E_INTERNAL",u))})});try{await new Promise((F,f)=>{s.once("error",f),s.listen(x.port??i6,r,()=>{s.off("error",f),F()})})}catch(F){throw t.close(),F}s.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=s.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),s.closeIdleConnections(),s.closeAllConnections(),await Promise.race([new Promise(F=>s.close(()=>F())),p6(a6)])}}}function p6(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var b6={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/configs":{get:{summary:"Every config-class container, decoded (settings/config0..9/configA..C)"},put:{summary:"Apply partial writes to one or more config-class containers"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function m6(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=Ov.Utils.joinPath(x.cwd,r0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=Gv.default.parse(r);typeof t=="object"&&t!==null&&Object.assign(A,t)}catch(r){let t=r instanceof Error?r.message:String(r);x.logger.warn(`Could not parse ${r0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...b6},A}var $t=require("node:fs"),Vv=require("node:path"),Wv=require("vscode-uri");var j6=300,h6=new Set([r0.fileNames.projectSettings,r0.filePaths.appIni]);function zi(x){return x instanceof Error?x.message:String(x)}function g6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function y6(x){let A=[],e=r=>{A.push(r);for(let t of(0,$t.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,Vv.join)(r,t.name))};try{e(x)}catch{}return A}function Xv(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??j6,s=[],n,F=!1,f=!1,E=async()=>{if(F){f=!0;return}F=!0;try{let _=await e.build();if(_.ok!==!0){r.error(`Rebuild failed: ${_.message??"see diagnostics"}`);return}if(x.flash!==!1){let h=await e.flash();if(!h.success){r.error(h.message);return}}await e.sync()}catch(_){r.error(`Watch cycle failed: ${_ instanceof Error?_.message:String(_)}`)}finally{F=!1,f&&(f=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let D=_=>(h,S)=>{let P=typeof S=="string"?S.replace(/\\/g,"/"):null;(!_||P!==null&&_(P))&&u()},m=(_,h,S)=>{let P=Wv.Utils.joinPath(A,_);try{s.push((0,$t.watch)(P.fsPath,{recursive:h},D(S)))}catch(N){if(g6(N))return;if(h){r.warn(`Recursive file watching is not available on this platform (${zi(N)}) \u2014 watching every directory under ${_} individually.`);for(let R of y6(P.fsPath))try{s.push((0,$t.watch)(R,{recursive:!1},D(S)))}catch(O){r.warn(`Could not watch ${R}: ${zi(O)}`)}return}r.warn(`Could not watch ${_}: ${zi(N)}`)}};return m(r0.filePaths.dlo.path,!0),m(r0.filePaths.dde.path,!0),m(".",!1,_=>h6.has(_)),{close(){n&&clearTimeout(n);for(let _ of s)_.close()}}}var k6=new Set(["uto-meta","state","console","command","recorder-drop"]),_6=".ndjson",w6=[".db",".sqlite",".sqlite3"];function Qv(x,A,e,r){if(!k6.has(x))return{ts:r,type:x,owner:e??null,bytes:A};try{return{ts:r,type:x,owner:e??null,json:JSON.parse(new TextDecoder().decode(A))}}catch{return{ts:r,type:x,owner:e??null,bytes:A}}}function S6(x){let A=x.split(/\r?\n/).filter(e=>e.trim()!=="");if(A.length===0)throw new Error("flight recording: no content lines in NDJSON input");return A}function $6(x){let A=JSON.parse(x[0]),e=new Map;for(let r of x.slice(1)){let t=JSON.parse(r),s=new Uint8Array(Buffer.from(t.data,"base64")),n=Qv(t.type,s,t.owner,t.ts),F=e.get(t.sessionId);F?F.push(n):e.set(t.sessionId,[n])}return{manifest:A,recordsBySession:e}}function T6(x){if(x.length===0)return;let A=x[0].ts,e=x[0].ts;for(let r of x)r.ts<A&&(A=r.ts),r.ts>e&&(e=r.ts);return{min:A,max:e}}function P6(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(r=>{let t=x.sessions.find(F=>F.sessionId===r),s=A.get(r)??[],n=T6(s);return{id:r,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:n?.min??x.exportedTs,endedTs:n?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:s.length}})}async function q6(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=$6(S6(e));return{sessions:P6(r,t),recordsFor:n=>(t.get(n)??[]).slice().sort((F,f)=>F.ts-f.ts),warnings:[]}}async function N6(){let nodeRequire=eval("require"),initSqlJs=(()=>{try{return nodeRequire("sql.js")}catch(x){throw new Error(`sql.js is not available in this runtime \u2014 replay a .db recording with the studio CLI itself (${x instanceof Error?x.message:x})`)}})();return initSqlJs({locateFile:()=>nodeRequire.resolve("sql.js/dist/sql-wasm.wasm")})}function Yv(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function Tt(x){return x==null?null:String(x)}function Vi(x){return typeof x=="number"?x:Number(x)}function M6(x,A,e){return x instanceof Uint8Array?x:typeof x=="string"?new TextEncoder().encode(x):(e.push(`flight recording: ${A} has a non-BLOB 'data' column (${typeof x}) \u2014 treated as empty`),new Uint8Array(0))}async function I6(x,A){let e=await N6(),r=await A.readFile(x),t=new e.Database(r);try{let s=[],n=new Map;for(let f of Yv(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let E=String(f.session_id),u=String(f.type),D=Vi(f.ts),m=M6(f.data,`${u}@${D} (session ${E})`,s),_=Qv(u,m,Tt(f.owner),D),h=n.get(E);h?h.push(_):n.set(E,[_])}return{sessions:Yv(t,"SELECT session_id, started_ts, ended_ts, device_id, serial, platform, app_version FROM sessions").map(f=>{let E=String(f.session_id);return{id:E,serial:Tt(f.serial),deviceId:Tt(f.device_id),startedTs:Vi(f.started_ts),endedTs:f.ended_ts===null||f.ended_ts===void 0?null:Vi(f.ended_ts),appVersion:Tt(f.app_version),platform:Tt(f.platform),recordCount:(n.get(E)??[]).length}}),recordsFor:f=>n.get(f)??[],warnings:s}}finally{t.close()}}async function Wi(x,A){let e=x.path.toLowerCase();if(e.endsWith(_6))return q6(x,A);if(w6.some(r=>e.endsWith(r)))return I6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function Xi(x,A){if(A){let e=x.sessions.find(r=>r.id===A);if(!e){let r=x.sessions.map(t=>t.id).join(", ")||"(none)";throw new Error(`No session '${A}' in this recording. Known sessions: ${r}`)}return e}if(x.sessions.length===0)throw new Error("Flight recording contains no sessions");return x.sessions.reduce((e,r)=>r.recordCount>e.recordCount?r:e)}var ef=require("node:events"),rf=W0(ye());var Zv="at-tx",Yi="at-rx",L6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function R6(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function xf(x){let A=L6.exec(R6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function O6(x,A){if(x.length!==A.length)return!1;for(let e=0;e<x.length;e++)if(x[e]!==A[e])return!1;return!0}function G6(x,A){if(O6(x,A))return!0;let e=xf(x),r=xf(A);return e!==null&&r!==null&&e===r}function U6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function H6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function Qi(x){return`hex[${U6(x)}] ascii["${H6(x)}"]`}function J6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function Zi(x){return x===void 0?1:x==="max"||x<=0?0:x}var Gn=class{interface="usb";entries;speed;baseTs;onWarning;callbacks=new Set;timers=[];matchCursor=0;started=!1;constructor(A,e={}){this.entries=A.filter(r=>r.type===Zv||r.type===Yi).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=Zi(e.speed),this.onWarning=e.onWarning??(()=>{}),this.baseTs=e.baseTs??this.entries[0]?.record.ts??0}onData(A){return this.callbacks.add(A),()=>this.callbacks.delete(A)}start(){if(!this.started){this.started=!0;for(let A of this.entries){if(A.record.type!==Yi)continue;let e=this.speed>0?Math.max(0,(A.record.ts-this.baseTs)/this.speed):0,r=setTimeout(()=>{A.timer=void 0,this.emitEntry(A)},e);r.unref?.(),A.timer=r,this.timers.push(r)}}}stop(){for(let A of this.timers)clearTimeout(A);this.timers.length=0}advanceToNextTx(){for(;this.entries[this.matchCursor]&&this.entries[this.matchCursor].record.type!==Zv;)this.matchCursor++;return this.entries[this.matchCursor]}async write(A){let e=new Uint8Array(A),r=this.advanceToNextTx();if(!r){this.onWarning(`replay: unmatched AT command \u2014 recording exhausted, no at-tx left to match. actual: ${Qi(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!G6(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${Qi(t)} actual: ${Qi(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===Yi;)this.emitEntry(this.entries[this.matchCursor],!0),this.matchCursor++}emitEntry(A,e=!1){if(A.consumed&&!e)return;A.timer&&(clearTimeout(A.timer),A.timer=void 0),A.consumed=!0;let r=J6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var Un="state",Aa="console",tf="command",nf="uto-meta",xa="at",K6=new Set([Un,Aa,tf,nf]),z6="not available in replay mode",Af="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function V6(x){return x===Un?"state":x===Aa?"console":x===nf?"uto":xa}function W6(x,A){return x===Aa&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===tf&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Pt=class extends ef.EventEmitter{logStream;meta;file;speed;transport;atHandler;timers=[];lastState=null;started=!1;stopped=!1;constructor(A){super(),this.meta=A.session,this.file=A.file,this.speed=A.speed??1,this.logStream=new Nr({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",t=>this.emit("log",t));let e=A.recording.recordsFor(A.session.id),r=e.length>0?e[0].ts:0;this.transport=new Gn(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(xa,t)}),this.atHandler=new rf.AtCommandHandler(this.transport,Ze(A.logger)),this.logStream.attachAtHandler(this.atHandler),this.scheduleAnnotations(e,r)}get serial(){return this.meta.serial??this.meta.id}scheduleAnnotations(A,e){let r=Zi(this.speed);for(let t of A){if(!K6.has(t.type))continue;let s=r>0?Math.max(0,(t.ts-e)/r):0,n=setTimeout(()=>this.emitAnnotation(t),s);n.unref?.(),this.timers.push(n)}}emitAnnotation(A){A.type===Un&&(this.lastState=A.json??null,this.emit(Un,this.lastState)),this.logStream.push(V6(A.type),W6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:Af})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new Ex(z6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(xa,`> ${A}`),this.atHandler.sendRaw(A)}async state(){return this.lastState}localDataSnapshot(){return null}async configs(){return{configs:{},order:[]}}async applyConfigs(A){let e={};for(let r of Object.keys(A))e[r]={ok:!1,err:Af};return e}async stop(){if(!this.stopped){this.stopped=!0;for(let A of this.timers)clearTimeout(A);this.transport.stop(),this.atHandler.dispose(),await this.logStream.dispose(),this.removeAllListeners()}}};var X6="details";function Y6(){return[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles]}async function of(x,A,e){let r=e.logger??new oe.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return Z6(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new Ar({cwd:x,fs:A,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??Y6(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",E=>r.warn(E instanceof Error?E.message:String(E)));try{await t.start()}catch(E){throw await t.stop(),E}let s,n,F;try{s=await Ki({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=Xv({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=Ff(x,t,s.url,e.pov,r))}catch(E){throw await s?.close(),await t.stop(),E}let f=s;return{url:f.url,port:f.port,session:t,apmId:t.status().apmId,async close(){n?.close(),vf(F,r),await f.close(),await t.stop()}}}function Q6(x,A){return af.isAbsolute(A)?Mr.URI.file(A):Mr.Utils.joinPath(x,A)}async function Z6(x,A,e,r){let t=Q6(x,e.replay),s=await Wi(t,A);for(let D of s.warnings)r.warn(D);let n=Xi(s,e.session),F=new Pt({file:t.fsPath,recording:s,session:n,speed:e.speed,logger:r,logFile:e.logFile});F.on("error",D=>r.warn(D instanceof Error?D.message:String(D))),F.start();let f,E;try{f=await Ki({session:F,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(E=Ff(x,F,f.url,e.pov,r))}catch(D){throw await f?.close(),await F.stop(),D}let u=f;return{url:u.url,port:u.port,session:F,apmId:F.status().apmId,async close(){vf(E,r),await u.close(),await F.stop()}}}function Ff(x,A,e,r,t){let s=typeof r=="string"&&r.length>0?r:X6,n=Mr.Utils.joinPath(x,"pov",s);if(!(0,sf.existsSync)(Mr.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,ea.spawn)("npm",["run","dev"],{cwd:n.fsPath,env:{...process.env,MYDATANET_HOST:e},shell:process.platform==="win32",detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),f=E=>{for(let u of E.toString("utf8").split(/\r?\n/)){let D=u.trim();D&&A.logStream.push("pov",D)}};return F.stdout?.on("data",f),F.stderr?.on("data",f),F.on("error",E=>t.error(`POV dev server failed: ${E.message}`)),t.info(`POV dev server: npm run dev in ${n.fsPath} (MYDATANET_HOST=${e})`),F}function vf(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,ea.spawn)("taskkill",["/PID",String(x.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-x.pid,"SIGTERM")}catch(e){A.debug(`Could not stop the POV dev server: ${e instanceof Error?e.message:String(e)}`),x.kill()}}var ff=require("uuid"),x7="b4baec47-0ba4-4e37-b237-8f9cde42b8dd",ra=(t=>(t.Get="GET",t.Post="POST",t.Put="PUT",t.Delete="DELETE",t))(ra||{});var Hn=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:s,authHeader:n,logger:F}=A;this.domain=this.normalizeServerUrl(t),this.auth=n||(s?`Bearer ${s}`:""),this.logger=F}else this.domain=this.normalizeServerUrl(A),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,e,r){let t=`${this.domain}${e}`,s={Authorization:this.auth},n={method:A,headers:s};r&&(r instanceof FormData?n.body=r:(s["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let f=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${f}`)}return F.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,e){this.logger?.info(`Uploading development tag ${A}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(A){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,e){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${e}`)}catch{return null}}async createDevelopmentSite(A,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let s=await this.getSite(A,e.name.toLowerCase());if(s)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${s._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${s._uid}`),s._uid}catch(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.message}`);else return s._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,e){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:e})}catch{}}};function ta(x){return(0,ff.v5)(x,x7)}async function lf(x,A,e,r,t,s,n){let F=await z.read(x,A),f=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),E=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=await z.isApmPartEnabled(x,A,p0.Part.dlo,F),D=u&&r,m=D?r.toUpperCase():`${E}_${f}`,_=D?r:m,h=n||m;return h.length>50&&(e.warn(`Site name "${h}" is too long. Truncating to 50 characters.`),h=h.substring(0,50)),{apmId:ta(_),applicationId:null,name:h,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:s}}async function A7(x,A,e,r,t,s,n=!1){if(s.length>0)for(let F of s){let[f,E]=F.split("@");await Z0.installDependency(x,A,e,r,t,f,E||null,n)}else await Z0.installDependencies(x,A,e,r,t);await Z0.installNpmInApmParts(x,A,e)}async function e7(x,A,e,r,t=null,s=!0,n){return await z.validateBasicManifest(x,A,null),gx.buildAll(x,A,e,r,t,s,n)}async function r7(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await z.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function t7(x,A,e,r,t,s,n,F){e.info("Publishing package...");let f=await r7(s);if(F)await gx.publishArchive(x,A,e,t,r,F,n,f);else return await gx.validatePublishSettings(x,A,t,r),gx.release(x,A,e,r,t,n,f)}async function n7(x,A,e,r,t,s){return gx.pack(x,A,e,r,t,s)}0&&(module.exports={APM,DDE,DDE_Core,DFILES,DLO,DefaultFiles,Dependencies,DevError,DevExitCode,DevSession,DeviceProfiles,Diagnostics,ENV,Globals,Helper,HttpMethod,Library,Log,Manifest,MyDatanetClient,Package,Registry,build,buildDevelopmentInstallInfo,dev,generateDevApmId,install,pack,publish});
2345
+ `);let n={res:e,types:s,stalled:0};this.clients.add(n),A.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function C6(x,A,e,r){let t=A.method??"GET",s={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([F,v])=>[F,Array.isArray(v)?v.join(","):v??""])),body:Wv(t)?await Vv(A):null},n=await x.handleApi(s);VA(e,n.status,n.body,n.headers)}async function d6(x,A,e,r){let{session:t}=x;switch(A){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(Rv(r,"file"));case"POST /dev/sync":return t.sync(B6(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Ov(e,"since",0),Ov(e,"limit",500))};case"POST /dev/at":return u6(t,Rv(r,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return j6(x);case"GET /dev/configs":return t.configs();default:return}}async function u6(x,A){if(!A)throw new _e(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function D6(x,A,e,r){let[t,s=""]=r.split("?"),n=A.method??"GET",F=Wv(n)?await Vv(A):"";try{if(n==="PUT"&&t==="/dev/configs"){let E=await x.session.applyConfigs(Lv(F)),u=Object.values(E).every(D=>D.ok);VA(e,u?200:400,JSON.stringify({results:E}));return}let v=await d6(x,`${n} ${t}`,new URLSearchParams(s),Lv(F));if(v===void 0){VA(e,404,rr(zv,`no route for ${n} ${t}`));return}VA(e,200,JSON.stringify(v))}catch(v){if(v instanceof _e){VA(e,v.status,rr(v.code,v.message));return}VA(e,500,rr("E_DEV",v instanceof Error?v.message:String(v)))}}async function p6(x,A,e,r){if(c6(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",s=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(s).get("token")??void 0:void 0;if(!E6(e,x.token,F)){VA(r,401,rr("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await C6(x.session,e,r,t):n?A.subscribe(e,r,s):t.startsWith("/dev/")?await D6(x,e,r,t):VA(r,404,rr(zv,`no route for ${t}`))}catch(v){if(v instanceof _e&&!r.headersSent){VA(r,v.status,rr(v.code,v.message),{connection:"close"});return}throw v}}async function Wi(x){let{session:A,logger:e}=x,r=x.host??i6;l6(x,r);let t=new Vi;for(let F of Jv)A.on(F,v=>t.broadcast(F,v));let s=Gv.default.createServer((F,v)=>{p6(x,t,F,v).catch(E=>{let u=E instanceof Error?E.message:String(E);e.error(`Dev server error: ${u}`),v.headersSent||VA(v,500,rr("E_INTERNAL",u))})});try{await new Promise((F,v)=>{s.once("error",v),s.listen(x.port??a6,r,()=>{s.off("error",v),F()})})}catch(F){throw t.close(),F}s.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=s.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),s.closeIdleConnections(),s.closeAllConnections(),await Promise.race([new Promise(F=>s.close(()=>F())),b6(o6)])}}}function b6(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var m6={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/configs":{get:{summary:"Every config-class container, decoded (settings/config0..9/configA..C)"},put:{summary:"Apply partial writes to one or more config-class containers"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function j6(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=Uv.Utils.joinPath(x.cwd,r0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=Hv.default.parse(r);typeof t=="object"&&t!==null&&Object.assign(A,t)}catch(r){let t=r instanceof Error?r.message:String(r);x.logger.warn(`Could not parse ${r0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...m6},A}var Tt=require("node:fs"),Xv=require("node:path"),Yv=require("vscode-uri");var h6=300,g6=new Set([r0.fileNames.projectSettings,r0.filePaths.appIni]);function Xi(x){return x instanceof Error?x.message:String(x)}function y6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function k6(x){let A=[],e=r=>{A.push(r);for(let t of(0,Tt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,Xv.join)(r,t.name))};try{e(x)}catch{}return A}function Qv(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??h6,s=[],n,F=!1,v=!1,E=async()=>{if(F){v=!0;return}F=!0;try{let _=await e.build();if(_.ok!==!0){r.error(`Rebuild failed: ${_.message??"see diagnostics"}`);return}if(x.flash!==!1){let h=await e.flash();if(!h.success){r.error(h.message);return}}await e.sync()}catch(_){r.error(`Watch cycle failed: ${_ instanceof Error?_.message:String(_)}`)}finally{F=!1,v&&(v=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let D=_=>(h,S)=>{let P=typeof S=="string"?S.replace(/\\/g,"/"):null;(!_||P!==null&&_(P))&&u()},m=(_,h,S)=>{let P=Yv.Utils.joinPath(A,_);try{s.push((0,Tt.watch)(P.fsPath,{recursive:h},D(S)))}catch(N){if(y6(N))return;if(h){r.warn(`Recursive file watching is not available on this platform (${Xi(N)}) \u2014 watching every directory under ${_} individually.`);for(let R of k6(P.fsPath))try{s.push((0,Tt.watch)(R,{recursive:!1},D(S)))}catch(U){r.warn(`Could not watch ${R}: ${Xi(U)}`)}return}r.warn(`Could not watch ${_}: ${Xi(N)}`)}};return m(r0.filePaths.dlo.path,!0),m(r0.filePaths.dde.path,!0),m(".",!1,_=>g6.has(_)),{close(){n&&clearTimeout(n);for(let _ of s)_.close()}}}var _6=new Set(["uto-meta","state","console","command","recorder-drop"]),w6=".ndjson",S6=[".db",".sqlite",".sqlite3"];function xl(x,A,e,r){if(!_6.has(x))return{ts:r,type:x,owner:e??null,bytes:A};try{return{ts:r,type:x,owner:e??null,json:JSON.parse(new TextDecoder().decode(A))}}catch{return{ts:r,type:x,owner:e??null,bytes:A}}}function $6(x){let A=x.split(/\r?\n/).filter(e=>e.trim()!=="");if(A.length===0)throw new Error("flight recording: no content lines in NDJSON input");return A}function T6(x){let A=JSON.parse(x[0]),e=new Map;for(let r of x.slice(1)){let t=JSON.parse(r),s=new Uint8Array(Buffer.from(t.data,"base64")),n=xl(t.type,s,t.owner,t.ts),F=e.get(t.sessionId);F?F.push(n):e.set(t.sessionId,[n])}return{manifest:A,recordsBySession:e}}function P6(x){if(x.length===0)return;let A=x[0].ts,e=x[0].ts;for(let r of x)r.ts<A&&(A=r.ts),r.ts>e&&(e=r.ts);return{min:A,max:e}}function q6(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(r=>{let t=x.sessions.find(F=>F.sessionId===r),s=A.get(r)??[],n=P6(s);return{id:r,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:n?.min??x.exportedTs,endedTs:n?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:s.length}})}async function N6(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=T6($6(e));return{sessions:q6(r,t),recordsFor:n=>(t.get(n)??[]).slice().sort((F,v)=>F.ts-v.ts),warnings:[]}}async function I6(){let nodeRequire=eval("require"),initSqlJs=(()=>{try{return nodeRequire("sql.js")}catch(x){throw new Error(`sql.js is not available in this runtime \u2014 replay a .db recording with the studio CLI itself (${x instanceof Error?x.message:x})`)}})();return initSqlJs({locateFile:()=>nodeRequire.resolve("sql.js/dist/sql-wasm.wasm")})}function Zv(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function Pt(x){return x==null?null:String(x)}function Yi(x){return typeof x=="number"?x:Number(x)}function M6(x,A,e){return x instanceof Uint8Array?x:typeof x=="string"?new TextEncoder().encode(x):(e.push(`flight recording: ${A} has a non-BLOB 'data' column (${typeof x}) \u2014 treated as empty`),new Uint8Array(0))}async function L6(x,A){let e=await I6(),r=await A.readFile(x),t=new e.Database(r);try{let s=[],n=new Map;for(let v of Zv(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let E=String(v.session_id),u=String(v.type),D=Yi(v.ts),m=M6(v.data,`${u}@${D} (session ${E})`,s),_=xl(u,m,Pt(v.owner),D),h=n.get(E);h?h.push(_):n.set(E,[_])}return{sessions:Zv(t,"SELECT session_id, started_ts, ended_ts, device_id, serial, platform, app_version FROM sessions").map(v=>{let E=String(v.session_id);return{id:E,serial:Pt(v.serial),deviceId:Pt(v.device_id),startedTs:Yi(v.started_ts),endedTs:v.ended_ts===null||v.ended_ts===void 0?null:Yi(v.ended_ts),appVersion:Pt(v.app_version),platform:Pt(v.platform),recordCount:(n.get(E)??[]).length}}),recordsFor:v=>n.get(v)??[],warnings:s}}finally{t.close()}}async function Qi(x,A){let e=x.path.toLowerCase();if(e.endsWith(w6))return N6(x,A);if(S6.some(r=>e.endsWith(r)))return L6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function Zi(x,A){if(A){let e=x.sessions.find(r=>r.id===A);if(!e){let r=x.sessions.map(t=>t.id).join(", ")||"(none)";throw new Error(`No session '${A}' in this recording. Known sessions: ${r}`)}return e}if(x.sessions.length===0)throw new Error("Flight recording contains no sessions");return x.sessions.reduce((e,r)=>r.recordCount>e.recordCount?r:e)}var tl=require("node:events"),nl=W0(ke());var Al="at-tx",xa="at-rx",R6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function O6(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function el(x){let A=R6.exec(O6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function G6(x,A){if(x.length!==A.length)return!1;for(let e=0;e<x.length;e++)if(x[e]!==A[e])return!1;return!0}function U6(x,A){if(G6(x,A))return!0;let e=el(x),r=el(A);return e!==null&&r!==null&&e===r}function H6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function J6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function Aa(x){return`hex[${H6(x)}] ascii["${J6(x)}"]`}function K6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function ea(x){return x===void 0?1:x==="max"||x<=0?0:x}var Un=class{interface="usb";entries;speed;baseTs;onWarning;callbacks=new Set;timers=[];matchCursor=0;started=!1;constructor(A,e={}){this.entries=A.filter(r=>r.type===Al||r.type===xa).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=ea(e.speed),this.onWarning=e.onWarning??(()=>{}),this.baseTs=e.baseTs??this.entries[0]?.record.ts??0}onData(A){return this.callbacks.add(A),()=>this.callbacks.delete(A)}start(){if(!this.started){this.started=!0;for(let A of this.entries){if(A.record.type!==xa)continue;let e=this.speed>0?Math.max(0,(A.record.ts-this.baseTs)/this.speed):0,r=setTimeout(()=>{A.timer=void 0,this.emitEntry(A)},e);r.unref?.(),A.timer=r,this.timers.push(r)}}}stop(){for(let A of this.timers)clearTimeout(A);this.timers.length=0}advanceToNextTx(){for(;this.entries[this.matchCursor]&&this.entries[this.matchCursor].record.type!==Al;)this.matchCursor++;return this.entries[this.matchCursor]}async write(A){let e=new Uint8Array(A),r=this.advanceToNextTx();if(!r){this.onWarning(`replay: unmatched AT command \u2014 recording exhausted, no at-tx left to match. actual: ${Aa(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!U6(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${Aa(t)} actual: ${Aa(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===xa;)this.emitEntry(this.entries[this.matchCursor],!0),this.matchCursor++}emitEntry(A,e=!1){if(A.consumed&&!e)return;A.timer&&(clearTimeout(A.timer),A.timer=void 0),A.consumed=!0;let r=K6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var Hn="state",ta="console",sl="command",il="uto-meta",ra="at",z6=new Set([Hn,ta,sl,il]),V6="not available in replay mode",rl="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function W6(x){return x===Hn?"state":x===ta?"console":x===il?"uto":ra}function X6(x,A){return x===ta&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===sl&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var qt=class extends tl.EventEmitter{logStream;meta;file;speed;transport;atHandler;timers=[];lastState=null;started=!1;stopped=!1;constructor(A){super(),this.meta=A.session,this.file=A.file,this.speed=A.speed??1,this.logStream=new Nr({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",t=>this.emit("log",t));let e=A.recording.recordsFor(A.session.id),r=e.length>0?e[0].ts:0;this.transport=new Un(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(ra,t)}),this.atHandler=new nl.AtCommandHandler(this.transport,xr(A.logger)),this.logStream.attachAtHandler(this.atHandler),this.scheduleAnnotations(e,r)}get serial(){return this.meta.serial??this.meta.id}scheduleAnnotations(A,e){let r=ea(this.speed);for(let t of A){if(!z6.has(t.type))continue;let s=r>0?Math.max(0,(t.ts-e)/r):0,n=setTimeout(()=>this.emitAnnotation(t),s);n.unref?.(),this.timers.push(n)}}emitAnnotation(A){A.type===Hn&&(this.lastState=A.json??null,this.emit(Hn,this.lastState)),this.logStream.push(W6(A.type),X6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:rl})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new Ex(V6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(ra,`> ${A}`),this.atHandler.sendRaw(A)}async state(){return this.lastState}localDataSnapshot(){return null}async configs(){return{configs:{},order:[]}}async applyConfigs(A){let e={};for(let r of Object.keys(A))e[r]={ok:!1,err:rl};return e}async stop(){if(!this.stopped){this.stopped=!0;for(let A of this.timers)clearTimeout(A);this.transport.stop(),this.atHandler.dispose(),await this.logStream.dispose(),this.removeAllListeners()}}};var Y6="details";function Q6(){return[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles]}async function Fl(x,A,e){let r=e.logger??new Fe.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return x7(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new er({cwd:x,fs:A,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??Q6(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",E=>r.warn(E instanceof Error?E.message:String(E)));try{await t.start()}catch(E){throw await t.stop(),E}let s,n,F;try{s=await Wi({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=Qv({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=vl(x,t,s.url,e.pov,r))}catch(E){throw await s?.close(),await t.stop(),E}let v=s;return{url:v.url,port:v.port,session:t,apmId:t.status().apmId,async close(){n?.close(),ll(F,r),await v.close(),await t.stop()}}}function Z6(x,A){return ol.isAbsolute(A)?Ir.URI.file(A):Ir.Utils.joinPath(x,A)}async function x7(x,A,e,r){let t=Z6(x,e.replay),s=await Qi(t,A);for(let D of s.warnings)r.warn(D);let n=Zi(s,e.session),F=new qt({file:t.fsPath,recording:s,session:n,speed:e.speed,logger:r,logFile:e.logFile});F.on("error",D=>r.warn(D instanceof Error?D.message:String(D))),F.start();let v,E;try{v=await Wi({session:F,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(E=vl(x,F,v.url,e.pov,r))}catch(D){throw await v?.close(),await F.stop(),D}let u=v;return{url:u.url,port:u.port,session:F,apmId:F.status().apmId,async close(){ll(E,r),await u.close(),await F.stop()}}}function vl(x,A,e,r,t){let s=typeof r=="string"&&r.length>0?r:Y6,n=Ir.Utils.joinPath(x,"pov",s);if(!(0,al.existsSync)(Ir.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,na.spawn)("npm",["run","dev"],{cwd:n.fsPath,env:{...process.env,MYDATANET_HOST:e},shell:process.platform==="win32",detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),v=E=>{for(let u of E.toString("utf8").split(/\r?\n/)){let D=u.trim();D&&A.logStream.push("pov",D)}};return F.stdout?.on("data",v),F.stderr?.on("data",v),F.on("error",E=>t.error(`POV dev server failed: ${E.message}`)),t.info(`POV dev server: npm run dev in ${n.fsPath} (MYDATANET_HOST=${e})`),F}function ll(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,na.spawn)("taskkill",["/PID",String(x.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-x.pid,"SIGTERM")}catch(e){A.debug(`Could not stop the POV dev server: ${e instanceof Error?e.message:String(e)}`),x.kill()}}var fl=require("uuid"),A7="b4baec47-0ba4-4e37-b237-8f9cde42b8dd",sa=(t=>(t.Get="GET",t.Post="POST",t.Put="PUT",t.Delete="DELETE",t))(sa||{});var Jn=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:s,authHeader:n,logger:F}=A;this.domain=this.normalizeServerUrl(t),this.auth=n||(s?`Bearer ${s}`:""),this.logger=F}else this.domain=this.normalizeServerUrl(A),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,e,r){let t=`${this.domain}${e}`,s={Authorization:this.auth},n={method:A,headers:s};r&&(r instanceof FormData?n.body=r:(s["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let v=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${v}`)}return F.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,e){this.logger?.info(`Uploading development tag ${A}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(A){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,e){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${e}`)}catch{return null}}async createDevelopmentSite(A,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let s=await this.getSite(A,e.name.toLowerCase());if(s)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${s._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${s._uid}`),s._uid}catch(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.message}`);else return s._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,e){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:e})}catch{}}};function ia(x){return(0,fl.v5)(x,A7)}async function cl(x,A,e,r,t,s,n){let F=await z.read(x,A),v=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),E=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=await z.isApmPartEnabled(x,A,p0.Part.dlo,F),D=u&&r,m=D?r.toUpperCase():`${E}_${v}`,_=D?r:m,h=n||m;return h.length>50&&(e.warn(`Site name "${h}" is too long. Truncating to 50 characters.`),h=h.substring(0,50)),{apmId:ia(_),applicationId:null,name:h,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:s}}async function e7(x,A,e,r,t,s,n=!1){if(s.length>0)for(let F of s){let[v,E]=F.split("@");await Z0.installDependency(x,A,e,r,t,v,E||null,n)}else await Z0.installDependencies(x,A,e,r,t);await Z0.installNpmInApmParts(x,A,e)}async function r7(x,A,e,r,t=null,s=!0,n){return await z.validateBasicManifest(x,A,null),gx.buildAll(x,A,e,r,t,s,n)}async function t7(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await z.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function n7(x,A,e,r,t,s,n,F){e.info("Publishing package...");let v=await t7(s);if(F)await gx.publishArchive(x,A,e,t,r,F,n,v);else return await gx.validatePublishSettings(x,A,t,r),gx.release(x,A,e,r,t,n,v)}async function s7(x,A,e,r,t,s){return gx.pack(x,A,e,r,t,s)}0&&(module.exports={APM,DDE,DDE_Core,DFILES,DLO,DefaultFiles,Dependencies,DevError,DevExitCode,DevSession,DeviceProfiles,Diagnostics,ENV,Globals,Helper,HttpMethod,Library,Log,Manifest,MyDatanetClient,Package,Registry,build,buildDevelopmentInstallInfo,dev,generateDevApmId,install,pack,publish});
2346
2346
  /*! Bundled license information:
2347
2347
 
2348
2348
  @microtronics/device-master/dist/cjs/index.cjs: