"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const t=new WeakMap;function e(t,e){return new Proxy(t,{get:(t,s)=>e(t[s])})}class s{constructor(){this.value=void 0,this.exports=null}getState(){return this.exports.asyncify_get_state()}assertNoneState(){let t=this.getState();if(0!==t)throw new Error(`Invalid async state ${t}, expected 0.`)}wrapImportFn(t){return(...e)=>{if(2===this.getState())return this.exports.asyncify_stop_rewind(),this.value;this.assertNoneState();let s=t(...e);if(!(r=s)||"object"!=typeof r&&"function"!=typeof r||"function"!=typeof r.then)return s;var r;this.exports.asyncify_start_unwind(16),this.value=s}}wrapModuleImports(t){return e(t,t=>"function"==typeof t?this.wrapImportFn(t):t)}wrapImports(t){if(void 0!==t)return e(t,(t=Object.create(null))=>this.wrapModuleImports(t))}wrapExportFn(e){let s=t.get(e);return void 0!==s||(s=async(...t)=>{this.assertNoneState();let s=e(...t);for(;1===this.getState();)this.exports.asyncify_stop_unwind(),this.value=await this.value,this.assertNoneState(),this.exports.asyncify_start_rewind(16),s=e();return this.assertNoneState(),s},t.set(e,s)),s}wrapExports(e){let s=Object.create(null);for(let t in e){let r=e[t];"function"!=typeof r||t.startsWith("asyncify_")||(r=this.wrapExportFn(r)),Object.defineProperty(s,t,{enumerable:!0,value:r})}return t.set(e,s),s}init(t,e){const{exports:s}=t,n=s.memory||e.env&&e.env.memory;new Int32Array(n.buffer,16).set([24,1024]),this.exports=this.wrapExports(s),Object.setPrototypeOf(t,r.prototype)}}class r extends WebAssembly.Instance{constructor(t,e){let r=new s;super(t,r.wrapImports(e)),r.init(this,e)}get exports(){return t.get(super.exports)}}Object.defineProperty(r.prototype,"exports",{enumerable:!0}),exports.Instance=r,exports.instantiate=async function(t,e){let r=new s,n=await WebAssembly.instantiate(t,r.wrapImports(e));return r.init(n instanceof WebAssembly.Instance?n:n.instance,e),n},exports.instantiateStreaming=async function(t,e){let r=new s,n=await WebAssembly.instantiateStreaming(t,r.wrapImports(e));return r.init(n.instance,e),n};