diff --git a/559256dc812e37cc8bb5.worker.js b/8acc76fdb6ee253c485e.worker.js similarity index 99% rename from 559256dc812e37cc8bb5.worker.js rename to 8acc76fdb6ee253c485e.worker.js index 824ab0c..0484a6d 100644 --- a/559256dc812e37cc8bb5.worker.js +++ b/8acc76fdb6ee253c485e.worker.js @@ -1,2 +1,2 @@ !function(t){var n={};function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var i in t)e.d(r,i,function(n){return t[n]}.bind(null,i));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="/diabloweb/",e(e.s=6)}([function(t,n,e){t.exports=e(3)},function(t,n){var e,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function u(t){if(e===setTimeout)return setTimeout(t,0);if((e===o||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(n){try{return e.call(null,t,0)}catch(n){return e.call(this,t,0)}}}!function(){try{e="function"===typeof setTimeout?setTimeout:o}catch(t){e=o}try{r="function"===typeof clearTimeout?clearTimeout:a}catch(t){r=a}}();var l,c=[],f=!1,s=-1;function p(){f&&l&&(f=!1,l.length?c=l.concat(c):s=-1,c.length&&y())}function y(){if(!f){var t=u(p);f=!0;for(var n=c.length;n;){for(l=c,c=[];++s1)for(var e=1;e1&&(a.thisProgram=n.argv[1].replace(/\\/g,"/")),a.arguments=n.argv.slice(2),n.on("uncaughtException",function(t){if(!(t instanceof _t))throw t}),n.on("unhandledRejection",function(t,e){n.exit(1)}),a.quit=function(t){n.exit(t)},a.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(a.read=function(t){return read(t)}),a.readBinary=function(t){var n;return"function"===typeof readbuffer?new Uint8Array(readbuffer(t)):(T("object"===typeof(n=read(t,"binary"))),n)},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(t){quit(t)})):(f||s)&&(f?document.currentScript&&(h=document.currentScript.src):h=self.location.href,t&&(h=t),h=0!==h.indexOf("blob:")?h.split("/").slice(0,-1).join("/")+"/":"",a.read=function(t){var n=new XMLHttpRequest;return n.open("GET",t,!1),n.send(null),n.responseText},s&&(a.readBinary=function(t){var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)}),a.readAsync=function(t,n,e){var r=new XMLHttpRequest;r.open("GET",t,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?n(r.response):e()},r.onerror=e,r.send(null)},a.setWindowTitle=function(t){document.title=t});var _=a.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),d=a.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||_);for(o in u)u.hasOwnProperty(o)&&(a[o]=u[o]);u=void 0;var v=16;function g(t){var n=L;return L=L+t+15&-16,n}function w(t,n){return n||(n=v),t=Math.ceil(t/n)*n}var b={"f64-rem":function(t,n){return t%n},debugger:function(){}};new Array(0);var A=0;function T(t,n){t||vt("Assertion failed: "+n)}function x(t,n){if(0===n||!t)return"";for(var e,r=0,i=0;r|=e=E[t+i>>0],(0!=e||n)&&(i++,!n||i!=n););n||(n=i);var o="";if(r<128){for(var a;n>0;)a=String.fromCharCode.apply(String,E.subarray(t,t+Math.min(n,1024))),o=o?o+a:a,t+=1024,n-=1024;return o}return function(t){return function(t,n){var e=n;for(;t[e];)++e;if(e-n>16&&t.subarray&&C)return C.decode(t.subarray(n,e));for(var r,i,o,a,u,l,c="";;){if(!(r=t[n++]))return c;if(128&r)if(i=63&t[n++],192!=(224&r))if(o=63&t[n++],224==(240&r)?r=(15&r)<<12|i<<6|o:(a=63&t[n++],240==(248&r)?r=(7&r)<<18|i<<12|o<<6|a:(u=63&t[n++],248==(252&r)?r=(3&r)<<24|i<<18|o<<12|a<<6|u:(l=63&t[n++],r=(1&r)<<30|i<<24|o<<18|a<<12|u<<6|l))),r<65536)c+=String.fromCharCode(r);else{var f=r-65536;c+=String.fromCharCode(55296|f>>10,56320|1023&f)}else c+=String.fromCharCode((31&r)<<6|i);else c+=String.fromCharCode(r)}}(E,t)}(t)}var C="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var j,M,E,S,L,R,k,O,P,B,I=65536,W=16777216,D=16777216;function z(t,n){return t%n>0&&(t+=n-t%n),t}function N(t){a.buffer=j=t}function G(){a.HEAP8=M=new Int8Array(j),a.HEAP16=new Int16Array(j),a.HEAP32=S=new Int32Array(j),a.HEAPU8=E=new Uint8Array(j),a.HEAPU16=new Uint16Array(j),a.HEAPU32=new Uint32Array(j),a.HEAPF32=new Float32Array(j),a.HEAPF64=new Float64Array(j)}function U(){var t=a.usingWasm?I:W,n=2147483648-t;if(S[B>>2]>n)return!1;var e=H;for(H=Math.max(H,D);H>2];)H=H<=536870912?z(2*H,t):Math.min(z((3*H+2147483648)/4,t),n);var r=a.reallocBuffer(H);return r&&r.byteLength==H?(N(r),G(),!0):(H=e,!1)}L=k=B=0,a.reallocBuffer||(a.reallocBuffer=function(t){var n;try{if(ArrayBuffer.transfer)n=ArrayBuffer.transfer(j,t);else{var e=M;n=new ArrayBuffer(t),new Int8Array(n).set(e)}}catch(r){return!1}return!!ft(n)&&n});try{Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get)(new ArrayBuffer(4))}catch(gt){(function(t){return t.byteLength})}var F=a.TOTAL_STACK||5242880,H=a.TOTAL_MEMORY||134217728;function q(t){for(;t.length>0;){var n=t.shift();if("function"!=typeof n){var e=n.func;"number"===typeof e?void 0===n.arg?a.dynCall_v(e):a.dynCall_vi(e,n.arg):e(void 0===n.arg?null:n.arg)}else n()}}H0),n.refcount--,0!==n.refcount||n.rethrown||(n.destructor&&a.dynCall_vi(n.destructor,t),delete at.infos[t],it(t))}},clearRef:function(t){t&&(at.infos[t].refcount=0)}};function ut(){var t=at.last;if(!t)return 0|(yt(0),0);var n=at.infos[t],e=n.type;if(!e)return 0|(yt(0),t);var r=Array.prototype.slice.call(arguments);a.___cxa_is_pointer_type(e);ut.buffer||(ut.buffer=pt(4)),S[ut.buffer>>2]=t,t=ut.buffer;for(var i=0;i>2],n.adjusted=t,0|(yt(r[i]),t);return t=S[t>>2],0|(yt(e),t)}function lt(t){return Math.pow(2,t)}B=g(4),R=k=w(L),P=w(O=R+F),S[B>>2]=P;a.wasmTableSize=163,a.wasmMaxTableSize=163,a.asmGlobalArg={},a.asmLibraryArg={abort:vt,assert:T,enlargeMemory:U,getTotalMemory:function(){return H},abortOnCannotGrowMemory:function(){vt("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+H+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_ii:function(t,n){var e=mt();try{return a.dynCall_ii(t,n)}catch(gt){if(ht(e),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_iii:function(t,n,e){var r=mt();try{return a.dynCall_iii(t,n,e)}catch(gt){if(ht(r),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_iiii:function(t,n,e,r){var i=mt();try{return a.dynCall_iiii(t,n,e,r)}catch(gt){if(ht(i),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_iiiii:function(t,n,e,r,i){var o=mt();try{return a.dynCall_iiiii(t,n,e,r,i)}catch(gt){if(ht(o),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_iiiiii:function(t,n,e,r,i,o){var u=mt();try{return a.dynCall_iiiiii(t,n,e,r,i,o)}catch(gt){if(ht(u),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_iiiiiii:function(t,n,e,r,i,o,u){var l=mt();try{return a.dynCall_iiiiiii(t,n,e,r,i,o,u)}catch(gt){if(ht(l),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_ji:function(t,n){var e=mt();try{return a.dynCall_ji(t,n)}catch(gt){if(ht(e),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_v:function(t){var n=mt();try{a.dynCall_v(t)}catch(gt){if(ht(n),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_vi:function(t,n){var e=mt();try{a.dynCall_vi(t,n)}catch(gt){if(ht(e),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_vii:function(t,n,e){var r=mt();try{a.dynCall_vii(t,n,e)}catch(gt){if(ht(r),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_viii:function(t,n,e,r){var i=mt();try{a.dynCall_viii(t,n,e,r)}catch(gt){if(ht(i),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_viiii:function(t,n,e,r,i){var o=mt();try{a.dynCall_viiii(t,n,e,r,i)}catch(gt){if(ht(o),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_viiiii:function(t,n,e,r,i,o){var u=mt();try{a.dynCall_viiiii(t,n,e,r,i,o)}catch(gt){if(ht(u),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_viiiiii:function(t,n,e,r,i,o,u){var l=mt();try{a.dynCall_viiiiii(t,n,e,r,i,o,u)}catch(gt){if(ht(l),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},invoke_viji:function(t,n,e,r,i){var o=mt();try{a.dynCall_viji(t,n,e,r,i)}catch(gt){if(ht(o),"number"!==typeof gt&&"longjmp"!==gt)throw gt;a.setThrew(1,0)}},__ZSt18uncaught_exceptionv:ot,___assert_fail:function(t,n,e,r){vt("Assertion failed: "+x(t)+", at: "+[n?x(n):"unknown filename",e,r?x(r):"unknown function"])},___cxa_allocate_exception:function(t){return pt(t)},___cxa_find_matching_catch:ut,___cxa_find_matching_catch_2:function(){return ut.apply(null,arguments)},___cxa_free_exception:it,___cxa_throw:function(t,n,e){throw at.infos[t]={ptr:t,adjusted:t,type:n,destructor:e,refcount:0,caught:!1,rethrown:!1},at.last=t,"uncaught_exception"in ot?ot.uncaught_exception++:ot.uncaught_exception=1,t},___gxx_personality_v0:function(){},___resumeException:function(t){throw at.last||(at.last=t),t},___setErrNo:function(t){return a.___errno_location&&(S[a.___errno_location()>>2]=t),t},_abort:function(){a.abort()},_do_error:function(t){var n=E.indexOf(0,t),e=String.fromCharCode.apply(null,E.subarray(t,n));self.DApi.exit_error(e)},_do_progress:function(t,n){self.DApi.progress(t,n)},_emscripten_memcpy_big:function(t,n,e){return E.set(E.subarray(n,n+e),t),t},_get_file_contents:function(t,n,e){self.DApi.get_file_contents(E.subarray(t,t+e),n)},_llvm_exp2_f32:lt,_llvm_exp2_f64:function(){return lt.apply(null,arguments)},_put_file_contents:function(t,n,e){self.DApi.put_file_contents(E.subarray(t,t+e),n)},_put_file_size:function(t){self.DApi.put_file_size(t)},DYNAMICTOP_PTR:B,tempDoublePtr:rt,ABORT:A,STACKTOP:k,STACK_MAX:O};var ct=a.asm(a.asmGlobalArg,a.asmLibraryArg,j);a.asm=ct;a._DApi_Alloc=function(){return a.asm._DApi_Alloc.apply(null,arguments)},a._DApi_Compress=function(){return a.asm._DApi_Compress.apply(null,arguments)},a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)},a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)},a.___em_js__do_error=function(){return a.asm.___em_js__do_error.apply(null,arguments)},a.___em_js__do_progress=function(){return a.asm.___em_js__do_progress.apply(null,arguments)},a.___em_js__get_file_contents=function(){return a.asm.___em_js__get_file_contents.apply(null,arguments)},a.___em_js__put_file_contents=function(){return a.asm.___em_js__put_file_contents.apply(null,arguments)},a.___em_js__put_file_size=function(){return a.asm.___em_js__put_file_size.apply(null,arguments)};var ft=a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)},st=a._free=function(){return a.asm._free.apply(null,arguments)},pt=(a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)},a._malloc=function(){return a.asm._malloc.apply(null,arguments)}),yt=(a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)},a._memset=function(){return a.asm._memset.apply(null,arguments)},a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)},a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)},a.getTempRet0=function(){return a.asm.getTempRet0.apply(null,arguments)},a.runPostSets=function(){return a.asm.runPostSets.apply(null,arguments)},a.setTempRet0=function(){return a.asm.setTempRet0.apply(null,arguments)}),ht=(a.setThrew=function(){return a.asm.setThrew.apply(null,arguments)},a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)},a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)}),mt=a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)};a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)},a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)},a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)},a.dynCall_iiiii=function(){return a.asm.dynCall_iiiii.apply(null,arguments)},a.dynCall_iiiiii=function(){return a.asm.dynCall_iiiiii.apply(null,arguments)},a.dynCall_iiiiiii=function(){return a.asm.dynCall_iiiiiii.apply(null,arguments)},a.dynCall_ji=function(){return a.asm.dynCall_ji.apply(null,arguments)},a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)},a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)},a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)},a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)},a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)},a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)},a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)},a.dynCall_viji=function(){return a.asm.dynCall_viji.apply(null,arguments)};function _t(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}a.asm=ct,a.then=function(t){if(a.calledRun)t(a);else{var n=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){n&&n(),t(a)}}return a},_t.prototype=new Error,_t.prototype.constructor=_t;function dt(t){function n(){a.calledRun||(a.calledRun=!0,A||(Z||(Z=!0,q(X)),q(K),a.onRuntimeInitialized&&a.onRuntimeInitialized(),function(){if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)Q(a.postRun.shift());q(J)}()))}t=t||a.arguments,V>0||(!function(){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)t=a.preRun.shift(),Y.unshift(t);var t;q(Y)}(),V>0||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),n()},1)):n()))}tt=function t(){a.calledRun||dt(),a.calledRun||(tt=t)},a.run=dt;function vt(t){throw a.onAbort&&a.onAbort(t),void 0!==t?(_(t),d(t),t=JSON.stringify(t)):t="",A=!0,1,"abort("+t+"). Build with -s ASSERTIONS=1 for more info."}if(a.abort=vt,a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();return a.noExitRuntime=!0,dt(),a.ready=new Promise(function(t,n){delete a.then,a.onAbort=function(t){n(t)},Q(function(){t(a)})}),i}}();t.exports=i}).call(this,e(1),"/")},function(t,n,e){var r=function(t){"use strict";var n,e=Object.prototype,r=e.hasOwnProperty,i="function"===typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(t,n,e,r){var i=n&&n.prototype instanceof m?n:m,o=Object.create(i.prototype),a=new M(r||[]);return o._invoke=function(t,n,e){var r=f;return function(i,o){if(r===p)throw new Error("Generator is already running");if(r===y){if("throw"===i)throw o;return S()}for(e.method=i,e.arg=o;;){var a=e.delegate;if(a){var u=x(a,e);if(u){if(u===h)continue;return u}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(r===f)throw r=y,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);r=p;var l=c(t,n,e);if("normal"===l.type){if(r=e.done?y:s,l.arg===h)continue;return{value:l.arg,done:e.done}}"throw"===l.type&&(r=y,e.method="throw",e.arg=l.arg)}}}(t,e,a),o}function c(t,n,e){try{return{type:"normal",arg:t.call(n,e)}}catch(r){return{type:"throw",arg:r}}}t.wrap=l;var f="suspendedStart",s="suspendedYield",p="executing",y="completed",h={};function m(){}function _(){}function d(){}var v={};v[o]=function(){return this};var g=Object.getPrototypeOf,w=g&&g(g(E([])));w&&w!==e&&r.call(w,o)&&(v=w);var b=d.prototype=m.prototype=Object.create(v);function A(t){["next","throw","return"].forEach(function(n){t[n]=function(t){return this._invoke(n,t)}})}function T(t){var n;this._invoke=function(e,i){function o(){return new Promise(function(n,o){!function n(e,i,o,a){var u=c(t[e],t,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"===typeof f&&r.call(f,"__await")?Promise.resolve(f.__await).then(function(t){n("next",t,o,a)},function(t){n("throw",t,o,a)}):Promise.resolve(f).then(function(t){l.value=t,o(l)},function(t){return n("throw",t,o,a)})}a(u.arg)}(e,i,n,o)})}return n=n?n.then(o,o):o()}}function x(t,e){var r=t.iterator[e.method];if(r===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=n,x(t,e),"throw"===e.method))return h;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var i=c(r,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,h;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=n),e.delegate=null,h):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,h)}function C(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.finallyLoc=t[2],n.afterLoc=t[3]),this.tryEntries.push(n)}function j(t){var n=t.completion||{};n.type="normal",delete n.arg,t.completion=n}function M(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(C,this),this.reset(!0)}function E(t){if(t){var e=t[o];if(e)return e.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var i=-1,a=function e(){for(;++i=0;--o){var a=this.tryEntries[o],u=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev=0;--e){var i=this.tryEntries[e];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--n){var e=this.tryEntries[n];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),j(e),h}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var e=this.tryEntries[n];if(e.tryLoc===t){var r=e.completion;if("throw"===r.type){var i=r.arg;j(e)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:E(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=n),h}},t}(t.exports);try{regeneratorRuntime=r}catch(i){Function("r","regeneratorRuntime = r")(r)}},function(t,n){},function(t,n,e){(function(t){function e(t,n){for(var e=0,r=t.length-1;r>=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),e++):e&&(t.splice(r,1),e--)}if(n)for(;e--;e)t.unshift("..");return t}function r(t,n){if(t.filter)return t.filter(n);for(var e=[],r=0;r=-1&&!i;o--){var a=o>=0?arguments[o]:t.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(n=a+"/"+n,i="/"===a.charAt(0))}return(i?"/":"")+(n=e(r(n.split("/"),function(t){return!!t}),!i).join("/"))||"."},n.normalize=function(t){var o=n.isAbsolute(t),a="/"===i(t,-1);return(t=e(r(t.split("/"),function(t){return!!t}),!o).join("/"))||o||(t="."),t&&a&&(t+="/"),(o?"/":"")+t},n.isAbsolute=function(t){return"/"===t.charAt(0)},n.join=function(){var t=Array.prototype.slice.call(arguments,0);return n.normalize(r(t,function(t,n){if("string"!==typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},n.relative=function(t,e){function r(t){for(var n=0;n=0&&""===t[e];e--);return n>e?[]:t.slice(n,e-n+1)}t=n.resolve(t).substr(1),e=n.resolve(e).substr(1);for(var i=r(t.split("/")),o=r(e.split("/")),a=Math.min(i.length,o.length),u=a,l=0;l=1;--o)if(47===(n=t.charCodeAt(o))){if(!i){r=o;break}}else i=!1;return-1===r?e?"/":".":e&&1===r?"/":t.slice(0,r)},n.basename=function(t,n){var e=function(t){"string"!==typeof t&&(t+="");var n,e=0,r=-1,i=!0;for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!i){e=n+1;break}}else-1===r&&(i=!1,r=n+1);return-1===r?"":t.slice(e,r)}(t);return n&&e.substr(-1*n.length)===n&&(e=e.substr(0,e.length-n.length)),e},n.extname=function(t){"string"!==typeof t&&(t+="");for(var n=-1,e=0,r=-1,i=!0,o=0,a=t.length-1;a>=0;--a){var u=t.charCodeAt(a);if(47!==u)-1===r&&(i=!1,r=a+1),46===u?-1===n?n=a:1!==o&&(o=1):-1!==n&&(o=-1);else if(!i){e=a+1;break}}return-1===n||-1===r||0===o||1===o&&n===r-1&&n===e+1?"":t.slice(n,r)};var i="b"==="ab".substr(-1)?function(t,n,e){return t.substr(n,e)}:function(t,n,e){return n<0&&(n=t.length+n),t.substr(n,e)}}).call(this,e(1))},function(t,n,e){"use strict";e.r(n);var r=e(0),i=e.n(r);function o(t,n){return function(t){if(Array.isArray(t))return t}(t)||function(t,n){var e=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(e.push(a.value),!n||e.length!==n);r=!0);}catch(l){i=!0,o=l}finally{try{r||null==u.return||u.return()}finally{if(i)throw o}}return e}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(t,n,e,r,i,o,a){try{var u=t[o](a),l=u.value}catch(c){return void e(c)}u.done?n(l):Promise.resolve(l).then(r,i)}var u=e(2),l=e.n(u),c=self,f=null,s=0,p=null,y=0;var h={exit_error:function(t){throw Error(t)},get_file_contents:function(t,n){t.set(f.subarray(n-s,n-s+t.byteLength))},put_file_size:function(t){p=new Uint8Array(t)},put_file_contents:function(t,n){p.set(t,n)},progress:function(t,n){var e;(t===n||performance.now()>y+100)&&(e=t,c.postMessage({action:"progress",value:e}),y=performance.now())}};function m(){var t;return t=i.a.mark(function t(n){var e,r,o,a,u,c,y,h,m;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e=n.binary,r=n.mpq,o=n.input,a=n.offset,u=n.blockSize,t.next=3,l()({wasmBinary:e}).ready;case 3:return c=t.sent,f=new Uint8Array(r),s=a,y=o.length/6,h=c._DApi_Alloc(o.byteLength),c.HEAPU32.set(o,h>>2),m=c._DApi_Compress(a+f.length,u,y,h)>>2,t.abrupt("return",[p.buffer,c.HEAPU32.slice(m,m+4*y)]);case 11:case"end":return t.stop()}},t)}),(m=function(){var n=this,e=arguments;return new Promise(function(r,i){var o=t.apply(n,e);function u(t){a(o,r,i,u,l,"next",t)}function l(t){a(o,r,i,u,l,"throw",t)}u(void 0)})}).apply(this,arguments)}c.DApi=h,c.addEventListener("message",function(t){var n=t.data;switch(n.action){case"run":(function(t){return m.apply(this,arguments)})(n).then(function(t){var n=o(t,2),e=n[0],r=n[1];return c.postMessage({action:"result",buffer:e,blocks:r},[e,r.buffer])},function(t){return c.postMessage({action:"error",error:t.toString(),stack:t.stack})})}})}]); -//# sourceMappingURL=559256dc812e37cc8bb5.worker.js.map \ No newline at end of file +//# sourceMappingURL=8acc76fdb6ee253c485e.worker.js.map \ No newline at end of file diff --git a/559256dc812e37cc8bb5.worker.js.map b/8acc76fdb6ee253c485e.worker.js.map similarity index 99% rename from 559256dc812e37cc8bb5.worker.js.map rename to 8acc76fdb6ee253c485e.worker.js.map index 14ab946..2753f2b 100644 --- a/559256dc812e37cc8bb5.worker.js.map +++ b/8acc76fdb6ee253c485e.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["../webpack/bootstrap","../node_modules/@babel/runtime/regenerator/index.js","../node_modules/process/browser.js","mpqcmp/MpqCmp.jscc","../node_modules/regenerator-runtime/runtime.js","../node_modules/path-browserify/index.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","mpqcmp/mpqcmp.worker.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","e","this","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","length","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","arguments","push","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","MpqCmp","_scriptDir","document","currentScript","src","undefined","Module","moduleOverrides","status","toThrow","ENVIRONMENT_IS_NODE","ENVIRONMENT_IS_SHELL","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","window","importScripts","nodeFS","nodePath","scriptDirectory","locateFile","path","__dirname","filename","binary","ret","toString","buffer","Uint8Array","assert","replace","slice","ex","ExitStatus","reason","read","f","data","readbuffer","scriptArgs","quit","self","location","href","indexOf","split","join","url","xhr","XMLHttpRequest","open","send","responseText","responseType","response","onload","onerror","out","console","log","print","err","printErr","warn","STACK_ALIGN","staticAlloc","size","STATICTOP","alignMemory","factor","Math","ceil","asm2wasmImports","f64-rem","x","y","debugger","ABORT","condition","text","abort","Pointer_stringify","ptr","hasUtf","HEAPU8","curr","String","fromCharCode","subarray","min","u8Array","idx","endPtr","UTF8Decoder","decode","u0","u1","u2","u3","u4","u5","str","ch","UTF8ArrayToString","UTF8ToString","TextDecoder","HEAP8","HEAP32","STACK_BASE","STACKTOP","STACK_MAX","DYNAMIC_BASE","DYNAMICTOP_PTR","WASM_PAGE_SIZE","ASMJS_PAGE_SIZE","MIN_TOTAL_MEMORY","alignUp","multiple","updateGlobalBuffer","buf","updateGlobalBufferViews","Int8Array","Int16Array","Int32Array","Uint16Array","Uint32Array","Float32Array","Float64Array","enlargeMemory","PAGE_MULTIPLE","LIMIT","OLD_TOTAL_MEMORY","TOTAL_MEMORY","max","replacement","byteLength","ArrayBuffer","transfer","oldHEAP8","set","_emscripten_replace_memory","Function","getOwnPropertyDescriptor","TOTAL_STACK","callRuntimeCallbacks","callbacks","callback","shift","func","arg","WebAssembly","Memory","initial","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","runtimeInitialized","addOnPostRun","cb","unshift","abs","cos","sin","tan","acos","asin","atan","atan2","exp","sqrt","floor","pow","imul","fround","round","clz32","trunc","runDependencies","runDependencyWatcher","dependenciesFulfilled","dataURIPrefix","isDataURI","startsWith","wasmTextFile","wasmBinaryFile","asmjsCodeFile","info","global","asm2wasm","parent","getBinary","doNativeWasm","providedBuffer","receiveInstance","instance","memory","newBuffer","oldBuffer","oldView","mergeMemory","id","clearInterval","removeRunDependency","NaN","Infinity","receiveInstantiatedSource","output","instantiateArrayBuffer","receiver","fetch","Promise","resolve","reject","credentials","then","catch","instantiate","instantiateStreaming","asmjsReallocBuffer","finalMethod","oldSize","grow","wasmReallocBuffer","TABLE_SIZE","MAX_TABLE_SIZE","Table","maximum","element","integrateWasmJS","STATIC_BASE","tempDoublePtr","___cxa_free_exception","_free","__ZSt18uncaught_exceptionv","uncaught_exception","EXCEPTIONS","last","caught","infos","deAdjust","adjusted","addRef","refcount","decRef","rethrown","destructor","clearRef","___cxa_find_matching_catch","thrown","setTempRet0","throwntype","type","typeArray","_malloc","_llvm_exp2_f32","asmGlobalArg","asmLibraryArg","getTotalMemory","abortOnCannotGrowMemory","invoke_ii","index","a1","sp","stackSave","stackRestore","invoke_iii","a2","invoke_iiii","a3","invoke_iiiii","a4","invoke_iiiiii","a5","invoke_iiiiiii","a6","invoke_ji","invoke_v","invoke_vi","invoke_vii","invoke_viii","invoke_viiii","invoke_viiiii","invoke_viiiiii","invoke_viji","___assert_fail","line","___cxa_allocate_exception","___cxa_find_matching_catch_2","___cxa_throw","___gxx_personality_v0","___resumeException","___setErrNo","_abort","_do_error","end","DApi","exit_error","_do_progress","done","total","progress","_emscripten_memcpy_big","dest","num","_get_file_contents","offset","get_file_contents","_llvm_exp2_f64","_put_file_contents","put_file_contents","_put_file_size","put_file_size","asm","message","old","constructor","doRun","postRun","preRun","runCaller","what","JSON","stringify","pop","runtime","Op","hasOwn","$Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","state","GenStateSuspendedStart","method","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","fn","obj","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","previousPromise","callInvokeWithMethodAndArg","invoke","result","__await","unwrapped","error","TypeError","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","keys","reverse","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","hasCatch","hasFinally","finallyEntry","complete","finish","delegateYield","regeneratorRuntime","accidentalStrictMode","normalizeArray","parts","allowAboveRoot","up","splice","filter","xs","res","resolvedPath","resolvedAbsolute","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","arr","start","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","code","charCodeAt","hasRoot","matchedSlash","basename","ext","extname","startDot","startPart","preDotState","_slicedToArray","isArray","_arrayWithHoles","_arr","_n","_d","_e","_s","_i","_iterableToArrayLimit","_nonIterableRest","asyncGeneratorStep","gen","_next","_throw","worker","input_file","input_offset","output_file","last_progress","performance","now","postMessage","action","_callee","_ref","mpq","input","blockSize","wasm","count","dst","regenerator_default","a","_context","MpqModule","wasmBinary","ready","_DApi_Alloc","HEAPU32","_DApi_Compress","addEventListener","_ref2","_ref3","_ref4","blocks","stack"],"mappings":"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","file":"559256dc812e37cc8bb5.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/diabloweb/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n","module.exports = require(\"regenerator-runtime\");\n","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","\r\nvar MpqCmp = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(MpqCmp) {\r\n MpqCmp = MpqCmp || {};\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof MpqCmp !== 'undefined' ? MpqCmp : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// The environment setup code below is customized to use Module.\r\n// *** Environment setup code ***\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\nENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n Module['read'] = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n Module['readBinary'] = function readBinary(filename) {\r\n var ret = Module['read'](filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', function(reason, p) {\r\n process['exit'](1);\r\n });\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n Module['read'] = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n Module['readBinary'] = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WEB) {\r\n if (document.currentScript) {\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n } else { // worker\r\n scriptDirectory = self.location.href;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.split('/').slice(0, -1).join('/') + '/';\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n Module['read'] = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n Module['readBinary'] = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n Module['readAsync'] = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n Module['setWindowTitle'] = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// *** Environment setup code ***\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction staticAlloc(size) {\r\n var ret = STATICTOP;\r\n STATICTOP = (STATICTOP + size + 15) & -16;\r\n return ret;\r\n}\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n if (end >= TOTAL_MEMORY) {\r\n var success = enlargeMemory();\r\n if (!success) {\r\n HEAP32[DYNAMICTOP_PTR>>2] = ret;\r\n return 0;\r\n }\r\n }\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n var ret = size = Math.ceil(size / factor) * factor;\r\n return ret;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// 'sig' parameter is only used on LLVM wasm backend\r\nfunction addFunction(func, sig) {\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n}\r\n\r\nfunction removeFunction(index) {\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\n\r\n\r\nvar Runtime = {\r\n // FIXME backwards compatibility layer for ports. Support some Runtime.*\r\n // for now, fix it there, then remove it from here. That way we\r\n // can minimize any period of breakage.\r\n dynCall: dynCall, // for SDL2 port\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\nvar ABORT = 0; // whether we are quitting the application. no code should run after this. set in exit() and abort()\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\nvar globalScope = this;\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\nvar JSfuncs = {\r\n // Helpers for cwrap -- it can't refer to Runtime directly because it might\r\n // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find\r\n // out what the minified function name is.\r\n 'stackSave': function() {\r\n stackSave()\r\n },\r\n 'stackRestore': function() {\r\n stackRestore()\r\n },\r\n // type conversion from js to c\r\n 'arrayToC' : function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n },\r\n 'stringToC' : function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n }\r\n};\r\n\r\n// For fast lookup of conversion functions\r\nvar toC = {\r\n 'string': JSfuncs['stringToC'], 'array': JSfuncs['arrayToC']\r\n};\r\n\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return Pointer_stringify(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_STATIC = 2; // Cannot be freed\r\nvar ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 4; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [typeof _malloc === 'function' ? _malloc : staticAlloc, stackAlloc, staticAlloc, dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!staticSealed) return staticAlloc(size);\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n if (length === 0 || !ptr) return '';\r\n // Find the length, and check for UTF while doing so\r\n var hasUtf = 0;\r\n var t;\r\n var i = 0;\r\n while (1) {\r\n t = HEAPU8[(((ptr)+(i))>>0)];\r\n hasUtf |= t;\r\n if (t == 0 && !length) break;\r\n i++;\r\n if (length && i == length) break;\r\n }\r\n if (!length) length = i;\r\n\r\n var ret = '';\r\n\r\n if (hasUtf < 128) {\r\n var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack\r\n var curr;\r\n while (length > 0) {\r\n curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));\r\n ret = ret ? ret + curr : curr;\r\n ptr += MAX_CHUNK;\r\n length -= MAX_CHUNK;\r\n }\r\n return ret;\r\n }\r\n return UTF8ToString(ptr);\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAP8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\nfunction UTF8ArrayToString(u8Array, idx) {\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n while (u8Array[endPtr]) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var u0, u1, u2, u3, u4, u5;\r\n\r\n var str = '';\r\n while (1) {\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n u0 = u8Array[idx++];\r\n if (!u0) return str;\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF8) == 0xF0) {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = u8Array[idx++] & 63;\r\n if ((u0 & 0xFC) == 0xF8) {\r\n u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = u8Array[idx++] & 63;\r\n u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction UTF8ToString(ptr) {\r\n return UTF8ArrayToString(HEAPU8,ptr);\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0x1FFFFF) {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0x3FFFFFF) {\r\n if (outIdx + 4 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF8 | (u >> 24);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 5 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xFC | (u >> 30);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (x + ' [' + y + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\nvar MIN_TOTAL_MEMORY = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBuffer(buf) {\r\n Module['buffer'] = buffer = buf;\r\n}\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\nvar STATIC_BASE, STATICTOP, staticSealed; // static area\r\nvar STACK_BASE, STACKTOP, STACK_MAX; // stack area\r\nvar DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk\r\n\r\n STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;\r\n staticSealed = false;\r\n\r\n\r\n\r\n\r\nfunction abortOnCannotGrowMemory() {\r\n abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ');\r\n}\r\n\r\nif (!Module['reallocBuffer']) Module['reallocBuffer'] = function(size) {\r\n var ret;\r\n try {\r\n if (ArrayBuffer.transfer) {\r\n ret = ArrayBuffer.transfer(buffer, size);\r\n } else {\r\n var oldHEAP8 = HEAP8;\r\n ret = new ArrayBuffer(size);\r\n var temp = new Int8Array(ret);\r\n temp.set(oldHEAP8);\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n var success = _emscripten_replace_memory(ret);\r\n if (!success) return false;\r\n return ret;\r\n};\r\n\r\nfunction enlargeMemory() {\r\n // TOTAL_MEMORY is the current size of the actual array, and DYNAMICTOP is the new top.\r\n\r\n\r\n var PAGE_MULTIPLE = Module[\"usingWasm\"] ? WASM_PAGE_SIZE : ASMJS_PAGE_SIZE; // In wasm, heap size must be a multiple of 64KB. In asm.js, they need to be multiples of 16MB.\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n\r\n if (HEAP32[DYNAMICTOP_PTR>>2] > LIMIT) {\r\n return false;\r\n }\r\n\r\n var OLD_TOTAL_MEMORY = TOTAL_MEMORY;\r\n TOTAL_MEMORY = Math.max(TOTAL_MEMORY, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n\r\n while (TOTAL_MEMORY < HEAP32[DYNAMICTOP_PTR>>2]) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (TOTAL_MEMORY <= 536870912) {\r\n TOTAL_MEMORY = alignUp(2 * TOTAL_MEMORY, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n TOTAL_MEMORY = Math.min(alignUp((3 * TOTAL_MEMORY + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n }\r\n\r\n\r\n var replacement = Module['reallocBuffer'](TOTAL_MEMORY);\r\n if (!replacement || replacement.byteLength != TOTAL_MEMORY) {\r\n // restore the state to before this call, we failed\r\n TOTAL_MEMORY = OLD_TOTAL_MEMORY;\r\n return false;\r\n }\r\n\r\n // everything worked\r\n\r\n updateGlobalBuffer(replacement);\r\n updateGlobalBufferViews();\r\n\r\n\r\n\r\n return true;\r\n}\r\n\r\nvar byteLength;\r\ntry {\r\n byteLength = Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'byteLength').get);\r\n byteLength(new ArrayBuffer(4)); // can fail on older ie\r\n} catch(e) { // can fail on older node/v8\r\n byteLength = function(buffer) { return buffer.byteLength; };\r\n}\r\n\r\nvar TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;\r\nvar TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n// Use a provided buffer, if there is one, or else allocate a new one\r\nif (Module['buffer']) {\r\n buffer = Module['buffer'];\r\n} else {\r\n // Use a WebAssembly memory where available\r\n if (typeof WebAssembly === 'object' && typeof WebAssembly.Memory === 'function') {\r\n Module['wasmMemory'] = new WebAssembly.Memory({ 'initial': TOTAL_MEMORY / WASM_PAGE_SIZE });\r\n buffer = Module['wasmMemory'].buffer;\r\n } else\r\n {\r\n buffer = new ArrayBuffer(TOTAL_MEMORY);\r\n }\r\n Module['buffer'] = buffer;\r\n}\r\nupdateGlobalBufferViews();\r\n\r\n\r\nfunction getTotalMemory() {\r\n return TOTAL_MEMORY;\r\n}\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction ensureInitRuntime() {\r\n if (runtimeInitialized) return;\r\n runtimeInitialized = true;\r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n callRuntimeCallbacks(__ATEXIT__);\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n __ATEXIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// PRE_RUN_ADDITIONS (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nfunction integrateWasmJS() {\r\n // wasm.js has several methods for creating the compiled code module here:\r\n // * 'native-wasm' : use native WebAssembly support in the browser\r\n // * 'interpret-s-expr': load s-expression code from a .wast and interpret\r\n // * 'interpret-binary': load binary wasm and interpret\r\n // * 'interpret-asm2wasm': load asm.js code, translate to wasm, and interpret\r\n // * 'asmjs': no wasm, just load the asm.js code and use that (good for testing)\r\n // The method is set at compile time (BINARYEN_METHOD)\r\n // The method can be a comma-separated list, in which case, we will try the\r\n // options one by one. Some of them can fail gracefully, and then we can try\r\n // the next.\r\n\r\n // inputs\r\n\r\n var method = 'native-wasm';\r\n\r\n var wasmTextFile = 'MpqCmp.wast';\r\n var wasmBinaryFile = 'MpqCmp.wasm';\r\n var asmjsCodeFile = 'MpqCmp.temp.asm.js';\r\n\r\n if (!isDataURI(wasmTextFile)) {\r\n wasmTextFile = locateFile(wasmTextFile);\r\n }\r\n if (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n }\r\n if (!isDataURI(asmjsCodeFile)) {\r\n asmjsCodeFile = locateFile(asmjsCodeFile);\r\n }\r\n\r\n // utilities\r\n\r\n var wasmPageSize = 64*1024;\r\n\r\n var info = {\r\n 'global': null,\r\n 'env': null,\r\n 'asm2wasm': asm2wasmImports,\r\n 'parent': Module // Module inside wasm-js.cpp refers to wasm-js.cpp; this allows access to the outside program.\r\n };\r\n\r\n var exports = null;\r\n\r\n\r\n function mergeMemory(newBuffer) {\r\n // The wasm instance creates its memory. But static init code might have written to\r\n // buffer already, including the mem init file, and we must copy it over in a proper merge.\r\n // TODO: avoid this copy, by avoiding such static init writes\r\n // TODO: in shorter term, just copy up to the last static init write\r\n var oldBuffer = Module['buffer'];\r\n if (newBuffer.byteLength < oldBuffer.byteLength) {\r\n err('the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here');\r\n }\r\n var oldView = new Int8Array(oldBuffer);\r\n var newView = new Int8Array(newBuffer);\r\n\r\n\r\n newView.set(oldView);\r\n updateGlobalBuffer(newBuffer);\r\n updateGlobalBufferViews();\r\n }\r\n\r\n function fixImports(imports) {\r\n return imports;\r\n }\r\n\r\n function getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (Module['readBinary']) {\r\n return Module['readBinary'](wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n }\r\n\r\n function getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n }\r\n\r\n // do-method functions\r\n\r\n\r\n function doNativeWasm(global, env, providedBuffer) {\r\n if (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n return false;\r\n }\r\n // prepare memory import\r\n if (!(Module['wasmMemory'] instanceof WebAssembly.Memory)) {\r\n err('no native wasm Memory in use');\r\n return false;\r\n }\r\n env['memory'] = Module['wasmMemory'];\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n info['global'] = {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n };\r\n info['global.Math'] = Math;\r\n info['env'] = env;\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n exports = instance.exports;\r\n if (exports.memory) mergeMemory(exports.memory);\r\n Module['asm'] = exports;\r\n Module[\"usingWasm\"] = true;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n return Module['instantiateWasm'](info, receiveInstance);\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n receiveInstance(output['instance'], output['module']);\r\n }\r\n function instantiateArrayBuffer(receiver) {\r\n getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver).catch(function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n // Prefer streaming instantiation if available.\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n WebAssembly.instantiateStreaming(fetch(wasmBinaryFile, { credentials: 'same-origin' }), info)\r\n .then(receiveInstantiatedSource)\r\n .catch(function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n } else {\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n return {}; // no exports yet; we'll fill them in later\r\n }\r\n\r\n\r\n // We may have a preloaded value in Module.asm, save it\r\n Module['asmPreload'] = Module['asm'];\r\n\r\n // Memory growth integration code\r\n\r\n var asmjsReallocBuffer = Module['reallocBuffer'];\r\n\r\n var wasmReallocBuffer = function(size) {\r\n var PAGE_MULTIPLE = Module[\"usingWasm\"] ? WASM_PAGE_SIZE : ASMJS_PAGE_SIZE; // In wasm, heap size must be a multiple of 64KB. In asm.js, they need to be multiples of 16MB.\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var old = Module['buffer'];\r\n var oldSize = old.byteLength;\r\n if (Module[\"usingWasm\"]) {\r\n // native wasm support\r\n try {\r\n var result = Module['wasmMemory'].grow((size - oldSize) / wasmPageSize); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n return Module['buffer'] = Module['wasmMemory'].buffer;\r\n } else {\r\n return null;\r\n }\r\n } catch(e) {\r\n return null;\r\n }\r\n }\r\n };\r\n\r\n Module['reallocBuffer'] = function(size) {\r\n if (finalMethod === 'asmjs') {\r\n return asmjsReallocBuffer(size);\r\n } else {\r\n return wasmReallocBuffer(size);\r\n }\r\n };\r\n\r\n // we may try more than one; this is the final one, that worked and we are using\r\n var finalMethod = '';\r\n\r\n // Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n // the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n // doesn't need to care that it is wasm or olyfilled wasm or asm.js.\r\n\r\n Module['asm'] = function(global, env, providedBuffer) {\r\n env = fixImports(env);\r\n\r\n // import table\r\n if (!env['table']) {\r\n var TABLE_SIZE = Module['wasmTableSize'];\r\n if (TABLE_SIZE === undefined) TABLE_SIZE = 1024; // works in binaryen interpreter at least\r\n var MAX_TABLE_SIZE = Module['wasmMaxTableSize'];\r\n if (typeof WebAssembly === 'object' && typeof WebAssembly.Table === 'function') {\r\n if (MAX_TABLE_SIZE !== undefined) {\r\n env['table'] = new WebAssembly.Table({ 'initial': TABLE_SIZE, 'maximum': MAX_TABLE_SIZE, 'element': 'anyfunc' });\r\n } else {\r\n env['table'] = new WebAssembly.Table({ 'initial': TABLE_SIZE, element: 'anyfunc' });\r\n }\r\n } else {\r\n env['table'] = new Array(TABLE_SIZE); // works in binaryen interpreter at least\r\n }\r\n Module['wasmTable'] = env['table'];\r\n }\r\n\r\n if (!env['memoryBase']) {\r\n env['memoryBase'] = Module['STATIC_BASE']; // tell the memory segments where to place themselves\r\n }\r\n if (!env['tableBase']) {\r\n env['tableBase'] = 0; // table starts at 0 by default, in dynamic linking this will change\r\n }\r\n\r\n // try the methods. each should return the exports if it succeeded\r\n\r\n var exports;\r\n exports = doNativeWasm(global, env, providedBuffer);\r\n\r\n assert(exports, 'no binaryen method succeeded.');\r\n\r\n\r\n return exports;\r\n };\r\n\r\n var methodHandler = Module['asm']; // note our method handler, as we may modify Module['asm'] later\r\n}\r\n\r\nintegrateWasmJS();\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [];\r\n\r\nfunction _do_error(err){ var end = HEAPU8.indexOf(0, err); var text = String.fromCharCode.apply(null, HEAPU8.subarray(err, end)); self.DApi.exit_error(text); }\r\nfunction _do_progress(done,total){ self.DApi.progress(done, total); }\r\nfunction _get_file_contents(ptr,offset,size){ self.DApi.get_file_contents(HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _put_file_contents(ptr,offset,size){ self.DApi.put_file_contents(HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _put_file_size(size){ self.DApi.put_file_size(size); }\r\n\r\n\r\n\r\nSTATIC_BASE = GLOBAL_BASE;\r\n\r\nSTATICTOP = STATIC_BASE + 28880;\r\n/* global initializers */ __ATINIT__.push();\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar STATIC_BUMP = 28880;\r\nModule[\"STATIC_BASE\"] = STATIC_BASE;\r\nModule[\"STATIC_BUMP\"] = STATIC_BUMP;\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = STATICTOP; STATICTOP += 16;\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n function ___cxa_find_matching_catch_2() {\r\n return ___cxa_find_matching_catch.apply(null, arguments);\r\n }\r\n\r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) { // XXX FIXME\r\n }\r\n }\r\n\r\n \r\n function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()\r\n return !!__ZSt18uncaught_exceptionv.uncaught_exception;\r\n }\r\n \r\n \r\n \r\n var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function (adjusted) {\r\n if (!adjusted || EXCEPTIONS.infos[adjusted]) return adjusted;\r\n for (var key in EXCEPTIONS.infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var info = EXCEPTIONS.infos[ptr];\r\n if (info.adjusted === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n return adjusted;\r\n },addRef:function (ptr) {\r\n if (!ptr) return;\r\n var info = EXCEPTIONS.infos[ptr];\r\n info.refcount++;\r\n },decRef:function (ptr) {\r\n if (!ptr) return;\r\n var info = EXCEPTIONS.infos[ptr];\r\n assert(info.refcount > 0);\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete EXCEPTIONS.infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n },clearRef:function (ptr) {\r\n if (!ptr) return;\r\n var info = EXCEPTIONS.infos[ptr];\r\n info.refcount = 0;\r\n }};\r\n function ___resumeException(ptr) {\r\n if (!EXCEPTIONS.last) { EXCEPTIONS.last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = EXCEPTIONS.last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = EXCEPTIONS.infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = Module['___cxa_is_pointer_type'](throwntype);\r\n // can_catch receives a **, add indirection\r\n if (!___cxa_find_matching_catch.buffer) ___cxa_find_matching_catch.buffer = _malloc(4);\r\n HEAP32[((___cxa_find_matching_catch.buffer)>>2)]=thrown;\r\n thrown = ___cxa_find_matching_catch.buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && Module['___cxa_can_catch'](typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted = thrown;\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }function ___cxa_throw(ptr, type, destructor) {\r\n EXCEPTIONS.infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: ptr,\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n EXCEPTIONS.last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exception = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exception++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n \r\n\r\n \r\n function _llvm_exp2_f32(x) {\r\n return Math.pow(2, x);\r\n }function _llvm_exp2_f64() {\r\n return _llvm_exp2_f32.apply(null, arguments)\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n return dest;\r\n } \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n } \r\nDYNAMICTOP_PTR = staticAlloc(4);\r\n\r\nSTACK_BASE = STACKTOP = alignMemory(STATICTOP);\r\n\r\nSTACK_MAX = STACK_BASE + TOTAL_STACK;\r\n\r\nDYNAMIC_BASE = alignMemory(STACK_MAX);\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\nstaticSealed = true; // seal the static portion of memory\r\n\r\nvar ASSERTIONS = false;\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n\r\nModule['wasmTableSize'] = 163;\r\n\r\nModule['wasmMaxTableSize'] = 163;\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_ii\"](index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iii\"](index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iiii\"](index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iiiii\"](index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iiiiii\"](index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iiiiiii\"](index,a1,a2,a3,a4,a5,a6);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_ji\"](index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_v\"](index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_vi\"](index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_vii\"](index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viii\"](index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viiii\"](index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viji\"](index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nModule.asmGlobalArg = {};\r\n\r\nModule.asmLibraryArg = { \"abort\": abort, \"assert\": assert, \"enlargeMemory\": enlargeMemory, \"getTotalMemory\": getTotalMemory, \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory, \"invoke_ii\": invoke_ii, \"invoke_iii\": invoke_iii, \"invoke_iiii\": invoke_iiii, \"invoke_iiiii\": invoke_iiiii, \"invoke_iiiiii\": invoke_iiiiii, \"invoke_iiiiiii\": invoke_iiiiiii, \"invoke_ji\": invoke_ji, \"invoke_v\": invoke_v, \"invoke_vi\": invoke_vi, \"invoke_vii\": invoke_vii, \"invoke_viii\": invoke_viii, \"invoke_viiii\": invoke_viiii, \"invoke_viiiii\": invoke_viiiii, \"invoke_viiiiii\": invoke_viiiiii, \"invoke_viji\": invoke_viji, \"__ZSt18uncaught_exceptionv\": __ZSt18uncaught_exceptionv, \"___assert_fail\": ___assert_fail, \"___cxa_allocate_exception\": ___cxa_allocate_exception, \"___cxa_find_matching_catch\": ___cxa_find_matching_catch, \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2, \"___cxa_free_exception\": ___cxa_free_exception, \"___cxa_throw\": ___cxa_throw, \"___gxx_personality_v0\": ___gxx_personality_v0, \"___resumeException\": ___resumeException, \"___setErrNo\": ___setErrNo, \"_abort\": _abort, \"_do_error\": _do_error, \"_do_progress\": _do_progress, \"_emscripten_memcpy_big\": _emscripten_memcpy_big, \"_get_file_contents\": _get_file_contents, \"_llvm_exp2_f32\": _llvm_exp2_f32, \"_llvm_exp2_f64\": _llvm_exp2_f64, \"_put_file_contents\": _put_file_contents, \"_put_file_size\": _put_file_size, \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR, \"tempDoublePtr\": tempDoublePtr, \"ABORT\": ABORT, \"STACKTOP\": STACKTOP, \"STACK_MAX\": STACK_MAX };\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(Module.asmGlobalArg, Module.asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_Alloc = Module[\"_DApi_Alloc\"] = function() { return Module[\"asm\"][\"_DApi_Alloc\"].apply(null, arguments) };\r\nvar _DApi_Compress = Module[\"_DApi_Compress\"] = function() { return Module[\"asm\"][\"_DApi_Compress\"].apply(null, arguments) };\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() { return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments) };\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() { return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments) };\r\nvar ___em_js__do_error = Module[\"___em_js__do_error\"] = function() { return Module[\"asm\"][\"___em_js__do_error\"].apply(null, arguments) };\r\nvar ___em_js__do_progress = Module[\"___em_js__do_progress\"] = function() { return Module[\"asm\"][\"___em_js__do_progress\"].apply(null, arguments) };\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() { return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments) };\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() { return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments) };\r\nvar ___em_js__put_file_size = Module[\"___em_js__put_file_size\"] = function() { return Module[\"asm\"][\"___em_js__put_file_size\"].apply(null, arguments) };\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() { return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments) };\r\nvar _free = Module[\"_free\"] = function() { return Module[\"asm\"][\"_free\"].apply(null, arguments) };\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() { return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments) };\r\nvar _malloc = Module[\"_malloc\"] = function() { return Module[\"asm\"][\"_malloc\"].apply(null, arguments) };\r\nvar _memcpy = Module[\"_memcpy\"] = function() { return Module[\"asm\"][\"_memcpy\"].apply(null, arguments) };\r\nvar _memset = Module[\"_memset\"] = function() { return Module[\"asm\"][\"_memset\"].apply(null, arguments) };\r\nvar _sbrk = Module[\"_sbrk\"] = function() { return Module[\"asm\"][\"_sbrk\"].apply(null, arguments) };\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() { return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments) };\r\nvar getTempRet0 = Module[\"getTempRet0\"] = function() { return Module[\"asm\"][\"getTempRet0\"].apply(null, arguments) };\r\nvar runPostSets = Module[\"runPostSets\"] = function() { return Module[\"asm\"][\"runPostSets\"].apply(null, arguments) };\r\nvar setTempRet0 = Module[\"setTempRet0\"] = function() { return Module[\"asm\"][\"setTempRet0\"].apply(null, arguments) };\r\nvar setThrew = Module[\"setThrew\"] = function() { return Module[\"asm\"][\"setThrew\"].apply(null, arguments) };\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() { return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments) };\r\nvar stackRestore = Module[\"stackRestore\"] = function() { return Module[\"asm\"][\"stackRestore\"].apply(null, arguments) };\r\nvar stackSave = Module[\"stackSave\"] = function() { return Module[\"asm\"][\"stackSave\"].apply(null, arguments) };\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() { return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments) };\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() { return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments) };\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() { return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments) };\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() { return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments) };\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() { return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments) };\r\nvar dynCall_iiiiiii = Module[\"dynCall_iiiiiii\"] = function() { return Module[\"asm\"][\"dynCall_iiiiiii\"].apply(null, arguments) };\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() { return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments) };\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() { return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments) };\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() { return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments) };\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() { return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments) };\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() { return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments) };\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() { return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments) };\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() { return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments) };\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() { return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments) };\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() { return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments) };\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n};\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar initialStackTop;\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n ensureInitRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n STACKTOP = initialStackTop;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n if (what !== undefined) {\r\n out(what);\r\n err(what);\r\n what = JSON.stringify(what)\r\n } else {\r\n what = '';\r\n }\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\n// {{PRE_RUN_ADDITIONS}}\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\nModule[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n// {{POST_RUN_ADDITIONS}}\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return MpqCmp;\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = MpqCmp;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return MpqCmp; });\r\n else if (typeof exports === 'object')\r\n exports[\"MpqCmp\"] = MpqCmp;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar runtime = function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n\n\n var IteratorPrototype = {};\n\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\"; // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n prototype[method] = function (arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n };\n\n exports.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n\n\n exports.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && typeof value === \"object\" && hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function (error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n\n exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n exports.async = function (innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList));\n return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === \"throw\") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n Gp[toStringTagSymbol] = \"Generator\"; // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n Gp[iteratorSymbol] = function () {\n return this;\n };\n\n Gp.toString = function () {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: \"root\"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n exports.values = values;\n\n function doneResult() {\n return {\n value: undefined,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n this.method = \"next\";\n this.arg = undefined;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n stop: function stop() {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" || record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n }; // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n\n return exports;\n}( // If this script is executing as a CommonJS module, use module.exports\n// as the regeneratorRuntime namespace. Otherwise create a new empty\n// object. Either way, the resulting object will be used to initialize\n// the regeneratorRuntime variable at the top of this file.\ntypeof module === \"object\" ? module.exports : {});\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n} // path.resolve([from ...], to)\n// posix version\n\n\nexports.resolve = function () {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries\n\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n } // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n\n\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}; // path.normalize(path)\n// posix version\n\n\nexports.normalize = function (path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/'; // Normalize the path\n\n path = normalizeArray(filter(path.split('/'), function (p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n}; // posix version\n\n\nexports.isAbsolute = function (path) {\n return path.charAt(0) === '/';\n}; // posix version\n\n\nexports.join = function () {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function (p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n\n return p;\n }).join('/'));\n}; // path.relative(from, to)\n// posix version\n\n\nexports.relative = function (from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47\n /*/*/\n ;\n var end = -1;\n var matchedSlash = true;\n\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n} // Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\n\n\nexports.basename = function (path, ext) {\n var f = basename(path);\n\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n\n var preDotState = 0;\n\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n\n continue;\n }\n\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46\n /*.*/\n ) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot\n preDotState === 0 || // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n\n return path.slice(startDot, end);\n};\n\nfunction filter(xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n\n return res;\n} // String.prototype.substr - negative index don't work in IE8\n\n\nvar substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {\n return str.substr(start, len);\n} : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n};","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","import MpqModule from './MpqCmp.jscc';\r\n\r\n/* eslint-disable-next-line no-restricted-globals */\r\nconst worker = self;\r\n\r\nlet input_file = null;\r\nlet input_offset = 0;\r\nlet output_file = null;\r\nlet last_progress = 0;\r\nfunction progress(value) {\r\n worker.postMessage({action: \"progress\", value});\r\n}\r\n\r\nconst DApi = {\r\n exit_error(error) {\r\n throw Error(error);\r\n },\r\n\r\n get_file_contents(array, offset) {\r\n array.set(input_file.subarray(offset - input_offset, offset - input_offset + array.byteLength));\r\n },\r\n put_file_size(size) {\r\n output_file = new Uint8Array(size);\r\n },\r\n put_file_contents(array, offset) {\r\n output_file.set(array, offset);\r\n },\r\n\r\n progress(done, total) {\r\n if (done === total || performance.now() > last_progress + 100) {\r\n progress(done);\r\n last_progress = performance.now();\r\n }\r\n },\r\n};\r\n\r\nworker.DApi = DApi;\r\n\r\nasync function run({binary, mpq, input, offset, blockSize}) {\r\n const wasm = await MpqModule({wasmBinary: binary}).ready;\r\n\r\n input_file = new Uint8Array(mpq);\r\n input_offset = offset;\r\n\r\n const count = input.length / 6;\r\n const ptr = wasm._DApi_Alloc(input.byteLength);\r\n wasm.HEAPU32.set(input, ptr >> 2);\r\n\r\n const dst = wasm._DApi_Compress(offset + input_file.length, blockSize, count, ptr) >> 2;\r\n\r\n return [output_file.buffer, wasm.HEAPU32.slice(dst , dst + count * 4)];\r\n}\r\n\r\nworker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"run\":\r\n run(data).then(\r\n ([buffer, blocks]) => worker.postMessage({action: \"result\", buffer, blocks}, [buffer, blocks.buffer]),\r\n err => worker.postMessage({action: \"error\", error: err.toString(), stack: err.stack}));\r\n break;\r\n default:\r\n }\r\n});\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["../webpack/bootstrap","../node_modules/@babel/runtime/regenerator/index.js","../node_modules/process/browser.js","mpqcmp/MpqCmp.jscc","../node_modules/regenerator-runtime/runtime.js","../node_modules/path-browserify/index.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","mpqcmp/mpqcmp.worker.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","e","this","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","length","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","arguments","push","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","MpqCmp","_scriptDir","document","currentScript","src","undefined","Module","moduleOverrides","status","toThrow","ENVIRONMENT_IS_NODE","ENVIRONMENT_IS_SHELL","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","window","importScripts","nodeFS","nodePath","scriptDirectory","locateFile","path","__dirname","filename","binary","ret","toString","buffer","Uint8Array","assert","replace","slice","ex","ExitStatus","reason","read","f","data","readbuffer","scriptArgs","quit","self","location","href","indexOf","split","join","url","xhr","XMLHttpRequest","open","send","responseText","responseType","response","onload","onerror","out","console","log","print","err","printErr","warn","STACK_ALIGN","staticAlloc","size","STATICTOP","alignMemory","factor","Math","ceil","asm2wasmImports","f64-rem","x","y","debugger","ABORT","condition","text","abort","Pointer_stringify","ptr","hasUtf","HEAPU8","curr","String","fromCharCode","subarray","min","u8Array","idx","endPtr","UTF8Decoder","decode","u0","u1","u2","u3","u4","u5","str","ch","UTF8ArrayToString","UTF8ToString","TextDecoder","HEAP8","HEAP32","STACK_BASE","STACKTOP","STACK_MAX","DYNAMIC_BASE","DYNAMICTOP_PTR","WASM_PAGE_SIZE","ASMJS_PAGE_SIZE","MIN_TOTAL_MEMORY","alignUp","multiple","updateGlobalBuffer","buf","updateGlobalBufferViews","Int8Array","Int16Array","Int32Array","Uint16Array","Uint32Array","Float32Array","Float64Array","enlargeMemory","PAGE_MULTIPLE","LIMIT","OLD_TOTAL_MEMORY","TOTAL_MEMORY","max","replacement","byteLength","ArrayBuffer","transfer","oldHEAP8","set","_emscripten_replace_memory","Function","getOwnPropertyDescriptor","TOTAL_STACK","callRuntimeCallbacks","callbacks","callback","shift","func","arg","WebAssembly","Memory","initial","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","runtimeInitialized","addOnPostRun","cb","unshift","abs","cos","sin","tan","acos","asin","atan","atan2","exp","sqrt","floor","pow","imul","fround","round","clz32","trunc","runDependencies","runDependencyWatcher","dependenciesFulfilled","dataURIPrefix","isDataURI","startsWith","wasmTextFile","wasmBinaryFile","asmjsCodeFile","info","global","asm2wasm","parent","getBinary","doNativeWasm","providedBuffer","receiveInstance","instance","memory","newBuffer","oldBuffer","oldView","mergeMemory","id","clearInterval","removeRunDependency","NaN","Infinity","receiveInstantiatedSource","output","instantiateArrayBuffer","receiver","fetch","Promise","resolve","reject","credentials","then","catch","instantiate","instantiateStreaming","asmjsReallocBuffer","finalMethod","oldSize","grow","wasmReallocBuffer","TABLE_SIZE","MAX_TABLE_SIZE","Table","maximum","element","integrateWasmJS","STATIC_BASE","tempDoublePtr","___cxa_free_exception","_free","__ZSt18uncaught_exceptionv","uncaught_exception","EXCEPTIONS","last","caught","infos","deAdjust","adjusted","addRef","refcount","decRef","rethrown","destructor","clearRef","___cxa_find_matching_catch","thrown","setTempRet0","throwntype","type","typeArray","_malloc","_llvm_exp2_f32","asmGlobalArg","asmLibraryArg","getTotalMemory","abortOnCannotGrowMemory","invoke_ii","index","a1","sp","stackSave","stackRestore","invoke_iii","a2","invoke_iiii","a3","invoke_iiiii","a4","invoke_iiiiii","a5","invoke_iiiiiii","a6","invoke_ji","invoke_v","invoke_vi","invoke_vii","invoke_viii","invoke_viiii","invoke_viiiii","invoke_viiiiii","invoke_viji","___assert_fail","line","___cxa_allocate_exception","___cxa_find_matching_catch_2","___cxa_throw","___gxx_personality_v0","___resumeException","___setErrNo","_abort","_do_error","end","DApi","exit_error","_do_progress","done","total","progress","_emscripten_memcpy_big","dest","num","_get_file_contents","offset","get_file_contents","_llvm_exp2_f64","_put_file_contents","put_file_contents","_put_file_size","put_file_size","asm","message","old","constructor","doRun","postRun","preRun","runCaller","what","JSON","stringify","pop","runtime","Op","hasOwn","$Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","state","GenStateSuspendedStart","method","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","fn","obj","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","previousPromise","callInvokeWithMethodAndArg","invoke","result","__await","unwrapped","error","TypeError","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","keys","reverse","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","hasCatch","hasFinally","finallyEntry","complete","finish","delegateYield","regeneratorRuntime","accidentalStrictMode","normalizeArray","parts","allowAboveRoot","up","splice","filter","xs","res","resolvedPath","resolvedAbsolute","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","arr","start","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","code","charCodeAt","hasRoot","matchedSlash","basename","ext","extname","startDot","startPart","preDotState","_slicedToArray","isArray","_arrayWithHoles","_arr","_n","_d","_e","_s","_i","_iterableToArrayLimit","_nonIterableRest","asyncGeneratorStep","gen","_next","_throw","worker","input_file","input_offset","output_file","last_progress","performance","now","postMessage","action","_callee","_ref","mpq","input","blockSize","wasm","count","dst","regenerator_default","a","_context","MpqModule","wasmBinary","ready","_DApi_Alloc","HEAPU32","_DApi_Compress","addEventListener","_ref2","_ref3","_ref4","blocks","stack"],"mappings":"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","file":"8acc76fdb6ee253c485e.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/diabloweb/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n","module.exports = require(\"regenerator-runtime\");\n","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","\r\nvar MpqCmp = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(MpqCmp) {\r\n MpqCmp = MpqCmp || {};\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof MpqCmp !== 'undefined' ? MpqCmp : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// The environment setup code below is customized to use Module.\r\n// *** Environment setup code ***\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\nENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n Module['read'] = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n Module['readBinary'] = function readBinary(filename) {\r\n var ret = Module['read'](filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', function(reason, p) {\r\n process['exit'](1);\r\n });\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n Module['read'] = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n Module['readBinary'] = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WEB) {\r\n if (document.currentScript) {\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n } else { // worker\r\n scriptDirectory = self.location.href;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.split('/').slice(0, -1).join('/') + '/';\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n Module['read'] = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n Module['readBinary'] = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n Module['readAsync'] = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n Module['setWindowTitle'] = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// *** Environment setup code ***\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction staticAlloc(size) {\r\n var ret = STATICTOP;\r\n STATICTOP = (STATICTOP + size + 15) & -16;\r\n return ret;\r\n}\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n if (end >= TOTAL_MEMORY) {\r\n var success = enlargeMemory();\r\n if (!success) {\r\n HEAP32[DYNAMICTOP_PTR>>2] = ret;\r\n return 0;\r\n }\r\n }\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n var ret = size = Math.ceil(size / factor) * factor;\r\n return ret;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// 'sig' parameter is only used on LLVM wasm backend\r\nfunction addFunction(func, sig) {\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n}\r\n\r\nfunction removeFunction(index) {\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\n\r\n\r\nvar Runtime = {\r\n // FIXME backwards compatibility layer for ports. Support some Runtime.*\r\n // for now, fix it there, then remove it from here. That way we\r\n // can minimize any period of breakage.\r\n dynCall: dynCall, // for SDL2 port\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\nvar ABORT = 0; // whether we are quitting the application. no code should run after this. set in exit() and abort()\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\nvar globalScope = this;\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\nvar JSfuncs = {\r\n // Helpers for cwrap -- it can't refer to Runtime directly because it might\r\n // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find\r\n // out what the minified function name is.\r\n 'stackSave': function() {\r\n stackSave()\r\n },\r\n 'stackRestore': function() {\r\n stackRestore()\r\n },\r\n // type conversion from js to c\r\n 'arrayToC' : function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n },\r\n 'stringToC' : function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n }\r\n};\r\n\r\n// For fast lookup of conversion functions\r\nvar toC = {\r\n 'string': JSfuncs['stringToC'], 'array': JSfuncs['arrayToC']\r\n};\r\n\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return Pointer_stringify(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_STATIC = 2; // Cannot be freed\r\nvar ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 4; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [typeof _malloc === 'function' ? _malloc : staticAlloc, stackAlloc, staticAlloc, dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!staticSealed) return staticAlloc(size);\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n if (length === 0 || !ptr) return '';\r\n // Find the length, and check for UTF while doing so\r\n var hasUtf = 0;\r\n var t;\r\n var i = 0;\r\n while (1) {\r\n t = HEAPU8[(((ptr)+(i))>>0)];\r\n hasUtf |= t;\r\n if (t == 0 && !length) break;\r\n i++;\r\n if (length && i == length) break;\r\n }\r\n if (!length) length = i;\r\n\r\n var ret = '';\r\n\r\n if (hasUtf < 128) {\r\n var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack\r\n var curr;\r\n while (length > 0) {\r\n curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));\r\n ret = ret ? ret + curr : curr;\r\n ptr += MAX_CHUNK;\r\n length -= MAX_CHUNK;\r\n }\r\n return ret;\r\n }\r\n return UTF8ToString(ptr);\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAP8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\nfunction UTF8ArrayToString(u8Array, idx) {\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n while (u8Array[endPtr]) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var u0, u1, u2, u3, u4, u5;\r\n\r\n var str = '';\r\n while (1) {\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n u0 = u8Array[idx++];\r\n if (!u0) return str;\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF8) == 0xF0) {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = u8Array[idx++] & 63;\r\n if ((u0 & 0xFC) == 0xF8) {\r\n u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = u8Array[idx++] & 63;\r\n u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction UTF8ToString(ptr) {\r\n return UTF8ArrayToString(HEAPU8,ptr);\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0x1FFFFF) {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0x3FFFFFF) {\r\n if (outIdx + 4 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF8 | (u >> 24);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 5 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xFC | (u >> 30);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (x + ' [' + y + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\nvar MIN_TOTAL_MEMORY = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBuffer(buf) {\r\n Module['buffer'] = buffer = buf;\r\n}\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\nvar STATIC_BASE, STATICTOP, staticSealed; // static area\r\nvar STACK_BASE, STACKTOP, STACK_MAX; // stack area\r\nvar DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk\r\n\r\n STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;\r\n staticSealed = false;\r\n\r\n\r\n\r\n\r\nfunction abortOnCannotGrowMemory() {\r\n abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ');\r\n}\r\n\r\nif (!Module['reallocBuffer']) Module['reallocBuffer'] = function(size) {\r\n var ret;\r\n try {\r\n if (ArrayBuffer.transfer) {\r\n ret = ArrayBuffer.transfer(buffer, size);\r\n } else {\r\n var oldHEAP8 = HEAP8;\r\n ret = new ArrayBuffer(size);\r\n var temp = new Int8Array(ret);\r\n temp.set(oldHEAP8);\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n var success = _emscripten_replace_memory(ret);\r\n if (!success) return false;\r\n return ret;\r\n};\r\n\r\nfunction enlargeMemory() {\r\n // TOTAL_MEMORY is the current size of the actual array, and DYNAMICTOP is the new top.\r\n\r\n\r\n var PAGE_MULTIPLE = Module[\"usingWasm\"] ? WASM_PAGE_SIZE : ASMJS_PAGE_SIZE; // In wasm, heap size must be a multiple of 64KB. In asm.js, they need to be multiples of 16MB.\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n\r\n if (HEAP32[DYNAMICTOP_PTR>>2] > LIMIT) {\r\n return false;\r\n }\r\n\r\n var OLD_TOTAL_MEMORY = TOTAL_MEMORY;\r\n TOTAL_MEMORY = Math.max(TOTAL_MEMORY, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n\r\n while (TOTAL_MEMORY < HEAP32[DYNAMICTOP_PTR>>2]) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (TOTAL_MEMORY <= 536870912) {\r\n TOTAL_MEMORY = alignUp(2 * TOTAL_MEMORY, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n TOTAL_MEMORY = Math.min(alignUp((3 * TOTAL_MEMORY + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n }\r\n\r\n\r\n var replacement = Module['reallocBuffer'](TOTAL_MEMORY);\r\n if (!replacement || replacement.byteLength != TOTAL_MEMORY) {\r\n // restore the state to before this call, we failed\r\n TOTAL_MEMORY = OLD_TOTAL_MEMORY;\r\n return false;\r\n }\r\n\r\n // everything worked\r\n\r\n updateGlobalBuffer(replacement);\r\n updateGlobalBufferViews();\r\n\r\n\r\n\r\n return true;\r\n}\r\n\r\nvar byteLength;\r\ntry {\r\n byteLength = Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'byteLength').get);\r\n byteLength(new ArrayBuffer(4)); // can fail on older ie\r\n} catch(e) { // can fail on older node/v8\r\n byteLength = function(buffer) { return buffer.byteLength; };\r\n}\r\n\r\nvar TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;\r\nvar TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n// Use a provided buffer, if there is one, or else allocate a new one\r\nif (Module['buffer']) {\r\n buffer = Module['buffer'];\r\n} else {\r\n // Use a WebAssembly memory where available\r\n if (typeof WebAssembly === 'object' && typeof WebAssembly.Memory === 'function') {\r\n Module['wasmMemory'] = new WebAssembly.Memory({ 'initial': TOTAL_MEMORY / WASM_PAGE_SIZE });\r\n buffer = Module['wasmMemory'].buffer;\r\n } else\r\n {\r\n buffer = new ArrayBuffer(TOTAL_MEMORY);\r\n }\r\n Module['buffer'] = buffer;\r\n}\r\nupdateGlobalBufferViews();\r\n\r\n\r\nfunction getTotalMemory() {\r\n return TOTAL_MEMORY;\r\n}\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction ensureInitRuntime() {\r\n if (runtimeInitialized) return;\r\n runtimeInitialized = true;\r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n callRuntimeCallbacks(__ATEXIT__);\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n __ATEXIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// PRE_RUN_ADDITIONS (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nfunction integrateWasmJS() {\r\n // wasm.js has several methods for creating the compiled code module here:\r\n // * 'native-wasm' : use native WebAssembly support in the browser\r\n // * 'interpret-s-expr': load s-expression code from a .wast and interpret\r\n // * 'interpret-binary': load binary wasm and interpret\r\n // * 'interpret-asm2wasm': load asm.js code, translate to wasm, and interpret\r\n // * 'asmjs': no wasm, just load the asm.js code and use that (good for testing)\r\n // The method is set at compile time (BINARYEN_METHOD)\r\n // The method can be a comma-separated list, in which case, we will try the\r\n // options one by one. Some of them can fail gracefully, and then we can try\r\n // the next.\r\n\r\n // inputs\r\n\r\n var method = 'native-wasm';\r\n\r\n var wasmTextFile = 'MpqCmp.wast';\r\n var wasmBinaryFile = 'MpqCmp.wasm';\r\n var asmjsCodeFile = 'MpqCmp.temp.asm.js';\r\n\r\n if (!isDataURI(wasmTextFile)) {\r\n wasmTextFile = locateFile(wasmTextFile);\r\n }\r\n if (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n }\r\n if (!isDataURI(asmjsCodeFile)) {\r\n asmjsCodeFile = locateFile(asmjsCodeFile);\r\n }\r\n\r\n // utilities\r\n\r\n var wasmPageSize = 64*1024;\r\n\r\n var info = {\r\n 'global': null,\r\n 'env': null,\r\n 'asm2wasm': asm2wasmImports,\r\n 'parent': Module // Module inside wasm-js.cpp refers to wasm-js.cpp; this allows access to the outside program.\r\n };\r\n\r\n var exports = null;\r\n\r\n\r\n function mergeMemory(newBuffer) {\r\n // The wasm instance creates its memory. But static init code might have written to\r\n // buffer already, including the mem init file, and we must copy it over in a proper merge.\r\n // TODO: avoid this copy, by avoiding such static init writes\r\n // TODO: in shorter term, just copy up to the last static init write\r\n var oldBuffer = Module['buffer'];\r\n if (newBuffer.byteLength < oldBuffer.byteLength) {\r\n err('the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here');\r\n }\r\n var oldView = new Int8Array(oldBuffer);\r\n var newView = new Int8Array(newBuffer);\r\n\r\n\r\n newView.set(oldView);\r\n updateGlobalBuffer(newBuffer);\r\n updateGlobalBufferViews();\r\n }\r\n\r\n function fixImports(imports) {\r\n return imports;\r\n }\r\n\r\n function getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (Module['readBinary']) {\r\n return Module['readBinary'](wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n }\r\n\r\n function getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n }\r\n\r\n // do-method functions\r\n\r\n\r\n function doNativeWasm(global, env, providedBuffer) {\r\n if (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n return false;\r\n }\r\n // prepare memory import\r\n if (!(Module['wasmMemory'] instanceof WebAssembly.Memory)) {\r\n err('no native wasm Memory in use');\r\n return false;\r\n }\r\n env['memory'] = Module['wasmMemory'];\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n info['global'] = {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n };\r\n info['global.Math'] = Math;\r\n info['env'] = env;\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n exports = instance.exports;\r\n if (exports.memory) mergeMemory(exports.memory);\r\n Module['asm'] = exports;\r\n Module[\"usingWasm\"] = true;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n return Module['instantiateWasm'](info, receiveInstance);\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n receiveInstance(output['instance'], output['module']);\r\n }\r\n function instantiateArrayBuffer(receiver) {\r\n getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver).catch(function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n // Prefer streaming instantiation if available.\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n WebAssembly.instantiateStreaming(fetch(wasmBinaryFile, { credentials: 'same-origin' }), info)\r\n .then(receiveInstantiatedSource)\r\n .catch(function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n } else {\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n return {}; // no exports yet; we'll fill them in later\r\n }\r\n\r\n\r\n // We may have a preloaded value in Module.asm, save it\r\n Module['asmPreload'] = Module['asm'];\r\n\r\n // Memory growth integration code\r\n\r\n var asmjsReallocBuffer = Module['reallocBuffer'];\r\n\r\n var wasmReallocBuffer = function(size) {\r\n var PAGE_MULTIPLE = Module[\"usingWasm\"] ? WASM_PAGE_SIZE : ASMJS_PAGE_SIZE; // In wasm, heap size must be a multiple of 64KB. In asm.js, they need to be multiples of 16MB.\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var old = Module['buffer'];\r\n var oldSize = old.byteLength;\r\n if (Module[\"usingWasm\"]) {\r\n // native wasm support\r\n try {\r\n var result = Module['wasmMemory'].grow((size - oldSize) / wasmPageSize); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n return Module['buffer'] = Module['wasmMemory'].buffer;\r\n } else {\r\n return null;\r\n }\r\n } catch(e) {\r\n return null;\r\n }\r\n }\r\n };\r\n\r\n Module['reallocBuffer'] = function(size) {\r\n if (finalMethod === 'asmjs') {\r\n return asmjsReallocBuffer(size);\r\n } else {\r\n return wasmReallocBuffer(size);\r\n }\r\n };\r\n\r\n // we may try more than one; this is the final one, that worked and we are using\r\n var finalMethod = '';\r\n\r\n // Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n // the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n // doesn't need to care that it is wasm or olyfilled wasm or asm.js.\r\n\r\n Module['asm'] = function(global, env, providedBuffer) {\r\n env = fixImports(env);\r\n\r\n // import table\r\n if (!env['table']) {\r\n var TABLE_SIZE = Module['wasmTableSize'];\r\n if (TABLE_SIZE === undefined) TABLE_SIZE = 1024; // works in binaryen interpreter at least\r\n var MAX_TABLE_SIZE = Module['wasmMaxTableSize'];\r\n if (typeof WebAssembly === 'object' && typeof WebAssembly.Table === 'function') {\r\n if (MAX_TABLE_SIZE !== undefined) {\r\n env['table'] = new WebAssembly.Table({ 'initial': TABLE_SIZE, 'maximum': MAX_TABLE_SIZE, 'element': 'anyfunc' });\r\n } else {\r\n env['table'] = new WebAssembly.Table({ 'initial': TABLE_SIZE, element: 'anyfunc' });\r\n }\r\n } else {\r\n env['table'] = new Array(TABLE_SIZE); // works in binaryen interpreter at least\r\n }\r\n Module['wasmTable'] = env['table'];\r\n }\r\n\r\n if (!env['memoryBase']) {\r\n env['memoryBase'] = Module['STATIC_BASE']; // tell the memory segments where to place themselves\r\n }\r\n if (!env['tableBase']) {\r\n env['tableBase'] = 0; // table starts at 0 by default, in dynamic linking this will change\r\n }\r\n\r\n // try the methods. each should return the exports if it succeeded\r\n\r\n var exports;\r\n exports = doNativeWasm(global, env, providedBuffer);\r\n\r\n assert(exports, 'no binaryen method succeeded.');\r\n\r\n\r\n return exports;\r\n };\r\n\r\n var methodHandler = Module['asm']; // note our method handler, as we may modify Module['asm'] later\r\n}\r\n\r\nintegrateWasmJS();\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [];\r\n\r\nfunction _do_error(err){ var end = HEAPU8.indexOf(0, err); var text = String.fromCharCode.apply(null, HEAPU8.subarray(err, end)); self.DApi.exit_error(text); }\r\nfunction _do_progress(done,total){ self.DApi.progress(done, total); }\r\nfunction _get_file_contents(ptr,offset,size){ self.DApi.get_file_contents(HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _put_file_contents(ptr,offset,size){ self.DApi.put_file_contents(HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _put_file_size(size){ self.DApi.put_file_size(size); }\r\n\r\n\r\n\r\nSTATIC_BASE = GLOBAL_BASE;\r\n\r\nSTATICTOP = STATIC_BASE + 28880;\r\n/* global initializers */ __ATINIT__.push();\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar STATIC_BUMP = 28880;\r\nModule[\"STATIC_BASE\"] = STATIC_BASE;\r\nModule[\"STATIC_BUMP\"] = STATIC_BUMP;\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = STATICTOP; STATICTOP += 16;\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n function ___cxa_find_matching_catch_2() {\r\n return ___cxa_find_matching_catch.apply(null, arguments);\r\n }\r\n\r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) { // XXX FIXME\r\n }\r\n }\r\n\r\n \r\n function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()\r\n return !!__ZSt18uncaught_exceptionv.uncaught_exception;\r\n }\r\n \r\n \r\n \r\n var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function (adjusted) {\r\n if (!adjusted || EXCEPTIONS.infos[adjusted]) return adjusted;\r\n for (var key in EXCEPTIONS.infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var info = EXCEPTIONS.infos[ptr];\r\n if (info.adjusted === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n return adjusted;\r\n },addRef:function (ptr) {\r\n if (!ptr) return;\r\n var info = EXCEPTIONS.infos[ptr];\r\n info.refcount++;\r\n },decRef:function (ptr) {\r\n if (!ptr) return;\r\n var info = EXCEPTIONS.infos[ptr];\r\n assert(info.refcount > 0);\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete EXCEPTIONS.infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n },clearRef:function (ptr) {\r\n if (!ptr) return;\r\n var info = EXCEPTIONS.infos[ptr];\r\n info.refcount = 0;\r\n }};\r\n function ___resumeException(ptr) {\r\n if (!EXCEPTIONS.last) { EXCEPTIONS.last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = EXCEPTIONS.last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = EXCEPTIONS.infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = Module['___cxa_is_pointer_type'](throwntype);\r\n // can_catch receives a **, add indirection\r\n if (!___cxa_find_matching_catch.buffer) ___cxa_find_matching_catch.buffer = _malloc(4);\r\n HEAP32[((___cxa_find_matching_catch.buffer)>>2)]=thrown;\r\n thrown = ___cxa_find_matching_catch.buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && Module['___cxa_can_catch'](typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted = thrown;\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }function ___cxa_throw(ptr, type, destructor) {\r\n EXCEPTIONS.infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: ptr,\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n EXCEPTIONS.last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exception = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exception++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n \r\n\r\n \r\n function _llvm_exp2_f32(x) {\r\n return Math.pow(2, x);\r\n }function _llvm_exp2_f64() {\r\n return _llvm_exp2_f32.apply(null, arguments)\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n return dest;\r\n } \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n } \r\nDYNAMICTOP_PTR = staticAlloc(4);\r\n\r\nSTACK_BASE = STACKTOP = alignMemory(STATICTOP);\r\n\r\nSTACK_MAX = STACK_BASE + TOTAL_STACK;\r\n\r\nDYNAMIC_BASE = alignMemory(STACK_MAX);\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\nstaticSealed = true; // seal the static portion of memory\r\n\r\nvar ASSERTIONS = false;\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n\r\nModule['wasmTableSize'] = 163;\r\n\r\nModule['wasmMaxTableSize'] = 163;\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_ii\"](index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iii\"](index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iiii\"](index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iiiii\"](index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iiiiii\"](index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_iiiiiii\"](index,a1,a2,a3,a4,a5,a6);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return Module[\"dynCall_ji\"](index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_v\"](index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_vi\"](index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_vii\"](index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viii\"](index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viiii\"](index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n Module[\"dynCall_viji\"](index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (typeof e !== 'number' && e !== 'longjmp') throw e;\r\n Module[\"setThrew\"](1, 0);\r\n }\r\n}\r\n\r\nModule.asmGlobalArg = {};\r\n\r\nModule.asmLibraryArg = { \"abort\": abort, \"assert\": assert, \"enlargeMemory\": enlargeMemory, \"getTotalMemory\": getTotalMemory, \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory, \"invoke_ii\": invoke_ii, \"invoke_iii\": invoke_iii, \"invoke_iiii\": invoke_iiii, \"invoke_iiiii\": invoke_iiiii, \"invoke_iiiiii\": invoke_iiiiii, \"invoke_iiiiiii\": invoke_iiiiiii, \"invoke_ji\": invoke_ji, \"invoke_v\": invoke_v, \"invoke_vi\": invoke_vi, \"invoke_vii\": invoke_vii, \"invoke_viii\": invoke_viii, \"invoke_viiii\": invoke_viiii, \"invoke_viiiii\": invoke_viiiii, \"invoke_viiiiii\": invoke_viiiiii, \"invoke_viji\": invoke_viji, \"__ZSt18uncaught_exceptionv\": __ZSt18uncaught_exceptionv, \"___assert_fail\": ___assert_fail, \"___cxa_allocate_exception\": ___cxa_allocate_exception, \"___cxa_find_matching_catch\": ___cxa_find_matching_catch, \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2, \"___cxa_free_exception\": ___cxa_free_exception, \"___cxa_throw\": ___cxa_throw, \"___gxx_personality_v0\": ___gxx_personality_v0, \"___resumeException\": ___resumeException, \"___setErrNo\": ___setErrNo, \"_abort\": _abort, \"_do_error\": _do_error, \"_do_progress\": _do_progress, \"_emscripten_memcpy_big\": _emscripten_memcpy_big, \"_get_file_contents\": _get_file_contents, \"_llvm_exp2_f32\": _llvm_exp2_f32, \"_llvm_exp2_f64\": _llvm_exp2_f64, \"_put_file_contents\": _put_file_contents, \"_put_file_size\": _put_file_size, \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR, \"tempDoublePtr\": tempDoublePtr, \"ABORT\": ABORT, \"STACKTOP\": STACKTOP, \"STACK_MAX\": STACK_MAX };\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(Module.asmGlobalArg, Module.asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_Alloc = Module[\"_DApi_Alloc\"] = function() { return Module[\"asm\"][\"_DApi_Alloc\"].apply(null, arguments) };\r\nvar _DApi_Compress = Module[\"_DApi_Compress\"] = function() { return Module[\"asm\"][\"_DApi_Compress\"].apply(null, arguments) };\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() { return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments) };\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() { return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments) };\r\nvar ___em_js__do_error = Module[\"___em_js__do_error\"] = function() { return Module[\"asm\"][\"___em_js__do_error\"].apply(null, arguments) };\r\nvar ___em_js__do_progress = Module[\"___em_js__do_progress\"] = function() { return Module[\"asm\"][\"___em_js__do_progress\"].apply(null, arguments) };\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() { return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments) };\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() { return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments) };\r\nvar ___em_js__put_file_size = Module[\"___em_js__put_file_size\"] = function() { return Module[\"asm\"][\"___em_js__put_file_size\"].apply(null, arguments) };\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() { return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments) };\r\nvar _free = Module[\"_free\"] = function() { return Module[\"asm\"][\"_free\"].apply(null, arguments) };\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() { return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments) };\r\nvar _malloc = Module[\"_malloc\"] = function() { return Module[\"asm\"][\"_malloc\"].apply(null, arguments) };\r\nvar _memcpy = Module[\"_memcpy\"] = function() { return Module[\"asm\"][\"_memcpy\"].apply(null, arguments) };\r\nvar _memset = Module[\"_memset\"] = function() { return Module[\"asm\"][\"_memset\"].apply(null, arguments) };\r\nvar _sbrk = Module[\"_sbrk\"] = function() { return Module[\"asm\"][\"_sbrk\"].apply(null, arguments) };\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() { return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments) };\r\nvar getTempRet0 = Module[\"getTempRet0\"] = function() { return Module[\"asm\"][\"getTempRet0\"].apply(null, arguments) };\r\nvar runPostSets = Module[\"runPostSets\"] = function() { return Module[\"asm\"][\"runPostSets\"].apply(null, arguments) };\r\nvar setTempRet0 = Module[\"setTempRet0\"] = function() { return Module[\"asm\"][\"setTempRet0\"].apply(null, arguments) };\r\nvar setThrew = Module[\"setThrew\"] = function() { return Module[\"asm\"][\"setThrew\"].apply(null, arguments) };\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() { return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments) };\r\nvar stackRestore = Module[\"stackRestore\"] = function() { return Module[\"asm\"][\"stackRestore\"].apply(null, arguments) };\r\nvar stackSave = Module[\"stackSave\"] = function() { return Module[\"asm\"][\"stackSave\"].apply(null, arguments) };\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() { return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments) };\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() { return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments) };\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() { return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments) };\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() { return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments) };\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() { return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments) };\r\nvar dynCall_iiiiiii = Module[\"dynCall_iiiiiii\"] = function() { return Module[\"asm\"][\"dynCall_iiiiiii\"].apply(null, arguments) };\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() { return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments) };\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() { return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments) };\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() { return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments) };\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() { return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments) };\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() { return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments) };\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() { return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments) };\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() { return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments) };\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() { return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments) };\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() { return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments) };\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n};\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar initialStackTop;\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n ensureInitRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n STACKTOP = initialStackTop;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n if (what !== undefined) {\r\n out(what);\r\n err(what);\r\n what = JSON.stringify(what)\r\n } else {\r\n what = '';\r\n }\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\n// {{PRE_RUN_ADDITIONS}}\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\nModule[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n// {{POST_RUN_ADDITIONS}}\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return MpqCmp;\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = MpqCmp;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return MpqCmp; });\r\n else if (typeof exports === 'object')\r\n exports[\"MpqCmp\"] = MpqCmp;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar runtime = function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n\n\n var IteratorPrototype = {};\n\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\"; // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n prototype[method] = function (arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n };\n\n exports.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n\n\n exports.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && typeof value === \"object\" && hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function (error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n\n exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n exports.async = function (innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList));\n return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === \"throw\") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n Gp[toStringTagSymbol] = \"Generator\"; // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n Gp[iteratorSymbol] = function () {\n return this;\n };\n\n Gp.toString = function () {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: \"root\"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n exports.values = values;\n\n function doneResult() {\n return {\n value: undefined,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n this.method = \"next\";\n this.arg = undefined;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n stop: function stop() {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" || record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n }; // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n\n return exports;\n}( // If this script is executing as a CommonJS module, use module.exports\n// as the regeneratorRuntime namespace. Otherwise create a new empty\n// object. Either way, the resulting object will be used to initialize\n// the regeneratorRuntime variable at the top of this file.\ntypeof module === \"object\" ? module.exports : {});\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n} // path.resolve([from ...], to)\n// posix version\n\n\nexports.resolve = function () {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries\n\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n } // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n\n\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}; // path.normalize(path)\n// posix version\n\n\nexports.normalize = function (path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/'; // Normalize the path\n\n path = normalizeArray(filter(path.split('/'), function (p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n}; // posix version\n\n\nexports.isAbsolute = function (path) {\n return path.charAt(0) === '/';\n}; // posix version\n\n\nexports.join = function () {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function (p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n\n return p;\n }).join('/'));\n}; // path.relative(from, to)\n// posix version\n\n\nexports.relative = function (from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47\n /*/*/\n ;\n var end = -1;\n var matchedSlash = true;\n\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n} // Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\n\n\nexports.basename = function (path, ext) {\n var f = basename(path);\n\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n\n var preDotState = 0;\n\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n\n continue;\n }\n\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46\n /*.*/\n ) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot\n preDotState === 0 || // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n\n return path.slice(startDot, end);\n};\n\nfunction filter(xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n\n return res;\n} // String.prototype.substr - negative index don't work in IE8\n\n\nvar substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {\n return str.substr(start, len);\n} : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n};","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","import MpqModule from './MpqCmp.jscc';\r\n\r\n/* eslint-disable-next-line no-restricted-globals */\r\nconst worker = self;\r\n\r\nlet input_file = null;\r\nlet input_offset = 0;\r\nlet output_file = null;\r\nlet last_progress = 0;\r\nfunction progress(value) {\r\n worker.postMessage({action: \"progress\", value});\r\n}\r\n\r\nconst DApi = {\r\n exit_error(error) {\r\n throw Error(error);\r\n },\r\n\r\n get_file_contents(array, offset) {\r\n array.set(input_file.subarray(offset - input_offset, offset - input_offset + array.byteLength));\r\n },\r\n put_file_size(size) {\r\n output_file = new Uint8Array(size);\r\n },\r\n put_file_contents(array, offset) {\r\n output_file.set(array, offset);\r\n },\r\n\r\n progress(done, total) {\r\n if (done === total || performance.now() > last_progress + 100) {\r\n progress(done);\r\n last_progress = performance.now();\r\n }\r\n },\r\n};\r\n\r\nworker.DApi = DApi;\r\n\r\nasync function run({binary, mpq, input, offset, blockSize}) {\r\n const wasm = await MpqModule({wasmBinary: binary}).ready;\r\n\r\n input_file = new Uint8Array(mpq);\r\n input_offset = offset;\r\n\r\n const count = input.length / 6;\r\n const ptr = wasm._DApi_Alloc(input.byteLength);\r\n wasm.HEAPU32.set(input, ptr >> 2);\r\n\r\n const dst = wasm._DApi_Compress(offset + input_file.length, blockSize, count, ptr) >> 2;\r\n\r\n return [output_file.buffer, wasm.HEAPU32.slice(dst , dst + count * 4)];\r\n}\r\n\r\nworker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"run\":\r\n run(data).then(\r\n ([buffer, blocks]) => worker.postMessage({action: \"result\", buffer, blocks}, [buffer, blocks.buffer]),\r\n err => worker.postMessage({action: \"error\", error: err.toString(), stack: err.stack}));\r\n break;\r\n default:\r\n }\r\n});\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/asset-manifest.json b/asset-manifest.json index 604c2c5..e2ba831 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -2,25 +2,25 @@ "files": { "static/js/0.aaa06a1e.chunk.js": "/diabloweb/static/js/0.aaa06a1e.chunk.js", "static/js/0.aaa06a1e.chunk.js.map": "/diabloweb/static/js/0.aaa06a1e.chunk.js.map", - "main.css": "/diabloweb/static/css/main.fe873d2c.chunk.css", - "main.js": "/diabloweb/static/js/main.62369ba5.chunk.js", - "main.js.map": "/diabloweb/static/js/main.62369ba5.chunk.js.map", + "main.css": "/diabloweb/static/css/main.e1dd4272.chunk.css", + "main.js": "/diabloweb/static/js/main.0a18bc0c.chunk.js", + "main.js.map": "/diabloweb/static/js/main.0a18bc0c.chunk.js.map", "runtime~main.js": "/diabloweb/static/js/runtime~main.bf17ce54.js", "runtime~main.js.map": "/diabloweb/static/js/runtime~main.bf17ce54.js.map", "runtime~storage.js": "/diabloweb/static/js/runtime~storage.83a78cef.js", "runtime~storage.js.map": "/diabloweb/static/js/runtime~storage.83a78cef.js.map", - "storage.js": "/diabloweb/static/js/storage.13abf7f9.chunk.js", - "storage.js.map": "/diabloweb/static/js/storage.13abf7f9.chunk.js.map", + "storage.js": "/diabloweb/static/js/storage.8fcdd212.chunk.js", + "storage.js.map": "/diabloweb/static/js/storage.8fcdd212.chunk.js.map", "static/js/5.430d8c5c.chunk.js": "/diabloweb/static/js/5.430d8c5c.chunk.js", "static/js/5.430d8c5c.chunk.js.map": "/diabloweb/static/js/5.430d8c5c.chunk.js.map", - "559256dc812e37cc8bb5.worker.js": "/diabloweb/559256dc812e37cc8bb5.worker.js", - "559256dc812e37cc8bb5.worker.js.map": "/diabloweb/559256dc812e37cc8bb5.worker.js.map", - "b6959098d798174bd69f.worker.js": "/diabloweb/b6959098d798174bd69f.worker.js", - "b6959098d798174bd69f.worker.js.map": "/diabloweb/b6959098d798174bd69f.worker.js.map", + "8acc76fdb6ee253c485e.worker.js": "/diabloweb/8acc76fdb6ee253c485e.worker.js", + "8acc76fdb6ee253c485e.worker.js.map": "/diabloweb/8acc76fdb6ee253c485e.worker.js.map", + "d2271be9a67638d3642f.worker.js": "/diabloweb/d2271be9a67638d3642f.worker.js", + "d2271be9a67638d3642f.worker.js.map": "/diabloweb/d2271be9a67638d3642f.worker.js.map", "index.html": "/diabloweb/index.html", - "precache-manifest.457140d01593ad0a7e968f24ae827c55.js": "/diabloweb/precache-manifest.457140d01593ad0a7e968f24ae827c55.js", + "precache-manifest.3dac5a6109bc75df34456f034ca62b7b.js": "/diabloweb/precache-manifest.3dac5a6109bc75df34456f034ca62b7b.js", "service-worker.js": "/diabloweb/service-worker.js", - "static/css/main.fe873d2c.chunk.css.map": "/diabloweb/static/css/main.fe873d2c.chunk.css.map", + "static/css/main.e1dd4272.chunk.css.map": "/diabloweb/static/css/main.e1dd4272.chunk.css.map", "static/media/Diablo.wasm": "/diabloweb/static/media/Diablo.570bd59a.wasm", "static/media/DiabloSpawn.wasm": "/diabloweb/static/media/DiabloSpawn.9c2373b2.wasm", "static/media/ListFile.txt": "/diabloweb/static/media/ListFile.b370797d.txt", diff --git a/b6959098d798174bd69f.worker.js.map b/b6959098d798174bd69f.worker.js.map deleted file mode 100644 index 8d0bf5f..0000000 --- a/b6959098d798174bd69f.worker.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../webpack/bootstrap","../node_modules/axios/lib/utils.js","../node_modules/@babel/runtime/regenerator/index.js","../node_modules/process/browser.js","../node_modules/path-browserify/index.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/defaults.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/core/createError.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/cancel/Cancel.js","api/Diablo.wasm","api/Diablo.jscc","api/DiabloSpawn.wasm","api/DiabloSpawn.jscc","../node_modules/axios/index.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/axios/lib/axios.js","../node_modules/axios/node_modules/is-buffer/index.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/core/enhanceError.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","api/websocket.js","api/game.worker.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","isBuffer","toString","isArray","val","isObject","isFunction","forEach","obj","fn","length","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isUndefined","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","result","assignValue","arguments","deepMerge","extend","a","b","thisArg","trim","str","replace","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","e","this","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","push","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","normalizeArray","parts","allowAboveRoot","up","last","splice","unshift","filter","xs","f","res","resolve","resolvedPath","resolvedAbsolute","path","TypeError","charAt","split","join","normalize","isAbsolute","trailingSlash","substr","paths","slice","index","relative","from","to","arr","start","end","fromParts","toParts","Math","min","samePartsLength","outputParts","sep","delimiter","dirname","code","charCodeAt","hasRoot","matchedSlash","basename","ext","extname","startDot","startPart","preDotState","utils","encode","encodeURIComponent","url","params","paramsSerializer","serializedParams","v","toISOString","JSON","stringify","hashmarkIndex","indexOf","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","Content-Type","setContentTypeIfUnset","headers","defaults","adapter","XMLHttpRequest","getDefaultAdapter","transformRequest","data","transformResponse","parse","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","common","Accept","method","settle","buildURL","parseHeaders","isURLSameOrigin","createError","config","Promise","reject","requestData","requestHeaders","request","auth","username","password","Authorization","btoa","open","toUpperCase","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","response","responseType","responseText","statusText","onabort","onerror","ontimeout","cookies","xsrfValue","withCredentials","read","undefined","toLowerCase","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","promise","then","cancel","abort","send","enhanceError","message","error","config1","config2","prop","Cancel","Diablo","_scriptDir","currentScript","src","Module","moduleOverrides","toThrow","ENVIRONMENT_IS_NODE","ENVIRONMENT_IS_SHELL","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","importScripts","node","read_","readBinary","nodeFS","nodePath","scriptDirectory","__dirname","filename","binary","ret","Uint8Array","assert","ex","ExitStatus","readbuffer","scriptArgs","quit","self","location","href","lastIndexOf","xhr","onload","out","console","log","print","err","printErr","warn","asm2wasmImports","f64-rem","x","y","debugger","wasmMemory","tempRet0","setTempRet0","WebAssembly","ABORT","condition","text","UTF8Decoder","TextDecoder","UTF8ArrayToString","u8Array","idx","maxBytesToRead","endIdx","endPtr","subarray","decode","u0","u1","u2","String","fromCharCode","ch","UTF8ToString","ptr","HEAPU8","HEAP8","HEAP32","HEAPF32","alignUp","multiple","updateGlobalBufferViews","Int8Array","Int16Array","Int32Array","Uint16Array","Uint32Array","Float32Array","Float64Array","DYNAMICTOP_PTR","INITIAL_TOTAL_MEMORY","callRuntimeCallbacks","callbacks","callback","shift","func","arg","Memory","initial","byteLength","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","addOnPostRun","cb","abs","cos","sin","tan","acos","asin","atan","atan2","exp","sqrt","ceil","floor","pow","imul","fround","round","max","clz32","trunc","runDependencies","runDependencyWatcher","dependenciesFulfilled","dataURIPrefix","isDataURI","startsWith","wasmBinaryFile","getBinary","createWasm","info","global","NaN","Infinity","global.Math","asm2wasm","receiveInstance","instance","id","clearInterval","removeRunDependency","receiveInstantiatedSource","output","instantiateArrayBuffer","receiver","fetch","credentials","catch","instantiate","reason","instantiateStreaming","instantiateAsync","providedBuffer","Table","maximum","element","ASM_CONSTS","$0","DApi","current_save_id","globalCtors","tempDoublePtr","___exception_infos","___exception_caught","___exception_addRef","refcount","___exception_deAdjust","adjusted","adj","___exception_last","___cxa_free_exception","_free","___exception_decRef","rethrown","destructor","___cxa_find_matching_catch","thrown","throwntype","type","typeArray","___cxa_is_pointer_type","___cxa_can_catch","SYSCALLS","buffers","printChar","stream","curr","varargs","getStr","get64","low","getZero","_emscripten_get_heap_size","emscripten_realloc_buffer","size","oldSize","grow","asmLibraryArg","getTempRet0","invoke_i","sp","stackSave","dynCall_i","stackRestore","_setThrew","invoke_ii","a1","dynCall_ii","invoke_iii","a2","dynCall_iii","invoke_iiii","a3","dynCall_iiii","invoke_iiiii","a4","dynCall_iiiii","invoke_iiiiii","a5","dynCall_iiiiii","invoke_ji","dynCall_ji","invoke_v","dynCall_v","invoke_vi","dynCall_vi","invoke_vii","dynCall_vii","invoke_viii","dynCall_viii","invoke_viiii","dynCall_viiii","invoke_viiiii","dynCall_viiiii","invoke_viiiiiii","a6","a7","dynCall_viiiiiii","invoke_viij","dynCall_viij","invoke_viji","dynCall_viji","___assert_fail","line","___cxa_allocate_exception","_malloc","___cxa_begin_catch","caught","__ZSt18uncaught_exceptionv","uncaught_exceptions","___cxa_end_catch","pop","___cxa_find_matching_catch_2","a0","___cxa_find_matching_catch_3","___cxa_get_exception_ptr","___cxa_pure_virtual","___cxa_throw","___cxa_uncaught_exceptions","___gxx_personality_v0","___lock","___resumeException","___setErrNo","___syscall140","which","getStreamFromFD","FS","ErrnoError","errno","___syscall146","iov","iovcnt","j","___syscall54","___syscall6","___unlock","__api_close_keyboard","close_keyboard","__api_open_keyboard","x0","y0","x1","y1","open_keyboard","_abort","_api_create_sound","create_sound","_api_create_sound_float","samples","channels","rate","create_sound_raw","_api_delete_sound","delete_sound","_api_draw_begin","draw_begin","_api_draw_belt","items","draw_belt","_api_draw_blit","w","h","draw_blit","_api_draw_clip_text","draw_clip_text","_api_draw_end","draw_end","_api_draw_text","color","draw_text","_api_duplicate_sound","srcId","duplicate_sound","_api_exit_game","exit_game","_api_play_sound","volume","pan","loop","play_sound","_api_set_cursor","set_cursor","_api_set_volume","set_volume","_api_stop_sound","stop_sound","_api_use_websocket","use","use_websocket","_api_websocket_closed","websocket_closed","_api_websocket_send","websocket_send","_emscripten_asm_const_ii","_emscripten_memcpy_big","dest","num","set","_emscripten_resize_heap","requestedSize","newSize","_exit","implicit","exit","_exit_error","exit_error","_get_file_contents","offset","get_file_contents","_get_file_size","get_file_size","_llvm_eh_typeid_for","_llvm_trap","_put_file_contents","put_file_contents","_remove_file","remove_file","_show_alert","alert","_time","Date","now","_trace_pop","WASM_TRACE","_trace_push","abortOnCannotGrowMemory","flush_NO_FILESYSTEM","fflush","asm","old","constructor","doRun","postRun","preRun","runCaller","what","DiabloSpawn","runtime","Op","hasOwn","$Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","state","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","done","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","keys","reverse","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","hasCatch","hasFinally","finallyEntry","complete","finish","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","Axios","mergeConfig","createInstance","defaultConfig","axios","instanceConfig","CancelToken","isCancel","all","promises","spread","default","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","fulfilled","rejected","getUri","handlers","eject","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","throwIfRequested","baseURL","fns","normalizedName","isAxiosError","toJSON","description","number","fileName","lineNumber","columnNumber","stack","ignoreDuplicateOf","parsed","originURL","msie","test","userAgent","urlParsingNode","createElement","resolveURL","setAttribute","protocol","host","search","hash","hostname","port","pathname","requestURL","write","expires","domain","secure","cookie","toGMTString","match","RegExp","decodeURIComponent","remove","relativeURL","executor","resolvePromise","token","source","_slicedToArray","_arrayWithHoles","_arr","_n","_d","_e","_s","_i","_iterableToArrayLimit","_nonIterableRest","_toConsumableArray","arr2","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","_defineProperties","target","props","descriptor","configurable","writable","_callee","handler","socket","_versionCbk","vers","clientInfo","regenerator_default","_context","WebSocket","binaryType","versionCbk","_ref","onError","removeEventListener","u8","parseInt","websocket_open","finisher","ws","batch","intr","proxy","msg","close","do_websocket_open","sock","setInterval","reduce","sum","pos","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","return","DiabloSize","SpawnSize","worker","canvas","imageData","files","renderBatch","drawBelt","is_spawn","websocket","action","postMessage","ChunkSize","RemoteFile","Constructor","_classCallCheck","getResponseHeader","chunks","protoProps","staticProps","chunk0","chunk1","missing0","missing1","header","delete","_len","_key","rect","flag","call_api","try_api","wasm","_DApi_AllocPacket","DApi_renderLegacy","images","clip","belt","transfer","map","DApi_renderOffscreen","save","font","putImageData","beginPath","g","fillStyle","fillText","restore","bitmap","transferToImageBitmap","audioBatch","audioTransfer","maxSoundId","maxBatchId","_len2","_key2","_len3","_key3","packetBatch","_len4","_key4","nested","_wasm","_DApi_SyncTextPtr","heap","_DApi_SyncText","progress","loaded","total","readFile","file","reader","FileReader","readAsArrayBuffer","initWasm","spawn","SpawnBinary","DiabloBinary","SpawnModule","DiabloModule","wasmBinary","ready","_callee2","mpq","offscreen","mpqLoaded","mpqTotal","wasmLoaded","wasmTotal","wasmWeight","updateProgress","loadWasm","loadMpq","_ref3","_ref4","_context2","OffscreenCanvas","getContext","createImageData","assign","has","_SNet_InitWebsocket","_DApi_Init","performance","_ref2","init_game","packet"],"mappings":"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","file":"b6959098d798174bd69f.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/diabloweb/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 35);\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\nvar isBuffer = require('is-buffer');\n/*global toString:true*/\n// utils is a library of generic helper functions non-specific to axios\n\n\nvar toString = Object.prototype.toString;\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\n\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\n\n\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\n\n\nfunction isFormData(val) {\n return typeof FormData !== 'undefined' && val instanceof FormData;\n}\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\n\n\nfunction isArrayBufferView(val) {\n var result;\n\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && val.buffer instanceof ArrayBuffer;\n }\n\n return result;\n}\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\n\n\nfunction isString(val) {\n return typeof val === 'string';\n}\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\n\n\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\n\n\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\n\n\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\n\n\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\n\n\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\n\n\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\n\n\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\n\n\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\n\n\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\n\n\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\n\n\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\n\n\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n } // Force an array if not already something iterable\n\n\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction merge()\n/* obj1, obj2, obj3, ... */\n{\n var result = {};\n\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction deepMerge()\n/* obj1, obj2, obj3, ... */\n{\n var result = {};\n\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\n\n\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};","module.exports = require(\"regenerator-runtime\");\n","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n} // path.resolve([from ...], to)\n// posix version\n\n\nexports.resolve = function () {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries\n\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n } // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n\n\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}; // path.normalize(path)\n// posix version\n\n\nexports.normalize = function (path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/'; // Normalize the path\n\n path = normalizeArray(filter(path.split('/'), function (p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n}; // posix version\n\n\nexports.isAbsolute = function (path) {\n return path.charAt(0) === '/';\n}; // posix version\n\n\nexports.join = function () {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function (p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n\n return p;\n }).join('/'));\n}; // path.relative(from, to)\n// posix version\n\n\nexports.relative = function (from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47\n /*/*/\n ;\n var end = -1;\n var matchedSlash = true;\n\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n} // Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\n\n\nexports.basename = function (path, ext) {\n var f = basename(path);\n\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n\n var preDotState = 0;\n\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n\n continue;\n }\n\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46\n /*.*/\n ) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot\n preDotState === 0 || // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n\n return path.slice(startDot, end);\n};\n\nfunction filter(xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n\n return res;\n} // String.prototype.substr - negative index don't work in IE8\n\n\nvar substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {\n return str.substr(start, len);\n} : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n return fn.apply(thisArg, args);\n };\n};","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\n\n\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};","'use strict';\n\nvar utils = require('./utils');\n\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter; // Only Node.JS has a process variable that is of [[Class]] process\n\n if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n }\n\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) {\n /* Ignore */\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\nmodule.exports = defaults;","'use strict';\n\nvar utils = require('./../utils');\n\nvar settle = require('./../core/settle');\n\nvar buildURL = require('./../helpers/buildURL');\n\nvar parseHeaders = require('./../helpers/parseHeaders');\n\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\n\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest(); // HTTP basic authentication\n\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); // Set the request timeout in MS\n\n request.timeout = config.timeout; // Listen for ready state\n\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n } // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n\n\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n } // Prepare the response\n\n\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n settle(resolve, reject, response); // Clean up request\n\n request = null;\n }; // Handle browser request cancellation (as opposed to a manual cancellation)\n\n\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Handle low level network errors\n\n\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request)); // Clean up request\n\n request = null;\n }; // Handle timeout\n\n\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies'); // Add xsrf header\n\n\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n } // Add headers to the request\n\n\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n } // Add withCredentials to request if needed\n\n\n if (config.withCredentials) {\n request.withCredentials = true;\n } // Add responseType to request if needed\n\n\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n } // Handle progress if needed\n\n\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n } // Not all browsers support upload events\n\n\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel); // Clean up request\n\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n } // Send the request\n\n\n request.send(requestData);\n });\n};","'use strict';\n\nvar enhanceError = require('./enhanceError');\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\n\n\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};","'use strict';\n\nvar utils = require('../utils');\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\n\n\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n utils.forEach(['baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath'], function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n return config;\n};","'use strict';\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\n\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\nmodule.exports = Cancel;","module.exports = __webpack_public_path__ + \"static/media/Diablo.570bd59a.wasm\";","\r\nvar Diablo = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(Diablo) {\r\n Diablo = Diablo || {};\r\n\r\n// Copyright 2010 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof Diablo !== 'undefined' ? Diablo : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// Determine the runtime environment we are in. You can customize this by\r\n// setting the ENVIRONMENT setting at compile time (see settings.js).\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_HAS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\n// A web environment like Electron.js can have Node enabled, so we must\r\n// distinguish between Node-enabled environments and Node environments per se.\r\n// This will allow the former to do things like mount NODEFS.\r\n// Extended check using process.versions fixes issue #8816.\r\n// (Also makes redundant the original check that 'require' is a function.)\r\nENVIRONMENT_HAS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\r\nENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\n// Hooks that are implemented differently in different runtime environments.\r\nvar read_,\r\n readAsync,\r\n readBinary,\r\n setWindowTitle;\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n read_ = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n readBinary = function readBinary(filename) {\r\n var ret = read_(filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', abort);\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n read_ = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n readBinary = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\r\n scriptDirectory = self.location.href;\r\n } else if (document.currentScript) { // web\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\r\n // and scriptDirectory will correctly be replaced with an empty string.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n read_ = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n readBinary = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n readAsync = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n setWindowTitle = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\r\n\r\n// TODO remove when SDL2 is fixed; also add the above assertion\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n if (end > _emscripten_get_heap_size()) {\r\n abort();\r\n }\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n return Math.ceil(size / factor) * factor;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// Wraps a JS function as a wasm function with a given signature.\r\n// In the future, we may get a WebAssembly.Function constructor. Until then,\r\n// we create a wasm module that takes the JS function as an import with a given\r\n// signature, and re-exports that as a wasm function.\r\nfunction convertJsFunctionToWasm(func, sig) {\r\n\r\n // The module is static, with the exception of the type section, which is\r\n // generated based on the signature passed in.\r\n var typeSection = [\r\n 0x01, // id: section,\r\n 0x00, // length: 0 (placeholder)\r\n 0x01, // count: 1\r\n 0x60, // form: func\r\n ];\r\n var sigRet = sig.slice(0, 1);\r\n var sigParam = sig.slice(1);\r\n var typeCodes = {\r\n 'i': 0x7f, // i32\r\n 'j': 0x7e, // i64\r\n 'f': 0x7d, // f32\r\n 'd': 0x7c, // f64\r\n };\r\n\r\n // Parameters, length + signatures\r\n typeSection.push(sigParam.length);\r\n for (var i = 0; i < sigParam.length; ++i) {\r\n typeSection.push(typeCodes[sigParam[i]]);\r\n }\r\n\r\n // Return values, length + signatures\r\n // With no multi-return in MVP, either 0 (void) or 1 (anything else)\r\n if (sigRet == 'v') {\r\n typeSection.push(0x00);\r\n } else {\r\n typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);\r\n }\r\n\r\n // Write the overall length of the type section back into the section header\r\n // (excepting the 2 bytes for the section id and length)\r\n typeSection[1] = typeSection.length - 2;\r\n\r\n // Rest of the module is static\r\n var bytes = new Uint8Array([\r\n 0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\r\n 0x01, 0x00, 0x00, 0x00, // version: 1\r\n ].concat(typeSection, [\r\n 0x02, 0x07, // import section\r\n // (import \"e\" \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\r\n 0x07, 0x05, // export section\r\n // (export \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x66, 0x00, 0x00,\r\n ]));\r\n\r\n // We can compile this wasm module synchronously because it is very small.\r\n // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\r\n var module = new WebAssembly.Module(bytes);\r\n var instance = new WebAssembly.Instance(module, {\r\n e: {\r\n f: func\r\n }\r\n });\r\n var wrappedFunc = instance.exports.f;\r\n return wrappedFunc;\r\n}\r\n\r\n// Add a wasm function to the table.\r\nfunction addFunctionWasm(func, sig) {\r\n var table = wasmTable;\r\n var ret = table.length;\r\n\r\n // Grow the table\r\n try {\r\n table.grow(1);\r\n } catch (err) {\r\n if (!err instanceof RangeError) {\r\n throw err;\r\n }\r\n throw 'Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.';\r\n }\r\n\r\n // Insert new element\r\n try {\r\n // Attempting to call this with JS function will cause of table.set() to fail\r\n table.set(ret, func);\r\n } catch (err) {\r\n if (!err instanceof TypeError) {\r\n throw err;\r\n }\r\n assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction');\r\n var wrapped = convertJsFunctionToWasm(func, sig);\r\n table.set(ret, wrapped);\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nfunction removeFunctionWasm(index) {\r\n // TODO(sbc): Look into implementing this to allow re-using of table slots\r\n}\r\n\r\n// 'sig' parameter is required for the llvm backend but only when func is not\r\n// already a WebAssembly function.\r\nfunction addFunction(func, sig) {\r\n\r\n\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n\r\n}\r\n\r\nfunction removeFunction(index) {\r\n\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\nvar tempRet0 = 0;\r\n\r\nvar setTempRet0 = function(value) {\r\n tempRet0 = value;\r\n};\r\n\r\nvar getTempRet0 = function() {\r\n return tempRet0;\r\n};\r\n\r\n\r\nvar Runtime = {\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\nif (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n}\r\n\r\n\r\n// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.\r\n// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// Wasm globals\r\n\r\nvar wasmMemory;\r\n\r\n// Potentially used for direct table calls.\r\nvar wasmTable;\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\n// whether we are quitting the application. no code should run after this.\r\n// set in exit() and abort()\r\nvar ABORT = false;\r\n\r\n// set by exit() and abort(). Passed to 'onExit' handler.\r\n// NOTE: This is also used as the process return code code in shell environments\r\n// but only when noExitRuntime is false.\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n // For fast lookup of conversion functions\r\n var toC = {\r\n 'string': function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n },\r\n 'array': function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n }\r\n };\r\n\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return UTF8ToString(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 3; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [_malloc,\r\n stackAlloc,\r\n dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n\r\n\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n abort(\"this function has been removed - you should use UTF8ToString(ptr, maxBytesToRead) instead!\");\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAPU8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\n\r\n/**\r\n * @param {number} idx\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\r\n var endIdx = idx + maxBytesToRead;\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)\r\n while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var str = '';\r\n // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that\r\n while (idx < endPtr) {\r\n // For UTF8 byte structure, see:\r\n // http://en.wikipedia.org/wiki/UTF-8#Description\r\n // https://www.ietf.org/rfc/rfc2279.txt\r\n // https://tools.ietf.org/html/rfc3629\r\n var u0 = u8Array[idx++];\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n var u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n var u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63);\r\n }\r\n\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a\r\n// copy of that string as a Javascript String object.\r\n// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit\r\n// this parameter to scan the string until the first \\0 byte. If maxBytesToRead is\r\n// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the\r\n// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will\r\n// not produce a string of exact length [ptr, ptr+maxBytesToRead[)\r\n// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may\r\n// throw JS JIT optimizations off, so it is worth to consider consistently using one\r\n// style or the other.\r\n/**\r\n * @param {number} ptr\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ToString(ptr, maxBytesToRead) {\r\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) ++len;\r\n else if (u <= 0x7FF) len += 2;\r\n else if (u <= 0xFFFF) len += 3;\r\n else len += 4;\r\n }\r\n return len;\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (y + ' [' + x + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\n\r\nvar STATIC_BASE = 1024,\r\n STACK_BASE = 1875744,\r\n STACKTOP = STACK_BASE,\r\n STACK_MAX = 7118624,\r\n DYNAMIC_BASE = 7118624,\r\n DYNAMICTOP_PTR = 1875712;\r\n\r\n\r\n\r\n\r\nvar TOTAL_STACK = 5242880;\r\n\r\nvar INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (INITIAL_TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n\r\n\r\n\r\n if (Module['wasmMemory']) {\r\n wasmMemory = Module['wasmMemory'];\r\n } else {\r\n wasmMemory = new WebAssembly.Memory({\r\n 'initial': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE\r\n });\r\n }\r\n\r\n\r\nif (wasmMemory) {\r\n buffer = wasmMemory.buffer;\r\n}\r\n\r\n// If the user provides an incorrect length, just use that length instead rather than providing the user to\r\n// specifically provide the memory length with Module['TOTAL_MEMORY'].\r\nINITIAL_TOTAL_MEMORY = buffer.byteLength;\r\nupdateGlobalBufferViews();\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction initRuntime() {\r\n runtimeInitialized = true;\r\n \r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n \r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// Module.preRun (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nvar wasmBinaryFile = 'Diablo.wasm';\r\nif (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n}\r\n\r\nfunction getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (readBinary) {\r\n return readBinary(wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n}\r\n\r\nfunction getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n}\r\n\r\n\r\n\r\n// Create the wasm instance.\r\n// Receives the wasm imports, returns the exports.\r\nfunction createWasm(env) {\r\n\r\n // prepare imports\r\n var info = {\r\n 'env': env\r\n ,\r\n 'global': {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n },\r\n 'global.Math': Math,\r\n 'asm2wasm': asm2wasmImports\r\n };\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n var exports = instance.exports;\r\n Module['asm'] = exports;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\r\n // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.\r\n receiveInstance(output['instance']);\r\n }\r\n\r\n\r\n function instantiateArrayBuffer(receiver) {\r\n return getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver, function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n\r\n // Prefer streaming instantiation if available.\r\n function instantiateAsync() {\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {\r\n return WebAssembly.instantiateStreaming(response, info)\r\n .then(receiveInstantiatedSource, function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n });\r\n } else {\r\n return instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n }\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n var exports = Module['instantiateWasm'](info, receiveInstance);\r\n return exports;\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n instantiateAsync();\r\n return {}; // no exports yet; we'll fill them in later\r\n}\r\n\r\n// Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n// the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n// doesn't need to care that it is wasm or asm.js.\r\n\r\nModule['asm'] = function(global, env, providedBuffer) {\r\n // memory was already allocated (so js could use the buffer)\r\n env['memory'] = wasmMemory\r\n ;\r\n // import table\r\n env['table'] = wasmTable = new WebAssembly.Table({\r\n 'initial': 1116,\r\n 'maximum': 1116,\r\n 'element': 'anyfunc'\r\n });\r\n // With the wasm backend __memory_base and __table_base and only needed for\r\n // relocatable output.\r\n env['__memory_base'] = 1024; // tell the memory segments where to place themselves\r\n // table starts at 0 by default (even in dynamic linking, for the main module)\r\n env['__table_base'] = 0;\r\n\r\n var exports = createWasm(env);\r\n return exports;\r\n};\r\n\r\n// Globals used by JS i64 conversions\r\nvar tempDouble;\r\nvar tempI64;\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [function($0) { self.DApi.current_save_id($0); }];\r\n\r\nfunction _emscripten_asm_const_ii(code, a0) {\r\n return ASM_CONSTS[code](a0);\r\n}\r\nfunction __api_close_keyboard(){ self.DApi.close_keyboard(); }\r\nfunction __api_open_keyboard(x0,y0,x1,y1,len){ self.DApi.open_keyboard(x0, y0, x1, y1, len); }\r\nfunction _api_create_sound(id,ptr,size){ self.DApi.create_sound(id, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _api_create_sound_float(id,ptr,samples,channels,rate){ self.DApi.create_sound_raw(id, HEAPF32.slice(ptr / 4, ptr / 4 + samples * channels), samples, channels, rate); }\r\nfunction _api_delete_sound(id){ self.DApi.delete_sound(id); }\r\nfunction _api_draw_begin(){ self.DApi.draw_begin(); }\r\nfunction _api_draw_belt(items){ self.DApi.draw_belt(HEAP32.subarray(items / 4, items / 4 + 8)); }\r\nfunction _api_draw_blit(x,y,w,h,ptr){ self.DApi.draw_blit(x, y, w, h, HEAPU8.subarray(ptr, ptr + w * h * 4)); }\r\nfunction _api_draw_clip_text(x0,y0,x1,y1){ self.DApi.draw_clip_text(x0, y0, x1, y1); }\r\nfunction _api_draw_end(){ self.DApi.draw_end(); }\r\nfunction _api_draw_text(x,y,ptr,color){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); self.DApi.draw_text(x, y, text, color); }\r\nfunction _api_duplicate_sound(id,srcId){ self.DApi.duplicate_sound(id, srcId); }\r\nfunction _api_exit_game(){ self.DApi.exit_game(); }\r\nfunction _api_play_sound(id,volume,pan,loop){ self.DApi.play_sound(id, volume, pan, loop); }\r\nfunction _api_set_cursor(x,y){ self.DApi.set_cursor(x, y); }\r\nfunction _api_set_volume(id,volume){ self.DApi.set_volume(id, volume); }\r\nfunction _api_stop_sound(id){ self.DApi.stop_sound(id); }\r\nfunction _api_use_websocket(use){ self.DApi.use_websocket(use); }\r\nfunction _api_websocket_closed(){ return self.DApi.websocket_closed(); }\r\nfunction _api_websocket_send(ptr,size){ self.DApi.websocket_send(HEAPU8.subarray(ptr, ptr + size)); }\r\nfunction _exit_error(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply(null, HEAPU8.subarray( err, end )); self.DApi.exit_error( text ); }\r\nfunction _get_file_contents(path,ptr,offset,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.get_file_contents(text, HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _get_file_size(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); return self.DApi.get_file_size(text); }\r\nfunction _put_file_contents(path,ptr,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end)); self.DApi.put_file_contents(text, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _remove_file(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.remove_file( text ); }\r\nfunction _show_alert(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply( null, HEAPU8.subarray( err, end ) ); self.alert( text ); }\r\nfunction _trace_pop(){ if (self.WASM_TRACE) { self.WASM_TRACE.pop(); } }\r\nfunction _trace_push(ptr){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); console.log(text); self.WASM_TRACE = self.WASM_TRACE || []; self.WASM_TRACE.push(text); }\r\n\r\n\r\n\r\n// STATICTOP = STATIC_BASE + 1874720;\r\n/* global initializers */ __ATINIT__.push({ func: function() { globalCtors() } });\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = 1875728\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + UTF8ToString(condition) + ', at: ' + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n \r\n var ___exception_infos={};\r\n \r\n var ___exception_caught= [];\r\n \r\n function ___exception_addRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount++;\r\n }\r\n \r\n function ___exception_deAdjust(adjusted) {\r\n if (!adjusted || ___exception_infos[adjusted]) return adjusted;\r\n for (var key in ___exception_infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var adj = ___exception_infos[ptr].adjusted;\r\n var len = adj.length;\r\n for (var i = 0; i < len; i++) {\r\n if (adj[i] === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n }\r\n return adjusted;\r\n }function ___cxa_begin_catch(ptr) {\r\n var info = ___exception_infos[ptr];\r\n if (info && !info.caught) {\r\n info.caught = true;\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions--;\r\n }\r\n if (info) info.rethrown = false;\r\n ___exception_caught.push(ptr);\r\n ___exception_addRef(___exception_deAdjust(ptr));\r\n return ptr;\r\n }\r\n\r\n \r\n var ___exception_last=0;\r\n \r\n \r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) {\r\n }\r\n }function ___exception_decRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete ___exception_infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n }\r\n \r\n function ___cxa_end_catch() {\r\n // Clear state flag.\r\n _setThrew(0);\r\n // Call destructor if one is registered then clear it.\r\n var ptr = ___exception_caught.pop();\r\n if (ptr) {\r\n ___exception_decRef(___exception_deAdjust(ptr));\r\n ___exception_last = 0; // XXX in decRef?\r\n }\r\n }\r\n\r\n \r\n \r\n function ___resumeException(ptr) {\r\n if (!___exception_last) { ___exception_last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = ___exception_last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = ___exception_infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = ___cxa_is_pointer_type(throwntype);\r\n // can_catch receives a **, add indirection\r\n var buffer = 1875696;\r\n HEAP32[((buffer)>>2)]=thrown;\r\n thrown = buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && ___cxa_can_catch(typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted.push(thrown);\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }\r\n Module[\"___cxa_find_matching_catch\"] = ___cxa_find_matching_catch;function ___cxa_find_matching_catch_2(a0,a1\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1);\r\n }\r\n\r\n function ___cxa_find_matching_catch_3(a0,a1,a2\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1,a2);\r\n }\r\n\r\n\r\n function ___cxa_get_exception_ptr(ptr) {\r\n // TODO: use info.adjusted?\r\n return ptr;\r\n }\r\n\r\n function ___cxa_pure_virtual() {\r\n ABORT = true;\r\n throw 'Pure virtual function called!';\r\n }\r\n\r\n function ___cxa_throw(ptr, type, destructor) {\r\n ___exception_infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: [ptr],\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n ___exception_last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___cxa_uncaught_exceptions() {\r\n return __ZSt18uncaught_exceptionv.uncaught_exceptions;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n function ___lock() {}\r\n\r\n\r\n \r\n \r\n var PATH={splitPath:function (filename) {\r\n var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\n return splitPathRe.exec(filename).slice(1);\r\n },normalizeArray:function (parts, allowAboveRoot) {\r\n // if the path tries to go above the root, `up` ends up > 0\r\n var up = 0;\r\n for (var i = parts.length - 1; i >= 0; i--) {\r\n var last = parts[i];\r\n if (last === '.') {\r\n parts.splice(i, 1);\r\n } else if (last === '..') {\r\n parts.splice(i, 1);\r\n up++;\r\n } else if (up) {\r\n parts.splice(i, 1);\r\n up--;\r\n }\r\n }\r\n // if the path is allowed to go above the root, restore leading ..s\r\n if (allowAboveRoot) {\r\n for (; up; up--) {\r\n parts.unshift('..');\r\n }\r\n }\r\n return parts;\r\n },normalize:function (path) {\r\n var isAbsolute = path.charAt(0) === '/',\r\n trailingSlash = path.substr(-1) === '/';\r\n // Normalize the path\r\n path = PATH.normalizeArray(path.split('/').filter(function(p) {\r\n return !!p;\r\n }), !isAbsolute).join('/');\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n return (isAbsolute ? '/' : '') + path;\r\n },dirname:function (path) {\r\n var result = PATH.splitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n return root + dir;\r\n },basename:function (path) {\r\n // EMSCRIPTEN return '/'' for '/', not an empty string\r\n if (path === '/') return '/';\r\n var lastSlash = path.lastIndexOf('/');\r\n if (lastSlash === -1) return path;\r\n return path.substr(lastSlash+1);\r\n },extname:function (path) {\r\n return PATH.splitPath(path)[3];\r\n },join:function () {\r\n var paths = Array.prototype.slice.call(arguments, 0);\r\n return PATH.normalize(paths.join('/'));\r\n },join2:function (l, r) {\r\n return PATH.normalize(l + '/' + r);\r\n }};var SYSCALLS={buffers:[null,[],[]],printChar:function (stream, curr) {\r\n var buffer = SYSCALLS.buffers[stream];\r\n if (curr === 0 || curr === 10) {\r\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\r\n buffer.length = 0;\r\n } else {\r\n buffer.push(curr);\r\n }\r\n },varargs:0,get:function (varargs) {\r\n SYSCALLS.varargs += 4;\r\n var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\r\n return ret;\r\n },getStr:function () {\r\n var ret = UTF8ToString(SYSCALLS.get());\r\n return ret;\r\n },get64:function () {\r\n var low = SYSCALLS.get(), high = SYSCALLS.get();\r\n return low;\r\n },getZero:function () {\r\n SYSCALLS.get();\r\n }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // llseek\r\n var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n \r\n function flush_NO_FILESYSTEM() {\r\n // flush anything remaining in the buffers during shutdown\r\n var fflush = Module[\"_fflush\"];\r\n if (fflush) fflush(0);\r\n var buffers = SYSCALLS.buffers;\r\n if (buffers[1].length) SYSCALLS.printChar(1, 10);\r\n if (buffers[2].length) SYSCALLS.printChar(2, 10);\r\n }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // writev\r\n // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0\r\n var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\r\n var ret = 0;\r\n for (var i = 0; i < iovcnt; i++) {\r\n var ptr = HEAP32[(((iov)+(i*8))>>2)];\r\n var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\r\n for (var j = 0; j < len; j++) {\r\n SYSCALLS.printChar(stream, HEAPU8[ptr+j]);\r\n }\r\n ret += len;\r\n }\r\n return ret;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // ioctl\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // close\r\n var stream = SYSCALLS.getStreamFromFD();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___unlock() {}\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n var _emscripten_asm_const_int=true;\r\n\r\n function _emscripten_get_heap_size() {\r\n return HEAP8.length;\r\n }\r\n\r\n function _exit(status) {\r\n // void _exit(int status);\r\n // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html\r\n exit(status);\r\n }\r\n\r\n \r\n\r\n function _llvm_eh_typeid_for(type) {\r\n return type;\r\n }\r\n\r\n function _llvm_trap() {\r\n abort('trap!');\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n }\r\n \r\n \r\n function abortOnCannotGrowMemory(requestedSize) {\r\n abort('OOM');\r\n }\r\n \r\n function emscripten_realloc_buffer(size) {\r\n var PAGE_MULTIPLE = 65536;\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var oldSize = buffer.byteLength;\r\n // native wasm support\r\n // note that this is *not* threadsafe. multiple threads can call .grow(), and each\r\n // presents a delta, so in theory we may over-allocate here (e.g. if two threads\r\n // ask to grow from 256MB to 512MB, we get 2 requests to add +256MB, and may end\r\n // up growing to 768MB (even though we may have been able to make do with 512MB).\r\n // TODO: consider decreasing the step sizes in emscripten_resize_heap\r\n try {\r\n var result = wasmMemory.grow((size - oldSize) / 65536); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n buffer = wasmMemory.buffer;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n }function _emscripten_resize_heap(requestedSize) {\r\n var oldSize = _emscripten_get_heap_size();\r\n // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.\r\n \r\n \r\n var PAGE_MULTIPLE = 65536;\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n \r\n if (requestedSize > LIMIT) {\r\n return false;\r\n }\r\n \r\n var MIN_TOTAL_MEMORY = 16777216;\r\n var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n \r\n // TODO: see realloc_buffer - for PTHREADS we may want to decrease these jumps\r\n while (newSize < requestedSize) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (newSize <= 536870912) {\r\n newSize = alignUp(2 * newSize, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n \r\n }\r\n \r\n \r\n \r\n \r\n if (!emscripten_realloc_buffer(newSize)) {\r\n return false;\r\n }\r\n \r\n updateGlobalBufferViews();\r\n \r\n \r\n \r\n return true;\r\n } \r\n\r\n function _time(ptr) {\r\n var ret = (Date.now()/1000)|0;\r\n if (ptr) {\r\n HEAP32[((ptr)>>2)]=ret;\r\n }\r\n return ret;\r\n }\r\nvar ASSERTIONS = false;\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n// ASM_LIBRARY EXTERN PRIMITIVES: Int8Array,Int32Array\r\n\r\n\r\nfunction invoke_i(index) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_i(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ii(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ji(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_v(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vi(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viij(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viij(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viji(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nvar asmGlobalArg = {};\r\n\r\nvar asmLibraryArg = {\r\n \"abort\": abort,\r\n \"setTempRet0\": setTempRet0,\r\n \"getTempRet0\": getTempRet0,\r\n \"invoke_i\": invoke_i,\r\n \"invoke_ii\": invoke_ii,\r\n \"invoke_iii\": invoke_iii,\r\n \"invoke_iiii\": invoke_iiii,\r\n \"invoke_iiiii\": invoke_iiiii,\r\n \"invoke_iiiiii\": invoke_iiiiii,\r\n \"invoke_ji\": invoke_ji,\r\n \"invoke_v\": invoke_v,\r\n \"invoke_vi\": invoke_vi,\r\n \"invoke_vii\": invoke_vii,\r\n \"invoke_viii\": invoke_viii,\r\n \"invoke_viiii\": invoke_viiii,\r\n \"invoke_viiiii\": invoke_viiiii,\r\n \"invoke_viiiiiii\": invoke_viiiiiii,\r\n \"invoke_viij\": invoke_viij,\r\n \"invoke_viji\": invoke_viji,\r\n \"___assert_fail\": ___assert_fail,\r\n \"___cxa_allocate_exception\": ___cxa_allocate_exception,\r\n \"___cxa_begin_catch\": ___cxa_begin_catch,\r\n \"___cxa_end_catch\": ___cxa_end_catch,\r\n \"___cxa_find_matching_catch\": ___cxa_find_matching_catch,\r\n \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2,\r\n \"___cxa_find_matching_catch_3\": ___cxa_find_matching_catch_3,\r\n \"___cxa_free_exception\": ___cxa_free_exception,\r\n \"___cxa_get_exception_ptr\": ___cxa_get_exception_ptr,\r\n \"___cxa_pure_virtual\": ___cxa_pure_virtual,\r\n \"___cxa_throw\": ___cxa_throw,\r\n \"___cxa_uncaught_exceptions\": ___cxa_uncaught_exceptions,\r\n \"___exception_addRef\": ___exception_addRef,\r\n \"___exception_deAdjust\": ___exception_deAdjust,\r\n \"___exception_decRef\": ___exception_decRef,\r\n \"___gxx_personality_v0\": ___gxx_personality_v0,\r\n \"___lock\": ___lock,\r\n \"___resumeException\": ___resumeException,\r\n \"___setErrNo\": ___setErrNo,\r\n \"___syscall140\": ___syscall140,\r\n \"___syscall146\": ___syscall146,\r\n \"___syscall54\": ___syscall54,\r\n \"___syscall6\": ___syscall6,\r\n \"___unlock\": ___unlock,\r\n \"__api_close_keyboard\": __api_close_keyboard,\r\n \"__api_open_keyboard\": __api_open_keyboard,\r\n \"_abort\": _abort,\r\n \"_api_create_sound\": _api_create_sound,\r\n \"_api_create_sound_float\": _api_create_sound_float,\r\n \"_api_delete_sound\": _api_delete_sound,\r\n \"_api_draw_begin\": _api_draw_begin,\r\n \"_api_draw_belt\": _api_draw_belt,\r\n \"_api_draw_blit\": _api_draw_blit,\r\n \"_api_draw_clip_text\": _api_draw_clip_text,\r\n \"_api_draw_end\": _api_draw_end,\r\n \"_api_draw_text\": _api_draw_text,\r\n \"_api_duplicate_sound\": _api_duplicate_sound,\r\n \"_api_exit_game\": _api_exit_game,\r\n \"_api_play_sound\": _api_play_sound,\r\n \"_api_set_cursor\": _api_set_cursor,\r\n \"_api_set_volume\": _api_set_volume,\r\n \"_api_stop_sound\": _api_stop_sound,\r\n \"_api_use_websocket\": _api_use_websocket,\r\n \"_api_websocket_closed\": _api_websocket_closed,\r\n \"_api_websocket_send\": _api_websocket_send,\r\n \"_emscripten_asm_const_ii\": _emscripten_asm_const_ii,\r\n \"_emscripten_get_heap_size\": _emscripten_get_heap_size,\r\n \"_emscripten_memcpy_big\": _emscripten_memcpy_big,\r\n \"_emscripten_resize_heap\": _emscripten_resize_heap,\r\n \"_exit\": _exit,\r\n \"_exit_error\": _exit_error,\r\n \"_get_file_contents\": _get_file_contents,\r\n \"_get_file_size\": _get_file_size,\r\n \"_llvm_eh_typeid_for\": _llvm_eh_typeid_for,\r\n \"_llvm_trap\": _llvm_trap,\r\n \"_put_file_contents\": _put_file_contents,\r\n \"_remove_file\": _remove_file,\r\n \"_show_alert\": _show_alert,\r\n \"_time\": _time,\r\n \"_trace_pop\": _trace_pop,\r\n \"_trace_push\": _trace_push,\r\n \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory,\r\n \"emscripten_realloc_buffer\": emscripten_realloc_buffer,\r\n \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM,\r\n \"tempDoublePtr\": tempDoublePtr,\r\n \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR\r\n};\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(asmGlobalArg, asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_AllocPacket = Module[\"_DApi_AllocPacket\"] = function() {\r\n return Module[\"asm\"][\"_DApi_AllocPacket\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Char = Module[\"_DApi_Char\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Char\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Init = Module[\"_DApi_Init\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Init\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Key = Module[\"_DApi_Key\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Key\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Mouse = Module[\"_DApi_Mouse\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Mouse\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Render = Module[\"_DApi_Render\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Render\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncText = Module[\"_DApi_SyncText\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncText\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncTextPtr = Module[\"_DApi_SyncTextPtr\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncTextPtr\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_InitWebsocket = Module[\"_SNet_InitWebsocket\"] = function() {\r\n return Module[\"asm\"][\"_SNet_InitWebsocket\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_WebsocketStatus = Module[\"_SNet_WebsocketStatus\"] = function() {\r\n return Module[\"asm\"][\"_SNet_WebsocketStatus\"].apply(null, arguments)\r\n};\r\n\r\nvar __ZSt18uncaught_exceptionv = Module[\"__ZSt18uncaught_exceptionv\"] = function() {\r\n return Module[\"asm\"][\"__ZSt18uncaught_exceptionv\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() {\r\n return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() {\r\n return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_close_keyboard = Module[\"___em_js___api_close_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_close_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_open_keyboard = Module[\"___em_js___api_open_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_open_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound = Module[\"___em_js__api_create_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound_float = Module[\"___em_js__api_create_sound_float\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound_float\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_delete_sound = Module[\"___em_js__api_delete_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_delete_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_begin = Module[\"___em_js__api_draw_begin\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_begin\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_belt = Module[\"___em_js__api_draw_belt\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_belt\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_blit = Module[\"___em_js__api_draw_blit\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_blit\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_clip_text = Module[\"___em_js__api_draw_clip_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_clip_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_end = Module[\"___em_js__api_draw_end\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_end\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_text = Module[\"___em_js__api_draw_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_duplicate_sound = Module[\"___em_js__api_duplicate_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_duplicate_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_exit_game = Module[\"___em_js__api_exit_game\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_exit_game\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_play_sound = Module[\"___em_js__api_play_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_play_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_cursor = Module[\"___em_js__api_set_cursor\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_cursor\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_volume = Module[\"___em_js__api_set_volume\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_volume\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_stop_sound = Module[\"___em_js__api_stop_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_stop_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_use_websocket = Module[\"___em_js__api_use_websocket\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_use_websocket\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_closed = Module[\"___em_js__api_websocket_closed\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_closed\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_send = Module[\"___em_js__api_websocket_send\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_send\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__exit_error = Module[\"___em_js__exit_error\"] = function() {\r\n return Module[\"asm\"][\"___em_js__exit_error\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_size = Module[\"___em_js__get_file_size\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_size\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__remove_file = Module[\"___em_js__remove_file\"] = function() {\r\n return Module[\"asm\"][\"___em_js__remove_file\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__show_alert = Module[\"___em_js__show_alert\"] = function() {\r\n return Module[\"asm\"][\"___em_js__show_alert\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_pop = Module[\"___em_js__trace_pop\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_pop\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_push = Module[\"___em_js__trace_push\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_push\"].apply(null, arguments)\r\n};\r\n\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() {\r\n return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments)\r\n};\r\n\r\nvar _free = Module[\"_free\"] = function() {\r\n return Module[\"asm\"][\"_free\"].apply(null, arguments)\r\n};\r\n\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() {\r\n return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments)\r\n};\r\n\r\nvar _malloc = Module[\"_malloc\"] = function() {\r\n return Module[\"asm\"][\"_malloc\"].apply(null, arguments)\r\n};\r\n\r\nvar _memcpy = Module[\"_memcpy\"] = function() {\r\n return Module[\"asm\"][\"_memcpy\"].apply(null, arguments)\r\n};\r\n\r\nvar _memmove = Module[\"_memmove\"] = function() {\r\n return Module[\"asm\"][\"_memmove\"].apply(null, arguments)\r\n};\r\n\r\nvar _memset = Module[\"_memset\"] = function() {\r\n return Module[\"asm\"][\"_memset\"].apply(null, arguments)\r\n};\r\n\r\nvar _sbrk = Module[\"_sbrk\"] = function() {\r\n return Module[\"asm\"][\"_sbrk\"].apply(null, arguments)\r\n};\r\n\r\nvar _setThrew = Module[\"_setThrew\"] = function() {\r\n return Module[\"asm\"][\"_setThrew\"].apply(null, arguments)\r\n};\r\n\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() {\r\n return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments)\r\n};\r\n\r\nvar globalCtors = Module[\"globalCtors\"] = function() {\r\n return Module[\"asm\"][\"globalCtors\"].apply(null, arguments)\r\n};\r\n\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() {\r\n return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments)\r\n};\r\n\r\nvar stackRestore = Module[\"stackRestore\"] = function() {\r\n return Module[\"asm\"][\"stackRestore\"].apply(null, arguments)\r\n};\r\n\r\nvar stackSave = Module[\"stackSave\"] = function() {\r\n return Module[\"asm\"][\"stackSave\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_i = Module[\"dynCall_i\"] = function() {\r\n return Module[\"asm\"][\"dynCall_i\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iidiiii = Module[\"dynCall_iidiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iidiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_jiji = Module[\"dynCall_jiji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_jiji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() {\r\n return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiii = Module[\"dynCall_viiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiii = Module[\"dynCall_viiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiiii = Module[\"dynCall_viiiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viij = Module[\"dynCall_viij\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viij\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments)\r\n};\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n}\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n initRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n what += '';\r\n out(what);\r\n err(what);\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\n Module[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return Diablo\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = Diablo;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return Diablo; });\r\n else if (typeof exports === 'object')\r\n exports[\"Diablo\"] = Diablo;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","module.exports = __webpack_public_path__ + \"static/media/DiabloSpawn.9c2373b2.wasm\";","\r\nvar DiabloSpawn = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(DiabloSpawn) {\r\n DiabloSpawn = DiabloSpawn || {};\r\n\r\n// Copyright 2010 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof DiabloSpawn !== 'undefined' ? DiabloSpawn : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// Determine the runtime environment we are in. You can customize this by\r\n// setting the ENVIRONMENT setting at compile time (see settings.js).\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_HAS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\n// A web environment like Electron.js can have Node enabled, so we must\r\n// distinguish between Node-enabled environments and Node environments per se.\r\n// This will allow the former to do things like mount NODEFS.\r\n// Extended check using process.versions fixes issue #8816.\r\n// (Also makes redundant the original check that 'require' is a function.)\r\nENVIRONMENT_HAS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\r\nENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\n// Hooks that are implemented differently in different runtime environments.\r\nvar read_,\r\n readAsync,\r\n readBinary,\r\n setWindowTitle;\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n read_ = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n readBinary = function readBinary(filename) {\r\n var ret = read_(filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', abort);\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n read_ = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n readBinary = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\r\n scriptDirectory = self.location.href;\r\n } else if (document.currentScript) { // web\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\r\n // and scriptDirectory will correctly be replaced with an empty string.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n read_ = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n readBinary = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n readAsync = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n setWindowTitle = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\r\n\r\n// TODO remove when SDL2 is fixed; also add the above assertion\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n if (end > _emscripten_get_heap_size()) {\r\n abort();\r\n }\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n return Math.ceil(size / factor) * factor;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// Wraps a JS function as a wasm function with a given signature.\r\n// In the future, we may get a WebAssembly.Function constructor. Until then,\r\n// we create a wasm module that takes the JS function as an import with a given\r\n// signature, and re-exports that as a wasm function.\r\nfunction convertJsFunctionToWasm(func, sig) {\r\n\r\n // The module is static, with the exception of the type section, which is\r\n // generated based on the signature passed in.\r\n var typeSection = [\r\n 0x01, // id: section,\r\n 0x00, // length: 0 (placeholder)\r\n 0x01, // count: 1\r\n 0x60, // form: func\r\n ];\r\n var sigRet = sig.slice(0, 1);\r\n var sigParam = sig.slice(1);\r\n var typeCodes = {\r\n 'i': 0x7f, // i32\r\n 'j': 0x7e, // i64\r\n 'f': 0x7d, // f32\r\n 'd': 0x7c, // f64\r\n };\r\n\r\n // Parameters, length + signatures\r\n typeSection.push(sigParam.length);\r\n for (var i = 0; i < sigParam.length; ++i) {\r\n typeSection.push(typeCodes[sigParam[i]]);\r\n }\r\n\r\n // Return values, length + signatures\r\n // With no multi-return in MVP, either 0 (void) or 1 (anything else)\r\n if (sigRet == 'v') {\r\n typeSection.push(0x00);\r\n } else {\r\n typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);\r\n }\r\n\r\n // Write the overall length of the type section back into the section header\r\n // (excepting the 2 bytes for the section id and length)\r\n typeSection[1] = typeSection.length - 2;\r\n\r\n // Rest of the module is static\r\n var bytes = new Uint8Array([\r\n 0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\r\n 0x01, 0x00, 0x00, 0x00, // version: 1\r\n ].concat(typeSection, [\r\n 0x02, 0x07, // import section\r\n // (import \"e\" \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\r\n 0x07, 0x05, // export section\r\n // (export \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x66, 0x00, 0x00,\r\n ]));\r\n\r\n // We can compile this wasm module synchronously because it is very small.\r\n // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\r\n var module = new WebAssembly.Module(bytes);\r\n var instance = new WebAssembly.Instance(module, {\r\n e: {\r\n f: func\r\n }\r\n });\r\n var wrappedFunc = instance.exports.f;\r\n return wrappedFunc;\r\n}\r\n\r\n// Add a wasm function to the table.\r\nfunction addFunctionWasm(func, sig) {\r\n var table = wasmTable;\r\n var ret = table.length;\r\n\r\n // Grow the table\r\n try {\r\n table.grow(1);\r\n } catch (err) {\r\n if (!err instanceof RangeError) {\r\n throw err;\r\n }\r\n throw 'Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.';\r\n }\r\n\r\n // Insert new element\r\n try {\r\n // Attempting to call this with JS function will cause of table.set() to fail\r\n table.set(ret, func);\r\n } catch (err) {\r\n if (!err instanceof TypeError) {\r\n throw err;\r\n }\r\n assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction');\r\n var wrapped = convertJsFunctionToWasm(func, sig);\r\n table.set(ret, wrapped);\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nfunction removeFunctionWasm(index) {\r\n // TODO(sbc): Look into implementing this to allow re-using of table slots\r\n}\r\n\r\n// 'sig' parameter is required for the llvm backend but only when func is not\r\n// already a WebAssembly function.\r\nfunction addFunction(func, sig) {\r\n\r\n\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n\r\n}\r\n\r\nfunction removeFunction(index) {\r\n\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\nvar tempRet0 = 0;\r\n\r\nvar setTempRet0 = function(value) {\r\n tempRet0 = value;\r\n};\r\n\r\nvar getTempRet0 = function() {\r\n return tempRet0;\r\n};\r\n\r\n\r\nvar Runtime = {\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\nif (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n}\r\n\r\n\r\n// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.\r\n// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// Wasm globals\r\n\r\nvar wasmMemory;\r\n\r\n// Potentially used for direct table calls.\r\nvar wasmTable;\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\n// whether we are quitting the application. no code should run after this.\r\n// set in exit() and abort()\r\nvar ABORT = false;\r\n\r\n// set by exit() and abort(). Passed to 'onExit' handler.\r\n// NOTE: This is also used as the process return code code in shell environments\r\n// but only when noExitRuntime is false.\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n // For fast lookup of conversion functions\r\n var toC = {\r\n 'string': function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n },\r\n 'array': function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n }\r\n };\r\n\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return UTF8ToString(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 3; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [_malloc,\r\n stackAlloc,\r\n dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n\r\n\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n abort(\"this function has been removed - you should use UTF8ToString(ptr, maxBytesToRead) instead!\");\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAPU8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\n\r\n/**\r\n * @param {number} idx\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\r\n var endIdx = idx + maxBytesToRead;\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)\r\n while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var str = '';\r\n // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that\r\n while (idx < endPtr) {\r\n // For UTF8 byte structure, see:\r\n // http://en.wikipedia.org/wiki/UTF-8#Description\r\n // https://www.ietf.org/rfc/rfc2279.txt\r\n // https://tools.ietf.org/html/rfc3629\r\n var u0 = u8Array[idx++];\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n var u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n var u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63);\r\n }\r\n\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a\r\n// copy of that string as a Javascript String object.\r\n// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit\r\n// this parameter to scan the string until the first \\0 byte. If maxBytesToRead is\r\n// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the\r\n// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will\r\n// not produce a string of exact length [ptr, ptr+maxBytesToRead[)\r\n// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may\r\n// throw JS JIT optimizations off, so it is worth to consider consistently using one\r\n// style or the other.\r\n/**\r\n * @param {number} ptr\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ToString(ptr, maxBytesToRead) {\r\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) ++len;\r\n else if (u <= 0x7FF) len += 2;\r\n else if (u <= 0xFFFF) len += 3;\r\n else len += 4;\r\n }\r\n return len;\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (y + ' [' + x + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\n\r\nvar STATIC_BASE = 1024,\r\n STACK_BASE = 1850928,\r\n STACKTOP = STACK_BASE,\r\n STACK_MAX = 7093808,\r\n DYNAMIC_BASE = 7093808,\r\n DYNAMICTOP_PTR = 1850896;\r\n\r\n\r\n\r\n\r\nvar TOTAL_STACK = 5242880;\r\n\r\nvar INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (INITIAL_TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n\r\n\r\n\r\n if (Module['wasmMemory']) {\r\n wasmMemory = Module['wasmMemory'];\r\n } else {\r\n wasmMemory = new WebAssembly.Memory({\r\n 'initial': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE\r\n });\r\n }\r\n\r\n\r\nif (wasmMemory) {\r\n buffer = wasmMemory.buffer;\r\n}\r\n\r\n// If the user provides an incorrect length, just use that length instead rather than providing the user to\r\n// specifically provide the memory length with Module['TOTAL_MEMORY'].\r\nINITIAL_TOTAL_MEMORY = buffer.byteLength;\r\nupdateGlobalBufferViews();\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction initRuntime() {\r\n runtimeInitialized = true;\r\n \r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n \r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// Module.preRun (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nvar wasmBinaryFile = 'DiabloSpawn.wasm';\r\nif (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n}\r\n\r\nfunction getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (readBinary) {\r\n return readBinary(wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n}\r\n\r\nfunction getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n}\r\n\r\n\r\n\r\n// Create the wasm instance.\r\n// Receives the wasm imports, returns the exports.\r\nfunction createWasm(env) {\r\n\r\n // prepare imports\r\n var info = {\r\n 'env': env\r\n ,\r\n 'global': {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n },\r\n 'global.Math': Math,\r\n 'asm2wasm': asm2wasmImports\r\n };\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n var exports = instance.exports;\r\n Module['asm'] = exports;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\r\n // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.\r\n receiveInstance(output['instance']);\r\n }\r\n\r\n\r\n function instantiateArrayBuffer(receiver) {\r\n return getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver, function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n\r\n // Prefer streaming instantiation if available.\r\n function instantiateAsync() {\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {\r\n return WebAssembly.instantiateStreaming(response, info)\r\n .then(receiveInstantiatedSource, function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n });\r\n } else {\r\n return instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n }\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n var exports = Module['instantiateWasm'](info, receiveInstance);\r\n return exports;\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n instantiateAsync();\r\n return {}; // no exports yet; we'll fill them in later\r\n}\r\n\r\n// Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n// the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n// doesn't need to care that it is wasm or asm.js.\r\n\r\nModule['asm'] = function(global, env, providedBuffer) {\r\n // memory was already allocated (so js could use the buffer)\r\n env['memory'] = wasmMemory\r\n ;\r\n // import table\r\n env['table'] = wasmTable = new WebAssembly.Table({\r\n 'initial': 1116,\r\n 'maximum': 1116,\r\n 'element': 'anyfunc'\r\n });\r\n // With the wasm backend __memory_base and __table_base and only needed for\r\n // relocatable output.\r\n env['__memory_base'] = 1024; // tell the memory segments where to place themselves\r\n // table starts at 0 by default (even in dynamic linking, for the main module)\r\n env['__table_base'] = 0;\r\n\r\n var exports = createWasm(env);\r\n return exports;\r\n};\r\n\r\n// Globals used by JS i64 conversions\r\nvar tempDouble;\r\nvar tempI64;\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [function($0) { self.DApi.current_save_id($0); }];\r\n\r\nfunction _emscripten_asm_const_ii(code, a0) {\r\n return ASM_CONSTS[code](a0);\r\n}\r\nfunction __api_close_keyboard(){ self.DApi.close_keyboard(); }\r\nfunction __api_open_keyboard(x0,y0,x1,y1,len){ self.DApi.open_keyboard(x0, y0, x1, y1, len); }\r\nfunction _api_create_sound(id,ptr,size){ self.DApi.create_sound(id, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _api_create_sound_float(id,ptr,samples,channels,rate){ self.DApi.create_sound_raw(id, HEAPF32.slice(ptr / 4, ptr / 4 + samples * channels), samples, channels, rate); }\r\nfunction _api_delete_sound(id){ self.DApi.delete_sound(id); }\r\nfunction _api_draw_begin(){ self.DApi.draw_begin(); }\r\nfunction _api_draw_belt(items){ self.DApi.draw_belt(HEAP32.subarray(items / 4, items / 4 + 8)); }\r\nfunction _api_draw_blit(x,y,w,h,ptr){ self.DApi.draw_blit(x, y, w, h, HEAPU8.subarray(ptr, ptr + w * h * 4)); }\r\nfunction _api_draw_clip_text(x0,y0,x1,y1){ self.DApi.draw_clip_text(x0, y0, x1, y1); }\r\nfunction _api_draw_end(){ self.DApi.draw_end(); }\r\nfunction _api_draw_text(x,y,ptr,color){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); self.DApi.draw_text(x, y, text, color); }\r\nfunction _api_duplicate_sound(id,srcId){ self.DApi.duplicate_sound(id, srcId); }\r\nfunction _api_exit_game(){ self.DApi.exit_game(); }\r\nfunction _api_play_sound(id,volume,pan,loop){ self.DApi.play_sound(id, volume, pan, loop); }\r\nfunction _api_set_cursor(x,y){ self.DApi.set_cursor(x, y); }\r\nfunction _api_set_volume(id,volume){ self.DApi.set_volume(id, volume); }\r\nfunction _api_stop_sound(id){ self.DApi.stop_sound(id); }\r\nfunction _api_use_websocket(use){ self.DApi.use_websocket(use); }\r\nfunction _api_websocket_closed(){ return self.DApi.websocket_closed(); }\r\nfunction _api_websocket_send(ptr,size){ self.DApi.websocket_send(HEAPU8.subarray(ptr, ptr + size)); }\r\nfunction _exit_error(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply(null, HEAPU8.subarray( err, end )); self.DApi.exit_error( text ); }\r\nfunction _get_file_contents(path,ptr,offset,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.get_file_contents(text, HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _get_file_size(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); return self.DApi.get_file_size(text); }\r\nfunction _put_file_contents(path,ptr,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end)); self.DApi.put_file_contents(text, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _remove_file(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.remove_file( text ); }\r\nfunction _show_alert(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply( null, HEAPU8.subarray( err, end ) ); self.alert( text ); }\r\nfunction _trace_pop(){ if (self.WASM_TRACE) { self.WASM_TRACE.pop(); } }\r\nfunction _trace_push(ptr){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); console.log(text); self.WASM_TRACE = self.WASM_TRACE || []; self.WASM_TRACE.push(text); }\r\n\r\n\r\n\r\n// STATICTOP = STATIC_BASE + 1849904;\r\n/* global initializers */ __ATINIT__.push({ func: function() { globalCtors() } });\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = 1850912\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + UTF8ToString(condition) + ', at: ' + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n \r\n var ___exception_infos={};\r\n \r\n var ___exception_caught= [];\r\n \r\n function ___exception_addRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount++;\r\n }\r\n \r\n function ___exception_deAdjust(adjusted) {\r\n if (!adjusted || ___exception_infos[adjusted]) return adjusted;\r\n for (var key in ___exception_infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var adj = ___exception_infos[ptr].adjusted;\r\n var len = adj.length;\r\n for (var i = 0; i < len; i++) {\r\n if (adj[i] === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n }\r\n return adjusted;\r\n }function ___cxa_begin_catch(ptr) {\r\n var info = ___exception_infos[ptr];\r\n if (info && !info.caught) {\r\n info.caught = true;\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions--;\r\n }\r\n if (info) info.rethrown = false;\r\n ___exception_caught.push(ptr);\r\n ___exception_addRef(___exception_deAdjust(ptr));\r\n return ptr;\r\n }\r\n\r\n \r\n var ___exception_last=0;\r\n \r\n \r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) {\r\n }\r\n }function ___exception_decRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete ___exception_infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n }\r\n \r\n function ___cxa_end_catch() {\r\n // Clear state flag.\r\n _setThrew(0);\r\n // Call destructor if one is registered then clear it.\r\n var ptr = ___exception_caught.pop();\r\n if (ptr) {\r\n ___exception_decRef(___exception_deAdjust(ptr));\r\n ___exception_last = 0; // XXX in decRef?\r\n }\r\n }\r\n\r\n \r\n \r\n function ___resumeException(ptr) {\r\n if (!___exception_last) { ___exception_last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = ___exception_last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = ___exception_infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = ___cxa_is_pointer_type(throwntype);\r\n // can_catch receives a **, add indirection\r\n var buffer = 1850880;\r\n HEAP32[((buffer)>>2)]=thrown;\r\n thrown = buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && ___cxa_can_catch(typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted.push(thrown);\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }\r\n Module[\"___cxa_find_matching_catch\"] = ___cxa_find_matching_catch;function ___cxa_find_matching_catch_2(a0,a1\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1);\r\n }\r\n\r\n function ___cxa_find_matching_catch_3(a0,a1,a2\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1,a2);\r\n }\r\n\r\n\r\n function ___cxa_get_exception_ptr(ptr) {\r\n // TODO: use info.adjusted?\r\n return ptr;\r\n }\r\n\r\n function ___cxa_pure_virtual() {\r\n ABORT = true;\r\n throw 'Pure virtual function called!';\r\n }\r\n\r\n function ___cxa_throw(ptr, type, destructor) {\r\n ___exception_infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: [ptr],\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n ___exception_last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___cxa_uncaught_exceptions() {\r\n return __ZSt18uncaught_exceptionv.uncaught_exceptions;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n function ___lock() {}\r\n\r\n\r\n \r\n \r\n var PATH={splitPath:function (filename) {\r\n var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\n return splitPathRe.exec(filename).slice(1);\r\n },normalizeArray:function (parts, allowAboveRoot) {\r\n // if the path tries to go above the root, `up` ends up > 0\r\n var up = 0;\r\n for (var i = parts.length - 1; i >= 0; i--) {\r\n var last = parts[i];\r\n if (last === '.') {\r\n parts.splice(i, 1);\r\n } else if (last === '..') {\r\n parts.splice(i, 1);\r\n up++;\r\n } else if (up) {\r\n parts.splice(i, 1);\r\n up--;\r\n }\r\n }\r\n // if the path is allowed to go above the root, restore leading ..s\r\n if (allowAboveRoot) {\r\n for (; up; up--) {\r\n parts.unshift('..');\r\n }\r\n }\r\n return parts;\r\n },normalize:function (path) {\r\n var isAbsolute = path.charAt(0) === '/',\r\n trailingSlash = path.substr(-1) === '/';\r\n // Normalize the path\r\n path = PATH.normalizeArray(path.split('/').filter(function(p) {\r\n return !!p;\r\n }), !isAbsolute).join('/');\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n return (isAbsolute ? '/' : '') + path;\r\n },dirname:function (path) {\r\n var result = PATH.splitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n return root + dir;\r\n },basename:function (path) {\r\n // EMSCRIPTEN return '/'' for '/', not an empty string\r\n if (path === '/') return '/';\r\n var lastSlash = path.lastIndexOf('/');\r\n if (lastSlash === -1) return path;\r\n return path.substr(lastSlash+1);\r\n },extname:function (path) {\r\n return PATH.splitPath(path)[3];\r\n },join:function () {\r\n var paths = Array.prototype.slice.call(arguments, 0);\r\n return PATH.normalize(paths.join('/'));\r\n },join2:function (l, r) {\r\n return PATH.normalize(l + '/' + r);\r\n }};var SYSCALLS={buffers:[null,[],[]],printChar:function (stream, curr) {\r\n var buffer = SYSCALLS.buffers[stream];\r\n if (curr === 0 || curr === 10) {\r\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\r\n buffer.length = 0;\r\n } else {\r\n buffer.push(curr);\r\n }\r\n },varargs:0,get:function (varargs) {\r\n SYSCALLS.varargs += 4;\r\n var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\r\n return ret;\r\n },getStr:function () {\r\n var ret = UTF8ToString(SYSCALLS.get());\r\n return ret;\r\n },get64:function () {\r\n var low = SYSCALLS.get(), high = SYSCALLS.get();\r\n return low;\r\n },getZero:function () {\r\n SYSCALLS.get();\r\n }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // llseek\r\n var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n \r\n function flush_NO_FILESYSTEM() {\r\n // flush anything remaining in the buffers during shutdown\r\n var fflush = Module[\"_fflush\"];\r\n if (fflush) fflush(0);\r\n var buffers = SYSCALLS.buffers;\r\n if (buffers[1].length) SYSCALLS.printChar(1, 10);\r\n if (buffers[2].length) SYSCALLS.printChar(2, 10);\r\n }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // writev\r\n // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0\r\n var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\r\n var ret = 0;\r\n for (var i = 0; i < iovcnt; i++) {\r\n var ptr = HEAP32[(((iov)+(i*8))>>2)];\r\n var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\r\n for (var j = 0; j < len; j++) {\r\n SYSCALLS.printChar(stream, HEAPU8[ptr+j]);\r\n }\r\n ret += len;\r\n }\r\n return ret;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // ioctl\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // close\r\n var stream = SYSCALLS.getStreamFromFD();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___unlock() {}\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n var _emscripten_asm_const_int=true;\r\n\r\n function _emscripten_get_heap_size() {\r\n return HEAP8.length;\r\n }\r\n\r\n function _exit(status) {\r\n // void _exit(int status);\r\n // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html\r\n exit(status);\r\n }\r\n\r\n \r\n\r\n function _llvm_eh_typeid_for(type) {\r\n return type;\r\n }\r\n\r\n function _llvm_trap() {\r\n abort('trap!');\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n }\r\n \r\n \r\n function abortOnCannotGrowMemory(requestedSize) {\r\n abort('OOM');\r\n }\r\n \r\n function emscripten_realloc_buffer(size) {\r\n var PAGE_MULTIPLE = 65536;\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var oldSize = buffer.byteLength;\r\n // native wasm support\r\n // note that this is *not* threadsafe. multiple threads can call .grow(), and each\r\n // presents a delta, so in theory we may over-allocate here (e.g. if two threads\r\n // ask to grow from 256MB to 512MB, we get 2 requests to add +256MB, and may end\r\n // up growing to 768MB (even though we may have been able to make do with 512MB).\r\n // TODO: consider decreasing the step sizes in emscripten_resize_heap\r\n try {\r\n var result = wasmMemory.grow((size - oldSize) / 65536); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n buffer = wasmMemory.buffer;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n }function _emscripten_resize_heap(requestedSize) {\r\n var oldSize = _emscripten_get_heap_size();\r\n // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.\r\n \r\n \r\n var PAGE_MULTIPLE = 65536;\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n \r\n if (requestedSize > LIMIT) {\r\n return false;\r\n }\r\n \r\n var MIN_TOTAL_MEMORY = 16777216;\r\n var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n \r\n // TODO: see realloc_buffer - for PTHREADS we may want to decrease these jumps\r\n while (newSize < requestedSize) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (newSize <= 536870912) {\r\n newSize = alignUp(2 * newSize, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n \r\n }\r\n \r\n \r\n \r\n \r\n if (!emscripten_realloc_buffer(newSize)) {\r\n return false;\r\n }\r\n \r\n updateGlobalBufferViews();\r\n \r\n \r\n \r\n return true;\r\n } \r\n\r\n function _time(ptr) {\r\n var ret = (Date.now()/1000)|0;\r\n if (ptr) {\r\n HEAP32[((ptr)>>2)]=ret;\r\n }\r\n return ret;\r\n }\r\nvar ASSERTIONS = false;\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n// ASM_LIBRARY EXTERN PRIMITIVES: Int8Array,Int32Array\r\n\r\n\r\nfunction invoke_i(index) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_i(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ii(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ji(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_v(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vi(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viij(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viij(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viji(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nvar asmGlobalArg = {};\r\n\r\nvar asmLibraryArg = {\r\n \"abort\": abort,\r\n \"setTempRet0\": setTempRet0,\r\n \"getTempRet0\": getTempRet0,\r\n \"invoke_i\": invoke_i,\r\n \"invoke_ii\": invoke_ii,\r\n \"invoke_iii\": invoke_iii,\r\n \"invoke_iiii\": invoke_iiii,\r\n \"invoke_iiiii\": invoke_iiiii,\r\n \"invoke_iiiiii\": invoke_iiiiii,\r\n \"invoke_ji\": invoke_ji,\r\n \"invoke_v\": invoke_v,\r\n \"invoke_vi\": invoke_vi,\r\n \"invoke_vii\": invoke_vii,\r\n \"invoke_viii\": invoke_viii,\r\n \"invoke_viiii\": invoke_viiii,\r\n \"invoke_viiiii\": invoke_viiiii,\r\n \"invoke_viiiiiii\": invoke_viiiiiii,\r\n \"invoke_viij\": invoke_viij,\r\n \"invoke_viji\": invoke_viji,\r\n \"___assert_fail\": ___assert_fail,\r\n \"___cxa_allocate_exception\": ___cxa_allocate_exception,\r\n \"___cxa_begin_catch\": ___cxa_begin_catch,\r\n \"___cxa_end_catch\": ___cxa_end_catch,\r\n \"___cxa_find_matching_catch\": ___cxa_find_matching_catch,\r\n \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2,\r\n \"___cxa_find_matching_catch_3\": ___cxa_find_matching_catch_3,\r\n \"___cxa_free_exception\": ___cxa_free_exception,\r\n \"___cxa_get_exception_ptr\": ___cxa_get_exception_ptr,\r\n \"___cxa_pure_virtual\": ___cxa_pure_virtual,\r\n \"___cxa_throw\": ___cxa_throw,\r\n \"___cxa_uncaught_exceptions\": ___cxa_uncaught_exceptions,\r\n \"___exception_addRef\": ___exception_addRef,\r\n \"___exception_deAdjust\": ___exception_deAdjust,\r\n \"___exception_decRef\": ___exception_decRef,\r\n \"___gxx_personality_v0\": ___gxx_personality_v0,\r\n \"___lock\": ___lock,\r\n \"___resumeException\": ___resumeException,\r\n \"___setErrNo\": ___setErrNo,\r\n \"___syscall140\": ___syscall140,\r\n \"___syscall146\": ___syscall146,\r\n \"___syscall54\": ___syscall54,\r\n \"___syscall6\": ___syscall6,\r\n \"___unlock\": ___unlock,\r\n \"__api_close_keyboard\": __api_close_keyboard,\r\n \"__api_open_keyboard\": __api_open_keyboard,\r\n \"_abort\": _abort,\r\n \"_api_create_sound\": _api_create_sound,\r\n \"_api_create_sound_float\": _api_create_sound_float,\r\n \"_api_delete_sound\": _api_delete_sound,\r\n \"_api_draw_begin\": _api_draw_begin,\r\n \"_api_draw_belt\": _api_draw_belt,\r\n \"_api_draw_blit\": _api_draw_blit,\r\n \"_api_draw_clip_text\": _api_draw_clip_text,\r\n \"_api_draw_end\": _api_draw_end,\r\n \"_api_draw_text\": _api_draw_text,\r\n \"_api_duplicate_sound\": _api_duplicate_sound,\r\n \"_api_exit_game\": _api_exit_game,\r\n \"_api_play_sound\": _api_play_sound,\r\n \"_api_set_cursor\": _api_set_cursor,\r\n \"_api_set_volume\": _api_set_volume,\r\n \"_api_stop_sound\": _api_stop_sound,\r\n \"_api_use_websocket\": _api_use_websocket,\r\n \"_api_websocket_closed\": _api_websocket_closed,\r\n \"_api_websocket_send\": _api_websocket_send,\r\n \"_emscripten_asm_const_ii\": _emscripten_asm_const_ii,\r\n \"_emscripten_get_heap_size\": _emscripten_get_heap_size,\r\n \"_emscripten_memcpy_big\": _emscripten_memcpy_big,\r\n \"_emscripten_resize_heap\": _emscripten_resize_heap,\r\n \"_exit\": _exit,\r\n \"_exit_error\": _exit_error,\r\n \"_get_file_contents\": _get_file_contents,\r\n \"_get_file_size\": _get_file_size,\r\n \"_llvm_eh_typeid_for\": _llvm_eh_typeid_for,\r\n \"_llvm_trap\": _llvm_trap,\r\n \"_put_file_contents\": _put_file_contents,\r\n \"_remove_file\": _remove_file,\r\n \"_show_alert\": _show_alert,\r\n \"_time\": _time,\r\n \"_trace_pop\": _trace_pop,\r\n \"_trace_push\": _trace_push,\r\n \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory,\r\n \"emscripten_realloc_buffer\": emscripten_realloc_buffer,\r\n \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM,\r\n \"tempDoublePtr\": tempDoublePtr,\r\n \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR\r\n};\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(asmGlobalArg, asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_AllocPacket = Module[\"_DApi_AllocPacket\"] = function() {\r\n return Module[\"asm\"][\"_DApi_AllocPacket\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Char = Module[\"_DApi_Char\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Char\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Init = Module[\"_DApi_Init\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Init\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Key = Module[\"_DApi_Key\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Key\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Mouse = Module[\"_DApi_Mouse\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Mouse\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Render = Module[\"_DApi_Render\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Render\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncText = Module[\"_DApi_SyncText\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncText\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncTextPtr = Module[\"_DApi_SyncTextPtr\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncTextPtr\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_InitWebsocket = Module[\"_SNet_InitWebsocket\"] = function() {\r\n return Module[\"asm\"][\"_SNet_InitWebsocket\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_WebsocketStatus = Module[\"_SNet_WebsocketStatus\"] = function() {\r\n return Module[\"asm\"][\"_SNet_WebsocketStatus\"].apply(null, arguments)\r\n};\r\n\r\nvar __ZSt18uncaught_exceptionv = Module[\"__ZSt18uncaught_exceptionv\"] = function() {\r\n return Module[\"asm\"][\"__ZSt18uncaught_exceptionv\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() {\r\n return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() {\r\n return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_close_keyboard = Module[\"___em_js___api_close_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_close_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_open_keyboard = Module[\"___em_js___api_open_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_open_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound = Module[\"___em_js__api_create_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound_float = Module[\"___em_js__api_create_sound_float\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound_float\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_delete_sound = Module[\"___em_js__api_delete_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_delete_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_begin = Module[\"___em_js__api_draw_begin\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_begin\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_belt = Module[\"___em_js__api_draw_belt\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_belt\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_blit = Module[\"___em_js__api_draw_blit\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_blit\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_clip_text = Module[\"___em_js__api_draw_clip_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_clip_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_end = Module[\"___em_js__api_draw_end\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_end\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_text = Module[\"___em_js__api_draw_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_duplicate_sound = Module[\"___em_js__api_duplicate_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_duplicate_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_exit_game = Module[\"___em_js__api_exit_game\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_exit_game\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_play_sound = Module[\"___em_js__api_play_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_play_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_cursor = Module[\"___em_js__api_set_cursor\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_cursor\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_volume = Module[\"___em_js__api_set_volume\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_volume\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_stop_sound = Module[\"___em_js__api_stop_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_stop_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_use_websocket = Module[\"___em_js__api_use_websocket\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_use_websocket\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_closed = Module[\"___em_js__api_websocket_closed\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_closed\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_send = Module[\"___em_js__api_websocket_send\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_send\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__exit_error = Module[\"___em_js__exit_error\"] = function() {\r\n return Module[\"asm\"][\"___em_js__exit_error\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_size = Module[\"___em_js__get_file_size\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_size\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__remove_file = Module[\"___em_js__remove_file\"] = function() {\r\n return Module[\"asm\"][\"___em_js__remove_file\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__show_alert = Module[\"___em_js__show_alert\"] = function() {\r\n return Module[\"asm\"][\"___em_js__show_alert\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_pop = Module[\"___em_js__trace_pop\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_pop\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_push = Module[\"___em_js__trace_push\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_push\"].apply(null, arguments)\r\n};\r\n\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() {\r\n return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments)\r\n};\r\n\r\nvar _free = Module[\"_free\"] = function() {\r\n return Module[\"asm\"][\"_free\"].apply(null, arguments)\r\n};\r\n\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() {\r\n return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments)\r\n};\r\n\r\nvar _malloc = Module[\"_malloc\"] = function() {\r\n return Module[\"asm\"][\"_malloc\"].apply(null, arguments)\r\n};\r\n\r\nvar _memcpy = Module[\"_memcpy\"] = function() {\r\n return Module[\"asm\"][\"_memcpy\"].apply(null, arguments)\r\n};\r\n\r\nvar _memmove = Module[\"_memmove\"] = function() {\r\n return Module[\"asm\"][\"_memmove\"].apply(null, arguments)\r\n};\r\n\r\nvar _memset = Module[\"_memset\"] = function() {\r\n return Module[\"asm\"][\"_memset\"].apply(null, arguments)\r\n};\r\n\r\nvar _sbrk = Module[\"_sbrk\"] = function() {\r\n return Module[\"asm\"][\"_sbrk\"].apply(null, arguments)\r\n};\r\n\r\nvar _setThrew = Module[\"_setThrew\"] = function() {\r\n return Module[\"asm\"][\"_setThrew\"].apply(null, arguments)\r\n};\r\n\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() {\r\n return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments)\r\n};\r\n\r\nvar globalCtors = Module[\"globalCtors\"] = function() {\r\n return Module[\"asm\"][\"globalCtors\"].apply(null, arguments)\r\n};\r\n\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() {\r\n return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments)\r\n};\r\n\r\nvar stackRestore = Module[\"stackRestore\"] = function() {\r\n return Module[\"asm\"][\"stackRestore\"].apply(null, arguments)\r\n};\r\n\r\nvar stackSave = Module[\"stackSave\"] = function() {\r\n return Module[\"asm\"][\"stackSave\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_i = Module[\"dynCall_i\"] = function() {\r\n return Module[\"asm\"][\"dynCall_i\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iidiiii = Module[\"dynCall_iidiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iidiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_jiji = Module[\"dynCall_jiji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_jiji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() {\r\n return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiii = Module[\"dynCall_viiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiii = Module[\"dynCall_viiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiiii = Module[\"dynCall_viiiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viij = Module[\"dynCall_viij\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viij\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments)\r\n};\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n}\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n initRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n what += '';\r\n out(what);\r\n err(what);\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\n Module[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return DiabloSpawn\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = DiabloSpawn;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return DiabloSpawn; });\r\n else if (typeof exports === 'object')\r\n exports[\"DiabloSpawn\"] = DiabloSpawn;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","module.exports = require('./lib/axios');","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar runtime = function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n\n\n var IteratorPrototype = {};\n\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\"; // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n prototype[method] = function (arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n };\n\n exports.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n\n\n exports.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && typeof value === \"object\" && hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function (error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n\n exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n exports.async = function (innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList));\n return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === \"throw\") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n Gp[toStringTagSymbol] = \"Generator\"; // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n Gp[iteratorSymbol] = function () {\n return this;\n };\n\n Gp.toString = function () {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: \"root\"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n exports.values = values;\n\n function doneResult() {\n return {\n value: undefined,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n this.method = \"next\";\n this.arg = undefined;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n stop: function stop() {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" || record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n }; // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n\n return exports;\n}( // If this script is executing as a CommonJS module, use module.exports\n// as the regeneratorRuntime namespace. Otherwise create a new empty\n// object. Either way, the resulting object will be used to initialize\n// the regeneratorRuntime variable at the top of this file.\ntypeof module === \"object\" ? module.exports : {});\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}","'use strict';\n\nvar utils = require('./utils');\n\nvar bind = require('./helpers/bind');\n\nvar Axios = require('./core/Axios');\n\nvar mergeConfig = require('./core/mergeConfig');\n\nvar defaults = require('./defaults');\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\n\n\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context); // Copy axios.prototype to instance\n\n utils.extend(instance, Axios.prototype, context); // Copy context to instance\n\n utils.extend(instance, context);\n return instance;\n} // Create the default instance to be exported\n\n\nvar axios = createInstance(defaults); // Expose Axios class to allow class inheritance\n\naxios.Axios = Axios; // Factory for creating new instances\n\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n}; // Expose Cancel & CancelToken\n\n\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel'); // Expose all/spread\n\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = require('./helpers/spread');\nmodule.exports = axios; // Allow use of default import syntax in TypeScript\n\nmodule.exports.default = axios;","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nmodule.exports = function isBuffer(obj) {\n return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);\n};","'use strict';\n\nvar utils = require('./../utils');\n\nvar buildURL = require('../helpers/buildURL');\n\nvar InterceptorManager = require('./InterceptorManager');\n\nvar dispatchRequest = require('./dispatchRequest');\n\nvar mergeConfig = require('./mergeConfig');\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\n\n\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\n\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n config.method = config.method ? config.method.toLowerCase() : 'get'; // Hook up interceptors middleware\n\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n}; // Provide aliases for supported request methods\n\n\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\nmodule.exports = Axios;","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n\n\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\n\n\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\n\n\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;","'use strict';\n\nvar utils = require('./../utils');\n\nvar transformData = require('./transformData');\n\nvar isCancel = require('../cancel/isCancel');\n\nvar defaults = require('../defaults');\n\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\n\nvar combineURLs = require('./../helpers/combineURLs');\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\n\n\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config); // Support baseURL config\n\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n } // Ensure headers exist\n\n\n config.headers = config.headers || {}; // Transform request data\n\n config.data = transformData(config.data, config.headers, config.transformRequest); // Flatten headers\n\n config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers || {});\n utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) {\n delete config.headers[method];\n });\n var adapter = config.adapter || defaults.adapter;\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config); // Transform response data\n\n response.data = transformData(response.data, response.headers, config.transformResponse);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config); // Transform response data\n\n if (reason && reason.response) {\n reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);\n }\n }\n\n return Promise.reject(reason);\n });\n};","'use strict';\n\nvar utils = require('./../utils');\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\n\n\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n return data;\n};","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};","'use strict';\n\nvar createError = require('./createError');\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\n\n\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));\n }\n};","'use strict';\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\n\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function () {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n\n return error;\n};","'use strict';\n\nvar utils = require('./../utils'); // Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\n\n\nvar ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent'];\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\n\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) {\n return parsed;\n }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n return parsed;\n};","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href); // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n\n return function isURLSameOrigin(requestURL) {\n var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() : // Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}();","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs support document.cookie\nfunction standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n}() : // Non standard browser env (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() {\n return null;\n },\n remove: function remove() {}\n };\n}();","'use strict';\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\n\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};","'use strict';\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\n\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n};","'use strict';\n\nvar Cancel = require('./Cancel');\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\n\n\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n\n\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;","'use strict';\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\n\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","export default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}","export default function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","async function do_websocket_open(url, handler) {\r\n const socket = new WebSocket(url);\r\n socket.binaryType = \"arraybuffer\";\r\n let versionCbk = null;\r\n socket.addEventListener(\"message\", ({data}) => {\r\n if (versionCbk) {\r\n versionCbk(data);\r\n }\r\n handler(data);\r\n });\r\n await new Promise((resolve, reject) => {\r\n const onError = err => reject(1);\r\n socket.addEventListener(\"error\", onError);\r\n socket.addEventListener(\"open\", () => {\r\n socket.removeEventListener(\"error\", onError);\r\n resolve();\r\n });\r\n });\r\n await new Promise((resolve, reject) => {\r\n const to = setTimeout(() => {\r\n versionCbk = null;\r\n reject(1);\r\n }, 5000);\r\n versionCbk = data => {\r\n clearTimeout(to);\r\n const u8 = new Uint8Array(data);\r\n if (u8[0] === 0x32) {\r\n versionCbk = null;\r\n const version = u8[1] | (u8[2] << 8) | (u8[3] << 16) | (u8[4] << 24);\r\n if (version === 1) {\r\n resolve();\r\n } else {\r\n reject(2);\r\n }\r\n }\r\n };\r\n });\r\n\r\n const vers = process.env.VERSION.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\r\n const clientInfo = new Uint8Array(5);\r\n clientInfo[0] = 0x31;\r\n clientInfo[1] = parseInt(vers[3]);\r\n clientInfo[2] = parseInt(vers[2]);\r\n clientInfo[3] = parseInt(vers[1]);\r\n clientInfo[4] = 0;\r\n socket.send(clientInfo);\r\n return socket;\r\n}\r\n\r\nexport default function websocket_open(url, handler, finisher) {\r\n let ws = null, batch = [], intr = null;\r\n const proxy = {\r\n get readyState() {\r\n return ws ? ws.readyState : 0;\r\n },\r\n send(msg) {\r\n batch.push(msg.slice());\r\n },\r\n close() {\r\n if (intr) {\r\n clearInterval(intr);\r\n intr = null;\r\n }\r\n if (ws) {\r\n ws.close();\r\n } else {\r\n batch = null;\r\n }\r\n },\r\n };\r\n do_websocket_open(url, handler).then(sock => {\r\n ws = sock;\r\n if (batch) {\r\n intr = setInterval(() => {\r\n if (!batch.length) {\r\n return;\r\n }\r\n const size = batch.reduce((sum, msg) => sum + msg.byteLength, 3);\r\n const buffer = new Uint8Array(size);\r\n buffer[0] = 0;\r\n buffer[1] = (batch.length & 0xFF);\r\n buffer[2] = batch.length >> 8;\r\n let pos = 3;\r\n for (let msg of batch) {\r\n buffer.set(msg, pos);\r\n pos += msg.byteLength;\r\n }\r\n ws.send(buffer);\r\n batch.length = 0;\r\n }, 100);\r\n } else {\r\n ws.close();\r\n }\r\n finisher(0);\r\n }, err => {\r\n finisher(err);\r\n });\r\n return proxy;\r\n}\r\n","import DiabloBinary from './Diablo.wasm';\r\nimport DiabloModule from './Diablo.jscc';\r\nimport SpawnBinary from './DiabloSpawn.wasm';\r\nimport SpawnModule from './DiabloSpawn.jscc';\r\nimport axios from 'axios';\r\n\r\nimport websocket_open from './websocket';\r\n\r\nconst DiabloSize = 1466809;\r\nconst SpawnSize = 1337416;\r\n\r\n/* eslint-disable-next-line no-restricted-globals */\r\nconst worker = self;\r\n\r\nlet canvas = null, context = null;\r\nlet imageData = null;\r\nlet files = null;\r\nlet renderBatch = null;\r\nlet drawBelt = null;\r\nlet is_spawn = false;\r\nlet websocket = null;\r\n\r\nfunction onError(err, action=\"error\") {\r\n if (err instanceof Error) {\r\n worker.postMessage({action, error: err.toString(), stack: err.stack});\r\n } else {\r\n worker.postMessage({action, error: err.toString()});\r\n }\r\n}\r\n\r\nconst ChunkSize = 1 << 20;\r\nclass RemoteFile {\r\n constructor(url) {\r\n const request = new XMLHttpRequest();\r\n request.open('HEAD', url, false);\r\n request.send();\r\n if (request.status < 200 || request.status >= 300) {\r\n throw Error('Failed to load remote file');\r\n }\r\n this.byteLength = parseInt(request.getResponseHeader('Content-Length'));\r\n\r\n this.url = url;\r\n\r\n this.buffer = new Uint8Array(this.byteLength);\r\n this.chunks = new Uint8Array(((this.byteLength + ChunkSize - 1) >> 20) | 0);\r\n }\r\n\r\n subarray(start, end) {\r\n let chunk0 = (start / ChunkSize) | 0;\r\n let chunk1 = ((end + ChunkSize - 1) / ChunkSize) | 0;\r\n let missing0 = chunk1, missing1 = chunk0;\r\n for (let i = chunk0; i < chunk1; ++i) {\r\n if (!this.chunks[i]) {\r\n missing0 = Math.min(missing0, i);\r\n missing1 = Math.max(missing1, i);\r\n }\r\n }\r\n if (missing0 <= missing1) {\r\n const request = new XMLHttpRequest();\r\n request.open('GET', this.url, false);\r\n request.setRequestHeader('Range', `bytes=${missing0 * ChunkSize}-${Math.min(missing1 * ChunkSize + ChunkSize - 1, this.byteLength - 1)}`);\r\n request.responseType = 'arraybuffer';\r\n request.send();\r\n if (request.status < 200 || request.status >= 300) {\r\n throw Error('Failed to load remote file');\r\n } else {\r\n const header = request.getResponseHeader('Content-Range');\r\n let m, start = 0;\r\n if (header && (m = header.match(/bytes (\\d+)-(\\d+)\\/(\\d+)/))) {\r\n start = parseInt(m[1]);\r\n }\r\n this.buffer.set(new Uint8Array(request.response), start);\r\n chunk0 = ((start + ChunkSize - 1) / ChunkSize) | 0;\r\n chunk1 = ((start + request.response.byteLength + ChunkSize - 1) / ChunkSize) | 0;\r\n for (let i = chunk0; i < chunk1; ++i) {\r\n this.chunks[i] = 1;\r\n }\r\n }\r\n }\r\n return this.buffer.subarray(start, end);\r\n }\r\n}\r\n\r\nconst DApi = {\r\n exit_error(error) {\r\n throw Error(error);\r\n },\r\n\r\n exit_game() {\r\n worker.postMessage({action: \"exit\"});\r\n },\r\n current_save_id(id) {\r\n worker.postMessage({action: \"current_save\", name: id >= 0 ? (is_spawn ? `spawn${id}.sv` : `single_${id}.sv`) : null});\r\n },\r\n\r\n get_file_size(path) {\r\n const data = files.get(path.toLowerCase());\r\n return data ? data.byteLength : 0;\r\n },\r\n get_file_contents(path, array, offset) {\r\n const data = files.get(path.toLowerCase());\r\n if (data) {\r\n array.set(data.subarray(offset, offset + array.byteLength));\r\n }\r\n },\r\n put_file_contents(path, array) {\r\n path = path.toLowerCase();\r\n // if (!path.match(/^(spawn\\d+\\.sv|single_\\d+\\.sv|config\\.ini)$/i)) {\r\n // alert(`Bad file name: ${path}`);\r\n // }\r\n files.set(path, array);\r\n worker.postMessage({action: \"fs\", func: \"update\", params: [path, array]});\r\n },\r\n remove_file(path) {\r\n path = path.toLowerCase();\r\n files.delete(path);\r\n worker.postMessage({action: \"fs\", func: \"delete\", params: [path]});\r\n },\r\n\r\n set_cursor(x, y) {\r\n worker.postMessage({action: \"cursor\", x, y});\r\n },\r\n open_keyboard(...args) {\r\n worker.postMessage({action: \"keyboard\", rect: [...args]});\r\n },\r\n close_keyboard() {\r\n worker.postMessage({action: \"keyboard\", rect: null});\r\n },\r\n\r\n use_websocket(flag) {\r\n if (flag) {\r\n if (!websocket || websocket.readyState !== 1) {\r\n const sock = websocket = websocket_open('wss://diablo.rivsoft.net/websocket', data => {\r\n if (websocket === sock) {\r\n try_api(() => {\r\n const ptr = wasm._DApi_AllocPacket(data.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(data), ptr);\r\n });\r\n }\r\n }, code => {\r\n if (typeof code !== \"number\") {\r\n throw code;\r\n } else {\r\n call_api(\"SNet_WebsocketStatus\", code);\r\n }\r\n });\r\n } else {\r\n call_api(\"SNet_WebsocketStatus\", 0);\r\n }\r\n } else {\r\n if (websocket) {\r\n websocket.close();\r\n }\r\n websocket = null;\r\n }\r\n },\r\n websocket_closed() {\r\n return websocket ? websocket.readyState !== 1 : false;\r\n },\r\n};\r\n/*\r\nlet frameTime = 0, lastTime = 0;\r\nfunction getFPS() {\r\n const time = performance.now();\r\n if (!lastTime) {\r\n lastTime = time;\r\n }\r\n frameTime = 0.9 * frameTime + 0.1 * (time - lastTime);\r\n lastTime = time;\r\n return frameTime ? 1000.0 / frameTime : 0.0;\r\n}\r\n*/\r\nconst DApi_renderLegacy = {\r\n draw_begin() {\r\n renderBatch = {\r\n images: [],\r\n text: [],\r\n clip: null,\r\n belt: drawBelt,\r\n };\r\n drawBelt = null;\r\n },\r\n draw_blit(x, y, w, h, data) {\r\n renderBatch.images.push({x, y, w, h, data: data.slice()});\r\n },\r\n draw_clip_text(x0, y0, x1, y1) {\r\n renderBatch.clip = {x0, y0, x1, y1};\r\n },\r\n draw_text(x, y, text, color) {\r\n renderBatch.text.push({x, y, text, color});\r\n },\r\n draw_end() {\r\n //DApi.draw_text(10, 10, `FPS: ${getFPS().toFixed(1)} (Transfer)`, 0xFFCC00);\r\n const transfer = renderBatch.images.map(({data}) => data.buffer);\r\n if (renderBatch.belt) {\r\n transfer.push(renderBatch.belt.buffer);\r\n }\r\n worker.postMessage({action: \"render\", batch: renderBatch}, transfer);\r\n renderBatch = null;\r\n },\r\n draw_belt(items) {\r\n drawBelt = items.slice();\r\n },\r\n};\r\n\r\nconst DApi_renderOffscreen = {\r\n draw_begin() {\r\n context.save();\r\n context.font = 'bold 13px Times New Roman';\r\n },\r\n draw_blit(x, y, w, h, data) {\r\n imageData.data.set(data);\r\n context.putImageData(imageData, x, y);\r\n },\r\n draw_clip_text(x0, y0, x1, y1) {\r\n context.beginPath();\r\n context.rect(x0, y0, x1 - x0, y1 - y0);\r\n context.clip();\r\n },\r\n draw_text(x, y, text, color) {\r\n const r = ((color >> 16) & 0xFF);\r\n const g = ((color >> 8) & 0xFF);\r\n const b = (color & 0xFF);\r\n context.fillStyle = `rgb(${r}, ${g}, ${b})`;\r\n context.fillText(text, x, y + 22);\r\n },\r\n draw_end() {\r\n //DApi.draw_text(10, 10, `FPS: ${getFPS().toFixed(1)} (Offscreen)`, 0xFFCC00);\r\n context.restore();\r\n const bitmap = canvas.transferToImageBitmap();\r\n const transfer = [bitmap];\r\n if (drawBelt) {\r\n transfer.push(drawBelt.buffer);\r\n }\r\n worker.postMessage({action: \"render\", batch: {bitmap, belt: drawBelt}}, transfer);\r\n drawBelt = null;\r\n },\r\n draw_belt(items) {\r\n drawBelt = items.slice();\r\n },\r\n};\r\n\r\nlet audioBatch = null, audioTransfer = null;\r\nlet maxSoundId = 0, maxBatchId = 0;\r\n[\"create_sound_raw\", \"create_sound\", \"duplicate_sound\"].forEach(func => {\r\n DApi[func] = function(...params) {\r\n if (audioBatch) {\r\n maxBatchId = params[0] + 1;\r\n audioBatch.push({func, params});\r\n if (func !== \"duplicate_sound\") {\r\n audioTransfer.push(params[1].buffer);\r\n }\r\n } else {\r\n maxSoundId = params[0] + 1;\r\n const transfer = [];\r\n if (func !== \"duplicate_sound\") {\r\n transfer.push(params[1].buffer);\r\n }\r\n worker.postMessage({action: \"audio\", func, params}, transfer);\r\n }\r\n };\r\n});\r\n[\"play_sound\", \"set_volume\", \"stop_sound\", \"delete_sound\"].forEach(func => {\r\n DApi[func] = function(...params) {\r\n if (audioBatch && params[0] >= maxSoundId) {\r\n audioBatch.push({func, params});\r\n } else {\r\n worker.postMessage({action: \"audio\", func, params});\r\n }\r\n }\r\n});\r\n\r\nlet packetBatch = null;\r\nDApi.websocket_send = function(data) {\r\n if (websocket) {\r\n websocket.send(data);\r\n } else if (packetBatch) {\r\n packetBatch.push(data.slice().buffer);\r\n } else {\r\n worker.postMessage({action: \"packet\", buffer: data});\r\n }\r\n};\r\n\r\nworker.DApi = DApi;\r\n\r\nlet wasm = null;\r\n\r\nfunction try_api(func) {\r\n try {\r\n func();\r\n } catch (e) {\r\n onError(e);\r\n }\r\n}\r\n\r\nfunction call_api(func, ...params) {\r\n try_api(() => {\r\n const nested = (audioBatch != null);\r\n if (!nested) {\r\n audioBatch = [];\r\n audioTransfer = [];\r\n packetBatch = [];\r\n }\r\n if (func !== \"text\") {\r\n wasm[\"_\" + func](...params);\r\n } else {\r\n const ptr = wasm._DApi_SyncTextPtr();\r\n const text = params[0];\r\n const length = Math.min(text.length, 255);\r\n const heap = wasm.HEAPU8;\r\n for (let i = 0; i < length; ++i) {\r\n heap[ptr + i] = text.charCodeAt(i);\r\n }\r\n heap[ptr + length] = 0;\r\n wasm._DApi_SyncText(params[1]);\r\n }\r\n if (!nested) {\r\n if (audioBatch.length) {\r\n maxSoundId = maxBatchId;\r\n worker.postMessage({action: \"audioBatch\", batch: audioBatch}, audioTransfer);\r\n }\r\n if (packetBatch.length) {\r\n worker.postMessage({action: \"packetBatch\", batch: packetBatch}, packetBatch);\r\n }\r\n audioBatch = null;\r\n audioTransfer = null;\r\n packetBatch = null;\r\n }\r\n });\r\n}\r\n\r\nfunction progress(text, loaded, total) {\r\n worker.postMessage({action: \"progress\", text, loaded, total});\r\n}\r\n\r\nconst readFile = (file, progress) => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n if (progress) {\r\n progress({loaded: file.size});\r\n }\r\n resolve(reader.result);\r\n };\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n if (progress) {\r\n reader.addEventListener(\"progress\", progress);\r\n }\r\n reader.readAsArrayBuffer(file);\r\n});\r\n\r\nasync function initWasm(spawn, progress) {\r\n const binary = await axios.request({\r\n url: spawn ? SpawnBinary : DiabloBinary,\r\n responseType: 'arraybuffer',\r\n onDownloadProgress: progress,\r\n });\r\n const result = await (spawn ? SpawnModule : DiabloModule)({wasmBinary: binary.data}).ready;\r\n progress({loaded: 2000000});\r\n return result;\r\n}\r\n\r\nasync function init_game(mpq, spawn, offscreen) {\r\n is_spawn = spawn;\r\n if (offscreen) {\r\n canvas = new OffscreenCanvas(640, 480);\r\n context = canvas.getContext(\"2d\");\r\n imageData = context.createImageData(640, 480);\r\n Object.assign(DApi, DApi_renderOffscreen);\r\n } else {\r\n Object.assign(DApi, DApi_renderLegacy);\r\n }\r\n\r\n if (!mpq) {\r\n const name = (spawn ? 'spawn.mpq' : 'diabdat.mpq');\r\n if (!files.has(name)) {\r\n // This should never happen, but we do support remote loading\r\n files.set(name, new RemoteFile(`${process.env.PUBLIC_URL}/${name}`));\r\n }\r\n }\r\n\r\n progress(\"Loading...\");\r\n let mpqLoaded = 0, mpqTotal = (mpq ? mpq.size : 0), wasmLoaded = 0, wasmTotal = (spawn ? SpawnSize : DiabloSize);\r\n const wasmWeight = 5;\r\n function updateProgress() {\r\n progress(\"Loading...\", mpqLoaded + wasmLoaded * wasmWeight, mpqTotal + wasmTotal * wasmWeight);\r\n }\r\n const loadWasm = initWasm(spawn, e => {\r\n wasmLoaded = Math.min(e.loaded, wasmTotal);\r\n updateProgress();\r\n });\r\n let loadMpq = mpq ? readFile(mpq, e => {\r\n mpqLoaded = e.loaded;\r\n updateProgress();\r\n }) : Promise.resolve(null);\r\n [wasm, mpq] = await Promise.all([loadWasm, loadMpq]);\r\n\r\n if (mpq) {\r\n files.set(spawn ? 'spawn.mpq' : 'diabdat.mpq', new Uint8Array(mpq));\r\n }\r\n\r\n progress(\"Initializing...\");\r\n\r\n const vers = process.env.VERSION.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\r\n\r\n wasm._SNet_InitWebsocket();\r\n wasm._DApi_Init(Math.floor(performance.now()), offscreen ? 1 : 0, parseInt(vers[1]), parseInt(vers[2]), parseInt(vers[3]));\r\n\r\n setInterval(() => {\r\n call_api(\"DApi_Render\", Math.floor(performance.now())); \r\n }, 50);\r\n}\r\n\r\nworker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"init\":\r\n files = data.files;\r\n init_game(data.mpq, data.spawn, data.offscreen).then(\r\n () => worker.postMessage({action: \"loaded\"}),\r\n e => onError(e, \"failed\"));\r\n break;\r\n case \"event\":\r\n call_api(data.func, ...data.params);\r\n break;\r\n case \"packet\":\r\n try_api(() => {\r\n const ptr = wasm._DApi_AllocPacket(data.buffer.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(data.buffer), ptr);\r\n });\r\n break;\r\n case \"packetBatch\":\r\n try_api(() => {\r\n for (let packet of data.batch) {\r\n const ptr = wasm._DApi_AllocPacket(packet.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(packet), ptr);\r\n }\r\n });\r\n break;\r\n default:\r\n }\r\n});\r\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/b6959098d798174bd69f.worker.js b/d2271be9a67638d3642f.worker.js similarity index 98% rename from b6959098d798174bd69f.worker.js rename to d2271be9a67638d3642f.worker.js index 0d7f6e3..e8ec07c 100644 --- a/b6959098d798174bd69f.worker.js +++ b/d2271be9a67638d3642f.worker.js @@ -1,2 +1,2 @@ -!function(n){var t={};function e(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return n[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}e.m=n,e.c=t,e.d=function(n,t,r){e.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:r})},e.r=function(n){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.t=function(n,t){if(1&t&&(n=e(n)),8&t)return n;if(4&t&&"object"===typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var i in n)e.d(r,i,function(t){return n[t]}.bind(null,i));return r},e.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(t,"a",t),t},e.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},e.p="/diabloweb/",e(e.s=35)}([function(n,t,e){"use strict";var r=e(5),i=e(20),o=Object.prototype.toString;function a(n){return"[object Array]"===o.call(n)}function u(n){return null!==n&&"object"===typeof n}function s(n){return"[object Function]"===o.call(n)}function c(n,t){if(null!==n&&"undefined"!==typeof n)if("object"!==typeof n&&(n=[n]),a(n))for(var e=0,r=n.length;e1)for(var e=1;e=0;r--){var i=n[r];"."===i?n.splice(r,1):".."===i?(n.splice(r,1),e++):e&&(n.splice(r,1),e--)}if(t)for(;e--;e)n.unshift("..");return n}function r(n,t){if(n.filter)return n.filter(t);for(var e=[],r=0;r=-1&&!i;o--){var a=o>=0?arguments[o]:n.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,i="/"===a.charAt(0))}return(i?"/":"")+(t=e(r(t.split("/"),function(n){return!!n}),!i).join("/"))||"."},t.normalize=function(n){var o=t.isAbsolute(n),a="/"===i(n,-1);return(n=e(r(n.split("/"),function(n){return!!n}),!o).join("/"))||o||(n="."),n&&a&&(n+="/"),(o?"/":"")+n},t.isAbsolute=function(n){return"/"===n.charAt(0)},t.join=function(){var n=Array.prototype.slice.call(arguments,0);return t.normalize(r(n,function(n,t){if("string"!==typeof n)throw new TypeError("Arguments to path.join must be strings");return n}).join("/"))},t.relative=function(n,e){function r(n){for(var t=0;t=0&&""===n[e];e--);return t>e?[]:n.slice(t,e-t+1)}n=t.resolve(n).substr(1),e=t.resolve(e).substr(1);for(var i=r(n.split("/")),o=r(e.split("/")),a=Math.min(i.length,o.length),u=a,s=0;s=1;--o)if(47===(t=n.charCodeAt(o))){if(!i){r=o;break}}else i=!1;return-1===r?e?"/":".":e&&1===r?"/":n.slice(0,r)},t.basename=function(n,t){var e=function(n){"string"!==typeof n&&(n+="");var t,e=0,r=-1,i=!0;for(t=n.length-1;t>=0;--t)if(47===n.charCodeAt(t)){if(!i){e=t+1;break}}else-1===r&&(i=!1,r=t+1);return-1===r?"":n.slice(e,r)}(n);return t&&e.substr(-1*t.length)===t&&(e=e.substr(0,e.length-t.length)),e},t.extname=function(n){"string"!==typeof n&&(n+="");for(var t=-1,e=0,r=-1,i=!0,o=0,a=n.length-1;a>=0;--a){var u=n.charCodeAt(a);if(47!==u)-1===r&&(i=!1,r=a+1),46===u?-1===t?t=a:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){e=a+1;break}}return-1===t||-1===r||0===o||1===o&&t===r-1&&t===e+1?"":n.slice(t,r)};var i="b"==="ab".substr(-1)?function(n,t,e){return n.substr(t,e)}:function(n,t,e){return t<0&&(t=n.length+t),n.substr(t,e)}}).call(this,e(2))},function(n,t,e){"use strict";n.exports=function(n,t){return function(){for(var e=new Array(arguments.length),r=0;r=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],function(n){u.headers[n]={}}),r.forEach(["post","put","patch"],function(n){u.headers[n]=r.merge(o)}),n.exports=u}).call(this,e(2))},function(n,t,e){"use strict";var r=e(0),i=e(26),o=e(6),a=e(28),u=e(29),s=e(10);n.exports=function(n){return new Promise(function(t,c){var l=n.data,_=n.headers;r.isFormData(l)&&delete _["Content-Type"];var f=new XMLHttpRequest;if(n.auth){var p=n.auth.username||"",d=n.auth.password||"";_.Authorization="Basic "+btoa(p+":"+d)}if(f.open(n.method.toUpperCase(),o(n.url,n.params,n.paramsSerializer),!0),f.timeout=n.timeout,f.onreadystatechange=function(){if(f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))){var e="getAllResponseHeaders"in f?a(f.getAllResponseHeaders()):null,r={data:n.responseType&&"text"!==n.responseType?f.response:f.responseText,status:f.status,statusText:f.statusText,headers:e,config:n,request:f};i(t,c,r),f=null}},f.onabort=function(){f&&(c(s("Request aborted",n,"ECONNABORTED",f)),f=null)},f.onerror=function(){c(s("Network Error",n,null,f)),f=null},f.ontimeout=function(){c(s("timeout of "+n.timeout+"ms exceeded",n,"ECONNABORTED",f)),f=null},r.isStandardBrowserEnv()){var m=e(30),y=(n.withCredentials||u(n.url))&&n.xsrfCookieName?m.read(n.xsrfCookieName):void 0;y&&(_[n.xsrfHeaderName]=y)}if("setRequestHeader"in f&&r.forEach(_,function(n,t){"undefined"===typeof l&&"content-type"===t.toLowerCase()?delete _[t]:f.setRequestHeader(t,n)}),n.withCredentials&&(f.withCredentials=!0),n.responseType)try{f.responseType=n.responseType}catch(h){if("json"!==n.responseType)throw h}"function"===typeof n.onDownloadProgress&&f.addEventListener("progress",n.onDownloadProgress),"function"===typeof n.onUploadProgress&&f.upload&&f.upload.addEventListener("progress",n.onUploadProgress),n.cancelToken&&n.cancelToken.promise.then(function(n){f&&(f.abort(),c(n),f=null)}),void 0===l&&(l=null),f.send(l)})}},function(n,t,e){"use strict";var r=e(27);n.exports=function(n,t,e,i,o){var a=new Error(n);return r(a,t,e,i,o)}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t){t=t||{};var e={};return r.forEach(["url","method","params","data"],function(n){"undefined"!==typeof t[n]&&(e[n]=t[n])}),r.forEach(["headers","auth","proxy"],function(i){r.isObject(t[i])?e[i]=r.deepMerge(n[i],t[i]):"undefined"!==typeof t[i]?e[i]=t[i]:r.isObject(n[i])?e[i]=r.deepMerge(n[i]):"undefined"!==typeof n[i]&&(e[i]=n[i])}),r.forEach(["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"],function(r){"undefined"!==typeof t[r]?e[r]=t[r]:"undefined"!==typeof n[r]&&(e[r]=n[r])}),e}},function(n,t,e){"use strict";function r(n){this.message=n}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,n.exports=r},function(n,t,e){n.exports=e.p+"static/media/Diablo.570bd59a.wasm"},function(n,t,e){(function(t,r){var i=function(){var n="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;return function(i){var o,a="undefined"!==typeof(i=i||{})?i:{},u={};for(o in a)a.hasOwnProperty(o)&&(u[o]=a[o]);a.arguments=[],a.thisProgram="./this.program",a.quit=function(n,t){throw t},a.preRun=[],a.postRun=[];var s,c,l=!1,_=!1;l="object"===typeof window,_="function"===typeof importScripts,s="object"===typeof t&&"object"===typeof t.versions&&"string"===typeof t.versions.node&&!l&&!_,c=!l&&!s&&!_;var f,p,d,m,y="";s?(y=r+"/",f=function(n,t){var r;return d||(d=e(3)),m||(m=e(4)),n=m.normalize(n),r=d.readFileSync(n),t?r:r.toString()},p=function(n){var t=f(n,!0);return t.buffer||(t=new Uint8Array(t)),j(t.buffer),t},t.argv.length>1&&(a.thisProgram=t.argv[1].replace(/\\/g,"/")),a.arguments=t.argv.slice(2),t.on("uncaughtException",function(n){if(!(n instanceof Un))throw n}),t.on("unhandledRejection",Bn),a.quit=function(n){t.exit(n)},a.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(f=function(n){return read(n)}),p=function(n){var t;return"function"===typeof readbuffer?new Uint8Array(readbuffer(n)):(j("object"===typeof(t=read(n,"binary"))),t)},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(n){quit(n)})):(l||_)&&(_?y=self.location.href:document.currentScript&&(y=document.currentScript.src),n&&(y=n),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",f=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.send(null),t.responseText},_&&(p=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(n,t,e){var r=new XMLHttpRequest;r.open("GET",n,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):e()},r.onerror=e,r.send(null)});var h=a.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),v=a.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||h);for(o in u)u.hasOwnProperty(o)&&(a[o]=u[o]);u=void 0;var g={"f64-rem":function(n,t){return n%t},debugger:function(){}};new Array(0);var b,w=0,x=function(n){w=n};"object"!==typeof WebAssembly&&v("no native wasm support detected");var A=!1;function j(n,t){n||Bn("Assertion failed: "+t)}var C="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(n,t,e){for(var r=t+e,i=t;n[i]&&!(i>=r);)++i;if(i-t>16&&n.subarray&&C)return C.decode(n.subarray(t,i));for(var o="";t>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|u)}else o+=String.fromCharCode(a)}return o}function k(n,t){return n?S(T,n,t):""}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var E,R,T,D,M;function L(n,t){return n%t>0&&(n+=t-n%t),n}function O(){a.HEAP8=R=new Int8Array(E),a.HEAP16=new Int16Array(E),a.HEAP32=D=new Int32Array(E),a.HEAPU8=T=new Uint8Array(E),a.HEAPU16=new Uint16Array(E),a.HEAPU32=new Uint32Array(E),a.HEAPF32=M=new Float32Array(E),a.HEAPF64=new Float64Array(E)}var P=1875712,I=a.TOTAL_MEMORY||134217728;function N(n){for(;n.length>0;){var t=n.shift();if("function"!=typeof t){var e=t.func;"number"===typeof e?void 0===t.arg?a.dynCall_v(e):a.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}I<5242880&&v("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+I+"! (TOTAL_STACK=5242880)"),(b=a.wasmMemory?a.wasmMemory:new WebAssembly.Memory({initial:I/65536}))&&(E=b.buffer),I=E.byteLength,O(),D[P>>2]=7118624;var F=[],U=[],q=[],B=[];function W(n){B.unshift(n)}Math.abs,Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt,Math.ceil,Math.floor,Math.pow,Math.imul,Math.fround,Math.round,Math.min,Math.max,Math.clz32,Math.trunc;var H=0,z=null,G=null;a.preloadedImages={},a.preloadedAudios={};var X="data:application/octet-stream;base64,";function K(n){return String.prototype.startsWith?n.startsWith(X):0===n.indexOf(X)}var Y,Z="Diablo.wasm";function J(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(p)return p(Z);throw"both async and sync fetching of the wasm failed"}catch(v){Bn(v)}}function V(n){var t={env:n,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:g};function e(n,t){var e=n.exports;a.asm=e,function(n){if(H--,a.monitorRunDependencies&&a.monitorRunDependencies(H),0==H&&(null!==z&&(clearInterval(z),z=null),G)){var t=G;G=null,t()}}()}function r(n){e(n.instance)}function i(n){return(a.wasmBinary||!l&&!_||"function"!==typeof fetch?new Promise(function(n,t){n(J())}):fetch(Z,{credentials:"same-origin"}).then(function(n){if(!n.ok)throw"failed to load wasm binary file at '"+Z+"'";return n.arrayBuffer()}).catch(function(){return J()})).then(function(n){return WebAssembly.instantiate(n,t)}).then(n,function(n){v("failed to asynchronously prepare wasm: "+n),Bn(n)})}if(H++,a.monitorRunDependencies&&a.monitorRunDependencies(H),a.instantiateWasm)try{return a.instantiateWasm(t,e)}catch(o){return v("Module.instantiateWasm callback failed with error: "+o),!1}return function(){if(a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||K(Z)||"function"!==typeof fetch)return i(r);fetch(Z,{credentials:"same-origin"}).then(function(n){return WebAssembly.instantiateStreaming(n,t).then(r,function(n){v("wasm streaming compile failed: "+n),v("falling back to ArrayBuffer instantiation"),i(r)})})}(),{}}K(Z)||(Y=Z,Z=a.locateFile?a.locateFile(Y,y):y+Y),a.asm=function(n,t,e){return t.memory=b,t.table=new WebAssembly.Table({initial:1116,maximum:1116,element:"anyfunc"}),t.__memory_base=1024,t.__table_base=0,V(t)};var $=[function(n){self.DApi.current_save_id(n)}];U.push({func:function(){bn()}});var Q=1875728;var nn={},tn=[];function en(n){n&&nn[n].refcount++}function rn(n){if(!n||nn[n])return n;for(var t in nn)for(var e=+t,r=nn[e].adjusted,i=r.length,o=0;o>2],t.adjusted.push(n),0|(x(r[i]),n);return n=D[n>>2],0|(x(e),n)}a.___cxa_find_matching_catch=sn;var cn={buffers:[null,[],[]],printChar:function(n,t){var e=cn.buffers[n];0===t||10===t?((1===n?h:v)(S(e,0)),e.length=0):e.push(t)},varargs:0,get:function(n){return cn.varargs+=4,D[cn.varargs-4>>2]},getStr:function(){return k(cn.get())},get64:function(){var n=cn.get();cn.get();return n},getZero:function(){cn.get()}};function ln(){return R.length}function _n(n){n=L(n,65536);var t=E.byteLength;try{return-1!==b.grow((n-t)/65536)&&(E=b.buffer,!0)}catch(e){return!1}}var fn={abort:Bn,setTempRet0:x,getTempRet0:function(){return w},invoke_i:function(n){var t=xn();try{return An(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_ii:function(n,t){var e=xn();try{return jn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_iii:function(n,t,e){var r=xn();try{return Cn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_iiii:function(n,t,e,r){var i=xn();try{return Sn(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_iiiii:function(n,t,e,r,i){var o=xn();try{return kn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_iiiiii:function(n,t,e,r,i,o){var a=xn();try{return En(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_ji:function(n,t){var e=xn();try{return Rn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_v:function(n){var t=xn();try{Tn(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_vi:function(n,t){var e=xn();try{Dn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_vii:function(n,t,e){var r=xn();try{Mn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_viii:function(n,t,e,r){var i=xn();try{Ln(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_viiii:function(n,t,e,r,i){var o=xn();try{On(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viiiii:function(n,t,e,r,i,o){var a=xn();try{Pn(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_viiiiiii:function(n,t,e,r,i,o,a,u){var s=xn();try{In(n,t,e,r,i,o,a,u)}catch(c){if(wn(s),c!==c+0&&"longjmp"!==c)throw c;gn(1,0)}},invoke_viij:function(n,t,e,r,i){var o=xn();try{Nn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viji:function(n,t,e,r,i){var o=xn();try{Fn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},___assert_fail:function(n,t,e,r){Bn("Assertion failed: "+k(n)+", at: "+[t?k(t):"unknown filename",e,r?k(r):"unknown function"])},___cxa_allocate_exception:function(n){return vn(n)},___cxa_begin_catch:function(n){var t=nn[n];return t&&!t.caught&&(t.caught=!0,dn.uncaught_exceptions--),t&&(t.rethrown=!1),tn.push(n),en(rn(n)),n},___cxa_end_catch:function(){gn(0);var n=tn.pop();n&&(un(rn(n)),on=0)},___cxa_find_matching_catch:sn,___cxa_find_matching_catch_2:function(n,t){return sn(n,t)},___cxa_find_matching_catch_3:function(n,t,e){return sn(n,t,e)},___cxa_free_exception:an,___cxa_get_exception_ptr:function(n){return n},___cxa_pure_virtual:function(){throw A=!0,"Pure virtual function called!"},___cxa_throw:function(n,t,e){throw nn[n]={ptr:n,adjusted:[n],type:t,destructor:e,refcount:0,caught:!1,rethrown:!1},on=n,"uncaught_exception"in dn?dn.uncaught_exceptions++:dn.uncaught_exceptions=1,n},___cxa_uncaught_exceptions:function(){return dn.uncaught_exceptions},___exception_addRef:en,___exception_deAdjust:rn,___exception_decRef:un,___gxx_personality_v0:function(){},___lock:function(){},___resumeException:function(n){throw on||(on=n),n},___setErrNo:function(n){return a.___errno_location&&(D[a.___errno_location()>>2]=n),n},___syscall140:function(n,t){cn.varargs=t;try{return cn.getStreamFromFD(),cn.get(),cn.get(),cn.get(),cn.get(),0}catch(e){return"undefined"!==typeof FS&&e instanceof FS.ErrnoError||Bn(e),-e.errno}},___syscall146:function(n,t){cn.varargs=t;try{for(var e=cn.get(),r=cn.get(),i=cn.get(),o=0,a=0;a>2],s=D[r+(8*a+4)>>2],c=0;c2147418112)return!1;for(var e=Math.max(t,16777216);e>2]=t),t},_trace_pop:function(){self.WASM_TRACE&&self.WASM_TRACE.pop()},_trace_push:function(n){var t=T.indexOf(0,n),e=String.fromCharCode.apply(null,T.subarray(n,t));console.log(e),self.WASM_TRACE=self.WASM_TRACE||[],self.WASM_TRACE.push(e)},abortOnCannotGrowMemory:function(n){Bn("OOM")},emscripten_realloc_buffer:_n,flush_NO_FILESYSTEM:function(){var n=a._fflush;n&&n(0);var t=cn.buffers;t[1].length&&cn.printChar(1,10),t[2].length&&cn.printChar(2,10)},tempDoublePtr:Q,DYNAMICTOP_PTR:P},pn=a.asm({},fn,E);a.asm=pn;a._DApi_AllocPacket=function(){return a.asm._DApi_AllocPacket.apply(null,arguments)},a._DApi_Char=function(){return a.asm._DApi_Char.apply(null,arguments)},a._DApi_Init=function(){return a.asm._DApi_Init.apply(null,arguments)},a._DApi_Key=function(){return a.asm._DApi_Key.apply(null,arguments)},a._DApi_Mouse=function(){return a.asm._DApi_Mouse.apply(null,arguments)},a._DApi_Render=function(){return a.asm._DApi_Render.apply(null,arguments)},a._DApi_SyncText=function(){return a.asm._DApi_SyncText.apply(null,arguments)},a._DApi_SyncTextPtr=function(){return a.asm._DApi_SyncTextPtr.apply(null,arguments)},a._SNet_InitWebsocket=function(){return a.asm._SNet_InitWebsocket.apply(null,arguments)},a._SNet_WebsocketStatus=function(){return a.asm._SNet_WebsocketStatus.apply(null,arguments)};var dn=a.__ZSt18uncaught_exceptionv=function(){return a.asm.__ZSt18uncaught_exceptionv.apply(null,arguments)},mn=a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)},yn=a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)},hn=(a.___em_js___api_close_keyboard=function(){return a.asm.___em_js___api_close_keyboard.apply(null,arguments)},a.___em_js___api_open_keyboard=function(){return a.asm.___em_js___api_open_keyboard.apply(null,arguments)},a.___em_js__api_create_sound=function(){return a.asm.___em_js__api_create_sound.apply(null,arguments)},a.___em_js__api_create_sound_float=function(){return a.asm.___em_js__api_create_sound_float.apply(null,arguments)},a.___em_js__api_delete_sound=function(){return a.asm.___em_js__api_delete_sound.apply(null,arguments)},a.___em_js__api_draw_begin=function(){return a.asm.___em_js__api_draw_begin.apply(null,arguments)},a.___em_js__api_draw_belt=function(){return a.asm.___em_js__api_draw_belt.apply(null,arguments)},a.___em_js__api_draw_blit=function(){return a.asm.___em_js__api_draw_blit.apply(null,arguments)},a.___em_js__api_draw_clip_text=function(){return a.asm.___em_js__api_draw_clip_text.apply(null,arguments)},a.___em_js__api_draw_end=function(){return a.asm.___em_js__api_draw_end.apply(null,arguments)},a.___em_js__api_draw_text=function(){return a.asm.___em_js__api_draw_text.apply(null,arguments)},a.___em_js__api_duplicate_sound=function(){return a.asm.___em_js__api_duplicate_sound.apply(null,arguments)},a.___em_js__api_exit_game=function(){return a.asm.___em_js__api_exit_game.apply(null,arguments)},a.___em_js__api_play_sound=function(){return a.asm.___em_js__api_play_sound.apply(null,arguments)},a.___em_js__api_set_cursor=function(){return a.asm.___em_js__api_set_cursor.apply(null,arguments)},a.___em_js__api_set_volume=function(){return a.asm.___em_js__api_set_volume.apply(null,arguments)},a.___em_js__api_stop_sound=function(){return a.asm.___em_js__api_stop_sound.apply(null,arguments)},a.___em_js__api_use_websocket=function(){return a.asm.___em_js__api_use_websocket.apply(null,arguments)},a.___em_js__api_websocket_closed=function(){return a.asm.___em_js__api_websocket_closed.apply(null,arguments)},a.___em_js__api_websocket_send=function(){return a.asm.___em_js__api_websocket_send.apply(null,arguments)},a.___em_js__exit_error=function(){return a.asm.___em_js__exit_error.apply(null,arguments)},a.___em_js__get_file_contents=function(){return a.asm.___em_js__get_file_contents.apply(null,arguments)},a.___em_js__get_file_size=function(){return a.asm.___em_js__get_file_size.apply(null,arguments)},a.___em_js__put_file_contents=function(){return a.asm.___em_js__put_file_contents.apply(null,arguments)},a.___em_js__remove_file=function(){return a.asm.___em_js__remove_file.apply(null,arguments)},a.___em_js__show_alert=function(){return a.asm.___em_js__show_alert.apply(null,arguments)},a.___em_js__trace_pop=function(){return a.asm.___em_js__trace_pop.apply(null,arguments)},a.___em_js__trace_push=function(){return a.asm.___em_js__trace_push.apply(null,arguments)},a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)},a._free=function(){return a.asm._free.apply(null,arguments)}),vn=(a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)},a._malloc=function(){return a.asm._malloc.apply(null,arguments)}),gn=(a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)},a._memmove=function(){return a.asm._memmove.apply(null,arguments)},a._memset=function(){return a.asm._memset.apply(null,arguments)},a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)},a._setThrew=function(){return a.asm._setThrew.apply(null,arguments)}),bn=(a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)},a.globalCtors=function(){return a.asm.globalCtors.apply(null,arguments)}),wn=(a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)},a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)}),xn=a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)},An=a.dynCall_i=function(){return a.asm.dynCall_i.apply(null,arguments)},jn=a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)},Cn=(a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)},a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)}),Sn=a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)},kn=a.dynCall_iiiii=function(){return a.asm.dynCall_iiiii.apply(null,arguments)},En=a.dynCall_iiiiii=function(){return a.asm.dynCall_iiiiii.apply(null,arguments)},Rn=a.dynCall_ji=function(){return a.asm.dynCall_ji.apply(null,arguments)},Tn=(a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)},a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)}),Dn=a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)},Mn=a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)},Ln=a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)},On=a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)},Pn=a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)},In=(a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)},a.dynCall_viiiiiii=function(){return a.asm.dynCall_viiiiiii.apply(null,arguments)}),Nn=(a.dynCall_viiiiiiiii=function(){return a.asm.dynCall_viiiiiiiii.apply(null,arguments)},a.dynCall_viiiiiiiiii=function(){return a.asm.dynCall_viiiiiiiiii.apply(null,arguments)},a.dynCall_viij=function(){return a.asm.dynCall_viij.apply(null,arguments)}),Fn=a.dynCall_viji=function(){return a.asm.dynCall_viji.apply(null,arguments)};function Un(n){this.name="ExitStatus",this.message="Program terminated with exit("+n+")",this.status=n}a.asm=pn,a.then=function(n){if(a.calledRun)n(a);else{var t=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){t&&t(),n(a)}}return a},Un.prototype=new Error,Un.prototype.constructor=Un;function qn(n){function t(){a.calledRun||(a.calledRun=!0,A||(!0,N(U),N(q),a.onRuntimeInitialized&&a.onRuntimeInitialized(),function(){if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)W(a.postRun.shift());N(B)}()))}n=n||a.arguments,H>0||(!function(){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)n=a.preRun.shift(),F.unshift(n);var n;N(F)}(),H>0||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),t()},1)):t()))}G=function n(){a.calledRun||qn(),a.calledRun||(G=n)},a.run=qn;function Bn(n){throw a.onAbort&&a.onAbort(n),h(n+=""),v(n),A=!0,1,"abort("+n+"). Build with -s ASSERTIONS=1 for more info."}if(a.abort=Bn,a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();return a.noExitRuntime=!0,qn(),a.ready=new Promise(function(n,t){delete a.then,a.onAbort=function(n){t(n)},W(function(){n(a)})}),i}}();n.exports=i}).call(this,e(2),"/")},function(n,t,e){n.exports=e.p+"static/media/DiabloSpawn.9c2373b2.wasm"},function(n,t,e){(function(t,r){var i=function(){var n="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;return function(i){var o,a="undefined"!==typeof(i=i||{})?i:{},u={};for(o in a)a.hasOwnProperty(o)&&(u[o]=a[o]);a.arguments=[],a.thisProgram="./this.program",a.quit=function(n,t){throw t},a.preRun=[],a.postRun=[];var s,c,l=!1,_=!1;l="object"===typeof window,_="function"===typeof importScripts,s="object"===typeof t&&"object"===typeof t.versions&&"string"===typeof t.versions.node&&!l&&!_,c=!l&&!s&&!_;var f,p,d,m,y="";s?(y=r+"/",f=function(n,t){var r;return d||(d=e(3)),m||(m=e(4)),n=m.normalize(n),r=d.readFileSync(n),t?r:r.toString()},p=function(n){var t=f(n,!0);return t.buffer||(t=new Uint8Array(t)),j(t.buffer),t},t.argv.length>1&&(a.thisProgram=t.argv[1].replace(/\\/g,"/")),a.arguments=t.argv.slice(2),t.on("uncaughtException",function(n){if(!(n instanceof Un))throw n}),t.on("unhandledRejection",Bn),a.quit=function(n){t.exit(n)},a.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(f=function(n){return read(n)}),p=function(n){var t;return"function"===typeof readbuffer?new Uint8Array(readbuffer(n)):(j("object"===typeof(t=read(n,"binary"))),t)},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(n){quit(n)})):(l||_)&&(_?y=self.location.href:document.currentScript&&(y=document.currentScript.src),n&&(y=n),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",f=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.send(null),t.responseText},_&&(p=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(n,t,e){var r=new XMLHttpRequest;r.open("GET",n,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):e()},r.onerror=e,r.send(null)});var h=a.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),v=a.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||h);for(o in u)u.hasOwnProperty(o)&&(a[o]=u[o]);u=void 0;var g={"f64-rem":function(n,t){return n%t},debugger:function(){}};new Array(0);var b,w=0,x=function(n){w=n};"object"!==typeof WebAssembly&&v("no native wasm support detected");var A=!1;function j(n,t){n||Bn("Assertion failed: "+t)}var C="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(n,t,e){for(var r=t+e,i=t;n[i]&&!(i>=r);)++i;if(i-t>16&&n.subarray&&C)return C.decode(n.subarray(t,i));for(var o="";t>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|u)}else o+=String.fromCharCode(a)}return o}function k(n,t){return n?S(T,n,t):""}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var E,R,T,D,M;function L(n,t){return n%t>0&&(n+=t-n%t),n}function O(){a.HEAP8=R=new Int8Array(E),a.HEAP16=new Int16Array(E),a.HEAP32=D=new Int32Array(E),a.HEAPU8=T=new Uint8Array(E),a.HEAPU16=new Uint16Array(E),a.HEAPU32=new Uint32Array(E),a.HEAPF32=M=new Float32Array(E),a.HEAPF64=new Float64Array(E)}var P=1850896,I=a.TOTAL_MEMORY||134217728;function N(n){for(;n.length>0;){var t=n.shift();if("function"!=typeof t){var e=t.func;"number"===typeof e?void 0===t.arg?a.dynCall_v(e):a.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}I<5242880&&v("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+I+"! (TOTAL_STACK=5242880)"),(b=a.wasmMemory?a.wasmMemory:new WebAssembly.Memory({initial:I/65536}))&&(E=b.buffer),I=E.byteLength,O(),D[P>>2]=7093808;var F=[],U=[],q=[],B=[];function W(n){B.unshift(n)}Math.abs,Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt,Math.ceil,Math.floor,Math.pow,Math.imul,Math.fround,Math.round,Math.min,Math.max,Math.clz32,Math.trunc;var H=0,z=null,G=null;a.preloadedImages={},a.preloadedAudios={};var X="data:application/octet-stream;base64,";function K(n){return String.prototype.startsWith?n.startsWith(X):0===n.indexOf(X)}var Y,Z="DiabloSpawn.wasm";function J(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(p)return p(Z);throw"both async and sync fetching of the wasm failed"}catch(v){Bn(v)}}function V(n){var t={env:n,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:g};function e(n,t){var e=n.exports;a.asm=e,function(n){if(H--,a.monitorRunDependencies&&a.monitorRunDependencies(H),0==H&&(null!==z&&(clearInterval(z),z=null),G)){var t=G;G=null,t()}}()}function r(n){e(n.instance)}function i(n){return(a.wasmBinary||!l&&!_||"function"!==typeof fetch?new Promise(function(n,t){n(J())}):fetch(Z,{credentials:"same-origin"}).then(function(n){if(!n.ok)throw"failed to load wasm binary file at '"+Z+"'";return n.arrayBuffer()}).catch(function(){return J()})).then(function(n){return WebAssembly.instantiate(n,t)}).then(n,function(n){v("failed to asynchronously prepare wasm: "+n),Bn(n)})}if(H++,a.monitorRunDependencies&&a.monitorRunDependencies(H),a.instantiateWasm)try{return a.instantiateWasm(t,e)}catch(o){return v("Module.instantiateWasm callback failed with error: "+o),!1}return function(){if(a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||K(Z)||"function"!==typeof fetch)return i(r);fetch(Z,{credentials:"same-origin"}).then(function(n){return WebAssembly.instantiateStreaming(n,t).then(r,function(n){v("wasm streaming compile failed: "+n),v("falling back to ArrayBuffer instantiation"),i(r)})})}(),{}}K(Z)||(Y=Z,Z=a.locateFile?a.locateFile(Y,y):y+Y),a.asm=function(n,t,e){return t.memory=b,t.table=new WebAssembly.Table({initial:1116,maximum:1116,element:"anyfunc"}),t.__memory_base=1024,t.__table_base=0,V(t)};var $=[function(n){self.DApi.current_save_id(n)}];U.push({func:function(){bn()}});var Q=1850912;var nn={},tn=[];function en(n){n&&nn[n].refcount++}function rn(n){if(!n||nn[n])return n;for(var t in nn)for(var e=+t,r=nn[e].adjusted,i=r.length,o=0;o>2],t.adjusted.push(n),0|(x(r[i]),n);return n=D[n>>2],0|(x(e),n)}a.___cxa_find_matching_catch=sn;var cn={buffers:[null,[],[]],printChar:function(n,t){var e=cn.buffers[n];0===t||10===t?((1===n?h:v)(S(e,0)),e.length=0):e.push(t)},varargs:0,get:function(n){return cn.varargs+=4,D[cn.varargs-4>>2]},getStr:function(){return k(cn.get())},get64:function(){var n=cn.get();cn.get();return n},getZero:function(){cn.get()}};function ln(){return R.length}function _n(n){n=L(n,65536);var t=E.byteLength;try{return-1!==b.grow((n-t)/65536)&&(E=b.buffer,!0)}catch(e){return!1}}var fn={abort:Bn,setTempRet0:x,getTempRet0:function(){return w},invoke_i:function(n){var t=xn();try{return An(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_ii:function(n,t){var e=xn();try{return jn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_iii:function(n,t,e){var r=xn();try{return Cn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_iiii:function(n,t,e,r){var i=xn();try{return Sn(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_iiiii:function(n,t,e,r,i){var o=xn();try{return kn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_iiiiii:function(n,t,e,r,i,o){var a=xn();try{return En(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_ji:function(n,t){var e=xn();try{return Rn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_v:function(n){var t=xn();try{Tn(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_vi:function(n,t){var e=xn();try{Dn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_vii:function(n,t,e){var r=xn();try{Mn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_viii:function(n,t,e,r){var i=xn();try{Ln(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_viiii:function(n,t,e,r,i){var o=xn();try{On(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viiiii:function(n,t,e,r,i,o){var a=xn();try{Pn(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_viiiiiii:function(n,t,e,r,i,o,a,u){var s=xn();try{In(n,t,e,r,i,o,a,u)}catch(c){if(wn(s),c!==c+0&&"longjmp"!==c)throw c;gn(1,0)}},invoke_viij:function(n,t,e,r,i){var o=xn();try{Nn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viji:function(n,t,e,r,i){var o=xn();try{Fn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},___assert_fail:function(n,t,e,r){Bn("Assertion failed: "+k(n)+", at: "+[t?k(t):"unknown filename",e,r?k(r):"unknown function"])},___cxa_allocate_exception:function(n){return vn(n)},___cxa_begin_catch:function(n){var t=nn[n];return t&&!t.caught&&(t.caught=!0,dn.uncaught_exceptions--),t&&(t.rethrown=!1),tn.push(n),en(rn(n)),n},___cxa_end_catch:function(){gn(0);var n=tn.pop();n&&(un(rn(n)),on=0)},___cxa_find_matching_catch:sn,___cxa_find_matching_catch_2:function(n,t){return sn(n,t)},___cxa_find_matching_catch_3:function(n,t,e){return sn(n,t,e)},___cxa_free_exception:an,___cxa_get_exception_ptr:function(n){return n},___cxa_pure_virtual:function(){throw A=!0,"Pure virtual function called!"},___cxa_throw:function(n,t,e){throw nn[n]={ptr:n,adjusted:[n],type:t,destructor:e,refcount:0,caught:!1,rethrown:!1},on=n,"uncaught_exception"in dn?dn.uncaught_exceptions++:dn.uncaught_exceptions=1,n},___cxa_uncaught_exceptions:function(){return dn.uncaught_exceptions},___exception_addRef:en,___exception_deAdjust:rn,___exception_decRef:un,___gxx_personality_v0:function(){},___lock:function(){},___resumeException:function(n){throw on||(on=n),n},___setErrNo:function(n){return a.___errno_location&&(D[a.___errno_location()>>2]=n),n},___syscall140:function(n,t){cn.varargs=t;try{return cn.getStreamFromFD(),cn.get(),cn.get(),cn.get(),cn.get(),0}catch(e){return"undefined"!==typeof FS&&e instanceof FS.ErrnoError||Bn(e),-e.errno}},___syscall146:function(n,t){cn.varargs=t;try{for(var e=cn.get(),r=cn.get(),i=cn.get(),o=0,a=0;a>2],s=D[r+(8*a+4)>>2],c=0;c2147418112)return!1;for(var e=Math.max(t,16777216);e>2]=t),t},_trace_pop:function(){self.WASM_TRACE&&self.WASM_TRACE.pop()},_trace_push:function(n){var t=T.indexOf(0,n),e=String.fromCharCode.apply(null,T.subarray(n,t));console.log(e),self.WASM_TRACE=self.WASM_TRACE||[],self.WASM_TRACE.push(e)},abortOnCannotGrowMemory:function(n){Bn("OOM")},emscripten_realloc_buffer:_n,flush_NO_FILESYSTEM:function(){var n=a._fflush;n&&n(0);var t=cn.buffers;t[1].length&&cn.printChar(1,10),t[2].length&&cn.printChar(2,10)},tempDoublePtr:Q,DYNAMICTOP_PTR:P},pn=a.asm({},fn,E);a.asm=pn;a._DApi_AllocPacket=function(){return a.asm._DApi_AllocPacket.apply(null,arguments)},a._DApi_Char=function(){return a.asm._DApi_Char.apply(null,arguments)},a._DApi_Init=function(){return a.asm._DApi_Init.apply(null,arguments)},a._DApi_Key=function(){return a.asm._DApi_Key.apply(null,arguments)},a._DApi_Mouse=function(){return a.asm._DApi_Mouse.apply(null,arguments)},a._DApi_Render=function(){return a.asm._DApi_Render.apply(null,arguments)},a._DApi_SyncText=function(){return a.asm._DApi_SyncText.apply(null,arguments)},a._DApi_SyncTextPtr=function(){return a.asm._DApi_SyncTextPtr.apply(null,arguments)},a._SNet_InitWebsocket=function(){return a.asm._SNet_InitWebsocket.apply(null,arguments)},a._SNet_WebsocketStatus=function(){return a.asm._SNet_WebsocketStatus.apply(null,arguments)};var dn=a.__ZSt18uncaught_exceptionv=function(){return a.asm.__ZSt18uncaught_exceptionv.apply(null,arguments)},mn=a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)},yn=a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)},hn=(a.___em_js___api_close_keyboard=function(){return a.asm.___em_js___api_close_keyboard.apply(null,arguments)},a.___em_js___api_open_keyboard=function(){return a.asm.___em_js___api_open_keyboard.apply(null,arguments)},a.___em_js__api_create_sound=function(){return a.asm.___em_js__api_create_sound.apply(null,arguments)},a.___em_js__api_create_sound_float=function(){return a.asm.___em_js__api_create_sound_float.apply(null,arguments)},a.___em_js__api_delete_sound=function(){return a.asm.___em_js__api_delete_sound.apply(null,arguments)},a.___em_js__api_draw_begin=function(){return a.asm.___em_js__api_draw_begin.apply(null,arguments)},a.___em_js__api_draw_belt=function(){return a.asm.___em_js__api_draw_belt.apply(null,arguments)},a.___em_js__api_draw_blit=function(){return a.asm.___em_js__api_draw_blit.apply(null,arguments)},a.___em_js__api_draw_clip_text=function(){return a.asm.___em_js__api_draw_clip_text.apply(null,arguments)},a.___em_js__api_draw_end=function(){return a.asm.___em_js__api_draw_end.apply(null,arguments)},a.___em_js__api_draw_text=function(){return a.asm.___em_js__api_draw_text.apply(null,arguments)},a.___em_js__api_duplicate_sound=function(){return a.asm.___em_js__api_duplicate_sound.apply(null,arguments)},a.___em_js__api_exit_game=function(){return a.asm.___em_js__api_exit_game.apply(null,arguments)},a.___em_js__api_play_sound=function(){return a.asm.___em_js__api_play_sound.apply(null,arguments)},a.___em_js__api_set_cursor=function(){return a.asm.___em_js__api_set_cursor.apply(null,arguments)},a.___em_js__api_set_volume=function(){return a.asm.___em_js__api_set_volume.apply(null,arguments)},a.___em_js__api_stop_sound=function(){return a.asm.___em_js__api_stop_sound.apply(null,arguments)},a.___em_js__api_use_websocket=function(){return a.asm.___em_js__api_use_websocket.apply(null,arguments)},a.___em_js__api_websocket_closed=function(){return a.asm.___em_js__api_websocket_closed.apply(null,arguments)},a.___em_js__api_websocket_send=function(){return a.asm.___em_js__api_websocket_send.apply(null,arguments)},a.___em_js__exit_error=function(){return a.asm.___em_js__exit_error.apply(null,arguments)},a.___em_js__get_file_contents=function(){return a.asm.___em_js__get_file_contents.apply(null,arguments)},a.___em_js__get_file_size=function(){return a.asm.___em_js__get_file_size.apply(null,arguments)},a.___em_js__put_file_contents=function(){return a.asm.___em_js__put_file_contents.apply(null,arguments)},a.___em_js__remove_file=function(){return a.asm.___em_js__remove_file.apply(null,arguments)},a.___em_js__show_alert=function(){return a.asm.___em_js__show_alert.apply(null,arguments)},a.___em_js__trace_pop=function(){return a.asm.___em_js__trace_pop.apply(null,arguments)},a.___em_js__trace_push=function(){return a.asm.___em_js__trace_push.apply(null,arguments)},a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)},a._free=function(){return a.asm._free.apply(null,arguments)}),vn=(a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)},a._malloc=function(){return a.asm._malloc.apply(null,arguments)}),gn=(a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)},a._memmove=function(){return a.asm._memmove.apply(null,arguments)},a._memset=function(){return a.asm._memset.apply(null,arguments)},a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)},a._setThrew=function(){return a.asm._setThrew.apply(null,arguments)}),bn=(a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)},a.globalCtors=function(){return a.asm.globalCtors.apply(null,arguments)}),wn=(a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)},a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)}),xn=a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)},An=a.dynCall_i=function(){return a.asm.dynCall_i.apply(null,arguments)},jn=a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)},Cn=(a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)},a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)}),Sn=a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)},kn=a.dynCall_iiiii=function(){return a.asm.dynCall_iiiii.apply(null,arguments)},En=a.dynCall_iiiiii=function(){return a.asm.dynCall_iiiiii.apply(null,arguments)},Rn=a.dynCall_ji=function(){return a.asm.dynCall_ji.apply(null,arguments)},Tn=(a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)},a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)}),Dn=a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)},Mn=a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)},Ln=a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)},On=a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)},Pn=a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)},In=(a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)},a.dynCall_viiiiiii=function(){return a.asm.dynCall_viiiiiii.apply(null,arguments)}),Nn=(a.dynCall_viiiiiiiii=function(){return a.asm.dynCall_viiiiiiiii.apply(null,arguments)},a.dynCall_viiiiiiiiii=function(){return a.asm.dynCall_viiiiiiiiii.apply(null,arguments)},a.dynCall_viij=function(){return a.asm.dynCall_viij.apply(null,arguments)}),Fn=a.dynCall_viji=function(){return a.asm.dynCall_viji.apply(null,arguments)};function Un(n){this.name="ExitStatus",this.message="Program terminated with exit("+n+")",this.status=n}a.asm=pn,a.then=function(n){if(a.calledRun)n(a);else{var t=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){t&&t(),n(a)}}return a},Un.prototype=new Error,Un.prototype.constructor=Un;function qn(n){function t(){a.calledRun||(a.calledRun=!0,A||(!0,N(U),N(q),a.onRuntimeInitialized&&a.onRuntimeInitialized(),function(){if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)W(a.postRun.shift());N(B)}()))}n=n||a.arguments,H>0||(!function(){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)n=a.preRun.shift(),F.unshift(n);var n;N(F)}(),H>0||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),t()},1)):t()))}G=function n(){a.calledRun||qn(),a.calledRun||(G=n)},a.run=qn;function Bn(n){throw a.onAbort&&a.onAbort(n),h(n+=""),v(n),A=!0,1,"abort("+n+"). Build with -s ASSERTIONS=1 for more info."}if(a.abort=Bn,a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();return a.noExitRuntime=!0,qn(),a.ready=new Promise(function(n,t){delete a.then,a.onAbort=function(n){t(n)},W(function(){n(a)})}),i}}();n.exports=i}).call(this,e(2),"/")},function(n,t,e){n.exports=e(19)},function(n,t,e){var r=function(n){"use strict";var t,e=Object.prototype,r=e.hasOwnProperty,i="function"===typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function s(n,t,e,r){var i=t&&t.prototype instanceof m?t:m,o=Object.create(i.prototype),a=new k(r||[]);return o._invoke=function(n,t,e){var r=l;return function(i,o){if(r===f)throw new Error("Generator is already running");if(r===p){if("throw"===i)throw o;return R()}for(e.method=i,e.arg=o;;){var a=e.delegate;if(a){var u=j(a,e);if(u){if(u===d)continue;return u}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(r===l)throw r=p,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);r=f;var s=c(n,t,e);if("normal"===s.type){if(r=e.done?p:_,s.arg===d)continue;return{value:s.arg,done:e.done}}"throw"===s.type&&(r=p,e.method="throw",e.arg=s.arg)}}}(n,e,a),o}function c(n,t,e){try{return{type:"normal",arg:n.call(t,e)}}catch(r){return{type:"throw",arg:r}}}n.wrap=s;var l="suspendedStart",_="suspendedYield",f="executing",p="completed",d={};function m(){}function y(){}function h(){}var v={};v[o]=function(){return this};var g=Object.getPrototypeOf,b=g&&g(g(E([])));b&&b!==e&&r.call(b,o)&&(v=b);var w=h.prototype=m.prototype=Object.create(v);function x(n){["next","throw","return"].forEach(function(t){n[t]=function(n){return this._invoke(t,n)}})}function A(n){var t;this._invoke=function(e,i){function o(){return new Promise(function(t,o){!function t(e,i,o,a){var u=c(n[e],n,i);if("throw"!==u.type){var s=u.arg,l=s.value;return l&&"object"===typeof l&&r.call(l,"__await")?Promise.resolve(l.__await).then(function(n){t("next",n,o,a)},function(n){t("throw",n,o,a)}):Promise.resolve(l).then(function(n){s.value=n,o(s)},function(n){return t("throw",n,o,a)})}a(u.arg)}(e,i,t,o)})}return t=t?t.then(o,o):o()}}function j(n,e){var r=n.iterator[e.method];if(r===t){if(e.delegate=null,"throw"===e.method){if(n.iterator.return&&(e.method="return",e.arg=t,j(n,e),"throw"===e.method))return d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var i=c(r,n.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var o=i.arg;return o?o.done?(e[n.resultName]=o.value,e.next=n.nextLoc,"return"!==e.method&&(e.method="next",e.arg=t),e.delegate=null,d):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function C(n){var t={tryLoc:n[0]};1 in n&&(t.catchLoc=n[1]),2 in n&&(t.finallyLoc=n[2],t.afterLoc=n[3]),this.tryEntries.push(t)}function S(n){var t=n.completion||{};t.type="normal",delete t.arg,n.completion=t}function k(n){this.tryEntries=[{tryLoc:"root"}],n.forEach(C,this),this.reset(!0)}function E(n){if(n){var e=n[o];if(e)return e.call(n);if("function"===typeof n.next)return n;if(!isNaN(n.length)){var i=-1,a=function e(){for(;++i=0;--o){var a=this.tryEntries[o],u=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(s&&c){if(this.prev=0;--e){var i=this.tryEntries[e];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var e=this.tryEntries[t];if(e.finallyLoc===n)return this.complete(e.completion,e.afterLoc),S(e),d}},catch:function(n){for(var t=this.tryEntries.length-1;t>=0;--t){var e=this.tryEntries[t];if(e.tryLoc===n){var r=e.completion;if("throw"===r.type){var i=r.arg;S(e)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(n,e,r){return this.delegate={iterator:E(n),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=t),d}},n}(n.exports);try{regeneratorRuntime=r}catch(i){Function("r","regeneratorRuntime = r")(r)}},function(n,t,e){"use strict";var r=e(0),i=e(5),o=e(21),a=e(11);function u(n){var t=new o(n),e=i(o.prototype.request,t);return r.extend(e,o.prototype,t),r.extend(e,t),e}var s=u(e(8));s.Axios=o,s.create=function(n){return u(a(s.defaults,n))},s.Cancel=e(12),s.CancelToken=e(33),s.isCancel=e(7),s.all=function(n){return Promise.all(n)},s.spread=e(34),n.exports=s,n.exports.default=s},function(n,t){n.exports=function(n){return null!=n&&null!=n.constructor&&"function"===typeof n.constructor.isBuffer&&n.constructor.isBuffer(n)}},function(n,t,e){"use strict";var r=e(0),i=e(6),o=e(22),a=e(23),u=e(11);function s(n){this.defaults=n,this.interceptors={request:new o,response:new o}}s.prototype.request=function(n){"string"===typeof n?(n=arguments[1]||{}).url=arguments[0]:n=n||{},(n=u(this.defaults,n)).method=n.method?n.method.toLowerCase():"get";var t=[a,void 0],e=Promise.resolve(n);for(this.interceptors.request.forEach(function(n){t.unshift(n.fulfilled,n.rejected)}),this.interceptors.response.forEach(function(n){t.push(n.fulfilled,n.rejected)});t.length;)e=e.then(t.shift(),t.shift());return e},s.prototype.getUri=function(n){return n=u(this.defaults,n),i(n.url,n.params,n.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],function(n){s.prototype[n]=function(t,e){return this.request(r.merge(e||{},{method:n,url:t}))}}),r.forEach(["post","put","patch"],function(n){s.prototype[n]=function(t,e,i){return this.request(r.merge(i||{},{method:n,url:t,data:e}))}}),n.exports=s},function(n,t,e){"use strict";var r=e(0);function i(){this.handlers=[]}i.prototype.use=function(n,t){return this.handlers.push({fulfilled:n,rejected:t}),this.handlers.length-1},i.prototype.eject=function(n){this.handlers[n]&&(this.handlers[n]=null)},i.prototype.forEach=function(n){r.forEach(this.handlers,function(t){null!==t&&n(t)})},n.exports=i},function(n,t,e){"use strict";var r=e(0),i=e(24),o=e(7),a=e(8),u=e(31),s=e(32);function c(n){n.cancelToken&&n.cancelToken.throwIfRequested()}n.exports=function(n){return c(n),n.baseURL&&!u(n.url)&&(n.url=s(n.baseURL,n.url)),n.headers=n.headers||{},n.data=i(n.data,n.headers,n.transformRequest),n.headers=r.merge(n.headers.common||{},n.headers[n.method]||{},n.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(t){delete n.headers[t]}),(n.adapter||a.adapter)(n).then(function(t){return c(n),t.data=i(t.data,t.headers,n.transformResponse),t},function(t){return o(t)||(c(n),t&&t.response&&(t.response.data=i(t.response.data,t.response.headers,n.transformResponse))),Promise.reject(t)})}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t,e){return r.forEach(e,function(e){n=e(n,t)}),n}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t){r.forEach(n,function(e,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(n[t]=e,delete n[r])})}},function(n,t,e){"use strict";var r=e(10);n.exports=function(n,t,e){var i=e.config.validateStatus;!i||i(e.status)?n(e):t(r("Request failed with status code "+e.status,e.config,null,e.request,e))}},function(n,t,e){"use strict";n.exports=function(n,t,e,r,i){return n.config=t,e&&(n.code=e),n.request=r,n.response=i,n.isAxiosError=!0,n.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},n}},function(n,t,e){"use strict";var r=e(0),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];n.exports=function(n){var t,e,o,a={};return n?(r.forEach(n.split("\n"),function(n){if(o=n.indexOf(":"),t=r.trim(n.substr(0,o)).toLowerCase(),e=r.trim(n.substr(o+1)),t){if(a[t]&&i.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([e]):a[t]?a[t]+", "+e:e}}),a):a}},function(n,t,e){"use strict";var r=e(0);n.exports=r.isStandardBrowserEnv()?function(){var n,t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");function i(n){var r=n;return t&&(e.setAttribute("href",r),r=e.href),e.setAttribute("href",r),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname}}return n=i(window.location.href),function(t){var e=r.isString(t)?i(t):t;return e.protocol===n.protocol&&e.host===n.host}}():function(){return!0}},function(n,t,e){"use strict";var r=e(0);n.exports=r.isStandardBrowserEnv()?{write:function(n,t,e,i,o,a){var u=[];u.push(n+"="+encodeURIComponent(t)),r.isNumber(e)&&u.push("expires="+new Date(e).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),!0===a&&u.push("secure"),document.cookie=u.join("; ")},read:function(n){var t=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(n){this.write(n,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(n,t,e){"use strict";n.exports=function(n){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(n)}},function(n,t,e){"use strict";n.exports=function(n,t){return t?n.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):n}},function(n,t,e){"use strict";var r=e(12);function i(n){if("function"!==typeof n)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(n){t=n});var e=this;n(function(n){e.reason||(e.reason=new r(n),t(e.reason))})}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var n;return{token:new i(function(t){n=t}),cancel:n}},n.exports=i},function(n,t,e){"use strict";n.exports=function(n){return function(t){return n.apply(null,t)}}},function(n,t,e){"use strict";function r(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var e=[],r=!0,i=!1,o=void 0;try{for(var a,u=n[Symbol.iterator]();!(r=(a=u.next()).done)&&(e.push(a.value),!t||e.length!==t);r=!0);}catch(s){i=!0,o=s}finally{try{r||null==u.return||u.return()}finally{if(i)throw o}}return e}(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}e.r(t);var i=e(1),o=e.n(i);function a(n){return function(n){if(Array.isArray(n)){for(var t=0,e=new Array(n.length);t>8;var e=3,o=!0,a=!1,u=void 0;try{for(var s,c=i[Symbol.iterator]();!(o=(s=c.next()).done);o=!0){var l=s.value;t.set(l,e),e+=l.byteLength}}catch(_){a=!0,u=_}finally{try{o||null==c.return||c.return()}finally{if(a)throw u}}r.send(t),i.length=0}},100):r.close(),e(0)},function(n){e(n)}),a}var x=1466809,A=1337416,j=self,C=null,S=null,k=null,E=null,R=null,T=null,D=!1,M=null;function L(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"error";n instanceof Error?j.postMessage({action:t,error:n.toString(),stack:n.stack}):j.postMessage({action:t,error:n.toString()})}var O=1<<20,P=function(){function n(t){!function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n);var e=new XMLHttpRequest;if(e.open("HEAD",t,!1),e.send(),e.status<200||e.status>=300)throw Error("Failed to load remote file");this.byteLength=parseInt(e.getResponseHeader("Content-Length")),this.url=t,this.buffer=new Uint8Array(this.byteLength),this.chunks=new Uint8Array(this.byteLength+O-1>>20|0)}var t,e,r;return t=n,(e=[{key:"subarray",value:function(n,t){for(var e=n/O|0,r=(t+O-1)/O|0,i=r,o=e,a=e;a=300)throw Error("Failed to load remote file");var s,c=u.getResponseHeader("Content-Range"),l=0;c&&(s=c.match(/bytes (\d+)-(\d+)\/(\d+)/))&&(l=parseInt(s[1])),this.buffer.set(new Uint8Array(u.response),l),e=(l+O-1)/O|0,r=(l+u.response.byteLength+O-1)/O|0;for(var _=e;_=0?D?"spawn".concat(n,".sv"):"single_".concat(n,".sv"):null})},get_file_size:function(n){var t=E.get(n.toLowerCase());return t?t.byteLength:0},get_file_contents:function(n,t,e){var r=E.get(n.toLowerCase());r&&t.set(r.subarray(e,e+t.byteLength))},put_file_contents:function(n,t){n=n.toLowerCase(),E.set(n,t),j.postMessage({action:"fs",func:"update",params:[n,t]})},remove_file:function(n){n=n.toLowerCase(),E.delete(n),j.postMessage({action:"fs",func:"delete",params:[n]})},set_cursor:function(n,t){j.postMessage({action:"cursor",x:n,y:t})},open_keyboard:function(){for(var n=arguments.length,t=new Array(n),e=0;e>16&255,o=r>>8&255,a=255&r;S.fillStyle="rgb(".concat(i,", ").concat(o,", ").concat(a,")"),S.fillText(e,n,t+22)},draw_end:function(){S.restore();var n=C.transferToImageBitmap(),t=[n];T&&t.push(T.buffer),j.postMessage({action:"render",batch:{bitmap:n,belt:T}},t),T=null},draw_belt:function(n){T=n.slice()}},U=null,q=null,B=0,W=0;["create_sound_raw","create_sound","duplicate_sound"].forEach(function(n){I[n]=function(){for(var t=arguments.length,e=new Array(t),r=0;r=B?U.push({func:n,params:e}):j.postMessage({action:"audio",func:n,params:e})}});var H=null;I.websocket_send=function(n){M?M.send(n):H?H.push(n.slice().buffer):j.postMessage({action:"packet",buffer:n})},j.DApi=I;var z=null;function G(n){try{n()}catch(t){L(t)}}function X(n){for(var t=arguments.length,e=new Array(t>1?t-1:0),r=1;r1)for(var e=1;e=0;r--){var i=n[r];"."===i?n.splice(r,1):".."===i?(n.splice(r,1),e++):e&&(n.splice(r,1),e--)}if(t)for(;e--;e)n.unshift("..");return n}function r(n,t){if(n.filter)return n.filter(t);for(var e=[],r=0;r=-1&&!i;o--){var a=o>=0?arguments[o]:n.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,i="/"===a.charAt(0))}return(i?"/":"")+(t=e(r(t.split("/"),function(n){return!!n}),!i).join("/"))||"."},t.normalize=function(n){var o=t.isAbsolute(n),a="/"===i(n,-1);return(n=e(r(n.split("/"),function(n){return!!n}),!o).join("/"))||o||(n="."),n&&a&&(n+="/"),(o?"/":"")+n},t.isAbsolute=function(n){return"/"===n.charAt(0)},t.join=function(){var n=Array.prototype.slice.call(arguments,0);return t.normalize(r(n,function(n,t){if("string"!==typeof n)throw new TypeError("Arguments to path.join must be strings");return n}).join("/"))},t.relative=function(n,e){function r(n){for(var t=0;t=0&&""===n[e];e--);return t>e?[]:n.slice(t,e-t+1)}n=t.resolve(n).substr(1),e=t.resolve(e).substr(1);for(var i=r(n.split("/")),o=r(e.split("/")),a=Math.min(i.length,o.length),u=a,s=0;s=1;--o)if(47===(t=n.charCodeAt(o))){if(!i){r=o;break}}else i=!1;return-1===r?e?"/":".":e&&1===r?"/":n.slice(0,r)},t.basename=function(n,t){var e=function(n){"string"!==typeof n&&(n+="");var t,e=0,r=-1,i=!0;for(t=n.length-1;t>=0;--t)if(47===n.charCodeAt(t)){if(!i){e=t+1;break}}else-1===r&&(i=!1,r=t+1);return-1===r?"":n.slice(e,r)}(n);return t&&e.substr(-1*t.length)===t&&(e=e.substr(0,e.length-t.length)),e},t.extname=function(n){"string"!==typeof n&&(n+="");for(var t=-1,e=0,r=-1,i=!0,o=0,a=n.length-1;a>=0;--a){var u=n.charCodeAt(a);if(47!==u)-1===r&&(i=!1,r=a+1),46===u?-1===t?t=a:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){e=a+1;break}}return-1===t||-1===r||0===o||1===o&&t===r-1&&t===e+1?"":n.slice(t,r)};var i="b"==="ab".substr(-1)?function(n,t,e){return n.substr(t,e)}:function(n,t,e){return t<0&&(t=n.length+t),n.substr(t,e)}}).call(this,e(2))},function(n,t,e){"use strict";n.exports=function(n,t){return function(){for(var e=new Array(arguments.length),r=0;r=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],function(n){u.headers[n]={}}),r.forEach(["post","put","patch"],function(n){u.headers[n]=r.merge(o)}),n.exports=u}).call(this,e(2))},function(n,t,e){"use strict";var r=e(0),i=e(26),o=e(6),a=e(28),u=e(29),s=e(10);n.exports=function(n){return new Promise(function(t,c){var l=n.data,_=n.headers;r.isFormData(l)&&delete _["Content-Type"];var f=new XMLHttpRequest;if(n.auth){var p=n.auth.username||"",d=n.auth.password||"";_.Authorization="Basic "+btoa(p+":"+d)}if(f.open(n.method.toUpperCase(),o(n.url,n.params,n.paramsSerializer),!0),f.timeout=n.timeout,f.onreadystatechange=function(){if(f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))){var e="getAllResponseHeaders"in f?a(f.getAllResponseHeaders()):null,r={data:n.responseType&&"text"!==n.responseType?f.response:f.responseText,status:f.status,statusText:f.statusText,headers:e,config:n,request:f};i(t,c,r),f=null}},f.onabort=function(){f&&(c(s("Request aborted",n,"ECONNABORTED",f)),f=null)},f.onerror=function(){c(s("Network Error",n,null,f)),f=null},f.ontimeout=function(){c(s("timeout of "+n.timeout+"ms exceeded",n,"ECONNABORTED",f)),f=null},r.isStandardBrowserEnv()){var m=e(30),y=(n.withCredentials||u(n.url))&&n.xsrfCookieName?m.read(n.xsrfCookieName):void 0;y&&(_[n.xsrfHeaderName]=y)}if("setRequestHeader"in f&&r.forEach(_,function(n,t){"undefined"===typeof l&&"content-type"===t.toLowerCase()?delete _[t]:f.setRequestHeader(t,n)}),n.withCredentials&&(f.withCredentials=!0),n.responseType)try{f.responseType=n.responseType}catch(h){if("json"!==n.responseType)throw h}"function"===typeof n.onDownloadProgress&&f.addEventListener("progress",n.onDownloadProgress),"function"===typeof n.onUploadProgress&&f.upload&&f.upload.addEventListener("progress",n.onUploadProgress),n.cancelToken&&n.cancelToken.promise.then(function(n){f&&(f.abort(),c(n),f=null)}),void 0===l&&(l=null),f.send(l)})}},function(n,t,e){"use strict";var r=e(27);n.exports=function(n,t,e,i,o){var a=new Error(n);return r(a,t,e,i,o)}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t){t=t||{};var e={};return r.forEach(["url","method","params","data"],function(n){"undefined"!==typeof t[n]&&(e[n]=t[n])}),r.forEach(["headers","auth","proxy"],function(i){r.isObject(t[i])?e[i]=r.deepMerge(n[i],t[i]):"undefined"!==typeof t[i]?e[i]=t[i]:r.isObject(n[i])?e[i]=r.deepMerge(n[i]):"undefined"!==typeof n[i]&&(e[i]=n[i])}),r.forEach(["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"],function(r){"undefined"!==typeof t[r]?e[r]=t[r]:"undefined"!==typeof n[r]&&(e[r]=n[r])}),e}},function(n,t,e){"use strict";function r(n){this.message=n}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,n.exports=r},function(n,t,e){n.exports=e.p+"static/media/Diablo.570bd59a.wasm"},function(n,t,e){(function(t,r){var i=function(){var n="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;return function(i){var o,a="undefined"!==typeof(i=i||{})?i:{},u={};for(o in a)a.hasOwnProperty(o)&&(u[o]=a[o]);a.arguments=[],a.thisProgram="./this.program",a.quit=function(n,t){throw t},a.preRun=[],a.postRun=[];var s,c,l=!1,_=!1;l="object"===typeof window,_="function"===typeof importScripts,s="object"===typeof t&&"object"===typeof t.versions&&"string"===typeof t.versions.node&&!l&&!_,c=!l&&!s&&!_;var f,p,d,m,y="";s?(y=r+"/",f=function(n,t){var r;return d||(d=e(3)),m||(m=e(4)),n=m.normalize(n),r=d.readFileSync(n),t?r:r.toString()},p=function(n){var t=f(n,!0);return t.buffer||(t=new Uint8Array(t)),j(t.buffer),t},t.argv.length>1&&(a.thisProgram=t.argv[1].replace(/\\/g,"/")),a.arguments=t.argv.slice(2),t.on("uncaughtException",function(n){if(!(n instanceof Un))throw n}),t.on("unhandledRejection",Bn),a.quit=function(n){t.exit(n)},a.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(f=function(n){return read(n)}),p=function(n){var t;return"function"===typeof readbuffer?new Uint8Array(readbuffer(n)):(j("object"===typeof(t=read(n,"binary"))),t)},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(n){quit(n)})):(l||_)&&(_?y=self.location.href:document.currentScript&&(y=document.currentScript.src),n&&(y=n),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",f=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.send(null),t.responseText},_&&(p=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(n,t,e){var r=new XMLHttpRequest;r.open("GET",n,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):e()},r.onerror=e,r.send(null)});var h=a.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),v=a.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||h);for(o in u)u.hasOwnProperty(o)&&(a[o]=u[o]);u=void 0;var g={"f64-rem":function(n,t){return n%t},debugger:function(){}};new Array(0);var b,w=0,x=function(n){w=n};"object"!==typeof WebAssembly&&v("no native wasm support detected");var A=!1;function j(n,t){n||Bn("Assertion failed: "+t)}var C="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(n,t,e){for(var r=t+e,i=t;n[i]&&!(i>=r);)++i;if(i-t>16&&n.subarray&&C)return C.decode(n.subarray(t,i));for(var o="";t>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|u)}else o+=String.fromCharCode(a)}return o}function k(n,t){return n?S(T,n,t):""}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var E,R,T,D,M;function L(n,t){return n%t>0&&(n+=t-n%t),n}function O(){a.HEAP8=R=new Int8Array(E),a.HEAP16=new Int16Array(E),a.HEAP32=D=new Int32Array(E),a.HEAPU8=T=new Uint8Array(E),a.HEAPU16=new Uint16Array(E),a.HEAPU32=new Uint32Array(E),a.HEAPF32=M=new Float32Array(E),a.HEAPF64=new Float64Array(E)}var P=1875712,I=a.TOTAL_MEMORY||134217728;function N(n){for(;n.length>0;){var t=n.shift();if("function"!=typeof t){var e=t.func;"number"===typeof e?void 0===t.arg?a.dynCall_v(e):a.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}I<5242880&&v("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+I+"! (TOTAL_STACK=5242880)"),(b=a.wasmMemory?a.wasmMemory:new WebAssembly.Memory({initial:I/65536}))&&(E=b.buffer),I=E.byteLength,O(),D[P>>2]=7118624;var F=[],U=[],q=[],B=[];function W(n){B.unshift(n)}Math.abs,Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt,Math.ceil,Math.floor,Math.pow,Math.imul,Math.fround,Math.round,Math.min,Math.max,Math.clz32,Math.trunc;var H=0,z=null,G=null;a.preloadedImages={},a.preloadedAudios={};var X="data:application/octet-stream;base64,";function K(n){return String.prototype.startsWith?n.startsWith(X):0===n.indexOf(X)}var Y,Z="Diablo.wasm";function J(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(p)return p(Z);throw"both async and sync fetching of the wasm failed"}catch(v){Bn(v)}}function V(n){var t={env:n,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:g};function e(n,t){var e=n.exports;a.asm=e,function(n){if(H--,a.monitorRunDependencies&&a.monitorRunDependencies(H),0==H&&(null!==z&&(clearInterval(z),z=null),G)){var t=G;G=null,t()}}()}function r(n){e(n.instance)}function i(n){return(a.wasmBinary||!l&&!_||"function"!==typeof fetch?new Promise(function(n,t){n(J())}):fetch(Z,{credentials:"same-origin"}).then(function(n){if(!n.ok)throw"failed to load wasm binary file at '"+Z+"'";return n.arrayBuffer()}).catch(function(){return J()})).then(function(n){return WebAssembly.instantiate(n,t)}).then(n,function(n){v("failed to asynchronously prepare wasm: "+n),Bn(n)})}if(H++,a.monitorRunDependencies&&a.monitorRunDependencies(H),a.instantiateWasm)try{return a.instantiateWasm(t,e)}catch(o){return v("Module.instantiateWasm callback failed with error: "+o),!1}return function(){if(a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||K(Z)||"function"!==typeof fetch)return i(r);fetch(Z,{credentials:"same-origin"}).then(function(n){return WebAssembly.instantiateStreaming(n,t).then(r,function(n){v("wasm streaming compile failed: "+n),v("falling back to ArrayBuffer instantiation"),i(r)})})}(),{}}K(Z)||(Y=Z,Z=a.locateFile?a.locateFile(Y,y):y+Y),a.asm=function(n,t,e){return t.memory=b,t.table=new WebAssembly.Table({initial:1116,maximum:1116,element:"anyfunc"}),t.__memory_base=1024,t.__table_base=0,V(t)};var $=[function(n){self.DApi.current_save_id(n)}];U.push({func:function(){bn()}});var Q=1875728;var nn={},tn=[];function en(n){n&&nn[n].refcount++}function rn(n){if(!n||nn[n])return n;for(var t in nn)for(var e=+t,r=nn[e].adjusted,i=r.length,o=0;o>2],t.adjusted.push(n),0|(x(r[i]),n);return n=D[n>>2],0|(x(e),n)}a.___cxa_find_matching_catch=sn;var cn={buffers:[null,[],[]],printChar:function(n,t){var e=cn.buffers[n];0===t||10===t?((1===n?h:v)(S(e,0)),e.length=0):e.push(t)},varargs:0,get:function(n){return cn.varargs+=4,D[cn.varargs-4>>2]},getStr:function(){return k(cn.get())},get64:function(){var n=cn.get();cn.get();return n},getZero:function(){cn.get()}};function ln(){return R.length}function _n(n){n=L(n,65536);var t=E.byteLength;try{return-1!==b.grow((n-t)/65536)&&(E=b.buffer,!0)}catch(e){return!1}}var fn={abort:Bn,setTempRet0:x,getTempRet0:function(){return w},invoke_i:function(n){var t=xn();try{return An(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_ii:function(n,t){var e=xn();try{return jn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_iii:function(n,t,e){var r=xn();try{return Cn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_iiii:function(n,t,e,r){var i=xn();try{return Sn(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_iiiii:function(n,t,e,r,i){var o=xn();try{return kn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_iiiiii:function(n,t,e,r,i,o){var a=xn();try{return En(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_ji:function(n,t){var e=xn();try{return Rn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_v:function(n){var t=xn();try{Tn(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_vi:function(n,t){var e=xn();try{Dn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_vii:function(n,t,e){var r=xn();try{Mn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_viii:function(n,t,e,r){var i=xn();try{Ln(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_viiii:function(n,t,e,r,i){var o=xn();try{On(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viiiii:function(n,t,e,r,i,o){var a=xn();try{Pn(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_viiiiiii:function(n,t,e,r,i,o,a,u){var s=xn();try{In(n,t,e,r,i,o,a,u)}catch(c){if(wn(s),c!==c+0&&"longjmp"!==c)throw c;gn(1,0)}},invoke_viij:function(n,t,e,r,i){var o=xn();try{Nn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viji:function(n,t,e,r,i){var o=xn();try{Fn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},___assert_fail:function(n,t,e,r){Bn("Assertion failed: "+k(n)+", at: "+[t?k(t):"unknown filename",e,r?k(r):"unknown function"])},___cxa_allocate_exception:function(n){return vn(n)},___cxa_begin_catch:function(n){var t=nn[n];return t&&!t.caught&&(t.caught=!0,dn.uncaught_exceptions--),t&&(t.rethrown=!1),tn.push(n),en(rn(n)),n},___cxa_end_catch:function(){gn(0);var n=tn.pop();n&&(un(rn(n)),on=0)},___cxa_find_matching_catch:sn,___cxa_find_matching_catch_2:function(n,t){return sn(n,t)},___cxa_find_matching_catch_3:function(n,t,e){return sn(n,t,e)},___cxa_free_exception:an,___cxa_get_exception_ptr:function(n){return n},___cxa_pure_virtual:function(){throw A=!0,"Pure virtual function called!"},___cxa_throw:function(n,t,e){throw nn[n]={ptr:n,adjusted:[n],type:t,destructor:e,refcount:0,caught:!1,rethrown:!1},on=n,"uncaught_exception"in dn?dn.uncaught_exceptions++:dn.uncaught_exceptions=1,n},___cxa_uncaught_exceptions:function(){return dn.uncaught_exceptions},___exception_addRef:en,___exception_deAdjust:rn,___exception_decRef:un,___gxx_personality_v0:function(){},___lock:function(){},___resumeException:function(n){throw on||(on=n),n},___setErrNo:function(n){return a.___errno_location&&(D[a.___errno_location()>>2]=n),n},___syscall140:function(n,t){cn.varargs=t;try{return cn.getStreamFromFD(),cn.get(),cn.get(),cn.get(),cn.get(),0}catch(e){return"undefined"!==typeof FS&&e instanceof FS.ErrnoError||Bn(e),-e.errno}},___syscall146:function(n,t){cn.varargs=t;try{for(var e=cn.get(),r=cn.get(),i=cn.get(),o=0,a=0;a>2],s=D[r+(8*a+4)>>2],c=0;c2147418112)return!1;for(var e=Math.max(t,16777216);e>2]=t),t},_trace_pop:function(){self.WASM_TRACE&&self.WASM_TRACE.pop()},_trace_push:function(n){var t=T.indexOf(0,n),e=String.fromCharCode.apply(null,T.subarray(n,t));console.log(e),self.WASM_TRACE=self.WASM_TRACE||[],self.WASM_TRACE.push(e)},abortOnCannotGrowMemory:function(n){Bn("OOM")},emscripten_realloc_buffer:_n,flush_NO_FILESYSTEM:function(){var n=a._fflush;n&&n(0);var t=cn.buffers;t[1].length&&cn.printChar(1,10),t[2].length&&cn.printChar(2,10)},tempDoublePtr:Q,DYNAMICTOP_PTR:P},pn=a.asm({},fn,E);a.asm=pn;a._DApi_AllocPacket=function(){return a.asm._DApi_AllocPacket.apply(null,arguments)},a._DApi_Char=function(){return a.asm._DApi_Char.apply(null,arguments)},a._DApi_Init=function(){return a.asm._DApi_Init.apply(null,arguments)},a._DApi_Key=function(){return a.asm._DApi_Key.apply(null,arguments)},a._DApi_Mouse=function(){return a.asm._DApi_Mouse.apply(null,arguments)},a._DApi_Render=function(){return a.asm._DApi_Render.apply(null,arguments)},a._DApi_SyncText=function(){return a.asm._DApi_SyncText.apply(null,arguments)},a._DApi_SyncTextPtr=function(){return a.asm._DApi_SyncTextPtr.apply(null,arguments)},a._SNet_InitWebsocket=function(){return a.asm._SNet_InitWebsocket.apply(null,arguments)},a._SNet_WebsocketStatus=function(){return a.asm._SNet_WebsocketStatus.apply(null,arguments)};var dn=a.__ZSt18uncaught_exceptionv=function(){return a.asm.__ZSt18uncaught_exceptionv.apply(null,arguments)},mn=a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)},yn=a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)},hn=(a.___em_js___api_close_keyboard=function(){return a.asm.___em_js___api_close_keyboard.apply(null,arguments)},a.___em_js___api_open_keyboard=function(){return a.asm.___em_js___api_open_keyboard.apply(null,arguments)},a.___em_js__api_create_sound=function(){return a.asm.___em_js__api_create_sound.apply(null,arguments)},a.___em_js__api_create_sound_float=function(){return a.asm.___em_js__api_create_sound_float.apply(null,arguments)},a.___em_js__api_delete_sound=function(){return a.asm.___em_js__api_delete_sound.apply(null,arguments)},a.___em_js__api_draw_begin=function(){return a.asm.___em_js__api_draw_begin.apply(null,arguments)},a.___em_js__api_draw_belt=function(){return a.asm.___em_js__api_draw_belt.apply(null,arguments)},a.___em_js__api_draw_blit=function(){return a.asm.___em_js__api_draw_blit.apply(null,arguments)},a.___em_js__api_draw_clip_text=function(){return a.asm.___em_js__api_draw_clip_text.apply(null,arguments)},a.___em_js__api_draw_end=function(){return a.asm.___em_js__api_draw_end.apply(null,arguments)},a.___em_js__api_draw_text=function(){return a.asm.___em_js__api_draw_text.apply(null,arguments)},a.___em_js__api_duplicate_sound=function(){return a.asm.___em_js__api_duplicate_sound.apply(null,arguments)},a.___em_js__api_exit_game=function(){return a.asm.___em_js__api_exit_game.apply(null,arguments)},a.___em_js__api_play_sound=function(){return a.asm.___em_js__api_play_sound.apply(null,arguments)},a.___em_js__api_set_cursor=function(){return a.asm.___em_js__api_set_cursor.apply(null,arguments)},a.___em_js__api_set_volume=function(){return a.asm.___em_js__api_set_volume.apply(null,arguments)},a.___em_js__api_stop_sound=function(){return a.asm.___em_js__api_stop_sound.apply(null,arguments)},a.___em_js__api_use_websocket=function(){return a.asm.___em_js__api_use_websocket.apply(null,arguments)},a.___em_js__api_websocket_closed=function(){return a.asm.___em_js__api_websocket_closed.apply(null,arguments)},a.___em_js__api_websocket_send=function(){return a.asm.___em_js__api_websocket_send.apply(null,arguments)},a.___em_js__exit_error=function(){return a.asm.___em_js__exit_error.apply(null,arguments)},a.___em_js__get_file_contents=function(){return a.asm.___em_js__get_file_contents.apply(null,arguments)},a.___em_js__get_file_size=function(){return a.asm.___em_js__get_file_size.apply(null,arguments)},a.___em_js__put_file_contents=function(){return a.asm.___em_js__put_file_contents.apply(null,arguments)},a.___em_js__remove_file=function(){return a.asm.___em_js__remove_file.apply(null,arguments)},a.___em_js__show_alert=function(){return a.asm.___em_js__show_alert.apply(null,arguments)},a.___em_js__trace_pop=function(){return a.asm.___em_js__trace_pop.apply(null,arguments)},a.___em_js__trace_push=function(){return a.asm.___em_js__trace_push.apply(null,arguments)},a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)},a._free=function(){return a.asm._free.apply(null,arguments)}),vn=(a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)},a._malloc=function(){return a.asm._malloc.apply(null,arguments)}),gn=(a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)},a._memmove=function(){return a.asm._memmove.apply(null,arguments)},a._memset=function(){return a.asm._memset.apply(null,arguments)},a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)},a._setThrew=function(){return a.asm._setThrew.apply(null,arguments)}),bn=(a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)},a.globalCtors=function(){return a.asm.globalCtors.apply(null,arguments)}),wn=(a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)},a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)}),xn=a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)},An=a.dynCall_i=function(){return a.asm.dynCall_i.apply(null,arguments)},jn=a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)},Cn=(a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)},a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)}),Sn=a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)},kn=a.dynCall_iiiii=function(){return a.asm.dynCall_iiiii.apply(null,arguments)},En=a.dynCall_iiiiii=function(){return a.asm.dynCall_iiiiii.apply(null,arguments)},Rn=a.dynCall_ji=function(){return a.asm.dynCall_ji.apply(null,arguments)},Tn=(a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)},a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)}),Dn=a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)},Mn=a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)},Ln=a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)},On=a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)},Pn=a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)},In=(a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)},a.dynCall_viiiiiii=function(){return a.asm.dynCall_viiiiiii.apply(null,arguments)}),Nn=(a.dynCall_viiiiiiiii=function(){return a.asm.dynCall_viiiiiiiii.apply(null,arguments)},a.dynCall_viiiiiiiiii=function(){return a.asm.dynCall_viiiiiiiiii.apply(null,arguments)},a.dynCall_viij=function(){return a.asm.dynCall_viij.apply(null,arguments)}),Fn=a.dynCall_viji=function(){return a.asm.dynCall_viji.apply(null,arguments)};function Un(n){this.name="ExitStatus",this.message="Program terminated with exit("+n+")",this.status=n}a.asm=pn,a.then=function(n){if(a.calledRun)n(a);else{var t=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){t&&t(),n(a)}}return a},Un.prototype=new Error,Un.prototype.constructor=Un;function qn(n){function t(){a.calledRun||(a.calledRun=!0,A||(!0,N(U),N(q),a.onRuntimeInitialized&&a.onRuntimeInitialized(),function(){if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)W(a.postRun.shift());N(B)}()))}n=n||a.arguments,H>0||(!function(){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)n=a.preRun.shift(),F.unshift(n);var n;N(F)}(),H>0||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),t()},1)):t()))}G=function n(){a.calledRun||qn(),a.calledRun||(G=n)},a.run=qn;function Bn(n){throw a.onAbort&&a.onAbort(n),h(n+=""),v(n),A=!0,1,"abort("+n+"). Build with -s ASSERTIONS=1 for more info."}if(a.abort=Bn,a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();return a.noExitRuntime=!0,qn(),a.ready=new Promise(function(n,t){delete a.then,a.onAbort=function(n){t(n)},W(function(){n(a)})}),i}}();n.exports=i}).call(this,e(2),"/")},function(n,t,e){n.exports=e.p+"static/media/DiabloSpawn.9c2373b2.wasm"},function(n,t,e){(function(t,r){var i=function(){var n="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;return function(i){var o,a="undefined"!==typeof(i=i||{})?i:{},u={};for(o in a)a.hasOwnProperty(o)&&(u[o]=a[o]);a.arguments=[],a.thisProgram="./this.program",a.quit=function(n,t){throw t},a.preRun=[],a.postRun=[];var s,c,l=!1,_=!1;l="object"===typeof window,_="function"===typeof importScripts,s="object"===typeof t&&"object"===typeof t.versions&&"string"===typeof t.versions.node&&!l&&!_,c=!l&&!s&&!_;var f,p,d,m,y="";s?(y=r+"/",f=function(n,t){var r;return d||(d=e(3)),m||(m=e(4)),n=m.normalize(n),r=d.readFileSync(n),t?r:r.toString()},p=function(n){var t=f(n,!0);return t.buffer||(t=new Uint8Array(t)),j(t.buffer),t},t.argv.length>1&&(a.thisProgram=t.argv[1].replace(/\\/g,"/")),a.arguments=t.argv.slice(2),t.on("uncaughtException",function(n){if(!(n instanceof Un))throw n}),t.on("unhandledRejection",Bn),a.quit=function(n){t.exit(n)},a.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(f=function(n){return read(n)}),p=function(n){var t;return"function"===typeof readbuffer?new Uint8Array(readbuffer(n)):(j("object"===typeof(t=read(n,"binary"))),t)},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(n){quit(n)})):(l||_)&&(_?y=self.location.href:document.currentScript&&(y=document.currentScript.src),n&&(y=n),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",f=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.send(null),t.responseText},_&&(p=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(n,t,e){var r=new XMLHttpRequest;r.open("GET",n,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):e()},r.onerror=e,r.send(null)});var h=a.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),v=a.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||h);for(o in u)u.hasOwnProperty(o)&&(a[o]=u[o]);u=void 0;var g={"f64-rem":function(n,t){return n%t},debugger:function(){}};new Array(0);var b,w=0,x=function(n){w=n};"object"!==typeof WebAssembly&&v("no native wasm support detected");var A=!1;function j(n,t){n||Bn("Assertion failed: "+t)}var C="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(n,t,e){for(var r=t+e,i=t;n[i]&&!(i>=r);)++i;if(i-t>16&&n.subarray&&C)return C.decode(n.subarray(t,i));for(var o="";t>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|u)}else o+=String.fromCharCode(a)}return o}function k(n,t){return n?S(T,n,t):""}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var E,R,T,D,M;function L(n,t){return n%t>0&&(n+=t-n%t),n}function O(){a.HEAP8=R=new Int8Array(E),a.HEAP16=new Int16Array(E),a.HEAP32=D=new Int32Array(E),a.HEAPU8=T=new Uint8Array(E),a.HEAPU16=new Uint16Array(E),a.HEAPU32=new Uint32Array(E),a.HEAPF32=M=new Float32Array(E),a.HEAPF64=new Float64Array(E)}var P=1850896,I=a.TOTAL_MEMORY||134217728;function N(n){for(;n.length>0;){var t=n.shift();if("function"!=typeof t){var e=t.func;"number"===typeof e?void 0===t.arg?a.dynCall_v(e):a.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}I<5242880&&v("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+I+"! (TOTAL_STACK=5242880)"),(b=a.wasmMemory?a.wasmMemory:new WebAssembly.Memory({initial:I/65536}))&&(E=b.buffer),I=E.byteLength,O(),D[P>>2]=7093808;var F=[],U=[],q=[],B=[];function W(n){B.unshift(n)}Math.abs,Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt,Math.ceil,Math.floor,Math.pow,Math.imul,Math.fround,Math.round,Math.min,Math.max,Math.clz32,Math.trunc;var H=0,z=null,G=null;a.preloadedImages={},a.preloadedAudios={};var X="data:application/octet-stream;base64,";function K(n){return String.prototype.startsWith?n.startsWith(X):0===n.indexOf(X)}var Y,Z="DiabloSpawn.wasm";function J(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(p)return p(Z);throw"both async and sync fetching of the wasm failed"}catch(v){Bn(v)}}function V(n){var t={env:n,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:g};function e(n,t){var e=n.exports;a.asm=e,function(n){if(H--,a.monitorRunDependencies&&a.monitorRunDependencies(H),0==H&&(null!==z&&(clearInterval(z),z=null),G)){var t=G;G=null,t()}}()}function r(n){e(n.instance)}function i(n){return(a.wasmBinary||!l&&!_||"function"!==typeof fetch?new Promise(function(n,t){n(J())}):fetch(Z,{credentials:"same-origin"}).then(function(n){if(!n.ok)throw"failed to load wasm binary file at '"+Z+"'";return n.arrayBuffer()}).catch(function(){return J()})).then(function(n){return WebAssembly.instantiate(n,t)}).then(n,function(n){v("failed to asynchronously prepare wasm: "+n),Bn(n)})}if(H++,a.monitorRunDependencies&&a.monitorRunDependencies(H),a.instantiateWasm)try{return a.instantiateWasm(t,e)}catch(o){return v("Module.instantiateWasm callback failed with error: "+o),!1}return function(){if(a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||K(Z)||"function"!==typeof fetch)return i(r);fetch(Z,{credentials:"same-origin"}).then(function(n){return WebAssembly.instantiateStreaming(n,t).then(r,function(n){v("wasm streaming compile failed: "+n),v("falling back to ArrayBuffer instantiation"),i(r)})})}(),{}}K(Z)||(Y=Z,Z=a.locateFile?a.locateFile(Y,y):y+Y),a.asm=function(n,t,e){return t.memory=b,t.table=new WebAssembly.Table({initial:1116,maximum:1116,element:"anyfunc"}),t.__memory_base=1024,t.__table_base=0,V(t)};var $=[function(n){self.DApi.current_save_id(n)}];U.push({func:function(){bn()}});var Q=1850912;var nn={},tn=[];function en(n){n&&nn[n].refcount++}function rn(n){if(!n||nn[n])return n;for(var t in nn)for(var e=+t,r=nn[e].adjusted,i=r.length,o=0;o>2],t.adjusted.push(n),0|(x(r[i]),n);return n=D[n>>2],0|(x(e),n)}a.___cxa_find_matching_catch=sn;var cn={buffers:[null,[],[]],printChar:function(n,t){var e=cn.buffers[n];0===t||10===t?((1===n?h:v)(S(e,0)),e.length=0):e.push(t)},varargs:0,get:function(n){return cn.varargs+=4,D[cn.varargs-4>>2]},getStr:function(){return k(cn.get())},get64:function(){var n=cn.get();cn.get();return n},getZero:function(){cn.get()}};function ln(){return R.length}function _n(n){n=L(n,65536);var t=E.byteLength;try{return-1!==b.grow((n-t)/65536)&&(E=b.buffer,!0)}catch(e){return!1}}var fn={abort:Bn,setTempRet0:x,getTempRet0:function(){return w},invoke_i:function(n){var t=xn();try{return An(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_ii:function(n,t){var e=xn();try{return jn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_iii:function(n,t,e){var r=xn();try{return Cn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_iiii:function(n,t,e,r){var i=xn();try{return Sn(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_iiiii:function(n,t,e,r,i){var o=xn();try{return kn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_iiiiii:function(n,t,e,r,i,o){var a=xn();try{return En(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_ji:function(n,t){var e=xn();try{return Rn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_v:function(n){var t=xn();try{Tn(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_vi:function(n,t){var e=xn();try{Dn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_vii:function(n,t,e){var r=xn();try{Mn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_viii:function(n,t,e,r){var i=xn();try{Ln(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_viiii:function(n,t,e,r,i){var o=xn();try{On(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viiiii:function(n,t,e,r,i,o){var a=xn();try{Pn(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_viiiiiii:function(n,t,e,r,i,o,a,u){var s=xn();try{In(n,t,e,r,i,o,a,u)}catch(c){if(wn(s),c!==c+0&&"longjmp"!==c)throw c;gn(1,0)}},invoke_viij:function(n,t,e,r,i){var o=xn();try{Nn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viji:function(n,t,e,r,i){var o=xn();try{Fn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},___assert_fail:function(n,t,e,r){Bn("Assertion failed: "+k(n)+", at: "+[t?k(t):"unknown filename",e,r?k(r):"unknown function"])},___cxa_allocate_exception:function(n){return vn(n)},___cxa_begin_catch:function(n){var t=nn[n];return t&&!t.caught&&(t.caught=!0,dn.uncaught_exceptions--),t&&(t.rethrown=!1),tn.push(n),en(rn(n)),n},___cxa_end_catch:function(){gn(0);var n=tn.pop();n&&(un(rn(n)),on=0)},___cxa_find_matching_catch:sn,___cxa_find_matching_catch_2:function(n,t){return sn(n,t)},___cxa_find_matching_catch_3:function(n,t,e){return sn(n,t,e)},___cxa_free_exception:an,___cxa_get_exception_ptr:function(n){return n},___cxa_pure_virtual:function(){throw A=!0,"Pure virtual function called!"},___cxa_throw:function(n,t,e){throw nn[n]={ptr:n,adjusted:[n],type:t,destructor:e,refcount:0,caught:!1,rethrown:!1},on=n,"uncaught_exception"in dn?dn.uncaught_exceptions++:dn.uncaught_exceptions=1,n},___cxa_uncaught_exceptions:function(){return dn.uncaught_exceptions},___exception_addRef:en,___exception_deAdjust:rn,___exception_decRef:un,___gxx_personality_v0:function(){},___lock:function(){},___resumeException:function(n){throw on||(on=n),n},___setErrNo:function(n){return a.___errno_location&&(D[a.___errno_location()>>2]=n),n},___syscall140:function(n,t){cn.varargs=t;try{return cn.getStreamFromFD(),cn.get(),cn.get(),cn.get(),cn.get(),0}catch(e){return"undefined"!==typeof FS&&e instanceof FS.ErrnoError||Bn(e),-e.errno}},___syscall146:function(n,t){cn.varargs=t;try{for(var e=cn.get(),r=cn.get(),i=cn.get(),o=0,a=0;a>2],s=D[r+(8*a+4)>>2],c=0;c2147418112)return!1;for(var e=Math.max(t,16777216);e>2]=t),t},_trace_pop:function(){self.WASM_TRACE&&self.WASM_TRACE.pop()},_trace_push:function(n){var t=T.indexOf(0,n),e=String.fromCharCode.apply(null,T.subarray(n,t));console.log(e),self.WASM_TRACE=self.WASM_TRACE||[],self.WASM_TRACE.push(e)},abortOnCannotGrowMemory:function(n){Bn("OOM")},emscripten_realloc_buffer:_n,flush_NO_FILESYSTEM:function(){var n=a._fflush;n&&n(0);var t=cn.buffers;t[1].length&&cn.printChar(1,10),t[2].length&&cn.printChar(2,10)},tempDoublePtr:Q,DYNAMICTOP_PTR:P},pn=a.asm({},fn,E);a.asm=pn;a._DApi_AllocPacket=function(){return a.asm._DApi_AllocPacket.apply(null,arguments)},a._DApi_Char=function(){return a.asm._DApi_Char.apply(null,arguments)},a._DApi_Init=function(){return a.asm._DApi_Init.apply(null,arguments)},a._DApi_Key=function(){return a.asm._DApi_Key.apply(null,arguments)},a._DApi_Mouse=function(){return a.asm._DApi_Mouse.apply(null,arguments)},a._DApi_Render=function(){return a.asm._DApi_Render.apply(null,arguments)},a._DApi_SyncText=function(){return a.asm._DApi_SyncText.apply(null,arguments)},a._DApi_SyncTextPtr=function(){return a.asm._DApi_SyncTextPtr.apply(null,arguments)},a._SNet_InitWebsocket=function(){return a.asm._SNet_InitWebsocket.apply(null,arguments)},a._SNet_WebsocketStatus=function(){return a.asm._SNet_WebsocketStatus.apply(null,arguments)};var dn=a.__ZSt18uncaught_exceptionv=function(){return a.asm.__ZSt18uncaught_exceptionv.apply(null,arguments)},mn=a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)},yn=a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)},hn=(a.___em_js___api_close_keyboard=function(){return a.asm.___em_js___api_close_keyboard.apply(null,arguments)},a.___em_js___api_open_keyboard=function(){return a.asm.___em_js___api_open_keyboard.apply(null,arguments)},a.___em_js__api_create_sound=function(){return a.asm.___em_js__api_create_sound.apply(null,arguments)},a.___em_js__api_create_sound_float=function(){return a.asm.___em_js__api_create_sound_float.apply(null,arguments)},a.___em_js__api_delete_sound=function(){return a.asm.___em_js__api_delete_sound.apply(null,arguments)},a.___em_js__api_draw_begin=function(){return a.asm.___em_js__api_draw_begin.apply(null,arguments)},a.___em_js__api_draw_belt=function(){return a.asm.___em_js__api_draw_belt.apply(null,arguments)},a.___em_js__api_draw_blit=function(){return a.asm.___em_js__api_draw_blit.apply(null,arguments)},a.___em_js__api_draw_clip_text=function(){return a.asm.___em_js__api_draw_clip_text.apply(null,arguments)},a.___em_js__api_draw_end=function(){return a.asm.___em_js__api_draw_end.apply(null,arguments)},a.___em_js__api_draw_text=function(){return a.asm.___em_js__api_draw_text.apply(null,arguments)},a.___em_js__api_duplicate_sound=function(){return a.asm.___em_js__api_duplicate_sound.apply(null,arguments)},a.___em_js__api_exit_game=function(){return a.asm.___em_js__api_exit_game.apply(null,arguments)},a.___em_js__api_play_sound=function(){return a.asm.___em_js__api_play_sound.apply(null,arguments)},a.___em_js__api_set_cursor=function(){return a.asm.___em_js__api_set_cursor.apply(null,arguments)},a.___em_js__api_set_volume=function(){return a.asm.___em_js__api_set_volume.apply(null,arguments)},a.___em_js__api_stop_sound=function(){return a.asm.___em_js__api_stop_sound.apply(null,arguments)},a.___em_js__api_use_websocket=function(){return a.asm.___em_js__api_use_websocket.apply(null,arguments)},a.___em_js__api_websocket_closed=function(){return a.asm.___em_js__api_websocket_closed.apply(null,arguments)},a.___em_js__api_websocket_send=function(){return a.asm.___em_js__api_websocket_send.apply(null,arguments)},a.___em_js__exit_error=function(){return a.asm.___em_js__exit_error.apply(null,arguments)},a.___em_js__get_file_contents=function(){return a.asm.___em_js__get_file_contents.apply(null,arguments)},a.___em_js__get_file_size=function(){return a.asm.___em_js__get_file_size.apply(null,arguments)},a.___em_js__put_file_contents=function(){return a.asm.___em_js__put_file_contents.apply(null,arguments)},a.___em_js__remove_file=function(){return a.asm.___em_js__remove_file.apply(null,arguments)},a.___em_js__show_alert=function(){return a.asm.___em_js__show_alert.apply(null,arguments)},a.___em_js__trace_pop=function(){return a.asm.___em_js__trace_pop.apply(null,arguments)},a.___em_js__trace_push=function(){return a.asm.___em_js__trace_push.apply(null,arguments)},a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)},a._free=function(){return a.asm._free.apply(null,arguments)}),vn=(a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)},a._malloc=function(){return a.asm._malloc.apply(null,arguments)}),gn=(a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)},a._memmove=function(){return a.asm._memmove.apply(null,arguments)},a._memset=function(){return a.asm._memset.apply(null,arguments)},a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)},a._setThrew=function(){return a.asm._setThrew.apply(null,arguments)}),bn=(a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)},a.globalCtors=function(){return a.asm.globalCtors.apply(null,arguments)}),wn=(a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)},a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)}),xn=a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)},An=a.dynCall_i=function(){return a.asm.dynCall_i.apply(null,arguments)},jn=a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)},Cn=(a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)},a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)}),Sn=a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)},kn=a.dynCall_iiiii=function(){return a.asm.dynCall_iiiii.apply(null,arguments)},En=a.dynCall_iiiiii=function(){return a.asm.dynCall_iiiiii.apply(null,arguments)},Rn=a.dynCall_ji=function(){return a.asm.dynCall_ji.apply(null,arguments)},Tn=(a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)},a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)}),Dn=a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)},Mn=a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)},Ln=a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)},On=a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)},Pn=a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)},In=(a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)},a.dynCall_viiiiiii=function(){return a.asm.dynCall_viiiiiii.apply(null,arguments)}),Nn=(a.dynCall_viiiiiiiii=function(){return a.asm.dynCall_viiiiiiiii.apply(null,arguments)},a.dynCall_viiiiiiiiii=function(){return a.asm.dynCall_viiiiiiiiii.apply(null,arguments)},a.dynCall_viij=function(){return a.asm.dynCall_viij.apply(null,arguments)}),Fn=a.dynCall_viji=function(){return a.asm.dynCall_viji.apply(null,arguments)};function Un(n){this.name="ExitStatus",this.message="Program terminated with exit("+n+")",this.status=n}a.asm=pn,a.then=function(n){if(a.calledRun)n(a);else{var t=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){t&&t(),n(a)}}return a},Un.prototype=new Error,Un.prototype.constructor=Un;function qn(n){function t(){a.calledRun||(a.calledRun=!0,A||(!0,N(U),N(q),a.onRuntimeInitialized&&a.onRuntimeInitialized(),function(){if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)W(a.postRun.shift());N(B)}()))}n=n||a.arguments,H>0||(!function(){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)n=a.preRun.shift(),F.unshift(n);var n;N(F)}(),H>0||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),t()},1)):t()))}G=function n(){a.calledRun||qn(),a.calledRun||(G=n)},a.run=qn;function Bn(n){throw a.onAbort&&a.onAbort(n),h(n+=""),v(n),A=!0,1,"abort("+n+"). Build with -s ASSERTIONS=1 for more info."}if(a.abort=Bn,a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();return a.noExitRuntime=!0,qn(),a.ready=new Promise(function(n,t){delete a.then,a.onAbort=function(n){t(n)},W(function(){n(a)})}),i}}();n.exports=i}).call(this,e(2),"/")},function(n,t,e){n.exports=e(19)},function(n,t,e){var r=function(n){"use strict";var t,e=Object.prototype,r=e.hasOwnProperty,i="function"===typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function s(n,t,e,r){var i=t&&t.prototype instanceof m?t:m,o=Object.create(i.prototype),a=new k(r||[]);return o._invoke=function(n,t,e){var r=l;return function(i,o){if(r===f)throw new Error("Generator is already running");if(r===p){if("throw"===i)throw o;return R()}for(e.method=i,e.arg=o;;){var a=e.delegate;if(a){var u=j(a,e);if(u){if(u===d)continue;return u}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(r===l)throw r=p,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);r=f;var s=c(n,t,e);if("normal"===s.type){if(r=e.done?p:_,s.arg===d)continue;return{value:s.arg,done:e.done}}"throw"===s.type&&(r=p,e.method="throw",e.arg=s.arg)}}}(n,e,a),o}function c(n,t,e){try{return{type:"normal",arg:n.call(t,e)}}catch(r){return{type:"throw",arg:r}}}n.wrap=s;var l="suspendedStart",_="suspendedYield",f="executing",p="completed",d={};function m(){}function y(){}function h(){}var v={};v[o]=function(){return this};var g=Object.getPrototypeOf,b=g&&g(g(E([])));b&&b!==e&&r.call(b,o)&&(v=b);var w=h.prototype=m.prototype=Object.create(v);function x(n){["next","throw","return"].forEach(function(t){n[t]=function(n){return this._invoke(t,n)}})}function A(n){var t;this._invoke=function(e,i){function o(){return new Promise(function(t,o){!function t(e,i,o,a){var u=c(n[e],n,i);if("throw"!==u.type){var s=u.arg,l=s.value;return l&&"object"===typeof l&&r.call(l,"__await")?Promise.resolve(l.__await).then(function(n){t("next",n,o,a)},function(n){t("throw",n,o,a)}):Promise.resolve(l).then(function(n){s.value=n,o(s)},function(n){return t("throw",n,o,a)})}a(u.arg)}(e,i,t,o)})}return t=t?t.then(o,o):o()}}function j(n,e){var r=n.iterator[e.method];if(r===t){if(e.delegate=null,"throw"===e.method){if(n.iterator.return&&(e.method="return",e.arg=t,j(n,e),"throw"===e.method))return d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var i=c(r,n.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var o=i.arg;return o?o.done?(e[n.resultName]=o.value,e.next=n.nextLoc,"return"!==e.method&&(e.method="next",e.arg=t),e.delegate=null,d):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function C(n){var t={tryLoc:n[0]};1 in n&&(t.catchLoc=n[1]),2 in n&&(t.finallyLoc=n[2],t.afterLoc=n[3]),this.tryEntries.push(t)}function S(n){var t=n.completion||{};t.type="normal",delete t.arg,n.completion=t}function k(n){this.tryEntries=[{tryLoc:"root"}],n.forEach(C,this),this.reset(!0)}function E(n){if(n){var e=n[o];if(e)return e.call(n);if("function"===typeof n.next)return n;if(!isNaN(n.length)){var i=-1,a=function e(){for(;++i=0;--o){var a=this.tryEntries[o],u=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(s&&c){if(this.prev=0;--e){var i=this.tryEntries[e];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var e=this.tryEntries[t];if(e.finallyLoc===n)return this.complete(e.completion,e.afterLoc),S(e),d}},catch:function(n){for(var t=this.tryEntries.length-1;t>=0;--t){var e=this.tryEntries[t];if(e.tryLoc===n){var r=e.completion;if("throw"===r.type){var i=r.arg;S(e)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(n,e,r){return this.delegate={iterator:E(n),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=t),d}},n}(n.exports);try{regeneratorRuntime=r}catch(i){Function("r","regeneratorRuntime = r")(r)}},function(n,t,e){"use strict";var r=e(0),i=e(5),o=e(21),a=e(11);function u(n){var t=new o(n),e=i(o.prototype.request,t);return r.extend(e,o.prototype,t),r.extend(e,t),e}var s=u(e(8));s.Axios=o,s.create=function(n){return u(a(s.defaults,n))},s.Cancel=e(12),s.CancelToken=e(33),s.isCancel=e(7),s.all=function(n){return Promise.all(n)},s.spread=e(34),n.exports=s,n.exports.default=s},function(n,t){n.exports=function(n){return null!=n&&null!=n.constructor&&"function"===typeof n.constructor.isBuffer&&n.constructor.isBuffer(n)}},function(n,t,e){"use strict";var r=e(0),i=e(6),o=e(22),a=e(23),u=e(11);function s(n){this.defaults=n,this.interceptors={request:new o,response:new o}}s.prototype.request=function(n){"string"===typeof n?(n=arguments[1]||{}).url=arguments[0]:n=n||{},(n=u(this.defaults,n)).method=n.method?n.method.toLowerCase():"get";var t=[a,void 0],e=Promise.resolve(n);for(this.interceptors.request.forEach(function(n){t.unshift(n.fulfilled,n.rejected)}),this.interceptors.response.forEach(function(n){t.push(n.fulfilled,n.rejected)});t.length;)e=e.then(t.shift(),t.shift());return e},s.prototype.getUri=function(n){return n=u(this.defaults,n),i(n.url,n.params,n.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],function(n){s.prototype[n]=function(t,e){return this.request(r.merge(e||{},{method:n,url:t}))}}),r.forEach(["post","put","patch"],function(n){s.prototype[n]=function(t,e,i){return this.request(r.merge(i||{},{method:n,url:t,data:e}))}}),n.exports=s},function(n,t,e){"use strict";var r=e(0);function i(){this.handlers=[]}i.prototype.use=function(n,t){return this.handlers.push({fulfilled:n,rejected:t}),this.handlers.length-1},i.prototype.eject=function(n){this.handlers[n]&&(this.handlers[n]=null)},i.prototype.forEach=function(n){r.forEach(this.handlers,function(t){null!==t&&n(t)})},n.exports=i},function(n,t,e){"use strict";var r=e(0),i=e(24),o=e(7),a=e(8),u=e(31),s=e(32);function c(n){n.cancelToken&&n.cancelToken.throwIfRequested()}n.exports=function(n){return c(n),n.baseURL&&!u(n.url)&&(n.url=s(n.baseURL,n.url)),n.headers=n.headers||{},n.data=i(n.data,n.headers,n.transformRequest),n.headers=r.merge(n.headers.common||{},n.headers[n.method]||{},n.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(t){delete n.headers[t]}),(n.adapter||a.adapter)(n).then(function(t){return c(n),t.data=i(t.data,t.headers,n.transformResponse),t},function(t){return o(t)||(c(n),t&&t.response&&(t.response.data=i(t.response.data,t.response.headers,n.transformResponse))),Promise.reject(t)})}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t,e){return r.forEach(e,function(e){n=e(n,t)}),n}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t){r.forEach(n,function(e,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(n[t]=e,delete n[r])})}},function(n,t,e){"use strict";var r=e(10);n.exports=function(n,t,e){var i=e.config.validateStatus;!i||i(e.status)?n(e):t(r("Request failed with status code "+e.status,e.config,null,e.request,e))}},function(n,t,e){"use strict";n.exports=function(n,t,e,r,i){return n.config=t,e&&(n.code=e),n.request=r,n.response=i,n.isAxiosError=!0,n.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},n}},function(n,t,e){"use strict";var r=e(0),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];n.exports=function(n){var t,e,o,a={};return n?(r.forEach(n.split("\n"),function(n){if(o=n.indexOf(":"),t=r.trim(n.substr(0,o)).toLowerCase(),e=r.trim(n.substr(o+1)),t){if(a[t]&&i.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([e]):a[t]?a[t]+", "+e:e}}),a):a}},function(n,t,e){"use strict";var r=e(0);n.exports=r.isStandardBrowserEnv()?function(){var n,t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");function i(n){var r=n;return t&&(e.setAttribute("href",r),r=e.href),e.setAttribute("href",r),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname}}return n=i(window.location.href),function(t){var e=r.isString(t)?i(t):t;return e.protocol===n.protocol&&e.host===n.host}}():function(){return!0}},function(n,t,e){"use strict";var r=e(0);n.exports=r.isStandardBrowserEnv()?{write:function(n,t,e,i,o,a){var u=[];u.push(n+"="+encodeURIComponent(t)),r.isNumber(e)&&u.push("expires="+new Date(e).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),!0===a&&u.push("secure"),document.cookie=u.join("; ")},read:function(n){var t=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(n){this.write(n,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(n,t,e){"use strict";n.exports=function(n){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(n)}},function(n,t,e){"use strict";n.exports=function(n,t){return t?n.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):n}},function(n,t,e){"use strict";var r=e(12);function i(n){if("function"!==typeof n)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(n){t=n});var e=this;n(function(n){e.reason||(e.reason=new r(n),t(e.reason))})}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var n;return{token:new i(function(t){n=t}),cancel:n}},n.exports=i},function(n,t,e){"use strict";n.exports=function(n){return function(t){return n.apply(null,t)}}},function(n,t,e){"use strict";function r(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var e=[],r=!0,i=!1,o=void 0;try{for(var a,u=n[Symbol.iterator]();!(r=(a=u.next()).done)&&(e.push(a.value),!t||e.length!==t);r=!0);}catch(s){i=!0,o=s}finally{try{r||null==u.return||u.return()}finally{if(i)throw o}}return e}(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}e.r(t);var i=e(1),o=e.n(i);function a(n){return function(n){if(Array.isArray(n)){for(var t=0,e=new Array(n.length);t>8;var e=3,o=!0,a=!1,u=void 0;try{for(var s,c=i[Symbol.iterator]();!(o=(s=c.next()).done);o=!0){var l=s.value;t.set(l,e),e+=l.byteLength}}catch(_){a=!0,u=_}finally{try{o||null==c.return||c.return()}finally{if(a)throw u}}r.send(t),i.length=0}},100):r.close(),e(0)},function(n){e(n)}),a}var x=1466809,A=1337416,j=self,C=null,S=null,k=null,E=null,R=null,T=null,D=!1,M=null;function L(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"error";n instanceof Error?j.postMessage({action:t,error:n.toString(),stack:n.stack}):j.postMessage({action:t,error:n.toString()})}var O=1<<20,P=function(){function n(t){!function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n);var e=new XMLHttpRequest;if(e.open("HEAD",t,!1),e.send(),e.status<200||e.status>=300)throw Error("Failed to load remote file");this.byteLength=parseInt(e.getResponseHeader("Content-Length")),this.url=t,this.buffer=new Uint8Array(this.byteLength),this.chunks=new Uint8Array(this.byteLength+O-1>>20|0)}var t,e,r;return t=n,(e=[{key:"subarray",value:function(n,t){for(var e=n/O|0,r=(t+O-1)/O|0,i=r,o=e,a=e;a=300)throw Error("Failed to load remote file");var s,c=u.getResponseHeader("Content-Range"),l=0;c&&(s=c.match(/bytes (\d+)-(\d+)\/(\d+)/))&&(l=parseInt(s[1])),this.buffer.set(new Uint8Array(u.response),l),e=(l+O-1)/O|0,r=(l+u.response.byteLength+O-1)/O|0;for(var _=e;_=0?D?"spawn".concat(n,".sv"):"single_".concat(n,".sv"):null})},get_file_size:function(n){var t=E.get(n.toLowerCase());return t?t.byteLength:0},get_file_contents:function(n,t,e){var r=E.get(n.toLowerCase());r&&t.set(r.subarray(e,e+t.byteLength))},put_file_contents:function(n,t){n=n.toLowerCase(),E.set(n,t),j.postMessage({action:"fs",func:"update",params:[n,t]})},remove_file:function(n){n=n.toLowerCase(),E.delete(n),j.postMessage({action:"fs",func:"delete",params:[n]})},set_cursor:function(n,t){j.postMessage({action:"cursor",x:n,y:t})},open_keyboard:function(){for(var n=arguments.length,t=new Array(n),e=0;e>16&255,o=r>>8&255,a=255&r;S.fillStyle="rgb(".concat(i,", ").concat(o,", ").concat(a,")"),S.fillText(e,n,t+22)},draw_end:function(){S.restore();var n=C.transferToImageBitmap(),t=[n];T&&t.push(T.buffer),j.postMessage({action:"render",batch:{bitmap:n,belt:T}},t),T=null},draw_belt:function(n){T=n.slice()}},U=null,q=null,B=0,W=0;["create_sound_raw","create_sound","duplicate_sound"].forEach(function(n){I[n]=function(){for(var t=arguments.length,e=new Array(t),r=0;r=B?U.push({func:n,params:e}):j.postMessage({action:"audio",func:n,params:e})}});var H=null;I.websocket_send=function(n){M?M.send(n):H?H.push(n.slice().buffer):j.postMessage({action:"packet",buffer:n})},j.DApi=I;var z=null;function G(n){try{n()}catch(t){L(t)}}function X(n){for(var t=arguments.length,e=new Array(t>1?t-1:0),r=1;r undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\n\n\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\n\n\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n } // Force an array if not already something iterable\n\n\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction merge()\n/* obj1, obj2, obj3, ... */\n{\n var result = {};\n\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction deepMerge()\n/* obj1, obj2, obj3, ... */\n{\n var result = {};\n\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\n\n\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};","module.exports = require(\"regenerator-runtime\");\n","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n} // path.resolve([from ...], to)\n// posix version\n\n\nexports.resolve = function () {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries\n\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n } // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n\n\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}; // path.normalize(path)\n// posix version\n\n\nexports.normalize = function (path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/'; // Normalize the path\n\n path = normalizeArray(filter(path.split('/'), function (p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n}; // posix version\n\n\nexports.isAbsolute = function (path) {\n return path.charAt(0) === '/';\n}; // posix version\n\n\nexports.join = function () {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function (p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n\n return p;\n }).join('/'));\n}; // path.relative(from, to)\n// posix version\n\n\nexports.relative = function (from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47\n /*/*/\n ;\n var end = -1;\n var matchedSlash = true;\n\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n} // Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\n\n\nexports.basename = function (path, ext) {\n var f = basename(path);\n\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n\n var preDotState = 0;\n\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n\n continue;\n }\n\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46\n /*.*/\n ) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot\n preDotState === 0 || // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n\n return path.slice(startDot, end);\n};\n\nfunction filter(xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n\n return res;\n} // String.prototype.substr - negative index don't work in IE8\n\n\nvar substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {\n return str.substr(start, len);\n} : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n return fn.apply(thisArg, args);\n };\n};","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\n\n\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};","'use strict';\n\nvar utils = require('./utils');\n\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter; // Only Node.JS has a process variable that is of [[Class]] process\n\n if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n }\n\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) {\n /* Ignore */\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\nmodule.exports = defaults;","'use strict';\n\nvar utils = require('./../utils');\n\nvar settle = require('./../core/settle');\n\nvar buildURL = require('./../helpers/buildURL');\n\nvar parseHeaders = require('./../helpers/parseHeaders');\n\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\n\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest(); // HTTP basic authentication\n\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); // Set the request timeout in MS\n\n request.timeout = config.timeout; // Listen for ready state\n\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n } // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n\n\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n } // Prepare the response\n\n\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n settle(resolve, reject, response); // Clean up request\n\n request = null;\n }; // Handle browser request cancellation (as opposed to a manual cancellation)\n\n\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Handle low level network errors\n\n\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request)); // Clean up request\n\n request = null;\n }; // Handle timeout\n\n\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies'); // Add xsrf header\n\n\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n } // Add headers to the request\n\n\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n } // Add withCredentials to request if needed\n\n\n if (config.withCredentials) {\n request.withCredentials = true;\n } // Add responseType to request if needed\n\n\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n } // Handle progress if needed\n\n\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n } // Not all browsers support upload events\n\n\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel); // Clean up request\n\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n } // Send the request\n\n\n request.send(requestData);\n });\n};","'use strict';\n\nvar enhanceError = require('./enhanceError');\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\n\n\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};","'use strict';\n\nvar utils = require('../utils');\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\n\n\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n utils.forEach(['baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath'], function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n return config;\n};","'use strict';\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\n\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\nmodule.exports = Cancel;","module.exports = __webpack_public_path__ + \"static/media/Diablo.570bd59a.wasm\";","\r\nvar Diablo = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(Diablo) {\r\n Diablo = Diablo || {};\r\n\r\n// Copyright 2010 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof Diablo !== 'undefined' ? Diablo : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// Determine the runtime environment we are in. You can customize this by\r\n// setting the ENVIRONMENT setting at compile time (see settings.js).\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_HAS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\n// A web environment like Electron.js can have Node enabled, so we must\r\n// distinguish between Node-enabled environments and Node environments per se.\r\n// This will allow the former to do things like mount NODEFS.\r\n// Extended check using process.versions fixes issue #8816.\r\n// (Also makes redundant the original check that 'require' is a function.)\r\nENVIRONMENT_HAS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\r\nENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\n// Hooks that are implemented differently in different runtime environments.\r\nvar read_,\r\n readAsync,\r\n readBinary,\r\n setWindowTitle;\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n read_ = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n readBinary = function readBinary(filename) {\r\n var ret = read_(filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', abort);\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n read_ = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n readBinary = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\r\n scriptDirectory = self.location.href;\r\n } else if (document.currentScript) { // web\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\r\n // and scriptDirectory will correctly be replaced with an empty string.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n read_ = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n readBinary = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n readAsync = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n setWindowTitle = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\r\n\r\n// TODO remove when SDL2 is fixed; also add the above assertion\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n if (end > _emscripten_get_heap_size()) {\r\n abort();\r\n }\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n return Math.ceil(size / factor) * factor;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// Wraps a JS function as a wasm function with a given signature.\r\n// In the future, we may get a WebAssembly.Function constructor. Until then,\r\n// we create a wasm module that takes the JS function as an import with a given\r\n// signature, and re-exports that as a wasm function.\r\nfunction convertJsFunctionToWasm(func, sig) {\r\n\r\n // The module is static, with the exception of the type section, which is\r\n // generated based on the signature passed in.\r\n var typeSection = [\r\n 0x01, // id: section,\r\n 0x00, // length: 0 (placeholder)\r\n 0x01, // count: 1\r\n 0x60, // form: func\r\n ];\r\n var sigRet = sig.slice(0, 1);\r\n var sigParam = sig.slice(1);\r\n var typeCodes = {\r\n 'i': 0x7f, // i32\r\n 'j': 0x7e, // i64\r\n 'f': 0x7d, // f32\r\n 'd': 0x7c, // f64\r\n };\r\n\r\n // Parameters, length + signatures\r\n typeSection.push(sigParam.length);\r\n for (var i = 0; i < sigParam.length; ++i) {\r\n typeSection.push(typeCodes[sigParam[i]]);\r\n }\r\n\r\n // Return values, length + signatures\r\n // With no multi-return in MVP, either 0 (void) or 1 (anything else)\r\n if (sigRet == 'v') {\r\n typeSection.push(0x00);\r\n } else {\r\n typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);\r\n }\r\n\r\n // Write the overall length of the type section back into the section header\r\n // (excepting the 2 bytes for the section id and length)\r\n typeSection[1] = typeSection.length - 2;\r\n\r\n // Rest of the module is static\r\n var bytes = new Uint8Array([\r\n 0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\r\n 0x01, 0x00, 0x00, 0x00, // version: 1\r\n ].concat(typeSection, [\r\n 0x02, 0x07, // import section\r\n // (import \"e\" \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\r\n 0x07, 0x05, // export section\r\n // (export \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x66, 0x00, 0x00,\r\n ]));\r\n\r\n // We can compile this wasm module synchronously because it is very small.\r\n // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\r\n var module = new WebAssembly.Module(bytes);\r\n var instance = new WebAssembly.Instance(module, {\r\n e: {\r\n f: func\r\n }\r\n });\r\n var wrappedFunc = instance.exports.f;\r\n return wrappedFunc;\r\n}\r\n\r\n// Add a wasm function to the table.\r\nfunction addFunctionWasm(func, sig) {\r\n var table = wasmTable;\r\n var ret = table.length;\r\n\r\n // Grow the table\r\n try {\r\n table.grow(1);\r\n } catch (err) {\r\n if (!err instanceof RangeError) {\r\n throw err;\r\n }\r\n throw 'Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.';\r\n }\r\n\r\n // Insert new element\r\n try {\r\n // Attempting to call this with JS function will cause of table.set() to fail\r\n table.set(ret, func);\r\n } catch (err) {\r\n if (!err instanceof TypeError) {\r\n throw err;\r\n }\r\n assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction');\r\n var wrapped = convertJsFunctionToWasm(func, sig);\r\n table.set(ret, wrapped);\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nfunction removeFunctionWasm(index) {\r\n // TODO(sbc): Look into implementing this to allow re-using of table slots\r\n}\r\n\r\n// 'sig' parameter is required for the llvm backend but only when func is not\r\n// already a WebAssembly function.\r\nfunction addFunction(func, sig) {\r\n\r\n\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n\r\n}\r\n\r\nfunction removeFunction(index) {\r\n\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\nvar tempRet0 = 0;\r\n\r\nvar setTempRet0 = function(value) {\r\n tempRet0 = value;\r\n};\r\n\r\nvar getTempRet0 = function() {\r\n return tempRet0;\r\n};\r\n\r\n\r\nvar Runtime = {\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\nif (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n}\r\n\r\n\r\n// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.\r\n// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// Wasm globals\r\n\r\nvar wasmMemory;\r\n\r\n// Potentially used for direct table calls.\r\nvar wasmTable;\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\n// whether we are quitting the application. no code should run after this.\r\n// set in exit() and abort()\r\nvar ABORT = false;\r\n\r\n// set by exit() and abort(). Passed to 'onExit' handler.\r\n// NOTE: This is also used as the process return code code in shell environments\r\n// but only when noExitRuntime is false.\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n // For fast lookup of conversion functions\r\n var toC = {\r\n 'string': function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n },\r\n 'array': function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n }\r\n };\r\n\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return UTF8ToString(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 3; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [_malloc,\r\n stackAlloc,\r\n dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n\r\n\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n abort(\"this function has been removed - you should use UTF8ToString(ptr, maxBytesToRead) instead!\");\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAPU8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\n\r\n/**\r\n * @param {number} idx\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\r\n var endIdx = idx + maxBytesToRead;\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)\r\n while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var str = '';\r\n // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that\r\n while (idx < endPtr) {\r\n // For UTF8 byte structure, see:\r\n // http://en.wikipedia.org/wiki/UTF-8#Description\r\n // https://www.ietf.org/rfc/rfc2279.txt\r\n // https://tools.ietf.org/html/rfc3629\r\n var u0 = u8Array[idx++];\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n var u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n var u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63);\r\n }\r\n\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a\r\n// copy of that string as a Javascript String object.\r\n// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit\r\n// this parameter to scan the string until the first \\0 byte. If maxBytesToRead is\r\n// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the\r\n// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will\r\n// not produce a string of exact length [ptr, ptr+maxBytesToRead[)\r\n// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may\r\n// throw JS JIT optimizations off, so it is worth to consider consistently using one\r\n// style or the other.\r\n/**\r\n * @param {number} ptr\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ToString(ptr, maxBytesToRead) {\r\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) ++len;\r\n else if (u <= 0x7FF) len += 2;\r\n else if (u <= 0xFFFF) len += 3;\r\n else len += 4;\r\n }\r\n return len;\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (y + ' [' + x + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\n\r\nvar STATIC_BASE = 1024,\r\n STACK_BASE = 1875744,\r\n STACKTOP = STACK_BASE,\r\n STACK_MAX = 7118624,\r\n DYNAMIC_BASE = 7118624,\r\n DYNAMICTOP_PTR = 1875712;\r\n\r\n\r\n\r\n\r\nvar TOTAL_STACK = 5242880;\r\n\r\nvar INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (INITIAL_TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n\r\n\r\n\r\n if (Module['wasmMemory']) {\r\n wasmMemory = Module['wasmMemory'];\r\n } else {\r\n wasmMemory = new WebAssembly.Memory({\r\n 'initial': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE\r\n });\r\n }\r\n\r\n\r\nif (wasmMemory) {\r\n buffer = wasmMemory.buffer;\r\n}\r\n\r\n// If the user provides an incorrect length, just use that length instead rather than providing the user to\r\n// specifically provide the memory length with Module['TOTAL_MEMORY'].\r\nINITIAL_TOTAL_MEMORY = buffer.byteLength;\r\nupdateGlobalBufferViews();\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction initRuntime() {\r\n runtimeInitialized = true;\r\n \r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n \r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// Module.preRun (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nvar wasmBinaryFile = 'Diablo.wasm';\r\nif (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n}\r\n\r\nfunction getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (readBinary) {\r\n return readBinary(wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n}\r\n\r\nfunction getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n}\r\n\r\n\r\n\r\n// Create the wasm instance.\r\n// Receives the wasm imports, returns the exports.\r\nfunction createWasm(env) {\r\n\r\n // prepare imports\r\n var info = {\r\n 'env': env\r\n ,\r\n 'global': {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n },\r\n 'global.Math': Math,\r\n 'asm2wasm': asm2wasmImports\r\n };\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n var exports = instance.exports;\r\n Module['asm'] = exports;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\r\n // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.\r\n receiveInstance(output['instance']);\r\n }\r\n\r\n\r\n function instantiateArrayBuffer(receiver) {\r\n return getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver, function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n\r\n // Prefer streaming instantiation if available.\r\n function instantiateAsync() {\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {\r\n return WebAssembly.instantiateStreaming(response, info)\r\n .then(receiveInstantiatedSource, function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n });\r\n } else {\r\n return instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n }\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n var exports = Module['instantiateWasm'](info, receiveInstance);\r\n return exports;\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n instantiateAsync();\r\n return {}; // no exports yet; we'll fill them in later\r\n}\r\n\r\n// Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n// the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n// doesn't need to care that it is wasm or asm.js.\r\n\r\nModule['asm'] = function(global, env, providedBuffer) {\r\n // memory was already allocated (so js could use the buffer)\r\n env['memory'] = wasmMemory\r\n ;\r\n // import table\r\n env['table'] = wasmTable = new WebAssembly.Table({\r\n 'initial': 1116,\r\n 'maximum': 1116,\r\n 'element': 'anyfunc'\r\n });\r\n // With the wasm backend __memory_base and __table_base and only needed for\r\n // relocatable output.\r\n env['__memory_base'] = 1024; // tell the memory segments where to place themselves\r\n // table starts at 0 by default (even in dynamic linking, for the main module)\r\n env['__table_base'] = 0;\r\n\r\n var exports = createWasm(env);\r\n return exports;\r\n};\r\n\r\n// Globals used by JS i64 conversions\r\nvar tempDouble;\r\nvar tempI64;\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [function($0) { self.DApi.current_save_id($0); }];\r\n\r\nfunction _emscripten_asm_const_ii(code, a0) {\r\n return ASM_CONSTS[code](a0);\r\n}\r\nfunction __api_close_keyboard(){ self.DApi.close_keyboard(); }\r\nfunction __api_open_keyboard(x0,y0,x1,y1,len){ self.DApi.open_keyboard(x0, y0, x1, y1, len); }\r\nfunction _api_create_sound(id,ptr,size){ self.DApi.create_sound(id, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _api_create_sound_float(id,ptr,samples,channels,rate){ self.DApi.create_sound_raw(id, HEAPF32.slice(ptr / 4, ptr / 4 + samples * channels), samples, channels, rate); }\r\nfunction _api_delete_sound(id){ self.DApi.delete_sound(id); }\r\nfunction _api_draw_begin(){ self.DApi.draw_begin(); }\r\nfunction _api_draw_belt(items){ self.DApi.draw_belt(HEAP32.subarray(items / 4, items / 4 + 8)); }\r\nfunction _api_draw_blit(x,y,w,h,ptr){ self.DApi.draw_blit(x, y, w, h, HEAPU8.subarray(ptr, ptr + w * h * 4)); }\r\nfunction _api_draw_clip_text(x0,y0,x1,y1){ self.DApi.draw_clip_text(x0, y0, x1, y1); }\r\nfunction _api_draw_end(){ self.DApi.draw_end(); }\r\nfunction _api_draw_text(x,y,ptr,color){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); self.DApi.draw_text(x, y, text, color); }\r\nfunction _api_duplicate_sound(id,srcId){ self.DApi.duplicate_sound(id, srcId); }\r\nfunction _api_exit_game(){ self.DApi.exit_game(); }\r\nfunction _api_play_sound(id,volume,pan,loop){ self.DApi.play_sound(id, volume, pan, loop); }\r\nfunction _api_set_cursor(x,y){ self.DApi.set_cursor(x, y); }\r\nfunction _api_set_volume(id,volume){ self.DApi.set_volume(id, volume); }\r\nfunction _api_stop_sound(id){ self.DApi.stop_sound(id); }\r\nfunction _api_use_websocket(use){ self.DApi.use_websocket(use); }\r\nfunction _api_websocket_closed(){ return self.DApi.websocket_closed(); }\r\nfunction _api_websocket_send(ptr,size){ self.DApi.websocket_send(HEAPU8.subarray(ptr, ptr + size)); }\r\nfunction _exit_error(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply(null, HEAPU8.subarray( err, end )); self.DApi.exit_error( text ); }\r\nfunction _get_file_contents(path,ptr,offset,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.get_file_contents(text, HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _get_file_size(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); return self.DApi.get_file_size(text); }\r\nfunction _put_file_contents(path,ptr,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end)); self.DApi.put_file_contents(text, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _remove_file(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.remove_file( text ); }\r\nfunction _show_alert(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply( null, HEAPU8.subarray( err, end ) ); self.alert( text ); }\r\nfunction _trace_pop(){ if (self.WASM_TRACE) { self.WASM_TRACE.pop(); } }\r\nfunction _trace_push(ptr){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); console.log(text); self.WASM_TRACE = self.WASM_TRACE || []; self.WASM_TRACE.push(text); }\r\n\r\n\r\n\r\n// STATICTOP = STATIC_BASE + 1874720;\r\n/* global initializers */ __ATINIT__.push({ func: function() { globalCtors() } });\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = 1875728\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + UTF8ToString(condition) + ', at: ' + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n \r\n var ___exception_infos={};\r\n \r\n var ___exception_caught= [];\r\n \r\n function ___exception_addRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount++;\r\n }\r\n \r\n function ___exception_deAdjust(adjusted) {\r\n if (!adjusted || ___exception_infos[adjusted]) return adjusted;\r\n for (var key in ___exception_infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var adj = ___exception_infos[ptr].adjusted;\r\n var len = adj.length;\r\n for (var i = 0; i < len; i++) {\r\n if (adj[i] === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n }\r\n return adjusted;\r\n }function ___cxa_begin_catch(ptr) {\r\n var info = ___exception_infos[ptr];\r\n if (info && !info.caught) {\r\n info.caught = true;\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions--;\r\n }\r\n if (info) info.rethrown = false;\r\n ___exception_caught.push(ptr);\r\n ___exception_addRef(___exception_deAdjust(ptr));\r\n return ptr;\r\n }\r\n\r\n \r\n var ___exception_last=0;\r\n \r\n \r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) {\r\n }\r\n }function ___exception_decRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete ___exception_infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n }\r\n \r\n function ___cxa_end_catch() {\r\n // Clear state flag.\r\n _setThrew(0);\r\n // Call destructor if one is registered then clear it.\r\n var ptr = ___exception_caught.pop();\r\n if (ptr) {\r\n ___exception_decRef(___exception_deAdjust(ptr));\r\n ___exception_last = 0; // XXX in decRef?\r\n }\r\n }\r\n\r\n \r\n \r\n function ___resumeException(ptr) {\r\n if (!___exception_last) { ___exception_last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = ___exception_last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = ___exception_infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = ___cxa_is_pointer_type(throwntype);\r\n // can_catch receives a **, add indirection\r\n var buffer = 1875696;\r\n HEAP32[((buffer)>>2)]=thrown;\r\n thrown = buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && ___cxa_can_catch(typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted.push(thrown);\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }\r\n Module[\"___cxa_find_matching_catch\"] = ___cxa_find_matching_catch;function ___cxa_find_matching_catch_2(a0,a1\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1);\r\n }\r\n\r\n function ___cxa_find_matching_catch_3(a0,a1,a2\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1,a2);\r\n }\r\n\r\n\r\n function ___cxa_get_exception_ptr(ptr) {\r\n // TODO: use info.adjusted?\r\n return ptr;\r\n }\r\n\r\n function ___cxa_pure_virtual() {\r\n ABORT = true;\r\n throw 'Pure virtual function called!';\r\n }\r\n\r\n function ___cxa_throw(ptr, type, destructor) {\r\n ___exception_infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: [ptr],\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n ___exception_last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___cxa_uncaught_exceptions() {\r\n return __ZSt18uncaught_exceptionv.uncaught_exceptions;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n function ___lock() {}\r\n\r\n\r\n \r\n \r\n var PATH={splitPath:function (filename) {\r\n var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\n return splitPathRe.exec(filename).slice(1);\r\n },normalizeArray:function (parts, allowAboveRoot) {\r\n // if the path tries to go above the root, `up` ends up > 0\r\n var up = 0;\r\n for (var i = parts.length - 1; i >= 0; i--) {\r\n var last = parts[i];\r\n if (last === '.') {\r\n parts.splice(i, 1);\r\n } else if (last === '..') {\r\n parts.splice(i, 1);\r\n up++;\r\n } else if (up) {\r\n parts.splice(i, 1);\r\n up--;\r\n }\r\n }\r\n // if the path is allowed to go above the root, restore leading ..s\r\n if (allowAboveRoot) {\r\n for (; up; up--) {\r\n parts.unshift('..');\r\n }\r\n }\r\n return parts;\r\n },normalize:function (path) {\r\n var isAbsolute = path.charAt(0) === '/',\r\n trailingSlash = path.substr(-1) === '/';\r\n // Normalize the path\r\n path = PATH.normalizeArray(path.split('/').filter(function(p) {\r\n return !!p;\r\n }), !isAbsolute).join('/');\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n return (isAbsolute ? '/' : '') + path;\r\n },dirname:function (path) {\r\n var result = PATH.splitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n return root + dir;\r\n },basename:function (path) {\r\n // EMSCRIPTEN return '/'' for '/', not an empty string\r\n if (path === '/') return '/';\r\n var lastSlash = path.lastIndexOf('/');\r\n if (lastSlash === -1) return path;\r\n return path.substr(lastSlash+1);\r\n },extname:function (path) {\r\n return PATH.splitPath(path)[3];\r\n },join:function () {\r\n var paths = Array.prototype.slice.call(arguments, 0);\r\n return PATH.normalize(paths.join('/'));\r\n },join2:function (l, r) {\r\n return PATH.normalize(l + '/' + r);\r\n }};var SYSCALLS={buffers:[null,[],[]],printChar:function (stream, curr) {\r\n var buffer = SYSCALLS.buffers[stream];\r\n if (curr === 0 || curr === 10) {\r\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\r\n buffer.length = 0;\r\n } else {\r\n buffer.push(curr);\r\n }\r\n },varargs:0,get:function (varargs) {\r\n SYSCALLS.varargs += 4;\r\n var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\r\n return ret;\r\n },getStr:function () {\r\n var ret = UTF8ToString(SYSCALLS.get());\r\n return ret;\r\n },get64:function () {\r\n var low = SYSCALLS.get(), high = SYSCALLS.get();\r\n return low;\r\n },getZero:function () {\r\n SYSCALLS.get();\r\n }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // llseek\r\n var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n \r\n function flush_NO_FILESYSTEM() {\r\n // flush anything remaining in the buffers during shutdown\r\n var fflush = Module[\"_fflush\"];\r\n if (fflush) fflush(0);\r\n var buffers = SYSCALLS.buffers;\r\n if (buffers[1].length) SYSCALLS.printChar(1, 10);\r\n if (buffers[2].length) SYSCALLS.printChar(2, 10);\r\n }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // writev\r\n // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0\r\n var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\r\n var ret = 0;\r\n for (var i = 0; i < iovcnt; i++) {\r\n var ptr = HEAP32[(((iov)+(i*8))>>2)];\r\n var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\r\n for (var j = 0; j < len; j++) {\r\n SYSCALLS.printChar(stream, HEAPU8[ptr+j]);\r\n }\r\n ret += len;\r\n }\r\n return ret;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // ioctl\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // close\r\n var stream = SYSCALLS.getStreamFromFD();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___unlock() {}\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n var _emscripten_asm_const_int=true;\r\n\r\n function _emscripten_get_heap_size() {\r\n return HEAP8.length;\r\n }\r\n\r\n function _exit(status) {\r\n // void _exit(int status);\r\n // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html\r\n exit(status);\r\n }\r\n\r\n \r\n\r\n function _llvm_eh_typeid_for(type) {\r\n return type;\r\n }\r\n\r\n function _llvm_trap() {\r\n abort('trap!');\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n }\r\n \r\n \r\n function abortOnCannotGrowMemory(requestedSize) {\r\n abort('OOM');\r\n }\r\n \r\n function emscripten_realloc_buffer(size) {\r\n var PAGE_MULTIPLE = 65536;\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var oldSize = buffer.byteLength;\r\n // native wasm support\r\n // note that this is *not* threadsafe. multiple threads can call .grow(), and each\r\n // presents a delta, so in theory we may over-allocate here (e.g. if two threads\r\n // ask to grow from 256MB to 512MB, we get 2 requests to add +256MB, and may end\r\n // up growing to 768MB (even though we may have been able to make do with 512MB).\r\n // TODO: consider decreasing the step sizes in emscripten_resize_heap\r\n try {\r\n var result = wasmMemory.grow((size - oldSize) / 65536); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n buffer = wasmMemory.buffer;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n }function _emscripten_resize_heap(requestedSize) {\r\n var oldSize = _emscripten_get_heap_size();\r\n // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.\r\n \r\n \r\n var PAGE_MULTIPLE = 65536;\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n \r\n if (requestedSize > LIMIT) {\r\n return false;\r\n }\r\n \r\n var MIN_TOTAL_MEMORY = 16777216;\r\n var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n \r\n // TODO: see realloc_buffer - for PTHREADS we may want to decrease these jumps\r\n while (newSize < requestedSize) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (newSize <= 536870912) {\r\n newSize = alignUp(2 * newSize, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n \r\n }\r\n \r\n \r\n \r\n \r\n if (!emscripten_realloc_buffer(newSize)) {\r\n return false;\r\n }\r\n \r\n updateGlobalBufferViews();\r\n \r\n \r\n \r\n return true;\r\n } \r\n\r\n function _time(ptr) {\r\n var ret = (Date.now()/1000)|0;\r\n if (ptr) {\r\n HEAP32[((ptr)>>2)]=ret;\r\n }\r\n return ret;\r\n }\r\nvar ASSERTIONS = false;\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n// ASM_LIBRARY EXTERN PRIMITIVES: Int8Array,Int32Array\r\n\r\n\r\nfunction invoke_i(index) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_i(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ii(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ji(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_v(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vi(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viij(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viij(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viji(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nvar asmGlobalArg = {};\r\n\r\nvar asmLibraryArg = {\r\n \"abort\": abort,\r\n \"setTempRet0\": setTempRet0,\r\n \"getTempRet0\": getTempRet0,\r\n \"invoke_i\": invoke_i,\r\n \"invoke_ii\": invoke_ii,\r\n \"invoke_iii\": invoke_iii,\r\n \"invoke_iiii\": invoke_iiii,\r\n \"invoke_iiiii\": invoke_iiiii,\r\n \"invoke_iiiiii\": invoke_iiiiii,\r\n \"invoke_ji\": invoke_ji,\r\n \"invoke_v\": invoke_v,\r\n \"invoke_vi\": invoke_vi,\r\n \"invoke_vii\": invoke_vii,\r\n \"invoke_viii\": invoke_viii,\r\n \"invoke_viiii\": invoke_viiii,\r\n \"invoke_viiiii\": invoke_viiiii,\r\n \"invoke_viiiiiii\": invoke_viiiiiii,\r\n \"invoke_viij\": invoke_viij,\r\n \"invoke_viji\": invoke_viji,\r\n \"___assert_fail\": ___assert_fail,\r\n \"___cxa_allocate_exception\": ___cxa_allocate_exception,\r\n \"___cxa_begin_catch\": ___cxa_begin_catch,\r\n \"___cxa_end_catch\": ___cxa_end_catch,\r\n \"___cxa_find_matching_catch\": ___cxa_find_matching_catch,\r\n \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2,\r\n \"___cxa_find_matching_catch_3\": ___cxa_find_matching_catch_3,\r\n \"___cxa_free_exception\": ___cxa_free_exception,\r\n \"___cxa_get_exception_ptr\": ___cxa_get_exception_ptr,\r\n \"___cxa_pure_virtual\": ___cxa_pure_virtual,\r\n \"___cxa_throw\": ___cxa_throw,\r\n \"___cxa_uncaught_exceptions\": ___cxa_uncaught_exceptions,\r\n \"___exception_addRef\": ___exception_addRef,\r\n \"___exception_deAdjust\": ___exception_deAdjust,\r\n \"___exception_decRef\": ___exception_decRef,\r\n \"___gxx_personality_v0\": ___gxx_personality_v0,\r\n \"___lock\": ___lock,\r\n \"___resumeException\": ___resumeException,\r\n \"___setErrNo\": ___setErrNo,\r\n \"___syscall140\": ___syscall140,\r\n \"___syscall146\": ___syscall146,\r\n \"___syscall54\": ___syscall54,\r\n \"___syscall6\": ___syscall6,\r\n \"___unlock\": ___unlock,\r\n \"__api_close_keyboard\": __api_close_keyboard,\r\n \"__api_open_keyboard\": __api_open_keyboard,\r\n \"_abort\": _abort,\r\n \"_api_create_sound\": _api_create_sound,\r\n \"_api_create_sound_float\": _api_create_sound_float,\r\n \"_api_delete_sound\": _api_delete_sound,\r\n \"_api_draw_begin\": _api_draw_begin,\r\n \"_api_draw_belt\": _api_draw_belt,\r\n \"_api_draw_blit\": _api_draw_blit,\r\n \"_api_draw_clip_text\": _api_draw_clip_text,\r\n \"_api_draw_end\": _api_draw_end,\r\n \"_api_draw_text\": _api_draw_text,\r\n \"_api_duplicate_sound\": _api_duplicate_sound,\r\n \"_api_exit_game\": _api_exit_game,\r\n \"_api_play_sound\": _api_play_sound,\r\n \"_api_set_cursor\": _api_set_cursor,\r\n \"_api_set_volume\": _api_set_volume,\r\n \"_api_stop_sound\": _api_stop_sound,\r\n \"_api_use_websocket\": _api_use_websocket,\r\n \"_api_websocket_closed\": _api_websocket_closed,\r\n \"_api_websocket_send\": _api_websocket_send,\r\n \"_emscripten_asm_const_ii\": _emscripten_asm_const_ii,\r\n \"_emscripten_get_heap_size\": _emscripten_get_heap_size,\r\n \"_emscripten_memcpy_big\": _emscripten_memcpy_big,\r\n \"_emscripten_resize_heap\": _emscripten_resize_heap,\r\n \"_exit\": _exit,\r\n \"_exit_error\": _exit_error,\r\n \"_get_file_contents\": _get_file_contents,\r\n \"_get_file_size\": _get_file_size,\r\n \"_llvm_eh_typeid_for\": _llvm_eh_typeid_for,\r\n \"_llvm_trap\": _llvm_trap,\r\n \"_put_file_contents\": _put_file_contents,\r\n \"_remove_file\": _remove_file,\r\n \"_show_alert\": _show_alert,\r\n \"_time\": _time,\r\n \"_trace_pop\": _trace_pop,\r\n \"_trace_push\": _trace_push,\r\n \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory,\r\n \"emscripten_realloc_buffer\": emscripten_realloc_buffer,\r\n \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM,\r\n \"tempDoublePtr\": tempDoublePtr,\r\n \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR\r\n};\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(asmGlobalArg, asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_AllocPacket = Module[\"_DApi_AllocPacket\"] = function() {\r\n return Module[\"asm\"][\"_DApi_AllocPacket\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Char = Module[\"_DApi_Char\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Char\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Init = Module[\"_DApi_Init\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Init\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Key = Module[\"_DApi_Key\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Key\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Mouse = Module[\"_DApi_Mouse\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Mouse\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Render = Module[\"_DApi_Render\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Render\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncText = Module[\"_DApi_SyncText\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncText\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncTextPtr = Module[\"_DApi_SyncTextPtr\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncTextPtr\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_InitWebsocket = Module[\"_SNet_InitWebsocket\"] = function() {\r\n return Module[\"asm\"][\"_SNet_InitWebsocket\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_WebsocketStatus = Module[\"_SNet_WebsocketStatus\"] = function() {\r\n return Module[\"asm\"][\"_SNet_WebsocketStatus\"].apply(null, arguments)\r\n};\r\n\r\nvar __ZSt18uncaught_exceptionv = Module[\"__ZSt18uncaught_exceptionv\"] = function() {\r\n return Module[\"asm\"][\"__ZSt18uncaught_exceptionv\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() {\r\n return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() {\r\n return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_close_keyboard = Module[\"___em_js___api_close_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_close_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_open_keyboard = Module[\"___em_js___api_open_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_open_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound = Module[\"___em_js__api_create_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound_float = Module[\"___em_js__api_create_sound_float\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound_float\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_delete_sound = Module[\"___em_js__api_delete_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_delete_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_begin = Module[\"___em_js__api_draw_begin\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_begin\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_belt = Module[\"___em_js__api_draw_belt\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_belt\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_blit = Module[\"___em_js__api_draw_blit\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_blit\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_clip_text = Module[\"___em_js__api_draw_clip_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_clip_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_end = Module[\"___em_js__api_draw_end\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_end\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_text = Module[\"___em_js__api_draw_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_duplicate_sound = Module[\"___em_js__api_duplicate_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_duplicate_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_exit_game = Module[\"___em_js__api_exit_game\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_exit_game\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_play_sound = Module[\"___em_js__api_play_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_play_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_cursor = Module[\"___em_js__api_set_cursor\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_cursor\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_volume = Module[\"___em_js__api_set_volume\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_volume\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_stop_sound = Module[\"___em_js__api_stop_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_stop_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_use_websocket = Module[\"___em_js__api_use_websocket\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_use_websocket\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_closed = Module[\"___em_js__api_websocket_closed\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_closed\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_send = Module[\"___em_js__api_websocket_send\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_send\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__exit_error = Module[\"___em_js__exit_error\"] = function() {\r\n return Module[\"asm\"][\"___em_js__exit_error\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_size = Module[\"___em_js__get_file_size\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_size\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__remove_file = Module[\"___em_js__remove_file\"] = function() {\r\n return Module[\"asm\"][\"___em_js__remove_file\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__show_alert = Module[\"___em_js__show_alert\"] = function() {\r\n return Module[\"asm\"][\"___em_js__show_alert\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_pop = Module[\"___em_js__trace_pop\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_pop\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_push = Module[\"___em_js__trace_push\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_push\"].apply(null, arguments)\r\n};\r\n\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() {\r\n return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments)\r\n};\r\n\r\nvar _free = Module[\"_free\"] = function() {\r\n return Module[\"asm\"][\"_free\"].apply(null, arguments)\r\n};\r\n\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() {\r\n return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments)\r\n};\r\n\r\nvar _malloc = Module[\"_malloc\"] = function() {\r\n return Module[\"asm\"][\"_malloc\"].apply(null, arguments)\r\n};\r\n\r\nvar _memcpy = Module[\"_memcpy\"] = function() {\r\n return Module[\"asm\"][\"_memcpy\"].apply(null, arguments)\r\n};\r\n\r\nvar _memmove = Module[\"_memmove\"] = function() {\r\n return Module[\"asm\"][\"_memmove\"].apply(null, arguments)\r\n};\r\n\r\nvar _memset = Module[\"_memset\"] = function() {\r\n return Module[\"asm\"][\"_memset\"].apply(null, arguments)\r\n};\r\n\r\nvar _sbrk = Module[\"_sbrk\"] = function() {\r\n return Module[\"asm\"][\"_sbrk\"].apply(null, arguments)\r\n};\r\n\r\nvar _setThrew = Module[\"_setThrew\"] = function() {\r\n return Module[\"asm\"][\"_setThrew\"].apply(null, arguments)\r\n};\r\n\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() {\r\n return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments)\r\n};\r\n\r\nvar globalCtors = Module[\"globalCtors\"] = function() {\r\n return Module[\"asm\"][\"globalCtors\"].apply(null, arguments)\r\n};\r\n\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() {\r\n return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments)\r\n};\r\n\r\nvar stackRestore = Module[\"stackRestore\"] = function() {\r\n return Module[\"asm\"][\"stackRestore\"].apply(null, arguments)\r\n};\r\n\r\nvar stackSave = Module[\"stackSave\"] = function() {\r\n return Module[\"asm\"][\"stackSave\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_i = Module[\"dynCall_i\"] = function() {\r\n return Module[\"asm\"][\"dynCall_i\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iidiiii = Module[\"dynCall_iidiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iidiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_jiji = Module[\"dynCall_jiji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_jiji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() {\r\n return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiii = Module[\"dynCall_viiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiii = Module[\"dynCall_viiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiiii = Module[\"dynCall_viiiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viij = Module[\"dynCall_viij\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viij\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments)\r\n};\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n}\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n initRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n what += '';\r\n out(what);\r\n err(what);\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\n Module[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return Diablo\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = Diablo;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return Diablo; });\r\n else if (typeof exports === 'object')\r\n exports[\"Diablo\"] = Diablo;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","module.exports = __webpack_public_path__ + \"static/media/DiabloSpawn.9c2373b2.wasm\";","\r\nvar DiabloSpawn = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(DiabloSpawn) {\r\n DiabloSpawn = DiabloSpawn || {};\r\n\r\n// Copyright 2010 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof DiabloSpawn !== 'undefined' ? DiabloSpawn : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// Determine the runtime environment we are in. You can customize this by\r\n// setting the ENVIRONMENT setting at compile time (see settings.js).\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_HAS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\n// A web environment like Electron.js can have Node enabled, so we must\r\n// distinguish between Node-enabled environments and Node environments per se.\r\n// This will allow the former to do things like mount NODEFS.\r\n// Extended check using process.versions fixes issue #8816.\r\n// (Also makes redundant the original check that 'require' is a function.)\r\nENVIRONMENT_HAS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\r\nENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\n// Hooks that are implemented differently in different runtime environments.\r\nvar read_,\r\n readAsync,\r\n readBinary,\r\n setWindowTitle;\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n read_ = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n readBinary = function readBinary(filename) {\r\n var ret = read_(filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', abort);\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n read_ = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n readBinary = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\r\n scriptDirectory = self.location.href;\r\n } else if (document.currentScript) { // web\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\r\n // and scriptDirectory will correctly be replaced with an empty string.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n read_ = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n readBinary = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n readAsync = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n setWindowTitle = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\r\n\r\n// TODO remove when SDL2 is fixed; also add the above assertion\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n if (end > _emscripten_get_heap_size()) {\r\n abort();\r\n }\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n return Math.ceil(size / factor) * factor;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// Wraps a JS function as a wasm function with a given signature.\r\n// In the future, we may get a WebAssembly.Function constructor. Until then,\r\n// we create a wasm module that takes the JS function as an import with a given\r\n// signature, and re-exports that as a wasm function.\r\nfunction convertJsFunctionToWasm(func, sig) {\r\n\r\n // The module is static, with the exception of the type section, which is\r\n // generated based on the signature passed in.\r\n var typeSection = [\r\n 0x01, // id: section,\r\n 0x00, // length: 0 (placeholder)\r\n 0x01, // count: 1\r\n 0x60, // form: func\r\n ];\r\n var sigRet = sig.slice(0, 1);\r\n var sigParam = sig.slice(1);\r\n var typeCodes = {\r\n 'i': 0x7f, // i32\r\n 'j': 0x7e, // i64\r\n 'f': 0x7d, // f32\r\n 'd': 0x7c, // f64\r\n };\r\n\r\n // Parameters, length + signatures\r\n typeSection.push(sigParam.length);\r\n for (var i = 0; i < sigParam.length; ++i) {\r\n typeSection.push(typeCodes[sigParam[i]]);\r\n }\r\n\r\n // Return values, length + signatures\r\n // With no multi-return in MVP, either 0 (void) or 1 (anything else)\r\n if (sigRet == 'v') {\r\n typeSection.push(0x00);\r\n } else {\r\n typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);\r\n }\r\n\r\n // Write the overall length of the type section back into the section header\r\n // (excepting the 2 bytes for the section id and length)\r\n typeSection[1] = typeSection.length - 2;\r\n\r\n // Rest of the module is static\r\n var bytes = new Uint8Array([\r\n 0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\r\n 0x01, 0x00, 0x00, 0x00, // version: 1\r\n ].concat(typeSection, [\r\n 0x02, 0x07, // import section\r\n // (import \"e\" \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\r\n 0x07, 0x05, // export section\r\n // (export \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x66, 0x00, 0x00,\r\n ]));\r\n\r\n // We can compile this wasm module synchronously because it is very small.\r\n // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\r\n var module = new WebAssembly.Module(bytes);\r\n var instance = new WebAssembly.Instance(module, {\r\n e: {\r\n f: func\r\n }\r\n });\r\n var wrappedFunc = instance.exports.f;\r\n return wrappedFunc;\r\n}\r\n\r\n// Add a wasm function to the table.\r\nfunction addFunctionWasm(func, sig) {\r\n var table = wasmTable;\r\n var ret = table.length;\r\n\r\n // Grow the table\r\n try {\r\n table.grow(1);\r\n } catch (err) {\r\n if (!err instanceof RangeError) {\r\n throw err;\r\n }\r\n throw 'Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.';\r\n }\r\n\r\n // Insert new element\r\n try {\r\n // Attempting to call this with JS function will cause of table.set() to fail\r\n table.set(ret, func);\r\n } catch (err) {\r\n if (!err instanceof TypeError) {\r\n throw err;\r\n }\r\n assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction');\r\n var wrapped = convertJsFunctionToWasm(func, sig);\r\n table.set(ret, wrapped);\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nfunction removeFunctionWasm(index) {\r\n // TODO(sbc): Look into implementing this to allow re-using of table slots\r\n}\r\n\r\n// 'sig' parameter is required for the llvm backend but only when func is not\r\n// already a WebAssembly function.\r\nfunction addFunction(func, sig) {\r\n\r\n\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n\r\n}\r\n\r\nfunction removeFunction(index) {\r\n\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\nvar tempRet0 = 0;\r\n\r\nvar setTempRet0 = function(value) {\r\n tempRet0 = value;\r\n};\r\n\r\nvar getTempRet0 = function() {\r\n return tempRet0;\r\n};\r\n\r\n\r\nvar Runtime = {\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\nif (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n}\r\n\r\n\r\n// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.\r\n// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// Wasm globals\r\n\r\nvar wasmMemory;\r\n\r\n// Potentially used for direct table calls.\r\nvar wasmTable;\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\n// whether we are quitting the application. no code should run after this.\r\n// set in exit() and abort()\r\nvar ABORT = false;\r\n\r\n// set by exit() and abort(). Passed to 'onExit' handler.\r\n// NOTE: This is also used as the process return code code in shell environments\r\n// but only when noExitRuntime is false.\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n // For fast lookup of conversion functions\r\n var toC = {\r\n 'string': function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n },\r\n 'array': function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n }\r\n };\r\n\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return UTF8ToString(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 3; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [_malloc,\r\n stackAlloc,\r\n dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n\r\n\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n abort(\"this function has been removed - you should use UTF8ToString(ptr, maxBytesToRead) instead!\");\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAPU8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\n\r\n/**\r\n * @param {number} idx\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\r\n var endIdx = idx + maxBytesToRead;\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)\r\n while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var str = '';\r\n // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that\r\n while (idx < endPtr) {\r\n // For UTF8 byte structure, see:\r\n // http://en.wikipedia.org/wiki/UTF-8#Description\r\n // https://www.ietf.org/rfc/rfc2279.txt\r\n // https://tools.ietf.org/html/rfc3629\r\n var u0 = u8Array[idx++];\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n var u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n var u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63);\r\n }\r\n\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a\r\n// copy of that string as a Javascript String object.\r\n// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit\r\n// this parameter to scan the string until the first \\0 byte. If maxBytesToRead is\r\n// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the\r\n// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will\r\n// not produce a string of exact length [ptr, ptr+maxBytesToRead[)\r\n// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may\r\n// throw JS JIT optimizations off, so it is worth to consider consistently using one\r\n// style or the other.\r\n/**\r\n * @param {number} ptr\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ToString(ptr, maxBytesToRead) {\r\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) ++len;\r\n else if (u <= 0x7FF) len += 2;\r\n else if (u <= 0xFFFF) len += 3;\r\n else len += 4;\r\n }\r\n return len;\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (y + ' [' + x + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\n\r\nvar STATIC_BASE = 1024,\r\n STACK_BASE = 1850928,\r\n STACKTOP = STACK_BASE,\r\n STACK_MAX = 7093808,\r\n DYNAMIC_BASE = 7093808,\r\n DYNAMICTOP_PTR = 1850896;\r\n\r\n\r\n\r\n\r\nvar TOTAL_STACK = 5242880;\r\n\r\nvar INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (INITIAL_TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n\r\n\r\n\r\n if (Module['wasmMemory']) {\r\n wasmMemory = Module['wasmMemory'];\r\n } else {\r\n wasmMemory = new WebAssembly.Memory({\r\n 'initial': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE\r\n });\r\n }\r\n\r\n\r\nif (wasmMemory) {\r\n buffer = wasmMemory.buffer;\r\n}\r\n\r\n// If the user provides an incorrect length, just use that length instead rather than providing the user to\r\n// specifically provide the memory length with Module['TOTAL_MEMORY'].\r\nINITIAL_TOTAL_MEMORY = buffer.byteLength;\r\nupdateGlobalBufferViews();\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction initRuntime() {\r\n runtimeInitialized = true;\r\n \r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n \r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// Module.preRun (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nvar wasmBinaryFile = 'DiabloSpawn.wasm';\r\nif (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n}\r\n\r\nfunction getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (readBinary) {\r\n return readBinary(wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n}\r\n\r\nfunction getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n}\r\n\r\n\r\n\r\n// Create the wasm instance.\r\n// Receives the wasm imports, returns the exports.\r\nfunction createWasm(env) {\r\n\r\n // prepare imports\r\n var info = {\r\n 'env': env\r\n ,\r\n 'global': {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n },\r\n 'global.Math': Math,\r\n 'asm2wasm': asm2wasmImports\r\n };\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n var exports = instance.exports;\r\n Module['asm'] = exports;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\r\n // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.\r\n receiveInstance(output['instance']);\r\n }\r\n\r\n\r\n function instantiateArrayBuffer(receiver) {\r\n return getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver, function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n\r\n // Prefer streaming instantiation if available.\r\n function instantiateAsync() {\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {\r\n return WebAssembly.instantiateStreaming(response, info)\r\n .then(receiveInstantiatedSource, function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n });\r\n } else {\r\n return instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n }\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n var exports = Module['instantiateWasm'](info, receiveInstance);\r\n return exports;\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n instantiateAsync();\r\n return {}; // no exports yet; we'll fill them in later\r\n}\r\n\r\n// Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n// the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n// doesn't need to care that it is wasm or asm.js.\r\n\r\nModule['asm'] = function(global, env, providedBuffer) {\r\n // memory was already allocated (so js could use the buffer)\r\n env['memory'] = wasmMemory\r\n ;\r\n // import table\r\n env['table'] = wasmTable = new WebAssembly.Table({\r\n 'initial': 1116,\r\n 'maximum': 1116,\r\n 'element': 'anyfunc'\r\n });\r\n // With the wasm backend __memory_base and __table_base and only needed for\r\n // relocatable output.\r\n env['__memory_base'] = 1024; // tell the memory segments where to place themselves\r\n // table starts at 0 by default (even in dynamic linking, for the main module)\r\n env['__table_base'] = 0;\r\n\r\n var exports = createWasm(env);\r\n return exports;\r\n};\r\n\r\n// Globals used by JS i64 conversions\r\nvar tempDouble;\r\nvar tempI64;\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [function($0) { self.DApi.current_save_id($0); }];\r\n\r\nfunction _emscripten_asm_const_ii(code, a0) {\r\n return ASM_CONSTS[code](a0);\r\n}\r\nfunction __api_close_keyboard(){ self.DApi.close_keyboard(); }\r\nfunction __api_open_keyboard(x0,y0,x1,y1,len){ self.DApi.open_keyboard(x0, y0, x1, y1, len); }\r\nfunction _api_create_sound(id,ptr,size){ self.DApi.create_sound(id, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _api_create_sound_float(id,ptr,samples,channels,rate){ self.DApi.create_sound_raw(id, HEAPF32.slice(ptr / 4, ptr / 4 + samples * channels), samples, channels, rate); }\r\nfunction _api_delete_sound(id){ self.DApi.delete_sound(id); }\r\nfunction _api_draw_begin(){ self.DApi.draw_begin(); }\r\nfunction _api_draw_belt(items){ self.DApi.draw_belt(HEAP32.subarray(items / 4, items / 4 + 8)); }\r\nfunction _api_draw_blit(x,y,w,h,ptr){ self.DApi.draw_blit(x, y, w, h, HEAPU8.subarray(ptr, ptr + w * h * 4)); }\r\nfunction _api_draw_clip_text(x0,y0,x1,y1){ self.DApi.draw_clip_text(x0, y0, x1, y1); }\r\nfunction _api_draw_end(){ self.DApi.draw_end(); }\r\nfunction _api_draw_text(x,y,ptr,color){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); self.DApi.draw_text(x, y, text, color); }\r\nfunction _api_duplicate_sound(id,srcId){ self.DApi.duplicate_sound(id, srcId); }\r\nfunction _api_exit_game(){ self.DApi.exit_game(); }\r\nfunction _api_play_sound(id,volume,pan,loop){ self.DApi.play_sound(id, volume, pan, loop); }\r\nfunction _api_set_cursor(x,y){ self.DApi.set_cursor(x, y); }\r\nfunction _api_set_volume(id,volume){ self.DApi.set_volume(id, volume); }\r\nfunction _api_stop_sound(id){ self.DApi.stop_sound(id); }\r\nfunction _api_use_websocket(use){ self.DApi.use_websocket(use); }\r\nfunction _api_websocket_closed(){ return self.DApi.websocket_closed(); }\r\nfunction _api_websocket_send(ptr,size){ self.DApi.websocket_send(HEAPU8.subarray(ptr, ptr + size)); }\r\nfunction _exit_error(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply(null, HEAPU8.subarray( err, end )); self.DApi.exit_error( text ); }\r\nfunction _get_file_contents(path,ptr,offset,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.get_file_contents(text, HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _get_file_size(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); return self.DApi.get_file_size(text); }\r\nfunction _put_file_contents(path,ptr,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end)); self.DApi.put_file_contents(text, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _remove_file(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.remove_file( text ); }\r\nfunction _show_alert(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply( null, HEAPU8.subarray( err, end ) ); self.alert( text ); }\r\nfunction _trace_pop(){ if (self.WASM_TRACE) { self.WASM_TRACE.pop(); } }\r\nfunction _trace_push(ptr){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); console.log(text); self.WASM_TRACE = self.WASM_TRACE || []; self.WASM_TRACE.push(text); }\r\n\r\n\r\n\r\n// STATICTOP = STATIC_BASE + 1849904;\r\n/* global initializers */ __ATINIT__.push({ func: function() { globalCtors() } });\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = 1850912\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + UTF8ToString(condition) + ', at: ' + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n \r\n var ___exception_infos={};\r\n \r\n var ___exception_caught= [];\r\n \r\n function ___exception_addRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount++;\r\n }\r\n \r\n function ___exception_deAdjust(adjusted) {\r\n if (!adjusted || ___exception_infos[adjusted]) return adjusted;\r\n for (var key in ___exception_infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var adj = ___exception_infos[ptr].adjusted;\r\n var len = adj.length;\r\n for (var i = 0; i < len; i++) {\r\n if (adj[i] === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n }\r\n return adjusted;\r\n }function ___cxa_begin_catch(ptr) {\r\n var info = ___exception_infos[ptr];\r\n if (info && !info.caught) {\r\n info.caught = true;\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions--;\r\n }\r\n if (info) info.rethrown = false;\r\n ___exception_caught.push(ptr);\r\n ___exception_addRef(___exception_deAdjust(ptr));\r\n return ptr;\r\n }\r\n\r\n \r\n var ___exception_last=0;\r\n \r\n \r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) {\r\n }\r\n }function ___exception_decRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete ___exception_infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n }\r\n \r\n function ___cxa_end_catch() {\r\n // Clear state flag.\r\n _setThrew(0);\r\n // Call destructor if one is registered then clear it.\r\n var ptr = ___exception_caught.pop();\r\n if (ptr) {\r\n ___exception_decRef(___exception_deAdjust(ptr));\r\n ___exception_last = 0; // XXX in decRef?\r\n }\r\n }\r\n\r\n \r\n \r\n function ___resumeException(ptr) {\r\n if (!___exception_last) { ___exception_last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = ___exception_last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = ___exception_infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = ___cxa_is_pointer_type(throwntype);\r\n // can_catch receives a **, add indirection\r\n var buffer = 1850880;\r\n HEAP32[((buffer)>>2)]=thrown;\r\n thrown = buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && ___cxa_can_catch(typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted.push(thrown);\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }\r\n Module[\"___cxa_find_matching_catch\"] = ___cxa_find_matching_catch;function ___cxa_find_matching_catch_2(a0,a1\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1);\r\n }\r\n\r\n function ___cxa_find_matching_catch_3(a0,a1,a2\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1,a2);\r\n }\r\n\r\n\r\n function ___cxa_get_exception_ptr(ptr) {\r\n // TODO: use info.adjusted?\r\n return ptr;\r\n }\r\n\r\n function ___cxa_pure_virtual() {\r\n ABORT = true;\r\n throw 'Pure virtual function called!';\r\n }\r\n\r\n function ___cxa_throw(ptr, type, destructor) {\r\n ___exception_infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: [ptr],\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n ___exception_last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___cxa_uncaught_exceptions() {\r\n return __ZSt18uncaught_exceptionv.uncaught_exceptions;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n function ___lock() {}\r\n\r\n\r\n \r\n \r\n var PATH={splitPath:function (filename) {\r\n var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\n return splitPathRe.exec(filename).slice(1);\r\n },normalizeArray:function (parts, allowAboveRoot) {\r\n // if the path tries to go above the root, `up` ends up > 0\r\n var up = 0;\r\n for (var i = parts.length - 1; i >= 0; i--) {\r\n var last = parts[i];\r\n if (last === '.') {\r\n parts.splice(i, 1);\r\n } else if (last === '..') {\r\n parts.splice(i, 1);\r\n up++;\r\n } else if (up) {\r\n parts.splice(i, 1);\r\n up--;\r\n }\r\n }\r\n // if the path is allowed to go above the root, restore leading ..s\r\n if (allowAboveRoot) {\r\n for (; up; up--) {\r\n parts.unshift('..');\r\n }\r\n }\r\n return parts;\r\n },normalize:function (path) {\r\n var isAbsolute = path.charAt(0) === '/',\r\n trailingSlash = path.substr(-1) === '/';\r\n // Normalize the path\r\n path = PATH.normalizeArray(path.split('/').filter(function(p) {\r\n return !!p;\r\n }), !isAbsolute).join('/');\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n return (isAbsolute ? '/' : '') + path;\r\n },dirname:function (path) {\r\n var result = PATH.splitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n return root + dir;\r\n },basename:function (path) {\r\n // EMSCRIPTEN return '/'' for '/', not an empty string\r\n if (path === '/') return '/';\r\n var lastSlash = path.lastIndexOf('/');\r\n if (lastSlash === -1) return path;\r\n return path.substr(lastSlash+1);\r\n },extname:function (path) {\r\n return PATH.splitPath(path)[3];\r\n },join:function () {\r\n var paths = Array.prototype.slice.call(arguments, 0);\r\n return PATH.normalize(paths.join('/'));\r\n },join2:function (l, r) {\r\n return PATH.normalize(l + '/' + r);\r\n }};var SYSCALLS={buffers:[null,[],[]],printChar:function (stream, curr) {\r\n var buffer = SYSCALLS.buffers[stream];\r\n if (curr === 0 || curr === 10) {\r\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\r\n buffer.length = 0;\r\n } else {\r\n buffer.push(curr);\r\n }\r\n },varargs:0,get:function (varargs) {\r\n SYSCALLS.varargs += 4;\r\n var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\r\n return ret;\r\n },getStr:function () {\r\n var ret = UTF8ToString(SYSCALLS.get());\r\n return ret;\r\n },get64:function () {\r\n var low = SYSCALLS.get(), high = SYSCALLS.get();\r\n return low;\r\n },getZero:function () {\r\n SYSCALLS.get();\r\n }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // llseek\r\n var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n \r\n function flush_NO_FILESYSTEM() {\r\n // flush anything remaining in the buffers during shutdown\r\n var fflush = Module[\"_fflush\"];\r\n if (fflush) fflush(0);\r\n var buffers = SYSCALLS.buffers;\r\n if (buffers[1].length) SYSCALLS.printChar(1, 10);\r\n if (buffers[2].length) SYSCALLS.printChar(2, 10);\r\n }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // writev\r\n // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0\r\n var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\r\n var ret = 0;\r\n for (var i = 0; i < iovcnt; i++) {\r\n var ptr = HEAP32[(((iov)+(i*8))>>2)];\r\n var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\r\n for (var j = 0; j < len; j++) {\r\n SYSCALLS.printChar(stream, HEAPU8[ptr+j]);\r\n }\r\n ret += len;\r\n }\r\n return ret;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // ioctl\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // close\r\n var stream = SYSCALLS.getStreamFromFD();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___unlock() {}\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n var _emscripten_asm_const_int=true;\r\n\r\n function _emscripten_get_heap_size() {\r\n return HEAP8.length;\r\n }\r\n\r\n function _exit(status) {\r\n // void _exit(int status);\r\n // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html\r\n exit(status);\r\n }\r\n\r\n \r\n\r\n function _llvm_eh_typeid_for(type) {\r\n return type;\r\n }\r\n\r\n function _llvm_trap() {\r\n abort('trap!');\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n }\r\n \r\n \r\n function abortOnCannotGrowMemory(requestedSize) {\r\n abort('OOM');\r\n }\r\n \r\n function emscripten_realloc_buffer(size) {\r\n var PAGE_MULTIPLE = 65536;\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var oldSize = buffer.byteLength;\r\n // native wasm support\r\n // note that this is *not* threadsafe. multiple threads can call .grow(), and each\r\n // presents a delta, so in theory we may over-allocate here (e.g. if two threads\r\n // ask to grow from 256MB to 512MB, we get 2 requests to add +256MB, and may end\r\n // up growing to 768MB (even though we may have been able to make do with 512MB).\r\n // TODO: consider decreasing the step sizes in emscripten_resize_heap\r\n try {\r\n var result = wasmMemory.grow((size - oldSize) / 65536); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n buffer = wasmMemory.buffer;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n }function _emscripten_resize_heap(requestedSize) {\r\n var oldSize = _emscripten_get_heap_size();\r\n // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.\r\n \r\n \r\n var PAGE_MULTIPLE = 65536;\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n \r\n if (requestedSize > LIMIT) {\r\n return false;\r\n }\r\n \r\n var MIN_TOTAL_MEMORY = 16777216;\r\n var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n \r\n // TODO: see realloc_buffer - for PTHREADS we may want to decrease these jumps\r\n while (newSize < requestedSize) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (newSize <= 536870912) {\r\n newSize = alignUp(2 * newSize, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n \r\n }\r\n \r\n \r\n \r\n \r\n if (!emscripten_realloc_buffer(newSize)) {\r\n return false;\r\n }\r\n \r\n updateGlobalBufferViews();\r\n \r\n \r\n \r\n return true;\r\n } \r\n\r\n function _time(ptr) {\r\n var ret = (Date.now()/1000)|0;\r\n if (ptr) {\r\n HEAP32[((ptr)>>2)]=ret;\r\n }\r\n return ret;\r\n }\r\nvar ASSERTIONS = false;\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n// ASM_LIBRARY EXTERN PRIMITIVES: Int8Array,Int32Array\r\n\r\n\r\nfunction invoke_i(index) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_i(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ii(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ji(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_v(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vi(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viij(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viij(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viji(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nvar asmGlobalArg = {};\r\n\r\nvar asmLibraryArg = {\r\n \"abort\": abort,\r\n \"setTempRet0\": setTempRet0,\r\n \"getTempRet0\": getTempRet0,\r\n \"invoke_i\": invoke_i,\r\n \"invoke_ii\": invoke_ii,\r\n \"invoke_iii\": invoke_iii,\r\n \"invoke_iiii\": invoke_iiii,\r\n \"invoke_iiiii\": invoke_iiiii,\r\n \"invoke_iiiiii\": invoke_iiiiii,\r\n \"invoke_ji\": invoke_ji,\r\n \"invoke_v\": invoke_v,\r\n \"invoke_vi\": invoke_vi,\r\n \"invoke_vii\": invoke_vii,\r\n \"invoke_viii\": invoke_viii,\r\n \"invoke_viiii\": invoke_viiii,\r\n \"invoke_viiiii\": invoke_viiiii,\r\n \"invoke_viiiiiii\": invoke_viiiiiii,\r\n \"invoke_viij\": invoke_viij,\r\n \"invoke_viji\": invoke_viji,\r\n \"___assert_fail\": ___assert_fail,\r\n \"___cxa_allocate_exception\": ___cxa_allocate_exception,\r\n \"___cxa_begin_catch\": ___cxa_begin_catch,\r\n \"___cxa_end_catch\": ___cxa_end_catch,\r\n \"___cxa_find_matching_catch\": ___cxa_find_matching_catch,\r\n \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2,\r\n \"___cxa_find_matching_catch_3\": ___cxa_find_matching_catch_3,\r\n \"___cxa_free_exception\": ___cxa_free_exception,\r\n \"___cxa_get_exception_ptr\": ___cxa_get_exception_ptr,\r\n \"___cxa_pure_virtual\": ___cxa_pure_virtual,\r\n \"___cxa_throw\": ___cxa_throw,\r\n \"___cxa_uncaught_exceptions\": ___cxa_uncaught_exceptions,\r\n \"___exception_addRef\": ___exception_addRef,\r\n \"___exception_deAdjust\": ___exception_deAdjust,\r\n \"___exception_decRef\": ___exception_decRef,\r\n \"___gxx_personality_v0\": ___gxx_personality_v0,\r\n \"___lock\": ___lock,\r\n \"___resumeException\": ___resumeException,\r\n \"___setErrNo\": ___setErrNo,\r\n \"___syscall140\": ___syscall140,\r\n \"___syscall146\": ___syscall146,\r\n \"___syscall54\": ___syscall54,\r\n \"___syscall6\": ___syscall6,\r\n \"___unlock\": ___unlock,\r\n \"__api_close_keyboard\": __api_close_keyboard,\r\n \"__api_open_keyboard\": __api_open_keyboard,\r\n \"_abort\": _abort,\r\n \"_api_create_sound\": _api_create_sound,\r\n \"_api_create_sound_float\": _api_create_sound_float,\r\n \"_api_delete_sound\": _api_delete_sound,\r\n \"_api_draw_begin\": _api_draw_begin,\r\n \"_api_draw_belt\": _api_draw_belt,\r\n \"_api_draw_blit\": _api_draw_blit,\r\n \"_api_draw_clip_text\": _api_draw_clip_text,\r\n \"_api_draw_end\": _api_draw_end,\r\n \"_api_draw_text\": _api_draw_text,\r\n \"_api_duplicate_sound\": _api_duplicate_sound,\r\n \"_api_exit_game\": _api_exit_game,\r\n \"_api_play_sound\": _api_play_sound,\r\n \"_api_set_cursor\": _api_set_cursor,\r\n \"_api_set_volume\": _api_set_volume,\r\n \"_api_stop_sound\": _api_stop_sound,\r\n \"_api_use_websocket\": _api_use_websocket,\r\n \"_api_websocket_closed\": _api_websocket_closed,\r\n \"_api_websocket_send\": _api_websocket_send,\r\n \"_emscripten_asm_const_ii\": _emscripten_asm_const_ii,\r\n \"_emscripten_get_heap_size\": _emscripten_get_heap_size,\r\n \"_emscripten_memcpy_big\": _emscripten_memcpy_big,\r\n \"_emscripten_resize_heap\": _emscripten_resize_heap,\r\n \"_exit\": _exit,\r\n \"_exit_error\": _exit_error,\r\n \"_get_file_contents\": _get_file_contents,\r\n \"_get_file_size\": _get_file_size,\r\n \"_llvm_eh_typeid_for\": _llvm_eh_typeid_for,\r\n \"_llvm_trap\": _llvm_trap,\r\n \"_put_file_contents\": _put_file_contents,\r\n \"_remove_file\": _remove_file,\r\n \"_show_alert\": _show_alert,\r\n \"_time\": _time,\r\n \"_trace_pop\": _trace_pop,\r\n \"_trace_push\": _trace_push,\r\n \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory,\r\n \"emscripten_realloc_buffer\": emscripten_realloc_buffer,\r\n \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM,\r\n \"tempDoublePtr\": tempDoublePtr,\r\n \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR\r\n};\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(asmGlobalArg, asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_AllocPacket = Module[\"_DApi_AllocPacket\"] = function() {\r\n return Module[\"asm\"][\"_DApi_AllocPacket\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Char = Module[\"_DApi_Char\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Char\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Init = Module[\"_DApi_Init\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Init\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Key = Module[\"_DApi_Key\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Key\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Mouse = Module[\"_DApi_Mouse\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Mouse\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Render = Module[\"_DApi_Render\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Render\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncText = Module[\"_DApi_SyncText\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncText\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncTextPtr = Module[\"_DApi_SyncTextPtr\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncTextPtr\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_InitWebsocket = Module[\"_SNet_InitWebsocket\"] = function() {\r\n return Module[\"asm\"][\"_SNet_InitWebsocket\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_WebsocketStatus = Module[\"_SNet_WebsocketStatus\"] = function() {\r\n return Module[\"asm\"][\"_SNet_WebsocketStatus\"].apply(null, arguments)\r\n};\r\n\r\nvar __ZSt18uncaught_exceptionv = Module[\"__ZSt18uncaught_exceptionv\"] = function() {\r\n return Module[\"asm\"][\"__ZSt18uncaught_exceptionv\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() {\r\n return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() {\r\n return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_close_keyboard = Module[\"___em_js___api_close_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_close_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_open_keyboard = Module[\"___em_js___api_open_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_open_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound = Module[\"___em_js__api_create_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound_float = Module[\"___em_js__api_create_sound_float\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound_float\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_delete_sound = Module[\"___em_js__api_delete_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_delete_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_begin = Module[\"___em_js__api_draw_begin\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_begin\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_belt = Module[\"___em_js__api_draw_belt\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_belt\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_blit = Module[\"___em_js__api_draw_blit\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_blit\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_clip_text = Module[\"___em_js__api_draw_clip_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_clip_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_end = Module[\"___em_js__api_draw_end\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_end\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_text = Module[\"___em_js__api_draw_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_duplicate_sound = Module[\"___em_js__api_duplicate_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_duplicate_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_exit_game = Module[\"___em_js__api_exit_game\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_exit_game\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_play_sound = Module[\"___em_js__api_play_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_play_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_cursor = Module[\"___em_js__api_set_cursor\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_cursor\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_volume = Module[\"___em_js__api_set_volume\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_volume\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_stop_sound = Module[\"___em_js__api_stop_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_stop_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_use_websocket = Module[\"___em_js__api_use_websocket\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_use_websocket\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_closed = Module[\"___em_js__api_websocket_closed\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_closed\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_send = Module[\"___em_js__api_websocket_send\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_send\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__exit_error = Module[\"___em_js__exit_error\"] = function() {\r\n return Module[\"asm\"][\"___em_js__exit_error\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_size = Module[\"___em_js__get_file_size\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_size\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__remove_file = Module[\"___em_js__remove_file\"] = function() {\r\n return Module[\"asm\"][\"___em_js__remove_file\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__show_alert = Module[\"___em_js__show_alert\"] = function() {\r\n return Module[\"asm\"][\"___em_js__show_alert\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_pop = Module[\"___em_js__trace_pop\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_pop\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_push = Module[\"___em_js__trace_push\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_push\"].apply(null, arguments)\r\n};\r\n\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() {\r\n return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments)\r\n};\r\n\r\nvar _free = Module[\"_free\"] = function() {\r\n return Module[\"asm\"][\"_free\"].apply(null, arguments)\r\n};\r\n\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() {\r\n return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments)\r\n};\r\n\r\nvar _malloc = Module[\"_malloc\"] = function() {\r\n return Module[\"asm\"][\"_malloc\"].apply(null, arguments)\r\n};\r\n\r\nvar _memcpy = Module[\"_memcpy\"] = function() {\r\n return Module[\"asm\"][\"_memcpy\"].apply(null, arguments)\r\n};\r\n\r\nvar _memmove = Module[\"_memmove\"] = function() {\r\n return Module[\"asm\"][\"_memmove\"].apply(null, arguments)\r\n};\r\n\r\nvar _memset = Module[\"_memset\"] = function() {\r\n return Module[\"asm\"][\"_memset\"].apply(null, arguments)\r\n};\r\n\r\nvar _sbrk = Module[\"_sbrk\"] = function() {\r\n return Module[\"asm\"][\"_sbrk\"].apply(null, arguments)\r\n};\r\n\r\nvar _setThrew = Module[\"_setThrew\"] = function() {\r\n return Module[\"asm\"][\"_setThrew\"].apply(null, arguments)\r\n};\r\n\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() {\r\n return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments)\r\n};\r\n\r\nvar globalCtors = Module[\"globalCtors\"] = function() {\r\n return Module[\"asm\"][\"globalCtors\"].apply(null, arguments)\r\n};\r\n\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() {\r\n return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments)\r\n};\r\n\r\nvar stackRestore = Module[\"stackRestore\"] = function() {\r\n return Module[\"asm\"][\"stackRestore\"].apply(null, arguments)\r\n};\r\n\r\nvar stackSave = Module[\"stackSave\"] = function() {\r\n return Module[\"asm\"][\"stackSave\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_i = Module[\"dynCall_i\"] = function() {\r\n return Module[\"asm\"][\"dynCall_i\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iidiiii = Module[\"dynCall_iidiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iidiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_jiji = Module[\"dynCall_jiji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_jiji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() {\r\n return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiii = Module[\"dynCall_viiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiii = Module[\"dynCall_viiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiiii = Module[\"dynCall_viiiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viij = Module[\"dynCall_viij\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viij\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments)\r\n};\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n}\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n initRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n what += '';\r\n out(what);\r\n err(what);\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\n Module[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return DiabloSpawn\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = DiabloSpawn;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return DiabloSpawn; });\r\n else if (typeof exports === 'object')\r\n exports[\"DiabloSpawn\"] = DiabloSpawn;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","module.exports = require('./lib/axios');","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar runtime = function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n\n\n var IteratorPrototype = {};\n\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\"; // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n prototype[method] = function (arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n };\n\n exports.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n\n\n exports.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && typeof value === \"object\" && hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function (error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n\n exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n exports.async = function (innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList));\n return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === \"throw\") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n Gp[toStringTagSymbol] = \"Generator\"; // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n Gp[iteratorSymbol] = function () {\n return this;\n };\n\n Gp.toString = function () {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: \"root\"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n exports.values = values;\n\n function doneResult() {\n return {\n value: undefined,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n this.method = \"next\";\n this.arg = undefined;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n stop: function stop() {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" || record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n }; // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n\n return exports;\n}( // If this script is executing as a CommonJS module, use module.exports\n// as the regeneratorRuntime namespace. Otherwise create a new empty\n// object. Either way, the resulting object will be used to initialize\n// the regeneratorRuntime variable at the top of this file.\ntypeof module === \"object\" ? module.exports : {});\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}","'use strict';\n\nvar utils = require('./utils');\n\nvar bind = require('./helpers/bind');\n\nvar Axios = require('./core/Axios');\n\nvar mergeConfig = require('./core/mergeConfig');\n\nvar defaults = require('./defaults');\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\n\n\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context); // Copy axios.prototype to instance\n\n utils.extend(instance, Axios.prototype, context); // Copy context to instance\n\n utils.extend(instance, context);\n return instance;\n} // Create the default instance to be exported\n\n\nvar axios = createInstance(defaults); // Expose Axios class to allow class inheritance\n\naxios.Axios = Axios; // Factory for creating new instances\n\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n}; // Expose Cancel & CancelToken\n\n\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel'); // Expose all/spread\n\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = require('./helpers/spread');\nmodule.exports = axios; // Allow use of default import syntax in TypeScript\n\nmodule.exports.default = axios;","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nmodule.exports = function isBuffer(obj) {\n return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);\n};","'use strict';\n\nvar utils = require('./../utils');\n\nvar buildURL = require('../helpers/buildURL');\n\nvar InterceptorManager = require('./InterceptorManager');\n\nvar dispatchRequest = require('./dispatchRequest');\n\nvar mergeConfig = require('./mergeConfig');\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\n\n\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\n\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n config.method = config.method ? config.method.toLowerCase() : 'get'; // Hook up interceptors middleware\n\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n}; // Provide aliases for supported request methods\n\n\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\nmodule.exports = Axios;","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n\n\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\n\n\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\n\n\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;","'use strict';\n\nvar utils = require('./../utils');\n\nvar transformData = require('./transformData');\n\nvar isCancel = require('../cancel/isCancel');\n\nvar defaults = require('../defaults');\n\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\n\nvar combineURLs = require('./../helpers/combineURLs');\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\n\n\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config); // Support baseURL config\n\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n } // Ensure headers exist\n\n\n config.headers = config.headers || {}; // Transform request data\n\n config.data = transformData(config.data, config.headers, config.transformRequest); // Flatten headers\n\n config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers || {});\n utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) {\n delete config.headers[method];\n });\n var adapter = config.adapter || defaults.adapter;\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config); // Transform response data\n\n response.data = transformData(response.data, response.headers, config.transformResponse);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config); // Transform response data\n\n if (reason && reason.response) {\n reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);\n }\n }\n\n return Promise.reject(reason);\n });\n};","'use strict';\n\nvar utils = require('./../utils');\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\n\n\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n return data;\n};","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};","'use strict';\n\nvar createError = require('./createError');\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\n\n\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));\n }\n};","'use strict';\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\n\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function () {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n\n return error;\n};","'use strict';\n\nvar utils = require('./../utils'); // Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\n\n\nvar ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent'];\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\n\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) {\n return parsed;\n }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n return parsed;\n};","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href); // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n\n return function isURLSameOrigin(requestURL) {\n var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() : // Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}();","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs support document.cookie\nfunction standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n}() : // Non standard browser env (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() {\n return null;\n },\n remove: function remove() {}\n };\n}();","'use strict';\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\n\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};","'use strict';\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\n\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n};","'use strict';\n\nvar Cancel = require('./Cancel');\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\n\n\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n\n\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;","'use strict';\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\n\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","export default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}","export default function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","async function do_websocket_open(url, handler) {\r\n const socket = new WebSocket(url);\r\n socket.binaryType = \"arraybuffer\";\r\n let versionCbk = null;\r\n socket.addEventListener(\"message\", ({data}) => {\r\n if (versionCbk) {\r\n versionCbk(data);\r\n }\r\n handler(data);\r\n });\r\n await new Promise((resolve, reject) => {\r\n const onError = err => reject(1);\r\n socket.addEventListener(\"error\", onError);\r\n socket.addEventListener(\"open\", () => {\r\n socket.removeEventListener(\"error\", onError);\r\n resolve();\r\n });\r\n });\r\n await new Promise((resolve, reject) => {\r\n const to = setTimeout(() => {\r\n versionCbk = null;\r\n reject(1);\r\n }, 5000);\r\n versionCbk = data => {\r\n clearTimeout(to);\r\n const u8 = new Uint8Array(data);\r\n if (u8[0] === 0x32) {\r\n versionCbk = null;\r\n const version = u8[1] | (u8[2] << 8) | (u8[3] << 16) | (u8[4] << 24);\r\n if (version === 1) {\r\n resolve();\r\n } else {\r\n reject(2);\r\n }\r\n }\r\n };\r\n });\r\n\r\n const vers = process.env.VERSION.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\r\n const clientInfo = new Uint8Array(5);\r\n clientInfo[0] = 0x31;\r\n clientInfo[1] = parseInt(vers[3]);\r\n clientInfo[2] = parseInt(vers[2]);\r\n clientInfo[3] = parseInt(vers[1]);\r\n clientInfo[4] = 0;\r\n socket.send(clientInfo);\r\n return socket;\r\n}\r\n\r\nexport default function websocket_open(url, handler, finisher) {\r\n let ws = null, batch = [], intr = null;\r\n const proxy = {\r\n get readyState() {\r\n return ws ? ws.readyState : 0;\r\n },\r\n send(msg) {\r\n batch.push(msg.slice());\r\n },\r\n close() {\r\n if (intr) {\r\n clearInterval(intr);\r\n intr = null;\r\n }\r\n if (ws) {\r\n ws.close();\r\n } else {\r\n batch = null;\r\n }\r\n },\r\n };\r\n do_websocket_open(url, handler).then(sock => {\r\n ws = sock;\r\n if (batch) {\r\n intr = setInterval(() => {\r\n if (!batch.length) {\r\n return;\r\n }\r\n const size = batch.reduce((sum, msg) => sum + msg.byteLength, 3);\r\n const buffer = new Uint8Array(size);\r\n buffer[0] = 0;\r\n buffer[1] = (batch.length & 0xFF);\r\n buffer[2] = batch.length >> 8;\r\n let pos = 3;\r\n for (let msg of batch) {\r\n buffer.set(msg, pos);\r\n pos += msg.byteLength;\r\n }\r\n ws.send(buffer);\r\n batch.length = 0;\r\n }, 100);\r\n } else {\r\n ws.close();\r\n }\r\n finisher(0);\r\n }, err => {\r\n finisher(err);\r\n });\r\n return proxy;\r\n}\r\n","import DiabloBinary from './Diablo.wasm';\r\nimport DiabloModule from './Diablo.jscc';\r\nimport SpawnBinary from './DiabloSpawn.wasm';\r\nimport SpawnModule from './DiabloSpawn.jscc';\r\nimport axios from 'axios';\r\n\r\nimport websocket_open from './websocket';\r\n\r\nconst DiabloSize = 1466809;\r\nconst SpawnSize = 1337416;\r\n\r\n/* eslint-disable-next-line no-restricted-globals */\r\nconst worker = self;\r\n\r\nlet canvas = null, context = null;\r\nlet imageData = null;\r\nlet files = null;\r\nlet renderBatch = null;\r\nlet drawBelt = null;\r\nlet is_spawn = false;\r\nlet websocket = null;\r\n\r\nfunction onError(err, action=\"error\") {\r\n if (err instanceof Error) {\r\n worker.postMessage({action, error: err.toString(), stack: err.stack});\r\n } else {\r\n worker.postMessage({action, error: err.toString()});\r\n }\r\n}\r\n\r\nconst ChunkSize = 1 << 20;\r\nclass RemoteFile {\r\n constructor(url) {\r\n const request = new XMLHttpRequest();\r\n request.open('HEAD', url, false);\r\n request.send();\r\n if (request.status < 200 || request.status >= 300) {\r\n throw Error('Failed to load remote file');\r\n }\r\n this.byteLength = parseInt(request.getResponseHeader('Content-Length'));\r\n\r\n this.url = url;\r\n\r\n this.buffer = new Uint8Array(this.byteLength);\r\n this.chunks = new Uint8Array(((this.byteLength + ChunkSize - 1) >> 20) | 0);\r\n }\r\n\r\n subarray(start, end) {\r\n let chunk0 = (start / ChunkSize) | 0;\r\n let chunk1 = ((end + ChunkSize - 1) / ChunkSize) | 0;\r\n let missing0 = chunk1, missing1 = chunk0;\r\n for (let i = chunk0; i < chunk1; ++i) {\r\n if (!this.chunks[i]) {\r\n missing0 = Math.min(missing0, i);\r\n missing1 = Math.max(missing1, i);\r\n }\r\n }\r\n if (missing0 <= missing1) {\r\n const request = new XMLHttpRequest();\r\n request.open('GET', this.url, false);\r\n request.setRequestHeader('Range', `bytes=${missing0 * ChunkSize}-${Math.min(missing1 * ChunkSize + ChunkSize - 1, this.byteLength - 1)}`);\r\n request.responseType = 'arraybuffer';\r\n request.send();\r\n if (request.status < 200 || request.status >= 300) {\r\n throw Error('Failed to load remote file');\r\n } else {\r\n const header = request.getResponseHeader('Content-Range');\r\n let m, start = 0;\r\n if (header && (m = header.match(/bytes (\\d+)-(\\d+)\\/(\\d+)/))) {\r\n start = parseInt(m[1]);\r\n }\r\n this.buffer.set(new Uint8Array(request.response), start);\r\n chunk0 = ((start + ChunkSize - 1) / ChunkSize) | 0;\r\n chunk1 = ((start + request.response.byteLength + ChunkSize - 1) / ChunkSize) | 0;\r\n for (let i = chunk0; i < chunk1; ++i) {\r\n this.chunks[i] = 1;\r\n }\r\n }\r\n }\r\n return this.buffer.subarray(start, end);\r\n }\r\n}\r\n\r\nconst DApi = {\r\n exit_error(error) {\r\n throw Error(error);\r\n },\r\n\r\n exit_game() {\r\n worker.postMessage({action: \"exit\"});\r\n },\r\n current_save_id(id) {\r\n worker.postMessage({action: \"current_save\", name: id >= 0 ? (is_spawn ? `spawn${id}.sv` : `single_${id}.sv`) : null});\r\n },\r\n\r\n get_file_size(path) {\r\n const data = files.get(path.toLowerCase());\r\n return data ? data.byteLength : 0;\r\n },\r\n get_file_contents(path, array, offset) {\r\n const data = files.get(path.toLowerCase());\r\n if (data) {\r\n array.set(data.subarray(offset, offset + array.byteLength));\r\n }\r\n },\r\n put_file_contents(path, array) {\r\n path = path.toLowerCase();\r\n // if (!path.match(/^(spawn\\d+\\.sv|single_\\d+\\.sv|config\\.ini)$/i)) {\r\n // alert(`Bad file name: ${path}`);\r\n // }\r\n files.set(path, array);\r\n worker.postMessage({action: \"fs\", func: \"update\", params: [path, array]});\r\n },\r\n remove_file(path) {\r\n path = path.toLowerCase();\r\n files.delete(path);\r\n worker.postMessage({action: \"fs\", func: \"delete\", params: [path]});\r\n },\r\n\r\n set_cursor(x, y) {\r\n worker.postMessage({action: \"cursor\", x, y});\r\n },\r\n open_keyboard(...args) {\r\n worker.postMessage({action: \"keyboard\", rect: [...args]});\r\n },\r\n close_keyboard() {\r\n worker.postMessage({action: \"keyboard\", rect: null});\r\n },\r\n\r\n use_websocket(flag) {\r\n if (flag) {\r\n if (!websocket || websocket.readyState !== 1) {\r\n const sock = websocket = websocket_open('wss://diablo.rivsoft.net/websocket', data => {\r\n if (websocket === sock) {\r\n try_api(() => {\r\n const ptr = wasm._DApi_AllocPacket(data.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(data), ptr);\r\n });\r\n }\r\n }, code => {\r\n if (typeof code !== \"number\") {\r\n throw code;\r\n } else {\r\n call_api(\"SNet_WebsocketStatus\", code);\r\n }\r\n });\r\n } else {\r\n call_api(\"SNet_WebsocketStatus\", 0);\r\n }\r\n } else {\r\n if (websocket) {\r\n websocket.close();\r\n }\r\n websocket = null;\r\n }\r\n },\r\n websocket_closed() {\r\n return websocket ? websocket.readyState !== 1 : false;\r\n },\r\n};\r\n/*\r\nlet frameTime = 0, lastTime = 0;\r\nfunction getFPS() {\r\n const time = performance.now();\r\n if (!lastTime) {\r\n lastTime = time;\r\n }\r\n frameTime = 0.9 * frameTime + 0.1 * (time - lastTime);\r\n lastTime = time;\r\n return frameTime ? 1000.0 / frameTime : 0.0;\r\n}\r\n*/\r\nconst DApi_renderLegacy = {\r\n draw_begin() {\r\n renderBatch = {\r\n images: [],\r\n text: [],\r\n clip: null,\r\n belt: drawBelt,\r\n };\r\n drawBelt = null;\r\n },\r\n draw_blit(x, y, w, h, data) {\r\n renderBatch.images.push({x, y, w, h, data: data.slice()});\r\n },\r\n draw_clip_text(x0, y0, x1, y1) {\r\n renderBatch.clip = {x0, y0, x1, y1};\r\n },\r\n draw_text(x, y, text, color) {\r\n renderBatch.text.push({x, y, text, color});\r\n },\r\n draw_end() {\r\n //DApi.draw_text(10, 10, `FPS: ${getFPS().toFixed(1)} (Transfer)`, 0xFFCC00);\r\n const transfer = renderBatch.images.map(({data}) => data.buffer);\r\n if (renderBatch.belt) {\r\n transfer.push(renderBatch.belt.buffer);\r\n }\r\n worker.postMessage({action: \"render\", batch: renderBatch}, transfer);\r\n renderBatch = null;\r\n },\r\n draw_belt(items) {\r\n drawBelt = items.slice();\r\n },\r\n};\r\n\r\nconst DApi_renderOffscreen = {\r\n draw_begin() {\r\n context.save();\r\n context.font = 'bold 13px Times New Roman';\r\n },\r\n draw_blit(x, y, w, h, data) {\r\n imageData.data.set(data);\r\n context.putImageData(imageData, x, y);\r\n },\r\n draw_clip_text(x0, y0, x1, y1) {\r\n context.beginPath();\r\n context.rect(x0, y0, x1 - x0, y1 - y0);\r\n context.clip();\r\n },\r\n draw_text(x, y, text, color) {\r\n const r = ((color >> 16) & 0xFF);\r\n const g = ((color >> 8) & 0xFF);\r\n const b = (color & 0xFF);\r\n context.fillStyle = `rgb(${r}, ${g}, ${b})`;\r\n context.fillText(text, x, y + 22);\r\n },\r\n draw_end() {\r\n //DApi.draw_text(10, 10, `FPS: ${getFPS().toFixed(1)} (Offscreen)`, 0xFFCC00);\r\n context.restore();\r\n const bitmap = canvas.transferToImageBitmap();\r\n const transfer = [bitmap];\r\n if (drawBelt) {\r\n transfer.push(drawBelt.buffer);\r\n }\r\n worker.postMessage({action: \"render\", batch: {bitmap, belt: drawBelt}}, transfer);\r\n drawBelt = null;\r\n },\r\n draw_belt(items) {\r\n drawBelt = items.slice();\r\n },\r\n};\r\n\r\nlet audioBatch = null, audioTransfer = null;\r\nlet maxSoundId = 0, maxBatchId = 0;\r\n[\"create_sound_raw\", \"create_sound\", \"duplicate_sound\"].forEach(func => {\r\n DApi[func] = function(...params) {\r\n if (audioBatch) {\r\n maxBatchId = params[0] + 1;\r\n audioBatch.push({func, params});\r\n if (func !== \"duplicate_sound\") {\r\n audioTransfer.push(params[1].buffer);\r\n }\r\n } else {\r\n maxSoundId = params[0] + 1;\r\n const transfer = [];\r\n if (func !== \"duplicate_sound\") {\r\n transfer.push(params[1].buffer);\r\n }\r\n worker.postMessage({action: \"audio\", func, params}, transfer);\r\n }\r\n };\r\n});\r\n[\"play_sound\", \"set_volume\", \"stop_sound\", \"delete_sound\"].forEach(func => {\r\n DApi[func] = function(...params) {\r\n if (audioBatch && params[0] >= maxSoundId) {\r\n audioBatch.push({func, params});\r\n } else {\r\n worker.postMessage({action: \"audio\", func, params});\r\n }\r\n }\r\n});\r\n\r\nlet packetBatch = null;\r\nDApi.websocket_send = function(data) {\r\n if (websocket) {\r\n websocket.send(data);\r\n } else if (packetBatch) {\r\n packetBatch.push(data.slice().buffer);\r\n } else {\r\n worker.postMessage({action: \"packet\", buffer: data});\r\n }\r\n};\r\n\r\nworker.DApi = DApi;\r\n\r\nlet wasm = null;\r\n\r\nfunction try_api(func) {\r\n try {\r\n func();\r\n } catch (e) {\r\n onError(e);\r\n }\r\n}\r\n\r\nfunction call_api(func, ...params) {\r\n try_api(() => {\r\n const nested = (audioBatch != null);\r\n if (!nested) {\r\n audioBatch = [];\r\n audioTransfer = [];\r\n packetBatch = [];\r\n }\r\n if (func !== \"text\") {\r\n wasm[\"_\" + func](...params);\r\n } else {\r\n const ptr = wasm._DApi_SyncTextPtr();\r\n const text = params[0];\r\n const length = Math.min(text.length, 255);\r\n const heap = wasm.HEAPU8;\r\n for (let i = 0; i < length; ++i) {\r\n heap[ptr + i] = text.charCodeAt(i);\r\n }\r\n heap[ptr + length] = 0;\r\n wasm._DApi_SyncText(params[1]);\r\n }\r\n if (!nested) {\r\n if (audioBatch.length) {\r\n maxSoundId = maxBatchId;\r\n worker.postMessage({action: \"audioBatch\", batch: audioBatch}, audioTransfer);\r\n }\r\n if (packetBatch.length) {\r\n worker.postMessage({action: \"packetBatch\", batch: packetBatch}, packetBatch);\r\n }\r\n audioBatch = null;\r\n audioTransfer = null;\r\n packetBatch = null;\r\n }\r\n });\r\n}\r\n\r\nfunction progress(text, loaded, total) {\r\n worker.postMessage({action: \"progress\", text, loaded, total});\r\n}\r\n\r\nconst readFile = (file, progress) => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n if (progress) {\r\n progress({loaded: file.size});\r\n }\r\n resolve(reader.result);\r\n };\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n if (progress) {\r\n reader.addEventListener(\"progress\", progress);\r\n }\r\n reader.readAsArrayBuffer(file);\r\n});\r\n\r\nasync function initWasm(spawn, progress) {\r\n const binary = await axios.request({\r\n url: spawn ? SpawnBinary : DiabloBinary,\r\n responseType: 'arraybuffer',\r\n onDownloadProgress: progress,\r\n });\r\n const result = await (spawn ? SpawnModule : DiabloModule)({wasmBinary: binary.data}).ready;\r\n progress({loaded: 2000000});\r\n return result;\r\n}\r\n\r\nasync function init_game(mpq, spawn, offscreen) {\r\n is_spawn = spawn;\r\n if (offscreen) {\r\n canvas = new OffscreenCanvas(640, 480);\r\n context = canvas.getContext(\"2d\");\r\n imageData = context.createImageData(640, 480);\r\n Object.assign(DApi, DApi_renderOffscreen);\r\n } else {\r\n Object.assign(DApi, DApi_renderLegacy);\r\n }\r\n\r\n if (!mpq) {\r\n const name = (spawn ? 'spawn.mpq' : 'diabdat.mpq');\r\n if (!files.has(name)) {\r\n // This should never happen, but we do support remote loading\r\n files.set(name, new RemoteFile(`${process.env.PUBLIC_URL}/${name}`));\r\n }\r\n }\r\n\r\n progress(\"Loading...\");\r\n let mpqLoaded = 0, mpqTotal = (mpq ? mpq.size : 0), wasmLoaded = 0, wasmTotal = (spawn ? SpawnSize : DiabloSize);\r\n const wasmWeight = 5;\r\n function updateProgress() {\r\n progress(\"Loading...\", mpqLoaded + wasmLoaded * wasmWeight, mpqTotal + wasmTotal * wasmWeight);\r\n }\r\n const loadWasm = initWasm(spawn, e => {\r\n wasmLoaded = Math.min(e.loaded, wasmTotal);\r\n updateProgress();\r\n });\r\n let loadMpq = mpq ? readFile(mpq, e => {\r\n mpqLoaded = e.loaded;\r\n updateProgress();\r\n }) : Promise.resolve(null);\r\n [wasm, mpq] = await Promise.all([loadWasm, loadMpq]);\r\n\r\n if (mpq) {\r\n files.set(spawn ? 'spawn.mpq' : 'diabdat.mpq', new Uint8Array(mpq));\r\n }\r\n\r\n progress(\"Initializing...\");\r\n\r\n const vers = process.env.VERSION.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\r\n\r\n //wasm._SNet_InitWebsocket();\r\n wasm._DApi_Init(Math.floor(performance.now()), offscreen ? 1 : 0, parseInt(vers[1]), parseInt(vers[2]), parseInt(vers[3]));\r\n\r\n setInterval(() => {\r\n call_api(\"DApi_Render\", Math.floor(performance.now())); \r\n }, 50);\r\n}\r\n\r\nworker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"init\":\r\n files = data.files;\r\n init_game(data.mpq, data.spawn, data.offscreen).then(\r\n () => worker.postMessage({action: \"loaded\"}),\r\n e => onError(e, \"failed\"));\r\n break;\r\n case \"event\":\r\n call_api(data.func, ...data.params);\r\n break;\r\n case \"packet\":\r\n try_api(() => {\r\n const ptr = wasm._DApi_AllocPacket(data.buffer.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(data.buffer), ptr);\r\n });\r\n break;\r\n case \"packetBatch\":\r\n try_api(() => {\r\n for (let packet of data.batch) {\r\n const ptr = wasm._DApi_AllocPacket(packet.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(packet), ptr);\r\n }\r\n });\r\n break;\r\n default:\r\n }\r\n});\r\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/index.html b/index.html index 9be69ea..5e489f0 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -DIABLO
\ No newline at end of file +DIABLO
\ No newline at end of file diff --git a/precache-manifest.457140d01593ad0a7e968f24ae827c55.js b/precache-manifest.3dac5a6109bc75df34456f034ca62b7b.js similarity index 70% rename from precache-manifest.457140d01593ad0a7e968f24ae827c55.js rename to precache-manifest.3dac5a6109bc75df34456f034ca62b7b.js index f691b65..ea7fc1f 100644 --- a/precache-manifest.457140d01593ad0a7e968f24ae827c55.js +++ b/precache-manifest.3dac5a6109bc75df34456f034ca62b7b.js @@ -1,19 +1,19 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ { - "revision": "040c19322138c05dbe656f00bf7d9a7d", - "url": "/diabloweb/559256dc812e37cc8bb5.worker.js" + "revision": "71ba5fb375752153c9bc4a1c34faaa99", + "url": "/diabloweb/8acc76fdb6ee253c485e.worker.js" }, { - "revision": "84295573488973f434291055ed9bbbff", - "url": "/diabloweb/b6959098d798174bd69f.worker.js" + "revision": "4115803155f6ffac29dc0498aae8c82f", + "url": "/diabloweb/d2271be9a67638d3642f.worker.js" }, { - "revision": "aa5990b26ec2af1a052ce9dbf9838e37", + "revision": "20661cdca14f65e7f2b74f7739be9cc2", "url": "/diabloweb/index.html" }, { - "revision": "4bfb1f4cbbd7e8ddffcd", - "url": "/diabloweb/static/css/main.fe873d2c.chunk.css" + "revision": "2ea328faa56b6a4bd092", + "url": "/diabloweb/static/css/main.e1dd4272.chunk.css" }, { "revision": "ced5f643588b32106eeb", @@ -24,8 +24,8 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/diabloweb/static/js/5.430d8c5c.chunk.js" }, { - "revision": "4bfb1f4cbbd7e8ddffcd", - "url": "/diabloweb/static/js/main.62369ba5.chunk.js" + "revision": "2ea328faa56b6a4bd092", + "url": "/diabloweb/static/js/main.0a18bc0c.chunk.js" }, { "revision": "077fe45e700d7971de0b", @@ -36,8 +36,8 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/diabloweb/static/js/runtime~storage.83a78cef.js" }, { - "revision": "2a86d31d77ff808426f1", - "url": "/diabloweb/static/js/storage.13abf7f9.chunk.js" + "revision": "8e36c4353450853391cd", + "url": "/diabloweb/static/js/storage.8fcdd212.chunk.js" }, { "revision": "570bd59ab481c6418fcd26ed12f9da86", @@ -68,7 +68,7 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/diabloweb/static/media/shift.b40e4a63.svg" }, { - "revision": "2a406d87aece2c756a7af013eb2cd8ef", + "revision": "469777abc7b73bbcc138f5508946c162", "url": "/diabloweb/storage.html" } ]); \ No newline at end of file diff --git a/service-worker.js b/service-worker.js index b9015b3..152f1ec 100644 --- a/service-worker.js +++ b/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts( - "/diabloweb/precache-manifest.457140d01593ad0a7e968f24ae827c55.js" + "/diabloweb/precache-manifest.3dac5a6109bc75df34456f034ca62b7b.js" ); self.addEventListener('message', (event) => { diff --git a/static/css/main.fe873d2c.chunk.css b/static/css/main.e1dd4272.chunk.css similarity index 99% rename from static/css/main.fe873d2c.chunk.css rename to static/css/main.e1dd4272.chunk.css index 5924fe3..3bbe842 100644 --- a/static/css/main.fe873d2c.chunk.css +++ b/static/css/main.e1dd4272.chunk.css @@ -1,2 +1,2 @@ a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,button,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,input,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}#root,.App,body{overflow:hidden;position:absolute;left:0;top:0;right:0;bottom:0}.App{background-color:#000}.App.dropping{background-color:#111}.Body,.BodyV{height:auto;left:calc(50% - 66.66667vh);width:133.33333vh}.Body,.Body .inner,.BodyV{position:absolute;top:0;bottom:0}.Body .inner{left:0;right:0}@media (max-aspect-ratio:4/3){.Body{top:calc(50% - 37.5vw);height:75vw}.Body,.BodyV{left:0;right:0;width:auto}}.BodyV{pointer-events:none}@media (min-aspect-ratio:3/1){.App.keyboard .Body .inner{position:absolute;left:50%;top:50%;width:75vw;height:56.25vw;-webkit-transform:translate(-50%,-70%);transform:translate(-50%,-70%)}}.App canvas{width:100%;height:100%;cursor:none;visibility:hidden}.App.started canvas{visibility:visible}.App .keyboard{position:absolute;pointer-events:auto;background:transparent;color:transparent;border:none;outline:none;z-index:100;display:none;cursor:none}.App .keyboard::-moz-selection{background:transparent;color:transparent}.App .keyboard::selection{background:transparent;color:transparent}.App.keyboard .keyboard{display:block}.App .error,.App .loading,.App .start{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.App .error,.App .start{max-width:90%;max-height:90%;overflow-y:auto;pointer-events:auto}.App .start{border:1px solid #888;padding:12px;color:#fff;font-size:18px;text-align:center;background:#000}.App .start p{margin:10px 0}.App .start .startButton{display:block;margin-left:auto;margin-right:auto;border:1px solid #fff;background:#000;font-size:2em;padding:4px 18px;cursor:pointer;margin-top:6px;width:8em}.App .start .startButton:hover{background-color:#111}.App .start .saveList{border:1px solid #fff;text-align:left}.App .start .saveList li{padding:0 6px}.App .start .saveList li .info{color:#888;margin-left:6px}.App .start .saveList li .btnRemove{color:#800;float:right;cursor:pointer;margin:0 4px}.App .start .saveList li .btnRemove:hover{color:red}.App .start .saveList li .btnDownload{color:#888;float:right;cursor:pointer;margin:0 4px}.App .start .saveList li .btnDownload:hover{color:#fff}.App .start .saveList li:hover{background-color:#444}.App .error{display:block;border:1px solid #800;background:#300;padding:12px;color:#f33;font-size:18px;text-align:center}.App .error:hover{text-decoration:none}.App .error .header{font-weight:700;font-size:1.2em;margin-bottom:.3em}.App .error .body{font-family:monospace}.App .error .footer{margin-top:.5em;font-size:.8em}.App .loading{color:#888;font-size:32px;text-align:center;width:75%}.App .loading .progressBar{display:block;position:absolute;margin-top:16px;width:100%;height:40px;border:2px solid #888}.App .loading .progressBar span{position:absolute;left:3px;top:3px;bottom:3px;right:3px}.App .loading .progressBar span span{position:absolute;left:0;top:0;bottom:0;background-color:#888}.App .link,.App a{display:inline-block;color:#7070ff;text-decoration:none;cursor:pointer}.App .link:hover,.App a:hover{text-decoration:underline}.App .touch-ui{display:none;pointer-events:none;position:absolute;top:0;bottom:0;width:25vh}.App .touch-ui .touch-button{position:absolute;left:50%;background-color:#444;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);pointer-events:auto;-webkit-mask-size:100% 100%;mask-size:100% 100%}.App .touch-ui .touch-button.active{background-color:#fff}.App .touch-ui .touch-button-0{top:16.7vh}.App .touch-ui .touch-button-1{top:50vh}.App .touch-ui .touch-button-2{top:83.3vh}.App .touch-ui.touch-mods{left:0}.App .touch-ui.touch-mods .touch-button{width:20vh;height:20vh;border-radius:10vh}.App .touch-ui.touch-mods .touch-button-0{-webkit-mask-image:url(/diabloweb/static/media/move.ddc5d817.svg);mask-image:url(/diabloweb/static/media/move.ddc5d817.svg)}.App .touch-ui.touch-mods .touch-button-1{-webkit-mask-image:url(/diabloweb/static/media/rmb.bd1e6e63.svg);mask-image:url(/diabloweb/static/media/rmb.bd1e6e63.svg)}.App .touch-ui.touch-mods .touch-button-2{-webkit-mask-image:url(/diabloweb/static/media/shift.b40e4a63.svg);mask-image:url(/diabloweb/static/media/shift.b40e4a63.svg)}.App .touch-ui.touch-belt{right:0}.App .touch-ui.touch-belt .touch-button{width:14vh;height:14vh;font-size:1vh;border-radius:20%;overflow:hidden;background-color:#000;border:2px solid #444}.App .touch-ui.touch-belt .touch-button canvas{position:absolute;left:5%;top:5%;width:90%;height:90%}.App .touch-ui.touch-belt .touch-button:after{content:"";position:absolute;left:0;top:0;right:0;bottom:0;border-radius:20%;box-shadow:inset 0 0 1em 1.5em #000}.App.touch .touch-ui{display:block}.App.touch.keyboard .touch-ui{display:none}@media (max-aspect-ratio:11/6){.App .touch-ui{width:calc(50vw - 66.66667vh)}}@media (max-aspect-ratio:26/15){.App .touch-ui{width:20vh}}@media (max-aspect-ratio:4/3){.App .touch-ui{width:auto;height:20vw}.App .touch-ui .touch-button{top:50%}.App .touch-ui .touch-button-0{left:16.7vw}.App .touch-ui .touch-button-1{left:50vw}.App .touch-ui .touch-button-2{left:83.3vw}.App .touch-ui.touch-mods{top:auto;right:0}.App .touch-ui.touch-mods .touch-button{width:20vw;height:20vw;border-radius:10vw}.App .touch-ui.touch-belt{bottom:auto;left:0}.App .touch-ui.touch-belt .touch-button{width:14vw;height:14vw;font-size:1vw}}@media (max-aspect-ratio:20/23){.App .touch-ui{height:calc(50vh - 37.5vw)}}@media (max-aspect-ratio:4/5){.App .touch-ui{height:25vw}} -/*# sourceMappingURL=main.fe873d2c.chunk.css.map */ \ No newline at end of file +/*# sourceMappingURL=main.e1dd4272.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.fe873d2c.chunk.css.map b/static/css/main.e1dd4272.chunk.css.map similarity index 98% rename from static/css/main.fe873d2c.chunk.css.map rename to static/css/main.e1dd4272.chunk.css.map index 6d0a6d1..ed8184f 100644 --- a/static/css/main.fe873d2c.chunk.css.map +++ b/static/css/main.e1dd4272.chunk.css.map @@ -1 +1 @@ -{"version":3,"sources":["reset.css","C:\\Projects\\diabloweb\\diabloweb/src\\App.scss"],"names":[],"mappings":"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","file":"main.fe873d2c.chunk.css","sourcesContent":["/* http://meyerweb.com/eric/tools/css/reset/ \r\n v2.0 | 20110126\r\n License: none (public domain)\r\n*/\r\n\r\nhtml, body, div, span, applet, object, iframe,\r\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\r\na, abbr, acronym, address, big, cite, code,\r\ndel, dfn, em, img, ins, kbd, q, s, samp,\r\nsmall, strike, strong, sub, sup, tt, var,\r\nb, u, i, center,\r\ndl, dt, dd, ol, ul, li,\r\nfieldset, form, label, legend,\r\ntable, caption, tbody, tfoot, thead, tr, th, td,\r\narticle, aside, canvas, details, embed, \r\nfigure, figcaption, footer, header, hgroup, \r\nmenu, nav, output, ruby, section, summary,\r\ntime, mark, audio, video, input, button {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\tborder: 0;\r\n\tfont-size: 100%;\r\n font: inherit;\r\n\tvertical-align: baseline;\r\n}\r\n/* HTML5 display-role reset for older browsers */\r\narticle, aside, details, figcaption, figure, \r\nfooter, header, hgroup, menu, nav, section {\r\n\tdisplay: block;\r\n}\r\n/*body {\r\n\tline-height: 1;\r\n}*/\r\nol, ul {\r\n\tlist-style: none;\r\n}\r\nblockquote, q {\r\n\tquotes: none;\r\n}\r\nblockquote:before, blockquote:after,\r\nq:before, q:after {\r\n\tcontent: '';\r\n\tcontent: none;\r\n}\r\ntable {\r\n\tborder-collapse: collapse;\r\n\tborder-spacing: 0;\r\n}\r\n","body, #root, .App {\r\n overflow: hidden;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n}\r\n.App {\r\n background-color: #000;\r\n &.dropping {\r\n background-color: #111;\r\n }\r\n}\r\n.Body, .BodyV {\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n height: auto;\r\n left: calc(50% - 200vh / 3);\r\n width: calc(400vh / 3);\r\n}\r\n.Body .inner {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n}\r\n@media (max-aspect-ratio: 640/480) {\r\n .Body {\r\n left: 0;\r\n right: 0;\r\n width: auto;\r\n top: calc(50% - 37.5vw);\r\n height: 75vw;\r\n }\r\n .BodyV {\r\n left: 0;\r\n right: 0;\r\n width: auto;\r\n }\r\n}\r\n.BodyV {\r\n pointer-events: none;\r\n}\r\n\r\n@media (min-aspect-ratio: 3/1) {\r\n .App.keyboard .Body .inner {\r\n position: absolute;\r\n left: 50%;\r\n top: 50%;\r\n width: 75vw;\r\n height: 56.25vw;\r\n transform: translate(-50%, -70%);\r\n }\r\n}\r\n\r\n.App {\r\n canvas {\r\n width: 100%;\r\n height: 100%;\r\n cursor: none;\r\n visibility: hidden;\r\n }\r\n &.started canvas {\r\n visibility: visible;\r\n }\r\n .keyboard {\r\n position: absolute;\r\n pointer-events: auto;\r\n background: rgba(0, 0, 0, 0);\r\n color: rgba(0, 0, 0, 0);\r\n border: none;\r\n outline: none;\r\n z-index: 100;\r\n display: none;\r\n cursor: none;\r\n &::selection {\r\n background: rgba(0, 0, 0, 0);\r\n color: rgba(0, 0, 0, 0);\r\n }\r\n }\r\n &.keyboard .keyboard {\r\n display: block;\r\n }\r\n\r\n .start, .error, .loading {\r\n position: absolute;\r\n left: 50%;\r\n top: 50%;\r\n transform: translate(-50%, -50%);\r\n }\r\n\r\n .start, .error {\r\n max-width: 90%;\r\n max-height: 90%;\r\n overflow-y: auto;\r\n pointer-events: auto;\r\n }\r\n\r\n .start {\r\n border: 1px solid #888;\r\n padding: 12px;\r\n color: #fff;\r\n font-size: 18px;\r\n text-align: center;\r\n background: #000;\r\n p {\r\n margin: 10px 0;\r\n }\r\n .startButton {\r\n display: block;\r\n margin-left: auto;\r\n margin-right: auto;\r\n border: 1px solid #fff;\r\n background: #000;\r\n font-size: 2em;\r\n padding: 4px 18px;\r\n cursor: pointer;\r\n margin-top: 6px;\r\n width: 8em;\r\n &:hover {\r\n background-color: #111;\r\n }\r\n }\r\n .saveList {\r\n border: 1px solid #fff;\r\n text-align: left;\r\n li {\r\n padding: 0 6px;\r\n .info {\r\n color: #888;\r\n margin-left: 6px;\r\n }\r\n .btnRemove {\r\n color: #800;\r\n &:hover {\r\n color: #f00;\r\n }\r\n float: right;\r\n cursor: pointer;\r\n margin: 0 4px;\r\n }\r\n .btnDownload {\r\n color: #888;\r\n &:hover {\r\n color: #fff;\r\n }\r\n float: right;\r\n cursor: pointer;\r\n margin: 0 4px;\r\n }\r\n &:hover {\r\n background-color: #444;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.App {\r\n .error {\r\n display: block;\r\n border: 1px solid #800;\r\n background: #300;\r\n padding: 12px;\r\n color: #f33;\r\n font-size: 18px;\r\n text-align: center;\r\n &:hover {\r\n text-decoration: none;\r\n }\r\n .header {\r\n font-weight: bold;\r\n font-size: 1.2em;\r\n margin-bottom: 0.3em;\r\n }\r\n .body {\r\n font-family: monospace;\r\n }\r\n .footer {\r\n margin-top: 0.5em;\r\n font-size: 0.8em;\r\n }\r\n }\r\n\r\n .loading {\r\n color: #888;\r\n font-size: 32px;\r\n text-align: center;\r\n width: 75%;\r\n .progressBar {\r\n display: block;\r\n position: absolute;\r\n margin-top: 16px;\r\n width: 100%;\r\n height: 40px;\r\n border: 2px solid #888;\r\n span {\r\n position: absolute;\r\n left: 3px;\r\n top: 3px;\r\n bottom: 3px;\r\n right: 3px;\r\n }\r\n span span {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n bottom: 0;\r\n background-color: #888;\r\n }\r\n }\r\n }\r\n a, .link {\r\n display: inline-block;\r\n color: rgb(112, 112, 255);\r\n text-decoration: none;\r\n &:hover {\r\n text-decoration: underline;\r\n }\r\n cursor: pointer;\r\n }\r\n}\r\n\r\n.App {\r\n .touch-ui {\r\n display: none;\r\n pointer-events: none;\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n width: 25vh;\r\n .touch-button {\r\n position: absolute;\r\n left: 50%;\r\n background-color: #444;\r\n transform: translate(-50%, -50%);\r\n pointer-events: auto;\r\n &.active {\r\n background-color: #fff;\r\n }\r\n mask-size: 100% 100%;\r\n }\r\n .touch-button-0 {\r\n top: 16.7vh;\r\n }\r\n .touch-button-1 {\r\n top: 50vh;\r\n }\r\n .touch-button-2 {\r\n top: 83.3vh;\r\n }\r\n }\r\n .touch-ui.touch-mods {\r\n left: 0;\r\n .touch-button {\r\n width: 20vh;\r\n height: 20vh;\r\n border-radius: 10vh;\r\n }\r\n .touch-button-0 {\r\n mask-image: url(./icons/move.svg);\r\n }\r\n .touch-button-1 {\r\n mask-image: url(./icons/rmb.svg);\r\n }\r\n .touch-button-2 {\r\n mask-image: url(./icons/shift.svg);\r\n }\r\n }\r\n .touch-ui.touch-belt {\r\n right: 0;\r\n .touch-button {\r\n width: 14vh;\r\n height: 14vh;\r\n font-size: 1vh;\r\n border-radius: 20%;\r\n overflow: hidden;\r\n background-color: #000;\r\n border: 2px solid #444;\r\n canvas {\r\n position: absolute;\r\n left: 5%;\r\n top: 5%;\r\n width: 90%;\r\n height: 90%;\r\n }\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n border-radius: 20%;\r\n box-shadow: inset 0 0 1em 1.5em #000;\r\n }\r\n }\r\n }\r\n &.touch .touch-ui {\r\n display: block;\r\n }\r\n &.touch.keyboard .touch-ui {\r\n display: none;\r\n }\r\n}\r\n@media (max-aspect-ratio: 880/480) {\r\n .App .touch-ui {\r\n width: calc(50vw - 200vh / 3);\r\n }\r\n}\r\n@media (max-aspect-ratio: 832/480) {\r\n .App .touch-ui {\r\n width: 20vh;\r\n }\r\n}\r\n@media (max-aspect-ratio: 640/480) {\r\n .App .touch-ui {\r\n width: auto;\r\n height: 20vw;\r\n .touch-button {\r\n top: 50%;\r\n }\r\n .touch-button-0 {\r\n left: 16.7vw;\r\n }\r\n .touch-button-1 {\r\n left: 50vw;\r\n }\r\n .touch-button-2 {\r\n left: 83.3vw;\r\n }\r\n }\r\n .App .touch-ui.touch-mods {\r\n top: auto;\r\n right: 0;\r\n .touch-button {\r\n width: 20vw;\r\n height: 20vw;\r\n border-radius: 10vw;\r\n }\r\n }\r\n .App .touch-ui.touch-belt {\r\n bottom: auto;\r\n left: 0;\r\n .touch-button {\r\n width: 14vw;\r\n height: 14vw;\r\n font-size: 1vw;\r\n }\r\n }\r\n}\r\n@media (max-aspect-ratio: 640/736) {\r\n .App .touch-ui {\r\n height: calc(50vh - 75vw / 2);\r\n }\r\n}\r\n@media (max-aspect-ratio: 640/800) {\r\n .App .touch-ui {\r\n height: 25vw;\r\n }\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["reset.css","D:\\Projects\\diabloweb\\diabloweb/src\\App.scss"],"names":[],"mappings":"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","file":"main.e1dd4272.chunk.css","sourcesContent":["/* http://meyerweb.com/eric/tools/css/reset/ \r\n v2.0 | 20110126\r\n License: none (public domain)\r\n*/\r\n\r\nhtml, body, div, span, applet, object, iframe,\r\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\r\na, abbr, acronym, address, big, cite, code,\r\ndel, dfn, em, img, ins, kbd, q, s, samp,\r\nsmall, strike, strong, sub, sup, tt, var,\r\nb, u, i, center,\r\ndl, dt, dd, ol, ul, li,\r\nfieldset, form, label, legend,\r\ntable, caption, tbody, tfoot, thead, tr, th, td,\r\narticle, aside, canvas, details, embed, \r\nfigure, figcaption, footer, header, hgroup, \r\nmenu, nav, output, ruby, section, summary,\r\ntime, mark, audio, video, input, button {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\tborder: 0;\r\n\tfont-size: 100%;\r\n font: inherit;\r\n\tvertical-align: baseline;\r\n}\r\n/* HTML5 display-role reset for older browsers */\r\narticle, aside, details, figcaption, figure, \r\nfooter, header, hgroup, menu, nav, section {\r\n\tdisplay: block;\r\n}\r\n/*body {\r\n\tline-height: 1;\r\n}*/\r\nol, ul {\r\n\tlist-style: none;\r\n}\r\nblockquote, q {\r\n\tquotes: none;\r\n}\r\nblockquote:before, blockquote:after,\r\nq:before, q:after {\r\n\tcontent: '';\r\n\tcontent: none;\r\n}\r\ntable {\r\n\tborder-collapse: collapse;\r\n\tborder-spacing: 0;\r\n}\r\n","body, #root, .App {\r\n overflow: hidden;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n}\r\n.App {\r\n background-color: #000;\r\n &.dropping {\r\n background-color: #111;\r\n }\r\n}\r\n.Body, .BodyV {\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n height: auto;\r\n left: calc(50% - 200vh / 3);\r\n width: calc(400vh / 3);\r\n}\r\n.Body .inner {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n}\r\n@media (max-aspect-ratio: 640/480) {\r\n .Body {\r\n left: 0;\r\n right: 0;\r\n width: auto;\r\n top: calc(50% - 37.5vw);\r\n height: 75vw;\r\n }\r\n .BodyV {\r\n left: 0;\r\n right: 0;\r\n width: auto;\r\n }\r\n}\r\n.BodyV {\r\n pointer-events: none;\r\n}\r\n\r\n@media (min-aspect-ratio: 3/1) {\r\n .App.keyboard .Body .inner {\r\n position: absolute;\r\n left: 50%;\r\n top: 50%;\r\n width: 75vw;\r\n height: 56.25vw;\r\n transform: translate(-50%, -70%);\r\n }\r\n}\r\n\r\n.App {\r\n canvas {\r\n width: 100%;\r\n height: 100%;\r\n cursor: none;\r\n visibility: hidden;\r\n }\r\n &.started canvas {\r\n visibility: visible;\r\n }\r\n .keyboard {\r\n position: absolute;\r\n pointer-events: auto;\r\n background: rgba(0, 0, 0, 0);\r\n color: rgba(0, 0, 0, 0);\r\n border: none;\r\n outline: none;\r\n z-index: 100;\r\n display: none;\r\n cursor: none;\r\n &::selection {\r\n background: rgba(0, 0, 0, 0);\r\n color: rgba(0, 0, 0, 0);\r\n }\r\n }\r\n &.keyboard .keyboard {\r\n display: block;\r\n }\r\n\r\n .start, .error, .loading {\r\n position: absolute;\r\n left: 50%;\r\n top: 50%;\r\n transform: translate(-50%, -50%);\r\n }\r\n\r\n .start, .error {\r\n max-width: 90%;\r\n max-height: 90%;\r\n overflow-y: auto;\r\n pointer-events: auto;\r\n }\r\n\r\n .start {\r\n border: 1px solid #888;\r\n padding: 12px;\r\n color: #fff;\r\n font-size: 18px;\r\n text-align: center;\r\n background: #000;\r\n p {\r\n margin: 10px 0;\r\n }\r\n .startButton {\r\n display: block;\r\n margin-left: auto;\r\n margin-right: auto;\r\n border: 1px solid #fff;\r\n background: #000;\r\n font-size: 2em;\r\n padding: 4px 18px;\r\n cursor: pointer;\r\n margin-top: 6px;\r\n width: 8em;\r\n &:hover {\r\n background-color: #111;\r\n }\r\n }\r\n .saveList {\r\n border: 1px solid #fff;\r\n text-align: left;\r\n li {\r\n padding: 0 6px;\r\n .info {\r\n color: #888;\r\n margin-left: 6px;\r\n }\r\n .btnRemove {\r\n color: #800;\r\n &:hover {\r\n color: #f00;\r\n }\r\n float: right;\r\n cursor: pointer;\r\n margin: 0 4px;\r\n }\r\n .btnDownload {\r\n color: #888;\r\n &:hover {\r\n color: #fff;\r\n }\r\n float: right;\r\n cursor: pointer;\r\n margin: 0 4px;\r\n }\r\n &:hover {\r\n background-color: #444;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.App {\r\n .error {\r\n display: block;\r\n border: 1px solid #800;\r\n background: #300;\r\n padding: 12px;\r\n color: #f33;\r\n font-size: 18px;\r\n text-align: center;\r\n &:hover {\r\n text-decoration: none;\r\n }\r\n .header {\r\n font-weight: bold;\r\n font-size: 1.2em;\r\n margin-bottom: 0.3em;\r\n }\r\n .body {\r\n font-family: monospace;\r\n }\r\n .footer {\r\n margin-top: 0.5em;\r\n font-size: 0.8em;\r\n }\r\n }\r\n\r\n .loading {\r\n color: #888;\r\n font-size: 32px;\r\n text-align: center;\r\n width: 75%;\r\n .progressBar {\r\n display: block;\r\n position: absolute;\r\n margin-top: 16px;\r\n width: 100%;\r\n height: 40px;\r\n border: 2px solid #888;\r\n span {\r\n position: absolute;\r\n left: 3px;\r\n top: 3px;\r\n bottom: 3px;\r\n right: 3px;\r\n }\r\n span span {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n bottom: 0;\r\n background-color: #888;\r\n }\r\n }\r\n }\r\n a, .link {\r\n display: inline-block;\r\n color: rgb(112, 112, 255);\r\n text-decoration: none;\r\n &:hover {\r\n text-decoration: underline;\r\n }\r\n cursor: pointer;\r\n }\r\n}\r\n\r\n.App {\r\n .touch-ui {\r\n display: none;\r\n pointer-events: none;\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n width: 25vh;\r\n .touch-button {\r\n position: absolute;\r\n left: 50%;\r\n background-color: #444;\r\n transform: translate(-50%, -50%);\r\n pointer-events: auto;\r\n &.active {\r\n background-color: #fff;\r\n }\r\n mask-size: 100% 100%;\r\n }\r\n .touch-button-0 {\r\n top: 16.7vh;\r\n }\r\n .touch-button-1 {\r\n top: 50vh;\r\n }\r\n .touch-button-2 {\r\n top: 83.3vh;\r\n }\r\n }\r\n .touch-ui.touch-mods {\r\n left: 0;\r\n .touch-button {\r\n width: 20vh;\r\n height: 20vh;\r\n border-radius: 10vh;\r\n }\r\n .touch-button-0 {\r\n mask-image: url(./icons/move.svg);\r\n }\r\n .touch-button-1 {\r\n mask-image: url(./icons/rmb.svg);\r\n }\r\n .touch-button-2 {\r\n mask-image: url(./icons/shift.svg);\r\n }\r\n }\r\n .touch-ui.touch-belt {\r\n right: 0;\r\n .touch-button {\r\n width: 14vh;\r\n height: 14vh;\r\n font-size: 1vh;\r\n border-radius: 20%;\r\n overflow: hidden;\r\n background-color: #000;\r\n border: 2px solid #444;\r\n canvas {\r\n position: absolute;\r\n left: 5%;\r\n top: 5%;\r\n width: 90%;\r\n height: 90%;\r\n }\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n border-radius: 20%;\r\n box-shadow: inset 0 0 1em 1.5em #000;\r\n }\r\n }\r\n }\r\n &.touch .touch-ui {\r\n display: block;\r\n }\r\n &.touch.keyboard .touch-ui {\r\n display: none;\r\n }\r\n}\r\n@media (max-aspect-ratio: 880/480) {\r\n .App .touch-ui {\r\n width: calc(50vw - 200vh / 3);\r\n }\r\n}\r\n@media (max-aspect-ratio: 832/480) {\r\n .App .touch-ui {\r\n width: 20vh;\r\n }\r\n}\r\n@media (max-aspect-ratio: 640/480) {\r\n .App .touch-ui {\r\n width: auto;\r\n height: 20vw;\r\n .touch-button {\r\n top: 50%;\r\n }\r\n .touch-button-0 {\r\n left: 16.7vw;\r\n }\r\n .touch-button-1 {\r\n left: 50vw;\r\n }\r\n .touch-button-2 {\r\n left: 83.3vw;\r\n }\r\n }\r\n .App .touch-ui.touch-mods {\r\n top: auto;\r\n right: 0;\r\n .touch-button {\r\n width: 20vw;\r\n height: 20vw;\r\n border-radius: 10vw;\r\n }\r\n }\r\n .App .touch-ui.touch-belt {\r\n bottom: auto;\r\n left: 0;\r\n .touch-button {\r\n width: 14vw;\r\n height: 14vw;\r\n font-size: 1vw;\r\n }\r\n }\r\n}\r\n@media (max-aspect-ratio: 640/736) {\r\n .App .touch-ui {\r\n height: calc(50vh - 75vw / 2);\r\n }\r\n}\r\n@media (max-aspect-ratio: 640/800) {\r\n .App .touch-ui {\r\n height: 25vw;\r\n }\r\n}\r\n"]} \ No newline at end of file diff --git a/static/js/main.0a18bc0c.chunk.js b/static/js/main.0a18bc0c.chunk.js new file mode 100644 index 0000000..7a4fe1c --- /dev/null +++ b/static/js/main.0a18bc0c.chunk.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{12:function(e,t,n){"use strict";n.d(t,"a",function(){return b});var r=n(8),a=n(1),o=n.n(a),i=n(3),s=n(15),c=n.n(s);function u(e,t){return l.apply(this,arguments)}function l(){return(l=Object(i.a)(o.a.mark(function e(t,n){var r,a,i,s;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.get(n.toLowerCase());case 2:(r=e.sent)?(a=new Blob([r],{type:"binary/octet-stream"}),i=URL.createObjectURL(a),(s=document.createElement("a")).setAttribute("href",i),s.setAttribute("download",n),document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(i)):console.error("File ".concat(n," does not exist"));case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}function f(e){return d.apply(this,arguments)}function d(){return(d=Object(i.a)(o.a.mark(function e(t){var n,r,a,i,s,c;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=!0,r=!1,a=void 0,e.prev=3,e.next=6,t.keys();case 6:e.t0=Symbol.iterator,i=e.sent[e.t0]();case 8:if(n=(s=i.next()).done){e.next=14;break}(c=s.value).match(/\.sv$/i)&&u(t,c);case 11:n=!0,e.next=8;break;case 14:e.next=20;break;case 16:e.prev=16,e.t1=e.catch(3),r=!0,a=e.t1;case 20:e.prev=20,e.prev=21,n||null==i.return||i.return();case 23:if(e.prev=23,!r){e.next=26;break}throw a;case 26:return e.finish(23);case 27:return e.finish(20);case 28:case"end":return e.stop()}},e,null,[[3,16,20,28],[21,,23,27]])}))).apply(this,arguments)}var h=function(e){return new Promise(function(t,n){var r=new FileReader;r.onload=function(){return t(r.result)},r.onerror=function(){return n(r.error)},r.onabort=function(){return n()},r.readAsArrayBuffer(e)})};function v(e,t,n){return p.apply(this,arguments)}function p(){return(p=Object(i.a)(o.a.mark(function e(t,n,r){var a;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=Uint8Array,e.next=3,h(r);case 3:return e.t1=e.sent,a=new e.t0(e.t1),n.set(r.name.toLowerCase(),a),e.abrupt("return",t.set(r.name.toLowerCase(),a));case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}function b(e){return y.apply(this,arguments)}function y(){return(y=Object(i.a)(o.a.mark(function e(t){var n,a,s,l,d,h,p,b;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n=new c.a("diablo_fs"),a=new Map,s=0,e.t0=Object,e.next=7,n.json();case 7:e.t1=e.sent,l=e.t0.entries.call(e.t0,e.t1);case 9:if(!(s>>=t,T;if(e.bit_buff>>=e.extra_bits,e.in_pos===e.in_bytes){if(0===(e.in_bytes=e.read_buf(e.in_buff)))return P;e.in_pos=0}return e.bit_buff|=e.in_buff[e.in_pos++]<<8,e.bit_buff>>>=t-e.extra_bits,e.extra_bits=e.extra_bits-t+8,T}function X(e){if(1&e.bit_buff){if(J(e,1))return 774;var t=e.LengthCodes[255&e.bit_buff];if(J(e,e.LenBits[t]))return 774;var n=e.ExLenBits[t];if(0!==n){var r=e.bit_buff&(1<r.dsize_bits||r.dsize_bits>6)return j;if(r.dsize_mask=65535>>16-r.dsize_bits,r.ctype!=M){if(r.ctype!=S)return O;r.ChBitsAsc.set(F),function(e){for(var t=255,n=255;t>=0;t--,n--){var r=e.ChBitsAsc[n],a=void 0;if(r<=8){var o=1<>4;do{e.offs2D34[a]=n,a+=i}while(a<256)}else{r-=6,e.ChBitsAsc[n]=r;var s=1<>6;do{e.offs2E34[a]=n,a+=s}while(a<128)}else{r-=8,e.ChBitsAsc[n]=r;var c=1<>8;do{e.offs2EB4[a]=n,a+=c}while(a<256)}}}(r)}return r.LenBits.set(I),G(r.LengthCodes,K,r.LenBits,r.LenBits.length),r.ExLenBits.set(z),r.LenBase.set(R),r.DistBits.set(U),G(r.DistPosCodes,N,r.DistBits,r.DistBits.length),774!==function(e){for(var t,n,r=4096;(t=n=X(e))<773;){if(n>=256){var a=n-254,o=Y(e,a);if(0===o){t=774;break}var i=r,s=i-o;r+=a;for(var c=e.out_buff;a-- >0;)c[i++]=c[s++]}else e.out_buff[r++]=n;r>=8192&&(e.write_buf(e.out_buff.subarray(4096,8192)),e.out_buff.copyWithin(0,4096,r),r-=4096)}return e.write_buf(e.out_buff.subarray(4096,r)),t}(r)?B:D}var W=new Uint32Array(80),H=function(e,t){return t<>32-e},$=function(){function e(){Object(p.a)(this,e),this.digest=new Uint32Array(5),this.count=0,this.digest[0]=1732584193,this.digest[1]=4023233417,this.digest[2]=2562383102,this.digest[3]=271733878,this.digest[4]=3285377520,this.digest8=new Uint8Array(this.digest.buffer)}return Object(b.a)(e,[{key:"input8",value:function(e){var t=new Uint32Array(e.buffer,e.byteOffset,16);this.input(t)}},{key:"input",value:function(e){this.count+=32*e.length;for(var t=0;t<16;++t)W[t]=e[t];for(var n=16;n<80;++n)W[n]=W[n-16]^W[n-14]^W[n-8]^W[n-3];for(var r=this.digest[0],a=this.digest[1],o=this.digest[2],i=this.digest[3],s=this.digest[4],c=0;c<20;c++){var u=H(5,r)+(a&o|~a&i)+s+W[c]+1518500249;s=i,i=o,o=H(30,a),a=r,r=0|u}for(var l=20;l<40;l++){var f=H(5,r)+(a^o^i)+s+W[l]+1859775393;s=i,i=o,o=H(30,a),a=r,r=0|f}for(var d=40;d<60;d++){var h=H(5,r)+(a&o|a&i|o&i)+s+W[d]+2400959708;s=i,i=o,o=H(30,a),a=r,r=0|h}for(var v=60;v<80;v++){var p=H(5,r)+(a^o^i)+s+W[v]+3395469782;s=i,i=o,o=H(30,a),a=r,r=0|p}this.digest[0]+=r,this.digest[1]+=a,this.digest[2]+=o,this.digest[3]+=i,this.digest[4]+=s}}]),e}(),V=function(){function e(t){Object(p.a)(this,e),this.seed=t}return Object(b.a)(e,[{key:"next",value:function(){return this.seed=(3*this.seed<<16)+(67*this.seed<<8)+253*this.seed+2531011|0,this.seed>>16&32767}}]),e}();function Z(e,t){if(!(e.length<=8)){var n=e.length-8;if(!(n%64)&&!e[n+4]){for(var r=e[n+5],a=new Uint8Array(n+r-64),o=function(e){for(var t=new V(28760),n=new Uint8Array(136),r=new Uint32Array(n.buffer),a=0;a<136;++a)n[a]=t.next();for(var o=new Uint8Array(64),i=0;i<64;++i)o[i]=e.charCodeAt(i%e.length);var s=new $;s.input8(o);for(var c=0;c<34;++c)r[c]^=s.digest[c%s.digest.length];return(s=new $).input(r.subarray(18)),s}(t),i=n>>2,s=new Uint32Array(e.buffer,e.byteOffset,i+1),c=new Uint32Array(16),u=new Uint8Array(c.buffer),l=0;lt)throw Error("decompress buffer overflow");n.set(e,a),a+=e.length})||a!==t?null:n}var te=function(){for(var e=new Uint32Array(1280),t=1048577,n=0;n<256;n++)for(var r=n;r<1280;r+=256){var a=(65535&(t=(125*t+3)%2796203))<<16,o=65535&(t=(125*t+3)%2796203);e[r]=a|o}return e}();function ne(e,t){for(var n=4008636142,r=0;r>>11}function re(e,t){ne(new Uint32Array(e.buffer,e.byteOffset,e.length>>2),t)}function ae(e,t){for(var n=4008636142,r=0;r>>11}}function oe(e,t){for(var n=2146271213,r=4008636142,a=0;a=97&&o<=122&&(o-=32),47===o&&(o=92),r=o+(n=te[256*t+o]^n+r)+33*r+3|0}return n>>>0}function ie(e){var t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return e.substring(t+1)}var se=256,ce=512,ue=65280,le=65536,fe=131072,de=1048576,he=16777216,ve=function(){function e(t){Object(p.a)(this,e),this.buffer=t,this.u8=new Uint8Array(t),this.u32=new Uint32Array(t,0,t.byteLength>>2),this.readHeader()}return Object(b.a)(e,[{key:"readHeader",value:function(){var e=this.u8,t=this.u32;if(441536589!==t[0])throw Error("invalid MPQ header");var n=e[14]+(e[15]<<8),r=t[4],a=t[5],o=t[6],i=t[7];this.hashTable=this.readTable(r,o,"(hash table)"),this.blockTable=this.readTable(a,i,"(block table)"),this.blockSize=1<<9+n}},{key:"readTable",value:function(e,t,n){var r=new Uint32Array(this.buffer.slice(e,e+16*t));return ne(r,oe(n,3)),r}},{key:"fileIndex",value:function(e){for(var t=this.hashTable,n=t.length>>2,r=oe(e,0)%n,a=oe(e,1),o=oe(e,2),i=r,s=0;4294967295!==t[4*i+3]&&sthis.buffer.byteLength))return r.flags&ue||(r.cmpSize=r.fileSize),r.flags&fe&&(r.key=r.key+r.filePos^r.fileSize),{info:r,data:new Uint8Array(this.buffer,r.filePos,r.cmpSize)}}}},{key:"read",value:function(e){var t=this.readRaw(e);if(t){var n=t.info,r=t.data;if(r=r.slice(),n.flags&he){if(n.flags&le&&re(r,n.key),n.flags&ce)return;return n.flags&se?ee(r,n.fileSize):r}if(n.flags&ue){var a=Math.floor((n.fileSize+this.blockSize-1)/this.blockSize),o=a+1;if(r.length<4*o)return;var i=new Uint32Array(r.buffer,0,o);n.flags&le&&ne(i,n.key-1);for(var s=new Uint8Array(n.fileSize),c=0;cr.length)return;var f=r.subarray(i[c],i[c+1]);if(n.flags&le&&re(f,n.key+c),n.flags&ce)return;if(n.flags&se&&(f=ee(f,l)),!f||f.length!==l)return;s.set(f,u)}return s}if(n.flags&le)for(var d=0;d=this.buffer.byteLength)throw Error("packet too small");return this.buffer[this.pos++]}},{key:"read16",value:function(){var e=this.pos,t=this.buffer;if(e+2>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8;return this.pos+=2,n}},{key:"read32",value:function(){var e=this.pos,t=this.buffer;if(e+4>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24;return this.pos+=4,n}},{key:"read_str",value:function(){var e=this.read8(),t=this.pos,n=this.buffer;if(t+e>n.byteLength)throw Error("packet too small");var r=String.fromCharCode.apply(String,Object(v.a)(n.subarray(t,t+e)));return this.pos+=e,r}},{key:"read_buf",value:function(){var e=this.read32(),t=this.buffer.subarray(this.pos,this.pos+e);return this.pos+=e,t}}]),e}(),Se=function(){function e(t){Object(p.a)(this,e),this.buffer=new Uint8Array(t),this.pos=0}return Object(b.a)(e,[{key:"write8",value:function(e){return this.buffer[this.pos++]=e,this}},{key:"write16",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,this.pos+=2,this}},{key:"write32",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,n[t+2]=e>>16,n[t+3]=e>>24,this.pos+=4,this}},{key:"write_str",value:function(e){var t=e.length;this.write8(t);for(var n=this.pos,r=this.buffer,a=0;a=4?e.send(Le(Te.join_reject,{cookie:s.cookie,reason:Be.JOIN_GAME_FULL})):(t.players[c]=n,n.id=c,e.send(Le(Te.join_accept,{cookie:s.cookie,index:c,seed:t.seed,difficulty:t.difficulty})),t.send(255,Le(Te.connect,{id:c})))}break;default:if(null==n.id)return;t.handle(n.id,i.code,s)}if(!a.done())throw Error("packet too large")}),e.on("close",function(){null!=n.id&&t.drop(n.id,1073741830)})}},{key:"send",value:function(e,t){for(var n=1;n<4;++n)e&1<>16&255,P=D>>8&255,U=255&D;t.fillStyle="rgb(".concat(T,", ").concat(P,", ").concat(U,")"),t.fillText(L,j,O+22)}}catch(N){C=!0,A=N}finally{try{E||null==S.return||S.return()}finally{if(C)throw A}}t.restore()}}e.updateBelt(s)}function Fe(){return(Fe=Object(h.a)(f.a.mark(function e(t,n,r,a){var o,i,s;return f.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.fs;case 2:if(o=e.sent,!a||r){e.next=6;break}return e.next=6,xe(t,o);case 6:return i=null,s=!1,i=t.canvas.getContext("2d",{alpha:!1}),e.next=10,new Promise(function(e,c){try{var l=new me.a,f=[],d=Ie(function(e){f.push(e)});l.addEventListener("message",function(r){var a=r.data;switch(a.action){case"loaded":e(function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r2&&void 0!==o[2]?o[2]:"arraybuffer",e.next=3,ke.a.request({url:t,responseType:r,onDownloadProgress:n});case 3:return a=e.sent,e.abrupt("return",a.data);case 5:case"end":return e.stop()}},e)}))).apply(this,arguments)}function tt(e,t,n){return new Promise(function(r,a){try{var o=new Je.a;o.addEventListener("message",function(e){var t=e.data;switch(t.action){case"result":r({buffer:t.buffer,blocks:t.blocks});break;case"error":a({message:t.error,stack:t.stack});break;case"progress":n(t.value)}}),o.postMessage(Object(d.a)({action:"run"},e),t)}catch(i){a(i)}})}function nt(){return(nt=Object(h.a)(f.a.mark(function e(t,n){var r,a,o,i,s,c,u,l,d,h,v,p,b,y,m,w,g,k,_,x,E,C,A,M,S,B,j,O,L,D,T,P,U,N,z,R,I,K,F,q,G,J,X,Y,Q,W,H,$,V,Z,ee,te,re,se,ce;return f.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return a=function(){n("Loading...",r.reduce(function(e,t){return e+t.loaded*t.weight},0),r.reduce(function(e,t){return e+t.total*t.weight},0))},n("Loading..."),r=[],o=function(e){return function(t){e.loaded=t.loaded,a()}},i=t.size,(s={loaded:0,weight:1,total:i}).ready=Ve(t.slice(0,32),o(s)),r.push(s),(c={loaded:0,weight:5,total:He}).ready=Ze(Ye.a,o(c)),r.push(c),(u={loaded:0,weight:5,total:$e}).ready=Ze(We.a,o(u),"text"),r.push(u),e.t0=Uint32Array,e.next=17,s.ready;case 17:if(e.t1=e.sent,l=new e.t0(e.t1),d=new Uint16Array(l.buffer),441536589===l[0]){e.next=22;break}throw Error("invalid MPQ file");case 22:if(h=1<<9+d[7],v=l[4],p=l[5],b=l[6],y=l[7],!(v+16*b>i||p+16*y>i)){e.next=29;break}throw Error("invalid MPQ file");case 29:return m={loaded:0,weight:1,total:16*b},w={loaded:0,weight:1,total:16*y},s.total-=m.total+w.total,m.ready=Ve(t.slice(v,v+m.total),o(m)),w.ready=Ve(t.slice(p,p+w.total),o(w)),r.push(m,w),e.t2=Uint32Array,e.next=38,m.ready;case 38:return e.t3=e.sent,g=new e.t2(e.t3),e.t4=Uint32Array,e.next=43,w.ready;case 43:return e.t5=e.sent,k=new e.t4(e.t5),ne(g,oe("(hash table)",3)),ne(k,oe("(block table)",3)),e.next=49,u.ready;case 49:for(e.t6=function(e){return e.trim()},e.t7=function(e){return e.length},_=e.sent.split("\n").map(e.t6).filter(e.t7),x={},E=function(e,t){return e.toString(16).padStart(8,"0")+t.toString(16).padStart(8,"0")},C=!0,A=!1,M=void 0,e.prev=57,S=_[Symbol.iterator]();!(C=(B=S.next()).done);C=!0)j=B.value,x[E(oe(j,1),oe(j,2))]=j;e.next=65;break;case 61:e.prev=61,e.t8=e.catch(57),A=!0,M=e.t8;case 65:e.prev=65,e.prev=66,C||null==S.return||S.return();case 68:if(e.prev=68,!A){e.next=71;break}throw M;case 71:return e.finish(68);case 72:return e.finish(65);case 73:for(O=4,L=[],D=0;D0&&n.start(t[0])},n.onDone=function(e){var t=URL.createObjectURL(e);n.setState({url:t});var r=document.createElement("a");r.setAttribute("href",t),r.setAttribute("download","DIABDAT.MPQ"),document.body.appendChild(r),r.click(),document.body.removeChild(r)},n.onClose=function(){n.state.url&&URL.revokeObjectURL(n.state.url),n.props.api.setState({compress:!1})},n}return Object(g.a)(t,e),Object(b.a)(t,[{key:"onProgress",value:function(e){this.setState({progress:e})}},{key:"onError",value:function(e,t){var n=this.props.api;n.setState({compress:!1}),n.onError(e,t)}},{key:"start",value:function(e){var t=this;this.setState({started:!0}),function(e,t){return nt.apply(this,arguments)}(e,function(e,n,r){return t.onProgress({text:e,loaded:n,total:r})}).then(this.onDone,function(e){return t.onError(e.message,e.stack)})}},{key:"render",value:function(){var e=this.state,t=e.url,n=e.started,r=e.progress;return t?a.a.createElement("div",{className:"start"},a.a.createElement("p",null,a.a.createElement("a",{href:t,download:"DIABDAT.MPQ"},"Click here if download doesn't start.")),a.a.createElement("div",{className:"startButton",onClick:this.onClose},"Back")):n?a.a.createElement("div",{className:"loading"},r&&r.text||"Processing...",null!=r&&!!r.total&&a.a.createElement("span",{className:"progressBar"},a.a.createElement("span",null,a.a.createElement("span",{style:{width:"".concat(Math.round(100*r.loaded/r.total),"%")}})))):a.a.createElement("div",{className:"start"},a.a.createElement("p",null,"You can use this tool to reduce the original MPQ to about half its size. It encodes sounds in MP3 format and uses better compression for regular files. To begin, click the button below or drop the MPQ onto the page."),a.a.createElement("form",null,a.a.createElement("label",{htmlFor:"loadFile",className:"startButton"},"Select MPQ"),a.a.createElement("input",{accept:".mpq",type:"file",id:"loadFile",style:{display:"none"},onChange:this.parseFile})),a.a.createElement("div",{className:"startButton",onClick:this.onClose},"Back"))}}]),t}(a.a.Component);function at(e,t){var n=(e.message||"Unknown error")+(e.stack?"\n"+e.stack:""),r=new URL("https://github.com/d07RiV/diabloweb/issues/new");return r.searchParams.set("body","**Description:**\n[Please describe what you were doing before the error occurred]\n\n**App version:**\nDiabloWeb ".concat("1.0.39"," (").concat(t?"Retail":"Shareware",")\n\n**Error message:**\n \n").concat(n.split("\n").map(function(e){return" "+e}).join("\n"),"\n\n**User agent:**\n\n ").concat(navigator.userAgent,"\n\n**Save file:**\n[Please attach the save file, if applicable. The error box should have a link to download the current save you were playing; alternatively, you can open dev console on the game page (F12) and type in ","`DownloadSaves()`","]\n")),r.toString()}window.Peer=Ae.a,E.a.initialize("UA-43123589-6"),E.a.pageview("/");var ot=0,it=1;var st=null;try{st=function(){var e=!0,t=!1,n=void 0;try{for(var r,a=document.styleSheets[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var o=r.value,i=!0,s=!1,c=void 0;try{for(var u,l=o.cssRules[Symbol.iterator]();!(i=(u=l.next()).done);i=!0){var f=u.value;if(f.type===CSSRule.MEDIA_RULE&&"(min-aspect-ratio: 3/1)"===f.conditionText){var d=!0,h=!1,v=void 0;try{for(var p,b=f.cssRules[Symbol.iterator]();!(d=(p=b.next()).done);d=!0){var y=p.value;if(".App.keyboard .Body .inner"===y.selectorText)return y}}catch(m){h=!0,v=m}finally{try{d||null==b.return||b.return()}finally{if(h)throw v}}}}}catch(m){s=!0,c=m}finally{try{i||null==l.return||l.return()}finally{if(s)throw c}}}}catch(m){t=!0,n=m}finally{try{e||null==a.return||a.return()}finally{if(t)throw n}}}()}catch(lt){}var ct=function(e){var t=e.children,n=Object(k.a)(e,["children"]);return a.a.createElement("a",Object.assign({target:"_blank",rel:"noopener noreferrer"},n),t)},ut=function(e){function t(e){var n;return Object(p.a)(this,t),(n=Object(y.a)(this,Object(m.a)(t).call(this,e))).files=new Map,n.state={started:!1,loading:!1,dropping:0,has_spawn:!1},n.cursorPos={x:0,y:0},n.touchControls=!1,n.touchButtons=[null,null,null,null,null,null],n.touchCtx=[null,null,null,null,null,null],n.touchMods=[!1,!1,!1,!1,!1,!1],n.touchBelt=[-1,-1,-1,-1,-1,-1],n.maxKeyboard=0,n.fs=Object(be.a)(!0),n.onDrop=function(e){var t=function(e){if(e.dataTransfer.items)for(var t=0;t=32&&1===e.key.length?n.game("DApi_Char",e.key.charCodeAt(0)):8!==e.keyCode&&13!==e.keyCode||n.game("DApi_Char",e.keyCode),n.clearKeySel(),n.showKeyboard||(8===e.keyCode||9===e.keyCode||e.keyCode>=112&&e.keyCode<=119)&&e.preventDefault())},n.onMenu=function(e){e.preventDefault()},n.onKeyUp=function(e){n.canvas&&(n.game("DApi_Key",1,n.eventMods(e),e.keyCode),n.clearKeySel())},n.onKeyboard=function(){n.onKeyboardInner(0)},n.onKeyboardBlur=function(){n.onKeyboardInner(1)},n.parseFile=function(e){var t=e.target.files;t.length>0&&n.start(t[0])},n.parseSave=function(e){var t=e.target.files;t.length>0&&n.start(t[0])},n.touchButton=null,n.touchCanvas=null,n.onTouchStart=function(e){if(n.canvas&&e.target!==n.keyboard&&(n.keyboard.blur(),e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,a=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,a),n.touchMods[ot]||n.game("DApi_Mouse",1,n.touchMods[it]?2:1,n.eventMods(e),r,a)}},n.onTouchMove=function(e){if(n.canvas&&e.target!==n.keyboard&&(e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,a=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,a)}},n.onTouchEnd=function(e){if(n.canvas){e.target===n.keyboard||e.preventDefault();var t=n.touchCanvas;if(n.updateTouchButton(e.touches,!0),t&&!n.touchCanvas){var r=n.mousePos(t),a=r.x,o=r.y;n.game("DApi_Mouse",2,1,n.eventMods(e),a,o),n.game("DApi_Mouse",2,2,n.eventMods(e),a,o),!n.touchMods[it]||n.touchButton&&n.touchButton.index===it||n.setTouchMod(it,!1)}document.fullscreenElement||n.element.requestFullscreen()}},n.setCanvas=function(e){return n.canvas=e},n.setElement=function(e){return n.element=e},n.setKeyboard=function(e){return n.keyboard=e},n.setTouch0=n.setTouch_.bind(Object(w.a)(n),0),n.setTouch1=n.setTouch_.bind(Object(w.a)(n),1),n.setTouch2=n.setTouch_.bind(Object(w.a)(n),2),n.setTouch3=n.setTouchBelt_.bind(Object(w.a)(n),3),n.setTouch4=n.setTouchBelt_.bind(Object(w.a)(n),4),n.setTouch5=n.setTouchBelt_.bind(Object(w.a)(n),5),n}return Object(g.a)(t,e),Object(b.a)(t,[{key:"componentDidMount",value:function(){var e=this;document.addEventListener("drop",this.onDrop,!0),document.addEventListener("dragover",this.onDragOver,!0),document.addEventListener("dragenter",this.onDragEnter,!0),document.addEventListener("dragleave",this.onDragLeave,!0),this.fs.then(function(t){var n=t.files.get("spawn.mpq");n&&_e.includes(n.byteLength)&&e.setState({has_spawn:!0}),Object(v.a)(t.files.keys()).filter(function(e){return e.match(/\.sv$/i)}).length&&e.setState({save_names:!0})})}},{key:"setDropping",value:function(e){this.setState(function(t){var n=t.dropping;return{dropping:Math.max(n+e,0)}})}},{key:"onError",value:function(e,t){var n=this;Object(h.a)(f.a.mark(function r(){var a;return f.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(a={message:e},!n.saveName){r.next=8;break}return r.next=4,n.fs;case 4:return r.t0=n.saveName,r.next=7,r.sent.fileUrl(r.t0);case 7:a.save=r.sent;case 8:t?Object(pe.mapStackTrace)(t,function(e){n.setState(function(t){return!t.error&&{error:Object(d.a)({},a,{stack:e.join("\n")})}})}):n.setState(function(e){return!e.error&&{error:a}});case 9:case"end":return r.stop()}},r)}))()}},{key:"openKeyboard",value:function(e){e?(this.showKeyboard={left:"".concat((100*(e[0]-10)/640).toFixed(2),"%"),top:"".concat((100*(e[1]-10)/480).toFixed(2),"%"),width:"".concat((100*(e[2]-e[0]+20)/640).toFixed(2),"%"),height:"".concat((100*(e[3]-e[1]+20)/640).toFixed(2),"%")},this.maxKeyboard=e[4],this.element.classList.add("keyboard"),Object.assign(this.keyboard.style,this.showKeyboard),this.keyboard.focus(),st&&(st.style.transform="translate(-50%, ".concat((56.25*-(e[1]+e[3])/960).toFixed(2),"vw)"))):(this.showKeyboard=!1,this.element.classList.remove("keyboard"),this.keyboard.blur(),this.keyboard.value="",this.keyboardNum=0)}},{key:"setCursorPos",value:function(e,t){var n=this,r=this.canvas.getBoundingClientRect();this.cursorPos={x:r.left+(r.right-r.left)*e/640,y:r.top+(r.bottom-r.top)*t/480},setTimeout(function(){n.game("DApi_Mouse",0,0,0,e,t)})}},{key:"onProgress",value:function(e){this.setState({progress:e})}},{key:"onExit",value:function(){this.state.error||window.location.reload()}},{key:"setCurrentSave",value:function(e){this.saveName=e}},{key:"updateSaves",value:function(){var e=this;return this.fs.then(function(t){var n={};Object(v.a)(t.files.keys()).filter(function(e){return e.match(/\.sv$/i)}).forEach(function(e){n[e]=function(e,t){try{var n=Z(new ve(e).read("hero"),function(e){return e.match(/spawn\d+\.sv/i)?"lshbkfg1":e.match(/share_\d+\.sv/i)?"lshbkfg1":e.match(/multi_\d+\.sv/i)?"szqnlsk1":"xrgyrkj1"}(t)),r=n.indexOf(0,16),a={};return a.name=String.fromCharCode.apply(String,Object(v.a)(n.subarray(16,r))),a.cls=n[48],a.level=n[53],a}catch(lt){return null}}(t.files.get(e).buffer,e)}),e.setState({save_names:n})})}},{key:"removeSave",value:function(e){var t=this;window.confirm("Are you sure you want to delete ".concat(e,"?"))&&Object(h.a)(f.a.mark(function n(){var r;return f.a.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,t.fs;case 2:return r=n.sent,n.next=5,r.delete(e.toLowerCase());case 5:r.files.delete(e.toLowerCase()),t.updateSaves();case 7:case"end":return n.stop()}},n)}))()}},{key:"downloadSave",value:function(e){this.fs.then(function(t){return t.download(e)})}},{key:"drawBelt",value:function(e,t){this.canvas&&this.touchButtons[e]&&(this.touchBelt[e]=t,t>=0?(this.touchButtons[e].style.display="block",this.touchCtx[e].drawImage(this.canvas,205+29*t,357,28,28,0,0,28,28)):this.touchButtons[e].style.display="none")}},{key:"updateBelt",value:function(e){if(e){for(var t=new Set,n=3,r=0;r=0&&!t.has(e[r])&&(this.drawBelt(n++,r),t.add(e[r]));for(;n<6;++n)this.drawBelt(n,-1)}else this.drawBelt(3,-1),this.drawBelt(4,-1),this.drawBelt(5,-1)}},{key:"start",value:function(e){var t=this;if(e&&e.name.match(/\.sv$/i))this.fs.then(function(t){return t.upload(e)}).then(function(){t.updateSaves()});else if(!this.state.show_saves)if(!e||e.name.match(/\.mpq$/i)){document.removeEventListener("drop",this.onDrop,!0),document.removeEventListener("dragover",this.onDragOver,!0),document.removeEventListener("dragenter",this.onDragEnter,!0),document.removeEventListener("dragleave",this.onDragLeave,!0),this.setState({dropping:0});var n=!(!e||e.name.match(/^spawn\.mpq$/i));E.a.event({category:"Game",action:n?"Start Retail":"Start Shareware"}),this.setState({loading:!0,retail:n}),qe(this,e,!n).then(function(e){t.game=e,document.addEventListener("mousemove",t.onMouseMove,!0),document.addEventListener("mousedown",t.onMouseDown,!0),document.addEventListener("mouseup",t.onMouseUp,!0),document.addEventListener("keydown",t.onKeyDown,!0),document.addEventListener("keyup",t.onKeyUp,!0),document.addEventListener("contextmenu",t.onMenu,!0),document.addEventListener("touchstart",t.onTouchStart,{passive:!1,capture:!0}),document.addEventListener("touchmove",t.onTouchMove,{passive:!1,capture:!0}),document.addEventListener("touchend",t.onTouchEnd,{passive:!1,capture:!0}),document.addEventListener("pointerlockchange",t.onPointerLockChange),window.addEventListener("resize",t.onResize),t.setState({started:!0})},function(e){return t.onError(e.message,e.stack)})}else window.alert("Please select an MPQ file. If you downloaded the installer from GoG, you will need to install it on PC and use the MPQ file from the installation folder.")}},{key:"pointerLocked",value:function(){return document.pointerLockElement===this.canvas||document.mozPointerLockElement===this.canvas}},{key:"mousePos",value:function(e){var t=this.canvas.getBoundingClientRect();return this.pointerLocked()?(this.cursorPos.x=Math.max(t.left,Math.min(t.right,this.cursorPos.x+e.movementX)),this.cursorPos.y=Math.max(t.top,Math.min(t.bottom,this.cursorPos.y+e.movementY))):this.cursorPos={x:e.clientX,y:e.clientY},{x:Math.max(0,Math.min(Math.round((this.cursorPos.x-t.left)/(t.right-t.left)*640),639)),y:Math.max(0,Math.min(Math.round((this.cursorPos.y-t.top)/(t.bottom-t.top)*480),479))}}},{key:"mouseButton",value:function(e){switch(e.button){case 0:return 1;case 1:return 4;case 2:return 2;case 3:return 5;case 4:return 6;default:return 1}}},{key:"eventMods",value:function(e){return(e.shiftKey||this.touchMods[2]?1:0)+(e.ctrlKey?2:0)+(e.altKey?4:0)+(e.touches?8:0)}},{key:"clearKeySel",value:function(){if(this.showKeyboard){var e=this.keyboard.value.length;this.keyboard.setSelectionRange(e,e)}}},{key:"onKeyboardInner",value:function(e){if(this.showKeyboard){var t,n=this.keyboard.value;if(this.maxKeyboard>0)t=(n.match(/[\x20-\x7E]/g)||[]).join("").substring(0,this.maxKeyboard);else{var r=-this.maxKeyboard;n.match(/^\d*$/)&&(this.keyboardNum=Math.min(n.length?parseInt(n):0,r)),t=this.keyboardNum?this.keyboardNum.toString():""}n!==t&&(this.keyboard.value=t),this.clearKeySel(),this.game("text",t,e)}}},{key:"setTouchMod",value:function(e,t,n){if(e<3)this.touchMods[e]=t,this.touchButtons[e]&&this.touchButtons[e].classList.toggle("active",t);else if(n&&this.touchBelt[e]>=0){var r=performance.now();(!this.beltTime||r-this.beltTime>750)&&(this.game("DApi_Char",49+this.touchBelt[e]),this.beltTime=r)}}},{key:"updateTouchButton",value:function(e,t){var n=this,r=null;this.touchControls||(this.touchControls=!0,this.element.classList.add("touch"));var a=this.touchButton,o=!0,i=!1,s=void 0;try{for(var c,u=function(){var t=c.value,o=t.target,i=t.identifier,s=t.clientX,u=t.clientY;if(a&&a.id===i&&n.touchButtons[a.index]===o)return e.length>1&&(a.stick=!1),a.clientX=s,a.clientY=u,n.touchCanvas=Object(v.a)(e).find(function(e){return e.identifier!==i}),n.touchCanvas&&(n.touchCanvas={clientX:n.touchCanvas.clientX,clientY:n.touchCanvas.clientY}),delete n.panPos,{v:null!=n.touchCanvas};var l=n.touchButtons.indexOf(o);l>=0&&!r&&(r={id:i,index:l,stick:!0,original:n.touchMods[l],clientX:s,clientY:u})},l=e[Symbol.iterator]();!(o=(c=l.next()).done);o=!0){var f=u();if("object"===typeof f)return f.v}}catch(_){i=!0,s=_}finally{try{o||null==l.return||l.return()}finally{if(i)throw s}}if(a&&!r&&t&&a.stick){var d=this.touchButtons[a.index].getBoundingClientRect(),h=a.clientX,p=a.clientY;h>=d.left&&h=d.top&&pk)m=Math.abs(w)>Math.abs(g)?w>0?37:39:g>0?38:40,this.game("DApi_Key",0,0,m),this.panPos={x:b,y:y}}else this.game("DApi_Mouse",0,0,24,320,180),this.game("DApi_Mouse",2,1,24,320,180),this.panPos={x:b,y:y};return this.touchCanvas=null,!1}delete this.panPos}return this.touchCanvas=Object(v.a)(e).find(function(e){return!r||e.identifier!==r.id}),this.touchCanvas&&(this.touchCanvas={clientX:this.touchCanvas.clientX,clientY:this.touchCanvas.clientY}),null!=this.touchCanvas}},{key:"setTouch_",value:function(e,t){this.touchButtons[e]=t}},{key:"setTouchBelt_",value:function(e,t){if(this.touchButtons[e]=t,t){var n=document.createElement("canvas");n.width=28,n.height=28,t.appendChild(n),this.touchCtx[e]=n.getContext("2d")}else this.touchCtx[e]=null}},{key:"renderUi",value:function(){var e=this,t=this.state,n=t.started,r=t.loading,o=t.error,i=t.progress,s=t.has_spawn,c=t.save_names,l=t.show_saves,f=t.compress;if(l&&"object"===typeof c){var d=["Warrior","Rogue","Sorcerer"];return a.a.createElement("div",{className:"start"},a.a.createElement("ul",{className:"saveList"},Object.entries(c).map(function(t){var n=Object(u.a)(t,2),r=n[0],o=n[1];return a.a.createElement("li",{key:r},r,o?a.a.createElement("span",{className:"info"},o.name," (lv. ",o.level," ",d[o.cls],")"):"",a.a.createElement(C.a,{className:"btnDownload",icon:A.a,onClick:function(){return e.downloadSave(r)}}),a.a.createElement(C.a,{className:"btnRemove",icon:A.b,onClick:function(){return e.removeSave(r)}}))})),a.a.createElement("form",null,a.a.createElement("label",{htmlFor:"loadFile",className:"startButton"},"Upload Save"),a.a.createElement("input",{accept:".sv",type:"file",id:"loadFile",style:{display:"none"},onChange:this.parseSave})),a.a.createElement("div",{className:"startButton",onClick:function(){return e.setState({show_saves:!1})}},"Back"))}return f?a.a.createElement(rt,{api:this,ref:function(t){return e.compressMpq=t}}):o?a.a.createElement(ct,{className:"error",href:at(o,this.state.retail)},a.a.createElement("p",{className:"header"},"The following error has occurred:"),a.a.createElement("p",{className:"body"},o.message),a.a.createElement("p",{className:"footer"},"Click to create an issue on GitHub"),null!=o.save&&a.a.createElement("a",{href:o.save,download:this.saveName},"Download save file")):r&&!n?a.a.createElement("div",{className:"loading"},i&&i.text||"Loading...",null!=i&&!!i.total&&a.a.createElement("span",{className:"progressBar"},a.a.createElement("span",null,a.a.createElement("span",{style:{width:"".concat(Math.round(100*i.loaded/i.total),"%")}})))):n?void 0:a.a.createElement("div",{className:"start"},a.a.createElement("p",null,"This is a web port of the original Diablo game, based on source code reconstructed by GalaXyHaXz and devilution team. The project page with information and links can be found over here ",a.a.createElement(ct,{href:"https://github.com/d07RiV/diabloweb"},"https://github.com/d07RiV/diabloweb")),a.a.createElement("p",null,"If you own the original game, you can drop the original DIABDAT.MPQ onto this page or click the button below to start playing. The game can be purchased from ",a.a.createElement(ct,{href:"https://www.gog.com/game/diablo"},"GoG"),"."," ",a.a.createElement("span",{className:"link",onClick:function(){return e.setState({compress:!0})}},"Click here to compress the MPQ, greatly reducing its size.")),!s&&a.a.createElement("p",null,"Or you can play the shareware version for free (50MB download)."),a.a.createElement("form",null,a.a.createElement("label",{htmlFor:"loadFile",className:"startButton"},"Select MPQ"),a.a.createElement("input",{accept:".mpq",type:"file",id:"loadFile",style:{display:"none"},onChange:this.parseFile})),a.a.createElement("div",{className:"startButton",onClick:function(){return e.start()}},"Play Shareware"),!!c&&a.a.createElement("div",{className:"startButton",onClick:this.showSaves},"Manage Saves"))}},{key:"render",value:function(){var e=this.state,t=e.started,n=e.error,r=e.dropping;return a.a.createElement("div",{className:x()("App",{touch:this.touchControls,started:t,dropping:r,keyboard:!!this.showKeyboard}),ref:this.setElement},a.a.createElement("div",{className:"touch-ui touch-mods"},a.a.createElement("div",{className:x()("touch-button","touch-button-0",{active:this.touchMods[0]}),ref:this.setTouch0}),a.a.createElement("div",{className:x()("touch-button","touch-button-1",{active:this.touchMods[1]}),ref:this.setTouch1}),a.a.createElement("div",{className:x()("touch-button","touch-button-2",{active:this.touchMods[2]}),ref:this.setTouch2})),a.a.createElement("div",{className:"touch-ui touch-belt"},a.a.createElement("div",{className:x()("touch-button","touch-button-0"),ref:this.setTouch3}),a.a.createElement("div",{className:x()("touch-button","touch-button-1"),ref:this.setTouch4}),a.a.createElement("div",{className:x()("touch-button","touch-button-2"),ref:this.setTouch5})),a.a.createElement("div",{className:"Body"},a.a.createElement("div",{className:"inner"},!n&&a.a.createElement("canvas",{ref:this.setCanvas,width:640,height:480}),a.a.createElement("input",{type:"text",className:"keyboard",onChange:this.onKeyboard,onBlur:this.onKeyboardBlur,ref:this.setKeyboard,spellCheck:!1,style:this.showKeyboard||{}}))),a.a.createElement("div",{className:"BodyV"},this.renderUi()))}}]),t}(a.a.Component);i.a.render(a.a.createElement(ut,null),document.getElementById("root")),function(e){if("serviceWorker"in navigator){if(new URL("/diabloweb",window.location.href).origin!==window.location.origin)return;window.addEventListener("load",function(){var t="".concat("/diabloweb","/service-worker.js");s?(function(e,t){fetch(e).then(function(n){var r=n.headers.get("content-type");404===n.status||null!=r&&-1===r.indexOf("javascript")?navigator.serviceWorker.ready.then(function(e){e.unregister().then(function(){window.location.reload()})}):c(e,t)}).catch(function(){console.log("No internet connection found. App is running in offline mode.")})}(t,e),navigator.serviceWorker.ready.then(function(){console.log("This web app is being served cache-first by a service worker. To learn more, visit https://bit.ly/CRA-PWA")})):c(t,e)})}}({onUpdate:function(){}})}},[[41,2,0,5]]]); +//# sourceMappingURL=main.0a18bc0c.chunk.js.map \ No newline at end of file diff --git a/static/js/main.0a18bc0c.chunk.js.map b/static/js/main.0a18bc0c.chunk.js.map new file mode 100644 index 0000000..401f461 --- /dev/null +++ b/static/js/main.0a18bc0c.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["fs.js","api/game.worker.js","mpqcmp/mpqcmp.worker.js","mpqcmp/MpqCmp.wasm","mpqcmp/ListFile.txt","../node_modules/peerjs/dist sync","serviceWorker.js","api/explode.js","api/codec.js","api/savefile.js","api/sound.js","api/load_spawn.js","api/packet.js","api/webrtc.js","api/loader.js","mpqcmp/compress.js","mpqcmp/index.js","App.js","index.js"],"names":["downloadFile","_callee","store","name","file","blob","url","lnk","D_Projects_diabloweb_diabloweb_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default","a","wrap","_context","prev","next","get","toLowerCase","sent","Blob","type","URL","createObjectURL","document","createElement","setAttribute","body","appendChild","click","removeChild","revokeObjectURL","console","error","concat","stop","downloadSaves","_callee2","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","_context2","undefined","keys","t0","Symbol","iterator","done","value","match","t1","return","finish","readFile","Promise","resolve","reject","reader","FileReader","onload","result","onerror","onabort","readAsArrayBuffer","uploadFile","_callee3","files","data","_context3","Uint8Array","set","abrupt","create_fs","_x7","_create_fs","apply","this","arguments","_callee5","load","_i","_Object$entries","_ref3","_ref2","_context5","IdbKvStore","Map","Object","json","entries","call","length","D_Projects_diabloweb_diabloweb_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__","window","DownloadFile","DownloadSaves","update","delete","remove","clear","download","upload","fileUrl","_fileUrl","D_Projects_diabloweb_diabloweb_node_modules_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__","mark","_callee4","_context4","_x8","t2","module","exports","Worker","__webpack_require__","p","webpackEmptyContext","req","e","Error","code","id","isLocalhost","Boolean","location","hostname","registerValidSW","swUrl","config","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","log","onUpdate","onSuccess","catch","CMP_BINARY","CMP_ASCII","CMP_NO_ERROR","CMP_INVALID_DICTSIZE","CMP_INVALID_MODE","CMP_BAD_DATA","CMP_ABORT","PKDCL_OK","PKDCL_STREAM_END","DistBits","DistCode","ExLenBits","LenBase","Uint16Array","LenBits","LenCode","ChBitsAsc","ChCodeAsc","GenDecodeTabs","positions","start_indexes","length_bits","elements","i","index","WasteBits","pWork","nBits","extra_bits","bit_buff","in_pos","in_bytes","read_buf","in_buff","DecodeLit","length_code","LengthCodes","extra_length_bits","extra_length","ctype","uncompressed_byte","offs2C34","offs2D34","offs2E34","offs2EB4","DecodeDist","rep_length","distance","dist_pos_code","DistPosCodes","dsize_bits","dsize_mask","explode","write_buf","buffer","ArrayBuffer","out_buff","pChCodeAsc","count","bits_asc","acc","add","GenAscTabs","next_literal","outputPos","minus_dist","target","source","subarray","copyWithin","Expand","W","Uint32Array","SHA1CircularShift","shift","SHA1","classCallCheck","digest","digest8","u8","u32","byteOffset","input","A","B","C","D","E","temp","Random","seed","codec_decode","password","size","last_size","sha","rand","key","k32","pw","charCodeAt","input8","codec_init_key","size32","data32","buf32","buf","j","pkzip_decompress","out_size","output","out_pos","dst","Math","min","src","hashtable","b","decrypt","decrypt8","encrypt","orig","hash","seed1","seed2","ch","path_name","pos","max","lastIndexOf","substring","Flags","MpqReader","byteLength","readHeader","createClass","sizeId","hashOffset","blockOffset","hashCount","blockCount","hashTable","readTable","blockTable","blockSize","offset","slice","keyA","keyB","fileIndex","block","info","filePos","cmpSize","fileSize","flags","raw","readRaw","numBlocks","floor","tableSize","blocks","oPos","uSize","tmp","init_sound","AudioContext","webkitAudioContext","StereoPannerNode","create_sound","duplicate_sound","play_sound","set_volume","stop_sound","delete_sound","context","sounds","create_sound_raw","channels","rate","createBuffer","getChannelData","gain","createGain","panner","pan","decodeAudioData","srcId","volume","loop","pow","relVolume","createBufferSource","node","connect","destination","start","stop_all","sound","slicedToArray","err","SpawnSizes","load_spawn","_x","_x2","_load_spawn","api","fs","spawn","regenerator_default","includes","axios","request","process","responseType","onDownloadProgress","onProgress","text","loaded","total","headers","Cache-Control","buffer_reader","read8","String","fromCharCode","toConsumableArray","read32","buffer_writer","write8","write32","rest","RejectionReason","JOIN_SUCCESS","JOIN_ALREADY_IN_GAME","JOIN_GAME_NOT_FOUND","JOIN_INCORRECT_PASSWORD","JOIN_VERSION_MISMATCH","JOIN_GAME_FULL","CREATE_GAME_EXISTS","read_packet","types","cls","values","find","packet","read","packet_size","write_packet","write","make_batch","read16","packets","push","reduce","sum","_ref","writer","write16","server_packet","version","_ref4","game_list","games","read_str","_ref5","_ref6","_ref7","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_ref9","write_str","join_accept","cookie","difficulty","_ref10","join_reject","reason","_ref11","_ref12","disconnect","_ref13","message","payload","_ref14","_ref15","turn","_ref16","batch","client_packet","_ref17","create_game","_ref18","_ref19","join_game","_ref20","_ref21","leave_game","drop_player","_ref22","_ref23","_ref24","_ref25","PeerID","Options","port","secure","webrtc_server","onMessage","onClose","_this","peer","Peer","on","conn","onConnect","players","myplr","random","onError","off","onOpen","setTimeout","_this2","_read_packet","pkt","send","handle","drop","mask","destroy","close","webrtc_client","_this3","pending","needUnreg","unreg","clearTimeout","timeout","_read_packet2","webrtc_open","server","client","_read_packet3","onRender","ctx","bitmap","images","clip","belt","transferFromImageBitmap","x","y","w","h","image","createImageData","putImageData","save","font","x0","y0","x1","y1","beginPath","rect","str","color","r","g","fillStyle","fillText","restore","updateBelt","audio","mpq","offscreen","canvas","getContext","alpha","worker","packetQueue","webrtc","addEventListener","action","func","_len","params","Array","_key","postMessage","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_ref8","setCursorPos","openKeyboard","stack","onExit","setCurrentSave","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","transfer","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","setInterval","load_game","do_load_game","MpqSize","ListSize","progress","loadFile","binary","_args","runWorker","objectSpread","updateProgress","loader","mpqsize","fHeader","fBinary","fList","header","header16","hashTablePos","blockTablePos","hashTableSize","blockTableSize","fHashTable","fBlockTable","list","listMap","hashStr","_name","NUM_TASKS","tasks","cSize","task","numFiles","_loop","_i2","_tasks","_loop2","_i3","_tasks2","outputSize","blockPos","_i4","_tasks3","_task","_task$result","_i5","weight","ready","MpqBinary","ListFile","t3","t4","t5","t6","trim","t7","split","map","filter","h1","h2","toString","padStart","t8","fLoad","all","t","forEach","run","res","fill","CompressMpq","parseFile","onDone","setState","props","compress","started","_x3","_x4","_compress","_this$state","react_default","className","href","onClick","style","width","round","htmlFor","accept","display","onChange","React","Component","reportLink","retail","searchParams","line","join","userAgent","ReactGA","initialize","pageview","TOUCH_MOVE","TOUCH_RMB","keyboardRule","styleSheets","sheet","cssRules","rule","CSSRule","MEDIA_RULE","conditionText","sub","selectorText","findKeyboardRule","Link","children","objectWithoutProperties","assign","rel","App","possibleConstructorReturn","getPrototypeOf","loading","dropping","has_spawn","cursorPos","touchControls","touchButtons","touchCtx","touchMods","touchBelt","maxKeyboard","onDrop","dataTransfer","items","kind","getAsFile","getDropFile","preventDefault","compressMpq","onDragEnter","setDropping","onDragOver","isDropFile","onDragLeave","showSaves","save_names","updateSaves","show_saves","onResize","exitPointerLock","onPointerLockChange","screen","innerHeight","height","pointerLocked","game","onMouseMove","_this$mousePos","mousePos","eventMods","onMouseDown","keyboard","element","classList","_this$mousePos2","requestPointerLock","mouseButton","onMouseUp","_this$mousePos3","onKeyDown","keyCode","showKeyboard","clearKeySel","onMenu","onKeyUp","onKeyboard","onKeyboardInner","onKeyboardBlur","parseSave","touchButton","touchCanvas","onTouchStart","blur","updateTouchButton","touches","_this$mousePos4","onTouchMove","_this$mousePos5","onTouchEnd","prevTc","_this$mousePos6","setTouchMod","fullscreenElement","requestFullscreen","setCanvas","setElement","setKeyboard","setTouch0","setTouch_","bind","assertThisInitialized","setTouch1","setTouch2","setTouch3","setTouchBelt_","setTouch4","setTouch5","inc","asyncToGenerator","errorObject","saveName","mapStackTrace","left","toFixed","top","focus","transform","keyboardNum","_this4","getBoundingClientRect","right","bottom","reload","_this5","saves","hero","getPassword","nameEnd","indexOf","level","getPlayerName","_this6","confirm","idx","slot","drawImage","used","Set","has","drawBelt","_this7","removeEventListener","event","category","passive","capture","alert","pointerLockElement","mozPointerLockElement","movementX","movementY","clientX","clientY","button","shiftKey","ctrlKey","altKey","len","setSelectionRange","valid","maxValue","parseInt","use","toggle","now","performance","beltTime","release","_this8","touchOther","btn","identifier","stick","panPos","v","original","_ret","dx","dy","step","offsetHeight","abs","_this9","plrClass","index_es","icon","faDownload","downloadSave","faTimes","removeSave","mpqcmp_CompressMpq","ref","App_Link","_this$state2","classNames","touch","active","onBlur","spellCheck","renderUi","ReactDOM","render","src_App_0","getElementById","origin","fetch","response","contentType","status","unregister","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.0a18bc0c.chunk.js","sourcesContent":["import IdbKvStore from 'idb-kv-store';\r\n\r\n/*const importStorage = () => new Promise((resolve, reject) => {\r\n let done = false;\r\n const frame = document.createElement('iframe');\r\n window.addEventListener('message', ({data}) => {\r\n if (data.method === 'storage' && !done) {\r\n done = true;\r\n resolve(data.files);\r\n frame.contentWindow.postMessage({method: 'clear'}, '*');\r\n }\r\n });\r\n frame.addEventListener('load', () => {\r\n frame.contentWindow.postMessage({method: 'transfer'}, '*');\r\n });\r\n frame.addEventListener('error', () => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n });\r\n frame.src = \"https://diablo.rivsoft.net/storage.html\";\r\n frame.style.display = \"none\";\r\n document.body.appendChild(frame);\r\n setTimeout(() => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n }, 10000);\r\n});*/\r\n\r\nasync function downloadFile(store, name) {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n const url = URL.createObjectURL(blob);\r\n const lnk = document.createElement('a');\r\n lnk.setAttribute('href', url);\r\n lnk.setAttribute('download', name);\r\n document.body.appendChild(lnk);\r\n lnk.click();\r\n document.body.removeChild(lnk);\r\n URL.revokeObjectURL(url);\r\n } else {\r\n console.error(`File ${name} does not exist`);\r\n }\r\n}\r\n\r\nasync function downloadSaves(store) {\r\n for (let name of await store.keys()) {\r\n if (name.match(/\\.sv$/i)) {\r\n downloadFile(store, name);\r\n }\r\n }\r\n}\r\n\r\nconst readFile = file => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n reader.readAsArrayBuffer(file);\r\n});\r\nasync function uploadFile(store, files, file) {\r\n const data = new Uint8Array(await readFile(file));\r\n files.set(file.name.toLowerCase(), data);\r\n return store.set(file.name.toLowerCase(), data);\r\n}\r\n\r\nexport default async function create_fs(load) {\r\n try {\r\n const store = new IdbKvStore('diablo_fs');\r\n const files = new Map();\r\n for (let [name, data] of Object.entries(await store.json())) {\r\n files.set(name, data);\r\n }\r\n /*if (load) {\r\n const files = await importStorage();\r\n if (files) {\r\n for (let [name, data] of files) {\r\n files.set(name, data);\r\n store.set(name, data);\r\n }\r\n }\r\n }*/\r\n window.DownloadFile = name => downloadFile(store, name);\r\n window.DownloadSaves = () => downloadSaves(store);\r\n return {\r\n files,\r\n update: (name, data) => store.set(name, data),\r\n delete: name => store.remove(name),\r\n clear: () => store.clear(),\r\n download: name => downloadFile(store, name),\r\n upload: file => uploadFile(store, files, file),\r\n fileUrl: async name => {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n return URL.createObjectURL(blob);\r\n }\r\n },\r\n };\r\n } catch (e) {\r\n window.DownloadFile = () => console.error('IndexedDB is not supported');\r\n window.DownloadSaves = () => console.error('IndexedDB is not supported');\r\n return {\r\n files: new Map(),\r\n update: () => Promise.resolve(),\r\n delete: () => Promise.resolve(),\r\n clear: () => Promise.resolve(),\r\n download: () => Promise.resolve(),\r\n upload: () => Promise.resolve(),\r\n fileUrl: () => Promise.resolve(),\r\n };\r\n } \r\n}\r\n","module.exports = function() {\n return new Worker(__webpack_public_path__ + \"d2271be9a67638d3642f.worker.js\");\n};","module.exports = function() {\n return new Worker(__webpack_public_path__ + \"8acc76fdb6ee253c485e.worker.js\");\n};","module.exports = __webpack_public_path__ + \"static/media/MpqCmp.8aa3c6dc.wasm\";","module.exports = __webpack_public_path__ + \"static/media/ListFile.b370797d.txt\";","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 72;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","export const CMP_BINARY = 0; // Binary compression\r\nexport const CMP_ASCII = 1; // Ascii compression\r\nexport const CMP_NO_ERROR = 0;\r\nexport const CMP_INVALID_DICTSIZE = 1;\r\nexport const CMP_INVALID_MODE = 2;\r\nexport const CMP_BAD_DATA = 3;\r\nexport const CMP_ABORT = 4;\r\nexport const CMP_IMPLODE_DICT_SIZE1 = 1024; // Dictionary size of 1024\r\nexport const CMP_IMPLODE_DICT_SIZE2 = 2048; // Dictionary size of 2048\r\nexport const CMP_IMPLODE_DICT_SIZE3 = 4096; // Dictionary size of 4096\r\n\r\nexport const PKDCL_OK = 0;\r\nexport const PKDCL_STREAM_END = 1; // All data from the input stream is read\r\nexport const PKDCL_NEED_DICT = 2; // Need more data (dictionary)\r\nexport const PKDCL_CONTINUE = 10; // Internal flag, not returned to user\r\nexport const PKDCL_GET_INPUT = 11; // Internal flag, not returned to user\r\n\r\nconst DistBits = new Uint8Array([\r\n 0x02, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,\r\n 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,\r\n 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,\r\n 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08\r\n]);\r\n\r\nconst DistCode = new Uint8Array([\r\n 0x03, 0x0D, 0x05, 0x19, 0x09, 0x11, 0x01, 0x3E, 0x1E, 0x2E, 0x0E, 0x36, 0x16, 0x26, 0x06, 0x3A,\r\n 0x1A, 0x2A, 0x0A, 0x32, 0x12, 0x22, 0x42, 0x02, 0x7C, 0x3C, 0x5C, 0x1C, 0x6C, 0x2C, 0x4C, 0x0C,\r\n 0x74, 0x34, 0x54, 0x14, 0x64, 0x24, 0x44, 0x04, 0x78, 0x38, 0x58, 0x18, 0x68, 0x28, 0x48, 0x08,\r\n 0xF0, 0x70, 0xB0, 0x30, 0xD0, 0x50, 0x90, 0x10, 0xE0, 0x60, 0xA0, 0x20, 0xC0, 0x40, 0x80, 0x00\r\n]);\r\n\r\nconst ExLenBits = new Uint8Array([\r\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08\r\n]);\r\n\r\nconst LenBase = new Uint16Array([\r\n 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,\r\n 0x0008, 0x000A, 0x000E, 0x0016, 0x0026, 0x0046, 0x0086, 0x0106\r\n]);\r\n\r\nconst LenBits = new Uint8Array([\r\n 0x03, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07\r\n]);\r\n\r\nconst LenCode = new Uint8Array([\r\n 0x05, 0x03, 0x01, 0x06, 0x0A, 0x02, 0x0C, 0x14, 0x04, 0x18, 0x08, 0x30, 0x10, 0x20, 0x40, 0x00\r\n]);\r\n\r\nconst ChBitsAsc = new Uint8Array([\r\n 0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x07, 0x0C, 0x0C, 0x07, 0x0C, 0x0C,\r\n 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,\r\n 0x04, 0x0A, 0x08, 0x0C, 0x0A, 0x0C, 0x0A, 0x08, 0x07, 0x07, 0x08, 0x09, 0x07, 0x06, 0x07, 0x08,\r\n 0x07, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x08, 0x08, 0x0C, 0x0B, 0x07, 0x09, 0x0B,\r\n 0x0C, 0x06, 0x07, 0x06, 0x06, 0x05, 0x07, 0x08, 0x08, 0x06, 0x0B, 0x09, 0x06, 0x07, 0x06, 0x06,\r\n 0x07, 0x0B, 0x06, 0x06, 0x06, 0x07, 0x09, 0x08, 0x09, 0x09, 0x0B, 0x08, 0x0B, 0x09, 0x0C, 0x08,\r\n 0x0C, 0x05, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x0B, 0x07, 0x05, 0x06, 0x05, 0x05,\r\n 0x06, 0x0A, 0x05, 0x05, 0x05, 0x05, 0x08, 0x07, 0x08, 0x08, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C,\r\n 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,\r\n 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,\r\n 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,\r\n 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,\r\n 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,\r\n 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,\r\n 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D,\r\n 0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D\r\n]);\r\n\r\nconst ChCodeAsc = new Uint16Array([\r\n 0x0490, 0x0FE0, 0x07E0, 0x0BE0, 0x03E0, 0x0DE0, 0x05E0, 0x09E0,\r\n 0x01E0, 0x00B8, 0x0062, 0x0EE0, 0x06E0, 0x0022, 0x0AE0, 0x02E0,\r\n 0x0CE0, 0x04E0, 0x08E0, 0x00E0, 0x0F60, 0x0760, 0x0B60, 0x0360,\r\n 0x0D60, 0x0560, 0x1240, 0x0960, 0x0160, 0x0E60, 0x0660, 0x0A60,\r\n 0x000F, 0x0250, 0x0038, 0x0260, 0x0050, 0x0C60, 0x0390, 0x00D8,\r\n 0x0042, 0x0002, 0x0058, 0x01B0, 0x007C, 0x0029, 0x003C, 0x0098,\r\n 0x005C, 0x0009, 0x001C, 0x006C, 0x002C, 0x004C, 0x0018, 0x000C,\r\n 0x0074, 0x00E8, 0x0068, 0x0460, 0x0090, 0x0034, 0x00B0, 0x0710,\r\n 0x0860, 0x0031, 0x0054, 0x0011, 0x0021, 0x0017, 0x0014, 0x00A8,\r\n 0x0028, 0x0001, 0x0310, 0x0130, 0x003E, 0x0064, 0x001E, 0x002E,\r\n 0x0024, 0x0510, 0x000E, 0x0036, 0x0016, 0x0044, 0x0030, 0x00C8,\r\n 0x01D0, 0x00D0, 0x0110, 0x0048, 0x0610, 0x0150, 0x0060, 0x0088,\r\n 0x0FA0, 0x0007, 0x0026, 0x0006, 0x003A, 0x001B, 0x001A, 0x002A,\r\n 0x000A, 0x000B, 0x0210, 0x0004, 0x0013, 0x0032, 0x0003, 0x001D,\r\n 0x0012, 0x0190, 0x000D, 0x0015, 0x0005, 0x0019, 0x0008, 0x0078,\r\n 0x00F0, 0x0070, 0x0290, 0x0410, 0x0010, 0x07A0, 0x0BA0, 0x03A0,\r\n 0x0240, 0x1C40, 0x0C40, 0x1440, 0x0440, 0x1840, 0x0840, 0x1040,\r\n 0x0040, 0x1F80, 0x0F80, 0x1780, 0x0780, 0x1B80, 0x0B80, 0x1380,\r\n 0x0380, 0x1D80, 0x0D80, 0x1580, 0x0580, 0x1980, 0x0980, 0x1180,\r\n 0x0180, 0x1E80, 0x0E80, 0x1680, 0x0680, 0x1A80, 0x0A80, 0x1280,\r\n 0x0280, 0x1C80, 0x0C80, 0x1480, 0x0480, 0x1880, 0x0880, 0x1080,\r\n 0x0080, 0x1F00, 0x0F00, 0x1700, 0x0700, 0x1B00, 0x0B00, 0x1300,\r\n 0x0DA0, 0x05A0, 0x09A0, 0x01A0, 0x0EA0, 0x06A0, 0x0AA0, 0x02A0,\r\n 0x0CA0, 0x04A0, 0x08A0, 0x00A0, 0x0F20, 0x0720, 0x0B20, 0x0320,\r\n 0x0D20, 0x0520, 0x0920, 0x0120, 0x0E20, 0x0620, 0x0A20, 0x0220,\r\n 0x0C20, 0x0420, 0x0820, 0x0020, 0x0FC0, 0x07C0, 0x0BC0, 0x03C0,\r\n 0x0DC0, 0x05C0, 0x09C0, 0x01C0, 0x0EC0, 0x06C0, 0x0AC0, 0x02C0,\r\n 0x0CC0, 0x04C0, 0x08C0, 0x00C0, 0x0F40, 0x0740, 0x0B40, 0x0340,\r\n 0x0300, 0x0D40, 0x1D00, 0x0D00, 0x1500, 0x0540, 0x0500, 0x1900,\r\n 0x0900, 0x0940, 0x1100, 0x0100, 0x1E00, 0x0E00, 0x0140, 0x1600,\r\n 0x0600, 0x1A00, 0x0E40, 0x0640, 0x0A40, 0x0A00, 0x1200, 0x0200,\r\n 0x1C00, 0x0C00, 0x1400, 0x0400, 0x1800, 0x0800, 0x1000, 0x0000 \r\n]);\r\n\r\n/**\r\n * @param {Uint8Array} positions [out] Table of positions\r\n * @param {Uint8Array} start_indexes Table of start indexes\r\n * @param {Uint8Array} length_bits Table of lengths. Each length is stored as number of bits\r\n * @param {number} elements Number of elements in start_indexes and length_bits\r\n */\r\nfunction GenDecodeTabs(positions, start_indexes, length_bits, elements) {\r\n for (let i = 0; i < elements; i++) {\r\n const length = 1 << length_bits[i]; // Get the length in bytes\r\n for (let index = start_indexes[i]; index < 0x100; index += length) {\r\n positions[index] = i;\r\n }\r\n }\r\n}\r\n\r\nfunction GenAscTabs(pWork) {\r\n let pChCodeAsc = 0xFF;\r\n\r\n for (let count = 0x00FF; pChCodeAsc >= 0; pChCodeAsc--, count--) {\r\n let bits_asc = pWork.ChBitsAsc[count];\r\n let acc;\r\n\r\n if (bits_asc <= 8) {\r\n const add = (1 << bits_asc);\r\n acc = ChCodeAsc[pChCodeAsc];\r\n\r\n do {\r\n pWork.offs2C34[acc] = count;\r\n acc += add;\r\n } while(acc < 0x100);\r\n } else if ((acc = (ChCodeAsc[pChCodeAsc] & 0xFF)) !== 0) {\r\n pWork.offs2C34[acc] = 0xFF;\r\n\r\n if (ChCodeAsc[pChCodeAsc] & 0x3F) {\r\n bits_asc -= 4;\r\n pWork.ChBitsAsc[count] = bits_asc;\r\n\r\n const add = (1 << bits_asc);\r\n acc = ChCodeAsc[pChCodeAsc] >> 4;\r\n do {\r\n pWork.offs2D34[acc] = count;\r\n acc += add;\r\n } while(acc < 0x100);\r\n } else {\r\n bits_asc -= 6;\r\n pWork.ChBitsAsc[count] = bits_asc;\r\n\r\n const add = (1 << bits_asc);\r\n acc = ChCodeAsc[pChCodeAsc] >> 6;\r\n do {\r\n pWork.offs2E34[acc] = count;\r\n acc += add;\r\n } while(acc < 0x80);\r\n }\r\n } else {\r\n bits_asc -= 8;\r\n pWork.ChBitsAsc[count] = bits_asc;\r\n\r\n const add = (1 << bits_asc);\r\n acc = ChCodeAsc[pChCodeAsc] >> 8;\r\n do {\r\n pWork.offs2EB4[acc] = count;\r\n acc += add;\r\n } while(acc < 0x100);\r\n }\r\n }\r\n}\r\n\r\n//-----------------------------------------------------------------------------\r\n// Removes given number of bits in the bit buffer. New bits are reloaded from\r\n// the input buffer, if needed.\r\n// Returns: PKDCL_OK: Operation was successful\r\n// PKDCL_STREAM_END: There are no more bits in the input buffer\r\nfunction WasteBits(pWork, nBits) {\r\n // If number of bits required is less than number of (bits in the buffer) ?\r\n if (nBits <= pWork.extra_bits) {\r\n pWork.extra_bits -= nBits;\r\n pWork.bit_buff >>>= nBits;\r\n return PKDCL_OK;\r\n }\r\n\r\n // Load input buffer if necessary\r\n pWork.bit_buff >>= pWork.extra_bits;\r\n if (pWork.in_pos === pWork.in_bytes) {\r\n if ((pWork.in_bytes = pWork.read_buf(pWork.in_buff)) === 0) {\r\n return PKDCL_STREAM_END;\r\n }\r\n pWork.in_pos = 0;\r\n }\r\n\r\n // Update bit buffer\r\n pWork.bit_buff |= (pWork.in_buff[pWork.in_pos++] << 8);\r\n pWork.bit_buff >>>= (nBits - pWork.extra_bits);\r\n pWork.extra_bits = (pWork.extra_bits - nBits) + 8;\r\n return PKDCL_OK;\r\n}\r\n\r\n//-----------------------------------------------------------------------------\r\n// Decodes next literal from the input (compressed) data.\r\n// Returns : 0x000: One byte 0x00\r\n// 0x001: One byte 0x01\r\n// ...\r\n// 0x0FF: One byte 0xFF\r\n// 0x100: Repetition, length of 0x02 bytes\r\n// 0x101: Repetition, length of 0x03 bytes\r\n// ...\r\n// 0x304: Repetition, length of 0x206 bytes\r\n// 0x305: End of stream\r\n// 0x306: Error\r\nfunction DecodeLit(pWork) {\r\n if(pWork.bit_buff & 1) {\r\n // Remove one bit from the input data\r\n if(WasteBits(pWork, 1)) {\r\n return 0x306;\r\n }\r\n\r\n // The next 8 bits hold the index to the length code table\r\n let length_code = pWork.LengthCodes[pWork.bit_buff & 0xFF];\r\n\r\n // Remove the apropriate number of bits\r\n if(WasteBits(pWork, pWork.LenBits[length_code])) {\r\n return 0x306;\r\n }\r\n\r\n // Are there some extra bits for the obtained length code ?\r\n const extra_length_bits = pWork.ExLenBits[length_code];\r\n if(extra_length_bits !== 0) {\r\n const extra_length = pWork.bit_buff & ((1 << extra_length_bits) - 1);\r\n if(WasteBits(pWork, extra_length_bits)) {\r\n if((length_code + extra_length) != 0x10E) {\r\n return 0x306;\r\n }\r\n }\r\n length_code = pWork.LenBase[length_code] + extra_length;\r\n }\r\n\r\n // In order to distinguish uncompressed byte from repetition length,\r\n // we have to add 0x100 to the length.\r\n return length_code + 0x100;\r\n }\r\n\r\n // Remove one bit from the input data\r\n if(WasteBits(pWork, 1)) {\r\n return 0x306;\r\n }\r\n\r\n // If the binary compression type, read 8 bits and return them as one byte.\r\n if(pWork.ctype === CMP_BINARY) {\r\n const uncompressed_byte = pWork.bit_buff & 0xFF;\r\n\r\n if(WasteBits(pWork, 8)) {\r\n return 0x306;\r\n }\r\n return uncompressed_byte;\r\n }\r\n\r\n // When ASCII compression ...\r\n let value;\r\n if (pWork.bit_buff & 0xFF) {\r\n value = pWork.offs2C34[pWork.bit_buff & 0xFF];\r\n\r\n if (value == 0xFF) {\r\n if (pWork.bit_buff & 0x3F) {\r\n if (WasteBits(pWork, 4)) {\r\n return 0x306;\r\n }\r\n\r\n value = pWork.offs2D34[pWork.bit_buff & 0xFF];\r\n } else {\r\n if (WasteBits(pWork, 6)) {\r\n return 0x306;\r\n }\r\n\r\n value = pWork.offs2E34[pWork.bit_buff & 0x7F];\r\n }\r\n }\r\n } else {\r\n if(WasteBits(pWork, 8)) {\r\n return 0x306;\r\n }\r\n\r\n value = pWork.offs2EB4[pWork.bit_buff & 0xFF];\r\n }\r\n\r\n return WasteBits(pWork, pWork.ChBitsAsc[value]) ? 0x306 : value;\r\n}\r\n\r\n//-----------------------------------------------------------------------------\r\n// Decodes the distance of the repetition, backwards relative to the\r\n// current output buffer position\r\nfunction DecodeDist(pWork, rep_length) {\r\n // Next 2-8 bits in the input buffer is the distance position code\r\n const dist_pos_code = pWork.DistPosCodes[pWork.bit_buff & 0xFF];\r\n const dist_pos_bits = pWork.DistBits[dist_pos_code];\r\n if (WasteBits(pWork, dist_pos_bits)) {\r\n return 0;\r\n }\r\n\r\n let distance;\r\n if (rep_length === 2) {\r\n // If the repetition is only 2 bytes length,\r\n // then take 2 bits from the stream in order to get the distance\r\n distance = (dist_pos_code << 2) | (pWork.bit_buff & 0x03);\r\n if (WasteBits(pWork, 2)) {\r\n return 0;\r\n }\r\n } else {\r\n // If the repetition is more than 2 bytes length,\r\n // then take \"dsize_bits\" bits in order to get the distance\r\n distance = (dist_pos_code << pWork.dsize_bits) | (pWork.bit_buff & pWork.dsize_mask);\r\n if (WasteBits(pWork, pWork.dsize_bits)) {\r\n return 0;\r\n }\r\n }\r\n return distance + 1;\r\n}\r\n\r\nfunction Expand(pWork) {\r\n let outputPos = 0x1000; // Initialize output buffer position\r\n\r\n // Decode the next literal from the input data.\r\n // The returned literal can either be an uncompressed byte (next_literal < 0x100)\r\n // or an encoded length of the repeating byte sequence that\r\n // is to be copied to the current buffer position\r\n let result, next_literal;\r\n while ((result = next_literal = DecodeLit(pWork)) < 0x305) {\r\n // If the literal is greater than 0x100, it holds length\r\n // of repeating byte sequence\r\n // literal of 0x100 means repeating sequence of 0x2 bytes\r\n // literal of 0x101 means repeating sequence of 0x3 bytes\r\n // ...\r\n // literal of 0x305 means repeating sequence of 0x207 bytes\r\n if(next_literal >= 0x100) {\r\n // Get the length of the repeating sequence.\r\n // Note that the repeating block may overlap the current output position,\r\n // for example if there was a sequence of equal bytes\r\n let rep_length = next_literal - 0xFE;\r\n // Get backward distance to the repetition\r\n const minus_dist = DecodeDist(pWork, rep_length);\r\n if (minus_dist === 0) {\r\n result = 0x306;\r\n break;\r\n }\r\n\r\n // Target and source pointer\r\n let target = outputPos;\r\n let source = target - minus_dist;\r\n\r\n // Update buffer output position\r\n outputPos += rep_length;\r\n\r\n // Copy the repeating sequence\r\n const out_buff = pWork.out_buff;\r\n while (rep_length-- > 0) {\r\n out_buff[target++] = out_buff[source++];\r\n }\r\n } else {\r\n pWork.out_buff[outputPos++] = next_literal;\r\n }\r\n\r\n // Flush the output buffer, if number of extracted bytes has reached the end\r\n if (outputPos >= 0x2000) {\r\n // Copy decompressed data into user buffer\r\n pWork.write_buf(pWork.out_buff.subarray(0x1000, 0x2000));\r\n\r\n // Now copy the decompressed data to the first half of the buffer.\r\n // This is needed because the decompression might reuse them as repetitions.\r\n // Note that if the output buffer overflowed previously, the extra decompressed bytes\r\n // are stored in \"out_buff_overflow\", and they will now be\r\n // within decompressed part of the output buffer.\r\n pWork.out_buff.copyWithin(0, 0x1000, outputPos);\r\n outputPos -= 0x1000;\r\n }\r\n }\r\n\r\n // Flush any remaining decompressed bytes\r\n pWork.write_buf(pWork.out_buff.subarray(0x1000, outputPos));\r\n return result;\r\n}\r\n\r\n//-----------------------------------------------------------------------------\r\n// Main exploding function.\r\nexport function explode(read_buf, write_buf) {\r\n const buffer = new ArrayBuffer(0x3104);\r\n const pWork = {\r\n read_buf,\r\n write_buf,\r\n in_pos: 3,\r\n extra_bits: 0,\r\n in_buff: new Uint8Array(buffer, 0, 0x800),\r\n DistPosCodes: new Uint8Array(buffer, 0x800, 0x100),\r\n LengthCodes: new Uint8Array(buffer, 0x900, 0x100),\r\n offs2C34: new Uint8Array(buffer, 0xA00, 0x100),\r\n offs2D34: new Uint8Array(buffer, 0xB00, 0x100),\r\n offs2E34: new Uint8Array(buffer, 0xC00, 0x80),\r\n offs2EB4: new Uint8Array(buffer, 0xC80, 0x100),\r\n ChBitsAsc: new Uint8Array(buffer, 0xD80, 0x100),\r\n DistBits: new Uint8Array(buffer, 0xE80, 0x40),\r\n LenBits: new Uint8Array(buffer, 0xEC0, 0x10),\r\n ExLenBits: new Uint8Array(buffer, 0xED0, 0x10),\r\n LenBase: new Uint16Array(buffer, 0xEE0, 0x10),\r\n out_buff: new Uint8Array(buffer, 0xF00, 0x2204),\r\n };\r\n pWork.in_bytes = read_buf(pWork.in_buff);\r\n if (pWork.in_bytes <= 4) {\r\n return CMP_BAD_DATA;\r\n }\r\n pWork.ctype = pWork.in_buff[0];\r\n pWork.dsize_bits = pWork.in_buff[1];\r\n pWork.bit_buff = pWork.in_buff[2];\r\n\r\n // Test for the valid dictionary size\r\n if(4 > pWork.dsize_bits || pWork.dsize_bits > 6) {\r\n return CMP_INVALID_DICTSIZE;\r\n }\r\n\r\n pWork.dsize_mask = 0xFFFF >> (0x10 - pWork.dsize_bits); // Shifted by 'sar' instruction\r\n\r\n if(pWork.ctype != CMP_BINARY) {\r\n if(pWork.ctype != CMP_ASCII) {\r\n return CMP_INVALID_MODE;\r\n }\r\n\r\n pWork.ChBitsAsc.set(ChBitsAsc);\r\n GenAscTabs(pWork);\r\n }\r\n\r\n pWork.LenBits.set(LenBits);\r\n GenDecodeTabs(pWork.LengthCodes, LenCode, pWork.LenBits, pWork.LenBits.length);\r\n pWork.ExLenBits.set(ExLenBits);\r\n pWork.LenBase.set(LenBase);\r\n pWork.DistBits.set(DistBits);\r\n GenDecodeTabs(pWork.DistPosCodes, DistCode, pWork.DistBits, pWork.DistBits.length);\r\n if(Expand(pWork) !== 0x306) {\r\n return CMP_NO_ERROR;\r\n }\r\n \r\n return CMP_ABORT;\r\n}\r\n\r\nexport default explode;\r\n","const W = new Uint32Array(80);\r\n\r\nconst SHA1CircularShift = (shift, value) => ((value << shift) | (value >> (32 - shift)));\r\n\r\nclass SHA1 {\r\n digest = new Uint32Array(5);\r\n count = 0;\r\n\r\n input8(u8) {\r\n const u32 = new Uint32Array(u8.buffer, u8.byteOffset, 16);\r\n this.input(u32);\r\n }\r\n input(u32) {\r\n this.count += u32.length * 32;\r\n for (let i = 0; i < 16; ++i) {\r\n W[i] = u32[i];\r\n }\r\n for (let i = 16; i < 80; ++i) {\r\n W[i] = W[i - 16] ^ W[i - 14] ^ W[i - 8] ^ W[i - 3];\r\n }\r\n let A = this.digest[0];\r\n let B = this.digest[1];\r\n let C = this.digest[2];\r\n let D = this.digest[3];\r\n let E = this.digest[4];\r\n\r\n for (let i = 0; i < 20; i++) {\r\n const temp = SHA1CircularShift(5, A) + ((B & C) | ((~B) & D)) + E + W[i] + 0x5A827999;\r\n E = D;\r\n D = C;\r\n C = SHA1CircularShift(30, B);\r\n B = A;\r\n A = temp | 0;\r\n }\r\n\r\n for (let i = 20; i < 40; i++) {\r\n const temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1;\r\n E = D;\r\n D = C;\r\n C = SHA1CircularShift(30, B);\r\n B = A;\r\n A = temp | 0;\r\n }\r\n\r\n for (let i = 40; i < 60; i++) {\r\n const temp = SHA1CircularShift(5, A) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC;\r\n E = D;\r\n D = C;\r\n C = SHA1CircularShift(30, B);\r\n B = A;\r\n A = temp | 0;\r\n }\r\n\r\n for (let i = 60; i < 80; i++) {\r\n const temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6;\r\n E = D;\r\n D = C;\r\n C = SHA1CircularShift(30, B);\r\n B = A;\r\n A = temp | 0;\r\n }\r\n\r\n this.digest[0] += A;\r\n this.digest[1] += B;\r\n this.digest[2] += C;\r\n this.digest[3] += D;\r\n this.digest[4] += E;\r\n }\r\n\r\n constructor() {\r\n\t this.digest[0] = 0x67452301;\r\n\t this.digest[1] = 0xEFCDAB89;\r\n\t this.digest[2] = 0x98BADCFE;\r\n\t this.digest[3] = 0x10325476;\r\n this.digest[4] = 0xC3D2E1F0;\r\n \r\n this.digest8 = new Uint8Array(this.digest.buffer);\r\n }\r\n}\r\n\r\nclass Random {\r\n constructor(seed) {\r\n this.seed = seed;\r\n }\r\n next() {\r\n this.seed = (((this.seed * 3) << 16) + ((this.seed * 67) << 8) + (this.seed * 253) + 2531011) | 0;\r\n return (this.seed >> 16) & 0x7FFF;\r\n }\r\n}\r\n\r\nfunction codec_init_key(password) {\r\n const rand = new Random(0x7058);\r\n const key = new Uint8Array(136);\r\n const k32 = new Uint32Array(key.buffer);\r\n for (let i = 0; i < 136; ++i) {\r\n key[i] = rand.next();\r\n }\r\n const pw = new Uint8Array(64);\r\n for (let i = 0; i < 64; ++i) {\r\n pw[i] = password.charCodeAt(i % password.length);\r\n }\r\n\r\n let sha = new SHA1();\r\n sha.input8(pw);\r\n\r\n for (let i = 0; i < 34; ++i) {\r\n k32[i] ^= sha.digest[i % sha.digest.length];\r\n }\r\n\r\n sha = new SHA1();\r\n sha.input(k32.subarray(18));\r\n return sha;\r\n}\r\n\r\nexport default function codec_decode(data, password) {\r\n if (data.length <= 8) {\r\n return;\r\n }\r\n const size = data.length - 8;\r\n if (size % 64) {\r\n return;\r\n }\r\n\r\n if (data[size + 4]) {\r\n return;\r\n }\r\n\r\n const last_size = data[size + 5];\r\n const result_size = size + last_size - 64;\r\n const result = new Uint8Array(result_size);\r\n\r\n const sha = codec_init_key(password);\r\n const size32 = size >> 2;\r\n const data32 = new Uint32Array(data.buffer, data.byteOffset, size32 + 1);\r\n const buf32 = new Uint32Array(16);\r\n const buf = new Uint8Array(buf32.buffer);\r\n\r\n for (let i = 0; i < size32; i += 16) {\r\n for (let j = 0; j < 16; ++j) {\r\n buf32[j] = data32[i + j] ^ sha.digest[j % sha.digest.length];\r\n }\r\n sha.input(buf32);\r\n result.set(i === size32 - 16 ? buf.subarray(0, last_size) : buf, i * 4);\r\n }\r\n if (data32[size32] !== sha.digest[0]) {\r\n return;\r\n }\r\n return result;\r\n}\r\n","import { explode } from './explode';\r\nimport codec_decode from './codec';\r\n\r\nfunction pkzip_decompress(data, out_size) {\r\n if (data.length === out_size) {\r\n return data;\r\n }\r\n\r\n const output = new Uint8Array(out_size);\r\n let in_pos = 0;\r\n let out_pos = 0;\r\n function read_buf(dst) {\r\n const count = Math.min(data.length - in_pos, dst.length);\r\n dst.set(data.subarray(in_pos, count));\r\n in_pos += count;\r\n return count;\r\n }\r\n function write_buf(src) {\r\n if (out_pos + src.length > out_size) {\r\n throw Error('decompress buffer overflow');\r\n }\r\n output.set(src, out_pos);\r\n out_pos += src.length;\r\n }\r\n\r\n if (explode(read_buf, write_buf) || out_pos !== out_size) {\r\n return null;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nconst hashtable = (function() {\r\n const hashtable = new Uint32Array(1280);\r\n let seed = 0x00100001;\r\n for (let i = 0; i < 256; i++) {\r\n for (let j = i; j < 1280; j += 256) {\r\n seed = (seed * 125 + 3) % 0x2AAAAB;\r\n const a = (seed & 0xFFFF) << 16;\r\n seed = (seed * 125 + 3) % 0x2AAAAB;\r\n const b = (seed & 0xFFFF);\r\n hashtable[j] = a | b;\r\n }\r\n }\r\n return hashtable;\r\n})();\r\nexport function decrypt(u32, key) {\r\n let seed = 0xEEEEEEEE;\r\n for (let i = 0; i < u32.length; ++i) {\r\n seed += hashtable[0x400 + (key & 0xFF)];\r\n u32[i] ^= seed + key;\r\n seed = (u32[i] + seed * 33 + 3) | 0;\r\n key = ((~key << 0x15) + 0x11111111) | (key >>> 0x0B);\r\n }\r\n}\r\nexport function decrypt8(u8, key) {\r\n decrypt(new Uint32Array(u8.buffer, u8.byteOffset, u8.length >> 2), key);\r\n}\r\nexport function encrypt(u32, key) {\r\n let seed = 0xEEEEEEEE;\r\n for (let i = 0; i < u32.length; ++i) {\r\n seed += hashtable[0x400 + (key & 0xFF)];\r\n const orig = u32[i];\r\n u32[i] ^= seed + key;\r\n seed = (orig + seed * 33 + 3) | 0;\r\n key = ((~key << 0x15) + 0x11111111) | (key >>> 0x0B);\r\n }\r\n}\r\nexport function encrypt8(u8, key) {\r\n encrypt(new Uint32Array(u8.buffer, u8.byteOffset, u8.length >> 2), key);\r\n}\r\nexport function hash(name, type) {\r\n let seed1 = 0x7FED7FED;\r\n let seed2 = 0xEEEEEEEE;\r\n for (let i = 0; i < name.length; ++i) {\r\n let ch = name.charCodeAt(i);\r\n if (ch >= 0x61 && ch <= 0x7A) {\r\n ch -= 0x20;\r\n }\r\n if (ch === 0x2F) {\r\n ch = 0x5C;\r\n }\r\n seed1 = hashtable[type * 256 + ch] ^ (seed1 + seed2);\r\n seed2 = (ch + seed1 + seed2 * 33 + 3) | 0;\r\n }\r\n return seed1 >>> 0;\r\n}\r\n\r\nexport function path_name(name) {\r\n const pos = Math.max(name.lastIndexOf('/'), name.lastIndexOf('\\\\'));\r\n return name.substring(pos + 1);\r\n}\r\n\r\nconst Flags = {\r\n CompressPkWare: 0x00000100,\r\n CompressMulti: 0x00000200,\r\n Compressed: 0x0000FF00,\r\n Encrypted: 0x00010000,\r\n FixSeed: 0x00020000,\r\n PatchFile: 0x00100000,\r\n SingleUnit: 0x01000000,\r\n DummyFile: 0x02000000,\r\n SectorCrc: 0x04000000,\r\n Exists: 0x80000000,\r\n};\r\n\r\nexport class MpqReader {\r\n constructor(buffer) {\r\n this.buffer = buffer;\r\n this.u8 = new Uint8Array(buffer);\r\n this.u32 = new Uint32Array(buffer, 0, buffer.byteLength >> 2);\r\n\r\n this.readHeader();\r\n }\r\n\r\n readHeader() {\r\n const {u8, u32} = this;\r\n if (u32[0] !== 0x1A51504D) {\r\n throw Error('invalid MPQ header');\r\n }\r\n const sizeId = u8[14] + (u8[15] << 8);\r\n const hashOffset = u32[4];\r\n const blockOffset = u32[5];\r\n const hashCount = u32[6];\r\n const blockCount = u32[7];\r\n this.hashTable = this.readTable(hashOffset, hashCount, \"(hash table)\");\r\n this.blockTable = this.readTable(blockOffset, blockCount, \"(block table)\");\r\n this.blockSize = 1 << (9 + sizeId);\r\n }\r\n\r\n readTable(offset, count, key) {\r\n const buffer = new Uint32Array(this.buffer.slice(offset, offset + count * 16));\r\n decrypt(buffer, hash(key, 3));\r\n return buffer;\r\n }\r\n\r\n fileIndex(name) {\r\n const {hashTable} = this;\r\n const length = hashTable.length >> 2;\r\n const index = hash(name, 0) % length;\r\n const keyA = hash(name, 1), keyB = hash(name, 2);\r\n for (let i = index, count = 0; hashTable[i * 4 + 3] !== 0xFFFFFFFF && count < length; i = (i + 1) % length, ++count) {\r\n if (hashTable[i * 4] === keyA && hashTable[i * 4 + 1] === keyB && hashTable[i * 4 + 3] !== 0xFFFFFFFE) {\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n readRaw(name) {\r\n const index = this.fileIndex(name);\r\n if (index == null) {\r\n return;\r\n }\r\n const block = this.hashTable[index * 4 + 3];\r\n const info = {\r\n filePos: this.blockTable[block * 4],\r\n cmpSize: this.blockTable[block * 4 + 1],\r\n fileSize: this.blockTable[block * 4 + 2],\r\n flags: this.blockTable[block * 4 + 3],\r\n key: hash(path_name(name), 3),\r\n };\r\n if ((info.flags & Flags.PatchFile) || info.filePos + info.cmpSize > this.buffer.byteLength) {\r\n return;\r\n }\r\n if (!(info.flags & Flags.Compressed)) {\r\n info.cmpSize = info.fileSize;\r\n }\r\n if (info.flags & Flags.FixSeed) {\r\n info.key = (info.key + info.filePos) ^ info.fileSize;\r\n }\r\n return {info, data: new Uint8Array(this.buffer, info.filePos, info.cmpSize)};\r\n }\r\n\r\n read(name) {\r\n const raw = this.readRaw(name);\r\n if (!raw) {\r\n return;\r\n }\r\n let {info, data} = raw;\r\n data = data.slice();\r\n\r\n if (info.flags & Flags.SingleUnit) {\r\n if (info.flags & Flags.Encrypted) {\r\n decrypt8(data, info.key);\r\n }\r\n if (info.flags & Flags.CompressMulti) {\r\n return;\r\n } else if (info.flags & Flags.CompressPkWare) {\r\n return pkzip_decompress(data, info.fileSize);\r\n }\r\n return data;\r\n } else if (!(info.flags & Flags.Compressed)) {\r\n if (info.flags & Flags.Encrypted) {\r\n for (let i = 0; i < info.fileSize; i += this.blockSize) {\r\n decrypt8(data.subarray(i, Math.min(info.fileSize, i + this.blockSize)), info.key + i / this.blockSize);\r\n }\r\n }\r\n return data;\r\n } else {\r\n const numBlocks = Math.floor((info.fileSize + this.blockSize - 1) / this.blockSize);\r\n const tableSize = numBlocks + 1;\r\n if (data.length < tableSize * 4) {\r\n return;\r\n }\r\n const blocks = new Uint32Array(data.buffer, 0, tableSize);\r\n if (info.flags & Flags.Encrypted) {\r\n decrypt(blocks, info.key - 1);\r\n }\r\n const output = new Uint8Array(info.fileSize);\r\n for (let i = 0; i < numBlocks; ++i) {\r\n const oPos = i * this.blockSize;\r\n const uSize = Math.min(this.blockSize, info.fileSize - oPos);\r\n if (blocks[i + 1] > data.length) {\r\n return;\r\n }\r\n let tmp = data.subarray(blocks[i], blocks[i + 1]);\r\n if (info.flags & Flags.Encrypted) {\r\n // this is not safe, but our files are small enough\r\n decrypt8(tmp, info.key + i);\r\n }\r\n if (info.flags & Flags.CompressMulti) {\r\n return;\r\n } else if (info.flags & Flags.CompressPkWare) {\r\n tmp = pkzip_decompress(tmp, uSize);\r\n }\r\n if (!tmp || tmp.length !== uSize) {\r\n return;\r\n }\r\n output.set(tmp, oPos);\r\n }\r\n return output;\r\n }\r\n }\r\n}\r\n\r\nfunction getPassword(name) {\r\n if (name.match(/spawn\\d+\\.sv/i)) {\r\n return 'lshbkfg1'; // single, spawn\r\n } else if (name.match(/share_\\d+\\.sv/i)) {\r\n return 'lshbkfg1'; // multi, spawn\r\n } else if (name.match(/multi_\\d+\\.sv/i)) {\r\n return 'szqnlsk1'; // multi, retail\r\n } else {\r\n return 'xrgyrkj1'; // single, retail\r\n }\r\n}\r\n\r\nexport default function getPlayerName(data, name) {\r\n try {\r\n const reader = new MpqReader(data);\r\n const hero = codec_decode(reader.read(\"hero\"), getPassword(name));\r\n const nameEnd = hero.indexOf(0, 16);\r\n const result = {};\r\n result.name = String.fromCharCode(...hero.subarray(16, nameEnd));\r\n result.cls = hero[48];\r\n result.level = hero[53];\r\n return result;\r\n } catch (e) {\r\n return null;\r\n }\r\n}\r\n","function no_sound() {\r\n return {\r\n create_sound: () => 0,\r\n duplicate_sound: () => 0,\r\n play_sound: () => undefined,\r\n set_volume: () => undefined,\r\n stop_sound: () => undefined,\r\n delete_sound: () => undefined,\r\n };\r\n}\r\n\r\nfunction decodeAudioData(context, buffer) {\r\n return new Promise((resolve, reject) => {\r\n context.decodeAudioData(buffer, resolve, reject);\r\n });\r\n}\r\n\r\nexport default function init_sound() {\r\n const AudioContext = window.AudioContext || window.webkitAudioContext;\r\n const StereoPannerNode = window.StereoPannerNode;\r\n if (!AudioContext) {\r\n return no_sound();\r\n }\r\n\r\n let context = null;\r\n try {\r\n context = new AudioContext();\r\n } catch (e) {\r\n }\r\n const sounds = new Map();\r\n\r\n return {\r\n create_sound_raw(id, data, length, channels, rate) {\r\n if (!context) {\r\n return;\r\n }\r\n const buffer = context.createBuffer(channels, length, rate);\r\n for (let i = 0; i < channels; ++i) {\r\n buffer.getChannelData(i).set(data.subarray(i * length, i * length + length));\r\n }\r\n sounds.set(id, {\r\n buffer: Promise.resolve(buffer),\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n create_sound(id, data) {\r\n if (!context) {\r\n return;\r\n }\r\n const buffer = decodeAudioData(context, data.buffer);\r\n sounds.set(id, {\r\n buffer,\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n duplicate_sound(id, srcId) {\r\n if (!context) {\r\n return;\r\n }\r\n const src = sounds.get(srcId);\r\n if (!src) {\r\n return;\r\n }\r\n sounds.set(id, {\r\n buffer: src.buffer,\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n play_sound(id, volume, pan, loop) {\r\n const src = sounds.get(id);\r\n if (src) {\r\n if (src.source) {\r\n src.source.then(source => source.stop());\r\n }\r\n src.gain.gain.value = Math.pow(2.0, volume / 1000.0);\r\n const relVolume = Math.pow(2.0, pan / 1000.0);\r\n if (src.panner) {\r\n src.panner.pan.value = 1.0 - 2.0 / (1.0 + relVolume);\r\n }\r\n src.source = src.buffer.then(buffer => {\r\n const source = context.createBufferSource();\r\n source.buffer = buffer;\r\n source.loop = !!loop;\r\n let node = source.connect(src.gain);\r\n if (src.panner) {\r\n node = node.connect(src.panner);\r\n }\r\n node.connect(context.destination);\r\n source.start();\r\n return source;\r\n });\r\n }\r\n },\r\n set_volume(id, volume) {\r\n const src = sounds.get(id);\r\n if (src) {\r\n src.gain.gain.value = Math.pow(2.0, volume / 1000.0);\r\n }\r\n },\r\n stop_sound(id) {\r\n const src = sounds.get(id);\r\n if (src && src.source) {\r\n src.source.then(source => source.stop());\r\n delete src.source;\r\n }\r\n },\r\n delete_sound(id) {\r\n const src = sounds.get(id);\r\n if (src && src.source) {\r\n src.source.then(source => source.stop());\r\n }\r\n sounds.delete(id);\r\n },\r\n\r\n stop_all() {\r\n for (let [, sound] of sounds) {\r\n if (sound.source) {\r\n sound.source.then(source => source.stop());\r\n }\r\n }\r\n sounds.clear();\r\n context = null;\r\n }\r\n };\r\n}\r\n","import axios from 'axios';\r\n\r\nconst SpawnSizes = [50274091, 25830791];\r\n\r\nexport { SpawnSizes };\r\n\r\nexport default async function load_spawn(api, fs) {\r\n let file = fs.files.get('spawn.mpq');\r\n if (file && !SpawnSizes.includes(file.byteLength)) {\r\n fs.files.delete('spawn.mpq');\r\n await fs.delete('spawn.mpq');\r\n file = null;\r\n }\r\n if (!file) {\r\n const spawn = await axios.request({\r\n url: process.env.PUBLIC_URL + '/spawn.mpq',\r\n responseType: 'arraybuffer',\r\n onDownloadProgress: e => {\r\n if (api.onProgress) {\r\n api.onProgress({text: 'Downloading...', loaded: e.loaded, total: e.total || SpawnSizes[1]});\r\n }\r\n },\r\n headers: {\r\n 'Cache-Control': 'max-age=31536000'\r\n }\r\n });\r\n if (!SpawnSizes.includes(spawn.data.byteLength)) {\r\n throw Error(\"Invalid spawn.mpq size. Try clearing cache and refreshing the page.\");\r\n }\r\n const data = new Uint8Array(spawn.data);\r\n fs.files.set('spawn.mpq', data);\r\n fs.update('spawn.mpq', data.slice());\r\n }\r\n return fs;\r\n}\r\n","export class buffer_reader {\r\n constructor(buffer) {\r\n this.buffer = (buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer));\r\n this.pos = 0;\r\n }\r\n done() {\r\n return this.pos === this.buffer.byteLength;\r\n }\r\n read8() {\r\n if (this.pos >= this.buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n return this.buffer[this.pos++];\r\n }\r\n read16() {\r\n const {pos, buffer} = this;\r\n if (pos + 2 > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = buffer[pos] | (buffer[pos + 1] << 8);\r\n this.pos += 2;\r\n return result;\r\n }\r\n read32() {\r\n const {pos, buffer} = this;\r\n if (pos + 4 > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = buffer[pos] | (buffer[pos + 1] << 8) | (buffer[pos + 2] << 16) | (buffer[pos + 3] << 24);\r\n this.pos += 4;\r\n return result;\r\n }\r\n read_str() {\r\n const length = this.read8();\r\n const {pos, buffer} = this;\r\n if (pos + length > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = String.fromCharCode(...buffer.subarray(pos, pos + length));\r\n this.pos += length;\r\n return result;\r\n }\r\n read_buf() {\r\n const size = this.read32();\r\n const result = this.buffer.subarray(this.pos, this.pos + size);\r\n this.pos += size;\r\n return result;\r\n }\r\n}\r\nexport class buffer_writer {\r\n constructor(length) {\r\n this.buffer = new Uint8Array(length);\r\n this.pos = 0;\r\n }\r\n get result() {\r\n return this.buffer.buffer;\r\n }\r\n write8(value) {\r\n this.buffer[this.pos++] = value;\r\n return this;\r\n }\r\n write16(value) {\r\n const {pos, buffer} = this;\r\n buffer[pos] = value;\r\n buffer[pos + 1] = value >> 8;\r\n this.pos += 2;\r\n return this;\r\n }\r\n write32(value) {\r\n const {pos, buffer} = this;\r\n buffer[pos] = value;\r\n buffer[pos + 1] = value >> 8;\r\n buffer[pos + 2] = value >> 16;\r\n buffer[pos + 3] = value >> 24;\r\n this.pos += 4;\r\n return this;\r\n }\r\n write_str(value) {\r\n const length = value.length;\r\n this.write8(length);\r\n const {pos, buffer} = this;\r\n for (let i = 0; i < length; ++i) {\r\n buffer[pos + i] = value.charCodeAt(i);\r\n }\r\n this.pos += length;\r\n return this;\r\n }\r\n rest(value) {\r\n this.buffer.set(value, this.pos);\r\n this.pos += value.byteLength;\r\n return this;\r\n }\r\n write_buf(value) {\r\n this.write32(value.byteLength);\r\n this.rest(value);\r\n return this;\r\n }\r\n}\r\n\r\nexport const RejectionReason = {\r\n JOIN_SUCCESS: 0x00,\r\n JOIN_ALREADY_IN_GAME: 0x01,\r\n JOIN_GAME_NOT_FOUND: 0x02,\r\n JOIN_INCORRECT_PASSWORD: 0x03,\r\n JOIN_VERSION_MISMATCH: 0x04,\r\n JOIN_GAME_FULL: 0x05,\r\n CREATE_GAME_EXISTS: 0x06,\r\n};\r\n\r\nexport function read_packet(reader, types) {\r\n const code = reader.read8();\r\n const cls = Object.values(types).find(cls => cls.code === code);\r\n if (!cls) {\r\n throw Error('invalid packet code');\r\n }\r\n return {type: cls, packet: cls.read(reader)};\r\n}\r\nexport function packet_size(type, packet) {\r\n return (typeof type.size === \"function\" ? type.size(packet) : type.size) + 1;\r\n}\r\nexport function write_packet(type, packet) {\r\n const size = packet_size(type, packet);\r\n return type.write(new buffer_writer(size).write8(type.code), packet).result;\r\n}\r\n\r\nexport function make_batch(types) {\r\n return {\r\n code: 0x00,\r\n read: reader => {\r\n const count = reader.read16();\r\n const packets = [];\r\n for (let i = 0; i < count; ++i) {\r\n packets.push(read_packet(reader, types()));\r\n }\r\n return packets;\r\n },\r\n size: packets => packets.reduce((sum, {type, packet}) => sum + packet_size(type, packet), 2),\r\n write: (writer, packets) => {\r\n writer.write16(packets.length);\r\n for (let {type, packet} of packets) {\r\n type.write(writer.write8(type.code), packet);\r\n }\r\n return writer;\r\n },\r\n };\r\n}\r\n\r\nexport const server_packet = {\r\n info: {\r\n code: 0x32,\r\n read: reader => ({version: reader.read32()}),\r\n size: 4,\r\n write: (writer, {version}) => writer.write32(version),\r\n },\r\n game_list: {\r\n code: 0x21,\r\n read: reader => {\r\n const count = reader.read16();\r\n const games = [];\r\n for (let i = 0; i < count; ++i) {\r\n games.push({type: reader.read32(), name: reader.read_str()});\r\n }\r\n return {games};\r\n },\r\n size: ({games}) => games.reduce((sum, {name}) => sum + 5 + name.length, 2),\r\n write: (writer, {games}) => {\r\n writer.write16(games.length);\r\n for (let {type, name} of games) {\r\n writer.write32(type);\r\n writer.write_str(name);\r\n }\r\n return writer;\r\n },\r\n },\r\n join_accept: {\r\n code: 0x12,\r\n read: reader => ({cookie: reader.read32(), index: reader.read8(), seed: reader.read32(), difficulty: reader.read32()}),\r\n size: 13,\r\n write: (writer, {cookie, index, seed, difficulty}) => writer.write32(cookie).write8(index).write32(seed).write32(difficulty),\r\n },\r\n join_reject: {\r\n code: 0x15,\r\n read: reader => ({cookie: reader.read32(), reason: reader.read8()}),\r\n size: 5,\r\n write: (writer, {cookie, reason}) => writer.write32(cookie).write8(reason),\r\n },\r\n connect: {\r\n code: 0x13,\r\n read: reader => ({id: reader.read8()}),\r\n size: 1,\r\n write: (writer, {id}) => writer.write8(id),\r\n },\r\n disconnect: {\r\n code: 0x14,\r\n read: reader => ({id: reader.read8(), reason: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, reason}) => writer.write8(id).write32(reason),\r\n },\r\n message: {\r\n code: 0x01,\r\n read: reader => ({id: reader.read8(), payload: reader.read_buf()}),\r\n size: ({payload}) => 5 + payload.byteLength,\r\n write: (writer, {id, payload}) => writer.write8(id).write_buf(payload),\r\n },\r\n turn: {\r\n code: 0x02,\r\n read: reader => ({id: reader.read8(), turn: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, turn}) => writer.write8(id).write32(turn),\r\n },\r\n batch: make_batch(() => server_packet),\r\n};\r\n\r\nexport const client_packet = {\r\n info: {\r\n code: 0x31,\r\n read: reader => ({version: reader.read32()}),\r\n size: 4,\r\n write: (writer, {version}) => writer.write32(version),\r\n },\r\n game_list: {\r\n code: 0x21,\r\n read: () => ({}),\r\n size: 0,\r\n write: writer => writer,\r\n },\r\n create_game: {\r\n code: 0x22,\r\n read: reader => ({cookie: reader.read32(), name: reader.read_str(), password: reader.read_str(), difficulty: reader.read32()}),\r\n size: ({name, password}) => 10 + name.length + password.length,\r\n write: (writer, {cookie, name, password, difficulty}) => writer.write32(cookie).write_str(name).write_str(password).write32(difficulty),\r\n },\r\n join_game: {\r\n code: 0x23,\r\n read: reader => ({cookie: reader.read32(), name: reader.read_str(), password: reader.read_str()}),\r\n size: ({name, password}) => 6 + name.length + password.length,\r\n write: (writer, {cookie, name, password}) => writer.write32(cookie).write_str(name).write_str(password),\r\n },\r\n leave_game: {\r\n code: 0x24,\r\n read: () => ({}),\r\n size: 0,\r\n write: writer => writer,\r\n },\r\n drop_player: {\r\n code: 0x03,\r\n read: reader => ({id: reader.read8(), reason: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, reason}) => writer.write8(id).write32(reason),\r\n },\r\n message: {\r\n code: 0x01,\r\n read: reader => ({id: reader.read8(), payload: reader.read_buf()}),\r\n size: ({payload}) => 5 + payload.byteLength,\r\n write: (writer, {id, payload}) => writer.write8(id).write_buf(payload),\r\n },\r\n turn: {\r\n code: 0x02,\r\n read: reader => ({turn: reader.read32()}),\r\n size: 4,\r\n write: (writer, {turn}) => writer.write32(turn),\r\n },\r\n batch: make_batch(() => server_packet),\r\n};\r\n","import Peer from 'peerjs';\r\nimport { buffer_reader, read_packet, write_packet, client_packet, server_packet, RejectionReason } from './packet';\r\n\r\n/*function log_packet(data, type) {\r\n const reader = new buffer_reader(data);\r\n const id = reader.read8();\r\n for (let [name, {code, read}] of Object.entries(type)) {\r\n if (code === id && (name !== 'message' && name !== 'turn')) {\r\n console.log(`${type === client_packet ? 'client_packet' : 'server_packet'}.${name} ${JSON.stringify(read(reader))}`);\r\n }\r\n }\r\n}*/\r\n\r\nconst PeerID = name => `diabloweb_dDv62yHQrZJP28tBEHL_${name}`;\r\nconst Options = {port: 443, secure: true};\r\nconst MAX_PLRS = 4;\r\n\r\nclass webrtc_server {\r\n constructor(version, {cookie, name, password, difficulty}, onMessage, onClose) {\r\n this.version = version;\r\n this.name = name;\r\n this.password = password;\r\n this.difficulty = difficulty;\r\n this.onMessage = onMessage;\r\n this.onClose = onClose;\r\n\r\n this.peer = new Peer(PeerID(name), Options);\r\n this.peer.on('connection', conn => this.onConnect(conn));\r\n this.players = [];\r\n this.myplr = 0;\r\n\r\n this.seed = Math.floor(Math.random() * Math.pow(2, 32));\r\n\r\n const onError = () => {\r\n onMessage(write_packet(server_packet.join_reject, {cookie, reason: RejectionReason.CREATE_GAME_EXISTS}));\r\n onClose();\r\n this.peer.off('error', onError);\r\n this.peer.off('open', onOpen);\r\n };\r\n const onOpen = () => {\r\n //console.log('peer open');\r\n setTimeout(() => {\r\n onMessage(write_packet(server_packet.join_accept, {cookie, index: 0, seed: this.seed, difficulty}));\r\n onMessage(write_packet(server_packet.connect, {id: 0}));\r\n }, 0);\r\n this.peer.off('error', onError);\r\n this.peer.off('open', onOpen);\r\n };\r\n this.peer.on('error', onError);\r\n this.peer.on('open', onOpen);\r\n\r\n //this.peer.on('error', err => console.log('peer error:', err));\r\n }\r\n\r\n onConnect(conn) {\r\n //conn.on('error', err => console.log('conn error:', err));\r\n //console.log('conn open');\r\n const peer = {conn};\r\n conn.on('data', packet => {\r\n const reader = new buffer_reader(packet);\r\n const {type, packet: pkt} = read_packet(reader, client_packet);\r\n switch (type.code) {\r\n case client_packet.info.code:\r\n peer.version = pkt.version;\r\n break;\r\n case client_packet.join_game.code:\r\n if (peer.version !== this.version) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_VERSION_MISMATCH}));\r\n } else if (pkt.name !== this.name) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_GAME_NOT_FOUND}));\r\n } else if (pkt.password !== this.password) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_INCORRECT_PASSWORD}));\r\n } else {\r\n let i = 1;\r\n while (i < MAX_PLRS && this.players[i]) {\r\n ++i;\r\n }\r\n if (i >= MAX_PLRS) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_GAME_FULL})); \r\n } else {\r\n this.players[i] = peer;\r\n peer.id = i;\r\n conn.send(write_packet(server_packet.join_accept, {cookie: pkt.cookie, index: i, seed: this.seed, difficulty: this.difficulty}));\r\n this.send(0xFF, write_packet(server_packet.connect, {id: i}));\r\n }\r\n }\r\n break;\r\n default:\r\n if (peer.id != null) {\r\n this.handle(peer.id, type.code, pkt);\r\n } else {\r\n return;\r\n }\r\n }\r\n if (!reader.done()) {\r\n throw Error('packet too large');\r\n }\r\n });\r\n conn.on('close', () => {\r\n //console.log('conn close');\r\n if (peer.id != null) {\r\n this.drop(peer.id, 0x40000006);\r\n }\r\n });\r\n }\r\n\r\n send(mask, pkt) {\r\n for (let i = 1; i < MAX_PLRS; ++i) {\r\n if ((mask & (1 << i)) && this.players[i]) {\r\n if (this.players[i].conn) {\r\n this.players[i].conn.send(pkt);\r\n }\r\n }\r\n }\r\n // self last since it will destroy the buffer\r\n if (mask & 1) {\r\n this.onMessage(pkt);\r\n }\r\n }\r\n\r\n drop(id, reason) {\r\n if (id === 0) {\r\n for (let i = 1; i < MAX_PLRS; ++i) {\r\n this.drop(i, 0x40000006);\r\n }\r\n this.onMessage(write_packet(server_packet.disconnect, {id, reason}));\r\n this.peer.destroy();\r\n this.onClose();\r\n } else if (this.players[id]) {\r\n this.send(0xFF, write_packet(server_packet.disconnect, {id, reason}));\r\n this.players[id].id = null;\r\n if (this.players[id].conn) {\r\n this.players[id].conn.close();\r\n }\r\n this.players[id] = null;\r\n }\r\n }\r\n\r\n handle(id, code, pkt) {\r\n switch (code) {\r\n case client_packet.leave_game.code:\r\n this.drop(id, 3);\r\n break;\r\n case client_packet.drop_player.code:\r\n this.drop(pkt.id, pkt.reason);\r\n break;\r\n case client_packet.message.code:\r\n this.send(pkt.id === 0xFF ? ~(1 << id) : (1 << pkt.id), write_packet(server_packet.message, {id, payload: pkt.payload}));\r\n break;\r\n case client_packet.turn.code:\r\n this.send(~(1 << id), write_packet(server_packet.turn, {id, turn: pkt.turn}));\r\n break;\r\n default:\r\n throw Error(`invalid packet ${code}`);\r\n }\r\n }\r\n}\r\n\r\nclass webrtc_client {\r\n pending = [];\r\n\r\n constructor(version, {cookie, name, password}, onMessage, onClose) {\r\n this.peer = new Peer(Options);\r\n this.conn = this.peer.connect(PeerID(name));\r\n\r\n let needUnreg = true;\r\n const unreg = () => {\r\n if (!needUnreg) {\r\n return;\r\n }\r\n needUnreg = false;\r\n this.peer.off('error', onError);\r\n this.conn.off('error', onError);\r\n this.conn.off('open', onOpen);\r\n clearTimeout(timeout);\r\n };\r\n const onError = () => {\r\n onMessage(write_packet(server_packet.join_reject, {cookie, reason: RejectionReason.JOIN_GAME_NOT_FOUND}));\r\n onClose();\r\n unreg();\r\n };\r\n const onOpen = () => {\r\n this.conn.send(write_packet(client_packet.info, {version}));\r\n this.conn.send(write_packet(client_packet.join_game, {cookie, name, password}));\r\n for (let pkt of this.pending) {\r\n this.conn.send(pkt);\r\n }\r\n this.pending = null;\r\n this.conn.off('open', onOpen);\r\n };\r\n const timeout = setTimeout(onError, 10000);\r\n this.peer.on('error', onError);\r\n this.conn.on('error', onError);\r\n this.conn.on('open', onOpen);\r\n\r\n //this.peer.on('error', err => console.log('peer error:', err));\r\n //this.conn.on('error', err => console.log('conn error:', err));\r\n\r\n this.conn.on('data', data => {\r\n unreg();\r\n const reader = new buffer_reader(data);\r\n const {type, packet: pkt} = read_packet(reader, server_packet);\r\n switch (type.code) {\r\n case server_packet.join_accept.code:\r\n this.myplr = pkt.index;\r\n break;\r\n case server_packet.join_reject.code:\r\n onClose();\r\n break;\r\n case server_packet.disconnect.code:\r\n if (pkt.id === 'myplr') {\r\n onClose();\r\n }\r\n break;\r\n default:\r\n }\r\n onMessage(data);\r\n });\r\n this.conn.on('close', data => {\r\n onClose();\r\n });\r\n }\r\n\r\n send(packet) {\r\n if (this.pending) {\r\n this.pending.push(packet);\r\n } else {\r\n this.conn.send(packet);\r\n }\r\n }\r\n}\r\n\r\nexport default function webrtc_open(onMessage) {\r\n let server = null, client = null;\r\n\r\n let version = 0;\r\n\r\n /*const prevMessage = onMessage;\r\n onMessage = data => {\r\n log_packet(data, server_packet);\r\n prevMessage(data);\r\n };*/\r\n\r\n return {\r\n send: function(packet) {\r\n //log_packet(packet, client_packet);\r\n const reader = new buffer_reader(packet);\r\n const {type, packet: pkt} = read_packet(reader, client_packet);\r\n switch (type.code) {\r\n case client_packet.info.code:\r\n version = pkt.version;\r\n break;\r\n case client_packet.create_game.code:\r\n if (server || client) {\r\n onMessage(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_ALREADY_IN_GAME}));\r\n } else {\r\n server = new webrtc_server(version, pkt, onMessage, () => server = null);\r\n }\r\n break;\r\n case client_packet.join_game.code:\r\n if (server || client) {\r\n onMessage(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_ALREADY_IN_GAME}));\r\n } else {\r\n client = new webrtc_client(version, pkt, onMessage, () => client = null);\r\n }\r\n break;\r\n default:\r\n if (server) {\r\n server.handle(0, type.code, pkt);\r\n if (type.code === client_packet.leave_game.code) {\r\n server = null;\r\n }\r\n } else if (client) {\r\n client.send(packet);\r\n if (type.code === client_packet.leave_game.code) {\r\n client = null;\r\n }\r\n return;\r\n } else if (type.code !== client_packet.leave_game.code) {\r\n throw Error(`invalid packet ${type.code}`);\r\n }\r\n }\r\n if (!reader.done()) {\r\n throw Error('packet too large');\r\n }\r\n },\r\n };\r\n}\r\n","import Worker from './game.worker.js';\r\nimport init_sound from './sound';\r\nimport load_spawn from './load_spawn';\r\nimport webrtc_open from './webrtc';\r\n\r\nfunction onRender(api, ctx, {bitmap, images, text, clip, belt}) {\r\n if (bitmap) {\r\n ctx.transferFromImageBitmap(bitmap);\r\n } else {\r\n for (let {x, y, w, h, data} of images) {\r\n const image = ctx.createImageData(w, h);\r\n image.data.set(data);\r\n ctx.putImageData(image, x, y);\r\n }\r\n if (text.length) {\r\n ctx.save();\r\n ctx.font = 'bold 13px Times New Roman';\r\n if (clip) {\r\n const {x0, y0, x1, y1} = clip;\r\n ctx.beginPath();\r\n ctx.rect(x0, y0, x1 - x0, y1 - y0);\r\n ctx.clip();\r\n }\r\n for (let {x, y, text: str, color} of text) {\r\n const r = ((color >> 16) & 0xFF);\r\n const g = ((color >> 8) & 0xFF);\r\n const b = (color & 0xFF);\r\n ctx.fillStyle = `rgb(${r}, ${g}, ${b})`;\r\n ctx.fillText(str, x, y + 22);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n\r\n api.updateBelt(belt);\r\n}\r\n\r\nfunction testOffscreen() {\r\n return false;\r\n // This works but I couldn't see any performance difference, and support for 2D canvas in workers is very poor.\r\n // In this mode, instead of sending a batch of areas to draw back to the main thread, the worker does all drawing on its own and sends a complete bitmap object back.\r\n // However, this effectively clears the worker's canvas, so we need to redraw the whole frame every time, which defeats the performance gained from reduced copying.\r\n /*try {\r\n const canvas = document.createElement(\"canvas\");\r\n const offscreen = canvas.transferControlToOffscreen();\r\n const context = offscreen.getContext(\"2d\");\r\n return context != null;\r\n } catch (e) {\r\n return false;\r\n }*/\r\n}\r\n\r\nasync function do_load_game(api, audio, mpq, spawn) {\r\n const fs = await api.fs;\r\n if (spawn && !mpq) {\r\n await load_spawn(api, fs);\r\n }\r\n\r\n let context = null, offscreen = false;\r\n if (testOffscreen()) {\r\n context = api.canvas.getContext(\"bitmaprenderer\");\r\n offscreen = true;\r\n } else {\r\n context = api.canvas.getContext(\"2d\", {alpha: false});\r\n }\r\n return await new Promise((resolve, reject) => {\r\n try {\r\n const worker = new Worker();\r\n\r\n let packetQueue = [];\r\n const webrtc = webrtc_open(data => {\r\n packetQueue.push(data);\r\n });\r\n\r\n worker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"loaded\":\r\n resolve((func, ...params) => worker.postMessage({action: \"event\", func, params}));\r\n break;\r\n case \"render\":\r\n onRender(api, context, data.batch);\r\n break;\r\n case \"audio\":\r\n audio[data.func](...data.params);\r\n break;\r\n case \"audioBatch\":\r\n for (let {func, params} of data.batch) {\r\n audio[func](...params);\r\n }\r\n break;\r\n case \"fs\":\r\n fs[data.func](...data.params);\r\n break;\r\n case \"cursor\":\r\n api.setCursorPos(data.x, data.y);\r\n break;\r\n case \"keyboard\":\r\n api.openKeyboard(data.rect);\r\n break;\r\n case \"error\":\r\n audio.stop_all();\r\n api.onError(data.error, data.stack);\r\n break;\r\n case \"failed\":\r\n reject({message: data.error, stack: data.stack});\r\n break;\r\n case \"progress\":\r\n api.onProgress({text: data.text, loaded: data.loaded, total: data.total});\r\n break;\r\n case \"exit\":\r\n api.onExit();\r\n break;\r\n case \"current_save\":\r\n api.setCurrentSave(data.name);\r\n break;\r\n case \"packet\":\r\n webrtc.send(data.buffer);\r\n break;\r\n case \"packetBatch\":\r\n for (let packet of data.batch) {\r\n webrtc.send(packet);\r\n }\r\n break;\r\n default:\r\n }\r\n }); \r\n const transfer= [];\r\n for (let [, file] of fs.files) {\r\n transfer.push(file.buffer);\r\n }\r\n worker.postMessage({action: \"init\", files: fs.files, mpq, spawn, offscreen}, transfer);\r\n setInterval(() => {\r\n if (packetQueue.length) {\r\n worker.postMessage({action: \"packetBatch\", batch: packetQueue}, packetQueue);\r\n packetQueue.length = 0;\r\n }\r\n }, 20);\r\n delete fs.files;\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n}\r\n\r\nexport default function load_game(api, mpq, spawn) {\r\n const audio = init_sound();\r\n return do_load_game(api, audio, mpq, spawn);\r\n}\r\n","import Worker from './mpqcmp.worker.js';\r\nimport MpqBinary from './MpqCmp.wasm';\r\nimport ListFile from './ListFile.txt';\r\nimport axios from 'axios';\r\n\r\nimport { decrypt, encrypt, hash, path_name } from '../api/savefile';\r\n\r\nconst MpqSize = 156977;\r\nconst ListSize = 75542;\r\n\r\nconst readFile = (file, progress) => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n if (progress) {\r\n progress({loaded: file.size});\r\n }\r\n resolve(reader.result);\r\n };\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n if (progress) {\r\n reader.addEventListener(\"progress\", progress);\r\n }\r\n reader.readAsArrayBuffer(file);\r\n});\r\n\r\nasync function loadFile(url, progress, responseType='arraybuffer') {\r\n const binary = await axios.request({\r\n url,\r\n responseType,\r\n onDownloadProgress: progress,\r\n });\r\n return binary.data;\r\n}\r\n\r\nfunction runWorker(data, transfer, progress) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const worker = new Worker();\r\n worker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"result\":\r\n resolve({buffer: data.buffer, blocks: data.blocks});\r\n break;\r\n case \"error\":\r\n reject({message: data.error, stack: data.stack});\r\n break;\r\n case \"progress\":\r\n progress(data.value);\r\n break;\r\n default:\r\n }\r\n });\r\n worker.postMessage({action: \"run\", ...data}, transfer);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n}\r\n\r\nexport default async function compress(mpq, progress) {\r\n progress(\"Loading...\");\r\n const files = [];\r\n function updateProgress() {\r\n progress(\"Loading...\", files.reduce((sum, {loaded, weight}) => sum + loaded * weight, 0),\r\n files.reduce((sum, {total, weight}) => sum + total * weight, 0));\r\n }\r\n const loader = file => e => { file.loaded = e.loaded; updateProgress(); };\r\n\r\n const mpqsize = mpq.size;\r\n\r\n const fHeader = {loaded: 0, weight: 1, total: mpqsize};\r\n fHeader.ready = readFile(mpq.slice(0, 32), loader(fHeader));\r\n files.push(fHeader);\r\n\r\n const fBinary = {loaded: 0, weight: 5, total: MpqSize};\r\n fBinary.ready = loadFile(MpqBinary, loader(fBinary));\r\n files.push(fBinary);\r\n\r\n const fList = {loaded: 0, weight: 5, total: ListSize};\r\n fList.ready = loadFile(ListFile, loader(fList), 'text');\r\n files.push(fList);\r\n\r\n const header = new Uint32Array(await fHeader.ready);\r\n const header16 = new Uint16Array(header.buffer);\r\n\r\n if (header[0] !== 0x1A51504D) {\r\n throw Error('invalid MPQ file');\r\n }\r\n\r\n const blockSize = 1 << (9 + header16[7]);\r\n const hashTablePos = header[4];\r\n const blockTablePos = header[5];\r\n const hashTableSize = header[6];\r\n const blockTableSize = header[7];\r\n if (hashTablePos + hashTableSize * 16 > mpqsize || blockTablePos + blockTableSize * 16 > mpqsize) {\r\n throw Error('invalid MPQ file');\r\n }\r\n\r\n const fHashTable = {loaded: 0, weight: 1, total: hashTableSize * 16};\r\n const fBlockTable = {loaded: 0, weight: 1, total: blockTableSize * 16};\r\n fHeader.total -= fHashTable.total + fBlockTable.total;\r\n fHashTable.ready = readFile(mpq.slice(hashTablePos, hashTablePos + fHashTable.total), loader(fHashTable));\r\n fBlockTable.ready = readFile(mpq.slice(blockTablePos, blockTablePos + fBlockTable.total), loader(fBlockTable));\r\n files.push(fHashTable, fBlockTable);\r\n\r\n const hashTable = new Uint32Array(await fHashTable.ready);\r\n const blockTable = new Uint32Array(await fBlockTable.ready);\r\n decrypt(hashTable, hash(\"(hash table)\", 3));\r\n decrypt(blockTable, hash(\"(block table)\", 3));\r\n\r\n const list = (await fList.ready).split(\"\\n\").map(name => name.trim()).filter(name => name.length);\r\n const listMap = {};\r\n const hashStr = (h1, h2) => h1.toString(16).padStart(8, '0') + h2.toString(16).padStart(8, '0');\r\n for (let name of list) {\r\n listMap[hashStr(hash(name, 1), hash(name, 2))] = name;\r\n }\r\n\r\n const NUM_TASKS = 4;\r\n const tasks = [];\r\n for (let i = 0; i < NUM_TASKS; ++i) {\r\n tasks.push({\r\n entries: [],\r\n min: mpqsize,\r\n max: 0,\r\n progress: 0,\r\n });\r\n }\r\n \r\n for (let i = 0; i < hashTable.length / 4; ++i) {\r\n const index = hashTable[i * 4 + 3];\r\n if (index === 0xFFFFFFFF || index === 0xFFFFFFFE) {\r\n continue;\r\n }\r\n const name = listMap[hashStr(hashTable[i * 4], hashTable[i * 4 + 1])];\r\n if (!name) {\r\n hashTable[i * 4 + 3] = 0xFFFFFFFE;\r\n continue;\r\n }\r\n\r\n const filePos = blockTable[index * 4];\r\n const cSize = blockTable[index * 4 + 1];\r\n\r\n const task = tasks[Math.floor(filePos * NUM_TASKS / mpqsize)];\r\n task.entries.push(i);\r\n task.min = Math.min(task.min, filePos);\r\n task.max = Math.max(task.max, filePos + cSize);\r\n }\r\n\r\n const numFiles = tasks.reduce((sum, task) => sum + task.entries.length, 0);\r\n\r\n fHeader.total = 32;\r\n for (let task of tasks) {\r\n if (task.min < task.max) {\r\n const fLoad = {loaded: 0, weight: 1, total: task.max - task.min};\r\n task.ready = readFile(mpq.slice(task.min, task.max), loader(fLoad)).then(data => task.data = data);\r\n files.push(fLoad);\r\n }\r\n }\r\n\r\n await Promise.all(tasks.map(t => t.ready).filter(Boolean));\r\n const binary = await fBinary.ready;\r\n\r\n progress(\"Processing...\");\r\n\r\n for (let task of tasks) {\r\n if (task.data) {\r\n const input = new Uint32Array(task.entries.length * 6);\r\n task.entries.forEach((i, pos) => {\r\n const index = hashTable[i * 4 + 3];\r\n const name = listMap[hashStr(hashTable[i * 4], hashTable[i * 4 + 1])];\r\n input[pos * 6] = blockTable[index * 4];\r\n input[pos * 6 + 1] = blockTable[index * 4 + 1];\r\n input[pos * 6 + 2] = blockTable[index * 4 + 2];\r\n input[pos * 6 + 3] = blockTable[index * 4 + 3];\r\n input[pos * 6 + 4] = hash(path_name(name), 3);\r\n input[pos * 6 + 5] = name.match(/\\.wav$/i) ? 1 : 0;\r\n });\r\n task.run = runWorker({binary, mpq: task.data, input, offset: task.min, blockSize}, [task.data, input.buffer], value => {\r\n task.progress = value;\r\n const sum = tasks.reduce((sum, task) => sum + task.progress, 0);\r\n progress(\"Processing...\", sum, numFiles);\r\n }).then(res => task.result = res);\r\n }\r\n }\r\n\r\n await Promise.all(tasks.map(t => t.run).filter(Boolean));\r\n\r\n let outputPos = 32 + fHashTable.total + fBlockTable.total;\r\n const outputSize = tasks.reduce((sum, {result}) => sum + (result ? result.buffer.byteLength : 0), outputPos);\r\n const output = [header.buffer, hashTable.buffer, blockTable.buffer];\r\n\r\n blockTable.fill(0);\r\n let blockPos = 0;\r\n for (let task of tasks) {\r\n if (task.result) {\r\n const {buffer, blocks} = task.result;\r\n for (let pos = 0; pos < task.entries.length; ++pos) {\r\n const i = task.entries[pos];\r\n hashTable[i * 4 + 3] = blockPos + pos;\r\n blocks[pos * 4] += outputPos;\r\n }\r\n blockTable.set(blocks, blockPos * 4);\r\n blockPos += task.entries.length;\r\n output.push(buffer);\r\n outputPos += buffer.byteLength;\r\n }\r\n }\r\n\r\n header[1] = 32;\r\n header[2] = outputSize;\r\n header16[6] = 1;\r\n header16[7] = 7;\r\n header[4] = 32;\r\n header[5] = 32 + hashTable.length * 4;\r\n header[6] = hashTable.length / 4;\r\n header[7] = blockTable.length / 4;\r\n\r\n encrypt(hashTable, hash(\"(hash table)\", 3));\r\n encrypt(blockTable, hash(\"(block table)\", 3));\r\n\r\n return new Blob(output, {type: 'binary/octet-stream'});\r\n}\r\n","import React from 'react';\r\nimport compress from './compress';\r\n\r\nexport default class CompressMpq extends React.Component {\r\n state = {};\r\n\r\n parseFile = e => {\r\n const files = e.target.files;\r\n if (files.length > 0) {\r\n this.start(files[0]);\r\n }\r\n }\r\n\r\n onProgress(progress) {\r\n this.setState({progress});\r\n }\r\n onDone = blob => {\r\n //const blob = new Blob([result], {type: 'binary/octet-stream'});\r\n const url = URL.createObjectURL(blob);\r\n this.setState({url});\r\n\r\n const lnk = document.createElement('a');\r\n lnk.setAttribute('href', url);\r\n lnk.setAttribute('download', 'DIABDAT.MPQ');\r\n document.body.appendChild(lnk);\r\n lnk.click();\r\n document.body.removeChild(lnk);\r\n }\r\n onError(message, stack) {\r\n const { api } = this.props;\r\n api.setState({compress: false});\r\n api.onError(message, stack);\r\n }\r\n\r\n onClose = () => {\r\n if (this.state.url) {\r\n URL.revokeObjectURL(this.state.url);\r\n }\r\n this.props.api.setState({compress: false});\r\n }\r\n\r\n start(file) {\r\n this.setState({started: true});\r\n compress(file, (text, loaded, total) => this.onProgress({text, loaded, total}))\r\n .then(this.onDone, e => this.onError(e.message, e.stack));\r\n }\r\n\r\n render() {\r\n const { url, started, progress } = this.state;\r\n if (url) {\r\n return (\r\n
\r\n

\r\n Click here if download doesn't start.\r\n

\r\n
Back
\r\n
\r\n );\r\n }\r\n if (started) {\r\n return (\r\n
\r\n {(progress && progress.text) || 'Processing...'}\r\n {progress != null && !!progress.total && (\r\n \r\n )}\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n

\r\n You can use this tool to reduce the original MPQ to about half its size. It encodes sounds in MP3 format and uses better compression for regular files.\r\n To begin, click the button below or drop the MPQ onto the page.\r\n

\r\n
\r\n \r\n \r\n
\r\n
Back
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport './App.scss';\r\nimport classNames from 'classnames';\r\nimport ReactGA from 'react-ga';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTimes, faDownload } from '@fortawesome/free-solid-svg-icons';\r\nimport getPlayerName from './api/savefile';\r\n\r\nimport { mapStackTrace } from 'sourcemapped-stacktrace';\r\n\r\nimport create_fs from './fs';\r\nimport load_game from './api/loader';\r\nimport { SpawnSizes } from './api/load_spawn';\r\nimport CompressMpq from './mpqcmp';\r\n\r\nimport Peer from 'peerjs';\r\n\r\nwindow.Peer = Peer;\r\n\r\nif (process.env.NODE_ENV === 'production') {\r\n ReactGA.initialize('UA-43123589-6');\r\n ReactGA.pageview('/');\r\n}\r\n\r\nfunction reportLink(e, retail) {\r\n const message = (e.message || \"Unknown error\") + (e.stack ? \"\\n\" + e.stack : \"\");\r\n const url = new URL(\"https://github.com/d07RiV/diabloweb/issues/new\");\r\n url.searchParams.set(\"body\",\r\n`**Description:**\r\n[Please describe what you were doing before the error occurred]\r\n\r\n**App version:**\r\nDiabloWeb ${process.env.VERSION} (${retail ? 'Retail' : 'Shareware'})\r\n\r\n**Error message:**\r\n \r\n${message.split(\"\\n\").map(line => \" \" + line).join(\"\\n\")}\r\n\r\n**User agent:**\r\n\r\n ${navigator.userAgent}\r\n\r\n**Save file:**\r\n[Please attach the save file, if applicable. The error box should have a link to download the current save you were playing; alternatively, you can open dev console on the game page (F12) and type in ${\"`DownloadSaves()`\"}]\r\n`);\r\n return url.toString();\r\n}\r\n\r\nfunction isDropFile(e) {\r\n if (e.dataTransfer.items) {\r\n for (let i = 0; i < e.dataTransfer.items.length; ++i) {\r\n if (e.dataTransfer.items[i].kind === \"file\") {\r\n return true;\r\n }\r\n }\r\n } if (e.dataTransfer.files.length) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction getDropFile(e) {\r\n if (e.dataTransfer.items) {\r\n for (let i = 0; i < e.dataTransfer.items.length; ++i) {\r\n if (e.dataTransfer.items[i].kind === \"file\") {\r\n return e.dataTransfer.items[i].getAsFile();\r\n }\r\n }\r\n } if (e.dataTransfer.files.length) {\r\n return e.dataTransfer.files[0];\r\n }\r\n}\r\n\r\nconst TOUCH_MOVE = 0;\r\nconst TOUCH_RMB = 1;\r\nconst TOUCH_SHIFT = 2;\r\n\r\nfunction findKeyboardRule() {\r\n for (let sheet of document.styleSheets) {\r\n for (let rule of sheet.cssRules) {\r\n if (rule.type === CSSRule.MEDIA_RULE && rule.conditionText === '(min-aspect-ratio: 3/1)') {\r\n for (let sub of rule.cssRules) {\r\n if (sub.selectorText === '.App.keyboard .Body .inner') {\r\n return sub;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\nlet keyboardRule = null;\r\ntry {\r\n keyboardRule = findKeyboardRule();\r\n} catch (e) {\r\n}\r\n\r\nconst Link = ({children, ...props}) => {children};\r\n\r\nclass App extends React.Component {\r\n files = new Map();\r\n state = {started: false, loading: false, dropping: 0, has_spawn: false};\r\n cursorPos = {x: 0, y: 0};\r\n\r\n touchControls = false;\r\n touchButtons = [null, null, null, null, null, null];\r\n touchCtx = [null, null, null, null, null, null];\r\n touchMods = [false, false, false, false, false, false];\r\n touchBelt = [-1, -1, -1, -1, -1, -1];\r\n maxKeyboard = 0;\r\n\r\n fs = create_fs(true);\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.setTouch0 = this.setTouch_.bind(this, 0);\r\n this.setTouch1 = this.setTouch_.bind(this, 1);\r\n this.setTouch2 = this.setTouch_.bind(this, 2);\r\n this.setTouch3 = this.setTouchBelt_.bind(this, 3);\r\n this.setTouch4 = this.setTouchBelt_.bind(this, 4);\r\n this.setTouch5 = this.setTouchBelt_.bind(this, 5);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"drop\", this.onDrop, true);\r\n document.addEventListener(\"dragover\", this.onDragOver, true);\r\n document.addEventListener(\"dragenter\", this.onDragEnter, true);\r\n document.addEventListener(\"dragleave\", this.onDragLeave, true);\r\n\r\n this.fs.then(fs => {\r\n const spawn = fs.files.get('spawn.mpq');\r\n if (spawn && SpawnSizes.includes(spawn.byteLength)) {\r\n this.setState({has_spawn: true});\r\n }\r\n if ([...fs.files.keys()].filter(name => name.match(/\\.sv$/i)).length) {\r\n this.setState({save_names: true});\r\n }\r\n });\r\n }\r\n\r\n onDrop = e => {\r\n const file = getDropFile(e);\r\n if (file) {\r\n e.preventDefault();\r\n if (this.compressMpq) {\r\n this.compressMpq.start(file);\r\n } else {\r\n this.start(file);\r\n }\r\n }\r\n this.setState({dropping: 0});\r\n }\r\n onDragEnter = e => {\r\n e.preventDefault();\r\n this.setDropping(1);\r\n }\r\n onDragOver = e => {\r\n if (isDropFile(e)) {\r\n e.preventDefault();\r\n }\r\n }\r\n onDragLeave = e => {\r\n this.setDropping(-1);\r\n }\r\n setDropping(inc) {\r\n this.setState(({dropping}) => ({dropping: Math.max(dropping + inc, 0)}));\r\n }\r\n\r\n onError(message, stack) {\r\n (async () => {\r\n const errorObject = {message};\r\n if (this.saveName) {\r\n errorObject.save = await (await this.fs).fileUrl(this.saveName);\r\n }\r\n if (stack) {\r\n mapStackTrace(stack, stack => {\r\n this.setState(({error}) => !error && {error: {...errorObject, stack: stack.join(\"\\n\")}});\r\n });\r\n } else {\r\n this.setState(({error}) => !error && {error: errorObject});\r\n }\r\n })();\r\n }\r\n\r\n openKeyboard(rect) {\r\n if (rect) {\r\n this.showKeyboard = {\r\n left: `${(100 * (rect[0] - 10) / 640).toFixed(2)}%`,\r\n top: `${(100 * (rect[1] - 10) / 480).toFixed(2)}%`,\r\n width: `${(100 * (rect[2] - rect[0] + 20) / 640).toFixed(2)}%`,\r\n height: `${(100 * (rect[3] - rect[1] + 20) / 640).toFixed(2)}%`,\r\n };\r\n this.maxKeyboard = rect[4];\r\n this.element.classList.add(\"keyboard\");\r\n Object.assign(this.keyboard.style, this.showKeyboard);\r\n this.keyboard.focus();\r\n if (keyboardRule) {\r\n keyboardRule.style.transform = `translate(-50%, ${(-(rect[1] + rect[3]) * 56.25 / 960).toFixed(2)}vw)`;\r\n }\r\n } else {\r\n this.showKeyboard = false;\r\n this.element.classList.remove(\"keyboard\");\r\n this.keyboard.blur();\r\n this.keyboard.value = \"\";\r\n this.keyboardNum = 0;\r\n }\r\n }\r\n\r\n setCursorPos(x, y) {\r\n const rect = this.canvas.getBoundingClientRect();\r\n this.cursorPos = {\r\n x: rect.left + (rect.right - rect.left) * x / 640,\r\n y: rect.top + (rect.bottom - rect.top) * y / 480,\r\n };\r\n setTimeout(() => {\r\n this.game(\"DApi_Mouse\", 0, 0, 0, x, y);\r\n });\r\n }\r\n\r\n onProgress(progress) {\r\n this.setState({progress});\r\n }\r\n\r\n onExit() {\r\n if (!this.state.error) {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n setCurrentSave(name) {\r\n this.saveName = name;\r\n }\r\n\r\n showSaves = () => {\r\n if (this.state.save_names === true) {\r\n this.updateSaves().then(() => this.setState({show_saves: !this.state.show_saves}));\r\n } else {\r\n this.setState({show_saves: !this.state.show_saves});\r\n }\r\n }\r\n updateSaves() {\r\n return this.fs.then(fs => {\r\n const saves = {};\r\n [...fs.files.keys()].filter(name => name.match(/\\.sv$/i)).forEach(name => {\r\n saves[name] = getPlayerName(fs.files.get(name).buffer, name);\r\n });\r\n this.setState({save_names: saves});\r\n });\r\n }\r\n removeSave(name) {\r\n if (window.confirm(`Are you sure you want to delete ${name}?`)) {\r\n (async () => {\r\n const fs = await this.fs;\r\n await fs.delete(name.toLowerCase());\r\n fs.files.delete(name.toLowerCase());\r\n this.updateSaves();\r\n })();\r\n }\r\n }\r\n downloadSave(name) {\r\n this.fs.then(fs => fs.download(name));\r\n }\r\n\r\n drawBelt(idx, slot) {\r\n if (!this.canvas) return;\r\n if (!this.touchButtons[idx]) {\r\n return;\r\n }\r\n this.touchBelt[idx] = slot;\r\n if (slot >= 0) {\r\n this.touchButtons[idx].style.display = \"block\";\r\n this.touchCtx[idx].drawImage(this.canvas, 205 + 29 * slot, 357, 28, 28, 0, 0, 28, 28);\r\n } else {\r\n this.touchButtons[idx].style.display = \"none\";\r\n }\r\n }\r\n\r\n updateBelt(belt) {\r\n if (belt) {\r\n const used = new Set();\r\n let pos = 3;\r\n for (let i = 0; i < belt.length && pos < 6; ++i) {\r\n if (belt[i] >= 0 && !used.has(belt[i])) {\r\n this.drawBelt(pos++, i);\r\n used.add(belt[i]);\r\n }\r\n }\r\n for (; pos < 6; ++pos) {\r\n this.drawBelt(pos, -1);\r\n }\r\n } else {\r\n this.drawBelt(3, -1);\r\n this.drawBelt(4, -1);\r\n this.drawBelt(5, -1);\r\n }\r\n }\r\n\r\n start(file) {\r\n if (file && file.name.match(/\\.sv$/i)) {\r\n this.fs.then(fs => fs.upload(file)).then(() => {\r\n this.updateSaves();\r\n });\r\n return;\r\n }\r\n if (this.state.show_saves) {\r\n return;\r\n }\r\n if (file && !file.name.match(/\\.mpq$/i)) {\r\n window.alert('Please select an MPQ file. If you downloaded the installer from GoG, you will need to install it on PC and use the MPQ file from the installation folder.');\r\n return;\r\n }\r\n\r\n document.removeEventListener(\"drop\", this.onDrop, true);\r\n document.removeEventListener(\"dragover\", this.onDragOver, true);\r\n document.removeEventListener(\"dragenter\", this.onDragEnter, true);\r\n document.removeEventListener(\"dragleave\", this.onDragLeave, true);\r\n this.setState({dropping: 0});\r\n\r\n const retail = !!(file && !file.name.match(/^spawn\\.mpq$/i));\r\n if (process.env.NODE_ENV === 'production') {\r\n ReactGA.event({\r\n category: 'Game',\r\n action: retail ? 'Start Retail' : 'Start Shareware',\r\n });\r\n }\r\n\r\n this.setState({loading: true, retail});\r\n\r\n load_game(this, file, !retail).then(game => {\r\n this.game = game;\r\n\r\n document.addEventListener('mousemove', this.onMouseMove, true);\r\n document.addEventListener('mousedown', this.onMouseDown, true);\r\n document.addEventListener('mouseup', this.onMouseUp, true);\r\n document.addEventListener('keydown', this.onKeyDown, true);\r\n document.addEventListener('keyup', this.onKeyUp, true);\r\n document.addEventListener('contextmenu', this.onMenu, true);\r\n\r\n document.addEventListener('touchstart', this.onTouchStart, {passive: false, capture: true});\r\n document.addEventListener('touchmove', this.onTouchMove, {passive: false, capture: true});\r\n document.addEventListener('touchend', this.onTouchEnd, {passive: false, capture: true});\r\n\r\n document.addEventListener('pointerlockchange', this.onPointerLockChange);\r\n window.addEventListener('resize', this.onResize);\r\n\r\n this.setState({started: true});\r\n }, e => this.onError(e.message, e.stack));\r\n }\r\n\r\n pointerLocked() {\r\n return document.pointerLockElement === this.canvas || document.mozPointerLockElement === this.canvas;\r\n }\r\n\r\n mousePos(e) {\r\n const rect = this.canvas.getBoundingClientRect();\r\n if (this.pointerLocked()) {\r\n this.cursorPos.x = Math.max(rect.left, Math.min(rect.right, this.cursorPos.x + e.movementX));\r\n this.cursorPos.y = Math.max(rect.top, Math.min(rect.bottom, this.cursorPos.y + e.movementY));\r\n } else {\r\n this.cursorPos = {x: e.clientX, y: e.clientY};\r\n }\r\n return {\r\n x: Math.max(0, Math.min(Math.round((this.cursorPos.x - rect.left) / (rect.right - rect.left) * 640), 639)),\r\n y: Math.max(0, Math.min(Math.round((this.cursorPos.y - rect.top) / (rect.bottom - rect.top) * 480), 479)),\r\n };\r\n }\r\n\r\n mouseButton(e) {\r\n switch (e.button) {\r\n case 0: return 1;\r\n case 1: return 4;\r\n case 2: return 2;\r\n case 3: return 5;\r\n case 4: return 6;\r\n default: return 1;\r\n }\r\n }\r\n eventMods(e) {\r\n return ((e.shiftKey || this.touchMods[TOUCH_SHIFT]) ? 1 : 0) + (e.ctrlKey ? 2 : 0) + (e.altKey ? 4 : 0) + (e.touches ? 8 : 0);\r\n }\r\n\r\n onResize = () => {\r\n document.exitPointerLock();\r\n }\r\n\r\n onPointerLockChange = () => {\r\n if (window.screen && window.innerHeight === window.screen.height && !this.pointerLocked()) {\r\n // assume that the user pressed escape\r\n this.game(\"DApi_Key\", 0, 0, 27);\r\n this.game(\"DApi_Key\", 1, 0, 27);\r\n }\r\n }\r\n\r\n onMouseMove = e => {\r\n if (!this.canvas) return;\r\n const {x, y} = this.mousePos(e);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n e.preventDefault();\r\n }\r\n\r\n onMouseDown = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n }\r\n if (this.touchControls) {\r\n this.touchControls = false;\r\n this.element.classList.remove(\"touch\");\r\n }\r\n const {x, y} = this.mousePos(e);\r\n if (window.screen && window.innerHeight === window.screen.height) {\r\n // we're in fullscreen, let's get pointer lock!\r\n if (!this.pointerLocked()) {\r\n this.canvas.requestPointerLock();\r\n }\r\n }\r\n this.game(\"DApi_Mouse\", 1, this.mouseButton(e), this.eventMods(e), x, y);\r\n e.preventDefault();\r\n }\r\n\r\n onMouseUp = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n //return;\r\n }\r\n const {x, y} = this.mousePos(e);\r\n this.game(\"DApi_Mouse\", 2, this.mouseButton(e), this.eventMods(e), x, y);\r\n if (e.target !== this.keyboard) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n onKeyDown = e => {\r\n if (!this.canvas) return;\r\n this.game(\"DApi_Key\", 0, this.eventMods(e), e.keyCode);\r\n if (!this.showKeyboard && (e.keyCode >= 32 && e.key.length === 1)) {\r\n this.game(\"DApi_Char\", e.key.charCodeAt(0));\r\n } else if (e.keyCode === 8 || e.keyCode === 13) {\r\n this.game(\"DApi_Char\", e.keyCode);\r\n }\r\n this.clearKeySel();\r\n if (!this.showKeyboard) {\r\n if (e.keyCode === 8 || e.keyCode === 9 || (e.keyCode >= 112 && e.keyCode <= 119)) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n onMenu = e => {\r\n e.preventDefault();\r\n }\r\n\r\n onKeyUp = e => {\r\n if (!this.canvas) return;\r\n this.game(\"DApi_Key\", 1, this.eventMods(e), e.keyCode);\r\n this.clearKeySel();\r\n }\r\n\r\n clearKeySel() {\r\n if (this.showKeyboard) {\r\n const len = this.keyboard.value.length;\r\n this.keyboard.setSelectionRange(len, len);\r\n }\r\n }\r\n\r\n onKeyboardInner(flags) {\r\n if (this.showKeyboard) {\r\n const text = this.keyboard.value;\r\n let valid;\r\n if (this.maxKeyboard > 0) {\r\n valid = (text.match(/[\\x20-\\x7E]/g) || []).join(\"\").substring(0, this.maxKeyboard);\r\n } else {\r\n const maxValue = -this.maxKeyboard;\r\n if (text.match(/^\\d*$/)) {\r\n this.keyboardNum = Math.min(text.length ? parseInt(text) : 0, maxValue);\r\n }\r\n valid = (this.keyboardNum ? this.keyboardNum.toString() : \"\");\r\n }\r\n if (text !== valid) {\r\n this.keyboard.value = valid;\r\n }\r\n this.clearKeySel();\r\n this.game(\"text\", valid, flags);\r\n }\r\n }\r\n onKeyboard = () => {\r\n this.onKeyboardInner(0);\r\n }\r\n onKeyboardBlur = () => {\r\n this.onKeyboardInner(1);\r\n }\r\n\r\n parseFile = e => {\r\n const files = e.target.files;\r\n if (files.length > 0) {\r\n this.start(files[0]);\r\n }\r\n }\r\n\r\n parseSave = e => {\r\n const files = e.target.files;\r\n if (files.length > 0) {\r\n this.start(files[0]);\r\n }\r\n }\r\n\r\n touchButton = null;\r\n touchCanvas = null;\r\n\r\n setTouchMod(index, value, use) {\r\n if (index < 3) {\r\n this.touchMods[index] = value;\r\n if (this.touchButtons[index]) {\r\n this.touchButtons[index].classList.toggle(\"active\", value);\r\n }\r\n } else if (use && this.touchBelt[index] >= 0) {\r\n const now = performance.now();\r\n if (!this.beltTime || now - this.beltTime > 750) {\r\n this.game(\"DApi_Char\", 49 + this.touchBelt[index]);\r\n this.beltTime = now;\r\n }\r\n }\r\n }\r\n\r\n updateTouchButton(touches, release) {\r\n let touchOther = null;\r\n if (!this.touchControls) {\r\n this.touchControls = true;\r\n this.element.classList.add(\"touch\");\r\n }\r\n const btn = this.touchButton;\r\n for (let {target, identifier, clientX, clientY} of touches) {\r\n if (btn && btn.id === identifier && this.touchButtons[btn.index] === target) {\r\n if (touches.length > 1) {\r\n btn.stick = false;\r\n }\r\n btn.clientX = clientX;\r\n btn.clientY = clientY;\r\n this.touchCanvas = [...touches].find(t => t.identifier !== identifier);\r\n if (this.touchCanvas) {\r\n this.touchCanvas = {clientX: this.touchCanvas.clientX, clientY: this.touchCanvas.clientY};\r\n }\r\n delete this.panPos;\r\n return this.touchCanvas != null;\r\n }\r\n const idx = this.touchButtons.indexOf(target);\r\n if (idx >= 0 && !touchOther) {\r\n touchOther = {id: identifier, index: idx, stick: true, original: this.touchMods[idx], clientX, clientY};\r\n }\r\n }\r\n if (btn && !touchOther && release && btn.stick) {\r\n const rect = this.touchButtons[btn.index].getBoundingClientRect();\r\n const {clientX, clientY} = btn;\r\n if (clientX >= rect.left && clientX < rect.right && clientY >= rect.top && clientY < rect.bottom) {\r\n this.setTouchMod(btn.index, !btn.original, true);\r\n } else {\r\n this.setTouchMod(btn.index, btn.original);\r\n }\r\n } else if (btn) {\r\n this.setTouchMod(btn.index, false);\r\n }\r\n this.touchButton = touchOther;\r\n if (touchOther) {\r\n this.setTouchMod(touchOther.index, true);\r\n if (touchOther.index === TOUCH_MOVE) {\r\n this.setTouchMod(TOUCH_RMB, false);\r\n } else if (touchOther.index === TOUCH_RMB) {\r\n this.setTouchMod(TOUCH_MOVE, false);\r\n }\r\n delete this.panPos;\r\n } else if (touches.length === 2) {\r\n const x = (touches[1].clientX + touches[0].clientX) / 2, y = (touches[1].clientY + touches[0].clientY) / 2;\r\n if (this.panPos) {\r\n const dx = x - this.panPos.x, dy = y - this.panPos.y;\r\n const step = this.canvas.offsetHeight / 12;\r\n if (Math.max(Math.abs(dx), Math.abs(dy)) > step) {\r\n let key;\r\n if (Math.abs(dx) > Math.abs(dy)) {\r\n key = (dx > 0 ? 0x25 : 0x27);\r\n } else {\r\n key = (dy > 0 ? 0x26 : 0x28);\r\n }\r\n this.game(\"DApi_Key\", 0, 0, key);\r\n // key up is ignored anyway\r\n this.panPos = {x, y};\r\n }\r\n } else {\r\n this.game(\"DApi_Mouse\", 0, 0, 24, 320, 180);\r\n this.game(\"DApi_Mouse\", 2, 1, 24, 320, 180);\r\n this.panPos = {x, y};\r\n }\r\n this.touchCanvas = null;\r\n return false;\r\n } else {\r\n delete this.panPos;\r\n }\r\n this.touchCanvas = [...touches].find(t => !touchOther || t.identifier !== touchOther.id);\r\n if (this.touchCanvas) {\r\n this.touchCanvas = {clientX: this.touchCanvas.clientX, clientY: this.touchCanvas.clientY};\r\n }\r\n return this.touchCanvas != null;\r\n }\r\n\r\n onTouchStart = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n } else {\r\n this.keyboard.blur();\r\n }\r\n e.preventDefault();\r\n if (this.updateTouchButton(e.touches, false)) {\r\n const {x, y} = this.mousePos(this.touchCanvas);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n if (!this.touchMods[TOUCH_MOVE]) {\r\n this.game(\"DApi_Mouse\", 1, this.touchMods[TOUCH_RMB] ? 2 : 1, this.eventMods(e), x, y);\r\n }\r\n }\r\n }\r\n onTouchMove = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n }\r\n e.preventDefault();\r\n if (this.updateTouchButton(e.touches, false)) {\r\n const {x, y} = this.mousePos(this.touchCanvas);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n }\r\n }\r\n onTouchEnd = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n //return;\r\n } else {\r\n e.preventDefault();\r\n }\r\n const prevTc = this.touchCanvas;\r\n this.updateTouchButton(e.touches, true);\r\n if (prevTc && !this.touchCanvas) {\r\n const {x, y} = this.mousePos(prevTc);\r\n this.game(\"DApi_Mouse\", 2, 1, this.eventMods(e), x, y);\r\n this.game(\"DApi_Mouse\", 2, 2, this.eventMods(e), x, y);\r\n\r\n if (this.touchMods[TOUCH_RMB] && (!this.touchButton || this.touchButton.index !== TOUCH_RMB)) {\r\n this.setTouchMod(TOUCH_RMB, false);\r\n }\r\n }\r\n if (!document.fullscreenElement) {\r\n this.element.requestFullscreen();\r\n }\r\n }\r\n\r\n setCanvas = e => this.canvas = e;\r\n setElement = e => this.element = e;\r\n setKeyboard = e => this.keyboard = e;\r\n setTouch_(i, e) {\r\n this.touchButtons[i] = e;\r\n }\r\n setTouchBelt_(i, e) {\r\n this.touchButtons[i] = e;\r\n if (e) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = 28;\r\n canvas.height = 28;\r\n e.appendChild(canvas);\r\n this.touchCtx[i] = canvas.getContext(\"2d\");\r\n } else {\r\n this.touchCtx[i] = null;\r\n }\r\n }\r\n\r\n renderUi() {\r\n const {started, loading, error, progress, has_spawn, save_names, show_saves, compress} = this.state;\r\n if (show_saves && typeof save_names === \"object\") {\r\n const plrClass = [\"Warrior\", \"Rogue\", \"Sorcerer\"];\r\n return (\r\n
\r\n
    \r\n {Object.entries(save_names).map(([name, info]) =>
  • \r\n {name}{info ? {info.name} (lv. {info.level} {plrClass[info.cls]}) : \"\"}\r\n this.downloadSave(name)}/>\r\n this.removeSave(name)}/>\r\n
  • )}\r\n
\r\n
\r\n \r\n \r\n
\r\n
this.setState({show_saves: false})}>Back
\r\n
\r\n );\r\n } else if (compress) {\r\n return (\r\n this.compressMpq = e}/>\r\n );\r\n } else if (error) {\r\n return (\r\n \r\n

The following error has occurred:

\r\n

{error.message}

\r\n

Click to create an issue on GitHub

\r\n {error.save != null && Download save file}\r\n \r\n );\r\n } else if (loading && !started) {\r\n return (\r\n
\r\n {(progress && progress.text) || 'Loading...'}\r\n {progress != null && !!progress.total && (\r\n \r\n )}\r\n
\r\n );\r\n } else if (!started) {\r\n return (\r\n
\r\n

\r\n This is a web port of the original Diablo game, based on source code reconstructed by\r\n GalaXyHaXz and devilution team. The project page with information and links can be found over here https://github.com/d07RiV/diabloweb\r\n

\r\n

\r\n If you own the original game, you can drop the original DIABDAT.MPQ onto this page or click the button below to start playing.\r\n The game can be purchased from GoG.\r\n {\" \"} this.setState({compress: true})}>Click here to compress the MPQ, greatly reducing its size.\r\n

\r\n {!has_spawn && (\r\n

\r\n Or you can play the shareware version for free (50MB download).\r\n

\r\n )}\r\n
\r\n \r\n \r\n
\r\n
this.start()}>Play Shareware
\r\n {!!save_names &&
Manage Saves
}\r\n
\r\n );\r\n }\r\n }\r\n\r\n render() {\r\n const {started, error, dropping} = this.state;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {!error && }\r\n \r\n
\r\n
\r\n
\r\n {this.renderUi()}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './reset.css';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nimport App from './App';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\nserviceWorker.register({\r\n onUpdate() {\r\n },\r\n});\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.62369ba5.chunk.js b/static/js/main.62369ba5.chunk.js deleted file mode 100644 index f35344d..0000000 --- a/static/js/main.62369ba5.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{12:function(e,t,n){"use strict";n.d(t,"a",function(){return b});var r=n(8),a=n(1),o=n.n(a),i=n(3),s=n(15),c=n.n(s);function u(e,t){return l.apply(this,arguments)}function l(){return(l=Object(i.a)(o.a.mark(function e(t,n){var r,a,i,s;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.get(n.toLowerCase());case 2:(r=e.sent)?(a=new Blob([r],{type:"binary/octet-stream"}),i=URL.createObjectURL(a),(s=document.createElement("a")).setAttribute("href",i),s.setAttribute("download",n),document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(i)):console.error("File ".concat(n," does not exist"));case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}function f(e){return d.apply(this,arguments)}function d(){return(d=Object(i.a)(o.a.mark(function e(t){var n,r,a,i,s,c;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=!0,r=!1,a=void 0,e.prev=3,e.next=6,t.keys();case 6:e.t0=Symbol.iterator,i=e.sent[e.t0]();case 8:if(n=(s=i.next()).done){e.next=14;break}(c=s.value).match(/\.sv$/i)&&u(t,c);case 11:n=!0,e.next=8;break;case 14:e.next=20;break;case 16:e.prev=16,e.t1=e.catch(3),r=!0,a=e.t1;case 20:e.prev=20,e.prev=21,n||null==i.return||i.return();case 23:if(e.prev=23,!r){e.next=26;break}throw a;case 26:return e.finish(23);case 27:return e.finish(20);case 28:case"end":return e.stop()}},e,null,[[3,16,20,28],[21,,23,27]])}))).apply(this,arguments)}var h=function(e){return new Promise(function(t,n){var r=new FileReader;r.onload=function(){return t(r.result)},r.onerror=function(){return n(r.error)},r.onabort=function(){return n()},r.readAsArrayBuffer(e)})};function v(e,t,n){return p.apply(this,arguments)}function p(){return(p=Object(i.a)(o.a.mark(function e(t,n,r){var a;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=Uint8Array,e.next=3,h(r);case 3:return e.t1=e.sent,a=new e.t0(e.t1),n.set(r.name.toLowerCase(),a),e.abrupt("return",t.set(r.name.toLowerCase(),a));case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}function b(e){return y.apply(this,arguments)}function y(){return(y=Object(i.a)(o.a.mark(function e(t){var n,a,s,l,d,h,p,b;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n=new c.a("diablo_fs"),a=new Map,s=0,e.t0=Object,e.next=7,n.json();case 7:e.t1=e.sent,l=e.t0.entries.call(e.t0,e.t1);case 9:if(!(s>>=t,T;if(e.bit_buff>>=e.extra_bits,e.in_pos===e.in_bytes){if(0===(e.in_bytes=e.read_buf(e.in_buff)))return P;e.in_pos=0}return e.bit_buff|=e.in_buff[e.in_pos++]<<8,e.bit_buff>>>=t-e.extra_bits,e.extra_bits=e.extra_bits-t+8,T}function Y(e){if(1&e.bit_buff){if(X(e,1))return 774;var t=e.LengthCodes[255&e.bit_buff];if(X(e,e.LenBits[t]))return 774;var n=e.ExLenBits[t];if(0!==n){var r=e.bit_buff&(1<r.dsize_bits||r.dsize_bits>6)return B;if(r.dsize_mask=65535>>16-r.dsize_bits,r.ctype!=M){if(r.ctype!=S)return O;r.ChBitsAsc.set(F),function(e){for(var t=255,n=255;t>=0;t--,n--){var r=e.ChBitsAsc[n],a=void 0;if(r<=8){var o=1<>4;do{e.offs2D34[a]=n,a+=i}while(a<256)}else{r-=6,e.ChBitsAsc[n]=r;var s=1<>6;do{e.offs2E34[a]=n,a+=s}while(a<128)}else{r-=8,e.ChBitsAsc[n]=r;var c=1<>8;do{e.offs2EB4[a]=n,a+=c}while(a<256)}}}(r)}return r.LenBits.set(I),G(r.LengthCodes,K,r.LenBits,r.LenBits.length),r.ExLenBits.set(z),r.LenBase.set(R),r.DistBits.set(U),G(r.DistPosCodes,N,r.DistBits,r.DistBits.length),774!==function(e){for(var t,n,r=4096;(t=n=Y(e))<773;){if(n>=256){var a=n-254,o=J(e,a);if(0===o){t=774;break}var i=r,s=i-o;r+=a;for(var c=e.out_buff;a-- >0;)c[i++]=c[s++]}else e.out_buff[r++]=n;r>=8192&&(e.write_buf(e.out_buff.subarray(4096,8192)),e.out_buff.copyWithin(0,4096,r),r-=4096)}return e.write_buf(e.out_buff.subarray(4096,r)),t}(r)?j:D}var Q=new Uint32Array(80),H=function(e,t){return t<>32-e},$=function(){function e(){Object(p.a)(this,e),this.digest=new Uint32Array(5),this.count=0,this.digest[0]=1732584193,this.digest[1]=4023233417,this.digest[2]=2562383102,this.digest[3]=271733878,this.digest[4]=3285377520,this.digest8=new Uint8Array(this.digest.buffer)}return Object(b.a)(e,[{key:"input8",value:function(e){var t=new Uint32Array(e.buffer,e.byteOffset,16);this.input(t)}},{key:"input",value:function(e){this.count+=32*e.length;for(var t=0;t<16;++t)Q[t]=e[t];for(var n=16;n<80;++n)Q[n]=Q[n-16]^Q[n-14]^Q[n-8]^Q[n-3];for(var r=this.digest[0],a=this.digest[1],o=this.digest[2],i=this.digest[3],s=this.digest[4],c=0;c<20;c++){var u=H(5,r)+(a&o|~a&i)+s+Q[c]+1518500249;s=i,i=o,o=H(30,a),a=r,r=0|u}for(var l=20;l<40;l++){var f=H(5,r)+(a^o^i)+s+Q[l]+1859775393;s=i,i=o,o=H(30,a),a=r,r=0|f}for(var d=40;d<60;d++){var h=H(5,r)+(a&o|a&i|o&i)+s+Q[d]+2400959708;s=i,i=o,o=H(30,a),a=r,r=0|h}for(var v=60;v<80;v++){var p=H(5,r)+(a^o^i)+s+Q[v]+3395469782;s=i,i=o,o=H(30,a),a=r,r=0|p}this.digest[0]+=r,this.digest[1]+=a,this.digest[2]+=o,this.digest[3]+=i,this.digest[4]+=s}}]),e}(),V=function(){function e(t){Object(p.a)(this,e),this.seed=t}return Object(b.a)(e,[{key:"next",value:function(){return this.seed=(3*this.seed<<16)+(67*this.seed<<8)+253*this.seed+2531011|0,this.seed>>16&32767}}]),e}();function Z(e,t){if(!(e.length<=8)){var n=e.length-8;if(!(n%64)&&!e[n+4]){for(var r=e[n+5],a=new Uint8Array(n+r-64),o=function(e){for(var t=new V(28760),n=new Uint8Array(136),r=new Uint32Array(n.buffer),a=0;a<136;++a)n[a]=t.next();for(var o=new Uint8Array(64),i=0;i<64;++i)o[i]=e.charCodeAt(i%e.length);var s=new $;s.input8(o);for(var c=0;c<34;++c)r[c]^=s.digest[c%s.digest.length];return(s=new $).input(r.subarray(18)),s}(t),i=n>>2,s=new Uint32Array(e.buffer,e.byteOffset,i+1),c=new Uint32Array(16),u=new Uint8Array(c.buffer),l=0;lt)throw Error("decompress buffer overflow");n.set(e,a),a+=e.length})||a!==t?null:n}var te=function(){for(var e=new Uint32Array(1280),t=1048577,n=0;n<256;n++)for(var r=n;r<1280;r+=256){var a=(65535&(t=(125*t+3)%2796203))<<16,o=65535&(t=(125*t+3)%2796203);e[r]=a|o}return e}();function ne(e,t){for(var n=4008636142,r=0;r>>11}function re(e,t){ne(new Uint32Array(e.buffer,e.byteOffset,e.length>>2),t)}function ae(e,t){for(var n=4008636142,r=0;r>>11}}function oe(e,t){for(var n=2146271213,r=4008636142,a=0;a=97&&o<=122&&(o-=32),47===o&&(o=92),r=o+(n=te[256*t+o]^n+r)+33*r+3|0}return n>>>0}function ie(e){var t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return e.substring(t+1)}var se=256,ce=512,ue=65280,le=65536,fe=131072,de=1048576,he=16777216,ve=function(){function e(t){Object(p.a)(this,e),this.buffer=t,this.u8=new Uint8Array(t),this.u32=new Uint32Array(t,0,t.byteLength>>2),this.readHeader()}return Object(b.a)(e,[{key:"readHeader",value:function(){var e=this.u8,t=this.u32;if(441536589!==t[0])throw Error("invalid MPQ header");var n=e[14]+(e[15]<<8),r=t[4],a=t[5],o=t[6],i=t[7];this.hashTable=this.readTable(r,o,"(hash table)"),this.blockTable=this.readTable(a,i,"(block table)"),this.blockSize=1<<9+n}},{key:"readTable",value:function(e,t,n){var r=new Uint32Array(this.buffer.slice(e,e+16*t));return ne(r,oe(n,3)),r}},{key:"fileIndex",value:function(e){for(var t=this.hashTable,n=t.length>>2,r=oe(e,0)%n,a=oe(e,1),o=oe(e,2),i=r,s=0;4294967295!==t[4*i+3]&&sthis.buffer.byteLength))return r.flags&ue||(r.cmpSize=r.fileSize),r.flags&fe&&(r.key=r.key+r.filePos^r.fileSize),{info:r,data:new Uint8Array(this.buffer,r.filePos,r.cmpSize)}}}},{key:"read",value:function(e){var t=this.readRaw(e);if(t){var n=t.info,r=t.data;if(r=r.slice(),n.flags&he){if(n.flags&le&&re(r,n.key),n.flags&ce)return;return n.flags&se?ee(r,n.fileSize):r}if(n.flags&ue){var a=Math.floor((n.fileSize+this.blockSize-1)/this.blockSize),o=a+1;if(r.length<4*o)return;var i=new Uint32Array(r.buffer,0,o);n.flags&le&&ne(i,n.key-1);for(var s=new Uint8Array(n.fileSize),c=0;cr.length)return;var f=r.subarray(i[c],i[c+1]);if(n.flags&le&&re(f,n.key+c),n.flags&ce)return;if(n.flags&se&&(f=ee(f,l)),!f||f.length!==l)return;s.set(f,u)}return s}if(n.flags&le)for(var d=0;d=this.buffer.byteLength)throw Error("packet too small");return this.buffer[this.pos++]}},{key:"read16",value:function(){var e=this.pos,t=this.buffer;if(e+2>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8;return this.pos+=2,n}},{key:"read32",value:function(){var e=this.pos,t=this.buffer;if(e+4>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24;return this.pos+=4,n}},{key:"read_str",value:function(){var e=this.read8(),t=this.pos,n=this.buffer;if(t+e>n.byteLength)throw Error("packet too small");var r=String.fromCharCode.apply(String,Object(v.a)(n.subarray(t,t+e)));return this.pos+=e,r}},{key:"read_buf",value:function(){var e=this.read32(),t=this.buffer.subarray(this.pos,this.pos+e);return this.pos+=e,t}}]),e}(),Se=function(){function e(t){Object(p.a)(this,e),this.buffer=new Uint8Array(t),this.pos=0}return Object(b.a)(e,[{key:"write8",value:function(e){return this.buffer[this.pos++]=e,this}},{key:"write16",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,this.pos+=2,this}},{key:"write32",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,n[t+2]=e>>16,n[t+3]=e>>24,this.pos+=4,this}},{key:"write_str",value:function(e){var t=e.length;this.write8(t);for(var n=this.pos,r=this.buffer,a=0;a=4?e.send(Le(Te.join_reject,{cookie:s.cookie,reason:je.JOIN_GAME_FULL})):(t.players[c]=n,n.id=c,e.send(Le(Te.join_accept,{cookie:s.cookie,index:c,seed:t.seed,difficulty:t.difficulty})),t.send(255,Le(Te.connect,{id:c})))}break;default:if(null==n.id)return;t.handle(n.id,i.code,s)}if(!a.done())throw Error("packet too large")}),e.on("close",function(){null!=n.id&&t.drop(n.id,1073741830)})}},{key:"send",value:function(e,t){for(var n=1;n<4;++n)e&1<>16&255,P=D>>8&255,U=255&D;t.fillStyle="rgb(".concat(T,", ").concat(P,", ").concat(U,")"),t.fillText(L,B,O+22)}}catch(N){C=!0,A=N}finally{try{E||null==S.return||S.return()}finally{if(C)throw A}}t.restore()}}e.updateBelt(s)}function Fe(){return(Fe=Object(h.a)(f.a.mark(function e(t,n,r,a){var o,i,s;return f.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.fs;case 2:if(o=e.sent,!a||r){e.next=6;break}return e.next=6,xe(t,o);case 6:return i=null,s=!1,i=t.canvas.getContext("2d",{alpha:!1}),e.next=10,new Promise(function(e,c){try{var l=new me.a,f=[],d=Ie(function(e){f.push(e)});l.addEventListener("message",function(r){var a=r.data;switch(a.action){case"loaded":e(function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r2&&void 0!==o[2]?o[2]:"arraybuffer",e.next=3,ke.a.request({url:t,responseType:r,onDownloadProgress:n});case 3:return a=e.sent,e.abrupt("return",a.data);case 5:case"end":return e.stop()}},e)}))).apply(this,arguments)}function tt(e,t,n){return new Promise(function(r,a){try{var o=new Xe.a;o.addEventListener("message",function(e){var t=e.data;switch(t.action){case"result":r({buffer:t.buffer,blocks:t.blocks});break;case"error":a({message:t.error,stack:t.stack});break;case"progress":n(t.value)}}),o.postMessage(Object(d.a)({action:"run"},e),t)}catch(i){a(i)}})}function nt(){return(nt=Object(h.a)(f.a.mark(function e(t,n){var r,a,o,i,s,c,u,l,d,h,v,p,b,y,m,w,g,k,_,x,E,C,A,M,S,j,B,O,L,D,T,P,U,N,z,R,I,K,F,q,G,X,Y,J,W,Q,H,$,V,Z,ee,te,re,se,ce;return f.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return a=function(){n("Loading...",r.reduce(function(e,t){return e+t.loaded*t.weight},0),r.reduce(function(e,t){return e+t.total*t.weight},0))},n("Loading..."),r=[],o=function(e){return function(t){e.loaded=t.loaded,a()}},i=t.size,(s={loaded:0,weight:1,total:i}).ready=Ve(t.slice(0,32),o(s)),r.push(s),(c={loaded:0,weight:5,total:He}).ready=Ze(Je.a,o(c)),r.push(c),(u={loaded:0,weight:5,total:$e}).ready=Ze(Qe.a,o(u),"text"),r.push(u),e.t0=Uint32Array,e.next=17,s.ready;case 17:if(e.t1=e.sent,l=new e.t0(e.t1),d=new Uint16Array(l.buffer),441536589===l[0]){e.next=22;break}throw Error("invalid MPQ file");case 22:if(h=1<<9+d[7],v=l[4],p=l[5],b=l[6],y=l[7],!(v+16*b>i||p+16*y>i)){e.next=29;break}throw Error("invalid MPQ file");case 29:return m={loaded:0,weight:1,total:16*b},w={loaded:0,weight:1,total:16*y},s.total-=m.total+w.total,m.ready=Ve(t.slice(v,v+m.total),o(m)),w.ready=Ve(t.slice(p,p+w.total),o(w)),r.push(m,w),e.t2=Uint32Array,e.next=38,m.ready;case 38:return e.t3=e.sent,g=new e.t2(e.t3),e.t4=Uint32Array,e.next=43,w.ready;case 43:return e.t5=e.sent,k=new e.t4(e.t5),ne(g,oe("(hash table)",3)),ne(k,oe("(block table)",3)),e.next=49,u.ready;case 49:for(e.t6=function(e){return e.trim()},e.t7=function(e){return e.length},_=e.sent.split("\n").map(e.t6).filter(e.t7),x={},E=function(e,t){return e.toString(16).padStart(8,"0")+t.toString(16).padStart(8,"0")},C=!0,A=!1,M=void 0,e.prev=57,S=_[Symbol.iterator]();!(C=(j=S.next()).done);C=!0)B=j.value,x[E(oe(B,1),oe(B,2))]=B;e.next=65;break;case 61:e.prev=61,e.t8=e.catch(57),A=!0,M=e.t8;case 65:e.prev=65,e.prev=66,C||null==S.return||S.return();case 68:if(e.prev=68,!A){e.next=71;break}throw M;case 71:return e.finish(68);case 72:return e.finish(65);case 73:for(O=4,L=[],D=0;D0&&n.start(t[0])},n.onDone=function(e){var t=URL.createObjectURL(e);n.setState({url:t});var r=document.createElement("a");r.setAttribute("href",t),r.setAttribute("download","DIABDAT.MPQ"),document.body.appendChild(r),r.click(),document.body.removeChild(r)},n.onClose=function(){n.state.url&&URL.revokeObjectURL(n.state.url),n.props.api.setState({compress:!1})},n}return Object(g.a)(t,e),Object(b.a)(t,[{key:"onProgress",value:function(e){this.setState({progress:e})}},{key:"onError",value:function(e,t){var n=this.props.api;n.setState({compress:!1}),n.onError(e,t)}},{key:"start",value:function(e){var t=this;this.setState({started:!0}),function(e,t){return nt.apply(this,arguments)}(e,function(e,n,r){return t.onProgress({text:e,loaded:n,total:r})}).then(this.onDone,function(e){return t.onError(e.message,e.stack)})}},{key:"render",value:function(){var e=this.state,t=e.url,n=e.started,r=e.progress;return t?a.a.createElement("div",{className:"start"},a.a.createElement("p",null,a.a.createElement("a",{href:t,download:"DIABDAT.MPQ"},"Click here if download doesn't start.")),a.a.createElement("div",{className:"startButton",onClick:this.onClose},"Back")):n?a.a.createElement("div",{className:"loading"},r&&r.text||"Processing...",null!=r&&!!r.total&&a.a.createElement("span",{className:"progressBar"},a.a.createElement("span",null,a.a.createElement("span",{style:{width:"".concat(Math.round(100*r.loaded/r.total),"%")}})))):a.a.createElement("div",{className:"start"},a.a.createElement("p",null,"You can use this tool to reduce the original MPQ to about half its size. It encodes sounds in MP3 format and uses better compression for regular files. To begin, click the button below or drop the MPQ onto the page."),a.a.createElement("form",null,a.a.createElement("label",{htmlFor:"loadFile",className:"startButton"},"Select MPQ"),a.a.createElement("input",{accept:".mpq",type:"file",id:"loadFile",style:{display:"none"},onChange:this.parseFile})),a.a.createElement("div",{className:"startButton",onClick:this.onClose},"Back"))}}]),t}(a.a.Component);function at(e,t){var n=(e.message||"Unknown error")+(e.stack?"\n"+e.stack:""),r=new URL("https://github.com/d07RiV/diabloweb/issues/new");return r.searchParams.set("body","**Description:**\n[Please describe what you were doing before the error occurred]\n\n**App version:**\nDiabloWeb ".concat("1.0.39"," (").concat(t?"Retail":"Shareware",")\n\n**Error message:**\n \n").concat(n.split("\n").map(function(e){return" "+e}).join("\n"),"\n\n**User agent:**\n\n ").concat(navigator.userAgent,"\n\n**Save file:**\n[Please attach the save file, if applicable. The error box should have a link to download the current save you were playing; alternatively, you can open dev console on the game page (F12) and type in ","`DownloadSaves()`","]\n")),r.toString()}window.Peer=Ae.a,E.a.initialize("UA-43123589-6"),E.a.pageview("/");var ot=0,it=1;var st=null;try{st=function(){var e=!0,t=!1,n=void 0;try{for(var r,a=document.styleSheets[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var o=r.value,i=!0,s=!1,c=void 0;try{for(var u,l=o.cssRules[Symbol.iterator]();!(i=(u=l.next()).done);i=!0){var f=u.value;if(f.type===CSSRule.MEDIA_RULE&&"(min-aspect-ratio: 3/1)"===f.conditionText){var d=!0,h=!1,v=void 0;try{for(var p,b=f.cssRules[Symbol.iterator]();!(d=(p=b.next()).done);d=!0){var y=p.value;if(".App.keyboard .Body .inner"===y.selectorText)return y}}catch(m){h=!0,v=m}finally{try{d||null==b.return||b.return()}finally{if(h)throw v}}}}}catch(m){s=!0,c=m}finally{try{i||null==l.return||l.return()}finally{if(s)throw c}}}}catch(m){t=!0,n=m}finally{try{e||null==a.return||a.return()}finally{if(t)throw n}}}()}catch(lt){}var ct=function(e){var t=e.children,n=Object(k.a)(e,["children"]);return a.a.createElement("a",Object.assign({target:"_blank",rel:"noopener noreferrer"},n),t)},ut=function(e){function t(e){var n;return Object(p.a)(this,t),(n=Object(y.a)(this,Object(m.a)(t).call(this,e))).files=new Map,n.state={started:!1,loading:!1,dropping:0,has_spawn:!1},n.cursorPos={x:0,y:0},n.touchControls=!1,n.touchButtons=[null,null,null,null,null,null],n.touchCtx=[null,null,null,null,null,null],n.touchMods=[!1,!1,!1,!1,!1,!1],n.touchBelt=[-1,-1,-1,-1,-1,-1],n.maxKeyboard=0,n.fs=Object(be.a)(!0),n.onDrop=function(e){var t=function(e){if(e.dataTransfer.items)for(var t=0;t=32&&1===e.key.length?n.game("DApi_Char",e.key.charCodeAt(0)):8!==e.keyCode&&13!==e.keyCode||n.game("DApi_Char",e.keyCode),n.clearKeySel(),n.showKeyboard||(8===e.keyCode||9===e.keyCode||e.keyCode>=112&&e.keyCode<=119)&&e.preventDefault())},n.onMenu=function(e){e.preventDefault()},n.onKeyUp=function(e){n.canvas&&(n.game("DApi_Key",1,n.eventMods(e),e.keyCode),n.clearKeySel())},n.onKeyboard=function(){n.onKeyboardInner(0)},n.onKeyboardBlur=function(){n.onKeyboardInner(1)},n.parseFile=function(e){var t=e.target.files;t.length>0&&n.start(t[0])},n.parseSave=function(e){var t=e.target.files;t.length>0&&n.start(t[0])},n.touchButton=null,n.touchCanvas=null,n.onTouchStart=function(e){if(n.canvas&&e.target!==n.keyboard&&(n.keyboard.blur(),e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,a=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,a),n.touchMods[ot]||n.game("DApi_Mouse",1,n.touchMods[it]?2:1,n.eventMods(e),r,a)}},n.onTouchMove=function(e){if(n.canvas&&e.target!==n.keyboard&&(e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,a=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,a)}},n.onTouchEnd=function(e){if(n.canvas){e.target===n.keyboard||e.preventDefault();var t=n.touchCanvas;if(n.updateTouchButton(e.touches,!0),t&&!n.touchCanvas){var r=n.mousePos(t),a=r.x,o=r.y;n.game("DApi_Mouse",2,1,n.eventMods(e),a,o),n.game("DApi_Mouse",2,2,n.eventMods(e),a,o),!n.touchMods[it]||n.touchButton&&n.touchButton.index===it||n.setTouchMod(it,!1)}document.fullscreenElement||n.element.requestFullscreen()}},n.setCanvas=function(e){return n.canvas=e},n.setElement=function(e){return n.element=e},n.setKeyboard=function(e){return n.keyboard=e},n.setTouch0=n.setTouch_.bind(Object(w.a)(n),0),n.setTouch1=n.setTouch_.bind(Object(w.a)(n),1),n.setTouch2=n.setTouch_.bind(Object(w.a)(n),2),n.setTouch3=n.setTouchBelt_.bind(Object(w.a)(n),3),n.setTouch4=n.setTouchBelt_.bind(Object(w.a)(n),4),n.setTouch5=n.setTouchBelt_.bind(Object(w.a)(n),5),n}return Object(g.a)(t,e),Object(b.a)(t,[{key:"componentDidMount",value:function(){var e=this;document.addEventListener("drop",this.onDrop,!0),document.addEventListener("dragover",this.onDragOver,!0),document.addEventListener("dragenter",this.onDragEnter,!0),document.addEventListener("dragleave",this.onDragLeave,!0),this.fs.then(function(t){var n=t.files.get("spawn.mpq");n&&_e.includes(n.byteLength)&&e.setState({has_spawn:!0}),Object(v.a)(t.files.keys()).filter(function(e){return e.match(/\.sv$/i)}).length&&e.setState({save_names:!0})})}},{key:"setDropping",value:function(e){this.setState(function(t){var n=t.dropping;return{dropping:Math.max(n+e,0)}})}},{key:"onError",value:function(e,t){var n=this;Object(h.a)(f.a.mark(function r(){var a;return f.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(a={message:e},!n.saveName){r.next=8;break}return r.next=4,n.fs;case 4:return r.t0=n.saveName,r.next=7,r.sent.fileUrl(r.t0);case 7:a.save=r.sent;case 8:t?Object(pe.mapStackTrace)(t,function(e){n.setState(function(t){return!t.error&&{error:Object(d.a)({},a,{stack:e.join("\n")})}})}):n.setState(function(e){return!e.error&&{error:a}});case 9:case"end":return r.stop()}},r)}))()}},{key:"openKeyboard",value:function(e){e?(this.showKeyboard={left:"".concat((100*(e[0]-10)/640).toFixed(2),"%"),top:"".concat((100*(e[1]-10)/480).toFixed(2),"%"),width:"".concat((100*(e[2]-e[0]+20)/640).toFixed(2),"%"),height:"".concat((100*(e[3]-e[1]+20)/640).toFixed(2),"%")},this.maxKeyboard=e[4],this.element.classList.add("keyboard"),Object.assign(this.keyboard.style,this.showKeyboard),this.keyboard.focus(),st&&(st.style.transform="translate(-50%, ".concat((56.25*-(e[1]+e[3])/960).toFixed(2),"vw)"))):(this.showKeyboard=!1,this.element.classList.remove("keyboard"),this.keyboard.blur(),this.keyboard.value="",this.keyboardNum=0)}},{key:"setCursorPos",value:function(e,t){var n=this,r=this.canvas.getBoundingClientRect();this.cursorPos={x:r.left+(r.right-r.left)*e/640,y:r.top+(r.bottom-r.top)*t/480},setTimeout(function(){n.game("DApi_Mouse",0,0,0,e,t)})}},{key:"onProgress",value:function(e){this.setState({progress:e})}},{key:"onExit",value:function(){this.state.error||window.location.reload()}},{key:"setCurrentSave",value:function(e){this.saveName=e}},{key:"updateSaves",value:function(){var e=this;return this.fs.then(function(t){var n={};Object(v.a)(t.files.keys()).filter(function(e){return e.match(/\.sv$/i)}).forEach(function(e){n[e]=function(e,t){try{var n=Z(new ve(e).read("hero"),function(e){return e.match(/spawn\d+\.sv/i)?"lshbkfg1":e.match(/share_\d+\.sv/i)?"lshbkfg1":e.match(/multi_\d+\.sv/i)?"szqnlsk1":"xrgyrkj1"}(t)),r=n.indexOf(0,16),a={};return a.name=String.fromCharCode.apply(String,Object(v.a)(n.subarray(16,r))),a.cls=n[48],a.level=n[53],a}catch(lt){return null}}(t.files.get(e).buffer,e)}),e.setState({save_names:n})})}},{key:"removeSave",value:function(e){var t=this;window.confirm("Are you sure you want to delete ".concat(e,"?"))&&Object(h.a)(f.a.mark(function n(){var r;return f.a.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,t.fs;case 2:return r=n.sent,n.next=5,r.delete(e.toLowerCase());case 5:r.files.delete(e.toLowerCase()),t.updateSaves();case 7:case"end":return n.stop()}},n)}))()}},{key:"downloadSave",value:function(e){this.fs.then(function(t){return t.download(e)})}},{key:"drawBelt",value:function(e,t){this.canvas&&this.touchButtons[e]&&(this.touchBelt[e]=t,t>=0?(this.touchButtons[e].style.display="block",this.touchCtx[e].drawImage(this.canvas,205+29*t,357,28,28,0,0,28,28)):this.touchButtons[e].style.display="none")}},{key:"updateBelt",value:function(e){if(e){for(var t=new Set,n=3,r=0;r=0&&!t.has(e[r])&&(this.drawBelt(n++,r),t.add(e[r]));for(;n<6;++n)this.drawBelt(n,-1)}else this.drawBelt(3,-1),this.drawBelt(4,-1),this.drawBelt(5,-1)}},{key:"start",value:function(e){var t=this;if(e&&e.name.match(/\.sv$/i))this.fs.then(function(t){return t.upload(e)}).then(function(){t.updateSaves()});else if(!this.state.show_saves)if(!e||e.name.match(/\.mpq$/i)){document.removeEventListener("drop",this.onDrop,!0),document.removeEventListener("dragover",this.onDragOver,!0),document.removeEventListener("dragenter",this.onDragEnter,!0),document.removeEventListener("dragleave",this.onDragLeave,!0),this.setState({dropping:0});var n=!(!e||e.name.match(/^spawn\.mpq$/i));E.a.event({category:"Game",action:n?"Start Retail":"Start Shareware"}),this.setState({loading:!0,retail:n}),qe(this,e,!n).then(function(e){t.game=e,document.addEventListener("mousemove",t.onMouseMove,!0),document.addEventListener("mousedown",t.onMouseDown,!0),document.addEventListener("mouseup",t.onMouseUp,!0),document.addEventListener("keydown",t.onKeyDown,!0),document.addEventListener("keyup",t.onKeyUp,!0),document.addEventListener("contextmenu",t.onMenu,!0),document.addEventListener("touchstart",t.onTouchStart,{passive:!1,capture:!0}),document.addEventListener("touchmove",t.onTouchMove,{passive:!1,capture:!0}),document.addEventListener("touchend",t.onTouchEnd,{passive:!1,capture:!0}),document.addEventListener("pointerlockchange",t.onPointerLockChange),window.addEventListener("resize",t.onResize),t.setState({started:!0})},function(e){return t.onError(e.message,e.stack)})}else window.alert("Please select an MPQ file. If you downloaded the installer from GoG, you will need to install it on PC and use the MPQ file from the installation folder.")}},{key:"pointerLocked",value:function(){return document.pointerLockElement===this.canvas||document.mozPointerLockElement===this.canvas}},{key:"mousePos",value:function(e){var t=this.canvas.getBoundingClientRect();return this.pointerLocked()?(this.cursorPos.x=Math.max(t.left,Math.min(t.right,this.cursorPos.x+e.movementX)),this.cursorPos.y=Math.max(t.top,Math.min(t.bottom,this.cursorPos.y+e.movementY))):this.cursorPos={x:e.clientX,y:e.clientY},{x:Math.max(0,Math.min(Math.round((this.cursorPos.x-t.left)/(t.right-t.left)*640),639)),y:Math.max(0,Math.min(Math.round((this.cursorPos.y-t.top)/(t.bottom-t.top)*480),479))}}},{key:"mouseButton",value:function(e){switch(e.button){case 0:return 1;case 1:return 4;case 2:return 2;case 3:return 5;case 4:return 6;default:return 1}}},{key:"eventMods",value:function(e){return(e.shiftKey||this.touchMods[2]?1:0)+(e.ctrlKey?2:0)+(e.altKey?4:0)+(e.touches?8:0)}},{key:"clearKeySel",value:function(){if(this.showKeyboard){var e=this.keyboard.value.length;this.keyboard.setSelectionRange(e,e)}}},{key:"onKeyboardInner",value:function(e){if(this.showKeyboard){var t,n=this.keyboard.value;if(this.maxKeyboard>0)t=(n.match(/[\x20-\x7E]/g)||[]).join("").substring(0,this.maxKeyboard);else{var r=-this.maxKeyboard;n.match(/^\d*$/)&&(this.keyboardNum=Math.min(n.length?parseInt(n):0,r)),t=this.keyboardNum?this.keyboardNum.toString():""}n!==t&&(this.keyboard.value=t),this.clearKeySel(),this.game("text",t,e)}}},{key:"setTouchMod",value:function(e,t,n){if(e<3)this.touchMods[e]=t,this.touchButtons[e]&&this.touchButtons[e].classList.toggle("active",t);else if(n&&this.touchBelt[e]>=0){var r=performance.now();(!this.beltTime||r-this.beltTime>750)&&(this.game("DApi_Char",49+this.touchBelt[e]),this.beltTime=r)}}},{key:"updateTouchButton",value:function(e,t){var n=this,r=null;this.touchControls||(this.touchControls=!0,this.element.classList.add("touch"));var a=this.touchButton,o=!0,i=!1,s=void 0;try{for(var c,u=function(){var t=c.value,o=t.target,i=t.identifier,s=t.clientX,u=t.clientY;if(a&&a.id===i&&n.touchButtons[a.index]===o)return e.length>1&&(a.stick=!1),a.clientX=s,a.clientY=u,n.touchCanvas=Object(v.a)(e).find(function(e){return e.identifier!==i}),n.touchCanvas&&(n.touchCanvas={clientX:n.touchCanvas.clientX,clientY:n.touchCanvas.clientY}),delete n.panPos,{v:null!=n.touchCanvas};var l=n.touchButtons.indexOf(o);l>=0&&!r&&(r={id:i,index:l,stick:!0,original:n.touchMods[l],clientX:s,clientY:u})},l=e[Symbol.iterator]();!(o=(c=l.next()).done);o=!0){var f=u();if("object"===typeof f)return f.v}}catch(_){i=!0,s=_}finally{try{o||null==l.return||l.return()}finally{if(i)throw s}}if(a&&!r&&t&&a.stick){var d=this.touchButtons[a.index].getBoundingClientRect(),h=a.clientX,p=a.clientY;h>=d.left&&h=d.top&&pk)m=Math.abs(w)>Math.abs(g)?w>0?37:39:g>0?38:40,this.game("DApi_Key",0,0,m),this.panPos={x:b,y:y}}else this.game("DApi_Mouse",0,0,24,320,180),this.game("DApi_Mouse",2,1,24,320,180),this.panPos={x:b,y:y};return this.touchCanvas=null,!1}delete this.panPos}return this.touchCanvas=Object(v.a)(e).find(function(e){return!r||e.identifier!==r.id}),this.touchCanvas&&(this.touchCanvas={clientX:this.touchCanvas.clientX,clientY:this.touchCanvas.clientY}),null!=this.touchCanvas}},{key:"setTouch_",value:function(e,t){this.touchButtons[e]=t}},{key:"setTouchBelt_",value:function(e,t){if(this.touchButtons[e]=t,t){var n=document.createElement("canvas");n.width=28,n.height=28,t.appendChild(n),this.touchCtx[e]=n.getContext("2d")}else this.touchCtx[e]=null}},{key:"renderUi",value:function(){var e=this,t=this.state,n=t.started,r=t.loading,o=t.error,i=t.progress,s=t.has_spawn,c=t.save_names,l=t.show_saves,f=t.compress;if(l&&"object"===typeof c){var d=["Warrior","Rogue","Sorcerer"];return a.a.createElement("div",{className:"start"},a.a.createElement("ul",{className:"saveList"},Object.entries(c).map(function(t){var n=Object(u.a)(t,2),r=n[0],o=n[1];return a.a.createElement("li",{key:r},r,o?a.a.createElement("span",{className:"info"},o.name," (lv. ",o.level," ",d[o.cls],")"):"",a.a.createElement(C.a,{className:"btnDownload",icon:A.a,onClick:function(){return e.downloadSave(r)}}),a.a.createElement(C.a,{className:"btnRemove",icon:A.b,onClick:function(){return e.removeSave(r)}}))})),a.a.createElement("form",null,a.a.createElement("label",{htmlFor:"loadFile",className:"startButton"},"Upload Save"),a.a.createElement("input",{accept:".sv",type:"file",id:"loadFile",style:{display:"none"},onChange:this.parseSave})),a.a.createElement("div",{className:"startButton",onClick:function(){return e.setState({show_saves:!1})}},"Back"))}return f?a.a.createElement(rt,{api:this,ref:function(t){return e.compressMpq=t}}):o?a.a.createElement(ct,{className:"error",href:at(o,this.state.retail)},a.a.createElement("p",{className:"header"},"The following error has occurred:"),a.a.createElement("p",{className:"body"},o.message),a.a.createElement("p",{className:"footer"},"Click to create an issue on GitHub"),null!=o.save&&a.a.createElement("a",{href:o.save,download:this.saveName},"Download save file")):r&&!n?a.a.createElement("div",{className:"loading"},i&&i.text||"Loading...",null!=i&&!!i.total&&a.a.createElement("span",{className:"progressBar"},a.a.createElement("span",null,a.a.createElement("span",{style:{width:"".concat(Math.round(100*i.loaded/i.total),"%")}})))):n?void 0:a.a.createElement("div",{className:"start"},a.a.createElement("p",null,"This is a web port of the original Diablo game, based on source code reconstructed by GalaXyHaXz and devilution team. The project page with information and links can be found over here ",a.a.createElement(ct,{href:"https://github.com/d07RiV/diabloweb"},"https://github.com/d07RiV/diabloweb")),a.a.createElement("p",null,"If you own the original game, you can drop the original DIABDAT.MPQ onto this page or click the button below to start playing. The game can be purchased from ",a.a.createElement(ct,{href:"https://www.gog.com/game/diablo"},"GoG"),"."," ",a.a.createElement("span",{className:"link",onClick:function(){return e.setState({compress:!0})}},"Click here to compress the MPQ, greatly reducing its size.")),!s&&a.a.createElement("p",null,"Or you can play the shareware version for free (50MB download)."),a.a.createElement("form",null,a.a.createElement("label",{htmlFor:"loadFile",className:"startButton"},"Select MPQ"),a.a.createElement("input",{accept:".mpq",type:"file",id:"loadFile",style:{display:"none"},onChange:this.parseFile})),a.a.createElement("div",{className:"startButton",onClick:function(){return e.start()}},"Play Shareware"),!!c&&a.a.createElement("div",{className:"startButton",onClick:this.showSaves},"Manage Saves"))}},{key:"render",value:function(){var e=this.state,t=e.started,n=e.error,r=e.dropping;return a.a.createElement("div",{className:x()("App",{touch:this.touchControls,started:t,dropping:r,keyboard:!!this.showKeyboard}),ref:this.setElement},a.a.createElement("div",{className:"touch-ui touch-mods"},a.a.createElement("div",{className:x()("touch-button","touch-button-0",{active:this.touchMods[0]}),ref:this.setTouch0}),a.a.createElement("div",{className:x()("touch-button","touch-button-1",{active:this.touchMods[1]}),ref:this.setTouch1}),a.a.createElement("div",{className:x()("touch-button","touch-button-2",{active:this.touchMods[2]}),ref:this.setTouch2})),a.a.createElement("div",{className:"touch-ui touch-belt"},a.a.createElement("div",{className:x()("touch-button","touch-button-0"),ref:this.setTouch3}),a.a.createElement("div",{className:x()("touch-button","touch-button-1"),ref:this.setTouch4}),a.a.createElement("div",{className:x()("touch-button","touch-button-2"),ref:this.setTouch5})),a.a.createElement("div",{className:"Body"},a.a.createElement("div",{className:"inner"},!n&&a.a.createElement("canvas",{ref:this.setCanvas,width:640,height:480}),a.a.createElement("input",{type:"text",className:"keyboard",onChange:this.onKeyboard,onBlur:this.onKeyboardBlur,ref:this.setKeyboard,spellCheck:!1,style:this.showKeyboard||{}}))),a.a.createElement("div",{className:"BodyV"},this.renderUi()))}}]),t}(a.a.Component);i.a.render(a.a.createElement(ut,null),document.getElementById("root")),function(e){if("serviceWorker"in navigator){if(new URL("/diabloweb",window.location.href).origin!==window.location.origin)return;window.addEventListener("load",function(){var t="".concat("/diabloweb","/service-worker.js");s?(function(e,t){fetch(e).then(function(n){var r=n.headers.get("content-type");404===n.status||null!=r&&-1===r.indexOf("javascript")?navigator.serviceWorker.ready.then(function(e){e.unregister().then(function(){window.location.reload()})}):c(e,t)}).catch(function(){console.log("No internet connection found. App is running in offline mode.")})}(t,e),navigator.serviceWorker.ready.then(function(){console.log("This web app is being served cache-first by a service worker. To learn more, visit https://bit.ly/CRA-PWA")})):c(t,e)})}}({onUpdate:function(){}})}},[[41,2,0,5]]]); -//# sourceMappingURL=main.62369ba5.chunk.js.map \ No newline at end of file diff --git a/static/js/main.62369ba5.chunk.js.map b/static/js/main.62369ba5.chunk.js.map deleted file mode 100644 index eb12d34..0000000 --- a/static/js/main.62369ba5.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["fs.js","api/game.worker.js","mpqcmp/mpqcmp.worker.js","mpqcmp/MpqCmp.wasm","mpqcmp/ListFile.txt","../node_modules/peerjs/dist sync","serviceWorker.js","api/explode.js","api/codec.js","api/savefile.js","api/sound.js","api/load_spawn.js","api/packet.js","api/webrtc.js","api/loader.js","mpqcmp/compress.js","mpqcmp/index.js","App.js","index.js"],"names":["downloadFile","_callee","store","name","file","blob","url","lnk","C_Projects_diabloweb_diabloweb_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default","a","wrap","_context","prev","next","get","toLowerCase","sent","Blob","type","URL","createObjectURL","document","createElement","setAttribute","body","appendChild","click","removeChild","revokeObjectURL","console","error","concat","stop","downloadSaves","_callee2","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","_context2","undefined","keys","t0","Symbol","iterator","done","value","match","t1","return","finish","readFile","Promise","resolve","reject","reader","FileReader","onload","result","onerror","onabort","readAsArrayBuffer","uploadFile","_callee3","files","data","_context3","Uint8Array","set","abrupt","create_fs","_x7","_create_fs","apply","this","arguments","_callee5","load","_i","_Object$entries","_ref3","_ref2","_context5","IdbKvStore","Map","Object","json","entries","call","length","C_Projects_diabloweb_diabloweb_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__","window","DownloadFile","DownloadSaves","update","delete","remove","clear","download","upload","fileUrl","_fileUrl","C_Projects_diabloweb_diabloweb_node_modules_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__","mark","_callee4","_context4","_x8","t2","module","exports","Worker","__webpack_require__","p","webpackEmptyContext","req","e","Error","code","id","isLocalhost","Boolean","location","hostname","registerValidSW","swUrl","config","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","log","onUpdate","onSuccess","catch","CMP_BINARY","CMP_ASCII","CMP_NO_ERROR","CMP_INVALID_DICTSIZE","CMP_INVALID_MODE","CMP_BAD_DATA","CMP_ABORT","PKDCL_OK","PKDCL_STREAM_END","DistBits","DistCode","ExLenBits","LenBase","Uint16Array","LenBits","LenCode","ChBitsAsc","ChCodeAsc","GenDecodeTabs","positions","start_indexes","length_bits","elements","i","index","WasteBits","pWork","nBits","extra_bits","bit_buff","in_pos","in_bytes","read_buf","in_buff","DecodeLit","length_code","LengthCodes","extra_length_bits","extra_length","ctype","uncompressed_byte","offs2C34","offs2D34","offs2E34","offs2EB4","DecodeDist","rep_length","distance","dist_pos_code","DistPosCodes","dsize_bits","dsize_mask","explode","write_buf","buffer","ArrayBuffer","out_buff","pChCodeAsc","count","bits_asc","acc","add","GenAscTabs","next_literal","outputPos","minus_dist","target","source","subarray","copyWithin","Expand","W","Uint32Array","SHA1CircularShift","shift","SHA1","classCallCheck","digest","digest8","u8","u32","byteOffset","input","A","B","C","D","E","temp","Random","seed","codec_decode","password","size","last_size","sha","rand","key","k32","pw","charCodeAt","input8","codec_init_key","size32","data32","buf32","buf","j","pkzip_decompress","out_size","output","out_pos","dst","Math","min","src","hashtable","b","decrypt","decrypt8","encrypt","orig","hash","seed1","seed2","ch","path_name","pos","max","lastIndexOf","substring","Flags","MpqReader","byteLength","readHeader","createClass","sizeId","hashOffset","blockOffset","hashCount","blockCount","hashTable","readTable","blockTable","blockSize","offset","slice","keyA","keyB","fileIndex","block","info","filePos","cmpSize","fileSize","flags","raw","readRaw","numBlocks","floor","tableSize","blocks","oPos","uSize","tmp","init_sound","AudioContext","webkitAudioContext","StereoPannerNode","create_sound","duplicate_sound","play_sound","set_volume","stop_sound","delete_sound","context","sounds","create_sound_raw","channels","rate","createBuffer","getChannelData","gain","createGain","panner","pan","decodeAudioData","srcId","volume","loop","pow","relVolume","createBufferSource","node","connect","destination","start","stop_all","sound","slicedToArray","err","SpawnSizes","load_spawn","_x","_x2","_load_spawn","api","fs","spawn","regenerator_default","includes","axios","request","process","responseType","onDownloadProgress","onProgress","text","loaded","total","headers","Cache-Control","buffer_reader","read8","String","fromCharCode","toConsumableArray","read32","buffer_writer","write8","write32","rest","RejectionReason","JOIN_SUCCESS","JOIN_ALREADY_IN_GAME","JOIN_GAME_NOT_FOUND","JOIN_INCORRECT_PASSWORD","JOIN_VERSION_MISMATCH","JOIN_GAME_FULL","CREATE_GAME_EXISTS","read_packet","types","cls","values","find","packet","read","packet_size","write_packet","write","make_batch","read16","packets","push","reduce","sum","_ref","writer","write16","server_packet","version","_ref4","game_list","games","read_str","_ref5","_ref6","_ref7","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_ref9","write_str","join_accept","cookie","difficulty","_ref10","join_reject","reason","_ref11","_ref12","disconnect","_ref13","message","payload","_ref14","_ref15","turn","_ref16","batch","client_packet","_ref17","create_game","_ref18","_ref19","join_game","_ref20","_ref21","leave_game","drop_player","_ref22","_ref23","_ref24","_ref25","PeerID","Options","host","port","secure","webrtc_server","onMessage","onClose","_this","peer","Peer","on","conn","onConnect","players","myplr","random","onError","off","onOpen","setTimeout","_this2","_read_packet","pkt","send","handle","drop","mask","destroy","close","webrtc_client","_this3","pending","needUnreg","unreg","clearTimeout","timeout","_read_packet2","webrtc_open","server","client","_read_packet3","onRender","ctx","bitmap","images","clip","belt","transferFromImageBitmap","x","y","w","h","image","createImageData","putImageData","save","font","x0","y0","x1","y1","beginPath","rect","str","color","r","g","fillStyle","fillText","restore","updateBelt","audio","mpq","offscreen","canvas","getContext","alpha","worker","packetQueue","webrtc","addEventListener","action","func","_len","params","Array","_key","postMessage","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_ref8","setCursorPos","openKeyboard","stack","onExit","setCurrentSave","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","transfer","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","setInterval","load_game","do_load_game","MpqSize","ListSize","progress","loadFile","binary","_args","runWorker","objectSpread","updateProgress","loader","mpqsize","fHeader","fBinary","fList","header","header16","hashTablePos","blockTablePos","hashTableSize","blockTableSize","fHashTable","fBlockTable","list","listMap","hashStr","_name","NUM_TASKS","tasks","cSize","task","numFiles","_loop","_i2","_tasks","_loop2","_i3","_tasks2","outputSize","blockPos","_i4","_tasks3","_task","_task$result","_i5","weight","ready","MpqBinary","ListFile","t3","t4","t5","t6","trim","t7","split","map","filter","h1","h2","toString","padStart","t8","fLoad","all","t","forEach","run","res","fill","CompressMpq","parseFile","onDone","setState","props","compress","started","_x3","_x4","_compress","_this$state","react_default","className","href","onClick","style","width","round","htmlFor","accept","display","onChange","React","Component","reportLink","retail","searchParams","line","join","userAgent","ReactGA","initialize","pageview","TOUCH_MOVE","TOUCH_RMB","keyboardRule","styleSheets","sheet","cssRules","rule","CSSRule","MEDIA_RULE","conditionText","sub","selectorText","findKeyboardRule","Link","children","objectWithoutProperties","assign","rel","App","possibleConstructorReturn","getPrototypeOf","loading","dropping","has_spawn","cursorPos","touchControls","touchButtons","touchCtx","touchMods","touchBelt","maxKeyboard","onDrop","dataTransfer","items","kind","getAsFile","getDropFile","preventDefault","compressMpq","onDragEnter","setDropping","onDragOver","isDropFile","onDragLeave","showSaves","save_names","updateSaves","show_saves","onResize","exitPointerLock","onPointerLockChange","screen","innerHeight","height","pointerLocked","game","onMouseMove","_this$mousePos","mousePos","eventMods","onMouseDown","keyboard","element","classList","_this$mousePos2","requestPointerLock","mouseButton","onMouseUp","_this$mousePos3","onKeyDown","keyCode","showKeyboard","clearKeySel","onMenu","onKeyUp","onKeyboard","onKeyboardInner","onKeyboardBlur","parseSave","touchButton","touchCanvas","onTouchStart","blur","updateTouchButton","touches","_this$mousePos4","onTouchMove","_this$mousePos5","onTouchEnd","prevTc","_this$mousePos6","setTouchMod","fullscreenElement","requestFullscreen","setCanvas","setElement","setKeyboard","setTouch0","setTouch_","bind","assertThisInitialized","setTouch1","setTouch2","setTouch3","setTouchBelt_","setTouch4","setTouch5","inc","asyncToGenerator","errorObject","saveName","mapStackTrace","left","toFixed","top","focus","transform","keyboardNum","_this4","getBoundingClientRect","right","bottom","reload","_this5","saves","hero","getPassword","nameEnd","indexOf","level","getPlayerName","_this6","confirm","idx","slot","drawImage","used","Set","has","drawBelt","_this7","removeEventListener","event","category","passive","capture","alert","pointerLockElement","mozPointerLockElement","movementX","movementY","clientX","clientY","button","shiftKey","ctrlKey","altKey","len","setSelectionRange","valid","maxValue","parseInt","use","toggle","now","performance","beltTime","release","_this8","touchOther","btn","identifier","stick","panPos","v","original","_ret","dx","dy","step","offsetHeight","abs","_this9","plrClass","index_es","icon","faDownload","downloadSave","faTimes","removeSave","mpqcmp_CompressMpq","ref","App_Link","_this$state2","classNames","touch","active","onBlur","spellCheck","renderUi","ReactDOM","render","src_App_0","getElementById","origin","fetch","response","contentType","status","unregister","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.62369ba5.chunk.js","sourcesContent":["import IdbKvStore from 'idb-kv-store';\r\n\r\n/*const importStorage = () => new Promise((resolve, reject) => {\r\n let done = false;\r\n const frame = document.createElement('iframe');\r\n window.addEventListener('message', ({data}) => {\r\n if (data.method === 'storage' && !done) {\r\n done = true;\r\n resolve(data.files);\r\n frame.contentWindow.postMessage({method: 'clear'}, '*');\r\n }\r\n });\r\n frame.addEventListener('load', () => {\r\n frame.contentWindow.postMessage({method: 'transfer'}, '*');\r\n });\r\n frame.addEventListener('error', () => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n });\r\n frame.src = \"https://diablo.rivsoft.net/storage.html\";\r\n frame.style.display = \"none\";\r\n document.body.appendChild(frame);\r\n setTimeout(() => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n }, 10000);\r\n});*/\r\n\r\nasync function downloadFile(store, name) {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n const url = URL.createObjectURL(blob);\r\n const lnk = document.createElement('a');\r\n lnk.setAttribute('href', url);\r\n lnk.setAttribute('download', name);\r\n document.body.appendChild(lnk);\r\n lnk.click();\r\n document.body.removeChild(lnk);\r\n URL.revokeObjectURL(url);\r\n } else {\r\n console.error(`File ${name} does not exist`);\r\n }\r\n}\r\n\r\nasync function downloadSaves(store) {\r\n for (let name of await store.keys()) {\r\n if (name.match(/\\.sv$/i)) {\r\n downloadFile(store, name);\r\n }\r\n }\r\n}\r\n\r\nconst readFile = file => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n reader.readAsArrayBuffer(file);\r\n});\r\nasync function uploadFile(store, files, file) {\r\n const data = new Uint8Array(await readFile(file));\r\n files.set(file.name.toLowerCase(), data);\r\n return store.set(file.name.toLowerCase(), data);\r\n}\r\n\r\nexport default async function create_fs(load) {\r\n try {\r\n const store = new IdbKvStore('diablo_fs');\r\n const files = new Map();\r\n for (let [name, data] of Object.entries(await store.json())) {\r\n files.set(name, data);\r\n }\r\n /*if (load) {\r\n const files = await importStorage();\r\n if (files) {\r\n for (let [name, data] of files) {\r\n files.set(name, data);\r\n store.set(name, data);\r\n }\r\n }\r\n }*/\r\n window.DownloadFile = name => downloadFile(store, name);\r\n window.DownloadSaves = () => downloadSaves(store);\r\n return {\r\n files,\r\n update: (name, data) => store.set(name, data),\r\n delete: name => store.remove(name),\r\n clear: () => store.clear(),\r\n download: name => downloadFile(store, name),\r\n upload: file => uploadFile(store, files, file),\r\n fileUrl: async name => {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n return URL.createObjectURL(blob);\r\n }\r\n },\r\n };\r\n } catch (e) {\r\n window.DownloadFile = () => console.error('IndexedDB is not supported');\r\n window.DownloadSaves = () => console.error('IndexedDB is not supported');\r\n return {\r\n files: new Map(),\r\n update: () => Promise.resolve(),\r\n delete: () => Promise.resolve(),\r\n clear: () => Promise.resolve(),\r\n download: () => Promise.resolve(),\r\n upload: () => Promise.resolve(),\r\n fileUrl: () => Promise.resolve(),\r\n };\r\n } \r\n}\r\n","module.exports = function() {\n return new Worker(__webpack_public_path__ + \"b6959098d798174bd69f.worker.js\");\n};","module.exports = function() {\n return new Worker(__webpack_public_path__ + \"559256dc812e37cc8bb5.worker.js\");\n};","module.exports = __webpack_public_path__ + \"static/media/MpqCmp.8aa3c6dc.wasm\";","module.exports = __webpack_public_path__ + \"static/media/ListFile.b370797d.txt\";","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 72;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","export const CMP_BINARY = 0; // Binary compression\r\nexport const CMP_ASCII = 1; // Ascii compression\r\nexport const CMP_NO_ERROR = 0;\r\nexport const CMP_INVALID_DICTSIZE = 1;\r\nexport const CMP_INVALID_MODE = 2;\r\nexport const CMP_BAD_DATA = 3;\r\nexport const CMP_ABORT = 4;\r\nexport const CMP_IMPLODE_DICT_SIZE1 = 1024; // Dictionary size of 1024\r\nexport const CMP_IMPLODE_DICT_SIZE2 = 2048; // Dictionary size of 2048\r\nexport const CMP_IMPLODE_DICT_SIZE3 = 4096; // Dictionary size of 4096\r\n\r\nexport const PKDCL_OK = 0;\r\nexport const PKDCL_STREAM_END = 1; // All data from the input stream is read\r\nexport const PKDCL_NEED_DICT = 2; // Need more data (dictionary)\r\nexport const PKDCL_CONTINUE = 10; // Internal flag, not returned to user\r\nexport const PKDCL_GET_INPUT = 11; // Internal flag, not returned to user\r\n\r\nconst DistBits = new Uint8Array([\r\n 0x02, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,\r\n 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,\r\n 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,\r\n 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08\r\n]);\r\n\r\nconst DistCode = new Uint8Array([\r\n 0x03, 0x0D, 0x05, 0x19, 0x09, 0x11, 0x01, 0x3E, 0x1E, 0x2E, 0x0E, 0x36, 0x16, 0x26, 0x06, 0x3A,\r\n 0x1A, 0x2A, 0x0A, 0x32, 0x12, 0x22, 0x42, 0x02, 0x7C, 0x3C, 0x5C, 0x1C, 0x6C, 0x2C, 0x4C, 0x0C,\r\n 0x74, 0x34, 0x54, 0x14, 0x64, 0x24, 0x44, 0x04, 0x78, 0x38, 0x58, 0x18, 0x68, 0x28, 0x48, 0x08,\r\n 0xF0, 0x70, 0xB0, 0x30, 0xD0, 0x50, 0x90, 0x10, 0xE0, 0x60, 0xA0, 0x20, 0xC0, 0x40, 0x80, 0x00\r\n]);\r\n\r\nconst ExLenBits = new Uint8Array([\r\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08\r\n]);\r\n\r\nconst LenBase = new Uint16Array([\r\n 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,\r\n 0x0008, 0x000A, 0x000E, 0x0016, 0x0026, 0x0046, 0x0086, 0x0106\r\n]);\r\n\r\nconst LenBits = new Uint8Array([\r\n 0x03, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07\r\n]);\r\n\r\nconst LenCode = new Uint8Array([\r\n 0x05, 0x03, 0x01, 0x06, 0x0A, 0x02, 0x0C, 0x14, 0x04, 0x18, 0x08, 0x30, 0x10, 0x20, 0x40, 0x00\r\n]);\r\n\r\nconst ChBitsAsc = new Uint8Array([\r\n 0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x07, 0x0C, 0x0C, 0x07, 0x0C, 0x0C,\r\n 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,\r\n 0x04, 0x0A, 0x08, 0x0C, 0x0A, 0x0C, 0x0A, 0x08, 0x07, 0x07, 0x08, 0x09, 0x07, 0x06, 0x07, 0x08,\r\n 0x07, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x08, 0x08, 0x0C, 0x0B, 0x07, 0x09, 0x0B,\r\n 0x0C, 0x06, 0x07, 0x06, 0x06, 0x05, 0x07, 0x08, 0x08, 0x06, 0x0B, 0x09, 0x06, 0x07, 0x06, 0x06,\r\n 0x07, 0x0B, 0x06, 0x06, 0x06, 0x07, 0x09, 0x08, 0x09, 0x09, 0x0B, 0x08, 0x0B, 0x09, 0x0C, 0x08,\r\n 0x0C, 0x05, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x0B, 0x07, 0x05, 0x06, 0x05, 0x05,\r\n 0x06, 0x0A, 0x05, 0x05, 0x05, 0x05, 0x08, 0x07, 0x08, 0x08, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C,\r\n 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,\r\n 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,\r\n 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,\r\n 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,\r\n 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,\r\n 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,\r\n 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D,\r\n 0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D\r\n]);\r\n\r\nconst ChCodeAsc = new Uint16Array([\r\n 0x0490, 0x0FE0, 0x07E0, 0x0BE0, 0x03E0, 0x0DE0, 0x05E0, 0x09E0,\r\n 0x01E0, 0x00B8, 0x0062, 0x0EE0, 0x06E0, 0x0022, 0x0AE0, 0x02E0,\r\n 0x0CE0, 0x04E0, 0x08E0, 0x00E0, 0x0F60, 0x0760, 0x0B60, 0x0360,\r\n 0x0D60, 0x0560, 0x1240, 0x0960, 0x0160, 0x0E60, 0x0660, 0x0A60,\r\n 0x000F, 0x0250, 0x0038, 0x0260, 0x0050, 0x0C60, 0x0390, 0x00D8,\r\n 0x0042, 0x0002, 0x0058, 0x01B0, 0x007C, 0x0029, 0x003C, 0x0098,\r\n 0x005C, 0x0009, 0x001C, 0x006C, 0x002C, 0x004C, 0x0018, 0x000C,\r\n 0x0074, 0x00E8, 0x0068, 0x0460, 0x0090, 0x0034, 0x00B0, 0x0710,\r\n 0x0860, 0x0031, 0x0054, 0x0011, 0x0021, 0x0017, 0x0014, 0x00A8,\r\n 0x0028, 0x0001, 0x0310, 0x0130, 0x003E, 0x0064, 0x001E, 0x002E,\r\n 0x0024, 0x0510, 0x000E, 0x0036, 0x0016, 0x0044, 0x0030, 0x00C8,\r\n 0x01D0, 0x00D0, 0x0110, 0x0048, 0x0610, 0x0150, 0x0060, 0x0088,\r\n 0x0FA0, 0x0007, 0x0026, 0x0006, 0x003A, 0x001B, 0x001A, 0x002A,\r\n 0x000A, 0x000B, 0x0210, 0x0004, 0x0013, 0x0032, 0x0003, 0x001D,\r\n 0x0012, 0x0190, 0x000D, 0x0015, 0x0005, 0x0019, 0x0008, 0x0078,\r\n 0x00F0, 0x0070, 0x0290, 0x0410, 0x0010, 0x07A0, 0x0BA0, 0x03A0,\r\n 0x0240, 0x1C40, 0x0C40, 0x1440, 0x0440, 0x1840, 0x0840, 0x1040,\r\n 0x0040, 0x1F80, 0x0F80, 0x1780, 0x0780, 0x1B80, 0x0B80, 0x1380,\r\n 0x0380, 0x1D80, 0x0D80, 0x1580, 0x0580, 0x1980, 0x0980, 0x1180,\r\n 0x0180, 0x1E80, 0x0E80, 0x1680, 0x0680, 0x1A80, 0x0A80, 0x1280,\r\n 0x0280, 0x1C80, 0x0C80, 0x1480, 0x0480, 0x1880, 0x0880, 0x1080,\r\n 0x0080, 0x1F00, 0x0F00, 0x1700, 0x0700, 0x1B00, 0x0B00, 0x1300,\r\n 0x0DA0, 0x05A0, 0x09A0, 0x01A0, 0x0EA0, 0x06A0, 0x0AA0, 0x02A0,\r\n 0x0CA0, 0x04A0, 0x08A0, 0x00A0, 0x0F20, 0x0720, 0x0B20, 0x0320,\r\n 0x0D20, 0x0520, 0x0920, 0x0120, 0x0E20, 0x0620, 0x0A20, 0x0220,\r\n 0x0C20, 0x0420, 0x0820, 0x0020, 0x0FC0, 0x07C0, 0x0BC0, 0x03C0,\r\n 0x0DC0, 0x05C0, 0x09C0, 0x01C0, 0x0EC0, 0x06C0, 0x0AC0, 0x02C0,\r\n 0x0CC0, 0x04C0, 0x08C0, 0x00C0, 0x0F40, 0x0740, 0x0B40, 0x0340,\r\n 0x0300, 0x0D40, 0x1D00, 0x0D00, 0x1500, 0x0540, 0x0500, 0x1900,\r\n 0x0900, 0x0940, 0x1100, 0x0100, 0x1E00, 0x0E00, 0x0140, 0x1600,\r\n 0x0600, 0x1A00, 0x0E40, 0x0640, 0x0A40, 0x0A00, 0x1200, 0x0200,\r\n 0x1C00, 0x0C00, 0x1400, 0x0400, 0x1800, 0x0800, 0x1000, 0x0000 \r\n]);\r\n\r\n/**\r\n * @param {Uint8Array} positions [out] Table of positions\r\n * @param {Uint8Array} start_indexes Table of start indexes\r\n * @param {Uint8Array} length_bits Table of lengths. Each length is stored as number of bits\r\n * @param {number} elements Number of elements in start_indexes and length_bits\r\n */\r\nfunction GenDecodeTabs(positions, start_indexes, length_bits, elements) {\r\n for (let i = 0; i < elements; i++) {\r\n const length = 1 << length_bits[i]; // Get the length in bytes\r\n for (let index = start_indexes[i]; index < 0x100; index += length) {\r\n positions[index] = i;\r\n }\r\n }\r\n}\r\n\r\nfunction GenAscTabs(pWork) {\r\n let pChCodeAsc = 0xFF;\r\n\r\n for (let count = 0x00FF; pChCodeAsc >= 0; pChCodeAsc--, count--) {\r\n let bits_asc = pWork.ChBitsAsc[count];\r\n let acc;\r\n\r\n if (bits_asc <= 8) {\r\n const add = (1 << bits_asc);\r\n acc = ChCodeAsc[pChCodeAsc];\r\n\r\n do {\r\n pWork.offs2C34[acc] = count;\r\n acc += add;\r\n } while(acc < 0x100);\r\n } else if ((acc = (ChCodeAsc[pChCodeAsc] & 0xFF)) !== 0) {\r\n pWork.offs2C34[acc] = 0xFF;\r\n\r\n if (ChCodeAsc[pChCodeAsc] & 0x3F) {\r\n bits_asc -= 4;\r\n pWork.ChBitsAsc[count] = bits_asc;\r\n\r\n const add = (1 << bits_asc);\r\n acc = ChCodeAsc[pChCodeAsc] >> 4;\r\n do {\r\n pWork.offs2D34[acc] = count;\r\n acc += add;\r\n } while(acc < 0x100);\r\n } else {\r\n bits_asc -= 6;\r\n pWork.ChBitsAsc[count] = bits_asc;\r\n\r\n const add = (1 << bits_asc);\r\n acc = ChCodeAsc[pChCodeAsc] >> 6;\r\n do {\r\n pWork.offs2E34[acc] = count;\r\n acc += add;\r\n } while(acc < 0x80);\r\n }\r\n } else {\r\n bits_asc -= 8;\r\n pWork.ChBitsAsc[count] = bits_asc;\r\n\r\n const add = (1 << bits_asc);\r\n acc = ChCodeAsc[pChCodeAsc] >> 8;\r\n do {\r\n pWork.offs2EB4[acc] = count;\r\n acc += add;\r\n } while(acc < 0x100);\r\n }\r\n }\r\n}\r\n\r\n//-----------------------------------------------------------------------------\r\n// Removes given number of bits in the bit buffer. New bits are reloaded from\r\n// the input buffer, if needed.\r\n// Returns: PKDCL_OK: Operation was successful\r\n// PKDCL_STREAM_END: There are no more bits in the input buffer\r\nfunction WasteBits(pWork, nBits) {\r\n // If number of bits required is less than number of (bits in the buffer) ?\r\n if (nBits <= pWork.extra_bits) {\r\n pWork.extra_bits -= nBits;\r\n pWork.bit_buff >>>= nBits;\r\n return PKDCL_OK;\r\n }\r\n\r\n // Load input buffer if necessary\r\n pWork.bit_buff >>= pWork.extra_bits;\r\n if (pWork.in_pos === pWork.in_bytes) {\r\n if ((pWork.in_bytes = pWork.read_buf(pWork.in_buff)) === 0) {\r\n return PKDCL_STREAM_END;\r\n }\r\n pWork.in_pos = 0;\r\n }\r\n\r\n // Update bit buffer\r\n pWork.bit_buff |= (pWork.in_buff[pWork.in_pos++] << 8);\r\n pWork.bit_buff >>>= (nBits - pWork.extra_bits);\r\n pWork.extra_bits = (pWork.extra_bits - nBits) + 8;\r\n return PKDCL_OK;\r\n}\r\n\r\n//-----------------------------------------------------------------------------\r\n// Decodes next literal from the input (compressed) data.\r\n// Returns : 0x000: One byte 0x00\r\n// 0x001: One byte 0x01\r\n// ...\r\n// 0x0FF: One byte 0xFF\r\n// 0x100: Repetition, length of 0x02 bytes\r\n// 0x101: Repetition, length of 0x03 bytes\r\n// ...\r\n// 0x304: Repetition, length of 0x206 bytes\r\n// 0x305: End of stream\r\n// 0x306: Error\r\nfunction DecodeLit(pWork) {\r\n if(pWork.bit_buff & 1) {\r\n // Remove one bit from the input data\r\n if(WasteBits(pWork, 1)) {\r\n return 0x306;\r\n }\r\n\r\n // The next 8 bits hold the index to the length code table\r\n let length_code = pWork.LengthCodes[pWork.bit_buff & 0xFF];\r\n\r\n // Remove the apropriate number of bits\r\n if(WasteBits(pWork, pWork.LenBits[length_code])) {\r\n return 0x306;\r\n }\r\n\r\n // Are there some extra bits for the obtained length code ?\r\n const extra_length_bits = pWork.ExLenBits[length_code];\r\n if(extra_length_bits !== 0) {\r\n const extra_length = pWork.bit_buff & ((1 << extra_length_bits) - 1);\r\n if(WasteBits(pWork, extra_length_bits)) {\r\n if((length_code + extra_length) != 0x10E) {\r\n return 0x306;\r\n }\r\n }\r\n length_code = pWork.LenBase[length_code] + extra_length;\r\n }\r\n\r\n // In order to distinguish uncompressed byte from repetition length,\r\n // we have to add 0x100 to the length.\r\n return length_code + 0x100;\r\n }\r\n\r\n // Remove one bit from the input data\r\n if(WasteBits(pWork, 1)) {\r\n return 0x306;\r\n }\r\n\r\n // If the binary compression type, read 8 bits and return them as one byte.\r\n if(pWork.ctype === CMP_BINARY) {\r\n const uncompressed_byte = pWork.bit_buff & 0xFF;\r\n\r\n if(WasteBits(pWork, 8)) {\r\n return 0x306;\r\n }\r\n return uncompressed_byte;\r\n }\r\n\r\n // When ASCII compression ...\r\n let value;\r\n if (pWork.bit_buff & 0xFF) {\r\n value = pWork.offs2C34[pWork.bit_buff & 0xFF];\r\n\r\n if (value == 0xFF) {\r\n if (pWork.bit_buff & 0x3F) {\r\n if (WasteBits(pWork, 4)) {\r\n return 0x306;\r\n }\r\n\r\n value = pWork.offs2D34[pWork.bit_buff & 0xFF];\r\n } else {\r\n if (WasteBits(pWork, 6)) {\r\n return 0x306;\r\n }\r\n\r\n value = pWork.offs2E34[pWork.bit_buff & 0x7F];\r\n }\r\n }\r\n } else {\r\n if(WasteBits(pWork, 8)) {\r\n return 0x306;\r\n }\r\n\r\n value = pWork.offs2EB4[pWork.bit_buff & 0xFF];\r\n }\r\n\r\n return WasteBits(pWork, pWork.ChBitsAsc[value]) ? 0x306 : value;\r\n}\r\n\r\n//-----------------------------------------------------------------------------\r\n// Decodes the distance of the repetition, backwards relative to the\r\n// current output buffer position\r\nfunction DecodeDist(pWork, rep_length) {\r\n // Next 2-8 bits in the input buffer is the distance position code\r\n const dist_pos_code = pWork.DistPosCodes[pWork.bit_buff & 0xFF];\r\n const dist_pos_bits = pWork.DistBits[dist_pos_code];\r\n if (WasteBits(pWork, dist_pos_bits)) {\r\n return 0;\r\n }\r\n\r\n let distance;\r\n if (rep_length === 2) {\r\n // If the repetition is only 2 bytes length,\r\n // then take 2 bits from the stream in order to get the distance\r\n distance = (dist_pos_code << 2) | (pWork.bit_buff & 0x03);\r\n if (WasteBits(pWork, 2)) {\r\n return 0;\r\n }\r\n } else {\r\n // If the repetition is more than 2 bytes length,\r\n // then take \"dsize_bits\" bits in order to get the distance\r\n distance = (dist_pos_code << pWork.dsize_bits) | (pWork.bit_buff & pWork.dsize_mask);\r\n if (WasteBits(pWork, pWork.dsize_bits)) {\r\n return 0;\r\n }\r\n }\r\n return distance + 1;\r\n}\r\n\r\nfunction Expand(pWork) {\r\n let outputPos = 0x1000; // Initialize output buffer position\r\n\r\n // Decode the next literal from the input data.\r\n // The returned literal can either be an uncompressed byte (next_literal < 0x100)\r\n // or an encoded length of the repeating byte sequence that\r\n // is to be copied to the current buffer position\r\n let result, next_literal;\r\n while ((result = next_literal = DecodeLit(pWork)) < 0x305) {\r\n // If the literal is greater than 0x100, it holds length\r\n // of repeating byte sequence\r\n // literal of 0x100 means repeating sequence of 0x2 bytes\r\n // literal of 0x101 means repeating sequence of 0x3 bytes\r\n // ...\r\n // literal of 0x305 means repeating sequence of 0x207 bytes\r\n if(next_literal >= 0x100) {\r\n // Get the length of the repeating sequence.\r\n // Note that the repeating block may overlap the current output position,\r\n // for example if there was a sequence of equal bytes\r\n let rep_length = next_literal - 0xFE;\r\n // Get backward distance to the repetition\r\n const minus_dist = DecodeDist(pWork, rep_length);\r\n if (minus_dist === 0) {\r\n result = 0x306;\r\n break;\r\n }\r\n\r\n // Target and source pointer\r\n let target = outputPos;\r\n let source = target - minus_dist;\r\n\r\n // Update buffer output position\r\n outputPos += rep_length;\r\n\r\n // Copy the repeating sequence\r\n const out_buff = pWork.out_buff;\r\n while (rep_length-- > 0) {\r\n out_buff[target++] = out_buff[source++];\r\n }\r\n } else {\r\n pWork.out_buff[outputPos++] = next_literal;\r\n }\r\n\r\n // Flush the output buffer, if number of extracted bytes has reached the end\r\n if (outputPos >= 0x2000) {\r\n // Copy decompressed data into user buffer\r\n pWork.write_buf(pWork.out_buff.subarray(0x1000, 0x2000));\r\n\r\n // Now copy the decompressed data to the first half of the buffer.\r\n // This is needed because the decompression might reuse them as repetitions.\r\n // Note that if the output buffer overflowed previously, the extra decompressed bytes\r\n // are stored in \"out_buff_overflow\", and they will now be\r\n // within decompressed part of the output buffer.\r\n pWork.out_buff.copyWithin(0, 0x1000, outputPos);\r\n outputPos -= 0x1000;\r\n }\r\n }\r\n\r\n // Flush any remaining decompressed bytes\r\n pWork.write_buf(pWork.out_buff.subarray(0x1000, outputPos));\r\n return result;\r\n}\r\n\r\n//-----------------------------------------------------------------------------\r\n// Main exploding function.\r\nexport function explode(read_buf, write_buf) {\r\n const buffer = new ArrayBuffer(0x3104);\r\n const pWork = {\r\n read_buf,\r\n write_buf,\r\n in_pos: 3,\r\n extra_bits: 0,\r\n in_buff: new Uint8Array(buffer, 0, 0x800),\r\n DistPosCodes: new Uint8Array(buffer, 0x800, 0x100),\r\n LengthCodes: new Uint8Array(buffer, 0x900, 0x100),\r\n offs2C34: new Uint8Array(buffer, 0xA00, 0x100),\r\n offs2D34: new Uint8Array(buffer, 0xB00, 0x100),\r\n offs2E34: new Uint8Array(buffer, 0xC00, 0x80),\r\n offs2EB4: new Uint8Array(buffer, 0xC80, 0x100),\r\n ChBitsAsc: new Uint8Array(buffer, 0xD80, 0x100),\r\n DistBits: new Uint8Array(buffer, 0xE80, 0x40),\r\n LenBits: new Uint8Array(buffer, 0xEC0, 0x10),\r\n ExLenBits: new Uint8Array(buffer, 0xED0, 0x10),\r\n LenBase: new Uint16Array(buffer, 0xEE0, 0x10),\r\n out_buff: new Uint8Array(buffer, 0xF00, 0x2204),\r\n };\r\n pWork.in_bytes = read_buf(pWork.in_buff);\r\n if (pWork.in_bytes <= 4) {\r\n return CMP_BAD_DATA;\r\n }\r\n pWork.ctype = pWork.in_buff[0];\r\n pWork.dsize_bits = pWork.in_buff[1];\r\n pWork.bit_buff = pWork.in_buff[2];\r\n\r\n // Test for the valid dictionary size\r\n if(4 > pWork.dsize_bits || pWork.dsize_bits > 6) {\r\n return CMP_INVALID_DICTSIZE;\r\n }\r\n\r\n pWork.dsize_mask = 0xFFFF >> (0x10 - pWork.dsize_bits); // Shifted by 'sar' instruction\r\n\r\n if(pWork.ctype != CMP_BINARY) {\r\n if(pWork.ctype != CMP_ASCII) {\r\n return CMP_INVALID_MODE;\r\n }\r\n\r\n pWork.ChBitsAsc.set(ChBitsAsc);\r\n GenAscTabs(pWork);\r\n }\r\n\r\n pWork.LenBits.set(LenBits);\r\n GenDecodeTabs(pWork.LengthCodes, LenCode, pWork.LenBits, pWork.LenBits.length);\r\n pWork.ExLenBits.set(ExLenBits);\r\n pWork.LenBase.set(LenBase);\r\n pWork.DistBits.set(DistBits);\r\n GenDecodeTabs(pWork.DistPosCodes, DistCode, pWork.DistBits, pWork.DistBits.length);\r\n if(Expand(pWork) !== 0x306) {\r\n return CMP_NO_ERROR;\r\n }\r\n \r\n return CMP_ABORT;\r\n}\r\n\r\nexport default explode;\r\n","const W = new Uint32Array(80);\r\n\r\nconst SHA1CircularShift = (shift, value) => ((value << shift) | (value >> (32 - shift)));\r\n\r\nclass SHA1 {\r\n digest = new Uint32Array(5);\r\n count = 0;\r\n\r\n input8(u8) {\r\n const u32 = new Uint32Array(u8.buffer, u8.byteOffset, 16);\r\n this.input(u32);\r\n }\r\n input(u32) {\r\n this.count += u32.length * 32;\r\n for (let i = 0; i < 16; ++i) {\r\n W[i] = u32[i];\r\n }\r\n for (let i = 16; i < 80; ++i) {\r\n W[i] = W[i - 16] ^ W[i - 14] ^ W[i - 8] ^ W[i - 3];\r\n }\r\n let A = this.digest[0];\r\n let B = this.digest[1];\r\n let C = this.digest[2];\r\n let D = this.digest[3];\r\n let E = this.digest[4];\r\n\r\n for (let i = 0; i < 20; i++) {\r\n const temp = SHA1CircularShift(5, A) + ((B & C) | ((~B) & D)) + E + W[i] + 0x5A827999;\r\n E = D;\r\n D = C;\r\n C = SHA1CircularShift(30, B);\r\n B = A;\r\n A = temp | 0;\r\n }\r\n\r\n for (let i = 20; i < 40; i++) {\r\n const temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1;\r\n E = D;\r\n D = C;\r\n C = SHA1CircularShift(30, B);\r\n B = A;\r\n A = temp | 0;\r\n }\r\n\r\n for (let i = 40; i < 60; i++) {\r\n const temp = SHA1CircularShift(5, A) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC;\r\n E = D;\r\n D = C;\r\n C = SHA1CircularShift(30, B);\r\n B = A;\r\n A = temp | 0;\r\n }\r\n\r\n for (let i = 60; i < 80; i++) {\r\n const temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6;\r\n E = D;\r\n D = C;\r\n C = SHA1CircularShift(30, B);\r\n B = A;\r\n A = temp | 0;\r\n }\r\n\r\n this.digest[0] += A;\r\n this.digest[1] += B;\r\n this.digest[2] += C;\r\n this.digest[3] += D;\r\n this.digest[4] += E;\r\n }\r\n\r\n constructor() {\r\n\t this.digest[0] = 0x67452301;\r\n\t this.digest[1] = 0xEFCDAB89;\r\n\t this.digest[2] = 0x98BADCFE;\r\n\t this.digest[3] = 0x10325476;\r\n this.digest[4] = 0xC3D2E1F0;\r\n \r\n this.digest8 = new Uint8Array(this.digest.buffer);\r\n }\r\n}\r\n\r\nclass Random {\r\n constructor(seed) {\r\n this.seed = seed;\r\n }\r\n next() {\r\n this.seed = (((this.seed * 3) << 16) + ((this.seed * 67) << 8) + (this.seed * 253) + 2531011) | 0;\r\n return (this.seed >> 16) & 0x7FFF;\r\n }\r\n}\r\n\r\nfunction codec_init_key(password) {\r\n const rand = new Random(0x7058);\r\n const key = new Uint8Array(136);\r\n const k32 = new Uint32Array(key.buffer);\r\n for (let i = 0; i < 136; ++i) {\r\n key[i] = rand.next();\r\n }\r\n const pw = new Uint8Array(64);\r\n for (let i = 0; i < 64; ++i) {\r\n pw[i] = password.charCodeAt(i % password.length);\r\n }\r\n\r\n let sha = new SHA1();\r\n sha.input8(pw);\r\n\r\n for (let i = 0; i < 34; ++i) {\r\n k32[i] ^= sha.digest[i % sha.digest.length];\r\n }\r\n\r\n sha = new SHA1();\r\n sha.input(k32.subarray(18));\r\n return sha;\r\n}\r\n\r\nexport default function codec_decode(data, password) {\r\n if (data.length <= 8) {\r\n return;\r\n }\r\n const size = data.length - 8;\r\n if (size % 64) {\r\n return;\r\n }\r\n\r\n if (data[size + 4]) {\r\n return;\r\n }\r\n\r\n const last_size = data[size + 5];\r\n const result_size = size + last_size - 64;\r\n const result = new Uint8Array(result_size);\r\n\r\n const sha = codec_init_key(password);\r\n const size32 = size >> 2;\r\n const data32 = new Uint32Array(data.buffer, data.byteOffset, size32 + 1);\r\n const buf32 = new Uint32Array(16);\r\n const buf = new Uint8Array(buf32.buffer);\r\n\r\n for (let i = 0; i < size32; i += 16) {\r\n for (let j = 0; j < 16; ++j) {\r\n buf32[j] = data32[i + j] ^ sha.digest[j % sha.digest.length];\r\n }\r\n sha.input(buf32);\r\n result.set(i === size32 - 16 ? buf.subarray(0, last_size) : buf, i * 4);\r\n }\r\n if (data32[size32] !== sha.digest[0]) {\r\n return;\r\n }\r\n return result;\r\n}\r\n","import { explode } from './explode';\r\nimport codec_decode from './codec';\r\n\r\nfunction pkzip_decompress(data, out_size) {\r\n if (data.length === out_size) {\r\n return data;\r\n }\r\n\r\n const output = new Uint8Array(out_size);\r\n let in_pos = 0;\r\n let out_pos = 0;\r\n function read_buf(dst) {\r\n const count = Math.min(data.length - in_pos, dst.length);\r\n dst.set(data.subarray(in_pos, count));\r\n in_pos += count;\r\n return count;\r\n }\r\n function write_buf(src) {\r\n if (out_pos + src.length > out_size) {\r\n throw Error('decompress buffer overflow');\r\n }\r\n output.set(src, out_pos);\r\n out_pos += src.length;\r\n }\r\n\r\n if (explode(read_buf, write_buf) || out_pos !== out_size) {\r\n return null;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nconst hashtable = (function() {\r\n const hashtable = new Uint32Array(1280);\r\n let seed = 0x00100001;\r\n for (let i = 0; i < 256; i++) {\r\n for (let j = i; j < 1280; j += 256) {\r\n seed = (seed * 125 + 3) % 0x2AAAAB;\r\n const a = (seed & 0xFFFF) << 16;\r\n seed = (seed * 125 + 3) % 0x2AAAAB;\r\n const b = (seed & 0xFFFF);\r\n hashtable[j] = a | b;\r\n }\r\n }\r\n return hashtable;\r\n})();\r\nexport function decrypt(u32, key) {\r\n let seed = 0xEEEEEEEE;\r\n for (let i = 0; i < u32.length; ++i) {\r\n seed += hashtable[0x400 + (key & 0xFF)];\r\n u32[i] ^= seed + key;\r\n seed = (u32[i] + seed * 33 + 3) | 0;\r\n key = ((~key << 0x15) + 0x11111111) | (key >>> 0x0B);\r\n }\r\n}\r\nexport function decrypt8(u8, key) {\r\n decrypt(new Uint32Array(u8.buffer, u8.byteOffset, u8.length >> 2), key);\r\n}\r\nexport function encrypt(u32, key) {\r\n let seed = 0xEEEEEEEE;\r\n for (let i = 0; i < u32.length; ++i) {\r\n seed += hashtable[0x400 + (key & 0xFF)];\r\n const orig = u32[i];\r\n u32[i] ^= seed + key;\r\n seed = (orig + seed * 33 + 3) | 0;\r\n key = ((~key << 0x15) + 0x11111111) | (key >>> 0x0B);\r\n }\r\n}\r\nexport function encrypt8(u8, key) {\r\n encrypt(new Uint32Array(u8.buffer, u8.byteOffset, u8.length >> 2), key);\r\n}\r\nexport function hash(name, type) {\r\n let seed1 = 0x7FED7FED;\r\n let seed2 = 0xEEEEEEEE;\r\n for (let i = 0; i < name.length; ++i) {\r\n let ch = name.charCodeAt(i);\r\n if (ch >= 0x61 && ch <= 0x7A) {\r\n ch -= 0x20;\r\n }\r\n if (ch === 0x2F) {\r\n ch = 0x5C;\r\n }\r\n seed1 = hashtable[type * 256 + ch] ^ (seed1 + seed2);\r\n seed2 = (ch + seed1 + seed2 * 33 + 3) | 0;\r\n }\r\n return seed1 >>> 0;\r\n}\r\n\r\nexport function path_name(name) {\r\n const pos = Math.max(name.lastIndexOf('/'), name.lastIndexOf('\\\\'));\r\n return name.substring(pos + 1);\r\n}\r\n\r\nconst Flags = {\r\n CompressPkWare: 0x00000100,\r\n CompressMulti: 0x00000200,\r\n Compressed: 0x0000FF00,\r\n Encrypted: 0x00010000,\r\n FixSeed: 0x00020000,\r\n PatchFile: 0x00100000,\r\n SingleUnit: 0x01000000,\r\n DummyFile: 0x02000000,\r\n SectorCrc: 0x04000000,\r\n Exists: 0x80000000,\r\n};\r\n\r\nexport class MpqReader {\r\n constructor(buffer) {\r\n this.buffer = buffer;\r\n this.u8 = new Uint8Array(buffer);\r\n this.u32 = new Uint32Array(buffer, 0, buffer.byteLength >> 2);\r\n\r\n this.readHeader();\r\n }\r\n\r\n readHeader() {\r\n const {u8, u32} = this;\r\n if (u32[0] !== 0x1A51504D) {\r\n throw Error('invalid MPQ header');\r\n }\r\n const sizeId = u8[14] + (u8[15] << 8);\r\n const hashOffset = u32[4];\r\n const blockOffset = u32[5];\r\n const hashCount = u32[6];\r\n const blockCount = u32[7];\r\n this.hashTable = this.readTable(hashOffset, hashCount, \"(hash table)\");\r\n this.blockTable = this.readTable(blockOffset, blockCount, \"(block table)\");\r\n this.blockSize = 1 << (9 + sizeId);\r\n }\r\n\r\n readTable(offset, count, key) {\r\n const buffer = new Uint32Array(this.buffer.slice(offset, offset + count * 16));\r\n decrypt(buffer, hash(key, 3));\r\n return buffer;\r\n }\r\n\r\n fileIndex(name) {\r\n const {hashTable} = this;\r\n const length = hashTable.length >> 2;\r\n const index = hash(name, 0) % length;\r\n const keyA = hash(name, 1), keyB = hash(name, 2);\r\n for (let i = index, count = 0; hashTable[i * 4 + 3] !== 0xFFFFFFFF && count < length; i = (i + 1) % length, ++count) {\r\n if (hashTable[i * 4] === keyA && hashTable[i * 4 + 1] === keyB && hashTable[i * 4 + 3] !== 0xFFFFFFFE) {\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n readRaw(name) {\r\n const index = this.fileIndex(name);\r\n if (index == null) {\r\n return;\r\n }\r\n const block = this.hashTable[index * 4 + 3];\r\n const info = {\r\n filePos: this.blockTable[block * 4],\r\n cmpSize: this.blockTable[block * 4 + 1],\r\n fileSize: this.blockTable[block * 4 + 2],\r\n flags: this.blockTable[block * 4 + 3],\r\n key: hash(path_name(name), 3),\r\n };\r\n if ((info.flags & Flags.PatchFile) || info.filePos + info.cmpSize > this.buffer.byteLength) {\r\n return;\r\n }\r\n if (!(info.flags & Flags.Compressed)) {\r\n info.cmpSize = info.fileSize;\r\n }\r\n if (info.flags & Flags.FixSeed) {\r\n info.key = (info.key + info.filePos) ^ info.fileSize;\r\n }\r\n return {info, data: new Uint8Array(this.buffer, info.filePos, info.cmpSize)};\r\n }\r\n\r\n read(name) {\r\n const raw = this.readRaw(name);\r\n if (!raw) {\r\n return;\r\n }\r\n let {info, data} = raw;\r\n data = data.slice();\r\n\r\n if (info.flags & Flags.SingleUnit) {\r\n if (info.flags & Flags.Encrypted) {\r\n decrypt8(data, info.key);\r\n }\r\n if (info.flags & Flags.CompressMulti) {\r\n return;\r\n } else if (info.flags & Flags.CompressPkWare) {\r\n return pkzip_decompress(data, info.fileSize);\r\n }\r\n return data;\r\n } else if (!(info.flags & Flags.Compressed)) {\r\n if (info.flags & Flags.Encrypted) {\r\n for (let i = 0; i < info.fileSize; i += this.blockSize) {\r\n decrypt8(data.subarray(i, Math.min(info.fileSize, i + this.blockSize)), info.key + i / this.blockSize);\r\n }\r\n }\r\n return data;\r\n } else {\r\n const numBlocks = Math.floor((info.fileSize + this.blockSize - 1) / this.blockSize);\r\n const tableSize = numBlocks + 1;\r\n if (data.length < tableSize * 4) {\r\n return;\r\n }\r\n const blocks = new Uint32Array(data.buffer, 0, tableSize);\r\n if (info.flags & Flags.Encrypted) {\r\n decrypt(blocks, info.key - 1);\r\n }\r\n const output = new Uint8Array(info.fileSize);\r\n for (let i = 0; i < numBlocks; ++i) {\r\n const oPos = i * this.blockSize;\r\n const uSize = Math.min(this.blockSize, info.fileSize - oPos);\r\n if (blocks[i + 1] > data.length) {\r\n return;\r\n }\r\n let tmp = data.subarray(blocks[i], blocks[i + 1]);\r\n if (info.flags & Flags.Encrypted) {\r\n // this is not safe, but our files are small enough\r\n decrypt8(tmp, info.key + i);\r\n }\r\n if (info.flags & Flags.CompressMulti) {\r\n return;\r\n } else if (info.flags & Flags.CompressPkWare) {\r\n tmp = pkzip_decompress(tmp, uSize);\r\n }\r\n if (!tmp || tmp.length !== uSize) {\r\n return;\r\n }\r\n output.set(tmp, oPos);\r\n }\r\n return output;\r\n }\r\n }\r\n}\r\n\r\nfunction getPassword(name) {\r\n if (name.match(/spawn\\d+\\.sv/i)) {\r\n return 'lshbkfg1'; // single, spawn\r\n } else if (name.match(/share_\\d+\\.sv/i)) {\r\n return 'lshbkfg1'; // multi, spawn\r\n } else if (name.match(/multi_\\d+\\.sv/i)) {\r\n return 'szqnlsk1'; // multi, retail\r\n } else {\r\n return 'xrgyrkj1'; // single, retail\r\n }\r\n}\r\n\r\nexport default function getPlayerName(data, name) {\r\n try {\r\n const reader = new MpqReader(data);\r\n const hero = codec_decode(reader.read(\"hero\"), getPassword(name));\r\n const nameEnd = hero.indexOf(0, 16);\r\n const result = {};\r\n result.name = String.fromCharCode(...hero.subarray(16, nameEnd));\r\n result.cls = hero[48];\r\n result.level = hero[53];\r\n return result;\r\n } catch (e) {\r\n return null;\r\n }\r\n}\r\n","function no_sound() {\r\n return {\r\n create_sound: () => 0,\r\n duplicate_sound: () => 0,\r\n play_sound: () => undefined,\r\n set_volume: () => undefined,\r\n stop_sound: () => undefined,\r\n delete_sound: () => undefined,\r\n };\r\n}\r\n\r\nfunction decodeAudioData(context, buffer) {\r\n return new Promise((resolve, reject) => {\r\n context.decodeAudioData(buffer, resolve, reject);\r\n });\r\n}\r\n\r\nexport default function init_sound() {\r\n const AudioContext = window.AudioContext || window.webkitAudioContext;\r\n const StereoPannerNode = window.StereoPannerNode;\r\n if (!AudioContext) {\r\n return no_sound();\r\n }\r\n\r\n let context = null;\r\n try {\r\n context = new AudioContext();\r\n } catch (e) {\r\n }\r\n const sounds = new Map();\r\n\r\n return {\r\n create_sound_raw(id, data, length, channels, rate) {\r\n if (!context) {\r\n return;\r\n }\r\n const buffer = context.createBuffer(channels, length, rate);\r\n for (let i = 0; i < channels; ++i) {\r\n buffer.getChannelData(i).set(data.subarray(i * length, i * length + length));\r\n }\r\n sounds.set(id, {\r\n buffer: Promise.resolve(buffer),\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n create_sound(id, data) {\r\n if (!context) {\r\n return;\r\n }\r\n const buffer = decodeAudioData(context, data.buffer);\r\n sounds.set(id, {\r\n buffer,\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n duplicate_sound(id, srcId) {\r\n if (!context) {\r\n return;\r\n }\r\n const src = sounds.get(srcId);\r\n if (!src) {\r\n return;\r\n }\r\n sounds.set(id, {\r\n buffer: src.buffer,\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n play_sound(id, volume, pan, loop) {\r\n const src = sounds.get(id);\r\n if (src) {\r\n if (src.source) {\r\n src.source.then(source => source.stop());\r\n }\r\n src.gain.gain.value = Math.pow(2.0, volume / 1000.0);\r\n const relVolume = Math.pow(2.0, pan / 1000.0);\r\n if (src.panner) {\r\n src.panner.pan.value = 1.0 - 2.0 / (1.0 + relVolume);\r\n }\r\n src.source = src.buffer.then(buffer => {\r\n const source = context.createBufferSource();\r\n source.buffer = buffer;\r\n source.loop = !!loop;\r\n let node = source.connect(src.gain);\r\n if (src.panner) {\r\n node = node.connect(src.panner);\r\n }\r\n node.connect(context.destination);\r\n source.start();\r\n return source;\r\n });\r\n }\r\n },\r\n set_volume(id, volume) {\r\n const src = sounds.get(id);\r\n if (src) {\r\n src.gain.gain.value = Math.pow(2.0, volume / 1000.0);\r\n }\r\n },\r\n stop_sound(id) {\r\n const src = sounds.get(id);\r\n if (src && src.source) {\r\n src.source.then(source => source.stop());\r\n delete src.source;\r\n }\r\n },\r\n delete_sound(id) {\r\n const src = sounds.get(id);\r\n if (src && src.source) {\r\n src.source.then(source => source.stop());\r\n }\r\n sounds.delete(id);\r\n },\r\n\r\n stop_all() {\r\n for (let [, sound] of sounds) {\r\n if (sound.source) {\r\n sound.source.then(source => source.stop());\r\n }\r\n }\r\n sounds.clear();\r\n context = null;\r\n }\r\n };\r\n}\r\n","import axios from 'axios';\r\n\r\nconst SpawnSizes = [50274091, 25830791];\r\n\r\nexport { SpawnSizes };\r\n\r\nexport default async function load_spawn(api, fs) {\r\n let file = fs.files.get('spawn.mpq');\r\n if (file && !SpawnSizes.includes(file.byteLength)) {\r\n fs.files.delete('spawn.mpq');\r\n await fs.delete('spawn.mpq');\r\n file = null;\r\n }\r\n if (!file) {\r\n const spawn = await axios.request({\r\n url: process.env.PUBLIC_URL + '/spawn.mpq',\r\n responseType: 'arraybuffer',\r\n onDownloadProgress: e => {\r\n if (api.onProgress) {\r\n api.onProgress({text: 'Downloading...', loaded: e.loaded, total: e.total || SpawnSizes[1]});\r\n }\r\n },\r\n headers: {\r\n 'Cache-Control': 'max-age=31536000'\r\n }\r\n });\r\n if (!SpawnSizes.includes(spawn.data.byteLength)) {\r\n throw Error(\"Invalid spawn.mpq size. Try clearing cache and refreshing the page.\");\r\n }\r\n const data = new Uint8Array(spawn.data);\r\n fs.files.set('spawn.mpq', data);\r\n fs.update('spawn.mpq', data.slice());\r\n }\r\n return fs;\r\n}\r\n","export class buffer_reader {\r\n constructor(buffer) {\r\n this.buffer = (buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer));\r\n this.pos = 0;\r\n }\r\n done() {\r\n return this.pos === this.buffer.byteLength;\r\n }\r\n read8() {\r\n if (this.pos >= this.buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n return this.buffer[this.pos++];\r\n }\r\n read16() {\r\n const {pos, buffer} = this;\r\n if (pos + 2 > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = buffer[pos] | (buffer[pos + 1] << 8);\r\n this.pos += 2;\r\n return result;\r\n }\r\n read32() {\r\n const {pos, buffer} = this;\r\n if (pos + 4 > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = buffer[pos] | (buffer[pos + 1] << 8) | (buffer[pos + 2] << 16) | (buffer[pos + 3] << 24);\r\n this.pos += 4;\r\n return result;\r\n }\r\n read_str() {\r\n const length = this.read8();\r\n const {pos, buffer} = this;\r\n if (pos + length > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = String.fromCharCode(...buffer.subarray(pos, pos + length));\r\n this.pos += length;\r\n return result;\r\n }\r\n read_buf() {\r\n const size = this.read32();\r\n const result = this.buffer.subarray(this.pos, this.pos + size);\r\n this.pos += size;\r\n return result;\r\n }\r\n}\r\nexport class buffer_writer {\r\n constructor(length) {\r\n this.buffer = new Uint8Array(length);\r\n this.pos = 0;\r\n }\r\n get result() {\r\n return this.buffer.buffer;\r\n }\r\n write8(value) {\r\n this.buffer[this.pos++] = value;\r\n return this;\r\n }\r\n write16(value) {\r\n const {pos, buffer} = this;\r\n buffer[pos] = value;\r\n buffer[pos + 1] = value >> 8;\r\n this.pos += 2;\r\n return this;\r\n }\r\n write32(value) {\r\n const {pos, buffer} = this;\r\n buffer[pos] = value;\r\n buffer[pos + 1] = value >> 8;\r\n buffer[pos + 2] = value >> 16;\r\n buffer[pos + 3] = value >> 24;\r\n this.pos += 4;\r\n return this;\r\n }\r\n write_str(value) {\r\n const length = value.length;\r\n this.write8(length);\r\n const {pos, buffer} = this;\r\n for (let i = 0; i < length; ++i) {\r\n buffer[pos + i] = value.charCodeAt(i);\r\n }\r\n this.pos += length;\r\n return this;\r\n }\r\n rest(value) {\r\n this.buffer.set(value, this.pos);\r\n this.pos += value.byteLength;\r\n return this;\r\n }\r\n write_buf(value) {\r\n this.write32(value.byteLength);\r\n this.rest(value);\r\n return this;\r\n }\r\n}\r\n\r\nexport const RejectionReason = {\r\n JOIN_SUCCESS: 0x00,\r\n JOIN_ALREADY_IN_GAME: 0x01,\r\n JOIN_GAME_NOT_FOUND: 0x02,\r\n JOIN_INCORRECT_PASSWORD: 0x03,\r\n JOIN_VERSION_MISMATCH: 0x04,\r\n JOIN_GAME_FULL: 0x05,\r\n CREATE_GAME_EXISTS: 0x06,\r\n};\r\n\r\nexport function read_packet(reader, types) {\r\n const code = reader.read8();\r\n const cls = Object.values(types).find(cls => cls.code === code);\r\n if (!cls) {\r\n throw Error('invalid packet code');\r\n }\r\n return {type: cls, packet: cls.read(reader)};\r\n}\r\nexport function packet_size(type, packet) {\r\n return (typeof type.size === \"function\" ? type.size(packet) : type.size) + 1;\r\n}\r\nexport function write_packet(type, packet) {\r\n const size = packet_size(type, packet);\r\n return type.write(new buffer_writer(size).write8(type.code), packet).result;\r\n}\r\n\r\nexport function make_batch(types) {\r\n return {\r\n code: 0x00,\r\n read: reader => {\r\n const count = reader.read16();\r\n const packets = [];\r\n for (let i = 0; i < count; ++i) {\r\n packets.push(read_packet(reader, types()));\r\n }\r\n return packets;\r\n },\r\n size: packets => packets.reduce((sum, {type, packet}) => sum + packet_size(type, packet), 2),\r\n write: (writer, packets) => {\r\n writer.write16(packets.length);\r\n for (let {type, packet} of packets) {\r\n type.write(writer.write8(type.code), packet);\r\n }\r\n return writer;\r\n },\r\n };\r\n}\r\n\r\nexport const server_packet = {\r\n info: {\r\n code: 0x32,\r\n read: reader => ({version: reader.read32()}),\r\n size: 4,\r\n write: (writer, {version}) => writer.write32(version),\r\n },\r\n game_list: {\r\n code: 0x21,\r\n read: reader => {\r\n const count = reader.read16();\r\n const games = [];\r\n for (let i = 0; i < count; ++i) {\r\n games.push({type: reader.read32(), name: reader.read_str()});\r\n }\r\n return {games};\r\n },\r\n size: ({games}) => games.reduce((sum, {name}) => sum + 5 + name.length, 2),\r\n write: (writer, {games}) => {\r\n writer.write16(games.length);\r\n for (let {type, name} of games) {\r\n writer.write32(type);\r\n writer.write_str(name);\r\n }\r\n return writer;\r\n },\r\n },\r\n join_accept: {\r\n code: 0x12,\r\n read: reader => ({cookie: reader.read32(), index: reader.read8(), seed: reader.read32(), difficulty: reader.read32()}),\r\n size: 13,\r\n write: (writer, {cookie, index, seed, difficulty}) => writer.write32(cookie).write8(index).write32(seed).write32(difficulty),\r\n },\r\n join_reject: {\r\n code: 0x15,\r\n read: reader => ({cookie: reader.read32(), reason: reader.read8()}),\r\n size: 5,\r\n write: (writer, {cookie, reason}) => writer.write32(cookie).write8(reason),\r\n },\r\n connect: {\r\n code: 0x13,\r\n read: reader => ({id: reader.read8()}),\r\n size: 1,\r\n write: (writer, {id}) => writer.write8(id),\r\n },\r\n disconnect: {\r\n code: 0x14,\r\n read: reader => ({id: reader.read8(), reason: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, reason}) => writer.write8(id).write32(reason),\r\n },\r\n message: {\r\n code: 0x01,\r\n read: reader => ({id: reader.read8(), payload: reader.read_buf()}),\r\n size: ({payload}) => 5 + payload.byteLength,\r\n write: (writer, {id, payload}) => writer.write8(id).write_buf(payload),\r\n },\r\n turn: {\r\n code: 0x02,\r\n read: reader => ({id: reader.read8(), turn: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, turn}) => writer.write8(id).write32(turn),\r\n },\r\n batch: make_batch(() => server_packet),\r\n};\r\n\r\nexport const client_packet = {\r\n info: {\r\n code: 0x31,\r\n read: reader => ({version: reader.read32()}),\r\n size: 4,\r\n write: (writer, {version}) => writer.write32(version),\r\n },\r\n game_list: {\r\n code: 0x21,\r\n read: () => ({}),\r\n size: 0,\r\n write: writer => writer,\r\n },\r\n create_game: {\r\n code: 0x22,\r\n read: reader => ({cookie: reader.read32(), name: reader.read_str(), password: reader.read_str(), difficulty: reader.read32()}),\r\n size: ({name, password}) => 10 + name.length + password.length,\r\n write: (writer, {cookie, name, password, difficulty}) => writer.write32(cookie).write_str(name).write_str(password).write32(difficulty),\r\n },\r\n join_game: {\r\n code: 0x23,\r\n read: reader => ({cookie: reader.read32(), name: reader.read_str(), password: reader.read_str()}),\r\n size: ({name, password}) => 6 + name.length + password.length,\r\n write: (writer, {cookie, name, password}) => writer.write32(cookie).write_str(name).write_str(password),\r\n },\r\n leave_game: {\r\n code: 0x24,\r\n read: () => ({}),\r\n size: 0,\r\n write: writer => writer,\r\n },\r\n drop_player: {\r\n code: 0x03,\r\n read: reader => ({id: reader.read8(), reason: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, reason}) => writer.write8(id).write32(reason),\r\n },\r\n message: {\r\n code: 0x01,\r\n read: reader => ({id: reader.read8(), payload: reader.read_buf()}),\r\n size: ({payload}) => 5 + payload.byteLength,\r\n write: (writer, {id, payload}) => writer.write8(id).write_buf(payload),\r\n },\r\n turn: {\r\n code: 0x02,\r\n read: reader => ({turn: reader.read32()}),\r\n size: 4,\r\n write: (writer, {turn}) => writer.write32(turn),\r\n },\r\n batch: make_batch(() => server_packet),\r\n};\r\n","import Peer from 'peerjs';\r\nimport { buffer_reader, read_packet, write_packet, client_packet, server_packet, RejectionReason } from './packet';\r\n\r\n/*function log_packet(data, type) {\r\n const reader = new buffer_reader(data);\r\n const id = reader.read8();\r\n for (let [name, {code, read}] of Object.entries(type)) {\r\n if (code === id && (name !== 'message' && name !== 'turn')) {\r\n console.log(`${type === client_packet ? 'client_packet' : 'server_packet'}.${name} ${JSON.stringify(read(reader))}`);\r\n }\r\n }\r\n}*/\r\n\r\nconst PeerID = name => `diabloweb_${name}`;\r\nconst Options = {host: 'diablo.rivsoft.net', port: 443, secure: true};\r\nconst MAX_PLRS = 4;\r\n\r\nclass webrtc_server {\r\n constructor(version, {cookie, name, password, difficulty}, onMessage, onClose) {\r\n this.version = version;\r\n this.name = name;\r\n this.password = password;\r\n this.difficulty = difficulty;\r\n this.onMessage = onMessage;\r\n this.onClose = onClose;\r\n\r\n this.peer = new Peer(PeerID(name), Options);\r\n this.peer.on('connection', conn => this.onConnect(conn));\r\n this.players = [];\r\n this.myplr = 0;\r\n\r\n this.seed = Math.floor(Math.random() * Math.pow(2, 32));\r\n\r\n const onError = () => {\r\n onMessage(write_packet(server_packet.join_reject, {cookie, reason: RejectionReason.CREATE_GAME_EXISTS}));\r\n onClose();\r\n this.peer.off('error', onError);\r\n this.peer.off('open', onOpen);\r\n };\r\n const onOpen = () => {\r\n //console.log('peer open');\r\n setTimeout(() => {\r\n onMessage(write_packet(server_packet.join_accept, {cookie, index: 0, seed: this.seed, difficulty}));\r\n onMessage(write_packet(server_packet.connect, {id: 0}));\r\n }, 0);\r\n this.peer.off('error', onError);\r\n this.peer.off('open', onOpen);\r\n };\r\n this.peer.on('error', onError);\r\n this.peer.on('open', onOpen);\r\n\r\n //this.peer.on('error', err => console.log('peer error:', err));\r\n }\r\n\r\n onConnect(conn) {\r\n //conn.on('error', err => console.log('conn error:', err));\r\n //console.log('conn open');\r\n const peer = {conn};\r\n conn.on('data', packet => {\r\n const reader = new buffer_reader(packet);\r\n const {type, packet: pkt} = read_packet(reader, client_packet);\r\n switch (type.code) {\r\n case client_packet.info.code:\r\n peer.version = pkt.version;\r\n break;\r\n case client_packet.join_game.code:\r\n if (peer.version !== this.version) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_VERSION_MISMATCH}));\r\n } else if (pkt.name !== this.name) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_GAME_NOT_FOUND}));\r\n } else if (pkt.password !== this.password) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_INCORRECT_PASSWORD}));\r\n } else {\r\n let i = 1;\r\n while (i < MAX_PLRS && this.players[i]) {\r\n ++i;\r\n }\r\n if (i >= MAX_PLRS) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_GAME_FULL})); \r\n } else {\r\n this.players[i] = peer;\r\n peer.id = i;\r\n conn.send(write_packet(server_packet.join_accept, {cookie: pkt.cookie, index: i, seed: this.seed, difficulty: this.difficulty}));\r\n this.send(0xFF, write_packet(server_packet.connect, {id: i}));\r\n }\r\n }\r\n break;\r\n default:\r\n if (peer.id != null) {\r\n this.handle(peer.id, type.code, pkt);\r\n } else {\r\n return;\r\n }\r\n }\r\n if (!reader.done()) {\r\n throw Error('packet too large');\r\n }\r\n });\r\n conn.on('close', () => {\r\n //console.log('conn close');\r\n if (peer.id != null) {\r\n this.drop(peer.id, 0x40000006);\r\n }\r\n });\r\n }\r\n\r\n send(mask, pkt) {\r\n for (let i = 1; i < MAX_PLRS; ++i) {\r\n if ((mask & (1 << i)) && this.players[i]) {\r\n if (this.players[i].conn) {\r\n this.players[i].conn.send(pkt);\r\n }\r\n }\r\n }\r\n // self last since it will destroy the buffer\r\n if (mask & 1) {\r\n this.onMessage(pkt);\r\n }\r\n }\r\n\r\n drop(id, reason) {\r\n if (id === 0) {\r\n for (let i = 1; i < MAX_PLRS; ++i) {\r\n this.drop(i, 0x40000006);\r\n }\r\n this.onMessage(write_packet(server_packet.disconnect, {id, reason}));\r\n this.peer.destroy();\r\n this.onClose();\r\n } else if (this.players[id]) {\r\n this.send(0xFF, write_packet(server_packet.disconnect, {id, reason}));\r\n this.players[id].id = null;\r\n if (this.players[id].conn) {\r\n this.players[id].conn.close();\r\n }\r\n this.players[id] = null;\r\n }\r\n }\r\n\r\n handle(id, code, pkt) {\r\n switch (code) {\r\n case client_packet.leave_game.code:\r\n this.drop(id, 3);\r\n break;\r\n case client_packet.drop_player.code:\r\n this.drop(pkt.id, pkt.reason);\r\n break;\r\n case client_packet.message.code:\r\n this.send(pkt.id === 0xFF ? ~(1 << id) : (1 << pkt.id), write_packet(server_packet.message, {id, payload: pkt.payload}));\r\n break;\r\n case client_packet.turn.code:\r\n this.send(~(1 << id), write_packet(server_packet.turn, {id, turn: pkt.turn}));\r\n break;\r\n default:\r\n throw Error(`invalid packet ${code}`);\r\n }\r\n }\r\n}\r\n\r\nclass webrtc_client {\r\n pending = [];\r\n\r\n constructor(version, {cookie, name, password}, onMessage, onClose) {\r\n this.peer = new Peer(Options);\r\n this.conn = this.peer.connect(PeerID(name));\r\n\r\n let needUnreg = true;\r\n const unreg = () => {\r\n if (!needUnreg) {\r\n return;\r\n }\r\n needUnreg = false;\r\n this.peer.off('error', onError);\r\n this.conn.off('error', onError);\r\n this.conn.off('open', onOpen);\r\n clearTimeout(timeout);\r\n };\r\n const onError = () => {\r\n onMessage(write_packet(server_packet.join_reject, {cookie, reason: RejectionReason.JOIN_GAME_NOT_FOUND}));\r\n onClose();\r\n unreg();\r\n };\r\n const onOpen = () => {\r\n this.conn.send(write_packet(client_packet.info, {version}));\r\n this.conn.send(write_packet(client_packet.join_game, {cookie, name, password}));\r\n for (let pkt of this.pending) {\r\n this.conn.send(pkt);\r\n }\r\n this.pending = null;\r\n this.conn.off('open', onOpen);\r\n };\r\n const timeout = setTimeout(onError, 10000);\r\n this.peer.on('error', onError);\r\n this.conn.on('error', onError);\r\n this.conn.on('open', onOpen);\r\n\r\n //this.peer.on('error', err => console.log('peer error:', err));\r\n //this.conn.on('error', err => console.log('conn error:', err));\r\n\r\n this.conn.on('data', data => {\r\n unreg();\r\n const reader = new buffer_reader(data);\r\n const {type, packet: pkt} = read_packet(reader, server_packet);\r\n switch (type.code) {\r\n case server_packet.join_accept.code:\r\n this.myplr = pkt.index;\r\n break;\r\n case server_packet.join_reject.code:\r\n onClose();\r\n break;\r\n case server_packet.disconnect.code:\r\n if (pkt.id === 'myplr') {\r\n onClose();\r\n }\r\n break;\r\n default:\r\n }\r\n onMessage(data);\r\n });\r\n this.conn.on('close', data => {\r\n onClose();\r\n });\r\n }\r\n\r\n send(packet) {\r\n if (this.pending) {\r\n this.pending.push(packet);\r\n } else {\r\n this.conn.send(packet);\r\n }\r\n }\r\n}\r\n\r\nexport default function webrtc_open(onMessage) {\r\n let server = null, client = null;\r\n\r\n let version = 0;\r\n\r\n /*const prevMessage = onMessage;\r\n onMessage = data => {\r\n log_packet(data, server_packet);\r\n prevMessage(data);\r\n };*/\r\n\r\n return {\r\n send: function(packet) {\r\n //log_packet(packet, client_packet);\r\n const reader = new buffer_reader(packet);\r\n const {type, packet: pkt} = read_packet(reader, client_packet);\r\n switch (type.code) {\r\n case client_packet.info.code:\r\n version = pkt.version;\r\n break;\r\n case client_packet.create_game.code:\r\n if (server || client) {\r\n onMessage(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_ALREADY_IN_GAME}));\r\n } else {\r\n server = new webrtc_server(version, pkt, onMessage, () => server = null);\r\n }\r\n break;\r\n case client_packet.join_game.code:\r\n if (server || client) {\r\n onMessage(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_ALREADY_IN_GAME}));\r\n } else {\r\n client = new webrtc_client(version, pkt, onMessage, () => client = null);\r\n }\r\n break;\r\n default:\r\n if (server) {\r\n server.handle(0, type.code, pkt);\r\n if (type.code === client_packet.leave_game.code) {\r\n server = null;\r\n }\r\n } else if (client) {\r\n client.send(packet);\r\n if (type.code === client_packet.leave_game.code) {\r\n client = null;\r\n }\r\n return;\r\n } else if (type.code !== client_packet.leave_game.code) {\r\n throw Error(`invalid packet ${type.code}`);\r\n }\r\n }\r\n if (!reader.done()) {\r\n throw Error('packet too large');\r\n }\r\n },\r\n };\r\n}\r\n","import Worker from './game.worker.js';\r\nimport init_sound from './sound';\r\nimport load_spawn from './load_spawn';\r\nimport webrtc_open from './webrtc';\r\n\r\nfunction onRender(api, ctx, {bitmap, images, text, clip, belt}) {\r\n if (bitmap) {\r\n ctx.transferFromImageBitmap(bitmap);\r\n } else {\r\n for (let {x, y, w, h, data} of images) {\r\n const image = ctx.createImageData(w, h);\r\n image.data.set(data);\r\n ctx.putImageData(image, x, y);\r\n }\r\n if (text.length) {\r\n ctx.save();\r\n ctx.font = 'bold 13px Times New Roman';\r\n if (clip) {\r\n const {x0, y0, x1, y1} = clip;\r\n ctx.beginPath();\r\n ctx.rect(x0, y0, x1 - x0, y1 - y0);\r\n ctx.clip();\r\n }\r\n for (let {x, y, text: str, color} of text) {\r\n const r = ((color >> 16) & 0xFF);\r\n const g = ((color >> 8) & 0xFF);\r\n const b = (color & 0xFF);\r\n ctx.fillStyle = `rgb(${r}, ${g}, ${b})`;\r\n ctx.fillText(str, x, y + 22);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n\r\n api.updateBelt(belt);\r\n}\r\n\r\nfunction testOffscreen() {\r\n return false;\r\n // This works but I couldn't see any performance difference, and support for 2D canvas in workers is very poor.\r\n // In this mode, instead of sending a batch of areas to draw back to the main thread, the worker does all drawing on its own and sends a complete bitmap object back.\r\n // However, this effectively clears the worker's canvas, so we need to redraw the whole frame every time, which defeats the performance gained from reduced copying.\r\n /*try {\r\n const canvas = document.createElement(\"canvas\");\r\n const offscreen = canvas.transferControlToOffscreen();\r\n const context = offscreen.getContext(\"2d\");\r\n return context != null;\r\n } catch (e) {\r\n return false;\r\n }*/\r\n}\r\n\r\nasync function do_load_game(api, audio, mpq, spawn) {\r\n const fs = await api.fs;\r\n if (spawn && !mpq) {\r\n await load_spawn(api, fs);\r\n }\r\n\r\n let context = null, offscreen = false;\r\n if (testOffscreen()) {\r\n context = api.canvas.getContext(\"bitmaprenderer\");\r\n offscreen = true;\r\n } else {\r\n context = api.canvas.getContext(\"2d\", {alpha: false});\r\n }\r\n return await new Promise((resolve, reject) => {\r\n try {\r\n const worker = new Worker();\r\n\r\n let packetQueue = [];\r\n const webrtc = webrtc_open(data => {\r\n packetQueue.push(data);\r\n });\r\n\r\n worker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"loaded\":\r\n resolve((func, ...params) => worker.postMessage({action: \"event\", func, params}));\r\n break;\r\n case \"render\":\r\n onRender(api, context, data.batch);\r\n break;\r\n case \"audio\":\r\n audio[data.func](...data.params);\r\n break;\r\n case \"audioBatch\":\r\n for (let {func, params} of data.batch) {\r\n audio[func](...params);\r\n }\r\n break;\r\n case \"fs\":\r\n fs[data.func](...data.params);\r\n break;\r\n case \"cursor\":\r\n api.setCursorPos(data.x, data.y);\r\n break;\r\n case \"keyboard\":\r\n api.openKeyboard(data.rect);\r\n break;\r\n case \"error\":\r\n audio.stop_all();\r\n api.onError(data.error, data.stack);\r\n break;\r\n case \"failed\":\r\n reject({message: data.error, stack: data.stack});\r\n break;\r\n case \"progress\":\r\n api.onProgress({text: data.text, loaded: data.loaded, total: data.total});\r\n break;\r\n case \"exit\":\r\n api.onExit();\r\n break;\r\n case \"current_save\":\r\n api.setCurrentSave(data.name);\r\n break;\r\n case \"packet\":\r\n webrtc.send(data.buffer);\r\n break;\r\n case \"packetBatch\":\r\n for (let packet of data.batch) {\r\n webrtc.send(packet);\r\n }\r\n break;\r\n default:\r\n }\r\n }); \r\n const transfer= [];\r\n for (let [, file] of fs.files) {\r\n transfer.push(file.buffer);\r\n }\r\n worker.postMessage({action: \"init\", files: fs.files, mpq, spawn, offscreen}, transfer);\r\n setInterval(() => {\r\n if (packetQueue.length) {\r\n worker.postMessage({action: \"packetBatch\", batch: packetQueue}, packetQueue);\r\n packetQueue.length = 0;\r\n }\r\n }, 20);\r\n delete fs.files;\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n}\r\n\r\nexport default function load_game(api, mpq, spawn) {\r\n const audio = init_sound();\r\n return do_load_game(api, audio, mpq, spawn);\r\n}\r\n","import Worker from './mpqcmp.worker.js';\r\nimport MpqBinary from './MpqCmp.wasm';\r\nimport ListFile from './ListFile.txt';\r\nimport axios from 'axios';\r\n\r\nimport { decrypt, encrypt, hash, path_name } from '../api/savefile';\r\n\r\nconst MpqSize = 156977;\r\nconst ListSize = 75542;\r\n\r\nconst readFile = (file, progress) => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n if (progress) {\r\n progress({loaded: file.size});\r\n }\r\n resolve(reader.result);\r\n };\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n if (progress) {\r\n reader.addEventListener(\"progress\", progress);\r\n }\r\n reader.readAsArrayBuffer(file);\r\n});\r\n\r\nasync function loadFile(url, progress, responseType='arraybuffer') {\r\n const binary = await axios.request({\r\n url,\r\n responseType,\r\n onDownloadProgress: progress,\r\n });\r\n return binary.data;\r\n}\r\n\r\nfunction runWorker(data, transfer, progress) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const worker = new Worker();\r\n worker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"result\":\r\n resolve({buffer: data.buffer, blocks: data.blocks});\r\n break;\r\n case \"error\":\r\n reject({message: data.error, stack: data.stack});\r\n break;\r\n case \"progress\":\r\n progress(data.value);\r\n break;\r\n default:\r\n }\r\n });\r\n worker.postMessage({action: \"run\", ...data}, transfer);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n}\r\n\r\nexport default async function compress(mpq, progress) {\r\n progress(\"Loading...\");\r\n const files = [];\r\n function updateProgress() {\r\n progress(\"Loading...\", files.reduce((sum, {loaded, weight}) => sum + loaded * weight, 0),\r\n files.reduce((sum, {total, weight}) => sum + total * weight, 0));\r\n }\r\n const loader = file => e => { file.loaded = e.loaded; updateProgress(); };\r\n\r\n const mpqsize = mpq.size;\r\n\r\n const fHeader = {loaded: 0, weight: 1, total: mpqsize};\r\n fHeader.ready = readFile(mpq.slice(0, 32), loader(fHeader));\r\n files.push(fHeader);\r\n\r\n const fBinary = {loaded: 0, weight: 5, total: MpqSize};\r\n fBinary.ready = loadFile(MpqBinary, loader(fBinary));\r\n files.push(fBinary);\r\n\r\n const fList = {loaded: 0, weight: 5, total: ListSize};\r\n fList.ready = loadFile(ListFile, loader(fList), 'text');\r\n files.push(fList);\r\n\r\n const header = new Uint32Array(await fHeader.ready);\r\n const header16 = new Uint16Array(header.buffer);\r\n\r\n if (header[0] !== 0x1A51504D) {\r\n throw Error('invalid MPQ file');\r\n }\r\n\r\n const blockSize = 1 << (9 + header16[7]);\r\n const hashTablePos = header[4];\r\n const blockTablePos = header[5];\r\n const hashTableSize = header[6];\r\n const blockTableSize = header[7];\r\n if (hashTablePos + hashTableSize * 16 > mpqsize || blockTablePos + blockTableSize * 16 > mpqsize) {\r\n throw Error('invalid MPQ file');\r\n }\r\n\r\n const fHashTable = {loaded: 0, weight: 1, total: hashTableSize * 16};\r\n const fBlockTable = {loaded: 0, weight: 1, total: blockTableSize * 16};\r\n fHeader.total -= fHashTable.total + fBlockTable.total;\r\n fHashTable.ready = readFile(mpq.slice(hashTablePos, hashTablePos + fHashTable.total), loader(fHashTable));\r\n fBlockTable.ready = readFile(mpq.slice(blockTablePos, blockTablePos + fBlockTable.total), loader(fBlockTable));\r\n files.push(fHashTable, fBlockTable);\r\n\r\n const hashTable = new Uint32Array(await fHashTable.ready);\r\n const blockTable = new Uint32Array(await fBlockTable.ready);\r\n decrypt(hashTable, hash(\"(hash table)\", 3));\r\n decrypt(blockTable, hash(\"(block table)\", 3));\r\n\r\n const list = (await fList.ready).split(\"\\n\").map(name => name.trim()).filter(name => name.length);\r\n const listMap = {};\r\n const hashStr = (h1, h2) => h1.toString(16).padStart(8, '0') + h2.toString(16).padStart(8, '0');\r\n for (let name of list) {\r\n listMap[hashStr(hash(name, 1), hash(name, 2))] = name;\r\n }\r\n\r\n const NUM_TASKS = 4;\r\n const tasks = [];\r\n for (let i = 0; i < NUM_TASKS; ++i) {\r\n tasks.push({\r\n entries: [],\r\n min: mpqsize,\r\n max: 0,\r\n progress: 0,\r\n });\r\n }\r\n \r\n for (let i = 0; i < hashTable.length / 4; ++i) {\r\n const index = hashTable[i * 4 + 3];\r\n if (index === 0xFFFFFFFF || index === 0xFFFFFFFE) {\r\n continue;\r\n }\r\n const name = listMap[hashStr(hashTable[i * 4], hashTable[i * 4 + 1])];\r\n if (!name) {\r\n hashTable[i * 4 + 3] = 0xFFFFFFFE;\r\n continue;\r\n }\r\n\r\n const filePos = blockTable[index * 4];\r\n const cSize = blockTable[index * 4 + 1];\r\n\r\n const task = tasks[Math.floor(filePos * NUM_TASKS / mpqsize)];\r\n task.entries.push(i);\r\n task.min = Math.min(task.min, filePos);\r\n task.max = Math.max(task.max, filePos + cSize);\r\n }\r\n\r\n const numFiles = tasks.reduce((sum, task) => sum + task.entries.length, 0);\r\n\r\n fHeader.total = 32;\r\n for (let task of tasks) {\r\n if (task.min < task.max) {\r\n const fLoad = {loaded: 0, weight: 1, total: task.max - task.min};\r\n task.ready = readFile(mpq.slice(task.min, task.max), loader(fLoad)).then(data => task.data = data);\r\n files.push(fLoad);\r\n }\r\n }\r\n\r\n await Promise.all(tasks.map(t => t.ready).filter(Boolean));\r\n const binary = await fBinary.ready;\r\n\r\n progress(\"Processing...\");\r\n\r\n for (let task of tasks) {\r\n if (task.data) {\r\n const input = new Uint32Array(task.entries.length * 6);\r\n task.entries.forEach((i, pos) => {\r\n const index = hashTable[i * 4 + 3];\r\n const name = listMap[hashStr(hashTable[i * 4], hashTable[i * 4 + 1])];\r\n input[pos * 6] = blockTable[index * 4];\r\n input[pos * 6 + 1] = blockTable[index * 4 + 1];\r\n input[pos * 6 + 2] = blockTable[index * 4 + 2];\r\n input[pos * 6 + 3] = blockTable[index * 4 + 3];\r\n input[pos * 6 + 4] = hash(path_name(name), 3);\r\n input[pos * 6 + 5] = name.match(/\\.wav$/i) ? 1 : 0;\r\n });\r\n task.run = runWorker({binary, mpq: task.data, input, offset: task.min, blockSize}, [task.data, input.buffer], value => {\r\n task.progress = value;\r\n const sum = tasks.reduce((sum, task) => sum + task.progress, 0);\r\n progress(\"Processing...\", sum, numFiles);\r\n }).then(res => task.result = res);\r\n }\r\n }\r\n\r\n await Promise.all(tasks.map(t => t.run).filter(Boolean));\r\n\r\n let outputPos = 32 + fHashTable.total + fBlockTable.total;\r\n const outputSize = tasks.reduce((sum, {result}) => sum + (result ? result.buffer.byteLength : 0), outputPos);\r\n const output = [header.buffer, hashTable.buffer, blockTable.buffer];\r\n\r\n blockTable.fill(0);\r\n let blockPos = 0;\r\n for (let task of tasks) {\r\n if (task.result) {\r\n const {buffer, blocks} = task.result;\r\n for (let pos = 0; pos < task.entries.length; ++pos) {\r\n const i = task.entries[pos];\r\n hashTable[i * 4 + 3] = blockPos + pos;\r\n blocks[pos * 4] += outputPos;\r\n }\r\n blockTable.set(blocks, blockPos * 4);\r\n blockPos += task.entries.length;\r\n output.push(buffer);\r\n outputPos += buffer.byteLength;\r\n }\r\n }\r\n\r\n header[1] = 32;\r\n header[2] = outputSize;\r\n header16[6] = 1;\r\n header16[7] = 7;\r\n header[4] = 32;\r\n header[5] = 32 + hashTable.length * 4;\r\n header[6] = hashTable.length / 4;\r\n header[7] = blockTable.length / 4;\r\n\r\n encrypt(hashTable, hash(\"(hash table)\", 3));\r\n encrypt(blockTable, hash(\"(block table)\", 3));\r\n\r\n return new Blob(output, {type: 'binary/octet-stream'});\r\n}\r\n","import React from 'react';\r\nimport compress from './compress';\r\n\r\nexport default class CompressMpq extends React.Component {\r\n state = {};\r\n\r\n parseFile = e => {\r\n const files = e.target.files;\r\n if (files.length > 0) {\r\n this.start(files[0]);\r\n }\r\n }\r\n\r\n onProgress(progress) {\r\n this.setState({progress});\r\n }\r\n onDone = blob => {\r\n //const blob = new Blob([result], {type: 'binary/octet-stream'});\r\n const url = URL.createObjectURL(blob);\r\n this.setState({url});\r\n\r\n const lnk = document.createElement('a');\r\n lnk.setAttribute('href', url);\r\n lnk.setAttribute('download', 'DIABDAT.MPQ');\r\n document.body.appendChild(lnk);\r\n lnk.click();\r\n document.body.removeChild(lnk);\r\n }\r\n onError(message, stack) {\r\n const { api } = this.props;\r\n api.setState({compress: false});\r\n api.onError(message, stack);\r\n }\r\n\r\n onClose = () => {\r\n if (this.state.url) {\r\n URL.revokeObjectURL(this.state.url);\r\n }\r\n this.props.api.setState({compress: false});\r\n }\r\n\r\n start(file) {\r\n this.setState({started: true});\r\n compress(file, (text, loaded, total) => this.onProgress({text, loaded, total}))\r\n .then(this.onDone, e => this.onError(e.message, e.stack));\r\n }\r\n\r\n render() {\r\n const { url, started, progress } = this.state;\r\n if (url) {\r\n return (\r\n
\r\n

\r\n Click here if download doesn't start.\r\n

\r\n
Back
\r\n
\r\n );\r\n }\r\n if (started) {\r\n return (\r\n
\r\n {(progress && progress.text) || 'Processing...'}\r\n {progress != null && !!progress.total && (\r\n \r\n )}\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n

\r\n You can use this tool to reduce the original MPQ to about half its size. It encodes sounds in MP3 format and uses better compression for regular files.\r\n To begin, click the button below or drop the MPQ onto the page.\r\n

\r\n
\r\n \r\n \r\n
\r\n
Back
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport './App.scss';\r\nimport classNames from 'classnames';\r\nimport ReactGA from 'react-ga';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTimes, faDownload } from '@fortawesome/free-solid-svg-icons';\r\nimport getPlayerName from './api/savefile';\r\n\r\nimport { mapStackTrace } from 'sourcemapped-stacktrace';\r\n\r\nimport create_fs from './fs';\r\nimport load_game from './api/loader';\r\nimport { SpawnSizes } from './api/load_spawn';\r\nimport CompressMpq from './mpqcmp';\r\n\r\nimport Peer from 'peerjs';\r\n\r\nwindow.Peer = Peer;\r\n\r\nif (process.env.NODE_ENV === 'production') {\r\n ReactGA.initialize('UA-43123589-6');\r\n ReactGA.pageview('/');\r\n}\r\n\r\nfunction reportLink(e, retail) {\r\n const message = (e.message || \"Unknown error\") + (e.stack ? \"\\n\" + e.stack : \"\");\r\n const url = new URL(\"https://github.com/d07RiV/diabloweb/issues/new\");\r\n url.searchParams.set(\"body\",\r\n`**Description:**\r\n[Please describe what you were doing before the error occurred]\r\n\r\n**App version:**\r\nDiabloWeb ${process.env.VERSION} (${retail ? 'Retail' : 'Shareware'})\r\n\r\n**Error message:**\r\n \r\n${message.split(\"\\n\").map(line => \" \" + line).join(\"\\n\")}\r\n\r\n**User agent:**\r\n\r\n ${navigator.userAgent}\r\n\r\n**Save file:**\r\n[Please attach the save file, if applicable. The error box should have a link to download the current save you were playing; alternatively, you can open dev console on the game page (F12) and type in ${\"`DownloadSaves()`\"}]\r\n`);\r\n return url.toString();\r\n}\r\n\r\nfunction isDropFile(e) {\r\n if (e.dataTransfer.items) {\r\n for (let i = 0; i < e.dataTransfer.items.length; ++i) {\r\n if (e.dataTransfer.items[i].kind === \"file\") {\r\n return true;\r\n }\r\n }\r\n } if (e.dataTransfer.files.length) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction getDropFile(e) {\r\n if (e.dataTransfer.items) {\r\n for (let i = 0; i < e.dataTransfer.items.length; ++i) {\r\n if (e.dataTransfer.items[i].kind === \"file\") {\r\n return e.dataTransfer.items[i].getAsFile();\r\n }\r\n }\r\n } if (e.dataTransfer.files.length) {\r\n return e.dataTransfer.files[0];\r\n }\r\n}\r\n\r\nconst TOUCH_MOVE = 0;\r\nconst TOUCH_RMB = 1;\r\nconst TOUCH_SHIFT = 2;\r\n\r\nfunction findKeyboardRule() {\r\n for (let sheet of document.styleSheets) {\r\n for (let rule of sheet.cssRules) {\r\n if (rule.type === CSSRule.MEDIA_RULE && rule.conditionText === '(min-aspect-ratio: 3/1)') {\r\n for (let sub of rule.cssRules) {\r\n if (sub.selectorText === '.App.keyboard .Body .inner') {\r\n return sub;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\nlet keyboardRule = null;\r\ntry {\r\n keyboardRule = findKeyboardRule();\r\n} catch (e) {\r\n}\r\n\r\nconst Link = ({children, ...props}) => {children};\r\n\r\nclass App extends React.Component {\r\n files = new Map();\r\n state = {started: false, loading: false, dropping: 0, has_spawn: false};\r\n cursorPos = {x: 0, y: 0};\r\n\r\n touchControls = false;\r\n touchButtons = [null, null, null, null, null, null];\r\n touchCtx = [null, null, null, null, null, null];\r\n touchMods = [false, false, false, false, false, false];\r\n touchBelt = [-1, -1, -1, -1, -1, -1];\r\n maxKeyboard = 0;\r\n\r\n fs = create_fs(true);\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.setTouch0 = this.setTouch_.bind(this, 0);\r\n this.setTouch1 = this.setTouch_.bind(this, 1);\r\n this.setTouch2 = this.setTouch_.bind(this, 2);\r\n this.setTouch3 = this.setTouchBelt_.bind(this, 3);\r\n this.setTouch4 = this.setTouchBelt_.bind(this, 4);\r\n this.setTouch5 = this.setTouchBelt_.bind(this, 5);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"drop\", this.onDrop, true);\r\n document.addEventListener(\"dragover\", this.onDragOver, true);\r\n document.addEventListener(\"dragenter\", this.onDragEnter, true);\r\n document.addEventListener(\"dragleave\", this.onDragLeave, true);\r\n\r\n this.fs.then(fs => {\r\n const spawn = fs.files.get('spawn.mpq');\r\n if (spawn && SpawnSizes.includes(spawn.byteLength)) {\r\n this.setState({has_spawn: true});\r\n }\r\n if ([...fs.files.keys()].filter(name => name.match(/\\.sv$/i)).length) {\r\n this.setState({save_names: true});\r\n }\r\n });\r\n }\r\n\r\n onDrop = e => {\r\n const file = getDropFile(e);\r\n if (file) {\r\n e.preventDefault();\r\n if (this.compressMpq) {\r\n this.compressMpq.start(file);\r\n } else {\r\n this.start(file);\r\n }\r\n }\r\n this.setState({dropping: 0});\r\n }\r\n onDragEnter = e => {\r\n e.preventDefault();\r\n this.setDropping(1);\r\n }\r\n onDragOver = e => {\r\n if (isDropFile(e)) {\r\n e.preventDefault();\r\n }\r\n }\r\n onDragLeave = e => {\r\n this.setDropping(-1);\r\n }\r\n setDropping(inc) {\r\n this.setState(({dropping}) => ({dropping: Math.max(dropping + inc, 0)}));\r\n }\r\n\r\n onError(message, stack) {\r\n (async () => {\r\n const errorObject = {message};\r\n if (this.saveName) {\r\n errorObject.save = await (await this.fs).fileUrl(this.saveName);\r\n }\r\n if (stack) {\r\n mapStackTrace(stack, stack => {\r\n this.setState(({error}) => !error && {error: {...errorObject, stack: stack.join(\"\\n\")}});\r\n });\r\n } else {\r\n this.setState(({error}) => !error && {error: errorObject});\r\n }\r\n })();\r\n }\r\n\r\n openKeyboard(rect) {\r\n if (rect) {\r\n this.showKeyboard = {\r\n left: `${(100 * (rect[0] - 10) / 640).toFixed(2)}%`,\r\n top: `${(100 * (rect[1] - 10) / 480).toFixed(2)}%`,\r\n width: `${(100 * (rect[2] - rect[0] + 20) / 640).toFixed(2)}%`,\r\n height: `${(100 * (rect[3] - rect[1] + 20) / 640).toFixed(2)}%`,\r\n };\r\n this.maxKeyboard = rect[4];\r\n this.element.classList.add(\"keyboard\");\r\n Object.assign(this.keyboard.style, this.showKeyboard);\r\n this.keyboard.focus();\r\n if (keyboardRule) {\r\n keyboardRule.style.transform = `translate(-50%, ${(-(rect[1] + rect[3]) * 56.25 / 960).toFixed(2)}vw)`;\r\n }\r\n } else {\r\n this.showKeyboard = false;\r\n this.element.classList.remove(\"keyboard\");\r\n this.keyboard.blur();\r\n this.keyboard.value = \"\";\r\n this.keyboardNum = 0;\r\n }\r\n }\r\n\r\n setCursorPos(x, y) {\r\n const rect = this.canvas.getBoundingClientRect();\r\n this.cursorPos = {\r\n x: rect.left + (rect.right - rect.left) * x / 640,\r\n y: rect.top + (rect.bottom - rect.top) * y / 480,\r\n };\r\n setTimeout(() => {\r\n this.game(\"DApi_Mouse\", 0, 0, 0, x, y);\r\n });\r\n }\r\n\r\n onProgress(progress) {\r\n this.setState({progress});\r\n }\r\n\r\n onExit() {\r\n if (!this.state.error) {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n setCurrentSave(name) {\r\n this.saveName = name;\r\n }\r\n\r\n showSaves = () => {\r\n if (this.state.save_names === true) {\r\n this.updateSaves().then(() => this.setState({show_saves: !this.state.show_saves}));\r\n } else {\r\n this.setState({show_saves: !this.state.show_saves});\r\n }\r\n }\r\n updateSaves() {\r\n return this.fs.then(fs => {\r\n const saves = {};\r\n [...fs.files.keys()].filter(name => name.match(/\\.sv$/i)).forEach(name => {\r\n saves[name] = getPlayerName(fs.files.get(name).buffer, name);\r\n });\r\n this.setState({save_names: saves});\r\n });\r\n }\r\n removeSave(name) {\r\n if (window.confirm(`Are you sure you want to delete ${name}?`)) {\r\n (async () => {\r\n const fs = await this.fs;\r\n await fs.delete(name.toLowerCase());\r\n fs.files.delete(name.toLowerCase());\r\n this.updateSaves();\r\n })();\r\n }\r\n }\r\n downloadSave(name) {\r\n this.fs.then(fs => fs.download(name));\r\n }\r\n\r\n drawBelt(idx, slot) {\r\n if (!this.canvas) return;\r\n if (!this.touchButtons[idx]) {\r\n return;\r\n }\r\n this.touchBelt[idx] = slot;\r\n if (slot >= 0) {\r\n this.touchButtons[idx].style.display = \"block\";\r\n this.touchCtx[idx].drawImage(this.canvas, 205 + 29 * slot, 357, 28, 28, 0, 0, 28, 28);\r\n } else {\r\n this.touchButtons[idx].style.display = \"none\";\r\n }\r\n }\r\n\r\n updateBelt(belt) {\r\n if (belt) {\r\n const used = new Set();\r\n let pos = 3;\r\n for (let i = 0; i < belt.length && pos < 6; ++i) {\r\n if (belt[i] >= 0 && !used.has(belt[i])) {\r\n this.drawBelt(pos++, i);\r\n used.add(belt[i]);\r\n }\r\n }\r\n for (; pos < 6; ++pos) {\r\n this.drawBelt(pos, -1);\r\n }\r\n } else {\r\n this.drawBelt(3, -1);\r\n this.drawBelt(4, -1);\r\n this.drawBelt(5, -1);\r\n }\r\n }\r\n\r\n start(file) {\r\n if (file && file.name.match(/\\.sv$/i)) {\r\n this.fs.then(fs => fs.upload(file)).then(() => {\r\n this.updateSaves();\r\n });\r\n return;\r\n }\r\n if (this.state.show_saves) {\r\n return;\r\n }\r\n if (file && !file.name.match(/\\.mpq$/i)) {\r\n window.alert('Please select an MPQ file. If you downloaded the installer from GoG, you will need to install it on PC and use the MPQ file from the installation folder.');\r\n return;\r\n }\r\n\r\n document.removeEventListener(\"drop\", this.onDrop, true);\r\n document.removeEventListener(\"dragover\", this.onDragOver, true);\r\n document.removeEventListener(\"dragenter\", this.onDragEnter, true);\r\n document.removeEventListener(\"dragleave\", this.onDragLeave, true);\r\n this.setState({dropping: 0});\r\n\r\n const retail = !!(file && !file.name.match(/^spawn\\.mpq$/i));\r\n if (process.env.NODE_ENV === 'production') {\r\n ReactGA.event({\r\n category: 'Game',\r\n action: retail ? 'Start Retail' : 'Start Shareware',\r\n });\r\n }\r\n\r\n this.setState({loading: true, retail});\r\n\r\n load_game(this, file, !retail).then(game => {\r\n this.game = game;\r\n\r\n document.addEventListener('mousemove', this.onMouseMove, true);\r\n document.addEventListener('mousedown', this.onMouseDown, true);\r\n document.addEventListener('mouseup', this.onMouseUp, true);\r\n document.addEventListener('keydown', this.onKeyDown, true);\r\n document.addEventListener('keyup', this.onKeyUp, true);\r\n document.addEventListener('contextmenu', this.onMenu, true);\r\n\r\n document.addEventListener('touchstart', this.onTouchStart, {passive: false, capture: true});\r\n document.addEventListener('touchmove', this.onTouchMove, {passive: false, capture: true});\r\n document.addEventListener('touchend', this.onTouchEnd, {passive: false, capture: true});\r\n\r\n document.addEventListener('pointerlockchange', this.onPointerLockChange);\r\n window.addEventListener('resize', this.onResize);\r\n\r\n this.setState({started: true});\r\n }, e => this.onError(e.message, e.stack));\r\n }\r\n\r\n pointerLocked() {\r\n return document.pointerLockElement === this.canvas || document.mozPointerLockElement === this.canvas;\r\n }\r\n\r\n mousePos(e) {\r\n const rect = this.canvas.getBoundingClientRect();\r\n if (this.pointerLocked()) {\r\n this.cursorPos.x = Math.max(rect.left, Math.min(rect.right, this.cursorPos.x + e.movementX));\r\n this.cursorPos.y = Math.max(rect.top, Math.min(rect.bottom, this.cursorPos.y + e.movementY));\r\n } else {\r\n this.cursorPos = {x: e.clientX, y: e.clientY};\r\n }\r\n return {\r\n x: Math.max(0, Math.min(Math.round((this.cursorPos.x - rect.left) / (rect.right - rect.left) * 640), 639)),\r\n y: Math.max(0, Math.min(Math.round((this.cursorPos.y - rect.top) / (rect.bottom - rect.top) * 480), 479)),\r\n };\r\n }\r\n\r\n mouseButton(e) {\r\n switch (e.button) {\r\n case 0: return 1;\r\n case 1: return 4;\r\n case 2: return 2;\r\n case 3: return 5;\r\n case 4: return 6;\r\n default: return 1;\r\n }\r\n }\r\n eventMods(e) {\r\n return ((e.shiftKey || this.touchMods[TOUCH_SHIFT]) ? 1 : 0) + (e.ctrlKey ? 2 : 0) + (e.altKey ? 4 : 0) + (e.touches ? 8 : 0);\r\n }\r\n\r\n onResize = () => {\r\n document.exitPointerLock();\r\n }\r\n\r\n onPointerLockChange = () => {\r\n if (window.screen && window.innerHeight === window.screen.height && !this.pointerLocked()) {\r\n // assume that the user pressed escape\r\n this.game(\"DApi_Key\", 0, 0, 27);\r\n this.game(\"DApi_Key\", 1, 0, 27);\r\n }\r\n }\r\n\r\n onMouseMove = e => {\r\n if (!this.canvas) return;\r\n const {x, y} = this.mousePos(e);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n e.preventDefault();\r\n }\r\n\r\n onMouseDown = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n }\r\n if (this.touchControls) {\r\n this.touchControls = false;\r\n this.element.classList.remove(\"touch\");\r\n }\r\n const {x, y} = this.mousePos(e);\r\n if (window.screen && window.innerHeight === window.screen.height) {\r\n // we're in fullscreen, let's get pointer lock!\r\n if (!this.pointerLocked()) {\r\n this.canvas.requestPointerLock();\r\n }\r\n }\r\n this.game(\"DApi_Mouse\", 1, this.mouseButton(e), this.eventMods(e), x, y);\r\n e.preventDefault();\r\n }\r\n\r\n onMouseUp = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n //return;\r\n }\r\n const {x, y} = this.mousePos(e);\r\n this.game(\"DApi_Mouse\", 2, this.mouseButton(e), this.eventMods(e), x, y);\r\n if (e.target !== this.keyboard) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n onKeyDown = e => {\r\n if (!this.canvas) return;\r\n this.game(\"DApi_Key\", 0, this.eventMods(e), e.keyCode);\r\n if (!this.showKeyboard && (e.keyCode >= 32 && e.key.length === 1)) {\r\n this.game(\"DApi_Char\", e.key.charCodeAt(0));\r\n } else if (e.keyCode === 8 || e.keyCode === 13) {\r\n this.game(\"DApi_Char\", e.keyCode);\r\n }\r\n this.clearKeySel();\r\n if (!this.showKeyboard) {\r\n if (e.keyCode === 8 || e.keyCode === 9 || (e.keyCode >= 112 && e.keyCode <= 119)) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n onMenu = e => {\r\n e.preventDefault();\r\n }\r\n\r\n onKeyUp = e => {\r\n if (!this.canvas) return;\r\n this.game(\"DApi_Key\", 1, this.eventMods(e), e.keyCode);\r\n this.clearKeySel();\r\n }\r\n\r\n clearKeySel() {\r\n if (this.showKeyboard) {\r\n const len = this.keyboard.value.length;\r\n this.keyboard.setSelectionRange(len, len);\r\n }\r\n }\r\n\r\n onKeyboardInner(flags) {\r\n if (this.showKeyboard) {\r\n const text = this.keyboard.value;\r\n let valid;\r\n if (this.maxKeyboard > 0) {\r\n valid = (text.match(/[\\x20-\\x7E]/g) || []).join(\"\").substring(0, this.maxKeyboard);\r\n } else {\r\n const maxValue = -this.maxKeyboard;\r\n if (text.match(/^\\d*$/)) {\r\n this.keyboardNum = Math.min(text.length ? parseInt(text) : 0, maxValue);\r\n }\r\n valid = (this.keyboardNum ? this.keyboardNum.toString() : \"\");\r\n }\r\n if (text !== valid) {\r\n this.keyboard.value = valid;\r\n }\r\n this.clearKeySel();\r\n this.game(\"text\", valid, flags);\r\n }\r\n }\r\n onKeyboard = () => {\r\n this.onKeyboardInner(0);\r\n }\r\n onKeyboardBlur = () => {\r\n this.onKeyboardInner(1);\r\n }\r\n\r\n parseFile = e => {\r\n const files = e.target.files;\r\n if (files.length > 0) {\r\n this.start(files[0]);\r\n }\r\n }\r\n\r\n parseSave = e => {\r\n const files = e.target.files;\r\n if (files.length > 0) {\r\n this.start(files[0]);\r\n }\r\n }\r\n\r\n touchButton = null;\r\n touchCanvas = null;\r\n\r\n setTouchMod(index, value, use) {\r\n if (index < 3) {\r\n this.touchMods[index] = value;\r\n if (this.touchButtons[index]) {\r\n this.touchButtons[index].classList.toggle(\"active\", value);\r\n }\r\n } else if (use && this.touchBelt[index] >= 0) {\r\n const now = performance.now();\r\n if (!this.beltTime || now - this.beltTime > 750) {\r\n this.game(\"DApi_Char\", 49 + this.touchBelt[index]);\r\n this.beltTime = now;\r\n }\r\n }\r\n }\r\n\r\n updateTouchButton(touches, release) {\r\n let touchOther = null;\r\n if (!this.touchControls) {\r\n this.touchControls = true;\r\n this.element.classList.add(\"touch\");\r\n }\r\n const btn = this.touchButton;\r\n for (let {target, identifier, clientX, clientY} of touches) {\r\n if (btn && btn.id === identifier && this.touchButtons[btn.index] === target) {\r\n if (touches.length > 1) {\r\n btn.stick = false;\r\n }\r\n btn.clientX = clientX;\r\n btn.clientY = clientY;\r\n this.touchCanvas = [...touches].find(t => t.identifier !== identifier);\r\n if (this.touchCanvas) {\r\n this.touchCanvas = {clientX: this.touchCanvas.clientX, clientY: this.touchCanvas.clientY};\r\n }\r\n delete this.panPos;\r\n return this.touchCanvas != null;\r\n }\r\n const idx = this.touchButtons.indexOf(target);\r\n if (idx >= 0 && !touchOther) {\r\n touchOther = {id: identifier, index: idx, stick: true, original: this.touchMods[idx], clientX, clientY};\r\n }\r\n }\r\n if (btn && !touchOther && release && btn.stick) {\r\n const rect = this.touchButtons[btn.index].getBoundingClientRect();\r\n const {clientX, clientY} = btn;\r\n if (clientX >= rect.left && clientX < rect.right && clientY >= rect.top && clientY < rect.bottom) {\r\n this.setTouchMod(btn.index, !btn.original, true);\r\n } else {\r\n this.setTouchMod(btn.index, btn.original);\r\n }\r\n } else if (btn) {\r\n this.setTouchMod(btn.index, false);\r\n }\r\n this.touchButton = touchOther;\r\n if (touchOther) {\r\n this.setTouchMod(touchOther.index, true);\r\n if (touchOther.index === TOUCH_MOVE) {\r\n this.setTouchMod(TOUCH_RMB, false);\r\n } else if (touchOther.index === TOUCH_RMB) {\r\n this.setTouchMod(TOUCH_MOVE, false);\r\n }\r\n delete this.panPos;\r\n } else if (touches.length === 2) {\r\n const x = (touches[1].clientX + touches[0].clientX) / 2, y = (touches[1].clientY + touches[0].clientY) / 2;\r\n if (this.panPos) {\r\n const dx = x - this.panPos.x, dy = y - this.panPos.y;\r\n const step = this.canvas.offsetHeight / 12;\r\n if (Math.max(Math.abs(dx), Math.abs(dy)) > step) {\r\n let key;\r\n if (Math.abs(dx) > Math.abs(dy)) {\r\n key = (dx > 0 ? 0x25 : 0x27);\r\n } else {\r\n key = (dy > 0 ? 0x26 : 0x28);\r\n }\r\n this.game(\"DApi_Key\", 0, 0, key);\r\n // key up is ignored anyway\r\n this.panPos = {x, y};\r\n }\r\n } else {\r\n this.game(\"DApi_Mouse\", 0, 0, 24, 320, 180);\r\n this.game(\"DApi_Mouse\", 2, 1, 24, 320, 180);\r\n this.panPos = {x, y};\r\n }\r\n this.touchCanvas = null;\r\n return false;\r\n } else {\r\n delete this.panPos;\r\n }\r\n this.touchCanvas = [...touches].find(t => !touchOther || t.identifier !== touchOther.id);\r\n if (this.touchCanvas) {\r\n this.touchCanvas = {clientX: this.touchCanvas.clientX, clientY: this.touchCanvas.clientY};\r\n }\r\n return this.touchCanvas != null;\r\n }\r\n\r\n onTouchStart = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n } else {\r\n this.keyboard.blur();\r\n }\r\n e.preventDefault();\r\n if (this.updateTouchButton(e.touches, false)) {\r\n const {x, y} = this.mousePos(this.touchCanvas);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n if (!this.touchMods[TOUCH_MOVE]) {\r\n this.game(\"DApi_Mouse\", 1, this.touchMods[TOUCH_RMB] ? 2 : 1, this.eventMods(e), x, y);\r\n }\r\n }\r\n }\r\n onTouchMove = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n }\r\n e.preventDefault();\r\n if (this.updateTouchButton(e.touches, false)) {\r\n const {x, y} = this.mousePos(this.touchCanvas);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n }\r\n }\r\n onTouchEnd = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n //return;\r\n } else {\r\n e.preventDefault();\r\n }\r\n const prevTc = this.touchCanvas;\r\n this.updateTouchButton(e.touches, true);\r\n if (prevTc && !this.touchCanvas) {\r\n const {x, y} = this.mousePos(prevTc);\r\n this.game(\"DApi_Mouse\", 2, 1, this.eventMods(e), x, y);\r\n this.game(\"DApi_Mouse\", 2, 2, this.eventMods(e), x, y);\r\n\r\n if (this.touchMods[TOUCH_RMB] && (!this.touchButton || this.touchButton.index !== TOUCH_RMB)) {\r\n this.setTouchMod(TOUCH_RMB, false);\r\n }\r\n }\r\n if (!document.fullscreenElement) {\r\n this.element.requestFullscreen();\r\n }\r\n }\r\n\r\n setCanvas = e => this.canvas = e;\r\n setElement = e => this.element = e;\r\n setKeyboard = e => this.keyboard = e;\r\n setTouch_(i, e) {\r\n this.touchButtons[i] = e;\r\n }\r\n setTouchBelt_(i, e) {\r\n this.touchButtons[i] = e;\r\n if (e) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = 28;\r\n canvas.height = 28;\r\n e.appendChild(canvas);\r\n this.touchCtx[i] = canvas.getContext(\"2d\");\r\n } else {\r\n this.touchCtx[i] = null;\r\n }\r\n }\r\n\r\n renderUi() {\r\n const {started, loading, error, progress, has_spawn, save_names, show_saves, compress} = this.state;\r\n if (show_saves && typeof save_names === \"object\") {\r\n const plrClass = [\"Warrior\", \"Rogue\", \"Sorcerer\"];\r\n return (\r\n
\r\n
    \r\n {Object.entries(save_names).map(([name, info]) =>
  • \r\n {name}{info ? {info.name} (lv. {info.level} {plrClass[info.cls]}) : \"\"}\r\n this.downloadSave(name)}/>\r\n this.removeSave(name)}/>\r\n
  • )}\r\n
\r\n
\r\n \r\n \r\n
\r\n
this.setState({show_saves: false})}>Back
\r\n
\r\n );\r\n } else if (compress) {\r\n return (\r\n this.compressMpq = e}/>\r\n );\r\n } else if (error) {\r\n return (\r\n \r\n

The following error has occurred:

\r\n

{error.message}

\r\n

Click to create an issue on GitHub

\r\n {error.save != null && Download save file}\r\n \r\n );\r\n } else if (loading && !started) {\r\n return (\r\n
\r\n {(progress && progress.text) || 'Loading...'}\r\n {progress != null && !!progress.total && (\r\n \r\n )}\r\n
\r\n );\r\n } else if (!started) {\r\n return (\r\n
\r\n

\r\n This is a web port of the original Diablo game, based on source code reconstructed by\r\n GalaXyHaXz and devilution team. The project page with information and links can be found over here https://github.com/d07RiV/diabloweb\r\n

\r\n

\r\n If you own the original game, you can drop the original DIABDAT.MPQ onto this page or click the button below to start playing.\r\n The game can be purchased from GoG.\r\n {\" \"} this.setState({compress: true})}>Click here to compress the MPQ, greatly reducing its size.\r\n

\r\n {!has_spawn && (\r\n

\r\n Or you can play the shareware version for free (50MB download).\r\n

\r\n )}\r\n
\r\n \r\n \r\n
\r\n
this.start()}>Play Shareware
\r\n {!!save_names &&
Manage Saves
}\r\n
\r\n );\r\n }\r\n }\r\n\r\n render() {\r\n const {started, error, dropping} = this.state;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {!error && }\r\n \r\n
\r\n
\r\n
\r\n {this.renderUi()}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './reset.css';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nimport App from './App';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\nserviceWorker.register({\r\n onUpdate() {\r\n },\r\n});\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/storage.13abf7f9.chunk.js b/static/js/storage.8fcdd212.chunk.js similarity index 98% rename from static/js/storage.13abf7f9.chunk.js rename to static/js/storage.8fcdd212.chunk.js index b514fbf..dc037be 100644 --- a/static/js/storage.13abf7f9.chunk.js +++ b/static/js/storage.8fcdd212.chunk.js @@ -1,2 +1,2 @@ (window.webpackJsonp=window.webpackJsonp||[]).push([[4],{12:function(e,t,r){"use strict";r.d(t,"a",function(){return b});var n=r(8),a=r(1),o=r.n(a),u=r(3),c=r(15),s=r.n(c);function i(e,t){return f.apply(this,arguments)}function f(){return(f=Object(u.a)(o.a.mark(function e(t,r){var n,a,u,c;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.get(r.toLowerCase());case 2:(n=e.sent)?(a=new Blob([n],{type:"binary/octet-stream"}),u=URL.createObjectURL(a),(c=document.createElement("a")).setAttribute("href",u),c.setAttribute("download",r),document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(u)):console.error("File ".concat(r," does not exist"));case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}function l(e){return p.apply(this,arguments)}function p(){return(p=Object(u.a)(o.a.mark(function e(t){var r,n,a,u,c,s;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=!0,n=!1,a=void 0,e.prev=3,e.next=6,t.keys();case 6:e.t0=Symbol.iterator,u=e.sent[e.t0]();case 8:if(r=(c=u.next()).done){e.next=14;break}(s=c.value).match(/\.sv$/i)&&i(t,s);case 11:r=!0,e.next=8;break;case 14:e.next=20;break;case 16:e.prev=16,e.t1=e.catch(3),n=!0,a=e.t1;case 20:e.prev=20,e.prev=21,r||null==u.return||u.return();case 23:if(e.prev=23,!n){e.next=26;break}throw a;case 26:return e.finish(23);case 27:return e.finish(20);case 28:case"end":return e.stop()}},e,null,[[3,16,20,28],[21,,23,27]])}))).apply(this,arguments)}var d=function(e){return new Promise(function(t,r){var n=new FileReader;n.onload=function(){return t(n.result)},n.onerror=function(){return r(n.error)},n.onabort=function(){return r()},n.readAsArrayBuffer(e)})};function w(e,t,r){return v.apply(this,arguments)}function v(){return(v=Object(u.a)(o.a.mark(function e(t,r,n){var a;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=Uint8Array,e.next=3,d(n);case 3:return e.t1=e.sent,a=new e.t0(e.t1),r.set(n.name.toLowerCase(),a),e.abrupt("return",t.set(n.name.toLowerCase(),a));case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}function b(e){return h.apply(this,arguments)}function h(){return(h=Object(u.a)(o.a.mark(function e(t){var r,a,c,f,p,d,v,b;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,r=new s.a("diablo_fs"),a=new Map,c=0,e.t0=Object,e.next=7,r.json();case 7:e.t1=e.sent,f=e.t0.entries.call(e.t0,e.t1);case 9:if(!(c new Promise((resolve, reject) => {\r\n let done = false;\r\n const frame = document.createElement('iframe');\r\n window.addEventListener('message', ({data}) => {\r\n if (data.method === 'storage' && !done) {\r\n done = true;\r\n resolve(data.files);\r\n frame.contentWindow.postMessage({method: 'clear'}, '*');\r\n }\r\n });\r\n frame.addEventListener('load', () => {\r\n frame.contentWindow.postMessage({method: 'transfer'}, '*');\r\n });\r\n frame.addEventListener('error', () => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n });\r\n frame.src = \"https://diablo.rivsoft.net/storage.html\";\r\n frame.style.display = \"none\";\r\n document.body.appendChild(frame);\r\n setTimeout(() => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n }, 10000);\r\n});*/\r\n\r\nasync function downloadFile(store, name) {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n const url = URL.createObjectURL(blob);\r\n const lnk = document.createElement('a');\r\n lnk.setAttribute('href', url);\r\n lnk.setAttribute('download', name);\r\n document.body.appendChild(lnk);\r\n lnk.click();\r\n document.body.removeChild(lnk);\r\n URL.revokeObjectURL(url);\r\n } else {\r\n console.error(`File ${name} does not exist`);\r\n }\r\n}\r\n\r\nasync function downloadSaves(store) {\r\n for (let name of await store.keys()) {\r\n if (name.match(/\\.sv$/i)) {\r\n downloadFile(store, name);\r\n }\r\n }\r\n}\r\n\r\nconst readFile = file => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n reader.readAsArrayBuffer(file);\r\n});\r\nasync function uploadFile(store, files, file) {\r\n const data = new Uint8Array(await readFile(file));\r\n files.set(file.name.toLowerCase(), data);\r\n return store.set(file.name.toLowerCase(), data);\r\n}\r\n\r\nexport default async function create_fs(load) {\r\n try {\r\n const store = new IdbKvStore('diablo_fs');\r\n const files = new Map();\r\n for (let [name, data] of Object.entries(await store.json())) {\r\n files.set(name, data);\r\n }\r\n /*if (load) {\r\n const files = await importStorage();\r\n if (files) {\r\n for (let [name, data] of files) {\r\n files.set(name, data);\r\n store.set(name, data);\r\n }\r\n }\r\n }*/\r\n window.DownloadFile = name => downloadFile(store, name);\r\n window.DownloadSaves = () => downloadSaves(store);\r\n return {\r\n files,\r\n update: (name, data) => store.set(name, data),\r\n delete: name => store.remove(name),\r\n clear: () => store.clear(),\r\n download: name => downloadFile(store, name),\r\n upload: file => uploadFile(store, files, file),\r\n fileUrl: async name => {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n return URL.createObjectURL(blob);\r\n }\r\n },\r\n };\r\n } catch (e) {\r\n window.DownloadFile = () => console.error('IndexedDB is not supported');\r\n window.DownloadSaves = () => console.error('IndexedDB is not supported');\r\n return {\r\n files: new Map(),\r\n update: () => Promise.resolve(),\r\n delete: () => Promise.resolve(),\r\n clear: () => Promise.resolve(),\r\n download: () => Promise.resolve(),\r\n upload: () => Promise.resolve(),\r\n fileUrl: () => Promise.resolve(),\r\n };\r\n } \r\n}\r\n","import create_fs from './fs';\r\n\r\nconst fs = create_fs();\r\nwindow.addEventListener('message', ({data, source}) => {\r\n if (data.method === 'transfer') {\r\n fs.then(({files}) => {\r\n source.postMessage({method: 'storage', files}, '*');\r\n });\r\n } else if (data.method === 'clear') {\r\n fs.then(({clear}) => clear());\r\n }\r\n});"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["fs.js","storage.js"],"names":["downloadFile","_callee","store","name","file","blob","url","lnk","D_Projects_diabloweb_diabloweb_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default","a","wrap","_context","prev","next","get","toLowerCase","sent","Blob","type","URL","createObjectURL","document","createElement","setAttribute","body","appendChild","click","removeChild","revokeObjectURL","console","error","concat","stop","downloadSaves","_callee2","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","_context2","undefined","keys","t0","Symbol","iterator","done","value","match","t1","return","finish","readFile","Promise","resolve","reject","reader","FileReader","onload","result","onerror","onabort","readAsArrayBuffer","uploadFile","_callee3","files","data","_context3","Uint8Array","set","abrupt","create_fs","_x7","_create_fs","apply","this","arguments","_callee5","load","_i","_Object$entries","_ref3","_ref2","_context5","IdbKvStore","Map","Object","json","entries","call","length","D_Projects_diabloweb_diabloweb_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__","window","DownloadFile","DownloadSaves","update","delete","remove","clear","download","upload","fileUrl","_fileUrl","D_Projects_diabloweb_diabloweb_node_modules_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__","mark","_callee4","_context4","_x8","t2","__webpack_require__","r","__webpack_exports__","_fs__WEBPACK_IMPORTED_MODULE_0__","fs","addEventListener","_ref","source","method","then","postMessage"],"mappings":"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","file":"static/js/storage.8fcdd212.chunk.js","sourcesContent":["import IdbKvStore from 'idb-kv-store';\r\n\r\n/*const importStorage = () => new Promise((resolve, reject) => {\r\n let done = false;\r\n const frame = document.createElement('iframe');\r\n window.addEventListener('message', ({data}) => {\r\n if (data.method === 'storage' && !done) {\r\n done = true;\r\n resolve(data.files);\r\n frame.contentWindow.postMessage({method: 'clear'}, '*');\r\n }\r\n });\r\n frame.addEventListener('load', () => {\r\n frame.contentWindow.postMessage({method: 'transfer'}, '*');\r\n });\r\n frame.addEventListener('error', () => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n });\r\n frame.src = \"https://diablo.rivsoft.net/storage.html\";\r\n frame.style.display = \"none\";\r\n document.body.appendChild(frame);\r\n setTimeout(() => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n }, 10000);\r\n});*/\r\n\r\nasync function downloadFile(store, name) {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n const url = URL.createObjectURL(blob);\r\n const lnk = document.createElement('a');\r\n lnk.setAttribute('href', url);\r\n lnk.setAttribute('download', name);\r\n document.body.appendChild(lnk);\r\n lnk.click();\r\n document.body.removeChild(lnk);\r\n URL.revokeObjectURL(url);\r\n } else {\r\n console.error(`File ${name} does not exist`);\r\n }\r\n}\r\n\r\nasync function downloadSaves(store) {\r\n for (let name of await store.keys()) {\r\n if (name.match(/\\.sv$/i)) {\r\n downloadFile(store, name);\r\n }\r\n }\r\n}\r\n\r\nconst readFile = file => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n reader.readAsArrayBuffer(file);\r\n});\r\nasync function uploadFile(store, files, file) {\r\n const data = new Uint8Array(await readFile(file));\r\n files.set(file.name.toLowerCase(), data);\r\n return store.set(file.name.toLowerCase(), data);\r\n}\r\n\r\nexport default async function create_fs(load) {\r\n try {\r\n const store = new IdbKvStore('diablo_fs');\r\n const files = new Map();\r\n for (let [name, data] of Object.entries(await store.json())) {\r\n files.set(name, data);\r\n }\r\n /*if (load) {\r\n const files = await importStorage();\r\n if (files) {\r\n for (let [name, data] of files) {\r\n files.set(name, data);\r\n store.set(name, data);\r\n }\r\n }\r\n }*/\r\n window.DownloadFile = name => downloadFile(store, name);\r\n window.DownloadSaves = () => downloadSaves(store);\r\n return {\r\n files,\r\n update: (name, data) => store.set(name, data),\r\n delete: name => store.remove(name),\r\n clear: () => store.clear(),\r\n download: name => downloadFile(store, name),\r\n upload: file => uploadFile(store, files, file),\r\n fileUrl: async name => {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n return URL.createObjectURL(blob);\r\n }\r\n },\r\n };\r\n } catch (e) {\r\n window.DownloadFile = () => console.error('IndexedDB is not supported');\r\n window.DownloadSaves = () => console.error('IndexedDB is not supported');\r\n return {\r\n files: new Map(),\r\n update: () => Promise.resolve(),\r\n delete: () => Promise.resolve(),\r\n clear: () => Promise.resolve(),\r\n download: () => Promise.resolve(),\r\n upload: () => Promise.resolve(),\r\n fileUrl: () => Promise.resolve(),\r\n };\r\n } \r\n}\r\n","import create_fs from './fs';\r\n\r\nconst fs = create_fs();\r\nwindow.addEventListener('message', ({data, source}) => {\r\n if (data.method === 'transfer') {\r\n fs.then(({files}) => {\r\n source.postMessage({method: 'storage', files}, '*');\r\n });\r\n } else if (data.method === 'clear') {\r\n fs.then(({clear}) => clear());\r\n }\r\n});"],"sourceRoot":""} \ No newline at end of file diff --git a/storage.html b/storage.html index b0cc1f6..0706273 100644 --- a/storage.html +++ b/storage.html @@ -1 +1 @@ -DIABLO Connector \ No newline at end of file +DIABLO Connector \ No newline at end of file