Home | History | Annotate | Download | only in embenchen
      1 var EXPECTED_OUTPUT =
      2   /frame averages: .+ \+- .+, range: .+ to .+ \n/;
      3 var Module = {
      4   arguments: [1],
      5   print: function(x) {Module.printBuffer += x + '\n';},
      6   preRun: [function() {Module.printBuffer = ''}],
      7   postRun: [function() {
      8     assertTrue(EXPECTED_OUTPUT.test(Module.printBuffer));
      9   }],
     10 };
     11 // The Module object: Our interface to the outside world. We import
     12 // and export values on it, and do the work to get that through
     13 // closure compiler if necessary. There are various ways Module can be used:
     14 // 1. Not defined. We create it here
     15 // 2. A function parameter, function(Module) { ..generated code.. }
     16 // 3. pre-run appended it, var Module = {}; ..generated code..
     17 // 4. External script tag defines var Module.
     18 // We need to do an eval in order to handle the closure compiler
     19 // case, where this code here is minified but Module was defined
     20 // elsewhere (e.g. case 4 above). We also need to check if Module
     21 // already exists (e.g. case 3 above).
     22 // Note that if you want to run closure, and also to use Module
     23 // after the generated code, you will need to define   var Module = {};
     24 // before the code. Then that object will be used in the code, and you
     25 // can continue to use Module afterwards as well.
     26 var Module;
     27 if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
     28 
     29 // Sometimes an existing Module object exists with properties
     30 // meant to overwrite the default module functionality. Here
     31 // we collect those properties and reapply _after_ we configure
     32 // the current environment's defaults to avoid having to be so
     33 // defensive during initialization.
     34 var moduleOverrides = {};
     35 for (var key in Module) {
     36   if (Module.hasOwnProperty(key)) {
     37     moduleOverrides[key] = Module[key];
     38   }
     39 }
     40 
     41 // The environment setup code below is customized to use Module.
     42 // *** Environment setup code ***
     43 var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
     44 var ENVIRONMENT_IS_WEB = typeof window === 'object';
     45 var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
     46 var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
     47 
     48 if (ENVIRONMENT_IS_NODE) {
     49   // Expose functionality in the same simple way that the shells work
     50   // Note that we pollute the global namespace here, otherwise we break in node
     51   if (!Module['print']) Module['print'] = function print(x) {
     52     process['stdout'].write(x + '\n');
     53   };
     54   if (!Module['printErr']) Module['printErr'] = function printErr(x) {
     55     process['stderr'].write(x + '\n');
     56   };
     57 
     58   var nodeFS = require('fs');
     59   var nodePath = require('path');
     60 
     61   Module['read'] = function read(filename, binary) {
     62     filename = nodePath['normalize'](filename);
     63     var ret = nodeFS['readFileSync'](filename);
     64     // The path is absolute if the normalized version is the same as the resolved.
     65     if (!ret && filename != nodePath['resolve'](filename)) {
     66       filename = path.join(__dirname, '..', 'src', filename);
     67       ret = nodeFS['readFileSync'](filename);
     68     }
     69     if (ret && !binary) ret = ret.toString();
     70     return ret;
     71   };
     72 
     73   Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) };
     74 
     75   Module['load'] = function load(f) {
     76     globalEval(read(f));
     77   };
     78 
     79   Module['arguments'] = process['argv'].slice(2);
     80 
     81   module['exports'] = Module;
     82 }
     83 else if (ENVIRONMENT_IS_SHELL) {
     84   if (!Module['print']) Module['print'] = print;
     85   if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
     86 
     87   if (typeof read != 'undefined') {
     88     Module['read'] = read;
     89   } else {
     90     Module['read'] = function read() { throw 'no read() available (jsc?)' };
     91   }
     92 
     93   Module['readBinary'] = function readBinary(f) {
     94     return read(f, 'binary');
     95   };
     96 
     97   if (typeof scriptArgs != 'undefined') {
     98     Module['arguments'] = scriptArgs;
     99   } else if (typeof arguments != 'undefined') {
    100     Module['arguments'] = arguments;
    101   }
    102 
    103   this['Module'] = Module;
    104 
    105   eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined"); // wipe out the SpiderMonkey shell 'gc' function, which can confuse closure (uses it as a minified name, and it is then initted to a non-falsey value unexpectedly)
    106 }
    107 else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
    108   Module['read'] = function read(url) {
    109     var xhr = new XMLHttpRequest();
    110     xhr.open('GET', url, false);
    111     xhr.send(null);
    112     return xhr.responseText;
    113   };
    114 
    115   if (typeof arguments != 'undefined') {
    116     Module['arguments'] = arguments;
    117   }
    118 
    119   if (typeof console !== 'undefined') {
    120     if (!Module['print']) Module['print'] = function print(x) {
    121       console.log(x);
    122     };
    123     if (!Module['printErr']) Module['printErr'] = function printErr(x) {
    124       console.log(x);
    125     };
    126   } else {
    127     // Probably a worker, and without console.log. We can do very little here...
    128     var TRY_USE_DUMP = false;
    129     if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
    130       dump(x);
    131     }) : (function(x) {
    132       // self.postMessage(x); // enable this if you want stdout to be sent as messages
    133     }));
    134   }
    135 
    136   if (ENVIRONMENT_IS_WEB) {
    137     window['Module'] = Module;
    138   } else {
    139     Module['load'] = importScripts;
    140   }
    141 }
    142 else {
    143   // Unreachable because SHELL is dependant on the others
    144   throw 'Unknown runtime environment. Where are we?';
    145 }
    146 
    147 function globalEval(x) {
    148   eval.call(null, x);
    149 }
    150 if (!Module['load'] == 'undefined' && Module['read']) {
    151   Module['load'] = function load(f) {
    152     globalEval(Module['read'](f));
    153   };
    154 }
    155 if (!Module['print']) {
    156   Module['print'] = function(){};
    157 }
    158 if (!Module['printErr']) {
    159   Module['printErr'] = Module['print'];
    160 }
    161 if (!Module['arguments']) {
    162   Module['arguments'] = [];
    163 }
    164 // *** Environment setup code ***
    165 
    166 // Closure helpers
    167 Module.print = Module['print'];
    168 Module.printErr = Module['printErr'];
    169 
    170 // Callbacks
    171 Module['preRun'] = [];
    172 Module['postRun'] = [];
    173 
    174 // Merge back in the overrides
    175 for (var key in moduleOverrides) {
    176   if (moduleOverrides.hasOwnProperty(key)) {
    177     Module[key] = moduleOverrides[key];
    178   }
    179 }
    180 
    181 
    182 
    183 // === Auto-generated preamble library stuff ===
    184 
    185 //========================================
    186 // Runtime code shared with compiler
    187 //========================================
    188 
    189 var Runtime = {
    190   stackSave: function () {
    191     return STACKTOP;
    192   },
    193   stackRestore: function (stackTop) {
    194     STACKTOP = stackTop;
    195   },
    196   forceAlign: function (target, quantum) {
    197     quantum = quantum || 4;
    198     if (quantum == 1) return target;
    199     if (isNumber(target) && isNumber(quantum)) {
    200       return Math.ceil(target/quantum)*quantum;
    201     } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
    202       return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')';
    203     }
    204     return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
    205   },
    206   isNumberType: function (type) {
    207     return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
    208   },
    209   isPointerType: function isPointerType(type) {
    210   return type[type.length-1] == '*';
    211 },
    212   isStructType: function isStructType(type) {
    213   if (isPointerType(type)) return false;
    214   if (isArrayType(type)) return true;
    215   if (/<?\{ ?[^}]* ?\}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types
    216   // See comment in isStructPointerType()
    217   return type[0] == '%';
    218 },
    219   INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
    220   FLOAT_TYPES: {"float":0,"double":0},
    221   or64: function (x, y) {
    222     var l = (x | 0) | (y | 0);
    223     var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
    224     return l + h;
    225   },
    226   and64: function (x, y) {
    227     var l = (x | 0) & (y | 0);
    228     var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
    229     return l + h;
    230   },
    231   xor64: function (x, y) {
    232     var l = (x | 0) ^ (y | 0);
    233     var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
    234     return l + h;
    235   },
    236   getNativeTypeSize: function (type) {
    237     switch (type) {
    238       case 'i1': case 'i8': return 1;
    239       case 'i16': return 2;
    240       case 'i32': return 4;
    241       case 'i64': return 8;
    242       case 'float': return 4;
    243       case 'double': return 8;
    244       default: {
    245         if (type[type.length-1] === '*') {
    246           return Runtime.QUANTUM_SIZE; // A pointer
    247         } else if (type[0] === 'i') {
    248           var bits = parseInt(type.substr(1));
    249           assert(bits % 8 === 0);
    250           return bits/8;
    251         } else {
    252           return 0;
    253         }
    254       }
    255     }
    256   },
    257   getNativeFieldSize: function (type) {
    258     return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
    259   },
    260   dedup: function dedup(items, ident) {
    261   var seen = {};
    262   if (ident) {
    263     return items.filter(function(item) {
    264       if (seen[item[ident]]) return false;
    265       seen[item[ident]] = true;
    266       return true;
    267     });
    268   } else {
    269     return items.filter(function(item) {
    270       if (seen[item]) return false;
    271       seen[item] = true;
    272       return true;
    273     });
    274   }
    275 },
    276   set: function set() {
    277   var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
    278   var ret = {};
    279   for (var i = 0; i < args.length; i++) {
    280     ret[args[i]] = 0;
    281   }
    282   return ret;
    283 },
    284   STACK_ALIGN: 8,
    285   getAlignSize: function (type, size, vararg) {
    286     // we align i64s and doubles on 64-bit boundaries, unlike x86
    287     if (!vararg && (type == 'i64' || type == 'double')) return 8;
    288     if (!type) return Math.min(size, 8); // align structures internally to 64 bits
    289     return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
    290   },
    291   calculateStructAlignment: function calculateStructAlignment(type) {
    292     type.flatSize = 0;
    293     type.alignSize = 0;
    294     var diffs = [];
    295     var prev = -1;
    296     var index = 0;
    297     type.flatIndexes = type.fields.map(function(field) {
    298       index++;
    299       var size, alignSize;
    300       if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
    301         size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
    302         alignSize = Runtime.getAlignSize(field, size);
    303       } else if (Runtime.isStructType(field)) {
    304         if (field[1] === '0') {
    305           // this is [0 x something]. When inside another structure like here, it must be at the end,
    306           // and it adds no size
    307           // XXX this happens in java-nbody for example... assert(index === type.fields.length, 'zero-length in the middle!');
    308           size = 0;
    309           if (Types.types[field]) {
    310             alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
    311           } else {
    312             alignSize = type.alignSize || QUANTUM_SIZE;
    313           }
    314         } else {
    315           size = Types.types[field].flatSize;
    316           alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
    317         }
    318       } else if (field[0] == 'b') {
    319         // bN, large number field, like a [N x i8]
    320         size = field.substr(1)|0;
    321         alignSize = 1;
    322       } else if (field[0] === '<') {
    323         // vector type
    324         size = alignSize = Types.types[field].flatSize; // fully aligned
    325       } else if (field[0] === 'i') {
    326         // illegal integer field, that could not be legalized because it is an internal structure field
    327         // it is ok to have such fields, if we just use them as markers of field size and nothing more complex
    328         size = alignSize = parseInt(field.substr(1))/8;
    329         assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field);
    330       } else {
    331         assert(false, 'invalid type for calculateStructAlignment');
    332       }
    333       if (type.packed) alignSize = 1;
    334       type.alignSize = Math.max(type.alignSize, alignSize);
    335       var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
    336       type.flatSize = curr + size;
    337       if (prev >= 0) {
    338         diffs.push(curr-prev);
    339       }
    340       prev = curr;
    341       return curr;
    342     });
    343     if (type.name_ && type.name_[0] === '[') {
    344       // arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid
    345       // allocating a potentially huge array for [999999 x i8] etc.
    346       type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2;
    347     }
    348     type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
    349     if (diffs.length == 0) {
    350       type.flatFactor = type.flatSize;
    351     } else if (Runtime.dedup(diffs).length == 1) {
    352       type.flatFactor = diffs[0];
    353     }
    354     type.needsFlattening = (type.flatFactor != 1);
    355     return type.flatIndexes;
    356   },
    357   generateStructInfo: function (struct, typeName, offset) {
    358     var type, alignment;
    359     if (typeName) {
    360       offset = offset || 0;
    361       type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName];
    362       if (!type) return null;
    363       if (type.fields.length != struct.length) {
    364         printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
    365         return null;
    366       }
    367       alignment = type.flatIndexes;
    368     } else {
    369       var type = { fields: struct.map(function(item) { return item[0] }) };
    370       alignment = Runtime.calculateStructAlignment(type);
    371     }
    372     var ret = {
    373       __size__: type.flatSize
    374     };
    375     if (typeName) {
    376       struct.forEach(function(item, i) {
    377         if (typeof item === 'string') {
    378           ret[item] = alignment[i] + offset;
    379         } else {
    380           // embedded struct
    381           var key;
    382           for (var k in item) key = k;
    383           ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]);
    384         }
    385       });
    386     } else {
    387       struct.forEach(function(item, i) {
    388         ret[item[1]] = alignment[i];
    389       });
    390     }
    391     return ret;
    392   },
    393   dynCall: function (sig, ptr, args) {
    394     if (args && args.length) {
    395       if (!args.splice) args = Array.prototype.slice.call(args);
    396       args.splice(0, 0, ptr);
    397       return Module['dynCall_' + sig].apply(null, args);
    398     } else {
    399       return Module['dynCall_' + sig].call(null, ptr);
    400     }
    401   },
    402   functionPointers: [],
    403   addFunction: function (func) {
    404     for (var i = 0; i < Runtime.functionPointers.length; i++) {
    405       if (!Runtime.functionPointers[i]) {
    406         Runtime.functionPointers[i] = func;
    407         return 2*(1 + i);
    408       }
    409     }
    410     throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
    411   },
    412   removeFunction: function (index) {
    413     Runtime.functionPointers[(index-2)/2] = null;
    414   },
    415   getAsmConst: function (code, numArgs) {
    416     // code is a constant string on the heap, so we can cache these
    417     if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
    418     var func = Runtime.asmConstCache[code];
    419     if (func) return func;
    420     var args = [];
    421     for (var i = 0; i < numArgs; i++) {
    422       args.push(String.fromCharCode(36) + i); // $0, $1 etc
    423     }
    424     var source = Pointer_stringify(code);
    425     if (source[0] === '"') {
    426       // tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct
    427       if (source.indexOf('"', 1) === source.length-1) {
    428         source = source.substr(1, source.length-2);
    429       } else {
    430         // something invalid happened, e.g. EM_ASM("..code($0)..", input)
    431         abort('invalid EM_ASM input |' + source + '|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)');
    432       }
    433     }
    434     try {
    435       var evalled = eval('(function(' + args.join(',') + '){ ' + source + ' })'); // new Function does not allow upvars in node
    436     } catch(e) {
    437       Module.printErr('error in executing inline EM_ASM code: ' + e + ' on: \n\n' + source + '\n\nwith args |' + args + '| (make sure to use the right one out of EM_ASM, EM_ASM_ARGS, etc.)');
    438       throw e;
    439     }
    440     return Runtime.asmConstCache[code] = evalled;
    441   },
    442   warnOnce: function (text) {
    443     if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
    444     if (!Runtime.warnOnce.shown[text]) {
    445       Runtime.warnOnce.shown[text] = 1;
    446       Module.printErr(text);
    447     }
    448   },
    449   funcWrappers: {},
    450   getFuncWrapper: function (func, sig) {
    451     assert(sig);
    452     if (!Runtime.funcWrappers[func]) {
    453       Runtime.funcWrappers[func] = function dynCall_wrapper() {
    454         return Runtime.dynCall(sig, func, arguments);
    455       };
    456     }
    457     return Runtime.funcWrappers[func];
    458   },
    459   UTF8Processor: function () {
    460     var buffer = [];
    461     var needed = 0;
    462     this.processCChar = function (code) {
    463       code = code & 0xFF;
    464 
    465       if (buffer.length == 0) {
    466         if ((code & 0x80) == 0x00) {        // 0xxxxxxx
    467           return String.fromCharCode(code);
    468         }
    469         buffer.push(code);
    470         if ((code & 0xE0) == 0xC0) {        // 110xxxxx
    471           needed = 1;
    472         } else if ((code & 0xF0) == 0xE0) { // 1110xxxx
    473           needed = 2;
    474         } else {                            // 11110xxx
    475           needed = 3;
    476         }
    477         return '';
    478       }
    479 
    480       if (needed) {
    481         buffer.push(code);
    482         needed--;
    483         if (needed > 0) return '';
    484       }
    485 
    486       var c1 = buffer[0];
    487       var c2 = buffer[1];
    488       var c3 = buffer[2];
    489       var c4 = buffer[3];
    490       var ret;
    491       if (buffer.length == 2) {
    492         ret = String.fromCharCode(((c1 & 0x1F) << 6)  | (c2 & 0x3F));
    493       } else if (buffer.length == 3) {
    494         ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6)  | (c3 & 0x3F));
    495       } else {
    496         // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
    497         var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) |
    498                         ((c3 & 0x3F) << 6)  | (c4 & 0x3F);
    499         ret = String.fromCharCode(
    500           Math.floor((codePoint - 0x10000) / 0x400) + 0xD800,
    501           (codePoint - 0x10000) % 0x400 + 0xDC00);
    502       }
    503       buffer.length = 0;
    504       return ret;
    505     }
    506     this.processJSString = function processJSString(string) {
    507       /* TODO: use TextEncoder when present,
    508         var encoder = new TextEncoder();
    509         encoder['encoding'] = "utf-8";
    510         var utf8Array = encoder['encode'](aMsg.data);
    511       */
    512       string = unescape(encodeURIComponent(string));
    513       var ret = [];
    514       for (var i = 0; i < string.length; i++) {
    515         ret.push(string.charCodeAt(i));
    516       }
    517       return ret;
    518     }
    519   },
    520   getCompilerSetting: function (name) {
    521     throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work';
    522   },
    523   stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+7)&-8); return ret; },
    524   staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; },
    525   dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; },
    526   alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
    527   makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+4294967296)))); return ret; },
    528   GLOBAL_BASE: 8,
    529   QUANTUM_SIZE: 4,
    530   __dummy__: 0
    531 }
    532 
    533 
    534 Module['Runtime'] = Runtime;
    535 
    536 
    537 
    538 
    539 
    540 
    541 
    542 
    543 
    544 //========================================
    545 // Runtime essentials
    546 //========================================
    547 
    548 var __THREW__ = 0; // Used in checking for thrown exceptions.
    549 
    550 var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
    551 var EXITSTATUS = 0;
    552 
    553 var undef = 0;
    554 // tempInt is used for 32-bit signed values or smaller. tempBigInt is used
    555 // for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
    556 var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
    557 var tempI64, tempI64b;
    558 var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
    559 
    560 function assert(condition, text) {
    561   if (!condition) {
    562     abort('Assertion failed: ' + text);
    563   }
    564 }
    565 
    566 var globalScope = this;
    567 
    568 // C calling interface. A convenient way to call C functions (in C files, or
    569 // defined with extern "C").
    570 //
    571 // Note: LLVM optimizations can inline and remove functions, after which you will not be
    572 //       able to call them. Closure can also do so. To avoid that, add your function to
    573 //       the exports using something like
    574 //
    575 //         -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
    576 //
    577 // @param ident      The name of the C function (note that C++ functions will be name-mangled - use extern "C")
    578 // @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
    579 //                   'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit).
    580 // @param argTypes   An array of the types of arguments for the function (if there are no arguments, this can be ommitted). Types are as in returnType,
    581 //                   except that 'array' is not possible (there is no way for us to know the length of the array)
    582 // @param args       An array of the arguments to the function, as native JS values (as in returnType)
    583 //                   Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
    584 // @return           The return value, as a native JS value (as in returnType)
    585 function ccall(ident, returnType, argTypes, args) {
    586   return ccallFunc(getCFunc(ident), returnType, argTypes, args);
    587 }
    588 Module["ccall"] = ccall;
    589 
    590 // Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
    591 function getCFunc(ident) {
    592   try {
    593     var func = Module['_' + ident]; // closure exported function
    594     if (!func) func = eval('_' + ident); // explicit lookup
    595   } catch(e) {
    596   }
    597   assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
    598   return func;
    599 }
    600 
    601 // Internal function that does a C call using a function, not an identifier
    602 function ccallFunc(func, returnType, argTypes, args) {
    603   var stack = 0;
    604   function toC(value, type) {
    605     if (type == 'string') {
    606       if (value === null || value === undefined || value === 0) return 0; // null string
    607       value = intArrayFromString(value);
    608       type = 'array';
    609     }
    610     if (type == 'array') {
    611       if (!stack) stack = Runtime.stackSave();
    612       var ret = Runtime.stackAlloc(value.length);
    613       writeArrayToMemory(value, ret);
    614       return ret;
    615     }
    616     return value;
    617   }
    618   function fromC(value, type) {
    619     if (type == 'string') {
    620       return Pointer_stringify(value);
    621     }
    622     assert(type != 'array');
    623     return value;
    624   }
    625   var i = 0;
    626   var cArgs = args ? args.map(function(arg) {
    627     return toC(arg, argTypes[i++]);
    628   }) : [];
    629   var ret = fromC(func.apply(null, cArgs), returnType);
    630   if (stack) Runtime.stackRestore(stack);
    631   return ret;
    632 }
    633 
    634 // Returns a native JS wrapper for a C function. This is similar to ccall, but
    635 // returns a function you can call repeatedly in a normal way. For example:
    636 //
    637 //   var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
    638 //   alert(my_function(5, 22));
    639 //   alert(my_function(99, 12));
    640 //
    641 function cwrap(ident, returnType, argTypes) {
    642   var func = getCFunc(ident);
    643   return function() {
    644     return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments));
    645   }
    646 }
    647 Module["cwrap"] = cwrap;
    648 
    649 // Sets a value in memory in a dynamic way at run-time. Uses the
    650 // type data. This is the same as makeSetValue, except that
    651 // makeSetValue is done at compile-time and generates the needed
    652 // code then, whereas this function picks the right code at
    653 // run-time.
    654 // Note that setValue and getValue only do *aligned* writes and reads!
    655 // Note that ccall uses JS types as for defining types, while setValue and
    656 // getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
    657 function setValue(ptr, value, type, noSafe) {
    658   type = type || 'i8';
    659   if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
    660     switch(type) {
    661       case 'i1': HEAP8[(ptr)]=value; break;
    662       case 'i8': HEAP8[(ptr)]=value; break;
    663       case 'i16': HEAP16[((ptr)>>1)]=value; break;
    664       case 'i32': HEAP32[((ptr)>>2)]=value; break;
    665       case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+4294967296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/(+4294967296))))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
    666       case 'float': HEAPF32[((ptr)>>2)]=value; break;
    667       case 'double': HEAPF64[((ptr)>>3)]=value; break;
    668       default: abort('invalid type for setValue: ' + type);
    669     }
    670 }
    671 Module['setValue'] = setValue;
    672 
    673 // Parallel to setValue.
    674 function getValue(ptr, type, noSafe) {
    675   type = type || 'i8';
    676   if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
    677     switch(type) {
    678       case 'i1': return HEAP8[(ptr)];
    679       case 'i8': return HEAP8[(ptr)];
    680       case 'i16': return HEAP16[((ptr)>>1)];
    681       case 'i32': return HEAP32[((ptr)>>2)];
    682       case 'i64': return HEAP32[((ptr)>>2)];
    683       case 'float': return HEAPF32[((ptr)>>2)];
    684       case 'double': return HEAPF64[((ptr)>>3)];
    685       default: abort('invalid type for setValue: ' + type);
    686     }
    687   return null;
    688 }
    689 Module['getValue'] = getValue;
    690 
    691 var ALLOC_NORMAL = 0; // Tries to use _malloc()
    692 var ALLOC_STACK = 1; // Lives for the duration of the current function call
    693 var ALLOC_STATIC = 2; // Cannot be freed
    694 var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
    695 var ALLOC_NONE = 4; // Do not allocate
    696 Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
    697 Module['ALLOC_STACK'] = ALLOC_STACK;
    698 Module['ALLOC_STATIC'] = ALLOC_STATIC;
    699 Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
    700 Module['ALLOC_NONE'] = ALLOC_NONE;
    701 
    702 // allocate(): This is for internal use. You can use it yourself as well, but the interface
    703 //             is a little tricky (see docs right below). The reason is that it is optimized
    704 //             for multiple syntaxes to save space in generated code. So you should
    705 //             normally not use allocate(), and instead allocate memory using _malloc(),
    706 //             initialize it with setValue(), and so forth.
    707 // @slab: An array of data, or a number. If a number, then the size of the block to allocate,
    708 //        in *bytes* (note that this is sometimes confusing: the next parameter does not
    709 //        affect this!)
    710 // @types: Either an array of types, one for each byte (or 0 if no type at that position),
    711 //         or a single type which is used for the entire block. This only matters if there
    712 //         is initial data - if @slab is a number, then this does not matter at all and is
    713 //         ignored.
    714 // @allocator: How to allocate memory, see ALLOC_*
    715 function allocate(slab, types, allocator, ptr) {
    716   var zeroinit, size;
    717   if (typeof slab === 'number') {
    718     zeroinit = true;
    719     size = slab;
    720   } else {
    721     zeroinit = false;
    722     size = slab.length;
    723   }
    724 
    725   var singleType = typeof types === 'string' ? types : null;
    726 
    727   var ret;
    728   if (allocator == ALLOC_NONE) {
    729     ret = ptr;
    730   } else {
    731     ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
    732   }
    733 
    734   if (zeroinit) {
    735     var ptr = ret, stop;
    736     assert((ret & 3) == 0);
    737     stop = ret + (size & ~3);
    738     for (; ptr < stop; ptr += 4) {
    739       HEAP32[((ptr)>>2)]=0;
    740     }
    741     stop = ret + size;
    742     while (ptr < stop) {
    743       HEAP8[((ptr++)|0)]=0;
    744     }
    745     return ret;
    746   }
    747 
    748   if (singleType === 'i8') {
    749     if (slab.subarray || slab.slice) {
    750       HEAPU8.set(slab, ret);
    751     } else {
    752       HEAPU8.set(new Uint8Array(slab), ret);
    753     }
    754     return ret;
    755   }
    756 
    757   var i = 0, type, typeSize, previousType;
    758   while (i < size) {
    759     var curr = slab[i];
    760 
    761     if (typeof curr === 'function') {
    762       curr = Runtime.getFunctionIndex(curr);
    763     }
    764 
    765     type = singleType || types[i];
    766     if (type === 0) {
    767       i++;
    768       continue;
    769     }
    770 
    771     if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
    772 
    773     setValue(ret+i, curr, type);
    774 
    775     // no need to look up size unless type changes, so cache it
    776     if (previousType !== type) {
    777       typeSize = Runtime.getNativeTypeSize(type);
    778       previousType = type;
    779     }
    780     i += typeSize;
    781   }
    782 
    783   return ret;
    784 }
    785 Module['allocate'] = allocate;
    786 
    787 function Pointer_stringify(ptr, /* optional */ length) {
    788   // TODO: use TextDecoder
    789   // Find the length, and check for UTF while doing so
    790   var hasUtf = false;
    791   var t;
    792   var i = 0;
    793   while (1) {
    794     t = HEAPU8[(((ptr)+(i))|0)];
    795     if (t >= 128) hasUtf = true;
    796     else if (t == 0 && !length) break;
    797     i++;
    798     if (length && i == length) break;
    799   }
    800   if (!length) length = i;
    801 
    802   var ret = '';
    803 
    804   if (!hasUtf) {
    805     var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
    806     var curr;
    807     while (length > 0) {
    808       curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
    809       ret = ret ? ret + curr : curr;
    810       ptr += MAX_CHUNK;
    811       length -= MAX_CHUNK;
    812     }
    813     return ret;
    814   }
    815 
    816   var utf8 = new Runtime.UTF8Processor();
    817   for (i = 0; i < length; i++) {
    818     t = HEAPU8[(((ptr)+(i))|0)];
    819     ret += utf8.processCChar(t);
    820   }
    821   return ret;
    822 }
    823 Module['Pointer_stringify'] = Pointer_stringify;
    824 
    825 // Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
    826 // a copy of that string as a Javascript String object.
    827 function UTF16ToString(ptr) {
    828   var i = 0;
    829 
    830   var str = '';
    831   while (1) {
    832     var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
    833     if (codeUnit == 0)
    834       return str;
    835     ++i;
    836     // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
    837     str += String.fromCharCode(codeUnit);
    838   }
    839 }
    840 Module['UTF16ToString'] = UTF16ToString;
    841 
    842 // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
    843 // null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP.
    844 function stringToUTF16(str, outPtr) {
    845   for(var i = 0; i < str.length; ++i) {
    846     // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
    847     var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
    848     HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit;
    849   }
    850   // Null-terminate the pointer to the HEAP.
    851   HEAP16[(((outPtr)+(str.length*2))>>1)]=0;
    852 }
    853 Module['stringToUTF16'] = stringToUTF16;
    854 
    855 // Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emscripten HEAP, returns
    856 // a copy of that string as a Javascript String object.
    857 function UTF32ToString(ptr) {
    858   var i = 0;
    859 
    860   var str = '';
    861   while (1) {
    862     var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
    863     if (utf32 == 0)
    864       return str;
    865     ++i;
    866     // 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.
    867     if (utf32 >= 0x10000) {
    868       var ch = utf32 - 0x10000;
    869       str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
    870     } else {
    871       str += String.fromCharCode(utf32);
    872     }
    873   }
    874 }
    875 Module['UTF32ToString'] = UTF32ToString;
    876 
    877 // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
    878 // null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP,
    879 // but can use less, since str.length does not return the number of characters in the string, but the number of UTF-16 code units in the string.
    880 function stringToUTF32(str, outPtr) {
    881   var iChar = 0;
    882   for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
    883     // 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.
    884     var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate
    885     if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
    886       var trailSurrogate = str.charCodeAt(++iCodeUnit);
    887       codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
    888     }
    889     HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit;
    890     ++iChar;
    891   }
    892   // Null-terminate the pointer to the HEAP.
    893   HEAP32[(((outPtr)+(iChar*4))>>2)]=0;
    894 }
    895 Module['stringToUTF32'] = stringToUTF32;
    896 
    897 function demangle(func) {
    898   var i = 3;
    899   // params, etc.
    900   var basicTypes = {
    901     'v': 'void',
    902     'b': 'bool',
    903     'c': 'char',
    904     's': 'short',
    905     'i': 'int',
    906     'l': 'long',
    907     'f': 'float',
    908     'd': 'double',
    909     'w': 'wchar_t',
    910     'a': 'signed char',
    911     'h': 'unsigned char',
    912     't': 'unsigned short',
    913     'j': 'unsigned int',
    914     'm': 'unsigned long',
    915     'x': 'long long',
    916     'y': 'unsigned long long',
    917     'z': '...'
    918   };
    919   var subs = [];
    920   var first = true;
    921   function dump(x) {
    922     //return;
    923     if (x) Module.print(x);
    924     Module.print(func);
    925     var pre = '';
    926     for (var a = 0; a < i; a++) pre += ' ';
    927     Module.print (pre + '^');
    928   }
    929   function parseNested() {
    930     i++;
    931     if (func[i] === 'K') i++; // ignore const
    932     var parts = [];
    933     while (func[i] !== 'E') {
    934       if (func[i] === 'S') { // substitution
    935         i++;
    936         var next = func.indexOf('_', i);
    937         var num = func.substring(i, next) || 0;
    938         parts.push(subs[num] || '?');
    939         i = next+1;
    940         continue;
    941       }
    942       if (func[i] === 'C') { // constructor
    943         parts.push(parts[parts.length-1]);
    944         i += 2;
    945         continue;
    946       }
    947       var size = parseInt(func.substr(i));
    948       var pre = size.toString().length;
    949       if (!size || !pre) { i--; break; } // counter i++ below us
    950       var curr = func.substr(i + pre, size);
    951       parts.push(curr);
    952       subs.push(curr);
    953       i += pre + size;
    954     }
    955     i++; // skip E
    956     return parts;
    957   }
    958   function parse(rawList, limit, allowVoid) { // main parser
    959     limit = limit || Infinity;
    960     var ret = '', list = [];
    961     function flushList() {
    962       return '(' + list.join(', ') + ')';
    963     }
    964     var name;
    965     if (func[i] === 'N') {
    966       // namespaced N-E
    967       name = parseNested().join('::');
    968       limit--;
    969       if (limit === 0) return rawList ? [name] : name;
    970     } else {
    971       // not namespaced
    972       if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L'
    973       var size = parseInt(func.substr(i));
    974       if (size) {
    975         var pre = size.toString().length;
    976         name = func.substr(i + pre, size);
    977         i += pre + size;
    978       }
    979     }
    980     first = false;
    981     if (func[i] === 'I') {
    982       i++;
    983       var iList = parse(true);
    984       var iRet = parse(true, 1, true);
    985       ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>';
    986     } else {
    987       ret = name;
    988     }
    989     paramLoop: while (i < func.length && limit-- > 0) {
    990       //dump('paramLoop');
    991       var c = func[i++];
    992       if (c in basicTypes) {
    993         list.push(basicTypes[c]);
    994       } else {
    995         switch (c) {
    996           case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer
    997           case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference
    998           case 'L': { // literal
    999             i++; // skip basic type
   1000             var end = func.indexOf('E', i);
   1001             var size = end - i;
   1002             list.push(func.substr(i, size));
   1003             i += size + 2; // size + 'EE'
   1004             break;
   1005           }
   1006           case 'A': { // array
   1007             var size = parseInt(func.substr(i));
   1008             i += size.toString().length;
   1009             if (func[i] !== '_') throw '?';
   1010             i++; // skip _
   1011             list.push(parse(true, 1, true)[0] + ' [' + size + ']');
   1012             break;
   1013           }
   1014           case 'E': break paramLoop;
   1015           default: ret += '?' + c; break paramLoop;
   1016         }
   1017       }
   1018     }
   1019     if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void)
   1020     if (rawList) {
   1021       if (ret) {
   1022         list.push(ret + '?');
   1023       }
   1024       return list;
   1025     } else {
   1026       return ret + flushList();
   1027     }
   1028   }
   1029   try {
   1030     // Special-case the entry point, since its name differs from other name mangling.
   1031     if (func == 'Object._main' || func == '_main') {
   1032       return 'main()';
   1033     }
   1034     if (typeof func === 'number') func = Pointer_stringify(func);
   1035     if (func[0] !== '_') return func;
   1036     if (func[1] !== '_') return func; // C function
   1037     if (func[2] !== 'Z') return func;
   1038     switch (func[3]) {
   1039       case 'n': return 'operator new()';
   1040       case 'd': return 'operator delete()';
   1041     }
   1042     return parse();
   1043   } catch(e) {
   1044     return func;
   1045   }
   1046 }
   1047 
   1048 function demangleAll(text) {
   1049   return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') });
   1050 }
   1051 
   1052 function stackTrace() {
   1053   var stack = new Error().stack;
   1054   return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack trace is not available at least on IE10 and Safari 6.
   1055 }
   1056 
   1057 // Memory management
   1058 
   1059 var PAGE_SIZE = 4096;
   1060 function alignMemoryPage(x) {
   1061   return (x+4095)&-4096;
   1062 }
   1063 
   1064 var HEAP;
   1065 var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
   1066 
   1067 var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
   1068 var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
   1069 var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
   1070 
   1071 function enlargeMemory() {
   1072   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 ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.');
   1073 }
   1074 
   1075 var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
   1076 var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;
   1077 var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
   1078 
   1079 var totalMemory = 4096;
   1080 while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) {
   1081   if (totalMemory < 16*1024*1024) {
   1082     totalMemory *= 2;
   1083   } else {
   1084     totalMemory += 16*1024*1024
   1085   }
   1086 }
   1087 if (totalMemory !== TOTAL_MEMORY) {
   1088   Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be more reasonable');
   1089   TOTAL_MEMORY = totalMemory;
   1090 }
   1091 
   1092 // Initialize the runtime's memory
   1093 // check for full engine support (use string 'subarray' to avoid closure compiler confusion)
   1094 assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
   1095        'JS engine does not provide full typed array support');
   1096 
   1097 var buffer = new ArrayBuffer(TOTAL_MEMORY);
   1098 HEAP8 = new Int8Array(buffer);
   1099 HEAP16 = new Int16Array(buffer);
   1100 HEAP32 = new Int32Array(buffer);
   1101 HEAPU8 = new Uint8Array(buffer);
   1102 HEAPU16 = new Uint16Array(buffer);
   1103 HEAPU32 = new Uint32Array(buffer);
   1104 HEAPF32 = new Float32Array(buffer);
   1105 HEAPF64 = new Float64Array(buffer);
   1106 
   1107 // Endianness check (note: assumes compiler arch was little-endian)
   1108 HEAP32[0] = 255;
   1109 assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system');
   1110 
   1111 Module['HEAP'] = HEAP;
   1112 Module['HEAP8'] = HEAP8;
   1113 Module['HEAP16'] = HEAP16;
   1114 Module['HEAP32'] = HEAP32;
   1115 Module['HEAPU8'] = HEAPU8;
   1116 Module['HEAPU16'] = HEAPU16;
   1117 Module['HEAPU32'] = HEAPU32;
   1118 Module['HEAPF32'] = HEAPF32;
   1119 Module['HEAPF64'] = HEAPF64;
   1120 
   1121 function callRuntimeCallbacks(callbacks) {
   1122   while(callbacks.length > 0) {
   1123     var callback = callbacks.shift();
   1124     if (typeof callback == 'function') {
   1125       callback();
   1126       continue;
   1127     }
   1128     var func = callback.func;
   1129     if (typeof func === 'number') {
   1130       if (callback.arg === undefined) {
   1131         Runtime.dynCall('v', func);
   1132       } else {
   1133         Runtime.dynCall('vi', func, [callback.arg]);
   1134       }
   1135     } else {
   1136       func(callback.arg === undefined ? null : callback.arg);
   1137     }
   1138   }
   1139 }
   1140 
   1141 var __ATPRERUN__  = []; // functions called before the runtime is initialized
   1142 var __ATINIT__    = []; // functions called during startup
   1143 var __ATMAIN__    = []; // functions called when main() is to be run
   1144 var __ATEXIT__    = []; // functions called during shutdown
   1145 var __ATPOSTRUN__ = []; // functions called after the runtime has exited
   1146 
   1147 var runtimeInitialized = false;
   1148 
   1149 function preRun() {
   1150   // compatibility - merge in anything from Module['preRun'] at this time
   1151   if (Module['preRun']) {
   1152     if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
   1153     while (Module['preRun'].length) {
   1154       addOnPreRun(Module['preRun'].shift());
   1155     }
   1156   }
   1157   callRuntimeCallbacks(__ATPRERUN__);
   1158 }
   1159 
   1160 function ensureInitRuntime() {
   1161   if (runtimeInitialized) return;
   1162   runtimeInitialized = true;
   1163   callRuntimeCallbacks(__ATINIT__);
   1164 }
   1165 
   1166 function preMain() {
   1167   callRuntimeCallbacks(__ATMAIN__);
   1168 }
   1169 
   1170 function exitRuntime() {
   1171   callRuntimeCallbacks(__ATEXIT__);
   1172 }
   1173 
   1174 function postRun() {
   1175   // compatibility - merge in anything from Module['postRun'] at this time
   1176   if (Module['postRun']) {
   1177     if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
   1178     while (Module['postRun'].length) {
   1179       addOnPostRun(Module['postRun'].shift());
   1180     }
   1181   }
   1182   callRuntimeCallbacks(__ATPOSTRUN__);
   1183 }
   1184 
   1185 function addOnPreRun(cb) {
   1186   __ATPRERUN__.unshift(cb);
   1187 }
   1188 Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun;
   1189 
   1190 function addOnInit(cb) {
   1191   __ATINIT__.unshift(cb);
   1192 }
   1193 Module['addOnInit'] = Module.addOnInit = addOnInit;
   1194 
   1195 function addOnPreMain(cb) {
   1196   __ATMAIN__.unshift(cb);
   1197 }
   1198 Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain;
   1199 
   1200 function addOnExit(cb) {
   1201   __ATEXIT__.unshift(cb);
   1202 }
   1203 Module['addOnExit'] = Module.addOnExit = addOnExit;
   1204 
   1205 function addOnPostRun(cb) {
   1206   __ATPOSTRUN__.unshift(cb);
   1207 }
   1208 Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun;
   1209 
   1210 // Tools
   1211 
   1212 // This processes a JS string into a C-line array of numbers, 0-terminated.
   1213 // For LLVM-originating strings, see parser.js:parseLLVMString function
   1214 function intArrayFromString(stringy, dontAddNull, length /* optional */) {
   1215   var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
   1216   if (length) {
   1217     ret.length = length;
   1218   }
   1219   if (!dontAddNull) {
   1220     ret.push(0);
   1221   }
   1222   return ret;
   1223 }
   1224 Module['intArrayFromString'] = intArrayFromString;
   1225 
   1226 function intArrayToString(array) {
   1227   var ret = [];
   1228   for (var i = 0; i < array.length; i++) {
   1229     var chr = array[i];
   1230     if (chr > 0xFF) {
   1231       chr &= 0xFF;
   1232     }
   1233     ret.push(String.fromCharCode(chr));
   1234   }
   1235   return ret.join('');
   1236 }
   1237 Module['intArrayToString'] = intArrayToString;
   1238 
   1239 // Write a Javascript array to somewhere in the heap
   1240 function writeStringToMemory(string, buffer, dontAddNull) {
   1241   var array = intArrayFromString(string, dontAddNull);
   1242   var i = 0;
   1243   while (i < array.length) {
   1244     var chr = array[i];
   1245     HEAP8[(((buffer)+(i))|0)]=chr;
   1246     i = i + 1;
   1247   }
   1248 }
   1249 Module['writeStringToMemory'] = writeStringToMemory;
   1250 
   1251 function writeArrayToMemory(array, buffer) {
   1252   for (var i = 0; i < array.length; i++) {
   1253     HEAP8[(((buffer)+(i))|0)]=array[i];
   1254   }
   1255 }
   1256 Module['writeArrayToMemory'] = writeArrayToMemory;
   1257 
   1258 function writeAsciiToMemory(str, buffer, dontAddNull) {
   1259   for (var i = 0; i < str.length; i++) {
   1260     HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i);
   1261   }
   1262   if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0;
   1263 }
   1264 Module['writeAsciiToMemory'] = writeAsciiToMemory;
   1265 
   1266 function unSign(value, bits, ignore) {
   1267   if (value >= 0) {
   1268     return value;
   1269   }
   1270   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
   1271                     : Math.pow(2, bits)         + value;
   1272 }
   1273 function reSign(value, bits, ignore) {
   1274   if (value <= 0) {
   1275     return value;
   1276   }
   1277   var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
   1278                         : Math.pow(2, bits-1);
   1279   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
   1280                                                        // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
   1281                                                        // TODO: In i64 mode 1, resign the two parts separately and safely
   1282     value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
   1283   }
   1284   return value;
   1285 }
   1286 
   1287 // check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 )
   1288 if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
   1289   var ah  = a >>> 16;
   1290   var al = a & 0xffff;
   1291   var bh  = b >>> 16;
   1292   var bl = b & 0xffff;
   1293   return (al*bl + ((ah*bl + al*bh) << 16))|0;
   1294 };
   1295 Math.imul = Math['imul'];
   1296 
   1297 
   1298 var Math_abs = Math.abs;
   1299 var Math_cos = Math.cos;
   1300 var Math_sin = Math.sin;
   1301 var Math_tan = Math.tan;
   1302 var Math_acos = Math.acos;
   1303 var Math_asin = Math.asin;
   1304 var Math_atan = Math.atan;
   1305 var Math_atan2 = Math.atan2;
   1306 var Math_exp = Math.exp;
   1307 var Math_log = Math.log;
   1308 var Math_sqrt = Math.sqrt;
   1309 var Math_ceil = Math.ceil;
   1310 var Math_floor = Math.floor;
   1311 var Math_pow = Math.pow;
   1312 var Math_imul = Math.imul;
   1313 var Math_fround = Math.fround;
   1314 var Math_min = Math.min;
   1315 
   1316 // A counter of dependencies for calling run(). If we need to
   1317 // do asynchronous work before running, increment this and
   1318 // decrement it. Incrementing must happen in a place like
   1319 // PRE_RUN_ADDITIONS (used by emcc to add file preloading).
   1320 // Note that you can add dependencies in preRun, even though
   1321 // it happens right before run - run will be postponed until
   1322 // the dependencies are met.
   1323 var runDependencies = 0;
   1324 var runDependencyWatcher = null;
   1325 var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
   1326 
   1327 function addRunDependency(id) {
   1328   runDependencies++;
   1329   if (Module['monitorRunDependencies']) {
   1330     Module['monitorRunDependencies'](runDependencies);
   1331   }
   1332 }
   1333 Module['addRunDependency'] = addRunDependency;
   1334 function removeRunDependency(id) {
   1335   runDependencies--;
   1336   if (Module['monitorRunDependencies']) {
   1337     Module['monitorRunDependencies'](runDependencies);
   1338   }
   1339   if (runDependencies == 0) {
   1340     if (runDependencyWatcher !== null) {
   1341       clearInterval(runDependencyWatcher);
   1342       runDependencyWatcher = null;
   1343     }
   1344     if (dependenciesFulfilled) {
   1345       var callback = dependenciesFulfilled;
   1346       dependenciesFulfilled = null;
   1347       callback(); // can add another dependenciesFulfilled
   1348     }
   1349   }
   1350 }
   1351 Module['removeRunDependency'] = removeRunDependency;
   1352 
   1353 Module["preloadedImages"] = {}; // maps url to image data
   1354 Module["preloadedAudios"] = {}; // maps url to audio data
   1355 
   1356 
   1357 var memoryInitializer = null;
   1358 
   1359 // === Body ===
   1360 var __ZTVN10__cxxabiv117__class_type_infoE = 7024;
   1361 var __ZTVN10__cxxabiv120__si_class_type_infoE = 7064;
   1362 
   1363 
   1364 
   1365 
   1366 STATIC_BASE = 8;
   1367 
   1368 STATICTOP = STATIC_BASE + Runtime.alignMemory(7731);
   1369 /* global initializers */ __ATINIT__.push();
   1370 
   1371 
   1372 /* memory initializer */ allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,118,72,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,114,114,111,114,58,32,37,100,92,110,0,0,0,0,0,102,114,97,109,101,32,97,118,101,114,97,103,101,115,58,32,37,46,51,102,32,43,45,32,37,46,51,102,44,32,114,97,110,103,101,58,32,37,46,51,102,32,116,111,32,37,46,51,102,32,10,0,0,0,0,0,105,102,32,40,77,111,100,117,108,101,46,114,101,112,111,114,116,67,111,109,112,108,101,116,105,111,110,41,32,77,111,100,117,108,101,46,114,101,112,111,114,116,67,111,109,112,108,101,116,105,111,110,40,41,0,0,114,101,115,112,111,110,115,105,118,101,32,109,97,105,110,32,108,111,111,112,0,0,0,0,0,0,0,0,56,1,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,49,49,98,50,69,100,103,101,83,104,97,112,101,0,0,0,55,98,50,83,104,97,112,101,0,0,0,0,0,0,0,0,120,27,0,0,32,1,0,0,160,27,0,0,16,1,0,0,48,1,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,83,104,97,112,101,115,47,98,50,80,111,108,121,103,111,110,83,104,97,112,101,46,99,112,112,0,0,0,0,0,0,0,48,46,48,102,32,60,61,32,108,111,119,101,114,32,38,38,32,108,111,119,101,114,32,60,61,32,105,110,112,117,116,46,109,97,120,70,114,97,99,116,105,111,110,0,0,0,0,0,82,97,121,67,97,115,116,0,109,95,118,101,114,116,101,120,67,111,117,110,116,32,62,61,32,51,0,0,0,0,0,0,67,111,109,112,117,116,101,77,97,115,115,0,0,0,0,0,97,114,101,97,32,62,32,49,46,49,57,50,48,57,50,57,48,101,45,48,55,70,0,0,0,0,0,0,48,2,0,0,3,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,49,52,98,50,80,111,108,121,103,111,110,83,104,97,112,101,0,0,0,0,0,0,0,0,160,27,0,0,24,2,0,0,48,1,0,0,0,0,0,0,16,0,0,0,32,0,0,0,64,0,0,0,96,0,0,0,128,0,0,0,160,0,0,0,192,0,0,0,224,0,0,0,0,1,0,0,64,1,0,0,128,1,0,0,192,1,0,0,0,2,0,0,128,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,32,60,32,98,50,95,98,108,111,99,107,83,105,122,101,115,0,0,0,0,0,0,0,66,111,120,50,68,47,67,111,109,109,111,110,47,98,50,66,108,111,99,107,65,108,108,111,99,97,116,111,114,46,99,112,112,0,0,0,0,0,0,0,98,50,66,108,111,99,107,65,108,108,111,99,97,116,111,114,0,0,0,0,0,0,0,0,48,32,60,32,115,105,122,101,0,0,0,0,0,0,0,0,65,108,108,111,99,97,116,101,0,0,0,0,0,0,0,0,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,98,50,95,98,108,111,99,107,83,105,122,101,115,0,0,0,0,0,98,108,111,99,107,67,111,117,110,116,32,42,32,98,108,111,99,107,83,105,122,101,32,60,61,32,98,50,95,99,104,117,110,107,83,105,122,101,0,0,70,114,101,101,0,0,0,0,98,100,45,62,112,111,115,105,116,105,111,110,46,73,115,86,97,108,105,100,40,41,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,66,111,100,121,46,99,112,112,0,0,0,0,0,0,0,98,50,66,111,100,121,0,0,98,100,45,62,108,105,110,101,97,114,86,101,108,111,99,105,116,121,46,73,115,86,97,108,105,100,40,41,0,0,0,0,98,50,73,115,86,97,108,105,100,40,98,100,45,62,97,110,103,108,101,41,0,0,0,0,98,50,73,115,86,97,108,105,100,40,98,100,45,62,97,110,103,117,108,97,114,86,101,108,111,99,105,116,121,41,0,0,98,50,73,115,86,97,108,105,100,40,98,100,45,62,97,110,103,117,108,97,114,68,97,109,112,105,110,103,41,32,38,38,32,98,100,45,62,97,110,103,117,108,97,114,68,97,109,112,105,110,103,32,62,61,32,48,46,48,102,0,0,0,0,0,98,50,73,115,86,97,108,105,100,40,98,100,45,62,108,105,110,101,97,114,68,97,109,112,105,110,103,41,32,38,38,32,98,100,45,62,108,105,110,101,97,114,68,97,109,112,105,110,103,32,62,61,32,48,46,48,102,0,0,0,0,0,0,0,109,95,119,111,114,108,100,45,62,73,115,76,111,99,107,101,100,40,41,32,61,61,32,102,97,108,115,101,0,0,0,0,67,114,101,97,116,101,70,105,120,116,117,114,101,0,0,0,109,95,116,121,112,101,32,61,61,32,98,50,95,100,121,110,97,109,105,99,66,111,100,121,0,0,0,0,0,0,0,0,82,101,115,101,116,77,97,115,115,68,97,116,97,0,0,0,109,95,73,32,62,32,48,46,48,102,0,0,0,0,0,0,0,10,0,0,0,0,0,0,240,7,0,0,0,0,0,0,48,32,60,61,32,112,114,111,120,121,73,100,32,38,38,32,112,114,111,120,121,73,100,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,0,0,0,0,0,0,46,47,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,121,110,97,109,105,99,84,114,101,101,46,104,0,0,0,0,0,0,0,71,101,116,85,115,101,114,68,97,116,97,0,0,0,0,0,71,101,116,70,97,116,65,65,66,66,0,0,0,0,0,0,0,0,0,0,32,8,0,0,5,0,0,0,6,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,49,55,98,50,67,111,110,116,97,99,116,76,105,115,116,101,110,101,114,0,0,0,0,0,120,27,0,0,8,8,0,0,109,95,112,114,111,120,121,67,111,117,110,116,32,61,61,32,48,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,70,105,120,116,117,114,101,46,99,112,112,0,0,0,0,67,114,101,97,116,101,80,114,111,120,105,101,115,0,0,0,73,115,76,111,99,107,101,100,40,41,32,61,61,32,102,97,108,115,101,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,87,111,114,108,100,46,99,112,112,0,0,0,0,0,0,67,114,101,97,116,101,66,111,100,121,0,0,0,0,0,0,98,45,62,73,115,65,99,116,105,118,101,40,41,32,61,61,32,116,114,117,101,0,0,0,83,111,108,118,101,0,0,0,115,116,97,99,107,67,111,117,110,116,32,60,32,115,116,97,99,107,83,105,122,101,0,0,116,121,112,101,65,32,61,61,32,98,50,95,100,121,110,97,109,105,99,66,111,100,121,32,124,124,32,116,121,112,101,66,32,61,61,32,98,50,95,100,121,110,97,109,105,99,66,111,100,121,0,0,0,0,0,0,83,111,108,118,101,84,79,73,0,0,0,0,0,0,0,0,97,108,112,104,97,48,32,60,32,49,46,48,102,0,0,0,46,47,66,111,120,50,68,47,67,111,109,109,111,110,47,98,50,77,97,116,104,46,104,0,65,100,118,97,110,99,101,0,109,95,106,111,105,110,116,67,111,117,110,116,32,60,32,109,95,106,111,105,110,116,67,97,112,97,99,105,116,121,0,0,46,47,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,73,115,108,97,110,100,46,104,0,0,0,0,0,65,100,100,0,0,0,0,0,109,95,99,111,110,116,97,99,116,67,111,117,110,116,32,60,32,109,95,99,111,110,116,97,99,116,67,97,112,97,99,105,116,121,0,0,0,0,0,0,109,95,98,111,100,121,67,111,117,110,116,32,60,32,109,95,98,111,100,121,67,97,112,97,99,105,116,121,0,0,0,0,0,0,0,0,40,10,0,0,7,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,49,53,98,50,67,111,110,116,97,99,116,70,105,108,116,101,114,0,0,0,0,0,0,0,120,27,0,0,16,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,99,104,97,105,110,45,62,109,95,99,111,117,110,116,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,105,115,116,97,110,99,101,46,99,112,112,0,0,83,101,116,0,0,0,0,0,102,97,108,115,101,0,0,0,98,50,68,105,115,116,97,110,99,101,0,0,0,0,0,0,71,101,116,77,101,116,114,105,99,0,0,0,0,0,0,0,71,101,116,87,105,116,110,101,115,115,80,111,105,110,116,115,0,0,0,0,0,0,0,0,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,109,95,99,111,117,110,116,0,0,0,46,47,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,105,115,116,97,110,99,101,46,104,0,0,71,101,116,86,101,114,116,101,120,0,0,0,0,0,0,0,71,101,116,67,108,111,115,101,115,116,80,111,105,110,116,0,99,97,99,104,101,45,62,99,111,117,110,116,32,60,61,32,51,0,0,0,0,0,0,0,82,101,97,100,67,97,99,104,101,0,0,0,0,0,0,0,109,95,110,111,100,101,67,111,117,110,116,32,61,61,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,121,110,97,109,105,99,84,114,101,101,46,99,112,112,0,0,0,0,0,0,0,65,108,108,111,99,97,116,101,78,111,100,101,0,0,0,0,48,32,60,61,32,110,111,100,101,73,100,32,38,38,32,110,111,100,101,73,100,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,70,114,101,101,78,111,100,101,0,0,0,0,0,0,0,0,48,32,60,32,109,95,110,111,100,101,67,111,117,110,116,0,48,32,60,61,32,112,114,111,120,121,73,100,32,38,38,32,112,114,111,120,121,73,100,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,0,0,0,0,0,0,109,95,110,111,100,101,115,91,112,114,111,120,121,73,100,93,46,73,115,76,101,97,102,40,41,0,0,0,0,0,0,0,77,111,118,101,80,114,111,120,121,0,0,0,0,0,0,0,99,104,105,108,100,49,32,33,61,32,40,45,49,41,0,0,73,110,115,101,114,116,76,101,97,102,0,0,0,0,0,0,99,104,105,108,100,50,32,33,61,32,40,45,49,41,0,0,105,65,32,33,61,32,40,45,49,41,0,0,0,0,0,0,66,97,108,97,110,99,101,0,48,32,60,61,32,105,66,32,38,38,32,105,66,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,48,32,60,61,32,105,67,32,38,38,32,105,67,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,48,32,60,61,32,105,70,32,38,38,32,105,70,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,48,32,60,61,32,105,71,32,38,38,32,105,71,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,109,95,110,111,100,101,115,91,67,45,62,112,97,114,101,110,116,93,46,99,104,105,108,100,50,32,61,61,32,105,65,0,48,32,60,61,32,105,68,32,38,38,32,105,68,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,48,32,60,61,32,105,69,32,38,38,32,105,69,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,109,95,110,111,100,101,115,91,66,45,62,112,97,114,101,110,116,93,46,99,104,105,108,100,50,32,61,61,32,105,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,97,114,103,101,116,32,62,32,116,111,108,101,114,97,110,99,101,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,84,105,109,101,79,102,73,109,112,97,99,116,46,99,112,112,0,0,0,0,0,0,98,50,84,105,109,101,79,102,73,109,112,97,99,116,0,0,102,97,108,115,101,0,0,0,69,118,97,108,117,97,116,101,0,0,0,0,0,0,0,0,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,109,95,99,111,117,110,116,0,0,0,46,47,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,105,115,116,97,110,99,101,46,104,0,0,71,101,116,86,101,114,116,101,120,0,0,0,0,0,0,0,70,105,110,100,77,105,110,83,101,112,97,114,97,116,105,111,110,0,0,0,0,0,0,0,48,32,60,32,99,111,117,110,116,32,38,38,32,99,111,117,110,116,32,60,32,51,0,0,73,110,105,116,105,97,108,105,122,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,95,105,110,100,101,120,32,61,61,32,48,0,0,0,0,66,111,120,50,68,47,67,111,109,109,111,110,47,98,50,83,116,97,99,107,65,108,108,111,99,97,116,111,114,46,99,112,112,0,0,0,0,0,0,0,126,98,50,83,116,97,99,107,65,108,108,111,99,97,116,111,114,0,0,0,0,0,0,0,109,95,101,110,116,114,121,67,111,117,110,116,32,61,61,32,48,0,0,0,0,0,0,0,109,95,101,110,116,114,121,67,111,117,110,116,32,60,32,98,50,95,109,97,120,83,116,97,99,107,69,110,116,114,105,101,115,0,0,0,0,0,0,0,65,108,108,111,99,97,116,101,0,0,0,0,0,0,0,0,109,95,101,110,116,114,121,67,111,117,110,116,32,62,32,48,0,0,0,0,0,0,0,0,70,114,101,101,0,0,0,0,112,32,61,61,32,101,110,116,114,121,45,62,100,97,116,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,32,60,61,32,116,121,112,101,49,32,38,38,32,116,121,112,101,49,32,60,32,98,50,83,104,97,112,101,58,58,101,95,116,121,112,101,67,111,117,110,116,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,111,110,116,97,99,116,46,99,112,112,0,0,0,48,32,60,61,32,116,121,112,101,50,32,38,38,32,116,121,112,101,50,32,60,32,98,50,83,104,97,112,101,58,58,101,95,116,121,112,101,67,111,117,110,116,0,0,0,0,0,0,67,114,101,97,116,101,0,0,115,95,105,110,105,116,105,97,108,105,122,101,100,32,61,61,32,116,114,117,101,0,0,0,68,101,115,116,114,111,121,0,48,32,60,61,32,116,121,112,101,65,32,38,38,32,116,121,112,101,66,32,60,32,98,50,83,104,97,112,101,58,58,101,95,116,121,112,101,67,111,117,110,116,0,0,0,0,0,0,0,0,0,0,120,17,0,0,1,0,0,0,9,0,0,0,10,0,0,0,0,0,0,0,57,98,50,67,111,110,116,97,99,116,0,0,0,0,0,0,120,27,0,0,104,17,0,0,0,0,0,0,104,18,0,0,3,0,0,0,11,0,0,0,12,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,101,100,103,101,0,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,69,100,103,101,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,0,0,98,50,69,100,103,101,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,50,50,98,50,69,100,103,101,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,0,0,0,160,27,0,0,72,18,0,0,120,17,0,0,0,0,0,0,0,0,0,0,96,19,0,0,4,0,0,0,13,0,0,0,14,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,101,100,103,101,0,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,69,100,103,101,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,0,98,50,69,100,103,101,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,50,51,98,50,69,100,103,101,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,0,160,27,0,0,64,19,0,0,120,17,0,0,0,0,0,0,0,0,0,0,96,20,0,0,5,0,0,0,15,0,0,0,16,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,80,111,108,121,103,111,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,46,99,112,112,0,0,0,98,50,80,111,108,121,103,111,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,50,53,98,50,80,111,108,121,103,111,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,160,27,0,0,64,20,0,0,120,17,0,0,0,0,0,0,0,0,0,0,72,21,0,0,6,0,0,0,17,0,0,0,18,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,80,111,108,121,103,111,110,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,98,50,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,49,54,98,50,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,160,27,0,0,48,21,0,0,120,17,0,0,0,0,0,0,116,111,105,73,110,100,101,120,65,32,60,32,109,95,98,111,100,121,67,111,117,110,116,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,73,115,108,97,110,100,46,99,112,112,0,0,0,0,0,83,111,108,118,101,84,79,73,0,0,0,0,0,0,0,0,116,111,105,73,110,100,101,120,66,32,60,32,109,95,98,111,100,121,67,111,117,110,116,0,100,101,110,32,62,32,48,46,48,102,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,67,111,108,108,105,100,101,69,100,103,101,46,99,112,112,0,0,0,0,0,0,0,98,50,67,111,108,108,105,100,101,69,100,103,101,65,110,100,67,105,114,99,108,101,0,0,48,32,60,61,32,101,100,103,101,49,32,38,38,32,101,100,103,101,49,32,60,32,112,111,108,121,49,45,62,109,95,118,101,114,116,101,120,67,111,117,110,116,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,67,111,108,108,105,100,101,80,111,108,121,103,111,110,46,99,112,112,0,0,0,0,98,50,70,105,110,100,73,110,99,105,100,101,110,116,69,100,103,101,0,0,0,0,0,0,98,50,69,100,103,101,83,101,112,97,114,97,116,105,111,110,0,0,0,0,0,0,0,0,0,0,0,0,120,23,0,0,7,0,0,0,19,0,0,0,20,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,104,97,105,110,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,104,97,105,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,0,98,50,67,104,97,105,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,50,51,98,50,67,104,97,105,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,0,0,160,27,0,0,88,23,0,0,120,17,0,0,0,0,0,0,0,0,0,0,120,24,0,0,8,0,0,0,21,0,0,0,22,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,104,97,105,110,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,104,97,105,110,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,98,50,67,104,97,105,110,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,50,52,98,50,67,104,97,105,110,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,160,27,0,0,88,24,0,0,120,17,0,0,0,0,0,0,0,0,0,0,88,25,0,0,9,0,0,0,23,0,0,0,24,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,105,114,99,108,101,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,0,98,50,67,105,114,99,108,101,67,111,110,116,97,99,116,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,49,53,98,50,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,0,0,160,27,0,0,64,25,0,0,120,17,0,0,0,0,0,0,112,111,105,110,116,67,111,117,110,116,32,62,32,48,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,111,110,116,97,99,116,83,111,108,118,101,114,46,99,112,112,0,0,0,0,0,98,50,67,111,110,116,97,99,116,83,111,108,118,101,114,0,109,97,110,105,102,111,108,100,45,62,112,111,105,110,116,67,111,117,110,116,32,62,32,48,0,0,0,0,0,0,0,0,73,110,105,116,105,97,108,105,122,101,86,101,108,111,99,105,116,121,67,111,110,115,116,114,97,105,110,116,115,0,0,0,112,111,105,110,116,67,111,117,110,116,32,61,61,32,49,32,124,124,32,112,111,105,110,116,67,111,117,110,116,32,61,61,32,50,0,0,0,0,0,0,83,111,108,118,101,86,101,108,111,99,105,116,121,67,111,110,115,116,114,97,105,110,116,115,0,0,0,0,0,0,0,0,97,46,120,32,62,61,32,48,46,48,102,32,38,38,32,97,46,121,32,62,61,32,48,46,48,102,0,0,0,0,0,0,112,99,45,62,112,111,105,110,116,67,111,117,110,116,32,62,32,48,0,0,0,0,0,0,73,110,105,116,105,97,108,105,122,101,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,83,104,97,112,101,115,47,98,50,67,104,97,105,110,83,104,97,112,101,46,99,112,112,0,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,109,95,99,111,117,110,116,32,45,32,49,0,0,0,0,0,0,0,71,101,116,67,104,105,108,100,69,100,103,101,0,0,0,0,83,116,57,116,121,112,101,95,105,110,102,111,0,0,0,0,120,27,0,0,232,26,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,0,160,27,0,0,0,27,0,0,248,26,0,0,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,160,27,0,0,56,27,0,0,40,27,0,0,0,0,0,0,0,0,0,0,96,27,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,10,0,0,0,0,0,0,0,232,27,0,0,25,0,0,0,29,0,0,0,27,0,0,0,28,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,11,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,160,27,0,0,192,27,0,0,96,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,30,0,0,30,0,0,0,31,0,0,0,3,0,0,0,0,0,0,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,0,83,116,57,98,97,100,95,97,108,108,111,99,0,0,0,0,160,27,0,0,24,30,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE);
   1373 
   1374 
   1375 
   1376 
   1377 var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
   1378 
   1379 assert(tempDoublePtr % 8 == 0);
   1380 
   1381 function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
   1382 
   1383   HEAP8[tempDoublePtr] = HEAP8[ptr];
   1384 
   1385   HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
   1386 
   1387   HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
   1388 
   1389   HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
   1390 
   1391 }
   1392 
   1393 function copyTempDouble(ptr) {
   1394 
   1395   HEAP8[tempDoublePtr] = HEAP8[ptr];
   1396 
   1397   HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
   1398 
   1399   HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
   1400 
   1401   HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
   1402 
   1403   HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
   1404 
   1405   HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
   1406 
   1407   HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
   1408 
   1409   HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
   1410 
   1411 }
   1412 
   1413 
   1414   function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg) {
   1415       Module['noExitRuntime'] = true;
   1416 
   1417       Browser.mainLoop.runner = function Browser_mainLoop_runner() {
   1418         if (ABORT) return;
   1419         if (Browser.mainLoop.queue.length > 0) {
   1420           var start = Date.now();
   1421           var blocker = Browser.mainLoop.queue.shift();
   1422           blocker.func(blocker.arg);
   1423           if (Browser.mainLoop.remainingBlockers) {
   1424             var remaining = Browser.mainLoop.remainingBlockers;
   1425             var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining);
   1426             if (blocker.counted) {
   1427               Browser.mainLoop.remainingBlockers = next;
   1428             } else {
   1429               // not counted, but move the progress along a tiny bit
   1430               next = next + 0.5; // do not steal all the next one's progress
   1431               Browser.mainLoop.remainingBlockers = (8*remaining + next)/9;
   1432             }
   1433           }
   1434           console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers);
   1435           Browser.mainLoop.updateStatus();
   1436           setTimeout(Browser.mainLoop.runner, 0);
   1437           return;
   1438         }
   1439         if (Browser.mainLoop.shouldPause) {
   1440           // catch pauses from non-main loop sources
   1441           Browser.mainLoop.paused = true;
   1442           Browser.mainLoop.shouldPause = false;
   1443           return;
   1444         }
   1445 
   1446         // Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize
   1447         // VBO double-buffering and reduce GPU stalls.
   1448 
   1449         if (Browser.mainLoop.method === 'timeout' && Module.ctx) {
   1450           Module.printErr('Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!');
   1451           Browser.mainLoop.method = ''; // just warn once per call to set main loop
   1452         }
   1453 
   1454         if (Module['preMainLoop']) {
   1455           Module['preMainLoop']();
   1456         }
   1457 
   1458         try {
   1459           if (typeof arg !== 'undefined') {
   1460             Runtime.dynCall('vi', func, [arg]);
   1461           } else {
   1462             Runtime.dynCall('v', func);
   1463           }
   1464         } catch (e) {
   1465           if (e instanceof ExitStatus) {
   1466             return;
   1467           } else {
   1468             if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]);
   1469             throw e;
   1470           }
   1471         }
   1472 
   1473         if (Module['postMainLoop']) {
   1474           Module['postMainLoop']();
   1475         }
   1476 
   1477         if (Browser.mainLoop.shouldPause) {
   1478           // catch pauses from the main loop itself
   1479           Browser.mainLoop.paused = true;
   1480           Browser.mainLoop.shouldPause = false;
   1481           return;
   1482         }
   1483         Browser.mainLoop.scheduler();
   1484       }
   1485       if (fps && fps > 0) {
   1486         Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
   1487           setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop
   1488         };
   1489         Browser.mainLoop.method = 'timeout';
   1490       } else {
   1491         Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
   1492           Browser.requestAnimationFrame(Browser.mainLoop.runner);
   1493         };
   1494         Browser.mainLoop.method = 'rAF';
   1495       }
   1496       Browser.mainLoop.scheduler();
   1497 
   1498       if (simulateInfiniteLoop) {
   1499         throw 'SimulateInfiniteLoop';
   1500       }
   1501     }
   1502 
   1503   var _cosf=Math_cos;
   1504 
   1505   function ___cxa_pure_virtual() {
   1506       ABORT = true;
   1507       throw 'Pure virtual function called!';
   1508     }
   1509 
   1510   function _time(ptr) {
   1511       var ret = Math.floor(Date.now()/1000);
   1512       if (ptr) {
   1513         HEAP32[((ptr)>>2)]=ret;
   1514       }
   1515       return ret;
   1516     }
   1517 
   1518   function ___assert_fail(condition, filename, line, func) {
   1519       ABORT = true;
   1520       throw 'Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function'] + ' at ' + stackTrace();
   1521     }
   1522 
   1523 
   1524   function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()
   1525       return !!__ZSt18uncaught_exceptionv.uncaught_exception;
   1526     }
   1527 
   1528 
   1529 
   1530   function ___cxa_is_number_type(type) {
   1531       var isNumber = false;
   1532       try { if (type == __ZTIi) isNumber = true } catch(e){}
   1533       try { if (type == __ZTIj) isNumber = true } catch(e){}
   1534       try { if (type == __ZTIl) isNumber = true } catch(e){}
   1535       try { if (type == __ZTIm) isNumber = true } catch(e){}
   1536       try { if (type == __ZTIx) isNumber = true } catch(e){}
   1537       try { if (type == __ZTIy) isNumber = true } catch(e){}
   1538       try { if (type == __ZTIf) isNumber = true } catch(e){}
   1539       try { if (type == __ZTId) isNumber = true } catch(e){}
   1540       try { if (type == __ZTIe) isNumber = true } catch(e){}
   1541       try { if (type == __ZTIc) isNumber = true } catch(e){}
   1542       try { if (type == __ZTIa) isNumber = true } catch(e){}
   1543       try { if (type == __ZTIh) isNumber = true } catch(e){}
   1544       try { if (type == __ZTIs) isNumber = true } catch(e){}
   1545       try { if (type == __ZTIt) isNumber = true } catch(e){}
   1546       return isNumber;
   1547     }function ___cxa_does_inherit(definiteType, possibilityType, possibility) {
   1548       if (possibility == 0) return false;
   1549       if (possibilityType == 0 || possibilityType == definiteType)
   1550         return true;
   1551       var possibility_type_info;
   1552       if (___cxa_is_number_type(possibilityType)) {
   1553         possibility_type_info = possibilityType;
   1554       } else {
   1555         var possibility_type_infoAddr = HEAP32[((possibilityType)>>2)] - 8;
   1556         possibility_type_info = HEAP32[((possibility_type_infoAddr)>>2)];
   1557       }
   1558       switch (possibility_type_info) {
   1559       case 0: // possibility is a pointer
   1560         // See if definite type is a pointer
   1561         var definite_type_infoAddr = HEAP32[((definiteType)>>2)] - 8;
   1562         var definite_type_info = HEAP32[((definite_type_infoAddr)>>2)];
   1563         if (definite_type_info == 0) {
   1564           // Also a pointer; compare base types of pointers
   1565           var defPointerBaseAddr = definiteType+8;
   1566           var defPointerBaseType = HEAP32[((defPointerBaseAddr)>>2)];
   1567           var possPointerBaseAddr = possibilityType+8;
   1568           var possPointerBaseType = HEAP32[((possPointerBaseAddr)>>2)];
   1569           return ___cxa_does_inherit(defPointerBaseType, possPointerBaseType, possibility);
   1570         } else
   1571           return false; // one pointer and one non-pointer
   1572       case 1: // class with no base class
   1573         return false;
   1574       case 2: // class with base class
   1575         var parentTypeAddr = possibilityType + 8;
   1576         var parentType = HEAP32[((parentTypeAddr)>>2)];
   1577         return ___cxa_does_inherit(definiteType, parentType, possibility);
   1578       default:
   1579         return false; // some unencountered type
   1580       }
   1581     }
   1582 
   1583 
   1584 
   1585   var ___cxa_last_thrown_exception=0;function ___resumeException(ptr) {
   1586       if (!___cxa_last_thrown_exception) { ___cxa_last_thrown_exception = ptr; }
   1587       throw ptr + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";
   1588     }
   1589 
   1590   var ___cxa_exception_header_size=8;function ___cxa_find_matching_catch(thrown, throwntype) {
   1591       if (thrown == -1) thrown = ___cxa_last_thrown_exception;
   1592       header = thrown - ___cxa_exception_header_size;
   1593       if (throwntype == -1) throwntype = HEAP32[((header)>>2)];
   1594       var typeArray = Array.prototype.slice.call(arguments, 2);
   1595 
   1596       // If throwntype is a pointer, this means a pointer has been
   1597       // thrown. When a pointer is thrown, actually what's thrown
   1598       // is a pointer to the pointer. We'll dereference it.
   1599       if (throwntype != 0 && !___cxa_is_number_type(throwntype)) {
   1600         var throwntypeInfoAddr= HEAP32[((throwntype)>>2)] - 8;
   1601         var throwntypeInfo= HEAP32[((throwntypeInfoAddr)>>2)];
   1602         if (throwntypeInfo == 0)
   1603           thrown = HEAP32[((thrown)>>2)];
   1604       }
   1605       // The different catch blocks are denoted by different types.
   1606       // Due to inheritance, those types may not precisely match the
   1607       // type of the thrown object. Find one which matches, and
   1608       // return the type of the catch block which should be called.
   1609       for (var i = 0; i < typeArray.length; i++) {
   1610         if (___cxa_does_inherit(typeArray[i], throwntype, thrown))
   1611           return ((asm["setTempRet0"](typeArray[i]),thrown)|0);
   1612       }
   1613       // Shouldn't happen unless we have bogus data in typeArray
   1614       // or encounter a type for which emscripten doesn't have suitable
   1615       // typeinfo defined. Best-efforts match just in case.
   1616       return ((asm["setTempRet0"](throwntype),thrown)|0);
   1617     }function ___cxa_throw(ptr, type, destructor) {
   1618       if (!___cxa_throw.initialized) {
   1619         try {
   1620           HEAP32[((__ZTVN10__cxxabiv119__pointer_type_infoE)>>2)]=0; // Workaround for libcxxabi integration bug
   1621         } catch(e){}
   1622         try {
   1623           HEAP32[((__ZTVN10__cxxabiv117__class_type_infoE)>>2)]=1; // Workaround for libcxxabi integration bug
   1624         } catch(e){}
   1625         try {
   1626           HEAP32[((__ZTVN10__cxxabiv120__si_class_type_infoE)>>2)]=2; // Workaround for libcxxabi integration bug
   1627         } catch(e){}
   1628         ___cxa_throw.initialized = true;
   1629       }
   1630       var header = ptr - ___cxa_exception_header_size;
   1631       HEAP32[((header)>>2)]=type;
   1632       HEAP32[(((header)+(4))>>2)]=destructor;
   1633       ___cxa_last_thrown_exception = ptr;
   1634       if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) {
   1635         __ZSt18uncaught_exceptionv.uncaught_exception = 1;
   1636       } else {
   1637         __ZSt18uncaught_exceptionv.uncaught_exception++;
   1638       }
   1639       throw ptr + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";
   1640     }
   1641 
   1642 
   1643   Module["_memset"] = _memset;
   1644 
   1645 
   1646 
   1647   function __exit(status) {
   1648       // void _exit(int status);
   1649       // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
   1650       Module['exit'](status);
   1651     }function _exit(status) {
   1652       __exit(status);
   1653     }function __ZSt9terminatev() {
   1654       _exit(-1234);
   1655     }
   1656 
   1657   function _abort() {
   1658       Module['abort']();
   1659     }
   1660 
   1661 
   1662 
   1663 
   1664 
   1665   var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};
   1666 
   1667   var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};
   1668 
   1669 
   1670   var ___errno_state=0;function ___setErrNo(value) {
   1671       // For convenient setting and returning of errno.
   1672       HEAP32[((___errno_state)>>2)]=value;
   1673       return value;
   1674     }
   1675 
   1676   var PATH={splitPath:function (filename) {
   1677         var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
   1678         return splitPathRe.exec(filename).slice(1);
   1679       },normalizeArray:function (parts, allowAboveRoot) {
   1680         // if the path tries to go above the root, `up` ends up > 0
   1681         var up = 0;
   1682         for (var i = parts.length - 1; i >= 0; i--) {
   1683           var last = parts[i];
   1684           if (last === '.') {
   1685             parts.splice(i, 1);
   1686           } else if (last === '..') {
   1687             parts.splice(i, 1);
   1688             up++;
   1689           } else if (up) {
   1690             parts.splice(i, 1);
   1691             up--;
   1692           }
   1693         }
   1694         // if the path is allowed to go above the root, restore leading ..s
   1695         if (allowAboveRoot) {
   1696           for (; up--; up) {
   1697             parts.unshift('..');
   1698           }
   1699         }
   1700         return parts;
   1701       },normalize:function (path) {
   1702         var isAbsolute = path.charAt(0) === '/',
   1703             trailingSlash = path.substr(-1) === '/';
   1704         // Normalize the path
   1705         path = PATH.normalizeArray(path.split('/').filter(function(p) {
   1706           return !!p;
   1707         }), !isAbsolute).join('/');
   1708         if (!path && !isAbsolute) {
   1709           path = '.';
   1710         }
   1711         if (path && trailingSlash) {
   1712           path += '/';
   1713         }
   1714         return (isAbsolute ? '/' : '') + path;
   1715       },dirname:function (path) {
   1716         var result = PATH.splitPath(path),
   1717             root = result[0],
   1718             dir = result[1];
   1719         if (!root && !dir) {
   1720           // No dirname whatsoever
   1721           return '.';
   1722         }
   1723         if (dir) {
   1724           // It has a dirname, strip trailing slash
   1725           dir = dir.substr(0, dir.length - 1);
   1726         }
   1727         return root + dir;
   1728       },basename:function (path) {
   1729         // EMSCRIPTEN return '/'' for '/', not an empty string
   1730         if (path === '/') return '/';
   1731         var lastSlash = path.lastIndexOf('/');
   1732         if (lastSlash === -1) return path;
   1733         return path.substr(lastSlash+1);
   1734       },extname:function (path) {
   1735         return PATH.splitPath(path)[3];
   1736       },join:function () {
   1737         var paths = Array.prototype.slice.call(arguments, 0);
   1738         return PATH.normalize(paths.join('/'));
   1739       },join2:function (l, r) {
   1740         return PATH.normalize(l + '/' + r);
   1741       },resolve:function () {
   1742         var resolvedPath = '',
   1743           resolvedAbsolute = false;
   1744         for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
   1745           var path = (i >= 0) ? arguments[i] : FS.cwd();
   1746           // Skip empty and invalid entries
   1747           if (typeof path !== 'string') {
   1748             throw new TypeError('Arguments to path.resolve must be strings');
   1749           } else if (!path) {
   1750             continue;
   1751           }
   1752           resolvedPath = path + '/' + resolvedPath;
   1753           resolvedAbsolute = path.charAt(0) === '/';
   1754         }
   1755         // At this point the path should be resolved to a full absolute path, but
   1756         // handle relative paths to be safe (might happen when process.cwd() fails)
   1757         resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {
   1758           return !!p;
   1759         }), !resolvedAbsolute).join('/');
   1760         return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
   1761       },relative:function (from, to) {
   1762         from = PATH.resolve(from).substr(1);
   1763         to = PATH.resolve(to).substr(1);
   1764         function trim(arr) {
   1765           var start = 0;
   1766           for (; start < arr.length; start++) {
   1767             if (arr[start] !== '') break;
   1768           }
   1769           var end = arr.length - 1;
   1770           for (; end >= 0; end--) {
   1771             if (arr[end] !== '') break;
   1772           }
   1773           if (start > end) return [];
   1774           return arr.slice(start, end - start + 1);
   1775         }
   1776         var fromParts = trim(from.split('/'));
   1777         var toParts = trim(to.split('/'));
   1778         var length = Math.min(fromParts.length, toParts.length);
   1779         var samePartsLength = length;
   1780         for (var i = 0; i < length; i++) {
   1781           if (fromParts[i] !== toParts[i]) {
   1782             samePartsLength = i;
   1783             break;
   1784           }
   1785         }
   1786         var outputParts = [];
   1787         for (var i = samePartsLength; i < fromParts.length; i++) {
   1788           outputParts.push('..');
   1789         }
   1790         outputParts = outputParts.concat(toParts.slice(samePartsLength));
   1791         return outputParts.join('/');
   1792       }};
   1793 
   1794   var TTY={ttys:[],init:function () {
   1795         // https://github.com/kripken/emscripten/pull/1555
   1796         // if (ENVIRONMENT_IS_NODE) {
   1797         //   // currently, FS.init does not distinguish if process.stdin is a file or TTY
   1798         //   // device, it always assumes it's a TTY device. because of this, we're forcing
   1799         //   // process.stdin to UTF8 encoding to at least make stdin reading compatible
   1800         //   // with text files until FS.init can be refactored.
   1801         //   process['stdin']['setEncoding']('utf8');
   1802         // }
   1803       },shutdown:function () {
   1804         // https://github.com/kripken/emscripten/pull/1555
   1805         // if (ENVIRONMENT_IS_NODE) {
   1806         //   // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
   1807         //   // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation
   1808         //   // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?
   1809         //   // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
   1810         //   // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call
   1811         //   process['stdin']['pause']();
   1812         // }
   1813       },register:function (dev, ops) {
   1814         TTY.ttys[dev] = { input: [], output: [], ops: ops };
   1815         FS.registerDevice(dev, TTY.stream_ops);
   1816       },stream_ops:{open:function (stream) {
   1817           var tty = TTY.ttys[stream.node.rdev];
   1818           if (!tty) {
   1819             throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
   1820           }
   1821           stream.tty = tty;
   1822           stream.seekable = false;
   1823         },close:function (stream) {
   1824           // flush any pending line data
   1825           if (stream.tty.output.length) {
   1826             stream.tty.ops.put_char(stream.tty, 10);
   1827           }
   1828         },read:function (stream, buffer, offset, length, pos /* ignored */) {
   1829           if (!stream.tty || !stream.tty.ops.get_char) {
   1830             throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
   1831           }
   1832           var bytesRead = 0;
   1833           for (var i = 0; i < length; i++) {
   1834             var result;
   1835             try {
   1836               result = stream.tty.ops.get_char(stream.tty);
   1837             } catch (e) {
   1838               throw new FS.ErrnoError(ERRNO_CODES.EIO);
   1839             }
   1840             if (result === undefined && bytesRead === 0) {
   1841               throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
   1842             }
   1843             if (result === null || result === undefined) break;
   1844             bytesRead++;
   1845             buffer[offset+i] = result;
   1846           }
   1847           if (bytesRead) {
   1848             stream.node.timestamp = Date.now();
   1849           }
   1850           return bytesRead;
   1851         },write:function (stream, buffer, offset, length, pos) {
   1852           if (!stream.tty || !stream.tty.ops.put_char) {
   1853             throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
   1854           }
   1855           for (var i = 0; i < length; i++) {
   1856             try {
   1857               stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
   1858             } catch (e) {
   1859               throw new FS.ErrnoError(ERRNO_CODES.EIO);
   1860             }
   1861           }
   1862           if (length) {
   1863             stream.node.timestamp = Date.now();
   1864           }
   1865           return i;
   1866         }},default_tty_ops:{get_char:function (tty) {
   1867           if (!tty.input.length) {
   1868             var result = null;
   1869             if (ENVIRONMENT_IS_NODE) {
   1870               result = process['stdin']['read']();
   1871               if (!result) {
   1872                 if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) {
   1873                   return null;  // EOF
   1874                 }
   1875                 return undefined;  // no data available
   1876               }
   1877             } else if (typeof window != 'undefined' &&
   1878               typeof window.prompt == 'function') {
   1879               // Browser.
   1880               result = window.prompt('Input: ');  // returns null on cancel
   1881               if (result !== null) {
   1882                 result += '\n';
   1883               }
   1884             } else if (typeof readline == 'function') {
   1885               // Command line.
   1886               result = readline();
   1887               if (result !== null) {
   1888                 result += '\n';
   1889               }
   1890             }
   1891             if (!result) {
   1892               return null;
   1893             }
   1894             tty.input = intArrayFromString(result, true);
   1895           }
   1896           return tty.input.shift();
   1897         },put_char:function (tty, val) {
   1898           if (val === null || val === 10) {
   1899             Module['print'](tty.output.join(''));
   1900             tty.output = [];
   1901           } else {
   1902             tty.output.push(TTY.utf8.processCChar(val));
   1903           }
   1904         }},default_tty1_ops:{put_char:function (tty, val) {
   1905           if (val === null || val === 10) {
   1906             Module['printErr'](tty.output.join(''));
   1907             tty.output = [];
   1908           } else {
   1909             tty.output.push(TTY.utf8.processCChar(val));
   1910           }
   1911         }}};
   1912 
   1913   var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3,mount:function (mount) {
   1914         return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
   1915       },createNode:function (parent, name, mode, dev) {
   1916         if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
   1917           // no supported
   1918           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   1919         }
   1920         if (!MEMFS.ops_table) {
   1921           MEMFS.ops_table = {
   1922             dir: {
   1923               node: {
   1924                 getattr: MEMFS.node_ops.getattr,
   1925                 setattr: MEMFS.node_ops.setattr,
   1926                 lookup: MEMFS.node_ops.lookup,
   1927                 mknod: MEMFS.node_ops.mknod,
   1928                 rename: MEMFS.node_ops.rename,
   1929                 unlink: MEMFS.node_ops.unlink,
   1930                 rmdir: MEMFS.node_ops.rmdir,
   1931                 readdir: MEMFS.node_ops.readdir,
   1932                 symlink: MEMFS.node_ops.symlink
   1933               },
   1934               stream: {
   1935                 llseek: MEMFS.stream_ops.llseek
   1936               }
   1937             },
   1938             file: {
   1939               node: {
   1940                 getattr: MEMFS.node_ops.getattr,
   1941                 setattr: MEMFS.node_ops.setattr
   1942               },
   1943               stream: {
   1944                 llseek: MEMFS.stream_ops.llseek,
   1945                 read: MEMFS.stream_ops.read,
   1946                 write: MEMFS.stream_ops.write,
   1947                 allocate: MEMFS.stream_ops.allocate,
   1948                 mmap: MEMFS.stream_ops.mmap
   1949               }
   1950             },
   1951             link: {
   1952               node: {
   1953                 getattr: MEMFS.node_ops.getattr,
   1954                 setattr: MEMFS.node_ops.setattr,
   1955                 readlink: MEMFS.node_ops.readlink
   1956               },
   1957               stream: {}
   1958             },
   1959             chrdev: {
   1960               node: {
   1961                 getattr: MEMFS.node_ops.getattr,
   1962                 setattr: MEMFS.node_ops.setattr
   1963               },
   1964               stream: FS.chrdev_stream_ops
   1965             },
   1966           };
   1967         }
   1968         var node = FS.createNode(parent, name, mode, dev);
   1969         if (FS.isDir(node.mode)) {
   1970           node.node_ops = MEMFS.ops_table.dir.node;
   1971           node.stream_ops = MEMFS.ops_table.dir.stream;
   1972           node.contents = {};
   1973         } else if (FS.isFile(node.mode)) {
   1974           node.node_ops = MEMFS.ops_table.file.node;
   1975           node.stream_ops = MEMFS.ops_table.file.stream;
   1976           node.contents = [];
   1977           node.contentMode = MEMFS.CONTENT_FLEXIBLE;
   1978         } else if (FS.isLink(node.mode)) {
   1979           node.node_ops = MEMFS.ops_table.link.node;
   1980           node.stream_ops = MEMFS.ops_table.link.stream;
   1981         } else if (FS.isChrdev(node.mode)) {
   1982           node.node_ops = MEMFS.ops_table.chrdev.node;
   1983           node.stream_ops = MEMFS.ops_table.chrdev.stream;
   1984         }
   1985         node.timestamp = Date.now();
   1986         // add the new node to the parent
   1987         if (parent) {
   1988           parent.contents[name] = node;
   1989         }
   1990         return node;
   1991       },ensureFlexible:function (node) {
   1992         if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) {
   1993           var contents = node.contents;
   1994           node.contents = Array.prototype.slice.call(contents);
   1995           node.contentMode = MEMFS.CONTENT_FLEXIBLE;
   1996         }
   1997       },node_ops:{getattr:function (node) {
   1998           var attr = {};
   1999           // device numbers reuse inode numbers.
   2000           attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
   2001           attr.ino = node.id;
   2002           attr.mode = node.mode;
   2003           attr.nlink = 1;
   2004           attr.uid = 0;
   2005           attr.gid = 0;
   2006           attr.rdev = node.rdev;
   2007           if (FS.isDir(node.mode)) {
   2008             attr.size = 4096;
   2009           } else if (FS.isFile(node.mode)) {
   2010             attr.size = node.contents.length;
   2011           } else if (FS.isLink(node.mode)) {
   2012             attr.size = node.link.length;
   2013           } else {
   2014             attr.size = 0;
   2015           }
   2016           attr.atime = new Date(node.timestamp);
   2017           attr.mtime = new Date(node.timestamp);
   2018           attr.ctime = new Date(node.timestamp);
   2019           // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
   2020           //       but this is not required by the standard.
   2021           attr.blksize = 4096;
   2022           attr.blocks = Math.ceil(attr.size / attr.blksize);
   2023           return attr;
   2024         },setattr:function (node, attr) {
   2025           if (attr.mode !== undefined) {
   2026             node.mode = attr.mode;
   2027           }
   2028           if (attr.timestamp !== undefined) {
   2029             node.timestamp = attr.timestamp;
   2030           }
   2031           if (attr.size !== undefined) {
   2032             MEMFS.ensureFlexible(node);
   2033             var contents = node.contents;
   2034             if (attr.size < contents.length) contents.length = attr.size;
   2035             else while (attr.size > contents.length) contents.push(0);
   2036           }
   2037         },lookup:function (parent, name) {
   2038           throw FS.genericErrors[ERRNO_CODES.ENOENT];
   2039         },mknod:function (parent, name, mode, dev) {
   2040           return MEMFS.createNode(parent, name, mode, dev);
   2041         },rename:function (old_node, new_dir, new_name) {
   2042           // if we're overwriting a directory at new_name, make sure it's empty.
   2043           if (FS.isDir(old_node.mode)) {
   2044             var new_node;
   2045             try {
   2046               new_node = FS.lookupNode(new_dir, new_name);
   2047             } catch (e) {
   2048             }
   2049             if (new_node) {
   2050               for (var i in new_node.contents) {
   2051                 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
   2052               }
   2053             }
   2054           }
   2055           // do the internal rewiring
   2056           delete old_node.parent.contents[old_node.name];
   2057           old_node.name = new_name;
   2058           new_dir.contents[new_name] = old_node;
   2059           old_node.parent = new_dir;
   2060         },unlink:function (parent, name) {
   2061           delete parent.contents[name];
   2062         },rmdir:function (parent, name) {
   2063           var node = FS.lookupNode(parent, name);
   2064           for (var i in node.contents) {
   2065             throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
   2066           }
   2067           delete parent.contents[name];
   2068         },readdir:function (node) {
   2069           var entries = ['.', '..']
   2070           for (var key in node.contents) {
   2071             if (!node.contents.hasOwnProperty(key)) {
   2072               continue;
   2073             }
   2074             entries.push(key);
   2075           }
   2076           return entries;
   2077         },symlink:function (parent, newname, oldpath) {
   2078           var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);
   2079           node.link = oldpath;
   2080           return node;
   2081         },readlink:function (node) {
   2082           if (!FS.isLink(node.mode)) {
   2083             throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   2084           }
   2085           return node.link;
   2086         }},stream_ops:{read:function (stream, buffer, offset, length, position) {
   2087           var contents = stream.node.contents;
   2088           if (position >= contents.length)
   2089             return 0;
   2090           var size = Math.min(contents.length - position, length);
   2091           assert(size >= 0);
   2092           if (size > 8 && contents.subarray) { // non-trivial, and typed array
   2093             buffer.set(contents.subarray(position, position + size), offset);
   2094           } else
   2095           {
   2096             for (var i = 0; i < size; i++) {
   2097               buffer[offset + i] = contents[position + i];
   2098             }
   2099           }
   2100           return size;
   2101         },write:function (stream, buffer, offset, length, position, canOwn) {
   2102           var node = stream.node;
   2103           node.timestamp = Date.now();
   2104           var contents = node.contents;
   2105           if (length && contents.length === 0 && position === 0 && buffer.subarray) {
   2106             // just replace it with the new data
   2107             if (canOwn && offset === 0) {
   2108               node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source.
   2109               node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTENT_OWNING : MEMFS.CONTENT_FIXED;
   2110             } else {
   2111               node.contents = new Uint8Array(buffer.subarray(offset, offset+length));
   2112               node.contentMode = MEMFS.CONTENT_FIXED;
   2113             }
   2114             return length;
   2115           }
   2116           MEMFS.ensureFlexible(node);
   2117           var contents = node.contents;
   2118           while (contents.length < position) contents.push(0);
   2119           for (var i = 0; i < length; i++) {
   2120             contents[position + i] = buffer[offset + i];
   2121           }
   2122           return length;
   2123         },llseek:function (stream, offset, whence) {
   2124           var position = offset;
   2125           if (whence === 1) {  // SEEK_CUR.
   2126             position += stream.position;
   2127           } else if (whence === 2) {  // SEEK_END.
   2128             if (FS.isFile(stream.node.mode)) {
   2129               position += stream.node.contents.length;
   2130             }
   2131           }
   2132           if (position < 0) {
   2133             throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   2134           }
   2135           stream.ungotten = [];
   2136           stream.position = position;
   2137           return position;
   2138         },allocate:function (stream, offset, length) {
   2139           MEMFS.ensureFlexible(stream.node);
   2140           var contents = stream.node.contents;
   2141           var limit = offset + length;
   2142           while (limit > contents.length) contents.push(0);
   2143         },mmap:function (stream, buffer, offset, length, position, prot, flags) {
   2144           if (!FS.isFile(stream.node.mode)) {
   2145             throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
   2146           }
   2147           var ptr;
   2148           var allocated;
   2149           var contents = stream.node.contents;
   2150           // Only make a new copy when MAP_PRIVATE is specified.
   2151           if ( !(flags & 2) &&
   2152                 (contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
   2153             // We can't emulate MAP_SHARED when the file is not backed by the buffer
   2154             // we're mapping to (e.g. the HEAP buffer).
   2155             allocated = false;
   2156             ptr = contents.byteOffset;
   2157           } else {
   2158             // Try to avoid unnecessary slices.
   2159             if (position > 0 || position + length < contents.length) {
   2160               if (contents.subarray) {
   2161                 contents = contents.subarray(position, position + length);
   2162               } else {
   2163                 contents = Array.prototype.slice.call(contents, position, position + length);
   2164               }
   2165             }
   2166             allocated = true;
   2167             ptr = _malloc(length);
   2168             if (!ptr) {
   2169               throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
   2170             }
   2171             buffer.set(contents, ptr);
   2172           }
   2173           return { ptr: ptr, allocated: allocated };
   2174         }}};
   2175 
   2176   var IDBFS={dbs:{},indexedDB:function () {
   2177         return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
   2178       },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
   2179         // reuse all of the core MEMFS functionality
   2180         return MEMFS.mount.apply(null, arguments);
   2181       },syncfs:function (mount, populate, callback) {
   2182         IDBFS.getLocalSet(mount, function(err, local) {
   2183           if (err) return callback(err);
   2184 
   2185           IDBFS.getRemoteSet(mount, function(err, remote) {
   2186             if (err) return callback(err);
   2187 
   2188             var src = populate ? remote : local;
   2189             var dst = populate ? local : remote;
   2190 
   2191             IDBFS.reconcile(src, dst, callback);
   2192           });
   2193         });
   2194       },getDB:function (name, callback) {
   2195         // check the cache first
   2196         var db = IDBFS.dbs[name];
   2197         if (db) {
   2198           return callback(null, db);
   2199         }
   2200 
   2201         var req;
   2202         try {
   2203           req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
   2204         } catch (e) {
   2205           return callback(e);
   2206         }
   2207         req.onupgradeneeded = function(e) {
   2208           var db = e.target.result;
   2209           var transaction = e.target.transaction;
   2210 
   2211           var fileStore;
   2212 
   2213           if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
   2214             fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
   2215           } else {
   2216             fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
   2217           }
   2218 
   2219           fileStore.createIndex('timestamp', 'timestamp', { unique: false });
   2220         };
   2221         req.onsuccess = function() {
   2222           db = req.result;
   2223 
   2224           // add to the cache
   2225           IDBFS.dbs[name] = db;
   2226           callback(null, db);
   2227         };
   2228         req.onerror = function() {
   2229           callback(this.error);
   2230         };
   2231       },getLocalSet:function (mount, callback) {
   2232         var entries = {};
   2233 
   2234         function isRealDir(p) {
   2235           return p !== '.' && p !== '..';
   2236         };
   2237         function toAbsolute(root) {
   2238           return function(p) {
   2239             return PATH.join2(root, p);
   2240           }
   2241         };
   2242 
   2243         var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
   2244 
   2245         while (check.length) {
   2246           var path = check.pop();
   2247           var stat;
   2248 
   2249           try {
   2250             stat = FS.stat(path);
   2251           } catch (e) {
   2252             return callback(e);
   2253           }
   2254 
   2255           if (FS.isDir(stat.mode)) {
   2256             check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));
   2257           }
   2258 
   2259           entries[path] = { timestamp: stat.mtime };
   2260         }
   2261 
   2262         return callback(null, { type: 'local', entries: entries });
   2263       },getRemoteSet:function (mount, callback) {
   2264         var entries = {};
   2265 
   2266         IDBFS.getDB(mount.mountpoint, function(err, db) {
   2267           if (err) return callback(err);
   2268 
   2269           var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
   2270           transaction.onerror = function() { callback(this.error); };
   2271 
   2272           var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
   2273           var index = store.index('timestamp');
   2274 
   2275           index.openKeyCursor().onsuccess = function(event) {
   2276             var cursor = event.target.result;
   2277 
   2278             if (!cursor) {
   2279               return callback(null, { type: 'remote', db: db, entries: entries });
   2280             }
   2281 
   2282             entries[cursor.primaryKey] = { timestamp: cursor.key };
   2283 
   2284             cursor.continue();
   2285           };
   2286         });
   2287       },loadLocalEntry:function (path, callback) {
   2288         var stat, node;
   2289 
   2290         try {
   2291           var lookup = FS.lookupPath(path);
   2292           node = lookup.node;
   2293           stat = FS.stat(path);
   2294         } catch (e) {
   2295           return callback(e);
   2296         }
   2297 
   2298         if (FS.isDir(stat.mode)) {
   2299           return callback(null, { timestamp: stat.mtime, mode: stat.mode });
   2300         } else if (FS.isFile(stat.mode)) {
   2301           return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents });
   2302         } else {
   2303           return callback(new Error('node type not supported'));
   2304         }
   2305       },storeLocalEntry:function (path, entry, callback) {
   2306         try {
   2307           if (FS.isDir(entry.mode)) {
   2308             FS.mkdir(path, entry.mode);
   2309           } else if (FS.isFile(entry.mode)) {
   2310             FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true });
   2311           } else {
   2312             return callback(new Error('node type not supported'));
   2313           }
   2314 
   2315           FS.utime(path, entry.timestamp, entry.timestamp);
   2316         } catch (e) {
   2317           return callback(e);
   2318         }
   2319 
   2320         callback(null);
   2321       },removeLocalEntry:function (path, callback) {
   2322         try {
   2323           var lookup = FS.lookupPath(path);
   2324           var stat = FS.stat(path);
   2325 
   2326           if (FS.isDir(stat.mode)) {
   2327             FS.rmdir(path);
   2328           } else if (FS.isFile(stat.mode)) {
   2329             FS.unlink(path);
   2330           }
   2331         } catch (e) {
   2332           return callback(e);
   2333         }
   2334 
   2335         callback(null);
   2336       },loadRemoteEntry:function (store, path, callback) {
   2337         var req = store.get(path);
   2338         req.onsuccess = function(event) { callback(null, event.target.result); };
   2339         req.onerror = function() { callback(this.error); };
   2340       },storeRemoteEntry:function (store, path, entry, callback) {
   2341         var req = store.put(entry, path);
   2342         req.onsuccess = function() { callback(null); };
   2343         req.onerror = function() { callback(this.error); };
   2344       },removeRemoteEntry:function (store, path, callback) {
   2345         var req = store.delete(path);
   2346         req.onsuccess = function() { callback(null); };
   2347         req.onerror = function() { callback(this.error); };
   2348       },reconcile:function (src, dst, callback) {
   2349         var total = 0;
   2350 
   2351         var create = [];
   2352         Object.keys(src.entries).forEach(function (key) {
   2353           var e = src.entries[key];
   2354           var e2 = dst.entries[key];
   2355           if (!e2 || e.timestamp > e2.timestamp) {
   2356             create.push(key);
   2357             total++;
   2358           }
   2359         });
   2360 
   2361         var remove = [];
   2362         Object.keys(dst.entries).forEach(function (key) {
   2363           var e = dst.entries[key];
   2364           var e2 = src.entries[key];
   2365           if (!e2) {
   2366             remove.push(key);
   2367             total++;
   2368           }
   2369         });
   2370 
   2371         if (!total) {
   2372           return callback(null);
   2373         }
   2374 
   2375         var errored = false;
   2376         var completed = 0;
   2377         var db = src.type === 'remote' ? src.db : dst.db;
   2378         var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
   2379         var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
   2380 
   2381         function done(err) {
   2382           if (err) {
   2383             if (!done.errored) {
   2384               done.errored = true;
   2385               return callback(err);
   2386             }
   2387             return;
   2388           }
   2389           if (++completed >= total) {
   2390             return callback(null);
   2391           }
   2392         };
   2393 
   2394         transaction.onerror = function() { done(this.error); };
   2395 
   2396         // sort paths in ascending order so directory entries are created
   2397         // before the files inside them
   2398         create.sort().forEach(function (path) {
   2399           if (dst.type === 'local') {
   2400             IDBFS.loadRemoteEntry(store, path, function (err, entry) {
   2401               if (err) return done(err);
   2402               IDBFS.storeLocalEntry(path, entry, done);
   2403             });
   2404           } else {
   2405             IDBFS.loadLocalEntry(path, function (err, entry) {
   2406               if (err) return done(err);
   2407               IDBFS.storeRemoteEntry(store, path, entry, done);
   2408             });
   2409           }
   2410         });
   2411 
   2412         // sort paths in descending order so files are deleted before their
   2413         // parent directories
   2414         remove.sort().reverse().forEach(function(path) {
   2415           if (dst.type === 'local') {
   2416             IDBFS.removeLocalEntry(path, done);
   2417           } else {
   2418             IDBFS.removeRemoteEntry(store, path, done);
   2419           }
   2420         });
   2421       }};
   2422 
   2423   var NODEFS={isWindows:false,staticInit:function () {
   2424         NODEFS.isWindows = !!process.platform.match(/^win/);
   2425       },mount:function (mount) {
   2426         assert(ENVIRONMENT_IS_NODE);
   2427         return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
   2428       },createNode:function (parent, name, mode, dev) {
   2429         if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
   2430           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   2431         }
   2432         var node = FS.createNode(parent, name, mode);
   2433         node.node_ops = NODEFS.node_ops;
   2434         node.stream_ops = NODEFS.stream_ops;
   2435         return node;
   2436       },getMode:function (path) {
   2437         var stat;
   2438         try {
   2439           stat = fs.lstatSync(path);
   2440           if (NODEFS.isWindows) {
   2441             // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
   2442             // propagate write bits to execute bits.
   2443             stat.mode = stat.mode | ((stat.mode & 146) >> 1);
   2444           }
   2445         } catch (e) {
   2446           if (!e.code) throw e;
   2447           throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2448         }
   2449         return stat.mode;
   2450       },realPath:function (node) {
   2451         var parts = [];
   2452         while (node.parent !== node) {
   2453           parts.push(node.name);
   2454           node = node.parent;
   2455         }
   2456         parts.push(node.mount.opts.root);
   2457         parts.reverse();
   2458         return PATH.join.apply(null, parts);
   2459       },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function (flags) {
   2460         if (flags in NODEFS.flagsToPermissionStringMap) {
   2461           return NODEFS.flagsToPermissionStringMap[flags];
   2462         } else {
   2463           return flags;
   2464         }
   2465       },node_ops:{getattr:function (node) {
   2466           var path = NODEFS.realPath(node);
   2467           var stat;
   2468           try {
   2469             stat = fs.lstatSync(path);
   2470           } catch (e) {
   2471             if (!e.code) throw e;
   2472             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2473           }
   2474           // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
   2475           // See http://support.microsoft.com/kb/140365
   2476           if (NODEFS.isWindows && !stat.blksize) {
   2477             stat.blksize = 4096;
   2478           }
   2479           if (NODEFS.isWindows && !stat.blocks) {
   2480             stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
   2481           }
   2482           return {
   2483             dev: stat.dev,
   2484             ino: stat.ino,
   2485             mode: stat.mode,
   2486             nlink: stat.nlink,
   2487             uid: stat.uid,
   2488             gid: stat.gid,
   2489             rdev: stat.rdev,
   2490             size: stat.size,
   2491             atime: stat.atime,
   2492             mtime: stat.mtime,
   2493             ctime: stat.ctime,
   2494             blksize: stat.blksize,
   2495             blocks: stat.blocks
   2496           };
   2497         },setattr:function (node, attr) {
   2498           var path = NODEFS.realPath(node);
   2499           try {
   2500             if (attr.mode !== undefined) {
   2501               fs.chmodSync(path, attr.mode);
   2502               // update the common node structure mode as well
   2503               node.mode = attr.mode;
   2504             }
   2505             if (attr.timestamp !== undefined) {
   2506               var date = new Date(attr.timestamp);
   2507               fs.utimesSync(path, date, date);
   2508             }
   2509             if (attr.size !== undefined) {
   2510               fs.truncateSync(path, attr.size);
   2511             }
   2512           } catch (e) {
   2513             if (!e.code) throw e;
   2514             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2515           }
   2516         },lookup:function (parent, name) {
   2517           var path = PATH.join2(NODEFS.realPath(parent), name);
   2518           var mode = NODEFS.getMode(path);
   2519           return NODEFS.createNode(parent, name, mode);
   2520         },mknod:function (parent, name, mode, dev) {
   2521           var node = NODEFS.createNode(parent, name, mode, dev);
   2522           // create the backing node for this in the fs root as well
   2523           var path = NODEFS.realPath(node);
   2524           try {
   2525             if (FS.isDir(node.mode)) {
   2526               fs.mkdirSync(path, node.mode);
   2527             } else {
   2528               fs.writeFileSync(path, '', { mode: node.mode });
   2529             }
   2530           } catch (e) {
   2531             if (!e.code) throw e;
   2532             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2533           }
   2534           return node;
   2535         },rename:function (oldNode, newDir, newName) {
   2536           var oldPath = NODEFS.realPath(oldNode);
   2537           var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
   2538           try {
   2539             fs.renameSync(oldPath, newPath);
   2540           } catch (e) {
   2541             if (!e.code) throw e;
   2542             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2543           }
   2544         },unlink:function (parent, name) {
   2545           var path = PATH.join2(NODEFS.realPath(parent), name);
   2546           try {
   2547             fs.unlinkSync(path);
   2548           } catch (e) {
   2549             if (!e.code) throw e;
   2550             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2551           }
   2552         },rmdir:function (parent, name) {
   2553           var path = PATH.join2(NODEFS.realPath(parent), name);
   2554           try {
   2555             fs.rmdirSync(path);
   2556           } catch (e) {
   2557             if (!e.code) throw e;
   2558             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2559           }
   2560         },readdir:function (node) {
   2561           var path = NODEFS.realPath(node);
   2562           try {
   2563             return fs.readdirSync(path);
   2564           } catch (e) {
   2565             if (!e.code) throw e;
   2566             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2567           }
   2568         },symlink:function (parent, newName, oldPath) {
   2569           var newPath = PATH.join2(NODEFS.realPath(parent), newName);
   2570           try {
   2571             fs.symlinkSync(oldPath, newPath);
   2572           } catch (e) {
   2573             if (!e.code) throw e;
   2574             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2575           }
   2576         },readlink:function (node) {
   2577           var path = NODEFS.realPath(node);
   2578           try {
   2579             return fs.readlinkSync(path);
   2580           } catch (e) {
   2581             if (!e.code) throw e;
   2582             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2583           }
   2584         }},stream_ops:{open:function (stream) {
   2585           var path = NODEFS.realPath(stream.node);
   2586           try {
   2587             if (FS.isFile(stream.node.mode)) {
   2588               stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags));
   2589             }
   2590           } catch (e) {
   2591             if (!e.code) throw e;
   2592             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2593           }
   2594         },close:function (stream) {
   2595           try {
   2596             if (FS.isFile(stream.node.mode) && stream.nfd) {
   2597               fs.closeSync(stream.nfd);
   2598             }
   2599           } catch (e) {
   2600             if (!e.code) throw e;
   2601             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2602           }
   2603         },read:function (stream, buffer, offset, length, position) {
   2604           // FIXME this is terrible.
   2605           var nbuffer = new Buffer(length);
   2606           var res;
   2607           try {
   2608             res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
   2609           } catch (e) {
   2610             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2611           }
   2612           if (res > 0) {
   2613             for (var i = 0; i < res; i++) {
   2614               buffer[offset + i] = nbuffer[i];
   2615             }
   2616           }
   2617           return res;
   2618         },write:function (stream, buffer, offset, length, position) {
   2619           // FIXME this is terrible.
   2620           var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
   2621           var res;
   2622           try {
   2623             res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
   2624           } catch (e) {
   2625             throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2626           }
   2627           return res;
   2628         },llseek:function (stream, offset, whence) {
   2629           var position = offset;
   2630           if (whence === 1) {  // SEEK_CUR.
   2631             position += stream.position;
   2632           } else if (whence === 2) {  // SEEK_END.
   2633             if (FS.isFile(stream.node.mode)) {
   2634               try {
   2635                 var stat = fs.fstatSync(stream.nfd);
   2636                 position += stat.size;
   2637               } catch (e) {
   2638                 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
   2639               }
   2640             }
   2641           }
   2642 
   2643           if (position < 0) {
   2644             throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   2645           }
   2646 
   2647           stream.position = position;
   2648           return position;
   2649         }}};
   2650 
   2651   var _stdin=allocate(1, "i32*", ALLOC_STATIC);
   2652 
   2653   var _stdout=allocate(1, "i32*", ALLOC_STATIC);
   2654 
   2655   var _stderr=allocate(1, "i32*", ALLOC_STATIC);
   2656 
   2657   function _fflush(stream) {
   2658       // int fflush(FILE *stream);
   2659       // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
   2660       // we don't currently perform any user-space buffering of data
   2661     }var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},handleFSError:function (e) {
   2662         if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
   2663         return ___setErrNo(e.errno);
   2664       },lookupPath:function (path, opts) {
   2665         path = PATH.resolve(FS.cwd(), path);
   2666         opts = opts || {};
   2667 
   2668         var defaults = {
   2669           follow_mount: true,
   2670           recurse_count: 0
   2671         };
   2672         for (var key in defaults) {
   2673           if (opts[key] === undefined) {
   2674             opts[key] = defaults[key];
   2675           }
   2676         }
   2677 
   2678         if (opts.recurse_count > 8) {  // max recursive lookup of 8
   2679           throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
   2680         }
   2681 
   2682         // split the path
   2683         var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
   2684           return !!p;
   2685         }), false);
   2686 
   2687         // start at the root
   2688         var current = FS.root;
   2689         var current_path = '/';
   2690 
   2691         for (var i = 0; i < parts.length; i++) {
   2692           var islast = (i === parts.length-1);
   2693           if (islast && opts.parent) {
   2694             // stop resolving
   2695             break;
   2696           }
   2697 
   2698           current = FS.lookupNode(current, parts[i]);
   2699           current_path = PATH.join2(current_path, parts[i]);
   2700 
   2701           // jump to the mount's root node if this is a mountpoint
   2702           if (FS.isMountpoint(current)) {
   2703             if (!islast || (islast && opts.follow_mount)) {
   2704               current = current.mounted.root;
   2705             }
   2706           }
   2707 
   2708           // by default, lookupPath will not follow a symlink if it is the final path component.
   2709           // setting opts.follow = true will override this behavior.
   2710           if (!islast || opts.follow) {
   2711             var count = 0;
   2712             while (FS.isLink(current.mode)) {
   2713               var link = FS.readlink(current_path);
   2714               current_path = PATH.resolve(PATH.dirname(current_path), link);
   2715 
   2716               var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });
   2717               current = lookup.node;
   2718 
   2719               if (count++ > 40) {  // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
   2720                 throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
   2721               }
   2722             }
   2723           }
   2724         }
   2725 
   2726         return { path: current_path, node: current };
   2727       },getPath:function (node) {
   2728         var path;
   2729         while (true) {
   2730           if (FS.isRoot(node)) {
   2731             var mount = node.mount.mountpoint;
   2732             if (!path) return mount;
   2733             return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
   2734           }
   2735           path = path ? node.name + '/' + path : node.name;
   2736           node = node.parent;
   2737         }
   2738       },hashName:function (parentid, name) {
   2739         var hash = 0;
   2740 
   2741 
   2742         for (var i = 0; i < name.length; i++) {
   2743           hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
   2744         }
   2745         return ((parentid + hash) >>> 0) % FS.nameTable.length;
   2746       },hashAddNode:function (node) {
   2747         var hash = FS.hashName(node.parent.id, node.name);
   2748         node.name_next = FS.nameTable[hash];
   2749         FS.nameTable[hash] = node;
   2750       },hashRemoveNode:function (node) {
   2751         var hash = FS.hashName(node.parent.id, node.name);
   2752         if (FS.nameTable[hash] === node) {
   2753           FS.nameTable[hash] = node.name_next;
   2754         } else {
   2755           var current = FS.nameTable[hash];
   2756           while (current) {
   2757             if (current.name_next === node) {
   2758               current.name_next = node.name_next;
   2759               break;
   2760             }
   2761             current = current.name_next;
   2762           }
   2763         }
   2764       },lookupNode:function (parent, name) {
   2765         var err = FS.mayLookup(parent);
   2766         if (err) {
   2767           throw new FS.ErrnoError(err);
   2768         }
   2769         var hash = FS.hashName(parent.id, name);
   2770         for (var node = FS.nameTable[hash]; node; node = node.name_next) {
   2771           var nodeName = node.name;
   2772           if (node.parent.id === parent.id && nodeName === name) {
   2773             return node;
   2774           }
   2775         }
   2776         // if we failed to find it in the cache, call into the VFS
   2777         return FS.lookup(parent, name);
   2778       },createNode:function (parent, name, mode, rdev) {
   2779         if (!FS.FSNode) {
   2780           FS.FSNode = function(parent, name, mode, rdev) {
   2781             if (!parent) {
   2782               parent = this;  // root node sets parent to itself
   2783             }
   2784             this.parent = parent;
   2785             this.mount = parent.mount;
   2786             this.mounted = null;
   2787             this.id = FS.nextInode++;
   2788             this.name = name;
   2789             this.mode = mode;
   2790             this.node_ops = {};
   2791             this.stream_ops = {};
   2792             this.rdev = rdev;
   2793           };
   2794 
   2795           FS.FSNode.prototype = {};
   2796 
   2797           // compatibility
   2798           var readMode = 292 | 73;
   2799           var writeMode = 146;
   2800 
   2801           // NOTE we must use Object.defineProperties instead of individual calls to
   2802           // Object.defineProperty in order to make closure compiler happy
   2803           Object.defineProperties(FS.FSNode.prototype, {
   2804             read: {
   2805               get: function() { return (this.mode & readMode) === readMode; },
   2806               set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
   2807             },
   2808             write: {
   2809               get: function() { return (this.mode & writeMode) === writeMode; },
   2810               set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
   2811             },
   2812             isFolder: {
   2813               get: function() { return FS.isDir(this.mode); },
   2814             },
   2815             isDevice: {
   2816               get: function() { return FS.isChrdev(this.mode); },
   2817             },
   2818           });
   2819         }
   2820 
   2821         var node = new FS.FSNode(parent, name, mode, rdev);
   2822 
   2823         FS.hashAddNode(node);
   2824 
   2825         return node;
   2826       },destroyNode:function (node) {
   2827         FS.hashRemoveNode(node);
   2828       },isRoot:function (node) {
   2829         return node === node.parent;
   2830       },isMountpoint:function (node) {
   2831         return !!node.mounted;
   2832       },isFile:function (mode) {
   2833         return (mode & 61440) === 32768;
   2834       },isDir:function (mode) {
   2835         return (mode & 61440) === 16384;
   2836       },isLink:function (mode) {
   2837         return (mode & 61440) === 40960;
   2838       },isChrdev:function (mode) {
   2839         return (mode & 61440) === 8192;
   2840       },isBlkdev:function (mode) {
   2841         return (mode & 61440) === 24576;
   2842       },isFIFO:function (mode) {
   2843         return (mode & 61440) === 4096;
   2844       },isSocket:function (mode) {
   2845         return (mode & 49152) === 49152;
   2846       },flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function (str) {
   2847         var flags = FS.flagModes[str];
   2848         if (typeof flags === 'undefined') {
   2849           throw new Error('Unknown file open mode: ' + str);
   2850         }
   2851         return flags;
   2852       },flagsToPermissionString:function (flag) {
   2853         var accmode = flag & 2097155;
   2854         var perms = ['r', 'w', 'rw'][accmode];
   2855         if ((flag & 512)) {
   2856           perms += 'w';
   2857         }
   2858         return perms;
   2859       },nodePermissions:function (node, perms) {
   2860         if (FS.ignorePermissions) {
   2861           return 0;
   2862         }
   2863         // return 0 if any user, group or owner bits are set.
   2864         if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
   2865           return ERRNO_CODES.EACCES;
   2866         } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
   2867           return ERRNO_CODES.EACCES;
   2868         } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
   2869           return ERRNO_CODES.EACCES;
   2870         }
   2871         return 0;
   2872       },mayLookup:function (dir) {
   2873         return FS.nodePermissions(dir, 'x');
   2874       },mayCreate:function (dir, name) {
   2875         try {
   2876           var node = FS.lookupNode(dir, name);
   2877           return ERRNO_CODES.EEXIST;
   2878         } catch (e) {
   2879         }
   2880         return FS.nodePermissions(dir, 'wx');
   2881       },mayDelete:function (dir, name, isdir) {
   2882         var node;
   2883         try {
   2884           node = FS.lookupNode(dir, name);
   2885         } catch (e) {
   2886           return e.errno;
   2887         }
   2888         var err = FS.nodePermissions(dir, 'wx');
   2889         if (err) {
   2890           return err;
   2891         }
   2892         if (isdir) {
   2893           if (!FS.isDir(node.mode)) {
   2894             return ERRNO_CODES.ENOTDIR;
   2895           }
   2896           if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
   2897             return ERRNO_CODES.EBUSY;
   2898           }
   2899         } else {
   2900           if (FS.isDir(node.mode)) {
   2901             return ERRNO_CODES.EISDIR;
   2902           }
   2903         }
   2904         return 0;
   2905       },mayOpen:function (node, flags) {
   2906         if (!node) {
   2907           return ERRNO_CODES.ENOENT;
   2908         }
   2909         if (FS.isLink(node.mode)) {
   2910           return ERRNO_CODES.ELOOP;
   2911         } else if (FS.isDir(node.mode)) {
   2912           if ((flags & 2097155) !== 0 ||  // opening for write
   2913               (flags & 512)) {
   2914             return ERRNO_CODES.EISDIR;
   2915           }
   2916         }
   2917         return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
   2918       },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
   2919         fd_start = fd_start || 0;
   2920         fd_end = fd_end || FS.MAX_OPEN_FDS;
   2921         for (var fd = fd_start; fd <= fd_end; fd++) {
   2922           if (!FS.streams[fd]) {
   2923             return fd;
   2924           }
   2925         }
   2926         throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
   2927       },getStream:function (fd) {
   2928         return FS.streams[fd];
   2929       },createStream:function (stream, fd_start, fd_end) {
   2930         if (!FS.FSStream) {
   2931           FS.FSStream = function(){};
   2932           FS.FSStream.prototype = {};
   2933           // compatibility
   2934           Object.defineProperties(FS.FSStream.prototype, {
   2935             object: {
   2936               get: function() { return this.node; },
   2937               set: function(val) { this.node = val; }
   2938             },
   2939             isRead: {
   2940               get: function() { return (this.flags & 2097155) !== 1; }
   2941             },
   2942             isWrite: {
   2943               get: function() { return (this.flags & 2097155) !== 0; }
   2944             },
   2945             isAppend: {
   2946               get: function() { return (this.flags & 1024); }
   2947             }
   2948           });
   2949         }
   2950         if (0) {
   2951           // reuse the object
   2952           stream.__proto__ = FS.FSStream.prototype;
   2953         } else {
   2954           var newStream = new FS.FSStream();
   2955           for (var p in stream) {
   2956             newStream[p] = stream[p];
   2957           }
   2958           stream = newStream;
   2959         }
   2960         var fd = FS.nextfd(fd_start, fd_end);
   2961         stream.fd = fd;
   2962         FS.streams[fd] = stream;
   2963         return stream;
   2964       },closeStream:function (fd) {
   2965         FS.streams[fd] = null;
   2966       },getStreamFromPtr:function (ptr) {
   2967         return FS.streams[ptr - 1];
   2968       },getPtrForStream:function (stream) {
   2969         return stream ? stream.fd + 1 : 0;
   2970       },chrdev_stream_ops:{open:function (stream) {
   2971           var device = FS.getDevice(stream.node.rdev);
   2972           // override node's stream ops with the device's
   2973           stream.stream_ops = device.stream_ops;
   2974           // forward the open call
   2975           if (stream.stream_ops.open) {
   2976             stream.stream_ops.open(stream);
   2977           }
   2978         },llseek:function () {
   2979           throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
   2980         }},major:function (dev) {
   2981         return ((dev) >> 8);
   2982       },minor:function (dev) {
   2983         return ((dev) & 0xff);
   2984       },makedev:function (ma, mi) {
   2985         return ((ma) << 8 | (mi));
   2986       },registerDevice:function (dev, ops) {
   2987         FS.devices[dev] = { stream_ops: ops };
   2988       },getDevice:function (dev) {
   2989         return FS.devices[dev];
   2990       },getMounts:function (mount) {
   2991         var mounts = [];
   2992         var check = [mount];
   2993 
   2994         while (check.length) {
   2995           var m = check.pop();
   2996 
   2997           mounts.push(m);
   2998 
   2999           check.push.apply(check, m.mounts);
   3000         }
   3001 
   3002         return mounts;
   3003       },syncfs:function (populate, callback) {
   3004         if (typeof(populate) === 'function') {
   3005           callback = populate;
   3006           populate = false;
   3007         }
   3008 
   3009         var mounts = FS.getMounts(FS.root.mount);
   3010         var completed = 0;
   3011 
   3012         function done(err) {
   3013           if (err) {
   3014             if (!done.errored) {
   3015               done.errored = true;
   3016               return callback(err);
   3017             }
   3018             return;
   3019           }
   3020           if (++completed >= mounts.length) {
   3021             callback(null);
   3022           }
   3023         };
   3024 
   3025         // sync all mounts
   3026         mounts.forEach(function (mount) {
   3027           if (!mount.type.syncfs) {
   3028             return done(null);
   3029           }
   3030           mount.type.syncfs(mount, populate, done);
   3031         });
   3032       },mount:function (type, opts, mountpoint) {
   3033         var root = mountpoint === '/';
   3034         var pseudo = !mountpoint;
   3035         var node;
   3036 
   3037         if (root && FS.root) {
   3038           throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
   3039         } else if (!root && !pseudo) {
   3040           var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
   3041 
   3042           mountpoint = lookup.path;  // use the absolute path
   3043           node = lookup.node;
   3044 
   3045           if (FS.isMountpoint(node)) {
   3046             throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
   3047           }
   3048 
   3049           if (!FS.isDir(node.mode)) {
   3050             throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
   3051           }
   3052         }
   3053 
   3054         var mount = {
   3055           type: type,
   3056           opts: opts,
   3057           mountpoint: mountpoint,
   3058           mounts: []
   3059         };
   3060 
   3061         // create a root node for the fs
   3062         var mountRoot = type.mount(mount);
   3063         mountRoot.mount = mount;
   3064         mount.root = mountRoot;
   3065 
   3066         if (root) {
   3067           FS.root = mountRoot;
   3068         } else if (node) {
   3069           // set as a mountpoint
   3070           node.mounted = mount;
   3071 
   3072           // add the new mount to the current mount's children
   3073           if (node.mount) {
   3074             node.mount.mounts.push(mount);
   3075           }
   3076         }
   3077 
   3078         return mountRoot;
   3079       },unmount:function (mountpoint) {
   3080         var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
   3081 
   3082         if (!FS.isMountpoint(lookup.node)) {
   3083           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3084         }
   3085 
   3086         // destroy the nodes for this mount, and all its child mounts
   3087         var node = lookup.node;
   3088         var mount = node.mounted;
   3089         var mounts = FS.getMounts(mount);
   3090 
   3091         Object.keys(FS.nameTable).forEach(function (hash) {
   3092           var current = FS.nameTable[hash];
   3093 
   3094           while (current) {
   3095             var next = current.name_next;
   3096 
   3097             if (mounts.indexOf(current.mount) !== -1) {
   3098               FS.destroyNode(current);
   3099             }
   3100 
   3101             current = next;
   3102           }
   3103         });
   3104 
   3105         // no longer a mountpoint
   3106         node.mounted = null;
   3107 
   3108         // remove this mount from the child mounts
   3109         var idx = node.mount.mounts.indexOf(mount);
   3110         assert(idx !== -1);
   3111         node.mount.mounts.splice(idx, 1);
   3112       },lookup:function (parent, name) {
   3113         return parent.node_ops.lookup(parent, name);
   3114       },mknod:function (path, mode, dev) {
   3115         var lookup = FS.lookupPath(path, { parent: true });
   3116         var parent = lookup.node;
   3117         var name = PATH.basename(path);
   3118         var err = FS.mayCreate(parent, name);
   3119         if (err) {
   3120           throw new FS.ErrnoError(err);
   3121         }
   3122         if (!parent.node_ops.mknod) {
   3123           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   3124         }
   3125         return parent.node_ops.mknod(parent, name, mode, dev);
   3126       },create:function (path, mode) {
   3127         mode = mode !== undefined ? mode : 438 /* 0666 */;
   3128         mode &= 4095;
   3129         mode |= 32768;
   3130         return FS.mknod(path, mode, 0);
   3131       },mkdir:function (path, mode) {
   3132         mode = mode !== undefined ? mode : 511 /* 0777 */;
   3133         mode &= 511 | 512;
   3134         mode |= 16384;
   3135         return FS.mknod(path, mode, 0);
   3136       },mkdev:function (path, mode, dev) {
   3137         if (typeof(dev) === 'undefined') {
   3138           dev = mode;
   3139           mode = 438 /* 0666 */;
   3140         }
   3141         mode |= 8192;
   3142         return FS.mknod(path, mode, dev);
   3143       },symlink:function (oldpath, newpath) {
   3144         var lookup = FS.lookupPath(newpath, { parent: true });
   3145         var parent = lookup.node;
   3146         var newname = PATH.basename(newpath);
   3147         var err = FS.mayCreate(parent, newname);
   3148         if (err) {
   3149           throw new FS.ErrnoError(err);
   3150         }
   3151         if (!parent.node_ops.symlink) {
   3152           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   3153         }
   3154         return parent.node_ops.symlink(parent, newname, oldpath);
   3155       },rename:function (old_path, new_path) {
   3156         var old_dirname = PATH.dirname(old_path);
   3157         var new_dirname = PATH.dirname(new_path);
   3158         var old_name = PATH.basename(old_path);
   3159         var new_name = PATH.basename(new_path);
   3160         // parents must exist
   3161         var lookup, old_dir, new_dir;
   3162         try {
   3163           lookup = FS.lookupPath(old_path, { parent: true });
   3164           old_dir = lookup.node;
   3165           lookup = FS.lookupPath(new_path, { parent: true });
   3166           new_dir = lookup.node;
   3167         } catch (e) {
   3168           throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
   3169         }
   3170         // need to be part of the same mount
   3171         if (old_dir.mount !== new_dir.mount) {
   3172           throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
   3173         }
   3174         // source must exist
   3175         var old_node = FS.lookupNode(old_dir, old_name);
   3176         // old path should not be an ancestor of the new path
   3177         var relative = PATH.relative(old_path, new_dirname);
   3178         if (relative.charAt(0) !== '.') {
   3179           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3180         }
   3181         // new path should not be an ancestor of the old path
   3182         relative = PATH.relative(new_path, old_dirname);
   3183         if (relative.charAt(0) !== '.') {
   3184           throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
   3185         }
   3186         // see if the new path already exists
   3187         var new_node;
   3188         try {
   3189           new_node = FS.lookupNode(new_dir, new_name);
   3190         } catch (e) {
   3191           // not fatal
   3192         }
   3193         // early out if nothing needs to change
   3194         if (old_node === new_node) {
   3195           return;
   3196         }
   3197         // we'll need to delete the old entry
   3198         var isdir = FS.isDir(old_node.mode);
   3199         var err = FS.mayDelete(old_dir, old_name, isdir);
   3200         if (err) {
   3201           throw new FS.ErrnoError(err);
   3202         }
   3203         // need delete permissions if we'll be overwriting.
   3204         // need create permissions if new doesn't already exist.
   3205         err = new_node ?
   3206           FS.mayDelete(new_dir, new_name, isdir) :
   3207           FS.mayCreate(new_dir, new_name);
   3208         if (err) {
   3209           throw new FS.ErrnoError(err);
   3210         }
   3211         if (!old_dir.node_ops.rename) {
   3212           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   3213         }
   3214         if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
   3215           throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
   3216         }
   3217         // if we are going to change the parent, check write permissions
   3218         if (new_dir !== old_dir) {
   3219           err = FS.nodePermissions(old_dir, 'w');
   3220           if (err) {
   3221             throw new FS.ErrnoError(err);
   3222           }
   3223         }
   3224         // remove the node from the lookup hash
   3225         FS.hashRemoveNode(old_node);
   3226         // do the underlying fs rename
   3227         try {
   3228           old_dir.node_ops.rename(old_node, new_dir, new_name);
   3229         } catch (e) {
   3230           throw e;
   3231         } finally {
   3232           // add the node back to the hash (in case node_ops.rename
   3233           // changed its name)
   3234           FS.hashAddNode(old_node);
   3235         }
   3236       },rmdir:function (path) {
   3237         var lookup = FS.lookupPath(path, { parent: true });
   3238         var parent = lookup.node;
   3239         var name = PATH.basename(path);
   3240         var node = FS.lookupNode(parent, name);
   3241         var err = FS.mayDelete(parent, name, true);
   3242         if (err) {
   3243           throw new FS.ErrnoError(err);
   3244         }
   3245         if (!parent.node_ops.rmdir) {
   3246           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   3247         }
   3248         if (FS.isMountpoint(node)) {
   3249           throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
   3250         }
   3251         parent.node_ops.rmdir(parent, name);
   3252         FS.destroyNode(node);
   3253       },readdir:function (path) {
   3254         var lookup = FS.lookupPath(path, { follow: true });
   3255         var node = lookup.node;
   3256         if (!node.node_ops.readdir) {
   3257           throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
   3258         }
   3259         return node.node_ops.readdir(node);
   3260       },unlink:function (path) {
   3261         var lookup = FS.lookupPath(path, { parent: true });
   3262         var parent = lookup.node;
   3263         var name = PATH.basename(path);
   3264         var node = FS.lookupNode(parent, name);
   3265         var err = FS.mayDelete(parent, name, false);
   3266         if (err) {
   3267           // POSIX says unlink should set EPERM, not EISDIR
   3268           if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM;
   3269           throw new FS.ErrnoError(err);
   3270         }
   3271         if (!parent.node_ops.unlink) {
   3272           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   3273         }
   3274         if (FS.isMountpoint(node)) {
   3275           throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
   3276         }
   3277         parent.node_ops.unlink(parent, name);
   3278         FS.destroyNode(node);
   3279       },readlink:function (path) {
   3280         var lookup = FS.lookupPath(path);
   3281         var link = lookup.node;
   3282         if (!link.node_ops.readlink) {
   3283           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3284         }
   3285         return link.node_ops.readlink(link);
   3286       },stat:function (path, dontFollow) {
   3287         var lookup = FS.lookupPath(path, { follow: !dontFollow });
   3288         var node = lookup.node;
   3289         if (!node.node_ops.getattr) {
   3290           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   3291         }
   3292         return node.node_ops.getattr(node);
   3293       },lstat:function (path) {
   3294         return FS.stat(path, true);
   3295       },chmod:function (path, mode, dontFollow) {
   3296         var node;
   3297         if (typeof path === 'string') {
   3298           var lookup = FS.lookupPath(path, { follow: !dontFollow });
   3299           node = lookup.node;
   3300         } else {
   3301           node = path;
   3302         }
   3303         if (!node.node_ops.setattr) {
   3304           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   3305         }
   3306         node.node_ops.setattr(node, {
   3307           mode: (mode & 4095) | (node.mode & ~4095),
   3308           timestamp: Date.now()
   3309         });
   3310       },lchmod:function (path, mode) {
   3311         FS.chmod(path, mode, true);
   3312       },fchmod:function (fd, mode) {
   3313         var stream = FS.getStream(fd);
   3314         if (!stream) {
   3315           throw new FS.ErrnoError(ERRNO_CODES.EBADF);
   3316         }
   3317         FS.chmod(stream.node, mode);
   3318       },chown:function (path, uid, gid, dontFollow) {
   3319         var node;
   3320         if (typeof path === 'string') {
   3321           var lookup = FS.lookupPath(path, { follow: !dontFollow });
   3322           node = lookup.node;
   3323         } else {
   3324           node = path;
   3325         }
   3326         if (!node.node_ops.setattr) {
   3327           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   3328         }
   3329         node.node_ops.setattr(node, {
   3330           timestamp: Date.now()
   3331           // we ignore the uid / gid for now
   3332         });
   3333       },lchown:function (path, uid, gid) {
   3334         FS.chown(path, uid, gid, true);
   3335       },fchown:function (fd, uid, gid) {
   3336         var stream = FS.getStream(fd);
   3337         if (!stream) {
   3338           throw new FS.ErrnoError(ERRNO_CODES.EBADF);
   3339         }
   3340         FS.chown(stream.node, uid, gid);
   3341       },truncate:function (path, len) {
   3342         if (len < 0) {
   3343           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3344         }
   3345         var node;
   3346         if (typeof path === 'string') {
   3347           var lookup = FS.lookupPath(path, { follow: true });
   3348           node = lookup.node;
   3349         } else {
   3350           node = path;
   3351         }
   3352         if (!node.node_ops.setattr) {
   3353           throw new FS.ErrnoError(ERRNO_CODES.EPERM);
   3354         }
   3355         if (FS.isDir(node.mode)) {
   3356           throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
   3357         }
   3358         if (!FS.isFile(node.mode)) {
   3359           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3360         }
   3361         var err = FS.nodePermissions(node, 'w');
   3362         if (err) {
   3363           throw new FS.ErrnoError(err);
   3364         }
   3365         node.node_ops.setattr(node, {
   3366           size: len,
   3367           timestamp: Date.now()
   3368         });
   3369       },ftruncate:function (fd, len) {
   3370         var stream = FS.getStream(fd);
   3371         if (!stream) {
   3372           throw new FS.ErrnoError(ERRNO_CODES.EBADF);
   3373         }
   3374         if ((stream.flags & 2097155) === 0) {
   3375           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3376         }
   3377         FS.truncate(stream.node, len);
   3378       },utime:function (path, atime, mtime) {
   3379         var lookup = FS.lookupPath(path, { follow: true });
   3380         var node = lookup.node;
   3381         node.node_ops.setattr(node, {
   3382           timestamp: Math.max(atime, mtime)
   3383         });
   3384       },open:function (path, flags, mode, fd_start, fd_end) {
   3385         flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
   3386         mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode;
   3387         if ((flags & 64)) {
   3388           mode = (mode & 4095) | 32768;
   3389         } else {
   3390           mode = 0;
   3391         }
   3392         var node;
   3393         if (typeof path === 'object') {
   3394           node = path;
   3395         } else {
   3396           path = PATH.normalize(path);
   3397           try {
   3398             var lookup = FS.lookupPath(path, {
   3399               follow: !(flags & 131072)
   3400             });
   3401             node = lookup.node;
   3402           } catch (e) {
   3403             // ignore
   3404           }
   3405         }
   3406         // perhaps we need to create the node
   3407         if ((flags & 64)) {
   3408           if (node) {
   3409             // if O_CREAT and O_EXCL are set, error out if the node already exists
   3410             if ((flags & 128)) {
   3411               throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
   3412             }
   3413           } else {
   3414             // node doesn't exist, try to create it
   3415             node = FS.mknod(path, mode, 0);
   3416           }
   3417         }
   3418         if (!node) {
   3419           throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
   3420         }
   3421         // can't truncate a device
   3422         if (FS.isChrdev(node.mode)) {
   3423           flags &= ~512;
   3424         }
   3425         // check permissions
   3426         var err = FS.mayOpen(node, flags);
   3427         if (err) {
   3428           throw new FS.ErrnoError(err);
   3429         }
   3430         // do truncation if necessary
   3431         if ((flags & 512)) {
   3432           FS.truncate(node, 0);
   3433         }
   3434         // we've already handled these, don't pass down to the underlying vfs
   3435         flags &= ~(128 | 512);
   3436 
   3437         // register the stream with the filesystem
   3438         var stream = FS.createStream({
   3439           node: node,
   3440           path: FS.getPath(node),  // we want the absolute path to the node
   3441           flags: flags,
   3442           seekable: true,
   3443           position: 0,
   3444           stream_ops: node.stream_ops,
   3445           // used by the file family libc calls (fopen, fwrite, ferror, etc.)
   3446           ungotten: [],
   3447           error: false
   3448         }, fd_start, fd_end);
   3449         // call the new stream's open function
   3450         if (stream.stream_ops.open) {
   3451           stream.stream_ops.open(stream);
   3452         }
   3453         if (Module['logReadFiles'] && !(flags & 1)) {
   3454           if (!FS.readFiles) FS.readFiles = {};
   3455           if (!(path in FS.readFiles)) {
   3456             FS.readFiles[path] = 1;
   3457             Module['printErr']('read file: ' + path);
   3458           }
   3459         }
   3460         return stream;
   3461       },close:function (stream) {
   3462         try {
   3463           if (stream.stream_ops.close) {
   3464             stream.stream_ops.close(stream);
   3465           }
   3466         } catch (e) {
   3467           throw e;
   3468         } finally {
   3469           FS.closeStream(stream.fd);
   3470         }
   3471       },llseek:function (stream, offset, whence) {
   3472         if (!stream.seekable || !stream.stream_ops.llseek) {
   3473           throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
   3474         }
   3475         return stream.stream_ops.llseek(stream, offset, whence);
   3476       },read:function (stream, buffer, offset, length, position) {
   3477         if (length < 0 || position < 0) {
   3478           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3479         }
   3480         if ((stream.flags & 2097155) === 1) {
   3481           throw new FS.ErrnoError(ERRNO_CODES.EBADF);
   3482         }
   3483         if (FS.isDir(stream.node.mode)) {
   3484           throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
   3485         }
   3486         if (!stream.stream_ops.read) {
   3487           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3488         }
   3489         var seeking = true;
   3490         if (typeof position === 'undefined') {
   3491           position = stream.position;
   3492           seeking = false;
   3493         } else if (!stream.seekable) {
   3494           throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
   3495         }
   3496         var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
   3497         if (!seeking) stream.position += bytesRead;
   3498         return bytesRead;
   3499       },write:function (stream, buffer, offset, length, position, canOwn) {
   3500         if (length < 0 || position < 0) {
   3501           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3502         }
   3503         if ((stream.flags & 2097155) === 0) {
   3504           throw new FS.ErrnoError(ERRNO_CODES.EBADF);
   3505         }
   3506         if (FS.isDir(stream.node.mode)) {
   3507           throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
   3508         }
   3509         if (!stream.stream_ops.write) {
   3510           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3511         }
   3512         var seeking = true;
   3513         if (typeof position === 'undefined') {
   3514           position = stream.position;
   3515           seeking = false;
   3516         } else if (!stream.seekable) {
   3517           throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
   3518         }
   3519         if (stream.flags & 1024) {
   3520           // seek to the end before writing in append mode
   3521           FS.llseek(stream, 0, 2);
   3522         }
   3523         var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
   3524         if (!seeking) stream.position += bytesWritten;
   3525         return bytesWritten;
   3526       },allocate:function (stream, offset, length) {
   3527         if (offset < 0 || length <= 0) {
   3528           throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   3529         }
   3530         if ((stream.flags & 2097155) === 0) {
   3531           throw new FS.ErrnoError(ERRNO_CODES.EBADF);
   3532         }
   3533         if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
   3534           throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
   3535         }
   3536         if (!stream.stream_ops.allocate) {
   3537           throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
   3538         }
   3539         stream.stream_ops.allocate(stream, offset, length);
   3540       },mmap:function (stream, buffer, offset, length, position, prot, flags) {
   3541         // TODO if PROT is PROT_WRITE, make sure we have write access
   3542         if ((stream.flags & 2097155) === 1) {
   3543           throw new FS.ErrnoError(ERRNO_CODES.EACCES);
   3544         }
   3545         if (!stream.stream_ops.mmap) {
   3546           throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
   3547         }
   3548         return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
   3549       },ioctl:function (stream, cmd, arg) {
   3550         if (!stream.stream_ops.ioctl) {
   3551           throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
   3552         }
   3553         return stream.stream_ops.ioctl(stream, cmd, arg);
   3554       },readFile:function (path, opts) {
   3555         opts = opts || {};
   3556         opts.flags = opts.flags || 'r';
   3557         opts.encoding = opts.encoding || 'binary';
   3558         if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
   3559           throw new Error('Invalid encoding type "' + opts.encoding + '"');
   3560         }
   3561         var ret;
   3562         var stream = FS.open(path, opts.flags);
   3563         var stat = FS.stat(path);
   3564         var length = stat.size;
   3565         var buf = new Uint8Array(length);
   3566         FS.read(stream, buf, 0, length, 0);
   3567         if (opts.encoding === 'utf8') {
   3568           ret = '';
   3569           var utf8 = new Runtime.UTF8Processor();
   3570           for (var i = 0; i < length; i++) {
   3571             ret += utf8.processCChar(buf[i]);
   3572           }
   3573         } else if (opts.encoding === 'binary') {
   3574           ret = buf;
   3575         }
   3576         FS.close(stream);
   3577         return ret;
   3578       },writeFile:function (path, data, opts) {
   3579         opts = opts || {};
   3580         opts.flags = opts.flags || 'w';
   3581         opts.encoding = opts.encoding || 'utf8';
   3582         if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
   3583           throw new Error('Invalid encoding type "' + opts.encoding + '"');
   3584         }
   3585         var stream = FS.open(path, opts.flags, opts.mode);
   3586         if (opts.encoding === 'utf8') {
   3587           var utf8 = new Runtime.UTF8Processor();
   3588           var buf = new Uint8Array(utf8.processJSString(data));
   3589           FS.write(stream, buf, 0, buf.length, 0, opts.canOwn);
   3590         } else if (opts.encoding === 'binary') {
   3591           FS.write(stream, data, 0, data.length, 0, opts.canOwn);
   3592         }
   3593         FS.close(stream);
   3594       },cwd:function () {
   3595         return FS.currentPath;
   3596       },chdir:function (path) {
   3597         var lookup = FS.lookupPath(path, { follow: true });
   3598         if (!FS.isDir(lookup.node.mode)) {
   3599           throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
   3600         }
   3601         var err = FS.nodePermissions(lookup.node, 'x');
   3602         if (err) {
   3603           throw new FS.ErrnoError(err);
   3604         }
   3605         FS.currentPath = lookup.path;
   3606       },createDefaultDirectories:function () {
   3607         FS.mkdir('/tmp');
   3608       },createDefaultDevices:function () {
   3609         // create /dev
   3610         FS.mkdir('/dev');
   3611         // setup /dev/null
   3612         FS.registerDevice(FS.makedev(1, 3), {
   3613           read: function() { return 0; },
   3614           write: function() { return 0; }
   3615         });
   3616         FS.mkdev('/dev/null', FS.makedev(1, 3));
   3617         // setup /dev/tty and /dev/tty1
   3618         // stderr needs to print output using Module['printErr']
   3619         // so we register a second tty just for it.
   3620         TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
   3621         TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
   3622         FS.mkdev('/dev/tty', FS.makedev(5, 0));
   3623         FS.mkdev('/dev/tty1', FS.makedev(6, 0));
   3624         // we're not going to emulate the actual shm device,
   3625         // just create the tmp dirs that reside in it commonly
   3626         FS.mkdir('/dev/shm');
   3627         FS.mkdir('/dev/shm/tmp');
   3628       },createStandardStreams:function () {
   3629         // TODO deprecate the old functionality of a single
   3630         // input / output callback and that utilizes FS.createDevice
   3631         // and instead require a unique set of stream ops
   3632 
   3633         // by default, we symlink the standard streams to the
   3634         // default tty devices. however, if the standard streams
   3635         // have been overwritten we create a unique device for
   3636         // them instead.
   3637         if (Module['stdin']) {
   3638           FS.createDevice('/dev', 'stdin', Module['stdin']);
   3639         } else {
   3640           FS.symlink('/dev/tty', '/dev/stdin');
   3641         }
   3642         if (Module['stdout']) {
   3643           FS.createDevice('/dev', 'stdout', null, Module['stdout']);
   3644         } else {
   3645           FS.symlink('/dev/tty', '/dev/stdout');
   3646         }
   3647         if (Module['stderr']) {
   3648           FS.createDevice('/dev', 'stderr', null, Module['stderr']);
   3649         } else {
   3650           FS.symlink('/dev/tty1', '/dev/stderr');
   3651         }
   3652 
   3653         // open default streams for the stdin, stdout and stderr devices
   3654         var stdin = FS.open('/dev/stdin', 'r');
   3655         HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin);
   3656         assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
   3657 
   3658         var stdout = FS.open('/dev/stdout', 'w');
   3659         HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout);
   3660         assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');
   3661 
   3662         var stderr = FS.open('/dev/stderr', 'w');
   3663         HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr);
   3664         assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');
   3665       },ensureErrnoError:function () {
   3666         if (FS.ErrnoError) return;
   3667         FS.ErrnoError = function ErrnoError(errno) {
   3668           this.errno = errno;
   3669           for (var key in ERRNO_CODES) {
   3670             if (ERRNO_CODES[key] === errno) {
   3671               this.code = key;
   3672               break;
   3673             }
   3674           }
   3675           this.message = ERRNO_MESSAGES[errno];
   3676         };
   3677         FS.ErrnoError.prototype = new Error();
   3678         FS.ErrnoError.prototype.constructor = FS.ErrnoError;
   3679         // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
   3680         [ERRNO_CODES.ENOENT].forEach(function(code) {
   3681           FS.genericErrors[code] = new FS.ErrnoError(code);
   3682           FS.genericErrors[code].stack = '<generic error, no stack>';
   3683         });
   3684       },staticInit:function () {
   3685         FS.ensureErrnoError();
   3686 
   3687         FS.nameTable = new Array(4096);
   3688 
   3689         FS.mount(MEMFS, {}, '/');
   3690 
   3691         FS.createDefaultDirectories();
   3692         FS.createDefaultDevices();
   3693       },init:function (input, output, error) {
   3694         assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');
   3695         FS.init.initialized = true;
   3696 
   3697         FS.ensureErrnoError();
   3698 
   3699         // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
   3700         Module['stdin'] = input || Module['stdin'];
   3701         Module['stdout'] = output || Module['stdout'];
   3702         Module['stderr'] = error || Module['stderr'];
   3703 
   3704         FS.createStandardStreams();
   3705       },quit:function () {
   3706         FS.init.initialized = false;
   3707         for (var i = 0; i < FS.streams.length; i++) {
   3708           var stream = FS.streams[i];
   3709           if (!stream) {
   3710             continue;
   3711           }
   3712           FS.close(stream);
   3713         }
   3714       },getMode:function (canRead, canWrite) {
   3715         var mode = 0;
   3716         if (canRead) mode |= 292 | 73;
   3717         if (canWrite) mode |= 146;
   3718         return mode;
   3719       },joinPath:function (parts, forceRelative) {
   3720         var path = PATH.join.apply(null, parts);
   3721         if (forceRelative && path[0] == '/') path = path.substr(1);
   3722         return path;
   3723       },absolutePath:function (relative, base) {
   3724         return PATH.resolve(base, relative);
   3725       },standardizePath:function (path) {
   3726         return PATH.normalize(path);
   3727       },findObject:function (path, dontResolveLastLink) {
   3728         var ret = FS.analyzePath(path, dontResolveLastLink);
   3729         if (ret.exists) {
   3730           return ret.object;
   3731         } else {
   3732           ___setErrNo(ret.error);
   3733           return null;
   3734         }
   3735       },analyzePath:function (path, dontResolveLastLink) {
   3736         // operate from within the context of the symlink's target
   3737         try {
   3738           var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
   3739           path = lookup.path;
   3740         } catch (e) {
   3741         }
   3742         var ret = {
   3743           isRoot: false, exists: false, error: 0, name: null, path: null, object: null,
   3744           parentExists: false, parentPath: null, parentObject: null
   3745         };
   3746         try {
   3747           var lookup = FS.lookupPath(path, { parent: true });
   3748           ret.parentExists = true;
   3749           ret.parentPath = lookup.path;
   3750           ret.parentObject = lookup.node;
   3751           ret.name = PATH.basename(path);
   3752           lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
   3753           ret.exists = true;
   3754           ret.path = lookup.path;
   3755           ret.object = lookup.node;
   3756           ret.name = lookup.node.name;
   3757           ret.isRoot = lookup.path === '/';
   3758         } catch (e) {
   3759           ret.error = e.errno;
   3760         };
   3761         return ret;
   3762       },createFolder:function (parent, name, canRead, canWrite) {
   3763         var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
   3764         var mode = FS.getMode(canRead, canWrite);
   3765         return FS.mkdir(path, mode);
   3766       },createPath:function (parent, path, canRead, canWrite) {
   3767         parent = typeof parent === 'string' ? parent : FS.getPath(parent);
   3768         var parts = path.split('/').reverse();
   3769         while (parts.length) {
   3770           var part = parts.pop();
   3771           if (!part) continue;
   3772           var current = PATH.join2(parent, part);
   3773           try {
   3774             FS.mkdir(current);
   3775           } catch (e) {
   3776             // ignore EEXIST
   3777           }
   3778           parent = current;
   3779         }
   3780         return current;
   3781       },createFile:function (parent, name, properties, canRead, canWrite) {
   3782         var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
   3783         var mode = FS.getMode(canRead, canWrite);
   3784         return FS.create(path, mode);
   3785       },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
   3786         var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
   3787         var mode = FS.getMode(canRead, canWrite);
   3788         var node = FS.create(path, mode);
   3789         if (data) {
   3790           if (typeof data === 'string') {
   3791             var arr = new Array(data.length);
   3792             for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
   3793             data = arr;
   3794           }
   3795           // make sure we can write to the file
   3796           FS.chmod(node, mode | 146);
   3797           var stream = FS.open(node, 'w');
   3798           FS.write(stream, data, 0, data.length, 0, canOwn);
   3799           FS.close(stream);
   3800           FS.chmod(node, mode);
   3801         }
   3802         return node;
   3803       },createDevice:function (parent, name, input, output) {
   3804         var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
   3805         var mode = FS.getMode(!!input, !!output);
   3806         if (!FS.createDevice.major) FS.createDevice.major = 64;
   3807         var dev = FS.makedev(FS.createDevice.major++, 0);
   3808         // Create a fake device that a set of stream ops to emulate
   3809         // the old behavior.
   3810         FS.registerDevice(dev, {
   3811           open: function(stream) {
   3812             stream.seekable = false;
   3813           },
   3814           close: function(stream) {
   3815             // flush any pending line data
   3816             if (output && output.buffer && output.buffer.length) {
   3817               output(10);
   3818             }
   3819           },
   3820           read: function(stream, buffer, offset, length, pos /* ignored */) {
   3821             var bytesRead = 0;
   3822             for (var i = 0; i < length; i++) {
   3823               var result;
   3824               try {
   3825                 result = input();
   3826               } catch (e) {
   3827                 throw new FS.ErrnoError(ERRNO_CODES.EIO);
   3828               }
   3829               if (result === undefined && bytesRead === 0) {
   3830                 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
   3831               }
   3832               if (result === null || result === undefined) break;
   3833               bytesRead++;
   3834               buffer[offset+i] = result;
   3835             }
   3836             if (bytesRead) {
   3837               stream.node.timestamp = Date.now();
   3838             }
   3839             return bytesRead;
   3840           },
   3841           write: function(stream, buffer, offset, length, pos) {
   3842             for (var i = 0; i < length; i++) {
   3843               try {
   3844                 output(buffer[offset+i]);
   3845               } catch (e) {
   3846                 throw new FS.ErrnoError(ERRNO_CODES.EIO);
   3847               }
   3848             }
   3849             if (length) {
   3850               stream.node.timestamp = Date.now();
   3851             }
   3852             return i;
   3853           }
   3854         });
   3855         return FS.mkdev(path, mode, dev);
   3856       },createLink:function (parent, name, target, canRead, canWrite) {
   3857         var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
   3858         return FS.symlink(target, path);
   3859       },forceLoadFile:function (obj) {
   3860         if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
   3861         var success = true;
   3862         if (typeof XMLHttpRequest !== 'undefined') {
   3863           throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
   3864         } else if (Module['read']) {
   3865           // Command-line.
   3866           try {
   3867             // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
   3868             //          read() will try to parse UTF8.
   3869             obj.contents = intArrayFromString(Module['read'](obj.url), true);
   3870           } catch (e) {
   3871             success = false;
   3872           }
   3873         } else {
   3874           throw new Error('Cannot load without read() or XMLHttpRequest.');
   3875         }
   3876         if (!success) ___setErrNo(ERRNO_CODES.EIO);
   3877         return success;
   3878       },createLazyFile:function (parent, name, url, canRead, canWrite) {
   3879         // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
   3880         function LazyUint8Array() {
   3881           this.lengthKnown = false;
   3882           this.chunks = []; // Loaded chunks. Index is the chunk number
   3883         }
   3884         LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
   3885           if (idx > this.length-1 || idx < 0) {
   3886             return undefined;
   3887           }
   3888           var chunkOffset = idx % this.chunkSize;
   3889           var chunkNum = Math.floor(idx / this.chunkSize);
   3890           return this.getter(chunkNum)[chunkOffset];
   3891         }
   3892         LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
   3893           this.getter = getter;
   3894         }
   3895         LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
   3896             // Find length
   3897             var xhr = new XMLHttpRequest();
   3898             xhr.open('HEAD', url, false);
   3899             xhr.send(null);
   3900             if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
   3901             var datalength = Number(xhr.getResponseHeader("Content-length"));
   3902             var header;
   3903             var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
   3904             var chunkSize = 1024*1024; // Chunk size in bytes
   3905 
   3906             if (!hasByteServing) chunkSize = datalength;
   3907 
   3908             // Function to get a range from the remote URL.
   3909             var doXHR = (function(from, to) {
   3910               if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
   3911               if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
   3912 
   3913               // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
   3914               var xhr = new XMLHttpRequest();
   3915               xhr.open('GET', url, false);
   3916               if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
   3917 
   3918               // Some hints to the browser that we want binary data.
   3919               if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
   3920               if (xhr.overrideMimeType) {
   3921                 xhr.overrideMimeType('text/plain; charset=x-user-defined');
   3922               }
   3923 
   3924               xhr.send(null);
   3925               if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
   3926               if (xhr.response !== undefined) {
   3927                 return new Uint8Array(xhr.response || []);
   3928               } else {
   3929                 return intArrayFromString(xhr.responseText || '', true);
   3930               }
   3931             });
   3932             var lazyArray = this;
   3933             lazyArray.setDataGetter(function(chunkNum) {
   3934               var start = chunkNum * chunkSize;
   3935               var end = (chunkNum+1) * chunkSize - 1; // including this byte
   3936               end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
   3937               if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
   3938                 lazyArray.chunks[chunkNum] = doXHR(start, end);
   3939               }
   3940               if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
   3941               return lazyArray.chunks[chunkNum];
   3942             });
   3943 
   3944             this._length = datalength;
   3945             this._chunkSize = chunkSize;
   3946             this.lengthKnown = true;
   3947         }
   3948         if (typeof XMLHttpRequest !== 'undefined') {
   3949           if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
   3950           var lazyArray = new LazyUint8Array();
   3951           Object.defineProperty(lazyArray, "length", {
   3952               get: function() {
   3953                   if(!this.lengthKnown) {
   3954                       this.cacheLength();
   3955                   }
   3956                   return this._length;
   3957               }
   3958           });
   3959           Object.defineProperty(lazyArray, "chunkSize", {
   3960               get: function() {
   3961                   if(!this.lengthKnown) {
   3962                       this.cacheLength();
   3963                   }
   3964                   return this._chunkSize;
   3965               }
   3966           });
   3967 
   3968           var properties = { isDevice: false, contents: lazyArray };
   3969         } else {
   3970           var properties = { isDevice: false, url: url };
   3971         }
   3972 
   3973         var node = FS.createFile(parent, name, properties, canRead, canWrite);
   3974         // This is a total hack, but I want to get this lazy file code out of the
   3975         // core of MEMFS. If we want to keep this lazy file concept I feel it should
   3976         // be its own thin LAZYFS proxying calls to MEMFS.
   3977         if (properties.contents) {
   3978           node.contents = properties.contents;
   3979         } else if (properties.url) {
   3980           node.contents = null;
   3981           node.url = properties.url;
   3982         }
   3983         // override each stream op with one that tries to force load the lazy file first
   3984         var stream_ops = {};
   3985         var keys = Object.keys(node.stream_ops);
   3986         keys.forEach(function(key) {
   3987           var fn = node.stream_ops[key];
   3988           stream_ops[key] = function forceLoadLazyFile() {
   3989             if (!FS.forceLoadFile(node)) {
   3990               throw new FS.ErrnoError(ERRNO_CODES.EIO);
   3991             }
   3992             return fn.apply(null, arguments);
   3993           };
   3994         });
   3995         // use a custom read function
   3996         stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
   3997           if (!FS.forceLoadFile(node)) {
   3998             throw new FS.ErrnoError(ERRNO_CODES.EIO);
   3999           }
   4000           var contents = stream.node.contents;
   4001           if (position >= contents.length)
   4002             return 0;
   4003           var size = Math.min(contents.length - position, length);
   4004           assert(size >= 0);
   4005           if (contents.slice) { // normal array
   4006             for (var i = 0; i < size; i++) {
   4007               buffer[offset + i] = contents[position + i];
   4008             }
   4009           } else {
   4010             for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
   4011               buffer[offset + i] = contents.get(position + i);
   4012             }
   4013           }
   4014           return size;
   4015         };
   4016         node.stream_ops = stream_ops;
   4017         return node;
   4018       },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) {
   4019         Browser.init();
   4020         // TODO we should allow people to just pass in a complete filename instead
   4021         // of parent and name being that we just join them anyways
   4022         var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
   4023         function processData(byteArray) {
   4024           function finish(byteArray) {
   4025             if (!dontCreateFile) {
   4026               FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
   4027             }
   4028             if (onload) onload();
   4029             removeRunDependency('cp ' + fullname);
   4030           }
   4031           var handled = false;
   4032           Module['preloadPlugins'].forEach(function(plugin) {
   4033             if (handled) return;
   4034             if (plugin['canHandle'](fullname)) {
   4035               plugin['handle'](byteArray, fullname, finish, function() {
   4036                 if (onerror) onerror();
   4037                 removeRunDependency('cp ' + fullname);
   4038               });
   4039               handled = true;
   4040             }
   4041           });
   4042           if (!handled) finish(byteArray);
   4043         }
   4044         addRunDependency('cp ' + fullname);
   4045         if (typeof url == 'string') {
   4046           Browser.asyncLoad(url, function(byteArray) {
   4047             processData(byteArray);
   4048           }, onerror);
   4049         } else {
   4050           processData(url);
   4051         }
   4052       },indexedDB:function () {
   4053         return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
   4054       },DB_NAME:function () {
   4055         return 'EM_FS_' + window.location.pathname;
   4056       },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) {
   4057         onload = onload || function(){};
   4058         onerror = onerror || function(){};
   4059         var indexedDB = FS.indexedDB();
   4060         try {
   4061           var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
   4062         } catch (e) {
   4063           return onerror(e);
   4064         }
   4065         openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
   4066           console.log('creating db');
   4067           var db = openRequest.result;
   4068           db.createObjectStore(FS.DB_STORE_NAME);
   4069         };
   4070         openRequest.onsuccess = function openRequest_onsuccess() {
   4071           var db = openRequest.result;
   4072           var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
   4073           var files = transaction.objectStore(FS.DB_STORE_NAME);
   4074           var ok = 0, fail = 0, total = paths.length;
   4075           function finish() {
   4076             if (fail == 0) onload(); else onerror();
   4077           }
   4078           paths.forEach(function(path) {
   4079             var putRequest = files.put(FS.analyzePath(path).object.contents, path);
   4080             putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() };
   4081             putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
   4082           });
   4083           transaction.onerror = onerror;
   4084         };
   4085         openRequest.onerror = onerror;
   4086       },loadFilesFromDB:function (paths, onload, onerror) {
   4087         onload = onload || function(){};
   4088         onerror = onerror || function(){};
   4089         var indexedDB = FS.indexedDB();
   4090         try {
   4091           var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
   4092         } catch (e) {
   4093           return onerror(e);
   4094         }
   4095         openRequest.onupgradeneeded = onerror; // no database to load from
   4096         openRequest.onsuccess = function openRequest_onsuccess() {
   4097           var db = openRequest.result;
   4098           try {
   4099             var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
   4100           } catch(e) {
   4101             onerror(e);
   4102             return;
   4103           }
   4104           var files = transaction.objectStore(FS.DB_STORE_NAME);
   4105           var ok = 0, fail = 0, total = paths.length;
   4106           function finish() {
   4107             if (fail == 0) onload(); else onerror();
   4108           }
   4109           paths.forEach(function(path) {
   4110             var getRequest = files.get(path);
   4111             getRequest.onsuccess = function getRequest_onsuccess() {
   4112               if (FS.analyzePath(path).exists) {
   4113                 FS.unlink(path);
   4114               }
   4115               FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
   4116               ok++;
   4117               if (ok + fail == total) finish();
   4118             };
   4119             getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
   4120           });
   4121           transaction.onerror = onerror;
   4122         };
   4123         openRequest.onerror = onerror;
   4124       }};
   4125 
   4126 
   4127 
   4128 
   4129   function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) {
   4130         return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
   4131       },createSocket:function (family, type, protocol) {
   4132         var streaming = type == 1;
   4133         if (protocol) {
   4134           assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp
   4135         }
   4136 
   4137         // create our internal socket structure
   4138         var sock = {
   4139           family: family,
   4140           type: type,
   4141           protocol: protocol,
   4142           server: null,
   4143           peers: {},
   4144           pending: [],
   4145           recv_queue: [],
   4146           sock_ops: SOCKFS.websocket_sock_ops
   4147         };
   4148 
   4149         // create the filesystem node to store the socket structure
   4150         var name = SOCKFS.nextname();
   4151         var node = FS.createNode(SOCKFS.root, name, 49152, 0);
   4152         node.sock = sock;
   4153 
   4154         // and the wrapping stream that enables library functions such
   4155         // as read and write to indirectly interact with the socket
   4156         var stream = FS.createStream({
   4157           path: name,
   4158           node: node,
   4159           flags: FS.modeStringToFlags('r+'),
   4160           seekable: false,
   4161           stream_ops: SOCKFS.stream_ops
   4162         });
   4163 
   4164         // map the new stream to the socket structure (sockets have a 1:1
   4165         // relationship with a stream)
   4166         sock.stream = stream;
   4167 
   4168         return sock;
   4169       },getSocket:function (fd) {
   4170         var stream = FS.getStream(fd);
   4171         if (!stream || !FS.isSocket(stream.node.mode)) {
   4172           return null;
   4173         }
   4174         return stream.node.sock;
   4175       },stream_ops:{poll:function (stream) {
   4176           var sock = stream.node.sock;
   4177           return sock.sock_ops.poll(sock);
   4178         },ioctl:function (stream, request, varargs) {
   4179           var sock = stream.node.sock;
   4180           return sock.sock_ops.ioctl(sock, request, varargs);
   4181         },read:function (stream, buffer, offset, length, position /* ignored */) {
   4182           var sock = stream.node.sock;
   4183           var msg = sock.sock_ops.recvmsg(sock, length);
   4184           if (!msg) {
   4185             // socket is closed
   4186             return 0;
   4187           }
   4188           buffer.set(msg.buffer, offset);
   4189           return msg.buffer.length;
   4190         },write:function (stream, buffer, offset, length, position /* ignored */) {
   4191           var sock = stream.node.sock;
   4192           return sock.sock_ops.sendmsg(sock, buffer, offset, length);
   4193         },close:function (stream) {
   4194           var sock = stream.node.sock;
   4195           sock.sock_ops.close(sock);
   4196         }},nextname:function () {
   4197         if (!SOCKFS.nextname.current) {
   4198           SOCKFS.nextname.current = 0;
   4199         }
   4200         return 'socket[' + (SOCKFS.nextname.current++) + ']';
   4201       },websocket_sock_ops:{createPeer:function (sock, addr, port) {
   4202           var ws;
   4203 
   4204           if (typeof addr === 'object') {
   4205             ws = addr;
   4206             addr = null;
   4207             port = null;
   4208           }
   4209 
   4210           if (ws) {
   4211             // for sockets that've already connected (e.g. we're the server)
   4212             // we can inspect the _socket property for the address
   4213             if (ws._socket) {
   4214               addr = ws._socket.remoteAddress;
   4215               port = ws._socket.remotePort;
   4216             }
   4217             // if we're just now initializing a connection to the remote,
   4218             // inspect the url property
   4219             else {
   4220               var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);
   4221               if (!result) {
   4222                 throw new Error('WebSocket URL must be in the format ws(s)://address:port');
   4223               }
   4224               addr = result[1];
   4225               port = parseInt(result[2], 10);
   4226             }
   4227           } else {
   4228             // create the actual websocket object and connect
   4229             try {
   4230               // runtimeConfig gets set to true if WebSocket runtime configuration is available.
   4231               var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket']));
   4232 
   4233               // The default value is 'ws://' the replace is needed because the compiler replaces "//" comments with '#'
   4234               // comments without checking context, so we'd end up with ws:#, the replace swaps the "#" for "//" again.
   4235               var url = 'ws:#'.replace('#', '//');
   4236 
   4237               if (runtimeConfig) {
   4238                 if ('string' === typeof Module['websocket']['url']) {
   4239                   url = Module['websocket']['url']; // Fetch runtime WebSocket URL config.
   4240                 }
   4241               }
   4242 
   4243               if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it.
   4244                 url = url + addr + ':' + port;
   4245               }
   4246 
   4247               // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set.
   4248               var subProtocols = 'binary'; // The default value is 'binary'
   4249 
   4250               if (runtimeConfig) {
   4251                 if ('string' === typeof Module['websocket']['subprotocol']) {
   4252                   subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config.
   4253                 }
   4254               }
   4255 
   4256               // The regex trims the string (removes spaces at the beginning and end, then splits the string by
   4257               // <any space>,<any space> into an Array. Whitespace removal is important for Websockify and ws.
   4258               subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */);
   4259 
   4260               // The node ws library API for specifying optional subprotocol is slightly different than the browser's.
   4261               var opts = ENVIRONMENT_IS_NODE ? {'protocol': subProtocols.toString()} : subProtocols;
   4262 
   4263               // If node we use the ws library.
   4264               var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket'];
   4265               ws = new WebSocket(url, opts);
   4266               ws.binaryType = 'arraybuffer';
   4267             } catch (e) {
   4268               throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH);
   4269             }
   4270           }
   4271 
   4272 
   4273           var peer = {
   4274             addr: addr,
   4275             port: port,
   4276             socket: ws,
   4277             dgram_send_queue: []
   4278           };
   4279 
   4280           SOCKFS.websocket_sock_ops.addPeer(sock, peer);
   4281           SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer);
   4282 
   4283           // if this is a bound dgram socket, send the port number first to allow
   4284           // us to override the ephemeral port reported to us by remotePort on the
   4285           // remote end.
   4286           if (sock.type === 2 && typeof sock.sport !== 'undefined') {
   4287             peer.dgram_send_queue.push(new Uint8Array([
   4288                 255, 255, 255, 255,
   4289                 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0),
   4290                 ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff)
   4291             ]));
   4292           }
   4293 
   4294           return peer;
   4295         },getPeer:function (sock, addr, port) {
   4296           return sock.peers[addr + ':' + port];
   4297         },addPeer:function (sock, peer) {
   4298           sock.peers[peer.addr + ':' + peer.port] = peer;
   4299         },removePeer:function (sock, peer) {
   4300           delete sock.peers[peer.addr + ':' + peer.port];
   4301         },handlePeerEvents:function (sock, peer) {
   4302           var first = true;
   4303 
   4304           var handleOpen = function () {
   4305             try {
   4306               var queued = peer.dgram_send_queue.shift();
   4307               while (queued) {
   4308                 peer.socket.send(queued);
   4309                 queued = peer.dgram_send_queue.shift();
   4310               }
   4311             } catch (e) {
   4312               // not much we can do here in the way of proper error handling as we've already
   4313               // lied and said this data was sent. shut it down.
   4314               peer.socket.close();
   4315             }
   4316           };
   4317 
   4318           function handleMessage(data) {
   4319             assert(typeof data !== 'string' && data.byteLength !== undefined);  // must receive an ArrayBuffer
   4320             data = new Uint8Array(data);  // make a typed array view on the array buffer
   4321 
   4322 
   4323             // if this is the port message, override the peer's port with it
   4324             var wasfirst = first;
   4325             first = false;
   4326             if (wasfirst &&
   4327                 data.length === 10 &&
   4328                 data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 &&
   4329                 data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) {
   4330               // update the peer's port and it's key in the peer map
   4331               var newport = ((data[8] << 8) | data[9]);
   4332               SOCKFS.websocket_sock_ops.removePeer(sock, peer);
   4333               peer.port = newport;
   4334               SOCKFS.websocket_sock_ops.addPeer(sock, peer);
   4335               return;
   4336             }
   4337 
   4338             sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data });
   4339           };
   4340 
   4341           if (ENVIRONMENT_IS_NODE) {
   4342             peer.socket.on('open', handleOpen);
   4343             peer.socket.on('message', function(data, flags) {
   4344               if (!flags.binary) {
   4345                 return;
   4346               }
   4347               handleMessage((new Uint8Array(data)).buffer);  // copy from node Buffer -> ArrayBuffer
   4348             });
   4349             peer.socket.on('error', function() {
   4350               // don't throw
   4351             });
   4352           } else {
   4353             peer.socket.onopen = handleOpen;
   4354             peer.socket.onmessage = function peer_socket_onmessage(event) {
   4355               handleMessage(event.data);
   4356             };
   4357           }
   4358         },poll:function (sock) {
   4359           if (sock.type === 1 && sock.server) {
   4360             // listen sockets should only say they're available for reading
   4361             // if there are pending clients.
   4362             return sock.pending.length ? (64 | 1) : 0;
   4363           }
   4364 
   4365           var mask = 0;
   4366           var dest = sock.type === 1 ?  // we only care about the socket state for connection-based sockets
   4367             SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) :
   4368             null;
   4369 
   4370           if (sock.recv_queue.length ||
   4371               !dest ||  // connection-less sockets are always ready to read
   4372               (dest && dest.socket.readyState === dest.socket.CLOSING) ||
   4373               (dest && dest.socket.readyState === dest.socket.CLOSED)) {  // let recv return 0 once closed
   4374             mask |= (64 | 1);
   4375           }
   4376 
   4377           if (!dest ||  // connection-less sockets are always ready to write
   4378               (dest && dest.socket.readyState === dest.socket.OPEN)) {
   4379             mask |= 4;
   4380           }
   4381 
   4382           if ((dest && dest.socket.readyState === dest.socket.CLOSING) ||
   4383               (dest && dest.socket.readyState === dest.socket.CLOSED)) {
   4384             mask |= 16;
   4385           }
   4386 
   4387           return mask;
   4388         },ioctl:function (sock, request, arg) {
   4389           switch (request) {
   4390             case 21531:
   4391               var bytes = 0;
   4392               if (sock.recv_queue.length) {
   4393                 bytes = sock.recv_queue[0].data.length;
   4394               }
   4395               HEAP32[((arg)>>2)]=bytes;
   4396               return 0;
   4397             default:
   4398               return ERRNO_CODES.EINVAL;
   4399           }
   4400         },close:function (sock) {
   4401           // if we've spawned a listen server, close it
   4402           if (sock.server) {
   4403             try {
   4404               sock.server.close();
   4405             } catch (e) {
   4406             }
   4407             sock.server = null;
   4408           }
   4409           // close any peer connections
   4410           var peers = Object.keys(sock.peers);
   4411           for (var i = 0; i < peers.length; i++) {
   4412             var peer = sock.peers[peers[i]];
   4413             try {
   4414               peer.socket.close();
   4415             } catch (e) {
   4416             }
   4417             SOCKFS.websocket_sock_ops.removePeer(sock, peer);
   4418           }
   4419           return 0;
   4420         },bind:function (sock, addr, port) {
   4421           if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') {
   4422             throw new FS.ErrnoError(ERRNO_CODES.EINVAL);  // already bound
   4423           }
   4424           sock.saddr = addr;
   4425           sock.sport = port || _mkport();
   4426           // in order to emulate dgram sockets, we need to launch a listen server when
   4427           // binding on a connection-less socket
   4428           // note: this is only required on the server side
   4429           if (sock.type === 2) {
   4430             // close the existing server if it exists
   4431             if (sock.server) {
   4432               sock.server.close();
   4433               sock.server = null;
   4434             }
   4435             // swallow error operation not supported error that occurs when binding in the
   4436             // browser where this isn't supported
   4437             try {
   4438               sock.sock_ops.listen(sock, 0);
   4439             } catch (e) {
   4440               if (!(e instanceof FS.ErrnoError)) throw e;
   4441               if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e;
   4442             }
   4443           }
   4444         },connect:function (sock, addr, port) {
   4445           if (sock.server) {
   4446             throw new FS.ErrnoError(ERRNO_CODS.EOPNOTSUPP);
   4447           }
   4448 
   4449           // TODO autobind
   4450           // if (!sock.addr && sock.type == 2) {
   4451           // }
   4452 
   4453           // early out if we're already connected / in the middle of connecting
   4454           if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') {
   4455             var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
   4456             if (dest) {
   4457               if (dest.socket.readyState === dest.socket.CONNECTING) {
   4458                 throw new FS.ErrnoError(ERRNO_CODES.EALREADY);
   4459               } else {
   4460                 throw new FS.ErrnoError(ERRNO_CODES.EISCONN);
   4461               }
   4462             }
   4463           }
   4464 
   4465           // add the socket to our peer list and set our
   4466           // destination address / port to match
   4467           var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
   4468           sock.daddr = peer.addr;
   4469           sock.dport = peer.port;
   4470 
   4471           // always "fail" in non-blocking mode
   4472           throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS);
   4473         },listen:function (sock, backlog) {
   4474           if (!ENVIRONMENT_IS_NODE) {
   4475             throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
   4476           }
   4477           if (sock.server) {
   4478              throw new FS.ErrnoError(ERRNO_CODES.EINVAL);  // already listening
   4479           }
   4480           var WebSocketServer = require('ws').Server;
   4481           var host = sock.saddr;
   4482           sock.server = new WebSocketServer({
   4483             host: host,
   4484             port: sock.sport
   4485             // TODO support backlog
   4486           });
   4487 
   4488           sock.server.on('connection', function(ws) {
   4489             if (sock.type === 1) {
   4490               var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol);
   4491 
   4492               // create a peer on the new socket
   4493               var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws);
   4494               newsock.daddr = peer.addr;
   4495               newsock.dport = peer.port;
   4496 
   4497               // push to queue for accept to pick up
   4498               sock.pending.push(newsock);
   4499             } else {
   4500               // create a peer on the listen socket so calling sendto
   4501               // with the listen socket and an address will resolve
   4502               // to the correct client
   4503               SOCKFS.websocket_sock_ops.createPeer(sock, ws);
   4504             }
   4505           });
   4506           sock.server.on('closed', function() {
   4507             sock.server = null;
   4508           });
   4509           sock.server.on('error', function() {
   4510             // don't throw
   4511           });
   4512         },accept:function (listensock) {
   4513           if (!listensock.server) {
   4514             throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   4515           }
   4516           var newsock = listensock.pending.shift();
   4517           newsock.stream.flags = listensock.stream.flags;
   4518           return newsock;
   4519         },getname:function (sock, peer) {
   4520           var addr, port;
   4521           if (peer) {
   4522             if (sock.daddr === undefined || sock.dport === undefined) {
   4523               throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
   4524             }
   4525             addr = sock.daddr;
   4526             port = sock.dport;
   4527           } else {
   4528             // TODO saddr and sport will be set for bind()'d UDP sockets, but what
   4529             // should we be returning for TCP sockets that've been connect()'d?
   4530             addr = sock.saddr || 0;
   4531             port = sock.sport || 0;
   4532           }
   4533           return { addr: addr, port: port };
   4534         },sendmsg:function (sock, buffer, offset, length, addr, port) {
   4535           if (sock.type === 2) {
   4536             // connection-less sockets will honor the message address,
   4537             // and otherwise fall back to the bound destination address
   4538             if (addr === undefined || port === undefined) {
   4539               addr = sock.daddr;
   4540               port = sock.dport;
   4541             }
   4542             // if there was no address to fall back to, error out
   4543             if (addr === undefined || port === undefined) {
   4544               throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ);
   4545             }
   4546           } else {
   4547             // connection-based sockets will only use the bound
   4548             addr = sock.daddr;
   4549             port = sock.dport;
   4550           }
   4551 
   4552           // find the peer for the destination address
   4553           var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port);
   4554 
   4555           // early out if not connected with a connection-based socket
   4556           if (sock.type === 1) {
   4557             if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
   4558               throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
   4559             } else if (dest.socket.readyState === dest.socket.CONNECTING) {
   4560               throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
   4561             }
   4562           }
   4563 
   4564           // create a copy of the incoming data to send, as the WebSocket API
   4565           // doesn't work entirely with an ArrayBufferView, it'll just send
   4566           // the entire underlying buffer
   4567           var data;
   4568           if (buffer instanceof Array || buffer instanceof ArrayBuffer) {
   4569             data = buffer.slice(offset, offset + length);
   4570           } else {  // ArrayBufferView
   4571             data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length);
   4572           }
   4573 
   4574           // if we're emulating a connection-less dgram socket and don't have
   4575           // a cached connection, queue the buffer to send upon connect and
   4576           // lie, saying the data was sent now.
   4577           if (sock.type === 2) {
   4578             if (!dest || dest.socket.readyState !== dest.socket.OPEN) {
   4579               // if we're not connected, open a new connection
   4580               if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
   4581                 dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
   4582               }
   4583               dest.dgram_send_queue.push(data);
   4584               return length;
   4585             }
   4586           }
   4587 
   4588           try {
   4589             // send the actual data
   4590             dest.socket.send(data);
   4591             return length;
   4592           } catch (e) {
   4593             throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
   4594           }
   4595         },recvmsg:function (sock, length) {
   4596           // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html
   4597           if (sock.type === 1 && sock.server) {
   4598             // tcp servers should not be recv()'ing on the listen socket
   4599             throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
   4600           }
   4601 
   4602           var queued = sock.recv_queue.shift();
   4603           if (!queued) {
   4604             if (sock.type === 1) {
   4605               var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
   4606 
   4607               if (!dest) {
   4608                 // if we have a destination address but are not connected, error out
   4609                 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
   4610               }
   4611               else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
   4612                 // return null if the socket has closed
   4613                 return null;
   4614               }
   4615               else {
   4616                 // else, our socket is in a valid state but truly has nothing available
   4617                 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
   4618               }
   4619             } else {
   4620               throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
   4621             }
   4622           }
   4623 
   4624           // queued.data will be an ArrayBuffer if it's unadulterated, but if it's
   4625           // requeued TCP data it'll be an ArrayBufferView
   4626           var queuedLength = queued.data.byteLength || queued.data.length;
   4627           var queuedOffset = queued.data.byteOffset || 0;
   4628           var queuedBuffer = queued.data.buffer || queued.data;
   4629           var bytesRead = Math.min(length, queuedLength);
   4630           var res = {
   4631             buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead),
   4632             addr: queued.addr,
   4633             port: queued.port
   4634           };
   4635 
   4636 
   4637           // push back any unread data for TCP connections
   4638           if (sock.type === 1 && bytesRead < queuedLength) {
   4639             var bytesRemaining = queuedLength - bytesRead;
   4640             queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining);
   4641             sock.recv_queue.unshift(queued);
   4642           }
   4643 
   4644           return res;
   4645         }}};function _send(fd, buf, len, flags) {
   4646       var sock = SOCKFS.getSocket(fd);
   4647       if (!sock) {
   4648         ___setErrNo(ERRNO_CODES.EBADF);
   4649         return -1;
   4650       }
   4651       // TODO honor flags
   4652       return _write(fd, buf, len);
   4653     }
   4654 
   4655   function _pwrite(fildes, buf, nbyte, offset) {
   4656       // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
   4657       // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
   4658       var stream = FS.getStream(fildes);
   4659       if (!stream) {
   4660         ___setErrNo(ERRNO_CODES.EBADF);
   4661         return -1;
   4662       }
   4663       try {
   4664         var slab = HEAP8;
   4665         return FS.write(stream, slab, buf, nbyte, offset);
   4666       } catch (e) {
   4667         FS.handleFSError(e);
   4668         return -1;
   4669       }
   4670     }function _write(fildes, buf, nbyte) {
   4671       // ssize_t write(int fildes, const void *buf, size_t nbyte);
   4672       // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
   4673       var stream = FS.getStream(fildes);
   4674       if (!stream) {
   4675         ___setErrNo(ERRNO_CODES.EBADF);
   4676         return -1;
   4677       }
   4678 
   4679 
   4680       try {
   4681         var slab = HEAP8;
   4682         return FS.write(stream, slab, buf, nbyte);
   4683       } catch (e) {
   4684         FS.handleFSError(e);
   4685         return -1;
   4686       }
   4687     }
   4688 
   4689   function _fileno(stream) {
   4690       // int fileno(FILE *stream);
   4691       // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html
   4692       stream = FS.getStreamFromPtr(stream);
   4693       if (!stream) return -1;
   4694       return stream.fd;
   4695     }function _fwrite(ptr, size, nitems, stream) {
   4696       // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
   4697       // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
   4698       var bytesToWrite = nitems * size;
   4699       if (bytesToWrite == 0) return 0;
   4700       var fd = _fileno(stream);
   4701       var bytesWritten = _write(fd, ptr, bytesToWrite);
   4702       if (bytesWritten == -1) {
   4703         var streamObj = FS.getStreamFromPtr(stream);
   4704         if (streamObj) streamObj.error = true;
   4705         return 0;
   4706       } else {
   4707         return Math.floor(bytesWritten / size);
   4708       }
   4709     }
   4710 
   4711 
   4712 
   4713   Module["_strlen"] = _strlen;
   4714 
   4715   function __reallyNegative(x) {
   4716       return x < 0 || (x === 0 && (1/x) === -Infinity);
   4717     }function __formatString(format, varargs) {
   4718       var textIndex = format;
   4719       var argIndex = 0;
   4720       function getNextArg(type) {
   4721         // NOTE: Explicitly ignoring type safety. Otherwise this fails:
   4722         //       int x = 4; printf("%c\n", (char)x);
   4723         var ret;
   4724         if (type === 'double') {
   4725           ret = HEAPF64[(((varargs)+(argIndex))>>3)];
   4726         } else if (type == 'i64') {
   4727           ret = [HEAP32[(((varargs)+(argIndex))>>2)],
   4728                  HEAP32[(((varargs)+(argIndex+4))>>2)]];
   4729 
   4730         } else {
   4731           type = 'i32'; // varargs are always i32, i64, or double
   4732           ret = HEAP32[(((varargs)+(argIndex))>>2)];
   4733         }
   4734         argIndex += Runtime.getNativeFieldSize(type);
   4735         return ret;
   4736       }
   4737 
   4738       var ret = [];
   4739       var curr, next, currArg;
   4740       while(1) {
   4741         var startTextIndex = textIndex;
   4742         curr = HEAP8[(textIndex)];
   4743         if (curr === 0) break;
   4744         next = HEAP8[((textIndex+1)|0)];
   4745         if (curr == 37) {
   4746           // Handle flags.
   4747           var flagAlwaysSigned = false;
   4748           var flagLeftAlign = false;
   4749           var flagAlternative = false;
   4750           var flagZeroPad = false;
   4751           var flagPadSign = false;
   4752           flagsLoop: while (1) {
   4753             switch (next) {
   4754               case 43:
   4755                 flagAlwaysSigned = true;
   4756                 break;
   4757               case 45:
   4758                 flagLeftAlign = true;
   4759                 break;
   4760               case 35:
   4761                 flagAlternative = true;
   4762                 break;
   4763               case 48:
   4764                 if (flagZeroPad) {
   4765                   break flagsLoop;
   4766                 } else {
   4767                   flagZeroPad = true;
   4768                   break;
   4769                 }
   4770               case 32:
   4771                 flagPadSign = true;
   4772                 break;
   4773               default:
   4774                 break flagsLoop;
   4775             }
   4776             textIndex++;
   4777             next = HEAP8[((textIndex+1)|0)];
   4778           }
   4779 
   4780           // Handle width.
   4781           var width = 0;
   4782           if (next == 42) {
   4783             width = getNextArg('i32');
   4784             textIndex++;
   4785             next = HEAP8[((textIndex+1)|0)];
   4786           } else {
   4787             while (next >= 48 && next <= 57) {
   4788               width = width * 10 + (next - 48);
   4789               textIndex++;
   4790               next = HEAP8[((textIndex+1)|0)];
   4791             }
   4792           }
   4793 
   4794           // Handle precision.
   4795           var precisionSet = false, precision = -1;
   4796           if (next == 46) {
   4797             precision = 0;
   4798             precisionSet = true;
   4799             textIndex++;
   4800             next = HEAP8[((textIndex+1)|0)];
   4801             if (next == 42) {
   4802               precision = getNextArg('i32');
   4803               textIndex++;
   4804             } else {
   4805               while(1) {
   4806                 var precisionChr = HEAP8[((textIndex+1)|0)];
   4807                 if (precisionChr < 48 ||
   4808                     precisionChr > 57) break;
   4809                 precision = precision * 10 + (precisionChr - 48);
   4810                 textIndex++;
   4811               }
   4812             }
   4813             next = HEAP8[((textIndex+1)|0)];
   4814           }
   4815           if (precision < 0) {
   4816             precision = 6; // Standard default.
   4817             precisionSet = false;
   4818           }
   4819 
   4820           // Handle integer sizes. WARNING: These assume a 32-bit architecture!
   4821           var argSize;
   4822           switch (String.fromCharCode(next)) {
   4823             case 'h':
   4824               var nextNext = HEAP8[((textIndex+2)|0)];
   4825               if (nextNext == 104) {
   4826                 textIndex++;
   4827                 argSize = 1; // char (actually i32 in varargs)
   4828               } else {
   4829                 argSize = 2; // short (actually i32 in varargs)
   4830               }
   4831               break;
   4832             case 'l':
   4833               var nextNext = HEAP8[((textIndex+2)|0)];
   4834               if (nextNext == 108) {
   4835                 textIndex++;
   4836                 argSize = 8; // long long
   4837               } else {
   4838                 argSize = 4; // long
   4839               }
   4840               break;
   4841             case 'L': // long long
   4842             case 'q': // int64_t
   4843             case 'j': // intmax_t
   4844               argSize = 8;
   4845               break;
   4846             case 'z': // size_t
   4847             case 't': // ptrdiff_t
   4848             case 'I': // signed ptrdiff_t or unsigned size_t
   4849               argSize = 4;
   4850               break;
   4851             default:
   4852               argSize = null;
   4853           }
   4854           if (argSize) textIndex++;
   4855           next = HEAP8[((textIndex+1)|0)];
   4856 
   4857           // Handle type specifier.
   4858           switch (String.fromCharCode(next)) {
   4859             case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': {
   4860               // Integer.
   4861               var signed = next == 100 || next == 105;
   4862               argSize = argSize || 4;
   4863               var currArg = getNextArg('i' + (argSize * 8));
   4864               var argText;
   4865               // Flatten i64-1 [low, high] into a (slightly rounded) double
   4866               if (argSize == 8) {
   4867                 currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117);
   4868               }
   4869               // Truncate to requested size.
   4870               if (argSize <= 4) {
   4871                 var limit = Math.pow(256, argSize) - 1;
   4872                 currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
   4873               }
   4874               // Format the number.
   4875               var currAbsArg = Math.abs(currArg);
   4876               var prefix = '';
   4877               if (next == 100 || next == 105) {
   4878                 argText = reSign(currArg, 8 * argSize, 1).toString(10);
   4879               } else if (next == 117) {
   4880                 argText = unSign(currArg, 8 * argSize, 1).toString(10);
   4881                 currArg = Math.abs(currArg);
   4882               } else if (next == 111) {
   4883                 argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
   4884               } else if (next == 120 || next == 88) {
   4885                 prefix = (flagAlternative && currArg != 0) ? '0x' : '';
   4886                 if (currArg < 0) {
   4887                   // Represent negative numbers in hex as 2's complement.
   4888                   currArg = -currArg;
   4889                   argText = (currAbsArg - 1).toString(16);
   4890                   var buffer = [];
   4891                   for (var i = 0; i < argText.length; i++) {
   4892                     buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
   4893                   }
   4894                   argText = buffer.join('');
   4895                   while (argText.length < argSize * 2) argText = 'f' + argText;
   4896                 } else {
   4897                   argText = currAbsArg.toString(16);
   4898                 }
   4899                 if (next == 88) {
   4900                   prefix = prefix.toUpperCase();
   4901                   argText = argText.toUpperCase();
   4902                 }
   4903               } else if (next == 112) {
   4904                 if (currAbsArg === 0) {
   4905                   argText = '(nil)';
   4906                 } else {
   4907                   prefix = '0x';
   4908                   argText = currAbsArg.toString(16);
   4909                 }
   4910               }
   4911               if (precisionSet) {
   4912                 while (argText.length < precision) {
   4913                   argText = '0' + argText;
   4914                 }
   4915               }
   4916 
   4917               // Add sign if needed
   4918               if (currArg >= 0) {
   4919                 if (flagAlwaysSigned) {
   4920                   prefix = '+' + prefix;
   4921                 } else if (flagPadSign) {
   4922                   prefix = ' ' + prefix;
   4923                 }
   4924               }
   4925 
   4926               // Move sign to prefix so we zero-pad after the sign
   4927               if (argText.charAt(0) == '-') {
   4928                 prefix = '-' + prefix;
   4929                 argText = argText.substr(1);
   4930               }
   4931 
   4932               // Add padding.
   4933               while (prefix.length + argText.length < width) {
   4934                 if (flagLeftAlign) {
   4935                   argText += ' ';
   4936                 } else {
   4937                   if (flagZeroPad) {
   4938                     argText = '0' + argText;
   4939                   } else {
   4940                     prefix = ' ' + prefix;
   4941                   }
   4942                 }
   4943               }
   4944 
   4945               // Insert the result into the buffer.
   4946               argText = prefix + argText;
   4947               argText.split('').forEach(function(chr) {
   4948                 ret.push(chr.charCodeAt(0));
   4949               });
   4950               break;
   4951             }
   4952             case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
   4953               // Float.
   4954               var currArg = getNextArg('double');
   4955               var argText;
   4956               if (isNaN(currArg)) {
   4957                 argText = 'nan';
   4958                 flagZeroPad = false;
   4959               } else if (!isFinite(currArg)) {
   4960                 argText = (currArg < 0 ? '-' : '') + 'inf';
   4961                 flagZeroPad = false;
   4962               } else {
   4963                 var isGeneral = false;
   4964                 var effectivePrecision = Math.min(precision, 20);
   4965 
   4966                 // Convert g/G to f/F or e/E, as per:
   4967                 // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
   4968                 if (next == 103 || next == 71) {
   4969                   isGeneral = true;
   4970                   precision = precision || 1;
   4971                   var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10);
   4972                   if (precision > exponent && exponent >= -4) {
   4973                     next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
   4974                     precision -= exponent + 1;
   4975                   } else {
   4976                     next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
   4977                     precision--;
   4978                   }
   4979                   effectivePrecision = Math.min(precision, 20);
   4980                 }
   4981 
   4982                 if (next == 101 || next == 69) {
   4983                   argText = currArg.toExponential(effectivePrecision);
   4984                   // Make sure the exponent has at least 2 digits.
   4985                   if (/[eE][-+]\d$/.test(argText)) {
   4986                     argText = argText.slice(0, -1) + '0' + argText.slice(-1);
   4987                   }
   4988                 } else if (next == 102 || next == 70) {
   4989                   argText = currArg.toFixed(effectivePrecision);
   4990                   if (currArg === 0 && __reallyNegative(currArg)) {
   4991                     argText = '-' + argText;
   4992                   }
   4993                 }
   4994 
   4995                 var parts = argText.split('e');
   4996                 if (isGeneral && !flagAlternative) {
   4997                   // Discard trailing zeros and periods.
   4998                   while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
   4999                          (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) {
   5000                     parts[0] = parts[0].slice(0, -1);
   5001                   }
   5002                 } else {
   5003                   // Make sure we have a period in alternative mode.
   5004                   if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
   5005                   // Zero pad until required precision.
   5006                   while (precision > effectivePrecision++) parts[0] += '0';
   5007                 }
   5008                 argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
   5009 
   5010                 // Capitalize 'E' if needed.
   5011                 if (next == 69) argText = argText.toUpperCase();
   5012 
   5013                 // Add sign.
   5014                 if (currArg >= 0) {
   5015                   if (flagAlwaysSigned) {
   5016                     argText = '+' + argText;
   5017                   } else if (flagPadSign) {
   5018                     argText = ' ' + argText;
   5019                   }
   5020                 }
   5021               }
   5022 
   5023               // Add padding.
   5024               while (argText.length < width) {
   5025                 if (flagLeftAlign) {
   5026                   argText += ' ';
   5027                 } else {
   5028                   if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
   5029                     argText = argText[0] + '0' + argText.slice(1);
   5030                   } else {
   5031                     argText = (flagZeroPad ? '0' : ' ') + argText;
   5032                   }
   5033                 }
   5034               }
   5035 
   5036               // Adjust case.
   5037               if (next < 97) argText = argText.toUpperCase();
   5038 
   5039               // Insert the result into the buffer.
   5040               argText.split('').forEach(function(chr) {
   5041                 ret.push(chr.charCodeAt(0));
   5042               });
   5043               break;
   5044             }
   5045             case 's': {
   5046               // String.
   5047               var arg = getNextArg('i8*');
   5048               var argLength = arg ? _strlen(arg) : '(null)'.length;
   5049               if (precisionSet) argLength = Math.min(argLength, precision);
   5050               if (!flagLeftAlign) {
   5051                 while (argLength < width--) {
   5052                   ret.push(32);
   5053                 }
   5054               }
   5055               if (arg) {
   5056                 for (var i = 0; i < argLength; i++) {
   5057                   ret.push(HEAPU8[((arg++)|0)]);
   5058                 }
   5059               } else {
   5060                 ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true));
   5061               }
   5062               if (flagLeftAlign) {
   5063                 while (argLength < width--) {
   5064                   ret.push(32);
   5065                 }
   5066               }
   5067               break;
   5068             }
   5069             case 'c': {
   5070               // Character.
   5071               if (flagLeftAlign) ret.push(getNextArg('i8'));
   5072               while (--width > 0) {
   5073                 ret.push(32);
   5074               }
   5075               if (!flagLeftAlign) ret.push(getNextArg('i8'));
   5076               break;
   5077             }
   5078             case 'n': {
   5079               // Write the length written so far to the next parameter.
   5080               var ptr = getNextArg('i32*');
   5081               HEAP32[((ptr)>>2)]=ret.length;
   5082               break;
   5083             }
   5084             case '%': {
   5085               // Literal percent sign.
   5086               ret.push(curr);
   5087               break;
   5088             }
   5089             default: {
   5090               // Unknown specifiers remain untouched.
   5091               for (var i = startTextIndex; i < textIndex + 2; i++) {
   5092                 ret.push(HEAP8[(i)]);
   5093               }
   5094             }
   5095           }
   5096           textIndex += 2;
   5097           // TODO: Support a/A (hex float) and m (last error) specifiers.
   5098           // TODO: Support %1${specifier} for arg selection.
   5099         } else {
   5100           ret.push(curr);
   5101           textIndex += 1;
   5102         }
   5103       }
   5104       return ret;
   5105     }function _fprintf(stream, format, varargs) {
   5106       // int fprintf(FILE *restrict stream, const char *restrict format, ...);
   5107       // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
   5108       var result = __formatString(format, varargs);
   5109       var stack = Runtime.stackSave();
   5110       var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream);
   5111       Runtime.stackRestore(stack);
   5112       return ret;
   5113     }function _printf(format, varargs) {
   5114       // int printf(const char *restrict format, ...);
   5115       // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
   5116       var stdout = HEAP32[((_stdout)>>2)];
   5117       return _fprintf(stdout, format, varargs);
   5118     }
   5119 
   5120   var _sinf=Math_sin;
   5121 
   5122 
   5123   var _sqrtf=Math_sqrt;
   5124 
   5125   var _floorf=Math_floor;
   5126 
   5127 
   5128   function _fputs(s, stream) {
   5129       // int fputs(const char *restrict s, FILE *restrict stream);
   5130       // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
   5131       var fd = _fileno(stream);
   5132       return _write(fd, s, _strlen(s));
   5133     }
   5134 
   5135   function _fputc(c, stream) {
   5136       // int fputc(int c, FILE *stream);
   5137       // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
   5138       var chr = unSign(c & 0xFF);
   5139       HEAP8[((_fputc.ret)|0)]=chr;
   5140       var fd = _fileno(stream);
   5141       var ret = _write(fd, _fputc.ret, 1);
   5142       if (ret == -1) {
   5143         var streamObj = FS.getStreamFromPtr(stream);
   5144         if (streamObj) streamObj.error = true;
   5145         return -1;
   5146       } else {
   5147         return chr;
   5148       }
   5149     }function _puts(s) {
   5150       // int puts(const char *s);
   5151       // http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html
   5152       // NOTE: puts() always writes an extra newline.
   5153       var stdout = HEAP32[((_stdout)>>2)];
   5154       var ret = _fputs(s, stdout);
   5155       if (ret < 0) {
   5156         return ret;
   5157       } else {
   5158         var newlineRet = _fputc(10, stdout);
   5159         return (newlineRet < 0) ? -1 : ret + 1;
   5160       }
   5161     }
   5162 
   5163   function _clock() {
   5164       if (_clock.start === undefined) _clock.start = Date.now();
   5165       return Math.floor((Date.now() - _clock.start) * (1000000/1000));
   5166     }
   5167 
   5168 
   5169   var ___cxa_caught_exceptions=[];function ___cxa_begin_catch(ptr) {
   5170       __ZSt18uncaught_exceptionv.uncaught_exception--;
   5171       ___cxa_caught_exceptions.push(___cxa_last_thrown_exception);
   5172       return ptr;
   5173     }
   5174 
   5175   function ___errno_location() {
   5176       return ___errno_state;
   5177     }
   5178 
   5179 
   5180   function _emscripten_memcpy_big(dest, src, num) {
   5181       HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
   5182       return dest;
   5183     }
   5184   Module["_memcpy"] = _memcpy;
   5185 
   5186   function __ZNSt9exceptionD2Ev() {}
   5187 
   5188   var Browser={mainLoop:{scheduler:null,method:"",shouldPause:false,paused:false,queue:[],pause:function () {
   5189           Browser.mainLoop.shouldPause = true;
   5190         },resume:function () {
   5191           if (Browser.mainLoop.paused) {
   5192             Browser.mainLoop.paused = false;
   5193             Browser.mainLoop.scheduler();
   5194           }
   5195           Browser.mainLoop.shouldPause = false;
   5196         },updateStatus:function () {
   5197           if (Module['setStatus']) {
   5198             var message = Module['statusMessage'] || 'Please wait...';
   5199             var remaining = Browser.mainLoop.remainingBlockers;
   5200             var expected = Browser.mainLoop.expectedBlockers;
   5201             if (remaining) {
   5202               if (remaining < expected) {
   5203                 Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
   5204               } else {
   5205                 Module['setStatus'](message);
   5206               }
   5207             } else {
   5208               Module['setStatus']('');
   5209             }
   5210           }
   5211         }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
   5212         if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers
   5213 
   5214         if (Browser.initted || ENVIRONMENT_IS_WORKER) return;
   5215         Browser.initted = true;
   5216 
   5217         try {
   5218           new Blob();
   5219           Browser.hasBlobConstructor = true;
   5220         } catch(e) {
   5221           Browser.hasBlobConstructor = false;
   5222           console.log("warning: no blob constructor, cannot create blobs with mimetypes");
   5223         }
   5224         Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
   5225         Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined;
   5226         if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
   5227           console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
   5228           Module.noImageDecoding = true;
   5229         }
   5230 
   5231         // Support for plugins that can process preloaded files. You can add more of these to
   5232         // your app by creating and appending to Module.preloadPlugins.
   5233         //
   5234         // Each plugin is asked if it can handle a file based on the file's name. If it can,
   5235         // it is given the file's raw data. When it is done, it calls a callback with the file's
   5236         // (possibly modified) data. For example, a plugin might decompress a file, or it
   5237         // might create some side data structure for use later (like an Image element, etc.).
   5238 
   5239         var imagePlugin = {};
   5240         imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
   5241           return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
   5242         };
   5243         imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {
   5244           var b = null;
   5245           if (Browser.hasBlobConstructor) {
   5246             try {
   5247               b = new Blob([byteArray], { type: Browser.getMimetype(name) });
   5248               if (b.size !== byteArray.length) { // Safari bug #118630
   5249                 // Safari's Blob can only take an ArrayBuffer
   5250                 b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });
   5251               }
   5252             } catch(e) {
   5253               Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
   5254             }
   5255           }
   5256           if (!b) {
   5257             var bb = new Browser.BlobBuilder();
   5258             bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
   5259             b = bb.getBlob();
   5260           }
   5261           var url = Browser.URLObject.createObjectURL(b);
   5262           var img = new Image();
   5263           img.onload = function img_onload() {
   5264             assert(img.complete, 'Image ' + name + ' could not be decoded');
   5265             var canvas = document.createElement('canvas');
   5266             canvas.width = img.width;
   5267             canvas.height = img.height;
   5268             var ctx = canvas.getContext('2d');
   5269             ctx.drawImage(img, 0, 0);
   5270             Module["preloadedImages"][name] = canvas;
   5271             Browser.URLObject.revokeObjectURL(url);
   5272             if (onload) onload(byteArray);
   5273           };
   5274           img.onerror = function img_onerror(event) {
   5275             console.log('Image ' + url + ' could not be decoded');
   5276             if (onerror) onerror();
   5277           };
   5278           img.src = url;
   5279         };
   5280         Module['preloadPlugins'].push(imagePlugin);
   5281 
   5282         var audioPlugin = {};
   5283         audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
   5284           return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
   5285         };
   5286         audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {
   5287           var done = false;
   5288           function finish(audio) {
   5289             if (done) return;
   5290             done = true;
   5291             Module["preloadedAudios"][name] = audio;
   5292             if (onload) onload(byteArray);
   5293           }
   5294           function fail() {
   5295             if (done) return;
   5296             done = true;
   5297             Module["preloadedAudios"][name] = new Audio(); // empty shim
   5298             if (onerror) onerror();
   5299           }
   5300           if (Browser.hasBlobConstructor) {
   5301             try {
   5302               var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
   5303             } catch(e) {
   5304               return fail();
   5305             }
   5306             var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
   5307             var audio = new Audio();
   5308             audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
   5309             audio.onerror = function audio_onerror(event) {
   5310               if (done) return;
   5311               console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
   5312               function encode64(data) {
   5313                 var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
   5314                 var PAD = '=';
   5315                 var ret = '';
   5316                 var leftchar = 0;
   5317                 var leftbits = 0;
   5318                 for (var i = 0; i < data.length; i++) {
   5319                   leftchar = (leftchar << 8) | data[i];
   5320                   leftbits += 8;
   5321                   while (leftbits >= 6) {
   5322                     var curr = (leftchar >> (leftbits-6)) & 0x3f;
   5323                     leftbits -= 6;
   5324                     ret += BASE[curr];
   5325                   }
   5326                 }
   5327                 if (leftbits == 2) {
   5328                   ret += BASE[(leftchar&3) << 4];
   5329                   ret += PAD + PAD;
   5330                 } else if (leftbits == 4) {
   5331                   ret += BASE[(leftchar&0xf) << 2];
   5332                   ret += PAD;
   5333                 }
   5334                 return ret;
   5335               }
   5336               audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
   5337               finish(audio); // we don't wait for confirmation this worked - but it's worth trying
   5338             };
   5339             audio.src = url;
   5340             // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
   5341             Browser.safeSetTimeout(function() {
   5342               finish(audio); // try to use it even though it is not necessarily ready to play
   5343             }, 10000);
   5344           } else {
   5345             return fail();
   5346           }
   5347         };
   5348         Module['preloadPlugins'].push(audioPlugin);
   5349 
   5350         // Canvas event setup
   5351 
   5352         var canvas = Module['canvas'];
   5353 
   5354         // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module
   5355         // Module['forcedAspectRatio'] = 4 / 3;
   5356 
   5357         canvas.requestPointerLock = canvas['requestPointerLock'] ||
   5358                                     canvas['mozRequestPointerLock'] ||
   5359                                     canvas['webkitRequestPointerLock'] ||
   5360                                     canvas['msRequestPointerLock'] ||
   5361                                     function(){};
   5362         canvas.exitPointerLock = document['exitPointerLock'] ||
   5363                                  document['mozExitPointerLock'] ||
   5364                                  document['webkitExitPointerLock'] ||
   5365                                  document['msExitPointerLock'] ||
   5366                                  function(){}; // no-op if function does not exist
   5367         canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
   5368 
   5369         function pointerLockChange() {
   5370           Browser.pointerLock = document['pointerLockElement'] === canvas ||
   5371                                 document['mozPointerLockElement'] === canvas ||
   5372                                 document['webkitPointerLockElement'] === canvas ||
   5373                                 document['msPointerLockElement'] === canvas;
   5374         }
   5375 
   5376         document.addEventListener('pointerlockchange', pointerLockChange, false);
   5377         document.addEventListener('mozpointerlockchange', pointerLockChange, false);
   5378         document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
   5379         document.addEventListener('mspointerlockchange', pointerLockChange, false);
   5380 
   5381         if (Module['elementPointerLock']) {
   5382           canvas.addEventListener("click", function(ev) {
   5383             if (!Browser.pointerLock && canvas.requestPointerLock) {
   5384               canvas.requestPointerLock();
   5385               ev.preventDefault();
   5386             }
   5387           }, false);
   5388         }
   5389       },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) {
   5390         var ctx;
   5391         var errorInfo = '?';
   5392         function onContextCreationError(event) {
   5393           errorInfo = event.statusMessage || errorInfo;
   5394         }
   5395         try {
   5396           if (useWebGL) {
   5397             var contextAttributes = {
   5398               antialias: false,
   5399               alpha: false
   5400             };
   5401 
   5402             if (webGLContextAttributes) {
   5403               for (var attribute in webGLContextAttributes) {
   5404                 contextAttributes[attribute] = webGLContextAttributes[attribute];
   5405               }
   5406             }
   5407 
   5408 
   5409             canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false);
   5410             try {
   5411               ['experimental-webgl', 'webgl'].some(function(webglId) {
   5412                 return ctx = canvas.getContext(webglId, contextAttributes);
   5413               });
   5414             } finally {
   5415               canvas.removeEventListener('webglcontextcreationerror', onContextCreationError, false);
   5416             }
   5417           } else {
   5418             ctx = canvas.getContext('2d');
   5419           }
   5420           if (!ctx) throw ':(';
   5421         } catch (e) {
   5422           Module.print('Could not create canvas: ' + [errorInfo, e]);
   5423           return null;
   5424         }
   5425         if (useWebGL) {
   5426           // Set the background of the WebGL canvas to black
   5427           canvas.style.backgroundColor = "black";
   5428 
   5429           // Warn on context loss
   5430           canvas.addEventListener('webglcontextlost', function(event) {
   5431             alert('WebGL context lost. You will need to reload the page.');
   5432           }, false);
   5433         }
   5434         if (setInModule) {
   5435           GLctx = Module.ctx = ctx;
   5436           Module.useWebGL = useWebGL;
   5437           Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
   5438           Browser.init();
   5439         }
   5440         return ctx;
   5441       },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) {
   5442         Browser.lockPointer = lockPointer;
   5443         Browser.resizeCanvas = resizeCanvas;
   5444         if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
   5445         if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
   5446 
   5447         var canvas = Module['canvas'];
   5448         function fullScreenChange() {
   5449           Browser.isFullScreen = false;
   5450           var canvasContainer = canvas.parentNode;
   5451           if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
   5452                document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
   5453                document['fullScreenElement'] || document['fullscreenElement'] ||
   5454                document['msFullScreenElement'] || document['msFullscreenElement'] ||
   5455                document['webkitCurrentFullScreenElement']) === canvasContainer) {
   5456             canvas.cancelFullScreen = document['cancelFullScreen'] ||
   5457                                       document['mozCancelFullScreen'] ||
   5458                                       document['webkitCancelFullScreen'] ||
   5459                                       document['msExitFullscreen'] ||
   5460                                       document['exitFullscreen'] ||
   5461                                       function() {};
   5462             canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
   5463             if (Browser.lockPointer) canvas.requestPointerLock();
   5464             Browser.isFullScreen = true;
   5465             if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
   5466           } else {
   5467 
   5468             // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen
   5469             canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
   5470             canvasContainer.parentNode.removeChild(canvasContainer);
   5471 
   5472             if (Browser.resizeCanvas) Browser.setWindowedCanvasSize();
   5473           }
   5474           if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen);
   5475           Browser.updateCanvasDimensions(canvas);
   5476         }
   5477 
   5478         if (!Browser.fullScreenHandlersInstalled) {
   5479           Browser.fullScreenHandlersInstalled = true;
   5480           document.addEventListener('fullscreenchange', fullScreenChange, false);
   5481           document.addEventListener('mozfullscreenchange', fullScreenChange, false);
   5482           document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
   5483           document.addEventListener('MSFullscreenChange', fullScreenChange, false);
   5484         }
   5485 
   5486         // create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root
   5487         var canvasContainer = document.createElement("div");
   5488         canvas.parentNode.insertBefore(canvasContainer, canvas);
   5489         canvasContainer.appendChild(canvas);
   5490 
   5491         // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size)
   5492         canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] ||
   5493                                             canvasContainer['mozRequestFullScreen'] ||
   5494                                             canvasContainer['msRequestFullscreen'] ||
   5495                                            (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
   5496         canvasContainer.requestFullScreen();
   5497       },requestAnimationFrame:function requestAnimationFrame(func) {
   5498         if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js)
   5499           setTimeout(func, 1000/60);
   5500         } else {
   5501           if (!window.requestAnimationFrame) {
   5502             window.requestAnimationFrame = window['requestAnimationFrame'] ||
   5503                                            window['mozRequestAnimationFrame'] ||
   5504                                            window['webkitRequestAnimationFrame'] ||
   5505                                            window['msRequestAnimationFrame'] ||
   5506                                            window['oRequestAnimationFrame'] ||
   5507                                            window['setTimeout'];
   5508           }
   5509           window.requestAnimationFrame(func);
   5510         }
   5511       },safeCallback:function (func) {
   5512         return function() {
   5513           if (!ABORT) return func.apply(null, arguments);
   5514         };
   5515       },safeRequestAnimationFrame:function (func) {
   5516         return Browser.requestAnimationFrame(function() {
   5517           if (!ABORT) func();
   5518         });
   5519       },safeSetTimeout:function (func, timeout) {
   5520         return setTimeout(function() {
   5521           if (!ABORT) func();
   5522         }, timeout);
   5523       },safeSetInterval:function (func, timeout) {
   5524         return setInterval(function() {
   5525           if (!ABORT) func();
   5526         }, timeout);
   5527       },getMimetype:function (name) {
   5528         return {
   5529           'jpg': 'image/jpeg',
   5530           'jpeg': 'image/jpeg',
   5531           'png': 'image/png',
   5532           'bmp': 'image/bmp',
   5533           'ogg': 'audio/ogg',
   5534           'wav': 'audio/wav',
   5535           'mp3': 'audio/mpeg'
   5536         }[name.substr(name.lastIndexOf('.')+1)];
   5537       },getUserMedia:function (func) {
   5538         if(!window.getUserMedia) {
   5539           window.getUserMedia = navigator['getUserMedia'] ||
   5540                                 navigator['mozGetUserMedia'];
   5541         }
   5542         window.getUserMedia(func);
   5543       },getMovementX:function (event) {
   5544         return event['movementX'] ||
   5545                event['mozMovementX'] ||
   5546                event['webkitMovementX'] ||
   5547                0;
   5548       },getMovementY:function (event) {
   5549         return event['movementY'] ||
   5550                event['mozMovementY'] ||
   5551                event['webkitMovementY'] ||
   5552                0;
   5553       },getMouseWheelDelta:function (event) {
   5554         return Math.max(-1, Math.min(1, event.type === 'DOMMouseScroll' ? event.detail : -event.wheelDelta));
   5555       },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
   5556         if (Browser.pointerLock) {
   5557           // When the pointer is locked, calculate the coordinates
   5558           // based on the movement of the mouse.
   5559           // Workaround for Firefox bug 764498
   5560           if (event.type != 'mousemove' &&
   5561               ('mozMovementX' in event)) {
   5562             Browser.mouseMovementX = Browser.mouseMovementY = 0;
   5563           } else {
   5564             Browser.mouseMovementX = Browser.getMovementX(event);
   5565             Browser.mouseMovementY = Browser.getMovementY(event);
   5566           }
   5567 
   5568           // check if SDL is available
   5569           if (typeof SDL != "undefined") {
   5570     Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
   5571     Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
   5572           } else {
   5573     // just add the mouse delta to the current absolut mouse position
   5574     // FIXME: ideally this should be clamped against the canvas size and zero
   5575     Browser.mouseX += Browser.mouseMovementX;
   5576     Browser.mouseY += Browser.mouseMovementY;
   5577           }
   5578         } else {
   5579           // Otherwise, calculate the movement based on the changes
   5580           // in the coordinates.
   5581           var rect = Module["canvas"].getBoundingClientRect();
   5582           var x, y;
   5583 
   5584           // Neither .scrollX or .pageXOffset are defined in a spec, but
   5585           // we prefer .scrollX because it is currently in a spec draft.
   5586           // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
   5587           var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset);
   5588           var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset);
   5589           if (event.type == 'touchstart' ||
   5590               event.type == 'touchend' ||
   5591               event.type == 'touchmove') {
   5592             var t = event.touches.item(0);
   5593             if (t) {
   5594               x = t.pageX - (scrollX + rect.left);
   5595               y = t.pageY - (scrollY + rect.top);
   5596             } else {
   5597               return;
   5598             }
   5599           } else {
   5600             x = event.pageX - (scrollX + rect.left);
   5601             y = event.pageY - (scrollY + rect.top);
   5602           }
   5603 
   5604           // the canvas might be CSS-scaled compared to its backbuffer;
   5605           // SDL-using content will want mouse coordinates in terms
   5606           // of backbuffer units.
   5607           var cw = Module["canvas"].width;
   5608           var ch = Module["canvas"].height;
   5609           x = x * (cw / rect.width);
   5610           y = y * (ch / rect.height);
   5611 
   5612           Browser.mouseMovementX = x - Browser.mouseX;
   5613           Browser.mouseMovementY = y - Browser.mouseY;
   5614           Browser.mouseX = x;
   5615           Browser.mouseY = y;
   5616         }
   5617       },xhrLoad:function (url, onload, onerror) {
   5618         var xhr = new XMLHttpRequest();
   5619         xhr.open('GET', url, true);
   5620         xhr.responseType = 'arraybuffer';
   5621         xhr.onload = function xhr_onload() {
   5622           if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
   5623             onload(xhr.response);
   5624           } else {
   5625             onerror();
   5626           }
   5627         };
   5628         xhr.onerror = onerror;
   5629         xhr.send(null);
   5630       },asyncLoad:function (url, onload, onerror, noRunDep) {
   5631         Browser.xhrLoad(url, function(arrayBuffer) {
   5632           assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
   5633           onload(new Uint8Array(arrayBuffer));
   5634           if (!noRunDep) removeRunDependency('al ' + url);
   5635         }, function(event) {
   5636           if (onerror) {
   5637             onerror();
   5638           } else {
   5639             throw 'Loading data file "' + url + '" failed.';
   5640           }
   5641         });
   5642         if (!noRunDep) addRunDependency('al ' + url);
   5643       },resizeListeners:[],updateResizeListeners:function () {
   5644         var canvas = Module['canvas'];
   5645         Browser.resizeListeners.forEach(function(listener) {
   5646           listener(canvas.width, canvas.height);
   5647         });
   5648       },setCanvasSize:function (width, height, noUpdates) {
   5649         var canvas = Module['canvas'];
   5650         Browser.updateCanvasDimensions(canvas, width, height);
   5651         if (!noUpdates) Browser.updateResizeListeners();
   5652       },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
   5653         // check if SDL is available
   5654         if (typeof SDL != "undefined") {
   5655     var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
   5656     flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
   5657     HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
   5658         }
   5659         Browser.updateResizeListeners();
   5660       },setWindowedCanvasSize:function () {
   5661         // check if SDL is available
   5662         if (typeof SDL != "undefined") {
   5663     var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
   5664     flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
   5665     HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
   5666         }
   5667         Browser.updateResizeListeners();
   5668       },updateCanvasDimensions:function (canvas, wNative, hNative) {
   5669         if (wNative && hNative) {
   5670           canvas.widthNative = wNative;
   5671           canvas.heightNative = hNative;
   5672         } else {
   5673           wNative = canvas.widthNative;
   5674           hNative = canvas.heightNative;
   5675         }
   5676         var w = wNative;
   5677         var h = hNative;
   5678         if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) {
   5679           if (w/h < Module['forcedAspectRatio']) {
   5680             w = Math.round(h * Module['forcedAspectRatio']);
   5681           } else {
   5682             h = Math.round(w / Module['forcedAspectRatio']);
   5683           }
   5684         }
   5685         if (((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
   5686              document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
   5687              document['fullScreenElement'] || document['fullscreenElement'] ||
   5688              document['msFullScreenElement'] || document['msFullscreenElement'] ||
   5689              document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) {
   5690            var factor = Math.min(screen.width / w, screen.height / h);
   5691            w = Math.round(w * factor);
   5692            h = Math.round(h * factor);
   5693         }
   5694         if (Browser.resizeCanvas) {
   5695           if (canvas.width  != w) canvas.width  = w;
   5696           if (canvas.height != h) canvas.height = h;
   5697           if (typeof canvas.style != 'undefined') {
   5698             canvas.style.removeProperty( "width");
   5699             canvas.style.removeProperty("height");
   5700           }
   5701         } else {
   5702           if (canvas.width  != wNative) canvas.width  = wNative;
   5703           if (canvas.height != hNative) canvas.height = hNative;
   5704           if (typeof canvas.style != 'undefined') {
   5705             if (w != wNative || h != hNative) {
   5706               canvas.style.setProperty( "width", w + "px", "important");
   5707               canvas.style.setProperty("height", h + "px", "important");
   5708             } else {
   5709               canvas.style.removeProperty( "width");
   5710               canvas.style.removeProperty("height");
   5711             }
   5712           }
   5713         }
   5714       }};
   5715 
   5716   function _sbrk(bytes) {
   5717       // Implement a Linux-like 'memory area' for our 'process'.
   5718       // Changes the size of the memory area by |bytes|; returns the
   5719       // address of the previous top ('break') of the memory area
   5720       // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
   5721       var self = _sbrk;
   5722       if (!self.called) {
   5723         DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned
   5724         self.called = true;
   5725         assert(Runtime.dynamicAlloc);
   5726         self.alloc = Runtime.dynamicAlloc;
   5727         Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
   5728       }
   5729       var ret = DYNAMICTOP;
   5730       if (bytes != 0) self.alloc(bytes);
   5731       return ret;  // Previous break location.
   5732     }
   5733 
   5734   function _sysconf(name) {
   5735       // long sysconf(int name);
   5736       // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
   5737       switch(name) {
   5738         case 30: return PAGE_SIZE;
   5739         case 132:
   5740         case 133:
   5741         case 12:
   5742         case 137:
   5743         case 138:
   5744         case 15:
   5745         case 235:
   5746         case 16:
   5747         case 17:
   5748         case 18:
   5749         case 19:
   5750         case 20:
   5751         case 149:
   5752         case 13:
   5753         case 10:
   5754         case 236:
   5755         case 153:
   5756         case 9:
   5757         case 21:
   5758         case 22:
   5759         case 159:
   5760         case 154:
   5761         case 14:
   5762         case 77:
   5763         case 78:
   5764         case 139:
   5765         case 80:
   5766         case 81:
   5767         case 79:
   5768         case 82:
   5769         case 68:
   5770         case 67:
   5771         case 164:
   5772         case 11:
   5773         case 29:
   5774         case 47:
   5775         case 48:
   5776         case 95:
   5777         case 52:
   5778         case 51:
   5779         case 46:
   5780           return 200809;
   5781         case 27:
   5782         case 246:
   5783         case 127:
   5784         case 128:
   5785         case 23:
   5786         case 24:
   5787         case 160:
   5788         case 161:
   5789         case 181:
   5790         case 182:
   5791         case 242:
   5792         case 183:
   5793         case 184:
   5794         case 243:
   5795         case 244:
   5796         case 245:
   5797         case 165:
   5798         case 178:
   5799         case 179:
   5800         case 49:
   5801         case 50:
   5802         case 168:
   5803         case 169:
   5804         case 175:
   5805         case 170:
   5806         case 171:
   5807         case 172:
   5808         case 97:
   5809         case 76:
   5810         case 32:
   5811         case 173:
   5812         case 35:
   5813           return -1;
   5814         case 176:
   5815         case 177:
   5816         case 7:
   5817         case 155:
   5818         case 8:
   5819         case 157:
   5820         case 125:
   5821         case 126:
   5822         case 92:
   5823         case 93:
   5824         case 129:
   5825         case 130:
   5826         case 131:
   5827         case 94:
   5828         case 91:
   5829           return 1;
   5830         case 74:
   5831         case 60:
   5832         case 69:
   5833         case 70:
   5834         case 4:
   5835           return 1024;
   5836         case 31:
   5837         case 42:
   5838         case 72:
   5839           return 32;
   5840         case 87:
   5841         case 26:
   5842         case 33:
   5843           return 2147483647;
   5844         case 34:
   5845         case 1:
   5846           return 47839;
   5847         case 38:
   5848         case 36:
   5849           return 99;
   5850         case 43:
   5851         case 37:
   5852           return 2048;
   5853         case 0: return 2097152;
   5854         case 3: return 65536;
   5855         case 28: return 32768;
   5856         case 44: return 32767;
   5857         case 75: return 16384;
   5858         case 39: return 1000;
   5859         case 89: return 700;
   5860         case 71: return 256;
   5861         case 40: return 255;
   5862         case 2: return 100;
   5863         case 180: return 64;
   5864         case 25: return 20;
   5865         case 5: return 16;
   5866         case 6: return 6;
   5867         case 73: return 4;
   5868         case 84: return 1;
   5869       }
   5870       ___setErrNo(ERRNO_CODES.EINVAL);
   5871       return -1;
   5872     }
   5873 
   5874   function _emscripten_run_script(ptr) {
   5875       eval(Pointer_stringify(ptr));
   5876     }
   5877 
   5878 
   5879   function _malloc(bytes) {
   5880       /* Over-allocate to make sure it is byte-aligned by 8.
   5881        * This will leak memory, but this is only the dummy
   5882        * implementation (replaced by dlmalloc normally) so
   5883        * not an issue.
   5884        */
   5885       var ptr = Runtime.dynamicAlloc(bytes + 8);
   5886       return (ptr+8) & 0xFFFFFFF8;
   5887     }
   5888   Module["_malloc"] = _malloc;function ___cxa_allocate_exception(size) {
   5889       var ptr = _malloc(size + ___cxa_exception_header_size);
   5890       return ptr + ___cxa_exception_header_size;
   5891     }
   5892 
   5893   function _emscripten_cancel_main_loop() {
   5894       Browser.mainLoop.scheduler = null;
   5895       Browser.mainLoop.shouldPause = true;
   5896     }
   5897 
   5898   var __ZTISt9exception=allocate([allocate([1,0,0,0,0,0,0], "i8", ALLOC_STATIC)+8, 0], "i32", ALLOC_STATIC);
   5899 FS.staticInit();__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });__ATEXIT__.push({ func: function() { FS.quit() } });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice;
   5900 ___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
   5901 __ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor();
   5902 if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); }
   5903 __ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } });
   5904 _fputc.ret = allocate([0], "i8", ALLOC_STATIC);
   5905 Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
   5906   Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };
   5907   Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };
   5908   Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() };
   5909   Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() };
   5910   Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() }
   5911 STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
   5912 
   5913 staticSealed = true; // seal the static portion of memory
   5914 
   5915 STACK_MAX = STACK_BASE + 5242880;
   5916 
   5917 DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
   5918 
   5919 assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
   5920 
   5921 
   5922 var Math_min = Math.min;
   5923 function invoke_iiii(index,a1,a2,a3) {
   5924   try {
   5925     return Module["dynCall_iiii"](index,a1,a2,a3);
   5926   } catch(e) {
   5927     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   5928     asm["setThrew"](1, 0);
   5929   }
   5930 }
   5931 
   5932 function invoke_viiiii(index,a1,a2,a3,a4,a5) {
   5933   try {
   5934     Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5);
   5935   } catch(e) {
   5936     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   5937     asm["setThrew"](1, 0);
   5938   }
   5939 }
   5940 
   5941 function invoke_vi(index,a1) {
   5942   try {
   5943     Module["dynCall_vi"](index,a1);
   5944   } catch(e) {
   5945     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   5946     asm["setThrew"](1, 0);
   5947   }
   5948 }
   5949 
   5950 function invoke_vii(index,a1,a2) {
   5951   try {
   5952     Module["dynCall_vii"](index,a1,a2);
   5953   } catch(e) {
   5954     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   5955     asm["setThrew"](1, 0);
   5956   }
   5957 }
   5958 
   5959 function invoke_ii(index,a1) {
   5960   try {
   5961     return Module["dynCall_ii"](index,a1);
   5962   } catch(e) {
   5963     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   5964     asm["setThrew"](1, 0);
   5965   }
   5966 }
   5967 
   5968 function invoke_viii(index,a1,a2,a3) {
   5969   try {
   5970     Module["dynCall_viii"](index,a1,a2,a3);
   5971   } catch(e) {
   5972     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   5973     asm["setThrew"](1, 0);
   5974   }
   5975 }
   5976 
   5977 function invoke_v(index) {
   5978   try {
   5979     Module["dynCall_v"](index);
   5980   } catch(e) {
   5981     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   5982     asm["setThrew"](1, 0);
   5983   }
   5984 }
   5985 
   5986 function invoke_viid(index,a1,a2,a3) {
   5987   try {
   5988     Module["dynCall_viid"](index,a1,a2,a3);
   5989   } catch(e) {
   5990     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   5991     asm["setThrew"](1, 0);
   5992   }
   5993 }
   5994 
   5995 function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
   5996   try {
   5997     Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6);
   5998   } catch(e) {
   5999     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   6000     asm["setThrew"](1, 0);
   6001   }
   6002 }
   6003 
   6004 function invoke_iii(index,a1,a2) {
   6005   try {
   6006     return Module["dynCall_iii"](index,a1,a2);
   6007   } catch(e) {
   6008     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   6009     asm["setThrew"](1, 0);
   6010   }
   6011 }
   6012 
   6013 function invoke_iiiiii(index,a1,a2,a3,a4,a5) {
   6014   try {
   6015     return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5);
   6016   } catch(e) {
   6017     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   6018     asm["setThrew"](1, 0);
   6019   }
   6020 }
   6021 
   6022 function invoke_viiii(index,a1,a2,a3,a4) {
   6023   try {
   6024     Module["dynCall_viiii"](index,a1,a2,a3,a4);
   6025   } catch(e) {
   6026     if (typeof e !== 'number' && e !== 'longjmp') throw e;
   6027     asm["setThrew"](1, 0);
   6028   }
   6029 }
   6030 
   6031 function asmPrintInt(x, y) {
   6032   Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
   6033 }
   6034 function asmPrintFloat(x, y) {
   6035   Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
   6036 }
   6037 // EMSCRIPTEN_START_ASM
   6038 var asm = (function(global, env, buffer) {
   6039   'use asm';
   6040   var HEAP8 = new global.Int8Array(buffer);
   6041   var HEAP16 = new global.Int16Array(buffer);
   6042   var HEAP32 = new global.Int32Array(buffer);
   6043   var HEAPU8 = new global.Uint8Array(buffer);
   6044   var HEAPU16 = new global.Uint16Array(buffer);
   6045   var HEAPU32 = new global.Uint32Array(buffer);
   6046   var HEAPF32 = new global.Float32Array(buffer);
   6047   var HEAPF64 = new global.Float64Array(buffer);
   6048 
   6049   var STACKTOP=env.STACKTOP|0;
   6050   var STACK_MAX=env.STACK_MAX|0;
   6051   var tempDoublePtr=env.tempDoublePtr|0;
   6052   var ABORT=env.ABORT|0;
   6053   var __ZTISt9exception=env.__ZTISt9exception|0;
   6054 
   6055   var __THREW__ = 0;
   6056   var threwValue = 0;
   6057   var setjmpId = 0;
   6058   var undef = 0;
   6059   var nan = +env.NaN, inf = +env.Infinity;
   6060   var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0;
   6061 
   6062   var tempRet0 = 0;
   6063   var tempRet1 = 0;
   6064   var tempRet2 = 0;
   6065   var tempRet3 = 0;
   6066   var tempRet4 = 0;
   6067   var tempRet5 = 0;
   6068   var tempRet6 = 0;
   6069   var tempRet7 = 0;
   6070   var tempRet8 = 0;
   6071   var tempRet9 = 0;
   6072   var Math_floor=global.Math.floor;
   6073   var Math_abs=global.Math.abs;
   6074   var Math_sqrt=global.Math.sqrt;
   6075   var Math_pow=global.Math.pow;
   6076   var Math_cos=global.Math.cos;
   6077   var Math_sin=global.Math.sin;
   6078   var Math_tan=global.Math.tan;
   6079   var Math_acos=global.Math.acos;
   6080   var Math_asin=global.Math.asin;
   6081   var Math_atan=global.Math.atan;
   6082   var Math_atan2=global.Math.atan2;
   6083   var Math_exp=global.Math.exp;
   6084   var Math_log=global.Math.log;
   6085   var Math_ceil=global.Math.ceil;
   6086   var Math_imul=global.Math.imul;
   6087   var abort=env.abort;
   6088   var assert=env.assert;
   6089   var asmPrintInt=env.asmPrintInt;
   6090   var asmPrintFloat=env.asmPrintFloat;
   6091   var Math_min=env.min;
   6092   var invoke_iiii=env.invoke_iiii;
   6093   var invoke_viiiii=env.invoke_viiiii;
   6094   var invoke_vi=env.invoke_vi;
   6095   var invoke_vii=env.invoke_vii;
   6096   var invoke_ii=env.invoke_ii;
   6097   var invoke_viii=env.invoke_viii;
   6098   var invoke_v=env.invoke_v;
   6099   var invoke_viid=env.invoke_viid;
   6100   var invoke_viiiiii=env.invoke_viiiiii;
   6101   var invoke_iii=env.invoke_iii;
   6102   var invoke_iiiiii=env.invoke_iiiiii;
   6103   var invoke_viiii=env.invoke_viiii;
   6104   var ___cxa_throw=env.___cxa_throw;
   6105   var _emscripten_run_script=env._emscripten_run_script;
   6106   var _cosf=env._cosf;
   6107   var _send=env._send;
   6108   var __ZSt9terminatev=env.__ZSt9terminatev;
   6109   var __reallyNegative=env.__reallyNegative;
   6110   var ___cxa_is_number_type=env.___cxa_is_number_type;
   6111   var ___assert_fail=env.___assert_fail;
   6112   var ___cxa_allocate_exception=env.___cxa_allocate_exception;
   6113   var ___cxa_find_matching_catch=env.___cxa_find_matching_catch;
   6114   var _fflush=env._fflush;
   6115   var _pwrite=env._pwrite;
   6116   var ___setErrNo=env.___setErrNo;
   6117   var _sbrk=env._sbrk;
   6118   var ___cxa_begin_catch=env.___cxa_begin_catch;
   6119   var _sinf=env._sinf;
   6120   var _fileno=env._fileno;
   6121   var ___resumeException=env.___resumeException;
   6122   var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv;
   6123   var _sysconf=env._sysconf;
   6124   var _clock=env._clock;
   6125   var _emscripten_memcpy_big=env._emscripten_memcpy_big;
   6126   var _puts=env._puts;
   6127   var _mkport=env._mkport;
   6128   var _floorf=env._floorf;
   6129   var _sqrtf=env._sqrtf;
   6130   var _write=env._write;
   6131   var _emscripten_set_main_loop=env._emscripten_set_main_loop;
   6132   var ___errno_location=env.___errno_location;
   6133   var __ZNSt9exceptionD2Ev=env.__ZNSt9exceptionD2Ev;
   6134   var _printf=env._printf;
   6135   var ___cxa_does_inherit=env.___cxa_does_inherit;
   6136   var __exit=env.__exit;
   6137   var _fputc=env._fputc;
   6138   var _abort=env._abort;
   6139   var _fwrite=env._fwrite;
   6140   var _time=env._time;
   6141   var _fprintf=env._fprintf;
   6142   var _emscripten_cancel_main_loop=env._emscripten_cancel_main_loop;
   6143   var __formatString=env.__formatString;
   6144   var _fputs=env._fputs;
   6145   var _exit=env._exit;
   6146   var ___cxa_pure_virtual=env.___cxa_pure_virtual;
   6147   var tempFloat = 0.0;
   6148 
   6149 // EMSCRIPTEN_START_FUNCS
   6150 function _malloc(i12) {
   6151  i12 = i12 | 0;
   6152  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0;
   6153  i1 = STACKTOP;
   6154  do {
   6155   if (i12 >>> 0 < 245) {
   6156    if (i12 >>> 0 < 11) {
   6157     i12 = 16;
   6158    } else {
   6159     i12 = i12 + 11 & -8;
   6160    }
   6161    i20 = i12 >>> 3;
   6162    i18 = HEAP32[1790] | 0;
   6163    i21 = i18 >>> i20;
   6164    if ((i21 & 3 | 0) != 0) {
   6165     i6 = (i21 & 1 ^ 1) + i20 | 0;
   6166     i5 = i6 << 1;
   6167     i3 = 7200 + (i5 << 2) | 0;
   6168     i5 = 7200 + (i5 + 2 << 2) | 0;
   6169     i7 = HEAP32[i5 >> 2] | 0;
   6170     i2 = i7 + 8 | 0;
   6171     i4 = HEAP32[i2 >> 2] | 0;
   6172     do {
   6173      if ((i3 | 0) != (i4 | 0)) {
   6174       if (i4 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6175        _abort();
   6176       }
   6177       i8 = i4 + 12 | 0;
   6178       if ((HEAP32[i8 >> 2] | 0) == (i7 | 0)) {
   6179        HEAP32[i8 >> 2] = i3;
   6180        HEAP32[i5 >> 2] = i4;
   6181        break;
   6182       } else {
   6183        _abort();
   6184       }
   6185      } else {
   6186       HEAP32[1790] = i18 & ~(1 << i6);
   6187      }
   6188     } while (0);
   6189     i32 = i6 << 3;
   6190     HEAP32[i7 + 4 >> 2] = i32 | 3;
   6191     i32 = i7 + (i32 | 4) | 0;
   6192     HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
   6193     i32 = i2;
   6194     STACKTOP = i1;
   6195     return i32 | 0;
   6196    }
   6197    if (i12 >>> 0 > (HEAP32[7168 >> 2] | 0) >>> 0) {
   6198     if ((i21 | 0) != 0) {
   6199      i7 = 2 << i20;
   6200      i7 = i21 << i20 & (i7 | 0 - i7);
   6201      i7 = (i7 & 0 - i7) + -1 | 0;
   6202      i2 = i7 >>> 12 & 16;
   6203      i7 = i7 >>> i2;
   6204      i6 = i7 >>> 5 & 8;
   6205      i7 = i7 >>> i6;
   6206      i5 = i7 >>> 2 & 4;
   6207      i7 = i7 >>> i5;
   6208      i4 = i7 >>> 1 & 2;
   6209      i7 = i7 >>> i4;
   6210      i3 = i7 >>> 1 & 1;
   6211      i3 = (i6 | i2 | i5 | i4 | i3) + (i7 >>> i3) | 0;
   6212      i7 = i3 << 1;
   6213      i4 = 7200 + (i7 << 2) | 0;
   6214      i7 = 7200 + (i7 + 2 << 2) | 0;
   6215      i5 = HEAP32[i7 >> 2] | 0;
   6216      i2 = i5 + 8 | 0;
   6217      i6 = HEAP32[i2 >> 2] | 0;
   6218      do {
   6219       if ((i4 | 0) != (i6 | 0)) {
   6220        if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6221         _abort();
   6222        }
   6223        i8 = i6 + 12 | 0;
   6224        if ((HEAP32[i8 >> 2] | 0) == (i5 | 0)) {
   6225         HEAP32[i8 >> 2] = i4;
   6226         HEAP32[i7 >> 2] = i6;
   6227         break;
   6228        } else {
   6229         _abort();
   6230        }
   6231       } else {
   6232        HEAP32[1790] = i18 & ~(1 << i3);
   6233       }
   6234      } while (0);
   6235      i6 = i3 << 3;
   6236      i4 = i6 - i12 | 0;
   6237      HEAP32[i5 + 4 >> 2] = i12 | 3;
   6238      i3 = i5 + i12 | 0;
   6239      HEAP32[i5 + (i12 | 4) >> 2] = i4 | 1;
   6240      HEAP32[i5 + i6 >> 2] = i4;
   6241      i6 = HEAP32[7168 >> 2] | 0;
   6242      if ((i6 | 0) != 0) {
   6243       i5 = HEAP32[7180 >> 2] | 0;
   6244       i8 = i6 >>> 3;
   6245       i9 = i8 << 1;
   6246       i6 = 7200 + (i9 << 2) | 0;
   6247       i7 = HEAP32[1790] | 0;
   6248       i8 = 1 << i8;
   6249       if ((i7 & i8 | 0) != 0) {
   6250        i7 = 7200 + (i9 + 2 << 2) | 0;
   6251        i8 = HEAP32[i7 >> 2] | 0;
   6252        if (i8 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6253         _abort();
   6254        } else {
   6255         i28 = i7;
   6256         i27 = i8;
   6257        }
   6258       } else {
   6259        HEAP32[1790] = i7 | i8;
   6260        i28 = 7200 + (i9 + 2 << 2) | 0;
   6261        i27 = i6;
   6262       }
   6263       HEAP32[i28 >> 2] = i5;
   6264       HEAP32[i27 + 12 >> 2] = i5;
   6265       HEAP32[i5 + 8 >> 2] = i27;
   6266       HEAP32[i5 + 12 >> 2] = i6;
   6267      }
   6268      HEAP32[7168 >> 2] = i4;
   6269      HEAP32[7180 >> 2] = i3;
   6270      i32 = i2;
   6271      STACKTOP = i1;
   6272      return i32 | 0;
   6273     }
   6274     i18 = HEAP32[7164 >> 2] | 0;
   6275     if ((i18 | 0) != 0) {
   6276      i2 = (i18 & 0 - i18) + -1 | 0;
   6277      i31 = i2 >>> 12 & 16;
   6278      i2 = i2 >>> i31;
   6279      i30 = i2 >>> 5 & 8;
   6280      i2 = i2 >>> i30;
   6281      i32 = i2 >>> 2 & 4;
   6282      i2 = i2 >>> i32;
   6283      i6 = i2 >>> 1 & 2;
   6284      i2 = i2 >>> i6;
   6285      i3 = i2 >>> 1 & 1;
   6286      i3 = HEAP32[7464 + ((i30 | i31 | i32 | i6 | i3) + (i2 >>> i3) << 2) >> 2] | 0;
   6287      i2 = (HEAP32[i3 + 4 >> 2] & -8) - i12 | 0;
   6288      i6 = i3;
   6289      while (1) {
   6290       i5 = HEAP32[i6 + 16 >> 2] | 0;
   6291       if ((i5 | 0) == 0) {
   6292        i5 = HEAP32[i6 + 20 >> 2] | 0;
   6293        if ((i5 | 0) == 0) {
   6294         break;
   6295        }
   6296       }
   6297       i6 = (HEAP32[i5 + 4 >> 2] & -8) - i12 | 0;
   6298       i4 = i6 >>> 0 < i2 >>> 0;
   6299       i2 = i4 ? i6 : i2;
   6300       i6 = i5;
   6301       i3 = i4 ? i5 : i3;
   6302      }
   6303      i6 = HEAP32[7176 >> 2] | 0;
   6304      if (i3 >>> 0 < i6 >>> 0) {
   6305       _abort();
   6306      }
   6307      i4 = i3 + i12 | 0;
   6308      if (!(i3 >>> 0 < i4 >>> 0)) {
   6309       _abort();
   6310      }
   6311      i5 = HEAP32[i3 + 24 >> 2] | 0;
   6312      i7 = HEAP32[i3 + 12 >> 2] | 0;
   6313      do {
   6314       if ((i7 | 0) == (i3 | 0)) {
   6315        i8 = i3 + 20 | 0;
   6316        i7 = HEAP32[i8 >> 2] | 0;
   6317        if ((i7 | 0) == 0) {
   6318         i8 = i3 + 16 | 0;
   6319         i7 = HEAP32[i8 >> 2] | 0;
   6320         if ((i7 | 0) == 0) {
   6321          i26 = 0;
   6322          break;
   6323         }
   6324        }
   6325        while (1) {
   6326         i10 = i7 + 20 | 0;
   6327         i9 = HEAP32[i10 >> 2] | 0;
   6328         if ((i9 | 0) != 0) {
   6329          i7 = i9;
   6330          i8 = i10;
   6331          continue;
   6332         }
   6333         i10 = i7 + 16 | 0;
   6334         i9 = HEAP32[i10 >> 2] | 0;
   6335         if ((i9 | 0) == 0) {
   6336          break;
   6337         } else {
   6338          i7 = i9;
   6339          i8 = i10;
   6340         }
   6341        }
   6342        if (i8 >>> 0 < i6 >>> 0) {
   6343         _abort();
   6344        } else {
   6345         HEAP32[i8 >> 2] = 0;
   6346         i26 = i7;
   6347         break;
   6348        }
   6349       } else {
   6350        i8 = HEAP32[i3 + 8 >> 2] | 0;
   6351        if (i8 >>> 0 < i6 >>> 0) {
   6352         _abort();
   6353        }
   6354        i6 = i8 + 12 | 0;
   6355        if ((HEAP32[i6 >> 2] | 0) != (i3 | 0)) {
   6356         _abort();
   6357        }
   6358        i9 = i7 + 8 | 0;
   6359        if ((HEAP32[i9 >> 2] | 0) == (i3 | 0)) {
   6360         HEAP32[i6 >> 2] = i7;
   6361         HEAP32[i9 >> 2] = i8;
   6362         i26 = i7;
   6363         break;
   6364        } else {
   6365         _abort();
   6366        }
   6367       }
   6368      } while (0);
   6369      do {
   6370       if ((i5 | 0) != 0) {
   6371        i7 = HEAP32[i3 + 28 >> 2] | 0;
   6372        i6 = 7464 + (i7 << 2) | 0;
   6373        if ((i3 | 0) == (HEAP32[i6 >> 2] | 0)) {
   6374         HEAP32[i6 >> 2] = i26;
   6375         if ((i26 | 0) == 0) {
   6376          HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i7);
   6377          break;
   6378         }
   6379        } else {
   6380         if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6381          _abort();
   6382         }
   6383         i6 = i5 + 16 | 0;
   6384         if ((HEAP32[i6 >> 2] | 0) == (i3 | 0)) {
   6385          HEAP32[i6 >> 2] = i26;
   6386         } else {
   6387          HEAP32[i5 + 20 >> 2] = i26;
   6388         }
   6389         if ((i26 | 0) == 0) {
   6390          break;
   6391         }
   6392        }
   6393        if (i26 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6394         _abort();
   6395        }
   6396        HEAP32[i26 + 24 >> 2] = i5;
   6397        i5 = HEAP32[i3 + 16 >> 2] | 0;
   6398        do {
   6399         if ((i5 | 0) != 0) {
   6400          if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6401           _abort();
   6402          } else {
   6403           HEAP32[i26 + 16 >> 2] = i5;
   6404           HEAP32[i5 + 24 >> 2] = i26;
   6405           break;
   6406          }
   6407         }
   6408        } while (0);
   6409        i5 = HEAP32[i3 + 20 >> 2] | 0;
   6410        if ((i5 | 0) != 0) {
   6411         if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6412          _abort();
   6413         } else {
   6414          HEAP32[i26 + 20 >> 2] = i5;
   6415          HEAP32[i5 + 24 >> 2] = i26;
   6416          break;
   6417         }
   6418        }
   6419       }
   6420      } while (0);
   6421      if (i2 >>> 0 < 16) {
   6422       i32 = i2 + i12 | 0;
   6423       HEAP32[i3 + 4 >> 2] = i32 | 3;
   6424       i32 = i3 + (i32 + 4) | 0;
   6425       HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
   6426      } else {
   6427       HEAP32[i3 + 4 >> 2] = i12 | 3;
   6428       HEAP32[i3 + (i12 | 4) >> 2] = i2 | 1;
   6429       HEAP32[i3 + (i2 + i12) >> 2] = i2;
   6430       i6 = HEAP32[7168 >> 2] | 0;
   6431       if ((i6 | 0) != 0) {
   6432        i5 = HEAP32[7180 >> 2] | 0;
   6433        i8 = i6 >>> 3;
   6434        i9 = i8 << 1;
   6435        i6 = 7200 + (i9 << 2) | 0;
   6436        i7 = HEAP32[1790] | 0;
   6437        i8 = 1 << i8;
   6438        if ((i7 & i8 | 0) != 0) {
   6439         i7 = 7200 + (i9 + 2 << 2) | 0;
   6440         i8 = HEAP32[i7 >> 2] | 0;
   6441         if (i8 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6442          _abort();
   6443         } else {
   6444          i25 = i7;
   6445          i24 = i8;
   6446         }
   6447        } else {
   6448         HEAP32[1790] = i7 | i8;
   6449         i25 = 7200 + (i9 + 2 << 2) | 0;
   6450         i24 = i6;
   6451        }
   6452        HEAP32[i25 >> 2] = i5;
   6453        HEAP32[i24 + 12 >> 2] = i5;
   6454        HEAP32[i5 + 8 >> 2] = i24;
   6455        HEAP32[i5 + 12 >> 2] = i6;
   6456       }
   6457       HEAP32[7168 >> 2] = i2;
   6458       HEAP32[7180 >> 2] = i4;
   6459      }
   6460      i32 = i3 + 8 | 0;
   6461      STACKTOP = i1;
   6462      return i32 | 0;
   6463     }
   6464    }
   6465   } else {
   6466    if (!(i12 >>> 0 > 4294967231)) {
   6467     i24 = i12 + 11 | 0;
   6468     i12 = i24 & -8;
   6469     i26 = HEAP32[7164 >> 2] | 0;
   6470     if ((i26 | 0) != 0) {
   6471      i25 = 0 - i12 | 0;
   6472      i24 = i24 >>> 8;
   6473      if ((i24 | 0) != 0) {
   6474       if (i12 >>> 0 > 16777215) {
   6475        i27 = 31;
   6476       } else {
   6477        i31 = (i24 + 1048320 | 0) >>> 16 & 8;
   6478        i32 = i24 << i31;
   6479        i30 = (i32 + 520192 | 0) >>> 16 & 4;
   6480        i32 = i32 << i30;
   6481        i27 = (i32 + 245760 | 0) >>> 16 & 2;
   6482        i27 = 14 - (i30 | i31 | i27) + (i32 << i27 >>> 15) | 0;
   6483        i27 = i12 >>> (i27 + 7 | 0) & 1 | i27 << 1;
   6484       }
   6485      } else {
   6486       i27 = 0;
   6487      }
   6488      i30 = HEAP32[7464 + (i27 << 2) >> 2] | 0;
   6489      L126 : do {
   6490       if ((i30 | 0) == 0) {
   6491        i29 = 0;
   6492        i24 = 0;
   6493       } else {
   6494        if ((i27 | 0) == 31) {
   6495         i24 = 0;
   6496        } else {
   6497         i24 = 25 - (i27 >>> 1) | 0;
   6498        }
   6499        i29 = 0;
   6500        i28 = i12 << i24;
   6501        i24 = 0;
   6502        while (1) {
   6503         i32 = HEAP32[i30 + 4 >> 2] & -8;
   6504         i31 = i32 - i12 | 0;
   6505         if (i31 >>> 0 < i25 >>> 0) {
   6506          if ((i32 | 0) == (i12 | 0)) {
   6507           i25 = i31;
   6508           i29 = i30;
   6509           i24 = i30;
   6510           break L126;
   6511          } else {
   6512           i25 = i31;
   6513           i24 = i30;
   6514          }
   6515         }
   6516         i31 = HEAP32[i30 + 20 >> 2] | 0;
   6517         i30 = HEAP32[i30 + (i28 >>> 31 << 2) + 16 >> 2] | 0;
   6518         i29 = (i31 | 0) == 0 | (i31 | 0) == (i30 | 0) ? i29 : i31;
   6519         if ((i30 | 0) == 0) {
   6520          break;
   6521         } else {
   6522          i28 = i28 << 1;
   6523         }
   6524        }
   6525       }
   6526      } while (0);
   6527      if ((i29 | 0) == 0 & (i24 | 0) == 0) {
   6528       i32 = 2 << i27;
   6529       i26 = i26 & (i32 | 0 - i32);
   6530       if ((i26 | 0) == 0) {
   6531        break;
   6532       }
   6533       i32 = (i26 & 0 - i26) + -1 | 0;
   6534       i28 = i32 >>> 12 & 16;
   6535       i32 = i32 >>> i28;
   6536       i27 = i32 >>> 5 & 8;
   6537       i32 = i32 >>> i27;
   6538       i30 = i32 >>> 2 & 4;
   6539       i32 = i32 >>> i30;
   6540       i31 = i32 >>> 1 & 2;
   6541       i32 = i32 >>> i31;
   6542       i29 = i32 >>> 1 & 1;
   6543       i29 = HEAP32[7464 + ((i27 | i28 | i30 | i31 | i29) + (i32 >>> i29) << 2) >> 2] | 0;
   6544      }
   6545      if ((i29 | 0) != 0) {
   6546       while (1) {
   6547        i27 = (HEAP32[i29 + 4 >> 2] & -8) - i12 | 0;
   6548        i26 = i27 >>> 0 < i25 >>> 0;
   6549        i25 = i26 ? i27 : i25;
   6550        i24 = i26 ? i29 : i24;
   6551        i26 = HEAP32[i29 + 16 >> 2] | 0;
   6552        if ((i26 | 0) != 0) {
   6553         i29 = i26;
   6554         continue;
   6555        }
   6556        i29 = HEAP32[i29 + 20 >> 2] | 0;
   6557        if ((i29 | 0) == 0) {
   6558         break;
   6559        }
   6560       }
   6561      }
   6562      if ((i24 | 0) != 0 ? i25 >>> 0 < ((HEAP32[7168 >> 2] | 0) - i12 | 0) >>> 0 : 0) {
   6563       i4 = HEAP32[7176 >> 2] | 0;
   6564       if (i24 >>> 0 < i4 >>> 0) {
   6565        _abort();
   6566       }
   6567       i2 = i24 + i12 | 0;
   6568       if (!(i24 >>> 0 < i2 >>> 0)) {
   6569        _abort();
   6570       }
   6571       i3 = HEAP32[i24 + 24 >> 2] | 0;
   6572       i6 = HEAP32[i24 + 12 >> 2] | 0;
   6573       do {
   6574        if ((i6 | 0) == (i24 | 0)) {
   6575         i6 = i24 + 20 | 0;
   6576         i5 = HEAP32[i6 >> 2] | 0;
   6577         if ((i5 | 0) == 0) {
   6578          i6 = i24 + 16 | 0;
   6579          i5 = HEAP32[i6 >> 2] | 0;
   6580          if ((i5 | 0) == 0) {
   6581           i22 = 0;
   6582           break;
   6583          }
   6584         }
   6585         while (1) {
   6586          i8 = i5 + 20 | 0;
   6587          i7 = HEAP32[i8 >> 2] | 0;
   6588          if ((i7 | 0) != 0) {
   6589           i5 = i7;
   6590           i6 = i8;
   6591           continue;
   6592          }
   6593          i7 = i5 + 16 | 0;
   6594          i8 = HEAP32[i7 >> 2] | 0;
   6595          if ((i8 | 0) == 0) {
   6596           break;
   6597          } else {
   6598           i5 = i8;
   6599           i6 = i7;
   6600          }
   6601         }
   6602         if (i6 >>> 0 < i4 >>> 0) {
   6603          _abort();
   6604         } else {
   6605          HEAP32[i6 >> 2] = 0;
   6606          i22 = i5;
   6607          break;
   6608         }
   6609        } else {
   6610         i5 = HEAP32[i24 + 8 >> 2] | 0;
   6611         if (i5 >>> 0 < i4 >>> 0) {
   6612          _abort();
   6613         }
   6614         i7 = i5 + 12 | 0;
   6615         if ((HEAP32[i7 >> 2] | 0) != (i24 | 0)) {
   6616          _abort();
   6617         }
   6618         i4 = i6 + 8 | 0;
   6619         if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
   6620          HEAP32[i7 >> 2] = i6;
   6621          HEAP32[i4 >> 2] = i5;
   6622          i22 = i6;
   6623          break;
   6624         } else {
   6625          _abort();
   6626         }
   6627        }
   6628       } while (0);
   6629       do {
   6630        if ((i3 | 0) != 0) {
   6631         i4 = HEAP32[i24 + 28 >> 2] | 0;
   6632         i5 = 7464 + (i4 << 2) | 0;
   6633         if ((i24 | 0) == (HEAP32[i5 >> 2] | 0)) {
   6634          HEAP32[i5 >> 2] = i22;
   6635          if ((i22 | 0) == 0) {
   6636           HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i4);
   6637           break;
   6638          }
   6639         } else {
   6640          if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6641           _abort();
   6642          }
   6643          i4 = i3 + 16 | 0;
   6644          if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
   6645           HEAP32[i4 >> 2] = i22;
   6646          } else {
   6647           HEAP32[i3 + 20 >> 2] = i22;
   6648          }
   6649          if ((i22 | 0) == 0) {
   6650           break;
   6651          }
   6652         }
   6653         if (i22 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6654          _abort();
   6655         }
   6656         HEAP32[i22 + 24 >> 2] = i3;
   6657         i3 = HEAP32[i24 + 16 >> 2] | 0;
   6658         do {
   6659          if ((i3 | 0) != 0) {
   6660           if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6661            _abort();
   6662           } else {
   6663            HEAP32[i22 + 16 >> 2] = i3;
   6664            HEAP32[i3 + 24 >> 2] = i22;
   6665            break;
   6666           }
   6667          }
   6668         } while (0);
   6669         i3 = HEAP32[i24 + 20 >> 2] | 0;
   6670         if ((i3 | 0) != 0) {
   6671          if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6672           _abort();
   6673          } else {
   6674           HEAP32[i22 + 20 >> 2] = i3;
   6675           HEAP32[i3 + 24 >> 2] = i22;
   6676           break;
   6677          }
   6678         }
   6679        }
   6680       } while (0);
   6681       L204 : do {
   6682        if (!(i25 >>> 0 < 16)) {
   6683         HEAP32[i24 + 4 >> 2] = i12 | 3;
   6684         HEAP32[i24 + (i12 | 4) >> 2] = i25 | 1;
   6685         HEAP32[i24 + (i25 + i12) >> 2] = i25;
   6686         i4 = i25 >>> 3;
   6687         if (i25 >>> 0 < 256) {
   6688          i6 = i4 << 1;
   6689          i3 = 7200 + (i6 << 2) | 0;
   6690          i5 = HEAP32[1790] | 0;
   6691          i4 = 1 << i4;
   6692          if ((i5 & i4 | 0) != 0) {
   6693           i5 = 7200 + (i6 + 2 << 2) | 0;
   6694           i4 = HEAP32[i5 >> 2] | 0;
   6695           if (i4 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6696            _abort();
   6697           } else {
   6698            i21 = i5;
   6699            i20 = i4;
   6700           }
   6701          } else {
   6702           HEAP32[1790] = i5 | i4;
   6703           i21 = 7200 + (i6 + 2 << 2) | 0;
   6704           i20 = i3;
   6705          }
   6706          HEAP32[i21 >> 2] = i2;
   6707          HEAP32[i20 + 12 >> 2] = i2;
   6708          HEAP32[i24 + (i12 + 8) >> 2] = i20;
   6709          HEAP32[i24 + (i12 + 12) >> 2] = i3;
   6710          break;
   6711         }
   6712         i3 = i25 >>> 8;
   6713         if ((i3 | 0) != 0) {
   6714          if (i25 >>> 0 > 16777215) {
   6715           i3 = 31;
   6716          } else {
   6717           i31 = (i3 + 1048320 | 0) >>> 16 & 8;
   6718           i32 = i3 << i31;
   6719           i30 = (i32 + 520192 | 0) >>> 16 & 4;
   6720           i32 = i32 << i30;
   6721           i3 = (i32 + 245760 | 0) >>> 16 & 2;
   6722           i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
   6723           i3 = i25 >>> (i3 + 7 | 0) & 1 | i3 << 1;
   6724          }
   6725         } else {
   6726          i3 = 0;
   6727         }
   6728         i6 = 7464 + (i3 << 2) | 0;
   6729         HEAP32[i24 + (i12 + 28) >> 2] = i3;
   6730         HEAP32[i24 + (i12 + 20) >> 2] = 0;
   6731         HEAP32[i24 + (i12 + 16) >> 2] = 0;
   6732         i4 = HEAP32[7164 >> 2] | 0;
   6733         i5 = 1 << i3;
   6734         if ((i4 & i5 | 0) == 0) {
   6735          HEAP32[7164 >> 2] = i4 | i5;
   6736          HEAP32[i6 >> 2] = i2;
   6737          HEAP32[i24 + (i12 + 24) >> 2] = i6;
   6738          HEAP32[i24 + (i12 + 12) >> 2] = i2;
   6739          HEAP32[i24 + (i12 + 8) >> 2] = i2;
   6740          break;
   6741         }
   6742         i4 = HEAP32[i6 >> 2] | 0;
   6743         if ((i3 | 0) == 31) {
   6744          i3 = 0;
   6745         } else {
   6746          i3 = 25 - (i3 >>> 1) | 0;
   6747         }
   6748         L225 : do {
   6749          if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i25 | 0)) {
   6750           i3 = i25 << i3;
   6751           while (1) {
   6752            i6 = i4 + (i3 >>> 31 << 2) + 16 | 0;
   6753            i5 = HEAP32[i6 >> 2] | 0;
   6754            if ((i5 | 0) == 0) {
   6755             break;
   6756            }
   6757            if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i25 | 0)) {
   6758             i18 = i5;
   6759             break L225;
   6760            } else {
   6761             i3 = i3 << 1;
   6762             i4 = i5;
   6763            }
   6764           }
   6765           if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   6766            _abort();
   6767           } else {
   6768            HEAP32[i6 >> 2] = i2;
   6769            HEAP32[i24 + (i12 + 24) >> 2] = i4;
   6770            HEAP32[i24 + (i12 + 12) >> 2] = i2;
   6771            HEAP32[i24 + (i12 + 8) >> 2] = i2;
   6772            break L204;
   6773           }
   6774          } else {
   6775           i18 = i4;
   6776          }
   6777         } while (0);
   6778         i4 = i18 + 8 | 0;
   6779         i3 = HEAP32[i4 >> 2] | 0;
   6780         i5 = HEAP32[7176 >> 2] | 0;
   6781         if (i18 >>> 0 < i5 >>> 0) {
   6782          _abort();
   6783         }
   6784         if (i3 >>> 0 < i5 >>> 0) {
   6785          _abort();
   6786         } else {
   6787          HEAP32[i3 + 12 >> 2] = i2;
   6788          HEAP32[i4 >> 2] = i2;
   6789          HEAP32[i24 + (i12 + 8) >> 2] = i3;
   6790          HEAP32[i24 + (i12 + 12) >> 2] = i18;
   6791          HEAP32[i24 + (i12 + 24) >> 2] = 0;
   6792          break;
   6793         }
   6794        } else {
   6795         i32 = i25 + i12 | 0;
   6796         HEAP32[i24 + 4 >> 2] = i32 | 3;
   6797         i32 = i24 + (i32 + 4) | 0;
   6798         HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
   6799        }
   6800       } while (0);
   6801       i32 = i24 + 8 | 0;
   6802       STACKTOP = i1;
   6803       return i32 | 0;
   6804      }
   6805     }
   6806    } else {
   6807     i12 = -1;
   6808    }
   6809   }
   6810  } while (0);
   6811  i18 = HEAP32[7168 >> 2] | 0;
   6812  if (!(i12 >>> 0 > i18 >>> 0)) {
   6813   i3 = i18 - i12 | 0;
   6814   i2 = HEAP32[7180 >> 2] | 0;
   6815   if (i3 >>> 0 > 15) {
   6816    HEAP32[7180 >> 2] = i2 + i12;
   6817    HEAP32[7168 >> 2] = i3;
   6818    HEAP32[i2 + (i12 + 4) >> 2] = i3 | 1;
   6819    HEAP32[i2 + i18 >> 2] = i3;
   6820    HEAP32[i2 + 4 >> 2] = i12 | 3;
   6821   } else {
   6822    HEAP32[7168 >> 2] = 0;
   6823    HEAP32[7180 >> 2] = 0;
   6824    HEAP32[i2 + 4 >> 2] = i18 | 3;
   6825    i32 = i2 + (i18 + 4) | 0;
   6826    HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
   6827   }
   6828   i32 = i2 + 8 | 0;
   6829   STACKTOP = i1;
   6830   return i32 | 0;
   6831  }
   6832  i18 = HEAP32[7172 >> 2] | 0;
   6833  if (i12 >>> 0 < i18 >>> 0) {
   6834   i31 = i18 - i12 | 0;
   6835   HEAP32[7172 >> 2] = i31;
   6836   i32 = HEAP32[7184 >> 2] | 0;
   6837   HEAP32[7184 >> 2] = i32 + i12;
   6838   HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
   6839   HEAP32[i32 + 4 >> 2] = i12 | 3;
   6840   i32 = i32 + 8 | 0;
   6841   STACKTOP = i1;
   6842   return i32 | 0;
   6843  }
   6844  do {
   6845   if ((HEAP32[1908] | 0) == 0) {
   6846    i18 = _sysconf(30) | 0;
   6847    if ((i18 + -1 & i18 | 0) == 0) {
   6848     HEAP32[7640 >> 2] = i18;
   6849     HEAP32[7636 >> 2] = i18;
   6850     HEAP32[7644 >> 2] = -1;
   6851     HEAP32[7648 >> 2] = -1;
   6852     HEAP32[7652 >> 2] = 0;
   6853     HEAP32[7604 >> 2] = 0;
   6854     HEAP32[1908] = (_time(0) | 0) & -16 ^ 1431655768;
   6855     break;
   6856    } else {
   6857     _abort();
   6858    }
   6859   }
   6860  } while (0);
   6861  i20 = i12 + 48 | 0;
   6862  i25 = HEAP32[7640 >> 2] | 0;
   6863  i21 = i12 + 47 | 0;
   6864  i22 = i25 + i21 | 0;
   6865  i25 = 0 - i25 | 0;
   6866  i18 = i22 & i25;
   6867  if (!(i18 >>> 0 > i12 >>> 0)) {
   6868   i32 = 0;
   6869   STACKTOP = i1;
   6870   return i32 | 0;
   6871  }
   6872  i24 = HEAP32[7600 >> 2] | 0;
   6873  if ((i24 | 0) != 0 ? (i31 = HEAP32[7592 >> 2] | 0, i32 = i31 + i18 | 0, i32 >>> 0 <= i31 >>> 0 | i32 >>> 0 > i24 >>> 0) : 0) {
   6874   i32 = 0;
   6875   STACKTOP = i1;
   6876   return i32 | 0;
   6877  }
   6878  L269 : do {
   6879   if ((HEAP32[7604 >> 2] & 4 | 0) == 0) {
   6880    i26 = HEAP32[7184 >> 2] | 0;
   6881    L271 : do {
   6882     if ((i26 | 0) != 0) {
   6883      i24 = 7608 | 0;
   6884      while (1) {
   6885       i27 = HEAP32[i24 >> 2] | 0;
   6886       if (!(i27 >>> 0 > i26 >>> 0) ? (i23 = i24 + 4 | 0, (i27 + (HEAP32[i23 >> 2] | 0) | 0) >>> 0 > i26 >>> 0) : 0) {
   6887        break;
   6888       }
   6889       i24 = HEAP32[i24 + 8 >> 2] | 0;
   6890       if ((i24 | 0) == 0) {
   6891        i13 = 182;
   6892        break L271;
   6893       }
   6894      }
   6895      if ((i24 | 0) != 0) {
   6896       i25 = i22 - (HEAP32[7172 >> 2] | 0) & i25;
   6897       if (i25 >>> 0 < 2147483647) {
   6898        i13 = _sbrk(i25 | 0) | 0;
   6899        i26 = (i13 | 0) == ((HEAP32[i24 >> 2] | 0) + (HEAP32[i23 >> 2] | 0) | 0);
   6900        i22 = i13;
   6901        i24 = i25;
   6902        i23 = i26 ? i13 : -1;
   6903        i25 = i26 ? i25 : 0;
   6904        i13 = 191;
   6905       } else {
   6906        i25 = 0;
   6907       }
   6908      } else {
   6909       i13 = 182;
   6910      }
   6911     } else {
   6912      i13 = 182;
   6913     }
   6914    } while (0);
   6915    do {
   6916     if ((i13 | 0) == 182) {
   6917      i23 = _sbrk(0) | 0;
   6918      if ((i23 | 0) != (-1 | 0)) {
   6919       i24 = i23;
   6920       i22 = HEAP32[7636 >> 2] | 0;
   6921       i25 = i22 + -1 | 0;
   6922       if ((i25 & i24 | 0) == 0) {
   6923        i25 = i18;
   6924       } else {
   6925        i25 = i18 - i24 + (i25 + i24 & 0 - i22) | 0;
   6926       }
   6927       i24 = HEAP32[7592 >> 2] | 0;
   6928       i26 = i24 + i25 | 0;
   6929       if (i25 >>> 0 > i12 >>> 0 & i25 >>> 0 < 2147483647) {
   6930        i22 = HEAP32[7600 >> 2] | 0;
   6931        if ((i22 | 0) != 0 ? i26 >>> 0 <= i24 >>> 0 | i26 >>> 0 > i22 >>> 0 : 0) {
   6932         i25 = 0;
   6933         break;
   6934        }
   6935        i22 = _sbrk(i25 | 0) | 0;
   6936        i13 = (i22 | 0) == (i23 | 0);
   6937        i24 = i25;
   6938        i23 = i13 ? i23 : -1;
   6939        i25 = i13 ? i25 : 0;
   6940        i13 = 191;
   6941       } else {
   6942        i25 = 0;
   6943       }
   6944      } else {
   6945       i25 = 0;
   6946      }
   6947     }
   6948    } while (0);
   6949    L291 : do {
   6950     if ((i13 | 0) == 191) {
   6951      i13 = 0 - i24 | 0;
   6952      if ((i23 | 0) != (-1 | 0)) {
   6953       i17 = i23;
   6954       i14 = i25;
   6955       i13 = 202;
   6956       break L269;
   6957      }
   6958      do {
   6959       if ((i22 | 0) != (-1 | 0) & i24 >>> 0 < 2147483647 & i24 >>> 0 < i20 >>> 0 ? (i19 = HEAP32[7640 >> 2] | 0, i19 = i21 - i24 + i19 & 0 - i19, i19 >>> 0 < 2147483647) : 0) {
   6960        if ((_sbrk(i19 | 0) | 0) == (-1 | 0)) {
   6961         _sbrk(i13 | 0) | 0;
   6962         break L291;
   6963        } else {
   6964         i24 = i19 + i24 | 0;
   6965         break;
   6966        }
   6967       }
   6968      } while (0);
   6969      if ((i22 | 0) != (-1 | 0)) {
   6970       i17 = i22;
   6971       i14 = i24;
   6972       i13 = 202;
   6973       break L269;
   6974      }
   6975     }
   6976    } while (0);
   6977    HEAP32[7604 >> 2] = HEAP32[7604 >> 2] | 4;
   6978    i13 = 199;
   6979   } else {
   6980    i25 = 0;
   6981    i13 = 199;
   6982   }
   6983  } while (0);
   6984  if ((((i13 | 0) == 199 ? i18 >>> 0 < 2147483647 : 0) ? (i17 = _sbrk(i18 | 0) | 0, i16 = _sbrk(0) | 0, (i16 | 0) != (-1 | 0) & (i17 | 0) != (-1 | 0) & i17 >>> 0 < i16 >>> 0) : 0) ? (i15 = i16 - i17 | 0, i14 = i15 >>> 0 > (i12 + 40 | 0) >>> 0, i14) : 0) {
   6985   i14 = i14 ? i15 : i25;
   6986   i13 = 202;
   6987  }
   6988  if ((i13 | 0) == 202) {
   6989   i15 = (HEAP32[7592 >> 2] | 0) + i14 | 0;
   6990   HEAP32[7592 >> 2] = i15;
   6991   if (i15 >>> 0 > (HEAP32[7596 >> 2] | 0) >>> 0) {
   6992    HEAP32[7596 >> 2] = i15;
   6993   }
   6994   i15 = HEAP32[7184 >> 2] | 0;
   6995   L311 : do {
   6996    if ((i15 | 0) != 0) {
   6997     i21 = 7608 | 0;
   6998     while (1) {
   6999      i16 = HEAP32[i21 >> 2] | 0;
   7000      i19 = i21 + 4 | 0;
   7001      i20 = HEAP32[i19 >> 2] | 0;
   7002      if ((i17 | 0) == (i16 + i20 | 0)) {
   7003       i13 = 214;
   7004       break;
   7005      }
   7006      i18 = HEAP32[i21 + 8 >> 2] | 0;
   7007      if ((i18 | 0) == 0) {
   7008       break;
   7009      } else {
   7010       i21 = i18;
   7011      }
   7012     }
   7013     if (((i13 | 0) == 214 ? (HEAP32[i21 + 12 >> 2] & 8 | 0) == 0 : 0) ? i15 >>> 0 >= i16 >>> 0 & i15 >>> 0 < i17 >>> 0 : 0) {
   7014      HEAP32[i19 >> 2] = i20 + i14;
   7015      i2 = (HEAP32[7172 >> 2] | 0) + i14 | 0;
   7016      i3 = i15 + 8 | 0;
   7017      if ((i3 & 7 | 0) == 0) {
   7018       i3 = 0;
   7019      } else {
   7020       i3 = 0 - i3 & 7;
   7021      }
   7022      i32 = i2 - i3 | 0;
   7023      HEAP32[7184 >> 2] = i15 + i3;
   7024      HEAP32[7172 >> 2] = i32;
   7025      HEAP32[i15 + (i3 + 4) >> 2] = i32 | 1;
   7026      HEAP32[i15 + (i2 + 4) >> 2] = 40;
   7027      HEAP32[7188 >> 2] = HEAP32[7648 >> 2];
   7028      break;
   7029     }
   7030     if (i17 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7031      HEAP32[7176 >> 2] = i17;
   7032     }
   7033     i19 = i17 + i14 | 0;
   7034     i16 = 7608 | 0;
   7035     while (1) {
   7036      if ((HEAP32[i16 >> 2] | 0) == (i19 | 0)) {
   7037       i13 = 224;
   7038       break;
   7039      }
   7040      i18 = HEAP32[i16 + 8 >> 2] | 0;
   7041      if ((i18 | 0) == 0) {
   7042       break;
   7043      } else {
   7044       i16 = i18;
   7045      }
   7046     }
   7047     if ((i13 | 0) == 224 ? (HEAP32[i16 + 12 >> 2] & 8 | 0) == 0 : 0) {
   7048      HEAP32[i16 >> 2] = i17;
   7049      i6 = i16 + 4 | 0;
   7050      HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i14;
   7051      i6 = i17 + 8 | 0;
   7052      if ((i6 & 7 | 0) == 0) {
   7053       i6 = 0;
   7054      } else {
   7055       i6 = 0 - i6 & 7;
   7056      }
   7057      i7 = i17 + (i14 + 8) | 0;
   7058      if ((i7 & 7 | 0) == 0) {
   7059       i13 = 0;
   7060      } else {
   7061       i13 = 0 - i7 & 7;
   7062      }
   7063      i15 = i17 + (i13 + i14) | 0;
   7064      i8 = i6 + i12 | 0;
   7065      i7 = i17 + i8 | 0;
   7066      i10 = i15 - (i17 + i6) - i12 | 0;
   7067      HEAP32[i17 + (i6 + 4) >> 2] = i12 | 3;
   7068      L348 : do {
   7069       if ((i15 | 0) != (HEAP32[7184 >> 2] | 0)) {
   7070        if ((i15 | 0) == (HEAP32[7180 >> 2] | 0)) {
   7071         i32 = (HEAP32[7168 >> 2] | 0) + i10 | 0;
   7072         HEAP32[7168 >> 2] = i32;
   7073         HEAP32[7180 >> 2] = i7;
   7074         HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
   7075         HEAP32[i17 + (i32 + i8) >> 2] = i32;
   7076         break;
   7077        }
   7078        i12 = i14 + 4 | 0;
   7079        i18 = HEAP32[i17 + (i12 + i13) >> 2] | 0;
   7080        if ((i18 & 3 | 0) == 1) {
   7081         i11 = i18 & -8;
   7082         i16 = i18 >>> 3;
   7083         do {
   7084          if (!(i18 >>> 0 < 256)) {
   7085           i9 = HEAP32[i17 + ((i13 | 24) + i14) >> 2] | 0;
   7086           i19 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
   7087           do {
   7088            if ((i19 | 0) == (i15 | 0)) {
   7089             i19 = i13 | 16;
   7090             i18 = i17 + (i12 + i19) | 0;
   7091             i16 = HEAP32[i18 >> 2] | 0;
   7092             if ((i16 | 0) == 0) {
   7093              i18 = i17 + (i19 + i14) | 0;
   7094              i16 = HEAP32[i18 >> 2] | 0;
   7095              if ((i16 | 0) == 0) {
   7096               i5 = 0;
   7097               break;
   7098              }
   7099             }
   7100             while (1) {
   7101              i20 = i16 + 20 | 0;
   7102              i19 = HEAP32[i20 >> 2] | 0;
   7103              if ((i19 | 0) != 0) {
   7104               i16 = i19;
   7105               i18 = i20;
   7106               continue;
   7107              }
   7108              i19 = i16 + 16 | 0;
   7109              i20 = HEAP32[i19 >> 2] | 0;
   7110              if ((i20 | 0) == 0) {
   7111               break;
   7112              } else {
   7113               i16 = i20;
   7114               i18 = i19;
   7115              }
   7116             }
   7117             if (i18 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7118              _abort();
   7119             } else {
   7120              HEAP32[i18 >> 2] = 0;
   7121              i5 = i16;
   7122              break;
   7123             }
   7124            } else {
   7125             i18 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
   7126             if (i18 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7127              _abort();
   7128             }
   7129             i16 = i18 + 12 | 0;
   7130             if ((HEAP32[i16 >> 2] | 0) != (i15 | 0)) {
   7131              _abort();
   7132             }
   7133             i20 = i19 + 8 | 0;
   7134             if ((HEAP32[i20 >> 2] | 0) == (i15 | 0)) {
   7135              HEAP32[i16 >> 2] = i19;
   7136              HEAP32[i20 >> 2] = i18;
   7137              i5 = i19;
   7138              break;
   7139             } else {
   7140              _abort();
   7141             }
   7142            }
   7143           } while (0);
   7144           if ((i9 | 0) != 0) {
   7145            i16 = HEAP32[i17 + (i14 + 28 + i13) >> 2] | 0;
   7146            i18 = 7464 + (i16 << 2) | 0;
   7147            if ((i15 | 0) == (HEAP32[i18 >> 2] | 0)) {
   7148             HEAP32[i18 >> 2] = i5;
   7149             if ((i5 | 0) == 0) {
   7150              HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i16);
   7151              break;
   7152             }
   7153            } else {
   7154             if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7155              _abort();
   7156             }
   7157             i16 = i9 + 16 | 0;
   7158             if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
   7159              HEAP32[i16 >> 2] = i5;
   7160             } else {
   7161              HEAP32[i9 + 20 >> 2] = i5;
   7162             }
   7163             if ((i5 | 0) == 0) {
   7164              break;
   7165             }
   7166            }
   7167            if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7168             _abort();
   7169            }
   7170            HEAP32[i5 + 24 >> 2] = i9;
   7171            i15 = i13 | 16;
   7172            i9 = HEAP32[i17 + (i15 + i14) >> 2] | 0;
   7173            do {
   7174             if ((i9 | 0) != 0) {
   7175              if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7176               _abort();
   7177              } else {
   7178               HEAP32[i5 + 16 >> 2] = i9;
   7179               HEAP32[i9 + 24 >> 2] = i5;
   7180               break;
   7181              }
   7182             }
   7183            } while (0);
   7184            i9 = HEAP32[i17 + (i12 + i15) >> 2] | 0;
   7185            if ((i9 | 0) != 0) {
   7186             if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7187              _abort();
   7188             } else {
   7189              HEAP32[i5 + 20 >> 2] = i9;
   7190              HEAP32[i9 + 24 >> 2] = i5;
   7191              break;
   7192             }
   7193            }
   7194           }
   7195          } else {
   7196           i5 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
   7197           i12 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
   7198           i18 = 7200 + (i16 << 1 << 2) | 0;
   7199           if ((i5 | 0) != (i18 | 0)) {
   7200            if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7201             _abort();
   7202            }
   7203            if ((HEAP32[i5 + 12 >> 2] | 0) != (i15 | 0)) {
   7204             _abort();
   7205            }
   7206           }
   7207           if ((i12 | 0) == (i5 | 0)) {
   7208            HEAP32[1790] = HEAP32[1790] & ~(1 << i16);
   7209            break;
   7210           }
   7211           if ((i12 | 0) != (i18 | 0)) {
   7212            if (i12 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7213             _abort();
   7214            }
   7215            i16 = i12 + 8 | 0;
   7216            if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
   7217             i9 = i16;
   7218            } else {
   7219             _abort();
   7220            }
   7221           } else {
   7222            i9 = i12 + 8 | 0;
   7223           }
   7224           HEAP32[i5 + 12 >> 2] = i12;
   7225           HEAP32[i9 >> 2] = i5;
   7226          }
   7227         } while (0);
   7228         i15 = i17 + ((i11 | i13) + i14) | 0;
   7229         i10 = i11 + i10 | 0;
   7230        }
   7231        i5 = i15 + 4 | 0;
   7232        HEAP32[i5 >> 2] = HEAP32[i5 >> 2] & -2;
   7233        HEAP32[i17 + (i8 + 4) >> 2] = i10 | 1;
   7234        HEAP32[i17 + (i10 + i8) >> 2] = i10;
   7235        i5 = i10 >>> 3;
   7236        if (i10 >>> 0 < 256) {
   7237         i10 = i5 << 1;
   7238         i2 = 7200 + (i10 << 2) | 0;
   7239         i9 = HEAP32[1790] | 0;
   7240         i5 = 1 << i5;
   7241         if ((i9 & i5 | 0) != 0) {
   7242          i9 = 7200 + (i10 + 2 << 2) | 0;
   7243          i5 = HEAP32[i9 >> 2] | 0;
   7244          if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7245           _abort();
   7246          } else {
   7247           i3 = i9;
   7248           i4 = i5;
   7249          }
   7250         } else {
   7251          HEAP32[1790] = i9 | i5;
   7252          i3 = 7200 + (i10 + 2 << 2) | 0;
   7253          i4 = i2;
   7254         }
   7255         HEAP32[i3 >> 2] = i7;
   7256         HEAP32[i4 + 12 >> 2] = i7;
   7257         HEAP32[i17 + (i8 + 8) >> 2] = i4;
   7258         HEAP32[i17 + (i8 + 12) >> 2] = i2;
   7259         break;
   7260        }
   7261        i3 = i10 >>> 8;
   7262        if ((i3 | 0) != 0) {
   7263         if (i10 >>> 0 > 16777215) {
   7264          i3 = 31;
   7265         } else {
   7266          i31 = (i3 + 1048320 | 0) >>> 16 & 8;
   7267          i32 = i3 << i31;
   7268          i30 = (i32 + 520192 | 0) >>> 16 & 4;
   7269          i32 = i32 << i30;
   7270          i3 = (i32 + 245760 | 0) >>> 16 & 2;
   7271          i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
   7272          i3 = i10 >>> (i3 + 7 | 0) & 1 | i3 << 1;
   7273         }
   7274        } else {
   7275         i3 = 0;
   7276        }
   7277        i4 = 7464 + (i3 << 2) | 0;
   7278        HEAP32[i17 + (i8 + 28) >> 2] = i3;
   7279        HEAP32[i17 + (i8 + 20) >> 2] = 0;
   7280        HEAP32[i17 + (i8 + 16) >> 2] = 0;
   7281        i9 = HEAP32[7164 >> 2] | 0;
   7282        i5 = 1 << i3;
   7283        if ((i9 & i5 | 0) == 0) {
   7284         HEAP32[7164 >> 2] = i9 | i5;
   7285         HEAP32[i4 >> 2] = i7;
   7286         HEAP32[i17 + (i8 + 24) >> 2] = i4;
   7287         HEAP32[i17 + (i8 + 12) >> 2] = i7;
   7288         HEAP32[i17 + (i8 + 8) >> 2] = i7;
   7289         break;
   7290        }
   7291        i4 = HEAP32[i4 >> 2] | 0;
   7292        if ((i3 | 0) == 31) {
   7293         i3 = 0;
   7294        } else {
   7295         i3 = 25 - (i3 >>> 1) | 0;
   7296        }
   7297        L444 : do {
   7298         if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i10 | 0)) {
   7299          i3 = i10 << i3;
   7300          while (1) {
   7301           i5 = i4 + (i3 >>> 31 << 2) + 16 | 0;
   7302           i9 = HEAP32[i5 >> 2] | 0;
   7303           if ((i9 | 0) == 0) {
   7304            break;
   7305           }
   7306           if ((HEAP32[i9 + 4 >> 2] & -8 | 0) == (i10 | 0)) {
   7307            i2 = i9;
   7308            break L444;
   7309           } else {
   7310            i3 = i3 << 1;
   7311            i4 = i9;
   7312           }
   7313          }
   7314          if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7315           _abort();
   7316          } else {
   7317           HEAP32[i5 >> 2] = i7;
   7318           HEAP32[i17 + (i8 + 24) >> 2] = i4;
   7319           HEAP32[i17 + (i8 + 12) >> 2] = i7;
   7320           HEAP32[i17 + (i8 + 8) >> 2] = i7;
   7321           break L348;
   7322          }
   7323         } else {
   7324          i2 = i4;
   7325         }
   7326        } while (0);
   7327        i4 = i2 + 8 | 0;
   7328        i3 = HEAP32[i4 >> 2] | 0;
   7329        i5 = HEAP32[7176 >> 2] | 0;
   7330        if (i2 >>> 0 < i5 >>> 0) {
   7331         _abort();
   7332        }
   7333        if (i3 >>> 0 < i5 >>> 0) {
   7334         _abort();
   7335        } else {
   7336         HEAP32[i3 + 12 >> 2] = i7;
   7337         HEAP32[i4 >> 2] = i7;
   7338         HEAP32[i17 + (i8 + 8) >> 2] = i3;
   7339         HEAP32[i17 + (i8 + 12) >> 2] = i2;
   7340         HEAP32[i17 + (i8 + 24) >> 2] = 0;
   7341         break;
   7342        }
   7343       } else {
   7344        i32 = (HEAP32[7172 >> 2] | 0) + i10 | 0;
   7345        HEAP32[7172 >> 2] = i32;
   7346        HEAP32[7184 >> 2] = i7;
   7347        HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
   7348       }
   7349      } while (0);
   7350      i32 = i17 + (i6 | 8) | 0;
   7351      STACKTOP = i1;
   7352      return i32 | 0;
   7353     }
   7354     i3 = 7608 | 0;
   7355     while (1) {
   7356      i2 = HEAP32[i3 >> 2] | 0;
   7357      if (!(i2 >>> 0 > i15 >>> 0) ? (i11 = HEAP32[i3 + 4 >> 2] | 0, i10 = i2 + i11 | 0, i10 >>> 0 > i15 >>> 0) : 0) {
   7358       break;
   7359      }
   7360      i3 = HEAP32[i3 + 8 >> 2] | 0;
   7361     }
   7362     i3 = i2 + (i11 + -39) | 0;
   7363     if ((i3 & 7 | 0) == 0) {
   7364      i3 = 0;
   7365     } else {
   7366      i3 = 0 - i3 & 7;
   7367     }
   7368     i2 = i2 + (i11 + -47 + i3) | 0;
   7369     i2 = i2 >>> 0 < (i15 + 16 | 0) >>> 0 ? i15 : i2;
   7370     i3 = i2 + 8 | 0;
   7371     i4 = i17 + 8 | 0;
   7372     if ((i4 & 7 | 0) == 0) {
   7373      i4 = 0;
   7374     } else {
   7375      i4 = 0 - i4 & 7;
   7376     }
   7377     i32 = i14 + -40 - i4 | 0;
   7378     HEAP32[7184 >> 2] = i17 + i4;
   7379     HEAP32[7172 >> 2] = i32;
   7380     HEAP32[i17 + (i4 + 4) >> 2] = i32 | 1;
   7381     HEAP32[i17 + (i14 + -36) >> 2] = 40;
   7382     HEAP32[7188 >> 2] = HEAP32[7648 >> 2];
   7383     HEAP32[i2 + 4 >> 2] = 27;
   7384     HEAP32[i3 + 0 >> 2] = HEAP32[7608 >> 2];
   7385     HEAP32[i3 + 4 >> 2] = HEAP32[7612 >> 2];
   7386     HEAP32[i3 + 8 >> 2] = HEAP32[7616 >> 2];
   7387     HEAP32[i3 + 12 >> 2] = HEAP32[7620 >> 2];
   7388     HEAP32[7608 >> 2] = i17;
   7389     HEAP32[7612 >> 2] = i14;
   7390     HEAP32[7620 >> 2] = 0;
   7391     HEAP32[7616 >> 2] = i3;
   7392     i4 = i2 + 28 | 0;
   7393     HEAP32[i4 >> 2] = 7;
   7394     if ((i2 + 32 | 0) >>> 0 < i10 >>> 0) {
   7395      while (1) {
   7396       i3 = i4 + 4 | 0;
   7397       HEAP32[i3 >> 2] = 7;
   7398       if ((i4 + 8 | 0) >>> 0 < i10 >>> 0) {
   7399        i4 = i3;
   7400       } else {
   7401        break;
   7402       }
   7403      }
   7404     }
   7405     if ((i2 | 0) != (i15 | 0)) {
   7406      i2 = i2 - i15 | 0;
   7407      i3 = i15 + (i2 + 4) | 0;
   7408      HEAP32[i3 >> 2] = HEAP32[i3 >> 2] & -2;
   7409      HEAP32[i15 + 4 >> 2] = i2 | 1;
   7410      HEAP32[i15 + i2 >> 2] = i2;
   7411      i3 = i2 >>> 3;
   7412      if (i2 >>> 0 < 256) {
   7413       i4 = i3 << 1;
   7414       i2 = 7200 + (i4 << 2) | 0;
   7415       i5 = HEAP32[1790] | 0;
   7416       i3 = 1 << i3;
   7417       if ((i5 & i3 | 0) != 0) {
   7418        i4 = 7200 + (i4 + 2 << 2) | 0;
   7419        i3 = HEAP32[i4 >> 2] | 0;
   7420        if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7421         _abort();
   7422        } else {
   7423         i7 = i4;
   7424         i8 = i3;
   7425        }
   7426       } else {
   7427        HEAP32[1790] = i5 | i3;
   7428        i7 = 7200 + (i4 + 2 << 2) | 0;
   7429        i8 = i2;
   7430       }
   7431       HEAP32[i7 >> 2] = i15;
   7432       HEAP32[i8 + 12 >> 2] = i15;
   7433       HEAP32[i15 + 8 >> 2] = i8;
   7434       HEAP32[i15 + 12 >> 2] = i2;
   7435       break;
   7436      }
   7437      i3 = i2 >>> 8;
   7438      if ((i3 | 0) != 0) {
   7439       if (i2 >>> 0 > 16777215) {
   7440        i3 = 31;
   7441       } else {
   7442        i31 = (i3 + 1048320 | 0) >>> 16 & 8;
   7443        i32 = i3 << i31;
   7444        i30 = (i32 + 520192 | 0) >>> 16 & 4;
   7445        i32 = i32 << i30;
   7446        i3 = (i32 + 245760 | 0) >>> 16 & 2;
   7447        i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
   7448        i3 = i2 >>> (i3 + 7 | 0) & 1 | i3 << 1;
   7449       }
   7450      } else {
   7451       i3 = 0;
   7452      }
   7453      i7 = 7464 + (i3 << 2) | 0;
   7454      HEAP32[i15 + 28 >> 2] = i3;
   7455      HEAP32[i15 + 20 >> 2] = 0;
   7456      HEAP32[i15 + 16 >> 2] = 0;
   7457      i4 = HEAP32[7164 >> 2] | 0;
   7458      i5 = 1 << i3;
   7459      if ((i4 & i5 | 0) == 0) {
   7460       HEAP32[7164 >> 2] = i4 | i5;
   7461       HEAP32[i7 >> 2] = i15;
   7462       HEAP32[i15 + 24 >> 2] = i7;
   7463       HEAP32[i15 + 12 >> 2] = i15;
   7464       HEAP32[i15 + 8 >> 2] = i15;
   7465       break;
   7466      }
   7467      i4 = HEAP32[i7 >> 2] | 0;
   7468      if ((i3 | 0) == 31) {
   7469       i3 = 0;
   7470      } else {
   7471       i3 = 25 - (i3 >>> 1) | 0;
   7472      }
   7473      L499 : do {
   7474       if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i2 | 0)) {
   7475        i3 = i2 << i3;
   7476        while (1) {
   7477         i7 = i4 + (i3 >>> 31 << 2) + 16 | 0;
   7478         i5 = HEAP32[i7 >> 2] | 0;
   7479         if ((i5 | 0) == 0) {
   7480          break;
   7481         }
   7482         if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i2 | 0)) {
   7483          i6 = i5;
   7484          break L499;
   7485         } else {
   7486          i3 = i3 << 1;
   7487          i4 = i5;
   7488         }
   7489        }
   7490        if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   7491         _abort();
   7492        } else {
   7493         HEAP32[i7 >> 2] = i15;
   7494         HEAP32[i15 + 24 >> 2] = i4;
   7495         HEAP32[i15 + 12 >> 2] = i15;
   7496         HEAP32[i15 + 8 >> 2] = i15;
   7497         break L311;
   7498        }
   7499       } else {
   7500        i6 = i4;
   7501       }
   7502      } while (0);
   7503      i4 = i6 + 8 | 0;
   7504      i3 = HEAP32[i4 >> 2] | 0;
   7505      i2 = HEAP32[7176 >> 2] | 0;
   7506      if (i6 >>> 0 < i2 >>> 0) {
   7507       _abort();
   7508      }
   7509      if (i3 >>> 0 < i2 >>> 0) {
   7510       _abort();
   7511      } else {
   7512       HEAP32[i3 + 12 >> 2] = i15;
   7513       HEAP32[i4 >> 2] = i15;
   7514       HEAP32[i15 + 8 >> 2] = i3;
   7515       HEAP32[i15 + 12 >> 2] = i6;
   7516       HEAP32[i15 + 24 >> 2] = 0;
   7517       break;
   7518      }
   7519     }
   7520    } else {
   7521     i32 = HEAP32[7176 >> 2] | 0;
   7522     if ((i32 | 0) == 0 | i17 >>> 0 < i32 >>> 0) {
   7523      HEAP32[7176 >> 2] = i17;
   7524     }
   7525     HEAP32[7608 >> 2] = i17;
   7526     HEAP32[7612 >> 2] = i14;
   7527     HEAP32[7620 >> 2] = 0;
   7528     HEAP32[7196 >> 2] = HEAP32[1908];
   7529     HEAP32[7192 >> 2] = -1;
   7530     i2 = 0;
   7531     do {
   7532      i32 = i2 << 1;
   7533      i31 = 7200 + (i32 << 2) | 0;
   7534      HEAP32[7200 + (i32 + 3 << 2) >> 2] = i31;
   7535      HEAP32[7200 + (i32 + 2 << 2) >> 2] = i31;
   7536      i2 = i2 + 1 | 0;
   7537     } while ((i2 | 0) != 32);
   7538     i2 = i17 + 8 | 0;
   7539     if ((i2 & 7 | 0) == 0) {
   7540      i2 = 0;
   7541     } else {
   7542      i2 = 0 - i2 & 7;
   7543     }
   7544     i32 = i14 + -40 - i2 | 0;
   7545     HEAP32[7184 >> 2] = i17 + i2;
   7546     HEAP32[7172 >> 2] = i32;
   7547     HEAP32[i17 + (i2 + 4) >> 2] = i32 | 1;
   7548     HEAP32[i17 + (i14 + -36) >> 2] = 40;
   7549     HEAP32[7188 >> 2] = HEAP32[7648 >> 2];
   7550    }
   7551   } while (0);
   7552   i2 = HEAP32[7172 >> 2] | 0;
   7553   if (i2 >>> 0 > i12 >>> 0) {
   7554    i31 = i2 - i12 | 0;
   7555    HEAP32[7172 >> 2] = i31;
   7556    i32 = HEAP32[7184 >> 2] | 0;
   7557    HEAP32[7184 >> 2] = i32 + i12;
   7558    HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
   7559    HEAP32[i32 + 4 >> 2] = i12 | 3;
   7560    i32 = i32 + 8 | 0;
   7561    STACKTOP = i1;
   7562    return i32 | 0;
   7563   }
   7564  }
   7565  HEAP32[(___errno_location() | 0) >> 2] = 12;
   7566  i32 = 0;
   7567  STACKTOP = i1;
   7568  return i32 | 0;
   7569 }
   7570 function __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS7_(i12, i2, i16, i5, i8, i6) {
   7571  i12 = i12 | 0;
   7572  i2 = i2 | 0;
   7573  i16 = i16 | 0;
   7574  i5 = i5 | 0;
   7575  i8 = i8 | 0;
   7576  i6 = i6 | 0;
   7577  var i1 = 0, i3 = 0, i4 = 0, i7 = 0, i9 = 0, i10 = 0, i11 = 0, i13 = 0, i14 = 0, i15 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, i29 = 0, d30 = 0.0, d31 = 0.0, d32 = 0.0, d33 = 0.0, i34 = 0, i35 = 0, d36 = 0.0, d37 = 0.0, i38 = 0, d39 = 0.0, i40 = 0, i41 = 0;
   7578  i1 = STACKTOP;
   7579  STACKTOP = STACKTOP + 144 | 0;
   7580  i18 = i1 + 128 | 0;
   7581  i11 = i1 + 24 | 0;
   7582  i9 = i1 + 72 | 0;
   7583  i10 = i1 + 48 | 0;
   7584  i3 = i1;
   7585  i4 = i12 + 132 | 0;
   7586  d28 = +HEAPF32[i5 + 12 >> 2];
   7587  d37 = +HEAPF32[i6 + 8 >> 2];
   7588  d23 = +HEAPF32[i5 + 8 >> 2];
   7589  d27 = +HEAPF32[i6 + 12 >> 2];
   7590  d22 = d28 * d37 - d23 * d27;
   7591  d27 = d37 * d23 + d28 * d27;
   7592  d37 = +d22;
   7593  d26 = +d27;
   7594  d25 = +HEAPF32[i6 >> 2] - +HEAPF32[i5 >> 2];
   7595  d36 = +HEAPF32[i6 + 4 >> 2] - +HEAPF32[i5 + 4 >> 2];
   7596  d24 = d28 * d25 + d23 * d36;
   7597  d25 = d28 * d36 - d23 * d25;
   7598  d23 = +d24;
   7599  d36 = +d25;
   7600  i5 = i4;
   7601  HEAPF32[i5 >> 2] = d23;
   7602  HEAPF32[i5 + 4 >> 2] = d36;
   7603  i5 = i12 + 140 | 0;
   7604  HEAPF32[i5 >> 2] = d37;
   7605  HEAPF32[i5 + 4 >> 2] = d26;
   7606  i5 = i12 + 144 | 0;
   7607  d26 = +HEAPF32[i8 + 12 >> 2];
   7608  i7 = i12 + 140 | 0;
   7609  d37 = +HEAPF32[i8 + 16 >> 2];
   7610  d24 = d24 + (d27 * d26 - d22 * d37);
   7611  i6 = i12 + 136 | 0;
   7612  d25 = d26 * d22 + d27 * d37 + d25;
   7613  d37 = +d24;
   7614  d27 = +d25;
   7615  i34 = i12 + 148 | 0;
   7616  HEAPF32[i34 >> 2] = d37;
   7617  HEAPF32[i34 + 4 >> 2] = d27;
   7618  i34 = i16 + 28 | 0;
   7619  i29 = HEAP32[i34 >> 2] | 0;
   7620  i34 = HEAP32[i34 + 4 >> 2] | 0;
   7621  i14 = i12 + 156 | 0;
   7622  HEAP32[i14 >> 2] = i29;
   7623  HEAP32[i14 + 4 >> 2] = i34;
   7624  i14 = i12 + 164 | 0;
   7625  i17 = i16 + 12 | 0;
   7626  i40 = HEAP32[i17 >> 2] | 0;
   7627  i17 = HEAP32[i17 + 4 >> 2] | 0;
   7628  i13 = i14;
   7629  HEAP32[i13 >> 2] = i40;
   7630  HEAP32[i13 + 4 >> 2] = i17;
   7631  i13 = i12 + 172 | 0;
   7632  i20 = i16 + 20 | 0;
   7633  i41 = HEAP32[i20 >> 2] | 0;
   7634  i20 = HEAP32[i20 + 4 >> 2] | 0;
   7635  i38 = i13;
   7636  HEAP32[i38 >> 2] = i41;
   7637  HEAP32[i38 + 4 >> 2] = i20;
   7638  i38 = i16 + 36 | 0;
   7639  i35 = HEAP32[i38 >> 2] | 0;
   7640  i38 = HEAP32[i38 + 4 >> 2] | 0;
   7641  i19 = i12 + 180 | 0;
   7642  HEAP32[i19 >> 2] = i35;
   7643  HEAP32[i19 + 4 >> 2] = i38;
   7644  i19 = (HEAP8[i16 + 44 | 0] | 0) != 0;
   7645  i21 = (HEAP8[i16 + 45 | 0] | 0) != 0;
   7646  d27 = (HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
   7647  d37 = (HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]);
   7648  d22 = d27 - d37;
   7649  d26 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]);
   7650  i20 = i12 + 168 | 0;
   7651  d36 = (HEAP32[tempDoublePtr >> 2] = i17, +HEAPF32[tempDoublePtr >> 2]);
   7652  d23 = d26 - d36;
   7653  d28 = +Math_sqrt(+(d22 * d22 + d23 * d23));
   7654  d33 = (HEAP32[tempDoublePtr >> 2] = i29, +HEAPF32[tempDoublePtr >> 2]);
   7655  d32 = (HEAP32[tempDoublePtr >> 2] = i34, +HEAPF32[tempDoublePtr >> 2]);
   7656  d31 = (HEAP32[tempDoublePtr >> 2] = i35, +HEAPF32[tempDoublePtr >> 2]);
   7657  d30 = (HEAP32[tempDoublePtr >> 2] = i38, +HEAPF32[tempDoublePtr >> 2]);
   7658  if (!(d28 < 1.1920928955078125e-7)) {
   7659   d39 = 1.0 / d28;
   7660   d22 = d22 * d39;
   7661   d23 = d23 * d39;
   7662  }
   7663  i16 = i12 + 196 | 0;
   7664  d28 = -d22;
   7665  HEAPF32[i16 >> 2] = d23;
   7666  i17 = i12 + 200 | 0;
   7667  HEAPF32[i17 >> 2] = d28;
   7668  d28 = (d24 - d37) * d23 + (d25 - d36) * d28;
   7669  if (i19) {
   7670   d37 = d37 - d33;
   7671   d36 = d36 - d32;
   7672   d39 = +Math_sqrt(+(d37 * d37 + d36 * d36));
   7673   if (!(d39 < 1.1920928955078125e-7)) {
   7674    d39 = 1.0 / d39;
   7675    d37 = d37 * d39;
   7676    d36 = d36 * d39;
   7677   }
   7678   d39 = -d37;
   7679   HEAPF32[i12 + 188 >> 2] = d36;
   7680   HEAPF32[i12 + 192 >> 2] = d39;
   7681   i29 = d23 * d37 - d22 * d36 >= 0.0;
   7682   d32 = (d24 - d33) * d36 + (d25 - d32) * d39;
   7683  } else {
   7684   i29 = 0;
   7685   d32 = 0.0;
   7686  }
   7687  L10 : do {
   7688   if (!i21) {
   7689    if (!i19) {
   7690     i41 = d28 >= 0.0;
   7691     HEAP8[i12 + 248 | 0] = i41 & 1;
   7692     i19 = i12 + 212 | 0;
   7693     if (i41) {
   7694      i15 = 64;
   7695      break;
   7696     } else {
   7697      i15 = 65;
   7698      break;
   7699     }
   7700    }
   7701    i19 = d32 >= 0.0;
   7702    if (i29) {
   7703     if (!i19) {
   7704      i41 = d28 >= 0.0;
   7705      HEAP8[i12 + 248 | 0] = i41 & 1;
   7706      i19 = i12 + 212 | 0;
   7707      if (!i41) {
   7708       d37 = +-d23;
   7709       d39 = +d22;
   7710       i38 = i19;
   7711       HEAPF32[i38 >> 2] = d37;
   7712       HEAPF32[i38 + 4 >> 2] = d39;
   7713       i38 = i16;
   7714       i40 = HEAP32[i38 >> 2] | 0;
   7715       i38 = HEAP32[i38 + 4 >> 2] | 0;
   7716       i41 = i12 + 228 | 0;
   7717       HEAP32[i41 >> 2] = i40;
   7718       HEAP32[i41 + 4 >> 2] = i38;
   7719       i41 = i12 + 236 | 0;
   7720       HEAPF32[i41 >> 2] = -(HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]);
   7721       HEAPF32[i41 + 4 >> 2] = d39;
   7722       break;
   7723      }
   7724     } else {
   7725      HEAP8[i12 + 248 | 0] = 1;
   7726      i19 = i12 + 212 | 0;
   7727     }
   7728     i41 = i16;
   7729     i40 = HEAP32[i41 + 4 >> 2] | 0;
   7730     i38 = i19;
   7731     HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
   7732     HEAP32[i38 + 4 >> 2] = i40;
   7733     i38 = i12 + 188 | 0;
   7734     i40 = HEAP32[i38 + 4 >> 2] | 0;
   7735     i41 = i12 + 228 | 0;
   7736     HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   7737     HEAP32[i41 + 4 >> 2] = i40;
   7738     d37 = +-+HEAPF32[i16 >> 2];
   7739     d39 = +-+HEAPF32[i17 >> 2];
   7740     i41 = i12 + 236 | 0;
   7741     HEAPF32[i41 >> 2] = d37;
   7742     HEAPF32[i41 + 4 >> 2] = d39;
   7743     break;
   7744    } else {
   7745     if (i19) {
   7746      i41 = d28 >= 0.0;
   7747      HEAP8[i12 + 248 | 0] = i41 & 1;
   7748      i19 = i12 + 212 | 0;
   7749      if (i41) {
   7750       i38 = i16;
   7751       i41 = HEAP32[i38 >> 2] | 0;
   7752       i38 = HEAP32[i38 + 4 >> 2] | 0;
   7753       i40 = i19;
   7754       HEAP32[i40 >> 2] = i41;
   7755       HEAP32[i40 + 4 >> 2] = i38;
   7756       i40 = i12 + 228 | 0;
   7757       HEAP32[i40 >> 2] = i41;
   7758       HEAP32[i40 + 4 >> 2] = i38;
   7759       d37 = +-(HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
   7760       d39 = +d22;
   7761       i41 = i12 + 236 | 0;
   7762       HEAPF32[i41 >> 2] = d37;
   7763       HEAPF32[i41 + 4 >> 2] = d39;
   7764       break;
   7765      }
   7766     } else {
   7767      HEAP8[i12 + 248 | 0] = 0;
   7768      i19 = i12 + 212 | 0;
   7769     }
   7770     d39 = +-d23;
   7771     d37 = +d22;
   7772     i38 = i19;
   7773     HEAPF32[i38 >> 2] = d39;
   7774     HEAPF32[i38 + 4 >> 2] = d37;
   7775     i38 = i16;
   7776     i40 = HEAP32[i38 + 4 >> 2] | 0;
   7777     i41 = i12 + 228 | 0;
   7778     HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   7779     HEAP32[i41 + 4 >> 2] = i40;
   7780     d37 = +-+HEAPF32[i12 + 188 >> 2];
   7781     d39 = +-+HEAPF32[i12 + 192 >> 2];
   7782     i41 = i12 + 236 | 0;
   7783     HEAPF32[i41 >> 2] = d37;
   7784     HEAPF32[i41 + 4 >> 2] = d39;
   7785     break;
   7786    }
   7787   } else {
   7788    d33 = d31 - d27;
   7789    d31 = d30 - d26;
   7790    d30 = +Math_sqrt(+(d33 * d33 + d31 * d31));
   7791    if (d30 < 1.1920928955078125e-7) {
   7792     d30 = d33;
   7793    } else {
   7794     d39 = 1.0 / d30;
   7795     d30 = d33 * d39;
   7796     d31 = d31 * d39;
   7797    }
   7798    d39 = -d30;
   7799    i34 = i12 + 204 | 0;
   7800    HEAPF32[i34 >> 2] = d31;
   7801    i35 = i12 + 208 | 0;
   7802    HEAPF32[i35 >> 2] = d39;
   7803    i38 = d22 * d31 - d23 * d30 > 0.0;
   7804    d24 = (d24 - d27) * d31 + (d25 - d26) * d39;
   7805    if (!i19) {
   7806     i19 = d28 >= 0.0;
   7807     if (!i21) {
   7808      HEAP8[i12 + 248 | 0] = i19 & 1;
   7809      i15 = i12 + 212 | 0;
   7810      if (i19) {
   7811       i19 = i15;
   7812       i15 = 64;
   7813       break;
   7814      } else {
   7815       i19 = i15;
   7816       i15 = 65;
   7817       break;
   7818      }
   7819     }
   7820     if (i38) {
   7821      if (!i19) {
   7822       i41 = d24 >= 0.0;
   7823       HEAP8[i12 + 248 | 0] = i41 & 1;
   7824       i19 = i12 + 212 | 0;
   7825       if (!i41) {
   7826        d37 = +-d23;
   7827        d39 = +d22;
   7828        i38 = i19;
   7829        HEAPF32[i38 >> 2] = d37;
   7830        HEAPF32[i38 + 4 >> 2] = d39;
   7831        i38 = i12 + 228 | 0;
   7832        HEAPF32[i38 >> 2] = d37;
   7833        HEAPF32[i38 + 4 >> 2] = d39;
   7834        i38 = i16;
   7835        i40 = HEAP32[i38 + 4 >> 2] | 0;
   7836        i41 = i12 + 236 | 0;
   7837        HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   7838        HEAP32[i41 + 4 >> 2] = i40;
   7839        break;
   7840       }
   7841      } else {
   7842       HEAP8[i12 + 248 | 0] = 1;
   7843       i19 = i12 + 212 | 0;
   7844      }
   7845      i41 = i16;
   7846      i40 = HEAP32[i41 + 4 >> 2] | 0;
   7847      i38 = i19;
   7848      HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
   7849      HEAP32[i38 + 4 >> 2] = i40;
   7850      d37 = +-+HEAPF32[i16 >> 2];
   7851      d39 = +-+HEAPF32[i17 >> 2];
   7852      i38 = i12 + 228 | 0;
   7853      HEAPF32[i38 >> 2] = d37;
   7854      HEAPF32[i38 + 4 >> 2] = d39;
   7855      i38 = i12 + 204 | 0;
   7856      i40 = HEAP32[i38 + 4 >> 2] | 0;
   7857      i41 = i12 + 236 | 0;
   7858      HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   7859      HEAP32[i41 + 4 >> 2] = i40;
   7860      break;
   7861     } else {
   7862      if (i19) {
   7863       i41 = d24 >= 0.0;
   7864       HEAP8[i12 + 248 | 0] = i41 & 1;
   7865       i19 = i12 + 212 | 0;
   7866       if (i41) {
   7867        i40 = i16;
   7868        i38 = HEAP32[i40 >> 2] | 0;
   7869        i40 = HEAP32[i40 + 4 >> 2] | 0;
   7870        i41 = i19;
   7871        HEAP32[i41 >> 2] = i38;
   7872        HEAP32[i41 + 4 >> 2] = i40;
   7873        d37 = +-(HEAP32[tempDoublePtr >> 2] = i38, +HEAPF32[tempDoublePtr >> 2]);
   7874        d39 = +d22;
   7875        i41 = i12 + 228 | 0;
   7876        HEAPF32[i41 >> 2] = d37;
   7877        HEAPF32[i41 + 4 >> 2] = d39;
   7878        i41 = i12 + 236 | 0;
   7879        HEAP32[i41 >> 2] = i38;
   7880        HEAP32[i41 + 4 >> 2] = i40;
   7881        break;
   7882       }
   7883      } else {
   7884       HEAP8[i12 + 248 | 0] = 0;
   7885       i19 = i12 + 212 | 0;
   7886      }
   7887      d39 = +-d23;
   7888      d37 = +d22;
   7889      i38 = i19;
   7890      HEAPF32[i38 >> 2] = d39;
   7891      HEAPF32[i38 + 4 >> 2] = d37;
   7892      d37 = +-+HEAPF32[i12 + 204 >> 2];
   7893      d39 = +-+HEAPF32[i12 + 208 >> 2];
   7894      i38 = i12 + 228 | 0;
   7895      HEAPF32[i38 >> 2] = d37;
   7896      HEAPF32[i38 + 4 >> 2] = d39;
   7897      i38 = i16;
   7898      i40 = HEAP32[i38 + 4 >> 2] | 0;
   7899      i41 = i12 + 236 | 0;
   7900      HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   7901      HEAP32[i41 + 4 >> 2] = i40;
   7902      break;
   7903     }
   7904    }
   7905    if (i29 & i38) {
   7906     if (!(d32 >= 0.0) & !(d28 >= 0.0)) {
   7907      i41 = d24 >= 0.0;
   7908      HEAP8[i12 + 248 | 0] = i41 & 1;
   7909      i19 = i12 + 212 | 0;
   7910      if (!i41) {
   7911       d37 = +-d23;
   7912       d39 = +d22;
   7913       i41 = i19;
   7914       HEAPF32[i41 >> 2] = d37;
   7915       HEAPF32[i41 + 4 >> 2] = d39;
   7916       i41 = i12 + 228 | 0;
   7917       HEAPF32[i41 >> 2] = d37;
   7918       HEAPF32[i41 + 4 >> 2] = d39;
   7919       i41 = i12 + 236 | 0;
   7920       HEAPF32[i41 >> 2] = d37;
   7921       HEAPF32[i41 + 4 >> 2] = d39;
   7922       break;
   7923      }
   7924     } else {
   7925      HEAP8[i12 + 248 | 0] = 1;
   7926      i19 = i12 + 212 | 0;
   7927     }
   7928     i38 = i16;
   7929     i40 = HEAP32[i38 + 4 >> 2] | 0;
   7930     i41 = i19;
   7931     HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   7932     HEAP32[i41 + 4 >> 2] = i40;
   7933     i41 = i12 + 188 | 0;
   7934     i40 = HEAP32[i41 + 4 >> 2] | 0;
   7935     i38 = i12 + 228 | 0;
   7936     HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
   7937     HEAP32[i38 + 4 >> 2] = i40;
   7938     i38 = i12 + 204 | 0;
   7939     i40 = HEAP32[i38 + 4 >> 2] | 0;
   7940     i41 = i12 + 236 | 0;
   7941     HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   7942     HEAP32[i41 + 4 >> 2] = i40;
   7943     break;
   7944    }
   7945    if (i29) {
   7946     do {
   7947      if (!(d32 >= 0.0)) {
   7948       if (d28 >= 0.0) {
   7949        i41 = d24 >= 0.0;
   7950        HEAP8[i12 + 248 | 0] = i41 & 1;
   7951        i19 = i12 + 212 | 0;
   7952        if (i41) {
   7953         break;
   7954        }
   7955       } else {
   7956        HEAP8[i12 + 248 | 0] = 0;
   7957        i19 = i12 + 212 | 0;
   7958       }
   7959       d37 = +-d23;
   7960       d39 = +d22;
   7961       i41 = i19;
   7962       HEAPF32[i41 >> 2] = d37;
   7963       HEAPF32[i41 + 4 >> 2] = d39;
   7964       d39 = +-+HEAPF32[i34 >> 2];
   7965       d37 = +-+HEAPF32[i35 >> 2];
   7966       i41 = i12 + 228 | 0;
   7967       HEAPF32[i41 >> 2] = d39;
   7968       HEAPF32[i41 + 4 >> 2] = d37;
   7969       d37 = +-+HEAPF32[i16 >> 2];
   7970       d39 = +-+HEAPF32[i17 >> 2];
   7971       i41 = i12 + 236 | 0;
   7972       HEAPF32[i41 >> 2] = d37;
   7973       HEAPF32[i41 + 4 >> 2] = d39;
   7974       break L10;
   7975      } else {
   7976       HEAP8[i12 + 248 | 0] = 1;
   7977       i19 = i12 + 212 | 0;
   7978      }
   7979     } while (0);
   7980     i38 = i16;
   7981     i40 = HEAP32[i38 + 4 >> 2] | 0;
   7982     i41 = i19;
   7983     HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   7984     HEAP32[i41 + 4 >> 2] = i40;
   7985     i41 = i12 + 188 | 0;
   7986     i40 = HEAP32[i41 + 4 >> 2] | 0;
   7987     i38 = i12 + 228 | 0;
   7988     HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
   7989     HEAP32[i38 + 4 >> 2] = i40;
   7990     i38 = i16;
   7991     i40 = HEAP32[i38 + 4 >> 2] | 0;
   7992     i41 = i12 + 236 | 0;
   7993     HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   7994     HEAP32[i41 + 4 >> 2] = i40;
   7995     break;
   7996    }
   7997    if (!i38) {
   7998     if (!(!(d32 >= 0.0) | !(d28 >= 0.0))) {
   7999      i41 = d24 >= 0.0;
   8000      HEAP8[i12 + 248 | 0] = i41 & 1;
   8001      i19 = i12 + 212 | 0;
   8002      if (i41) {
   8003       i40 = i16;
   8004       i38 = HEAP32[i40 >> 2] | 0;
   8005       i40 = HEAP32[i40 + 4 >> 2] | 0;
   8006       i41 = i19;
   8007       HEAP32[i41 >> 2] = i38;
   8008       HEAP32[i41 + 4 >> 2] = i40;
   8009       i41 = i12 + 228 | 0;
   8010       HEAP32[i41 >> 2] = i38;
   8011       HEAP32[i41 + 4 >> 2] = i40;
   8012       i41 = i12 + 236 | 0;
   8013       HEAP32[i41 >> 2] = i38;
   8014       HEAP32[i41 + 4 >> 2] = i40;
   8015       break;
   8016      }
   8017     } else {
   8018      HEAP8[i12 + 248 | 0] = 0;
   8019      i19 = i12 + 212 | 0;
   8020     }
   8021     d37 = +-d23;
   8022     d39 = +d22;
   8023     i41 = i19;
   8024     HEAPF32[i41 >> 2] = d37;
   8025     HEAPF32[i41 + 4 >> 2] = d39;
   8026     d39 = +-+HEAPF32[i34 >> 2];
   8027     d37 = +-+HEAPF32[i35 >> 2];
   8028     i41 = i12 + 228 | 0;
   8029     HEAPF32[i41 >> 2] = d39;
   8030     HEAPF32[i41 + 4 >> 2] = d37;
   8031     d37 = +-+HEAPF32[i12 + 188 >> 2];
   8032     d39 = +-+HEAPF32[i12 + 192 >> 2];
   8033     i41 = i12 + 236 | 0;
   8034     HEAPF32[i41 >> 2] = d37;
   8035     HEAPF32[i41 + 4 >> 2] = d39;
   8036     break;
   8037    }
   8038    do {
   8039     if (!(d24 >= 0.0)) {
   8040      if (d32 >= 0.0) {
   8041       i41 = d28 >= 0.0;
   8042       HEAP8[i12 + 248 | 0] = i41 & 1;
   8043       i19 = i12 + 212 | 0;
   8044       if (i41) {
   8045        break;
   8046       }
   8047      } else {
   8048       HEAP8[i12 + 248 | 0] = 0;
   8049       i19 = i12 + 212 | 0;
   8050      }
   8051      d37 = +-d23;
   8052      d39 = +d22;
   8053      i41 = i19;
   8054      HEAPF32[i41 >> 2] = d37;
   8055      HEAPF32[i41 + 4 >> 2] = d39;
   8056      d39 = +-+HEAPF32[i16 >> 2];
   8057      d37 = +-+HEAPF32[i17 >> 2];
   8058      i41 = i12 + 228 | 0;
   8059      HEAPF32[i41 >> 2] = d39;
   8060      HEAPF32[i41 + 4 >> 2] = d37;
   8061      d37 = +-+HEAPF32[i12 + 188 >> 2];
   8062      d39 = +-+HEAPF32[i12 + 192 >> 2];
   8063      i41 = i12 + 236 | 0;
   8064      HEAPF32[i41 >> 2] = d37;
   8065      HEAPF32[i41 + 4 >> 2] = d39;
   8066      break L10;
   8067     } else {
   8068      HEAP8[i12 + 248 | 0] = 1;
   8069      i19 = i12 + 212 | 0;
   8070     }
   8071    } while (0);
   8072    i38 = i16;
   8073    i40 = HEAP32[i38 + 4 >> 2] | 0;
   8074    i41 = i19;
   8075    HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   8076    HEAP32[i41 + 4 >> 2] = i40;
   8077    i41 = i16;
   8078    i40 = HEAP32[i41 + 4 >> 2] | 0;
   8079    i38 = i12 + 228 | 0;
   8080    HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
   8081    HEAP32[i38 + 4 >> 2] = i40;
   8082    i38 = i12 + 204 | 0;
   8083    i40 = HEAP32[i38 + 4 >> 2] | 0;
   8084    i41 = i12 + 236 | 0;
   8085    HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   8086    HEAP32[i41 + 4 >> 2] = i40;
   8087   }
   8088  } while (0);
   8089  if ((i15 | 0) == 64) {
   8090   i38 = i16;
   8091   i41 = HEAP32[i38 >> 2] | 0;
   8092   i38 = HEAP32[i38 + 4 >> 2] | 0;
   8093   i40 = i19;
   8094   HEAP32[i40 >> 2] = i41;
   8095   HEAP32[i40 + 4 >> 2] = i38;
   8096   d37 = +-(HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
   8097   d39 = +d22;
   8098   i41 = i12 + 228 | 0;
   8099   HEAPF32[i41 >> 2] = d37;
   8100   HEAPF32[i41 + 4 >> 2] = d39;
   8101   i41 = i12 + 236 | 0;
   8102   HEAPF32[i41 >> 2] = d37;
   8103   HEAPF32[i41 + 4 >> 2] = d39;
   8104  } else if ((i15 | 0) == 65) {
   8105   d37 = +-d23;
   8106   d39 = +d22;
   8107   i40 = i19;
   8108   HEAPF32[i40 >> 2] = d37;
   8109   HEAPF32[i40 + 4 >> 2] = d39;
   8110   i40 = i16;
   8111   i38 = HEAP32[i40 >> 2] | 0;
   8112   i40 = HEAP32[i40 + 4 >> 2] | 0;
   8113   i41 = i12 + 228 | 0;
   8114   HEAP32[i41 >> 2] = i38;
   8115   HEAP32[i41 + 4 >> 2] = i40;
   8116   i41 = i12 + 236 | 0;
   8117   HEAP32[i41 >> 2] = i38;
   8118   HEAP32[i41 + 4 >> 2] = i40;
   8119  }
   8120  i21 = i8 + 148 | 0;
   8121  i34 = i12 + 128 | 0;
   8122  HEAP32[i34 >> 2] = HEAP32[i21 >> 2];
   8123  if ((HEAP32[i21 >> 2] | 0) > 0) {
   8124   i19 = 0;
   8125   do {
   8126    d33 = +HEAPF32[i5 >> 2];
   8127    d37 = +HEAPF32[i8 + (i19 << 3) + 20 >> 2];
   8128    d39 = +HEAPF32[i7 >> 2];
   8129    d36 = +HEAPF32[i8 + (i19 << 3) + 24 >> 2];
   8130    d32 = +(+HEAPF32[i4 >> 2] + (d33 * d37 - d39 * d36));
   8131    d36 = +(d37 * d39 + d33 * d36 + +HEAPF32[i6 >> 2]);
   8132    i41 = i12 + (i19 << 3) | 0;
   8133    HEAPF32[i41 >> 2] = d32;
   8134    HEAPF32[i41 + 4 >> 2] = d36;
   8135    d36 = +HEAPF32[i5 >> 2];
   8136    d32 = +HEAPF32[i8 + (i19 << 3) + 84 >> 2];
   8137    d33 = +HEAPF32[i7 >> 2];
   8138    d39 = +HEAPF32[i8 + (i19 << 3) + 88 >> 2];
   8139    d37 = +(d36 * d32 - d33 * d39);
   8140    d39 = +(d32 * d33 + d36 * d39);
   8141    i41 = i12 + (i19 << 3) + 64 | 0;
   8142    HEAPF32[i41 >> 2] = d37;
   8143    HEAPF32[i41 + 4 >> 2] = d39;
   8144    i19 = i19 + 1 | 0;
   8145   } while ((i19 | 0) < (HEAP32[i21 >> 2] | 0));
   8146  }
   8147  i21 = i12 + 244 | 0;
   8148  HEAPF32[i21 >> 2] = .019999999552965164;
   8149  i19 = i2 + 60 | 0;
   8150  HEAP32[i19 >> 2] = 0;
   8151  i29 = i12 + 248 | 0;
   8152  i35 = HEAP32[i34 >> 2] | 0;
   8153  if ((i35 | 0) <= 0) {
   8154   STACKTOP = i1;
   8155   return;
   8156  }
   8157  d23 = +HEAPF32[i12 + 164 >> 2];
   8158  d26 = +HEAPF32[i20 >> 2];
   8159  d24 = +HEAPF32[i12 + 212 >> 2];
   8160  d27 = +HEAPF32[i12 + 216 >> 2];
   8161  d22 = 3.4028234663852886e+38;
   8162  i20 = 0;
   8163  do {
   8164   d25 = d24 * (+HEAPF32[i12 + (i20 << 3) >> 2] - d23) + d27 * (+HEAPF32[i12 + (i20 << 3) + 4 >> 2] - d26);
   8165   d22 = d25 < d22 ? d25 : d22;
   8166   i20 = i20 + 1 | 0;
   8167  } while ((i20 | 0) != (i35 | 0));
   8168  if (d22 > .019999999552965164) {
   8169   STACKTOP = i1;
   8170   return;
   8171  }
   8172  __ZN12b2EPCollider24ComputePolygonSeparationEv(i18, i12);
   8173  i20 = HEAP32[i18 >> 2] | 0;
   8174  if ((i20 | 0) != 0) {
   8175   d23 = +HEAPF32[i18 + 8 >> 2];
   8176   if (d23 > +HEAPF32[i21 >> 2]) {
   8177    STACKTOP = i1;
   8178    return;
   8179   }
   8180   if (d23 > d22 * .9800000190734863 + .0010000000474974513) {
   8181    i18 = HEAP32[i18 + 4 >> 2] | 0;
   8182    i35 = i2 + 56 | 0;
   8183    if ((i20 | 0) == 1) {
   8184     i18 = i11;
   8185     i15 = 77;
   8186    } else {
   8187     HEAP32[i35 >> 2] = 2;
   8188     i40 = i14;
   8189     i41 = HEAP32[i40 + 4 >> 2] | 0;
   8190     i38 = i11;
   8191     HEAP32[i38 >> 2] = HEAP32[i40 >> 2];
   8192     HEAP32[i38 + 4 >> 2] = i41;
   8193     i38 = i11 + 8 | 0;
   8194     HEAP8[i38] = 0;
   8195     i41 = i18 & 255;
   8196     HEAP8[i38 + 1 | 0] = i41;
   8197     HEAP8[i38 + 2 | 0] = 0;
   8198     HEAP8[i38 + 3 | 0] = 1;
   8199     i38 = i13;
   8200     i40 = HEAP32[i38 + 4 >> 2] | 0;
   8201     i13 = i11 + 12 | 0;
   8202     HEAP32[i13 >> 2] = HEAP32[i38 >> 2];
   8203     HEAP32[i13 + 4 >> 2] = i40;
   8204     i13 = i11 + 20 | 0;
   8205     HEAP8[i13] = 0;
   8206     HEAP8[i13 + 1 | 0] = i41;
   8207     HEAP8[i13 + 2 | 0] = 0;
   8208     HEAP8[i13 + 3 | 0] = 1;
   8209     HEAP32[i9 >> 2] = i18;
   8210     i13 = i18 + 1 | 0;
   8211     i16 = (i13 | 0) < (HEAP32[i34 >> 2] | 0) ? i13 : 0;
   8212     HEAP32[i9 + 4 >> 2] = i16;
   8213     i17 = i12 + (i18 << 3) | 0;
   8214     i13 = HEAP32[i17 >> 2] | 0;
   8215     i17 = HEAP32[i17 + 4 >> 2] | 0;
   8216     i29 = i9 + 8 | 0;
   8217     HEAP32[i29 >> 2] = i13;
   8218     HEAP32[i29 + 4 >> 2] = i17;
   8219     i16 = i12 + (i16 << 3) | 0;
   8220     i29 = HEAP32[i16 >> 2] | 0;
   8221     i16 = HEAP32[i16 + 4 >> 2] | 0;
   8222     i20 = i9 + 16 | 0;
   8223     HEAP32[i20 >> 2] = i29;
   8224     HEAP32[i20 + 4 >> 2] = i16;
   8225     i20 = i12 + (i18 << 3) + 64 | 0;
   8226     i12 = HEAP32[i20 >> 2] | 0;
   8227     i20 = HEAP32[i20 + 4 >> 2] | 0;
   8228     i14 = i9 + 24 | 0;
   8229     HEAP32[i14 >> 2] = i12;
   8230     HEAP32[i14 + 4 >> 2] = i20;
   8231     i14 = 0;
   8232    }
   8233   } else {
   8234    i15 = 75;
   8235   }
   8236  } else {
   8237   i15 = 75;
   8238  }
   8239  if ((i15 | 0) == 75) {
   8240   i18 = i11;
   8241   i35 = i2 + 56 | 0;
   8242   i15 = 77;
   8243  }
   8244  do {
   8245   if ((i15 | 0) == 77) {
   8246    HEAP32[i35 >> 2] = 1;
   8247    i15 = HEAP32[i34 >> 2] | 0;
   8248    if ((i15 | 0) > 1) {
   8249     d23 = +HEAPF32[i12 + 216 >> 2];
   8250     d22 = +HEAPF32[i12 + 212 >> 2];
   8251     i34 = 0;
   8252     d24 = d22 * +HEAPF32[i12 + 64 >> 2] + d23 * +HEAPF32[i12 + 68 >> 2];
   8253     i35 = 1;
   8254     while (1) {
   8255      d25 = d22 * +HEAPF32[i12 + (i35 << 3) + 64 >> 2] + d23 * +HEAPF32[i12 + (i35 << 3) + 68 >> 2];
   8256      i20 = d25 < d24;
   8257      i34 = i20 ? i35 : i34;
   8258      i35 = i35 + 1 | 0;
   8259      if ((i35 | 0) < (i15 | 0)) {
   8260       d24 = i20 ? d25 : d24;
   8261      } else {
   8262       break;
   8263      }
   8264     }
   8265    } else {
   8266     i34 = 0;
   8267    }
   8268    i20 = i34 + 1 | 0;
   8269    i40 = (i20 | 0) < (i15 | 0) ? i20 : 0;
   8270    i41 = i12 + (i34 << 3) | 0;
   8271    i38 = HEAP32[i41 + 4 >> 2] | 0;
   8272    i35 = i11;
   8273    HEAP32[i35 >> 2] = HEAP32[i41 >> 2];
   8274    HEAP32[i35 + 4 >> 2] = i38;
   8275    i35 = i11 + 8 | 0;
   8276    HEAP8[i35] = 0;
   8277    HEAP8[i35 + 1 | 0] = i34;
   8278    HEAP8[i35 + 2 | 0] = 1;
   8279    HEAP8[i35 + 3 | 0] = 0;
   8280    i35 = i12 + (i40 << 3) | 0;
   8281    i38 = HEAP32[i35 + 4 >> 2] | 0;
   8282    i41 = i11 + 12 | 0;
   8283    HEAP32[i41 >> 2] = HEAP32[i35 >> 2];
   8284    HEAP32[i41 + 4 >> 2] = i38;
   8285    i41 = i11 + 20 | 0;
   8286    HEAP8[i41] = 0;
   8287    HEAP8[i41 + 1 | 0] = i40;
   8288    HEAP8[i41 + 2 | 0] = 1;
   8289    HEAP8[i41 + 3 | 0] = 0;
   8290    if ((HEAP8[i29] | 0) == 0) {
   8291     HEAP32[i9 >> 2] = 1;
   8292     HEAP32[i9 + 4 >> 2] = 0;
   8293     i11 = i13;
   8294     i13 = HEAP32[i11 >> 2] | 0;
   8295     i11 = HEAP32[i11 + 4 >> 2] | 0;
   8296     i29 = i9 + 8 | 0;
   8297     HEAP32[i29 >> 2] = i13;
   8298     HEAP32[i29 + 4 >> 2] = i11;
   8299     i29 = HEAP32[i14 >> 2] | 0;
   8300     i14 = HEAP32[i14 + 4 >> 2] | 0;
   8301     i12 = i9 + 16 | 0;
   8302     HEAP32[i12 >> 2] = i29;
   8303     HEAP32[i12 + 4 >> 2] = i14;
   8304     i12 = (HEAPF32[tempDoublePtr >> 2] = -+HEAPF32[i16 >> 2], HEAP32[tempDoublePtr >> 2] | 0);
   8305     i20 = (HEAPF32[tempDoublePtr >> 2] = -+HEAPF32[i17 >> 2], HEAP32[tempDoublePtr >> 2] | 0);
   8306     i16 = i9 + 24 | 0;
   8307     HEAP32[i16 >> 2] = i12;
   8308     HEAP32[i16 + 4 >> 2] = i20;
   8309     i16 = i14;
   8310     i17 = i11;
   8311     i11 = i18;
   8312     i18 = 1;
   8313     i14 = 1;
   8314     break;
   8315    } else {
   8316     HEAP32[i9 >> 2] = 0;
   8317     HEAP32[i9 + 4 >> 2] = 1;
   8318     i17 = i14;
   8319     i11 = HEAP32[i17 >> 2] | 0;
   8320     i17 = HEAP32[i17 + 4 >> 2] | 0;
   8321     i29 = i9 + 8 | 0;
   8322     HEAP32[i29 >> 2] = i11;
   8323     HEAP32[i29 + 4 >> 2] = i17;
   8324     i29 = HEAP32[i13 >> 2] | 0;
   8325     i13 = HEAP32[i13 + 4 >> 2] | 0;
   8326     i20 = i9 + 16 | 0;
   8327     HEAP32[i20 >> 2] = i29;
   8328     HEAP32[i20 + 4 >> 2] = i13;
   8329     i20 = i16;
   8330     i12 = HEAP32[i20 >> 2] | 0;
   8331     i20 = HEAP32[i20 + 4 >> 2] | 0;
   8332     i16 = i9 + 24 | 0;
   8333     HEAP32[i16 >> 2] = i12;
   8334     HEAP32[i16 + 4 >> 2] = i20;
   8335     i16 = i13;
   8336     i13 = i11;
   8337     i11 = i18;
   8338     i18 = 0;
   8339     i14 = 1;
   8340     break;
   8341    }
   8342   }
   8343  } while (0);
   8344  d30 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]);
   8345  d39 = (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]);
   8346  d31 = (HEAP32[tempDoublePtr >> 2] = i13, +HEAPF32[tempDoublePtr >> 2]);
   8347  d32 = (HEAP32[tempDoublePtr >> 2] = i17, +HEAPF32[tempDoublePtr >> 2]);
   8348  d33 = (HEAP32[tempDoublePtr >> 2] = i29, +HEAPF32[tempDoublePtr >> 2]);
   8349  d37 = (HEAP32[tempDoublePtr >> 2] = i16, +HEAPF32[tempDoublePtr >> 2]);
   8350  i41 = i9 + 32 | 0;
   8351  i16 = i9 + 24 | 0;
   8352  i13 = i9 + 28 | 0;
   8353  d39 = -d39;
   8354  HEAPF32[i41 >> 2] = d30;
   8355  HEAPF32[i9 + 36 >> 2] = d39;
   8356  i20 = i9 + 44 | 0;
   8357  d36 = -d30;
   8358  i17 = i20;
   8359  HEAPF32[i17 >> 2] = d36;
   8360  HEAP32[i17 + 4 >> 2] = i12;
   8361  i17 = i9 + 8 | 0;
   8362  i15 = i9 + 12 | 0;
   8363  d39 = d30 * d31 + d32 * d39;
   8364  HEAPF32[i9 + 40 >> 2] = d39;
   8365  i29 = i9 + 52 | 0;
   8366  HEAPF32[i29 >> 2] = d33 * d36 + (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]) * d37;
   8367  if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i10, i11, i41, d39, i18) | 0) < 2) {
   8368   STACKTOP = i1;
   8369   return;
   8370  }
   8371  if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i3, i10, i20, +HEAPF32[i29 >> 2], HEAP32[i9 + 4 >> 2] | 0) | 0) < 2) {
   8372   STACKTOP = i1;
   8373   return;
   8374  }
   8375  i10 = i2 + 40 | 0;
   8376  if (i14) {
   8377   i40 = i16;
   8378   i41 = HEAP32[i40 >> 2] | 0;
   8379   i40 = HEAP32[i40 + 4 >> 2] | 0;
   8380   i35 = i10;
   8381   HEAP32[i35 >> 2] = i41;
   8382   HEAP32[i35 + 4 >> 2] = i40;
   8383   i35 = i17;
   8384   i40 = HEAP32[i35 >> 2] | 0;
   8385   i35 = HEAP32[i35 + 4 >> 2] | 0;
   8386   i38 = i2 + 48 | 0;
   8387   HEAP32[i38 >> 2] = i40;
   8388   HEAP32[i38 + 4 >> 2] = i35;
   8389   d23 = (HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]);
   8390   d22 = (HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
   8391   d24 = +HEAPF32[i15 >> 2];
   8392   d25 = +HEAPF32[i13 >> 2];
   8393   d28 = +HEAPF32[i3 >> 2];
   8394   d27 = +HEAPF32[i3 + 4 >> 2];
   8395   d26 = +HEAPF32[i21 >> 2];
   8396   if (!((d28 - d23) * d22 + (d27 - d24) * d25 <= d26)) {
   8397    d28 = d26;
   8398    i8 = 0;
   8399   } else {
   8400    d37 = d28 - +HEAPF32[i4 >> 2];
   8401    d36 = d27 - +HEAPF32[i6 >> 2];
   8402    d33 = +HEAPF32[i5 >> 2];
   8403    d28 = +HEAPF32[i7 >> 2];
   8404    d39 = +(d37 * d33 + d36 * d28);
   8405    d28 = +(d33 * d36 - d37 * d28);
   8406    i8 = i2;
   8407    HEAPF32[i8 >> 2] = d39;
   8408    HEAPF32[i8 + 4 >> 2] = d28;
   8409    HEAP32[i2 + 16 >> 2] = HEAP32[i3 + 8 >> 2];
   8410    d28 = +HEAPF32[i21 >> 2];
   8411    i8 = 1;
   8412   }
   8413   d26 = +HEAPF32[i3 + 12 >> 2];
   8414   d27 = +HEAPF32[i3 + 16 >> 2];
   8415   if ((d26 - d23) * d22 + (d27 - d24) * d25 <= d28) {
   8416    d36 = d26 - +HEAPF32[i4 >> 2];
   8417    d33 = d27 - +HEAPF32[i6 >> 2];
   8418    d32 = +HEAPF32[i5 >> 2];
   8419    d39 = +HEAPF32[i7 >> 2];
   8420    d37 = +(d36 * d32 + d33 * d39);
   8421    d39 = +(d32 * d33 - d36 * d39);
   8422    i41 = i2 + (i8 * 20 | 0) | 0;
   8423    HEAPF32[i41 >> 2] = d37;
   8424    HEAPF32[i41 + 4 >> 2] = d39;
   8425    HEAP32[i2 + (i8 * 20 | 0) + 16 >> 2] = HEAP32[i3 + 20 >> 2];
   8426    i8 = i8 + 1 | 0;
   8427   }
   8428  } else {
   8429   i38 = HEAP32[i9 >> 2] | 0;
   8430   i35 = i8 + (i38 << 3) + 84 | 0;
   8431   i41 = HEAP32[i35 + 4 >> 2] | 0;
   8432   i40 = i10;
   8433   HEAP32[i40 >> 2] = HEAP32[i35 >> 2];
   8434   HEAP32[i40 + 4 >> 2] = i41;
   8435   i38 = i8 + (i38 << 3) + 20 | 0;
   8436   i40 = HEAP32[i38 + 4 >> 2] | 0;
   8437   i41 = i2 + 48 | 0;
   8438   HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
   8439   HEAP32[i41 + 4 >> 2] = i40;
   8440   d22 = +HEAPF32[i17 >> 2];
   8441   d23 = +HEAPF32[i16 >> 2];
   8442   d24 = +HEAPF32[i15 >> 2];
   8443   d25 = +HEAPF32[i13 >> 2];
   8444   d26 = +HEAPF32[i21 >> 2];
   8445   if (!((+HEAPF32[i3 >> 2] - d22) * d23 + (+HEAPF32[i3 + 4 >> 2] - d24) * d25 <= d26)) {
   8446    i8 = 0;
   8447   } else {
   8448    i40 = i3;
   8449    i8 = HEAP32[i40 + 4 >> 2] | 0;
   8450    i41 = i2;
   8451    HEAP32[i41 >> 2] = HEAP32[i40 >> 2];
   8452    HEAP32[i41 + 4 >> 2] = i8;
   8453    i41 = i3 + 8 | 0;
   8454    i8 = i2 + 16 | 0;
   8455    HEAP8[i8 + 2 | 0] = HEAP8[i41 + 3 | 0] | 0;
   8456    HEAP8[i8 + 3 | 0] = HEAP8[i41 + 2 | 0] | 0;
   8457    HEAP8[i8] = HEAP8[i41 + 1 | 0] | 0;
   8458    HEAP8[i8 + 1 | 0] = HEAP8[i41] | 0;
   8459    d26 = +HEAPF32[i21 >> 2];
   8460    i8 = 1;
   8461   }
   8462   i4 = i3 + 12 | 0;
   8463   if ((+HEAPF32[i4 >> 2] - d22) * d23 + (+HEAPF32[i3 + 16 >> 2] - d24) * d25 <= d26) {
   8464    i38 = i4;
   8465    i41 = HEAP32[i38 + 4 >> 2] | 0;
   8466    i40 = i2 + (i8 * 20 | 0) | 0;
   8467    HEAP32[i40 >> 2] = HEAP32[i38 >> 2];
   8468    HEAP32[i40 + 4 >> 2] = i41;
   8469    i40 = i3 + 20 | 0;
   8470    i41 = i2 + (i8 * 20 | 0) + 16 | 0;
   8471    HEAP8[i41 + 2 | 0] = HEAP8[i40 + 3 | 0] | 0;
   8472    HEAP8[i41 + 3 | 0] = HEAP8[i40 + 2 | 0] | 0;
   8473    HEAP8[i41] = HEAP8[i40 + 1 | 0] | 0;
   8474    HEAP8[i41 + 1 | 0] = HEAP8[i40] | 0;
   8475    i8 = i8 + 1 | 0;
   8476   }
   8477  }
   8478  HEAP32[i19 >> 2] = i8;
   8479  STACKTOP = i1;
   8480  return;
   8481 }
   8482 function __ZN7b2World8SolveTOIERK10b2TimeStep(i30, i11) {
   8483  i30 = i30 | 0;
   8484  i11 = i11 | 0;
   8485  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0, i39 = 0, i40 = 0, i41 = 0, d42 = 0.0, i43 = 0, i44 = 0, i45 = 0, i46 = 0, i47 = 0, i48 = 0, i49 = 0, i50 = 0, i51 = 0, i52 = 0, i53 = 0, i54 = 0, i55 = 0, i56 = 0, i57 = 0, i58 = 0, i59 = 0, i60 = 0, i61 = 0, i62 = 0, i63 = 0, i64 = 0, i65 = 0, i66 = 0, d67 = 0.0, d68 = 0.0, d69 = 0.0, d70 = 0.0, d71 = 0.0, d72 = 0.0;
   8486  i1 = STACKTOP;
   8487  STACKTOP = STACKTOP + 336 | 0;
   8488  i3 = i1 + 284 | 0;
   8489  i6 = i1 + 152 | 0;
   8490  i5 = i1 + 144 | 0;
   8491  i4 = i1 + 108 | 0;
   8492  i8 = i1 + 72 | 0;
   8493  i7 = i1 + 64 | 0;
   8494  i14 = i1 + 24 | 0;
   8495  i9 = i1;
   8496  i10 = i30 + 102872 | 0;
   8497  i13 = i30 + 102944 | 0;
   8498  __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i3, 64, 32, 0, i30 + 68 | 0, HEAP32[i13 >> 2] | 0);
   8499  i2 = i30 + 102995 | 0;
   8500  if ((HEAP8[i2] | 0) != 0) {
   8501   i15 = HEAP32[i30 + 102952 >> 2] | 0;
   8502   if ((i15 | 0) != 0) {
   8503    do {
   8504     i66 = i15 + 4 | 0;
   8505     HEAP16[i66 >> 1] = HEAP16[i66 >> 1] & 65534;
   8506     HEAPF32[i15 + 60 >> 2] = 0.0;
   8507     i15 = HEAP32[i15 + 96 >> 2] | 0;
   8508    } while ((i15 | 0) != 0);
   8509   }
   8510   i15 = i30 + 102932 | 0;
   8511   i16 = HEAP32[i15 >> 2] | 0;
   8512   if ((i16 | 0) != 0) {
   8513    do {
   8514     i66 = i16 + 4 | 0;
   8515     HEAP32[i66 >> 2] = HEAP32[i66 >> 2] & -34;
   8516     HEAP32[i16 + 128 >> 2] = 0;
   8517     HEAPF32[i16 + 132 >> 2] = 1.0;
   8518     i16 = HEAP32[i16 + 12 >> 2] | 0;
   8519    } while ((i16 | 0) != 0);
   8520   }
   8521  } else {
   8522   i15 = i30 + 102932 | 0;
   8523  }
   8524  i25 = i3 + 28 | 0;
   8525  i26 = i3 + 36 | 0;
   8526  i27 = i3 + 32 | 0;
   8527  i28 = i3 + 40 | 0;
   8528  i29 = i3 + 8 | 0;
   8529  i24 = i3 + 44 | 0;
   8530  i23 = i3 + 12 | 0;
   8531  i22 = i7 + 4 | 0;
   8532  i21 = i9 + 4 | 0;
   8533  i20 = i9 + 8 | 0;
   8534  i19 = i9 + 16 | 0;
   8535  i18 = i11 + 12 | 0;
   8536  i17 = i9 + 12 | 0;
   8537  i16 = i9 + 20 | 0;
   8538  i39 = i30 + 102994 | 0;
   8539  i37 = i6 + 16 | 0;
   8540  i36 = i6 + 20 | 0;
   8541  i35 = i6 + 24 | 0;
   8542  i34 = i6 + 44 | 0;
   8543  i33 = i6 + 48 | 0;
   8544  i32 = i6 + 52 | 0;
   8545  i41 = i6 + 28 | 0;
   8546  i31 = i6 + 56 | 0;
   8547  i40 = i6 + 92 | 0;
   8548  i30 = i6 + 128 | 0;
   8549  i38 = i5 + 4 | 0;
   8550  L11 : while (1) {
   8551   i47 = HEAP32[i15 >> 2] | 0;
   8552   if ((i47 | 0) == 0) {
   8553    i4 = 36;
   8554    break;
   8555   } else {
   8556    d42 = 1.0;
   8557    i44 = 0;
   8558   }
   8559   do {
   8560    i48 = i47 + 4 | 0;
   8561    i43 = HEAP32[i48 >> 2] | 0;
   8562    do {
   8563     if ((i43 & 4 | 0) != 0 ? (HEAP32[i47 + 128 >> 2] | 0) <= 8 : 0) {
   8564      if ((i43 & 32 | 0) == 0) {
   8565       i43 = HEAP32[i47 + 48 >> 2] | 0;
   8566       i45 = HEAP32[i47 + 52 >> 2] | 0;
   8567       if ((HEAP8[i43 + 38 | 0] | 0) != 0) {
   8568        break;
   8569       }
   8570       if ((HEAP8[i45 + 38 | 0] | 0) != 0) {
   8571        break;
   8572       }
   8573       i46 = HEAP32[i43 + 8 >> 2] | 0;
   8574       i50 = HEAP32[i45 + 8 >> 2] | 0;
   8575       i53 = HEAP32[i46 >> 2] | 0;
   8576       i52 = HEAP32[i50 >> 2] | 0;
   8577       if (!((i53 | 0) == 2 | (i52 | 0) == 2)) {
   8578        i4 = 16;
   8579        break L11;
   8580       }
   8581       i51 = HEAP16[i46 + 4 >> 1] | 0;
   8582       i49 = HEAP16[i50 + 4 >> 1] | 0;
   8583       if (!((i51 & 2) != 0 & (i53 | 0) != 0 | (i49 & 2) != 0 & (i52 | 0) != 0)) {
   8584        break;
   8585       }
   8586       if (!((i51 & 8) != 0 | (i53 | 0) != 2 | ((i49 & 8) != 0 | (i52 | 0) != 2))) {
   8587        break;
   8588       }
   8589       i51 = i46 + 28 | 0;
   8590       i52 = i46 + 60 | 0;
   8591       d68 = +HEAPF32[i52 >> 2];
   8592       i49 = i50 + 28 | 0;
   8593       i53 = i50 + 60 | 0;
   8594       d67 = +HEAPF32[i53 >> 2];
   8595       if (!(d68 < d67)) {
   8596        if (d67 < d68) {
   8597         if (!(d67 < 1.0)) {
   8598          i4 = 25;
   8599          break L11;
   8600         }
   8601         d67 = (d68 - d67) / (1.0 - d67);
   8602         i66 = i50 + 36 | 0;
   8603         d69 = 1.0 - d67;
   8604         d71 = +(+HEAPF32[i66 >> 2] * d69 + d67 * +HEAPF32[i50 + 44 >> 2]);
   8605         d70 = +(d69 * +HEAPF32[i50 + 40 >> 2] + d67 * +HEAPF32[i50 + 48 >> 2]);
   8606         HEAPF32[i66 >> 2] = d71;
   8607         HEAPF32[i66 + 4 >> 2] = d70;
   8608         i66 = i50 + 52 | 0;
   8609         HEAPF32[i66 >> 2] = d69 * +HEAPF32[i66 >> 2] + d67 * +HEAPF32[i50 + 56 >> 2];
   8610         HEAPF32[i53 >> 2] = d68;
   8611         d67 = d68;
   8612        } else {
   8613         d67 = d68;
   8614        }
   8615       } else {
   8616        if (!(d68 < 1.0)) {
   8617         i4 = 21;
   8618         break L11;
   8619        }
   8620        d71 = (d67 - d68) / (1.0 - d68);
   8621        i66 = i46 + 36 | 0;
   8622        d70 = 1.0 - d71;
   8623        d68 = +(+HEAPF32[i66 >> 2] * d70 + d71 * +HEAPF32[i46 + 44 >> 2]);
   8624        d69 = +(d70 * +HEAPF32[i46 + 40 >> 2] + d71 * +HEAPF32[i46 + 48 >> 2]);
   8625        HEAPF32[i66 >> 2] = d68;
   8626        HEAPF32[i66 + 4 >> 2] = d69;
   8627        i66 = i46 + 52 | 0;
   8628        HEAPF32[i66 >> 2] = d70 * +HEAPF32[i66 >> 2] + d71 * +HEAPF32[i46 + 56 >> 2];
   8629        HEAPF32[i52 >> 2] = d67;
   8630       }
   8631       if (!(d67 < 1.0)) {
   8632        i4 = 28;
   8633        break L11;
   8634       }
   8635       i66 = HEAP32[i47 + 56 >> 2] | 0;
   8636       i46 = HEAP32[i47 + 60 >> 2] | 0;
   8637       HEAP32[i37 >> 2] = 0;
   8638       HEAP32[i36 >> 2] = 0;
   8639       HEAPF32[i35 >> 2] = 0.0;
   8640       HEAP32[i34 >> 2] = 0;
   8641       HEAP32[i33 >> 2] = 0;
   8642       HEAPF32[i32 >> 2] = 0.0;
   8643       __ZN15b2DistanceProxy3SetEPK7b2Shapei(i6, HEAP32[i43 + 12 >> 2] | 0, i66);
   8644       __ZN15b2DistanceProxy3SetEPK7b2Shapei(i41, HEAP32[i45 + 12 >> 2] | 0, i46);
   8645       i43 = i31 + 0 | 0;
   8646       i45 = i51 + 0 | 0;
   8647       i46 = i43 + 36 | 0;
   8648       do {
   8649        HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
   8650        i43 = i43 + 4 | 0;
   8651        i45 = i45 + 4 | 0;
   8652       } while ((i43 | 0) < (i46 | 0));
   8653       i43 = i40 + 0 | 0;
   8654       i45 = i49 + 0 | 0;
   8655       i46 = i43 + 36 | 0;
   8656       do {
   8657        HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
   8658        i43 = i43 + 4 | 0;
   8659        i45 = i45 + 4 | 0;
   8660       } while ((i43 | 0) < (i46 | 0));
   8661       HEAPF32[i30 >> 2] = 1.0;
   8662       __Z14b2TimeOfImpactP11b2TOIOutputPK10b2TOIInput(i5, i6);
   8663       if ((HEAP32[i5 >> 2] | 0) == 3) {
   8664        d67 = d67 + (1.0 - d67) * +HEAPF32[i38 >> 2];
   8665        d67 = d67 < 1.0 ? d67 : 1.0;
   8666       } else {
   8667        d67 = 1.0;
   8668       }
   8669       HEAPF32[i47 + 132 >> 2] = d67;
   8670       HEAP32[i48 >> 2] = HEAP32[i48 >> 2] | 32;
   8671      } else {
   8672       d67 = +HEAPF32[i47 + 132 >> 2];
   8673      }
   8674      if (d67 < d42) {
   8675       d42 = d67;
   8676       i44 = i47;
   8677      }
   8678     }
   8679    } while (0);
   8680    i47 = HEAP32[i47 + 12 >> 2] | 0;
   8681   } while ((i47 | 0) != 0);
   8682   if ((i44 | 0) == 0 | d42 > .9999988079071045) {
   8683    i4 = 36;
   8684    break;
   8685   }
   8686   i47 = HEAP32[(HEAP32[i44 + 48 >> 2] | 0) + 8 >> 2] | 0;
   8687   i48 = HEAP32[(HEAP32[i44 + 52 >> 2] | 0) + 8 >> 2] | 0;
   8688   i49 = i47 + 28 | 0;
   8689   i43 = i4 + 0 | 0;
   8690   i45 = i49 + 0 | 0;
   8691   i46 = i43 + 36 | 0;
   8692   do {
   8693    HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
   8694    i43 = i43 + 4 | 0;
   8695    i45 = i45 + 4 | 0;
   8696   } while ((i43 | 0) < (i46 | 0));
   8697   i50 = i48 + 28 | 0;
   8698   i43 = i8 + 0 | 0;
   8699   i45 = i50 + 0 | 0;
   8700   i46 = i43 + 36 | 0;
   8701   do {
   8702    HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
   8703    i43 = i43 + 4 | 0;
   8704    i45 = i45 + 4 | 0;
   8705   } while ((i43 | 0) < (i46 | 0));
   8706   i43 = i47 + 60 | 0;
   8707   d67 = +HEAPF32[i43 >> 2];
   8708   if (!(d67 < 1.0)) {
   8709    i4 = 38;
   8710    break;
   8711   }
   8712   d70 = (d42 - d67) / (1.0 - d67);
   8713   i57 = i47 + 36 | 0;
   8714   d67 = 1.0 - d70;
   8715   i52 = i47 + 44 | 0;
   8716   i53 = i47 + 48 | 0;
   8717   d71 = +HEAPF32[i57 >> 2] * d67 + d70 * +HEAPF32[i52 >> 2];
   8718   d72 = d67 * +HEAPF32[i47 + 40 >> 2] + d70 * +HEAPF32[i53 >> 2];
   8719   d69 = +d71;
   8720   d68 = +d72;
   8721   HEAPF32[i57 >> 2] = d69;
   8722   HEAPF32[i57 + 4 >> 2] = d68;
   8723   i57 = i47 + 52 | 0;
   8724   i51 = i47 + 56 | 0;
   8725   d70 = d67 * +HEAPF32[i57 >> 2] + d70 * +HEAPF32[i51 >> 2];
   8726   HEAPF32[i57 >> 2] = d70;
   8727   HEAPF32[i43 >> 2] = d42;
   8728   i57 = i47 + 44 | 0;
   8729   HEAPF32[i57 >> 2] = d69;
   8730   HEAPF32[i57 + 4 >> 2] = d68;
   8731   HEAPF32[i51 >> 2] = d70;
   8732   d68 = +Math_sin(+d70);
   8733   i57 = i47 + 20 | 0;
   8734   HEAPF32[i57 >> 2] = d68;
   8735   d70 = +Math_cos(+d70);
   8736   i56 = i47 + 24 | 0;
   8737   HEAPF32[i56 >> 2] = d70;
   8738   i58 = i47 + 12 | 0;
   8739   i55 = i47 + 28 | 0;
   8740   d69 = +HEAPF32[i55 >> 2];
   8741   i54 = i47 + 32 | 0;
   8742   d67 = +HEAPF32[i54 >> 2];
   8743   d71 = +(d71 - (d70 * d69 - d68 * d67));
   8744   d67 = +(d72 - (d68 * d69 + d70 * d67));
   8745   i43 = i58;
   8746   HEAPF32[i43 >> 2] = d71;
   8747   HEAPF32[i43 + 4 >> 2] = d67;
   8748   i43 = i48 + 60 | 0;
   8749   d67 = +HEAPF32[i43 >> 2];
   8750   if (!(d67 < 1.0)) {
   8751    i4 = 40;
   8752    break;
   8753   }
   8754   d70 = (d42 - d67) / (1.0 - d67);
   8755   i64 = i48 + 36 | 0;
   8756   d72 = 1.0 - d70;
   8757   i61 = i48 + 44 | 0;
   8758   i60 = i48 + 48 | 0;
   8759   d71 = +HEAPF32[i64 >> 2] * d72 + d70 * +HEAPF32[i61 >> 2];
   8760   d67 = d72 * +HEAPF32[i48 + 40 >> 2] + d70 * +HEAPF32[i60 >> 2];
   8761   d69 = +d71;
   8762   d68 = +d67;
   8763   HEAPF32[i64 >> 2] = d69;
   8764   HEAPF32[i64 + 4 >> 2] = d68;
   8765   i64 = i48 + 52 | 0;
   8766   i59 = i48 + 56 | 0;
   8767   d70 = d72 * +HEAPF32[i64 >> 2] + d70 * +HEAPF32[i59 >> 2];
   8768   HEAPF32[i64 >> 2] = d70;
   8769   HEAPF32[i43 >> 2] = d42;
   8770   i64 = i48 + 44 | 0;
   8771   HEAPF32[i64 >> 2] = d69;
   8772   HEAPF32[i64 + 4 >> 2] = d68;
   8773   HEAPF32[i59 >> 2] = d70;
   8774   d68 = +Math_sin(+d70);
   8775   i64 = i48 + 20 | 0;
   8776   HEAPF32[i64 >> 2] = d68;
   8777   d70 = +Math_cos(+d70);
   8778   i63 = i48 + 24 | 0;
   8779   HEAPF32[i63 >> 2] = d70;
   8780   i65 = i48 + 12 | 0;
   8781   i62 = i48 + 28 | 0;
   8782   d69 = +HEAPF32[i62 >> 2];
   8783   i66 = i48 + 32 | 0;
   8784   d72 = +HEAPF32[i66 >> 2];
   8785   d71 = +(d71 - (d70 * d69 - d68 * d72));
   8786   d72 = +(d67 - (d68 * d69 + d70 * d72));
   8787   i43 = i65;
   8788   HEAPF32[i43 >> 2] = d71;
   8789   HEAPF32[i43 + 4 >> 2] = d72;
   8790   __ZN9b2Contact6UpdateEP17b2ContactListener(i44, HEAP32[i13 >> 2] | 0);
   8791   i43 = i44 + 4 | 0;
   8792   i45 = HEAP32[i43 >> 2] | 0;
   8793   HEAP32[i43 >> 2] = i45 & -33;
   8794   i46 = i44 + 128 | 0;
   8795   HEAP32[i46 >> 2] = (HEAP32[i46 >> 2] | 0) + 1;
   8796   if ((i45 & 6 | 0) != 6) {
   8797    HEAP32[i43 >> 2] = i45 & -37;
   8798    i43 = i49 + 0 | 0;
   8799    i45 = i4 + 0 | 0;
   8800    i46 = i43 + 36 | 0;
   8801    do {
   8802     HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
   8803     i43 = i43 + 4 | 0;
   8804     i45 = i45 + 4 | 0;
   8805    } while ((i43 | 0) < (i46 | 0));
   8806    i43 = i50 + 0 | 0;
   8807    i45 = i8 + 0 | 0;
   8808    i46 = i43 + 36 | 0;
   8809    do {
   8810     HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
   8811     i43 = i43 + 4 | 0;
   8812     i45 = i45 + 4 | 0;
   8813    } while ((i43 | 0) < (i46 | 0));
   8814    d69 = +HEAPF32[i51 >> 2];
   8815    d71 = +Math_sin(+d69);
   8816    HEAPF32[i57 >> 2] = d71;
   8817    d69 = +Math_cos(+d69);
   8818    HEAPF32[i56 >> 2] = d69;
   8819    d72 = +HEAPF32[i55 >> 2];
   8820    d70 = +HEAPF32[i54 >> 2];
   8821    d68 = +(+HEAPF32[i52 >> 2] - (d69 * d72 - d71 * d70));
   8822    d70 = +(+HEAPF32[i53 >> 2] - (d71 * d72 + d69 * d70));
   8823    HEAPF32[i58 >> 2] = d68;
   8824    HEAPF32[i58 + 4 >> 2] = d70;
   8825    d70 = +HEAPF32[i59 >> 2];
   8826    d68 = +Math_sin(+d70);
   8827    HEAPF32[i64 >> 2] = d68;
   8828    d70 = +Math_cos(+d70);
   8829    HEAPF32[i63 >> 2] = d70;
   8830    d69 = +HEAPF32[i62 >> 2];
   8831    d72 = +HEAPF32[i66 >> 2];
   8832    d71 = +(+HEAPF32[i61 >> 2] - (d70 * d69 - d68 * d72));
   8833    d72 = +(+HEAPF32[i60 >> 2] - (d68 * d69 + d70 * d72));
   8834    i66 = i65;
   8835    HEAPF32[i66 >> 2] = d71;
   8836    HEAPF32[i66 + 4 >> 2] = d72;
   8837    continue;
   8838   }
   8839   i45 = i47 + 4 | 0;
   8840   i46 = HEAPU16[i45 >> 1] | 0;
   8841   if ((i46 & 2 | 0) == 0) {
   8842    HEAP16[i45 >> 1] = i46 | 2;
   8843    HEAPF32[i47 + 144 >> 2] = 0.0;
   8844   }
   8845   i46 = i48 + 4 | 0;
   8846   i49 = HEAPU16[i46 >> 1] | 0;
   8847   if ((i49 & 2 | 0) == 0) {
   8848    HEAP16[i46 >> 1] = i49 | 2;
   8849    HEAPF32[i48 + 144 >> 2] = 0.0;
   8850   }
   8851   HEAP32[i25 >> 2] = 0;
   8852   HEAP32[i26 >> 2] = 0;
   8853   HEAP32[i27 >> 2] = 0;
   8854   if ((HEAP32[i28 >> 2] | 0) <= 0) {
   8855    i4 = 48;
   8856    break;
   8857   }
   8858   i49 = i47 + 8 | 0;
   8859   HEAP32[i49 >> 2] = 0;
   8860   i51 = HEAP32[i25 >> 2] | 0;
   8861   HEAP32[(HEAP32[i29 >> 2] | 0) + (i51 << 2) >> 2] = i47;
   8862   i51 = i51 + 1 | 0;
   8863   HEAP32[i25 >> 2] = i51;
   8864   if ((i51 | 0) >= (HEAP32[i28 >> 2] | 0)) {
   8865    i4 = 50;
   8866    break;
   8867   }
   8868   i50 = i48 + 8 | 0;
   8869   HEAP32[i50 >> 2] = i51;
   8870   i51 = HEAP32[i25 >> 2] | 0;
   8871   HEAP32[(HEAP32[i29 >> 2] | 0) + (i51 << 2) >> 2] = i48;
   8872   HEAP32[i25 >> 2] = i51 + 1;
   8873   i51 = HEAP32[i26 >> 2] | 0;
   8874   if ((i51 | 0) >= (HEAP32[i24 >> 2] | 0)) {
   8875    i4 = 52;
   8876    break;
   8877   }
   8878   HEAP32[i26 >> 2] = i51 + 1;
   8879   HEAP32[(HEAP32[i23 >> 2] | 0) + (i51 << 2) >> 2] = i44;
   8880   HEAP16[i45 >> 1] = HEAPU16[i45 >> 1] | 1;
   8881   HEAP16[i46 >> 1] = HEAPU16[i46 >> 1] | 1;
   8882   HEAP32[i43 >> 2] = HEAP32[i43 >> 2] | 1;
   8883   HEAP32[i7 >> 2] = i47;
   8884   HEAP32[i22 >> 2] = i48;
   8885   i44 = 1;
   8886   while (1) {
   8887    L58 : do {
   8888     if ((HEAP32[i47 >> 2] | 0) == 2 ? (i12 = HEAP32[i47 + 112 >> 2] | 0, (i12 | 0) != 0) : 0) {
   8889      i47 = i47 + 4 | 0;
   8890      i51 = i12;
   8891      do {
   8892       if ((HEAP32[i25 >> 2] | 0) == (HEAP32[i28 >> 2] | 0)) {
   8893        break L58;
   8894       }
   8895       if ((HEAP32[i26 >> 2] | 0) == (HEAP32[i24 >> 2] | 0)) {
   8896        break L58;
   8897       }
   8898       i52 = HEAP32[i51 + 4 >> 2] | 0;
   8899       i53 = i52 + 4 | 0;
   8900       do {
   8901        if ((HEAP32[i53 >> 2] & 1 | 0) == 0) {
   8902         i48 = HEAP32[i51 >> 2] | 0;
   8903         if (((HEAP32[i48 >> 2] | 0) == 2 ? (HEAP16[i47 >> 1] & 8) == 0 : 0) ? (HEAP16[i48 + 4 >> 1] & 8) == 0 : 0) {
   8904          break;
   8905         }
   8906         if ((HEAP8[(HEAP32[i52 + 48 >> 2] | 0) + 38 | 0] | 0) == 0 ? (HEAP8[(HEAP32[i52 + 52 >> 2] | 0) + 38 | 0] | 0) == 0 : 0) {
   8907          i54 = i48 + 28 | 0;
   8908          i43 = i14 + 0 | 0;
   8909          i45 = i54 + 0 | 0;
   8910          i46 = i43 + 36 | 0;
   8911          do {
   8912           HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
   8913           i43 = i43 + 4 | 0;
   8914           i45 = i45 + 4 | 0;
   8915          } while ((i43 | 0) < (i46 | 0));
   8916          i43 = i48 + 4 | 0;
   8917          if ((HEAP16[i43 >> 1] & 1) == 0) {
   8918           i45 = i48 + 60 | 0;
   8919           d67 = +HEAPF32[i45 >> 2];
   8920           if (!(d67 < 1.0)) {
   8921            i4 = 67;
   8922            break L11;
   8923           }
   8924           d70 = (d42 - d67) / (1.0 - d67);
   8925           i65 = i48 + 36 | 0;
   8926           d72 = 1.0 - d70;
   8927           d71 = +HEAPF32[i65 >> 2] * d72 + d70 * +HEAPF32[i48 + 44 >> 2];
   8928           d67 = d72 * +HEAPF32[i48 + 40 >> 2] + d70 * +HEAPF32[i48 + 48 >> 2];
   8929           d69 = +d71;
   8930           d68 = +d67;
   8931           HEAPF32[i65 >> 2] = d69;
   8932           HEAPF32[i65 + 4 >> 2] = d68;
   8933           i65 = i48 + 52 | 0;
   8934           i66 = i48 + 56 | 0;
   8935           d70 = d72 * +HEAPF32[i65 >> 2] + d70 * +HEAPF32[i66 >> 2];
   8936           HEAPF32[i65 >> 2] = d70;
   8937           HEAPF32[i45 >> 2] = d42;
   8938           i65 = i48 + 44 | 0;
   8939           HEAPF32[i65 >> 2] = d69;
   8940           HEAPF32[i65 + 4 >> 2] = d68;
   8941           HEAPF32[i66 >> 2] = d70;
   8942           d68 = +Math_sin(+d70);
   8943           HEAPF32[i48 + 20 >> 2] = d68;
   8944           d70 = +Math_cos(+d70);
   8945           HEAPF32[i48 + 24 >> 2] = d70;
   8946           d69 = +HEAPF32[i48 + 28 >> 2];
   8947           d72 = +HEAPF32[i48 + 32 >> 2];
   8948           d71 = +(d71 - (d70 * d69 - d68 * d72));
   8949           d72 = +(d67 - (d68 * d69 + d70 * d72));
   8950           i66 = i48 + 12 | 0;
   8951           HEAPF32[i66 >> 2] = d71;
   8952           HEAPF32[i66 + 4 >> 2] = d72;
   8953          }
   8954          __ZN9b2Contact6UpdateEP17b2ContactListener(i52, HEAP32[i13 >> 2] | 0);
   8955          i45 = HEAP32[i53 >> 2] | 0;
   8956          if ((i45 & 4 | 0) == 0) {
   8957           i43 = i54 + 0 | 0;
   8958           i45 = i14 + 0 | 0;
   8959           i46 = i43 + 36 | 0;
   8960           do {
   8961            HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
   8962            i43 = i43 + 4 | 0;
   8963            i45 = i45 + 4 | 0;
   8964           } while ((i43 | 0) < (i46 | 0));
   8965           d70 = +HEAPF32[i48 + 56 >> 2];
   8966           d68 = +Math_sin(+d70);
   8967           HEAPF32[i48 + 20 >> 2] = d68;
   8968           d70 = +Math_cos(+d70);
   8969           HEAPF32[i48 + 24 >> 2] = d70;
   8970           d69 = +HEAPF32[i48 + 28 >> 2];
   8971           d72 = +HEAPF32[i48 + 32 >> 2];
   8972           d71 = +(+HEAPF32[i48 + 44 >> 2] - (d70 * d69 - d68 * d72));
   8973           d72 = +(+HEAPF32[i48 + 48 >> 2] - (d68 * d69 + d70 * d72));
   8974           i66 = i48 + 12 | 0;
   8975           HEAPF32[i66 >> 2] = d71;
   8976           HEAPF32[i66 + 4 >> 2] = d72;
   8977           break;
   8978          }
   8979          if ((i45 & 2 | 0) == 0) {
   8980           i43 = i54 + 0 | 0;
   8981           i45 = i14 + 0 | 0;
   8982           i46 = i43 + 36 | 0;
   8983           do {
   8984            HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
   8985            i43 = i43 + 4 | 0;
   8986            i45 = i45 + 4 | 0;
   8987           } while ((i43 | 0) < (i46 | 0));
   8988           d70 = +HEAPF32[i48 + 56 >> 2];
   8989           d68 = +Math_sin(+d70);
   8990           HEAPF32[i48 + 20 >> 2] = d68;
   8991           d70 = +Math_cos(+d70);
   8992           HEAPF32[i48 + 24 >> 2] = d70;
   8993           d69 = +HEAPF32[i48 + 28 >> 2];
   8994           d72 = +HEAPF32[i48 + 32 >> 2];
   8995           d71 = +(+HEAPF32[i48 + 44 >> 2] - (d70 * d69 - d68 * d72));
   8996           d72 = +(+HEAPF32[i48 + 48 >> 2] - (d68 * d69 + d70 * d72));
   8997           i66 = i48 + 12 | 0;
   8998           HEAPF32[i66 >> 2] = d71;
   8999           HEAPF32[i66 + 4 >> 2] = d72;
   9000           break;
   9001          }
   9002          HEAP32[i53 >> 2] = i45 | 1;
   9003          i45 = HEAP32[i26 >> 2] | 0;
   9004          if ((i45 | 0) >= (HEAP32[i24 >> 2] | 0)) {
   9005           i4 = 74;
   9006           break L11;
   9007          }
   9008          HEAP32[i26 >> 2] = i45 + 1;
   9009          HEAP32[(HEAP32[i23 >> 2] | 0) + (i45 << 2) >> 2] = i52;
   9010          i45 = HEAPU16[i43 >> 1] | 0;
   9011          if ((i45 & 1 | 0) == 0) {
   9012           HEAP16[i43 >> 1] = i45 | 1;
   9013           if ((HEAP32[i48 >> 2] | 0) != 0 ? (i45 & 2 | 0) == 0 : 0) {
   9014            HEAP16[i43 >> 1] = i45 | 3;
   9015            HEAPF32[i48 + 144 >> 2] = 0.0;
   9016           }
   9017           i43 = HEAP32[i25 >> 2] | 0;
   9018           if ((i43 | 0) >= (HEAP32[i28 >> 2] | 0)) {
   9019            i4 = 80;
   9020            break L11;
   9021           }
   9022           HEAP32[i48 + 8 >> 2] = i43;
   9023           i66 = HEAP32[i25 >> 2] | 0;
   9024           HEAP32[(HEAP32[i29 >> 2] | 0) + (i66 << 2) >> 2] = i48;
   9025           HEAP32[i25 >> 2] = i66 + 1;
   9026          }
   9027         }
   9028        }
   9029       } while (0);
   9030       i51 = HEAP32[i51 + 12 >> 2] | 0;
   9031      } while ((i51 | 0) != 0);
   9032     }
   9033    } while (0);
   9034    if ((i44 | 0) >= 2) {
   9035     break;
   9036    }
   9037    i47 = HEAP32[i7 + (i44 << 2) >> 2] | 0;
   9038    i44 = i44 + 1 | 0;
   9039   }
   9040   d72 = (1.0 - d42) * +HEAPF32[i11 >> 2];
   9041   HEAPF32[i9 >> 2] = d72;
   9042   HEAPF32[i21 >> 2] = 1.0 / d72;
   9043   HEAPF32[i20 >> 2] = 1.0;
   9044   HEAP32[i19 >> 2] = 20;
   9045   HEAP32[i17 >> 2] = HEAP32[i18 >> 2];
   9046   HEAP8[i16] = 0;
   9047   __ZN8b2Island8SolveTOIERK10b2TimeStepii(i3, i9, HEAP32[i49 >> 2] | 0, HEAP32[i50 >> 2] | 0);
   9048   i44 = HEAP32[i25 >> 2] | 0;
   9049   if ((i44 | 0) > 0) {
   9050    i43 = 0;
   9051    do {
   9052     i45 = HEAP32[(HEAP32[i29 >> 2] | 0) + (i43 << 2) >> 2] | 0;
   9053     i66 = i45 + 4 | 0;
   9054     HEAP16[i66 >> 1] = HEAP16[i66 >> 1] & 65534;
   9055     if ((HEAP32[i45 >> 2] | 0) == 2) {
   9056      __ZN6b2Body19SynchronizeFixturesEv(i45);
   9057      i44 = HEAP32[i45 + 112 >> 2] | 0;
   9058      if ((i44 | 0) != 0) {
   9059       do {
   9060        i66 = (HEAP32[i44 + 4 >> 2] | 0) + 4 | 0;
   9061        HEAP32[i66 >> 2] = HEAP32[i66 >> 2] & -34;
   9062        i44 = HEAP32[i44 + 12 >> 2] | 0;
   9063       } while ((i44 | 0) != 0);
   9064      }
   9065      i44 = HEAP32[i25 >> 2] | 0;
   9066     }
   9067     i43 = i43 + 1 | 0;
   9068    } while ((i43 | 0) < (i44 | 0));
   9069   }
   9070   __ZN16b2ContactManager15FindNewContactsEv(i10);
   9071   if ((HEAP8[i39] | 0) != 0) {
   9072    i4 = 92;
   9073    break;
   9074   }
   9075  }
   9076  if ((i4 | 0) == 16) {
   9077   ___assert_fail(2288, 2184, 641, 2344);
   9078  } else if ((i4 | 0) == 21) {
   9079   ___assert_fail(2360, 2376, 723, 2400);
   9080  } else if ((i4 | 0) == 25) {
   9081   ___assert_fail(2360, 2376, 723, 2400);
   9082  } else if ((i4 | 0) == 28) {
   9083   ___assert_fail(2360, 2184, 676, 2344);
   9084  } else if ((i4 | 0) == 36) {
   9085   HEAP8[i2] = 1;
   9086   __ZN8b2IslandD2Ev(i3);
   9087   STACKTOP = i1;
   9088   return;
   9089  } else if ((i4 | 0) == 38) {
   9090   ___assert_fail(2360, 2376, 723, 2400);
   9091  } else if ((i4 | 0) == 40) {
   9092   ___assert_fail(2360, 2376, 723, 2400);
   9093  } else if ((i4 | 0) == 48) {
   9094   ___assert_fail(2520, 2440, 54, 2472);
   9095  } else if ((i4 | 0) == 50) {
   9096   ___assert_fail(2520, 2440, 54, 2472);
   9097  } else if ((i4 | 0) == 52) {
   9098   ___assert_fail(2480, 2440, 62, 2472);
   9099  } else if ((i4 | 0) == 67) {
   9100   ___assert_fail(2360, 2376, 723, 2400);
   9101  } else if ((i4 | 0) == 74) {
   9102   ___assert_fail(2480, 2440, 62, 2472);
   9103  } else if ((i4 | 0) == 80) {
   9104   ___assert_fail(2520, 2440, 54, 2472);
   9105  } else if ((i4 | 0) == 92) {
   9106   HEAP8[i2] = 0;
   9107   __ZN8b2IslandD2Ev(i3);
   9108   STACKTOP = i1;
   9109   return;
   9110  }
   9111 }
   9112 function __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i8, i1) {
   9113  i5 = i5 | 0;
   9114  i8 = i8 | 0;
   9115  i1 = i1 | 0;
   9116  var i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0;
   9117  i3 = STACKTOP;
   9118  STACKTOP = STACKTOP + 16 | 0;
   9119  i2 = i3;
   9120  L1 : while (1) {
   9121   i7 = i8;
   9122   i4 = i8 + -12 | 0;
   9123   L3 : while (1) {
   9124    i9 = i5;
   9125    i11 = i7 - i9 | 0;
   9126    switch ((i11 | 0) / 12 | 0 | 0) {
   9127    case 4:
   9128     {
   9129      i6 = 14;
   9130      break L1;
   9131     }
   9132    case 2:
   9133     {
   9134      i6 = 4;
   9135      break L1;
   9136     }
   9137    case 3:
   9138     {
   9139      i6 = 6;
   9140      break L1;
   9141     }
   9142    case 5:
   9143     {
   9144      i6 = 15;
   9145      break L1;
   9146     }
   9147    case 1:
   9148    case 0:
   9149     {
   9150      i6 = 67;
   9151      break L1;
   9152     }
   9153    default:
   9154     {}
   9155    }
   9156    if ((i11 | 0) < 372) {
   9157     i6 = 21;
   9158     break L1;
   9159    }
   9160    i12 = (i11 | 0) / 24 | 0;
   9161    i10 = i5 + (i12 * 12 | 0) | 0;
   9162    do {
   9163     if ((i11 | 0) > 11988) {
   9164      i14 = (i11 | 0) / 48 | 0;
   9165      i11 = i5 + (i14 * 12 | 0) | 0;
   9166      i14 = i5 + ((i14 + i12 | 0) * 12 | 0) | 0;
   9167      i12 = __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i11, i10, i14, i1) | 0;
   9168      if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i14) | 0) {
   9169       HEAP32[i2 + 0 >> 2] = HEAP32[i14 + 0 >> 2];
   9170       HEAP32[i2 + 4 >> 2] = HEAP32[i14 + 4 >> 2];
   9171       HEAP32[i2 + 8 >> 2] = HEAP32[i14 + 8 >> 2];
   9172       HEAP32[i14 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9173       HEAP32[i14 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9174       HEAP32[i14 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9175       HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9176       HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9177       HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9178       i13 = i12 + 1 | 0;
   9179       if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i14, i10) | 0) {
   9180        HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   9181        HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   9182        HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   9183        HEAP32[i10 + 0 >> 2] = HEAP32[i14 + 0 >> 2];
   9184        HEAP32[i10 + 4 >> 2] = HEAP32[i14 + 4 >> 2];
   9185        HEAP32[i10 + 8 >> 2] = HEAP32[i14 + 8 >> 2];
   9186        HEAP32[i14 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9187        HEAP32[i14 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9188        HEAP32[i14 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9189        i13 = i12 + 2 | 0;
   9190        if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i11) | 0) {
   9191         HEAP32[i2 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
   9192         HEAP32[i2 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
   9193         HEAP32[i2 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
   9194         HEAP32[i11 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   9195         HEAP32[i11 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   9196         HEAP32[i11 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   9197         HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9198         HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9199         HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9200         if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i11, i5) | 0) {
   9201          HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9202          HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9203          HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9204          HEAP32[i5 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
   9205          HEAP32[i5 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
   9206          HEAP32[i5 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
   9207          HEAP32[i11 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9208          HEAP32[i11 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9209          HEAP32[i11 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9210          i12 = i12 + 4 | 0;
   9211         } else {
   9212          i12 = i12 + 3 | 0;
   9213         }
   9214        } else {
   9215         i12 = i13;
   9216        }
   9217       } else {
   9218        i12 = i13;
   9219       }
   9220      }
   9221     } else {
   9222      i15 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i5) | 0;
   9223      i11 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i10) | 0;
   9224      if (!i15) {
   9225       if (!i11) {
   9226        i12 = 0;
   9227        break;
   9228       }
   9229       HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   9230       HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   9231       HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   9232       HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9233       HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9234       HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9235       HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9236       HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9237       HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9238       if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i5) | 0)) {
   9239        i12 = 1;
   9240        break;
   9241       }
   9242       HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9243       HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9244       HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9245       HEAP32[i5 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   9246       HEAP32[i5 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   9247       HEAP32[i5 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   9248       HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9249       HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9250       HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9251       i12 = 2;
   9252       break;
   9253      }
   9254      if (i11) {
   9255       HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9256       HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9257       HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9258       HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9259       HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9260       HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9261       HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9262       HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9263       HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9264       i12 = 1;
   9265       break;
   9266      }
   9267      HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9268      HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9269      HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9270      HEAP32[i5 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   9271      HEAP32[i5 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   9272      HEAP32[i5 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   9273      HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9274      HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9275      HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9276      if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i10) | 0) {
   9277       HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   9278       HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   9279       HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   9280       HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9281       HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9282       HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9283       HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9284       HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9285       HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9286       i12 = 2;
   9287      } else {
   9288       i12 = 1;
   9289      }
   9290     }
   9291    } while (0);
   9292    do {
   9293     if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) {
   9294      i13 = i4;
   9295     } else {
   9296      i13 = i4;
   9297      while (1) {
   9298       i13 = i13 + -12 | 0;
   9299       if ((i5 | 0) == (i13 | 0)) {
   9300        break;
   9301       }
   9302       if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i13, i10) | 0) {
   9303        i6 = 50;
   9304        break;
   9305       }
   9306      }
   9307      if ((i6 | 0) == 50) {
   9308       i6 = 0;
   9309       HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9310       HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9311       HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9312       HEAP32[i5 + 0 >> 2] = HEAP32[i13 + 0 >> 2];
   9313       HEAP32[i5 + 4 >> 2] = HEAP32[i13 + 4 >> 2];
   9314       HEAP32[i5 + 8 >> 2] = HEAP32[i13 + 8 >> 2];
   9315       HEAP32[i13 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9316       HEAP32[i13 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9317       HEAP32[i13 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9318       i12 = i12 + 1 | 0;
   9319       break;
   9320      }
   9321      i10 = i5 + 12 | 0;
   9322      if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i4) | 0)) {
   9323       if ((i10 | 0) == (i4 | 0)) {
   9324        i6 = 67;
   9325        break L1;
   9326       }
   9327       while (1) {
   9328        i9 = i10 + 12 | 0;
   9329        if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) {
   9330         break;
   9331        }
   9332        if ((i9 | 0) == (i4 | 0)) {
   9333         i6 = 67;
   9334         break L1;
   9335        } else {
   9336         i10 = i9;
   9337        }
   9338       }
   9339       HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   9340       HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   9341       HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   9342       HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9343       HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9344       HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9345       HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9346       HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9347       HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9348       i10 = i9;
   9349      }
   9350      if ((i10 | 0) == (i4 | 0)) {
   9351       i6 = 67;
   9352       break L1;
   9353      } else {
   9354       i9 = i4;
   9355      }
   9356      while (1) {
   9357       while (1) {
   9358        i11 = i10 + 12 | 0;
   9359        if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) {
   9360         break;
   9361        } else {
   9362         i10 = i11;
   9363        }
   9364       }
   9365       do {
   9366        i9 = i9 + -12 | 0;
   9367       } while (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i9) | 0);
   9368       if (!(i10 >>> 0 < i9 >>> 0)) {
   9369        i5 = i10;
   9370        continue L3;
   9371       }
   9372       HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   9373       HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   9374       HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   9375       HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
   9376       HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
   9377       HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
   9378       HEAP32[i9 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9379       HEAP32[i9 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9380       HEAP32[i9 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9381       i10 = i11;
   9382      }
   9383     }
   9384    } while (0);
   9385    i11 = i5 + 12 | 0;
   9386    L47 : do {
   9387     if (i11 >>> 0 < i13 >>> 0) {
   9388      while (1) {
   9389       i15 = i11;
   9390       while (1) {
   9391        i11 = i15 + 12 | 0;
   9392        if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i15, i10) | 0) {
   9393         i15 = i11;
   9394        } else {
   9395         i14 = i13;
   9396         break;
   9397        }
   9398       }
   9399       do {
   9400        i14 = i14 + -12 | 0;
   9401       } while (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i14, i10) | 0));
   9402       if (i15 >>> 0 > i14 >>> 0) {
   9403        i11 = i15;
   9404        break L47;
   9405       }
   9406       HEAP32[i2 + 0 >> 2] = HEAP32[i15 + 0 >> 2];
   9407       HEAP32[i2 + 4 >> 2] = HEAP32[i15 + 4 >> 2];
   9408       HEAP32[i2 + 8 >> 2] = HEAP32[i15 + 8 >> 2];
   9409       HEAP32[i15 + 0 >> 2] = HEAP32[i14 + 0 >> 2];
   9410       HEAP32[i15 + 4 >> 2] = HEAP32[i14 + 4 >> 2];
   9411       HEAP32[i15 + 8 >> 2] = HEAP32[i14 + 8 >> 2];
   9412       HEAP32[i14 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9413       HEAP32[i14 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9414       HEAP32[i14 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9415       i13 = i14;
   9416       i10 = (i10 | 0) == (i15 | 0) ? i14 : i10;
   9417       i12 = i12 + 1 | 0;
   9418      }
   9419     }
   9420    } while (0);
   9421    if ((i11 | 0) != (i10 | 0) ? FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i11) | 0 : 0) {
   9422     HEAP32[i2 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
   9423     HEAP32[i2 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
   9424     HEAP32[i2 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
   9425     HEAP32[i11 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   9426     HEAP32[i11 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   9427     HEAP32[i11 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   9428     HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9429     HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9430     HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9431     i12 = i12 + 1 | 0;
   9432    }
   9433    if ((i12 | 0) == 0) {
   9434     i12 = __ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_(i5, i11, i1) | 0;
   9435     i10 = i11 + 12 | 0;
   9436     if (__ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_(i10, i8, i1) | 0) {
   9437      i6 = 62;
   9438      break;
   9439     }
   9440     if (i12) {
   9441      i5 = i10;
   9442      continue;
   9443     }
   9444    }
   9445    i15 = i11;
   9446    if ((i15 - i9 | 0) >= (i7 - i15 | 0)) {
   9447     i6 = 66;
   9448     break;
   9449    }
   9450    __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i11, i1);
   9451    i5 = i11 + 12 | 0;
   9452   }
   9453   if ((i6 | 0) == 62) {
   9454    i6 = 0;
   9455    if (i12) {
   9456     i6 = 67;
   9457     break;
   9458    } else {
   9459     i8 = i11;
   9460     continue;
   9461    }
   9462   } else if ((i6 | 0) == 66) {
   9463    i6 = 0;
   9464    __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i11 + 12 | 0, i8, i1);
   9465    i8 = i11;
   9466    continue;
   9467   }
   9468  }
   9469  if ((i6 | 0) == 4) {
   9470   if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i5) | 0)) {
   9471    STACKTOP = i3;
   9472    return;
   9473   }
   9474   HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9475   HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9476   HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9477   HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9478   HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9479   HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9480   HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9481   HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9482   HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9483   STACKTOP = i3;
   9484   return;
   9485  } else if ((i6 | 0) == 6) {
   9486   i6 = i5 + 12 | 0;
   9487   i15 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0;
   9488   i7 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i6) | 0;
   9489   if (!i15) {
   9490    if (!i7) {
   9491     STACKTOP = i3;
   9492     return;
   9493    }
   9494    HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   9495    HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   9496    HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   9497    HEAP32[i6 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9498    HEAP32[i6 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9499    HEAP32[i6 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9500    HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9501    HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9502    HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9503    if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0)) {
   9504     STACKTOP = i3;
   9505     return;
   9506    }
   9507    HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9508    HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9509    HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9510    HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   9511    HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   9512    HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   9513    HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9514    HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9515    HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9516    STACKTOP = i3;
   9517    return;
   9518   }
   9519   if (i7) {
   9520    HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9521    HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9522    HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9523    HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9524    HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9525    HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9526    HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9527    HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9528    HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9529    STACKTOP = i3;
   9530    return;
   9531   }
   9532   HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9533   HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9534   HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9535   HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   9536   HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   9537   HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   9538   HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9539   HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9540   HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9541   if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i6) | 0)) {
   9542    STACKTOP = i3;
   9543    return;
   9544   }
   9545   HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   9546   HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   9547   HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   9548   HEAP32[i6 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9549   HEAP32[i6 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9550   HEAP32[i6 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9551   HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9552   HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9553   HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9554   STACKTOP = i3;
   9555   return;
   9556  } else if ((i6 | 0) == 14) {
   9557   __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i5 + 12 | 0, i5 + 24 | 0, i4, i1) | 0;
   9558   STACKTOP = i3;
   9559   return;
   9560  } else if ((i6 | 0) == 15) {
   9561   i6 = i5 + 12 | 0;
   9562   i7 = i5 + 24 | 0;
   9563   i8 = i5 + 36 | 0;
   9564   __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i6, i7, i8, i1) | 0;
   9565   if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i8) | 0)) {
   9566    STACKTOP = i3;
   9567    return;
   9568   }
   9569   HEAP32[i2 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
   9570   HEAP32[i2 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
   9571   HEAP32[i2 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
   9572   HEAP32[i8 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   9573   HEAP32[i8 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   9574   HEAP32[i8 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   9575   HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9576   HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9577   HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9578   if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i8, i7) | 0)) {
   9579    STACKTOP = i3;
   9580    return;
   9581   }
   9582   HEAP32[i2 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   9583   HEAP32[i2 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   9584   HEAP32[i2 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   9585   HEAP32[i7 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
   9586   HEAP32[i7 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
   9587   HEAP32[i7 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
   9588   HEAP32[i8 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9589   HEAP32[i8 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9590   HEAP32[i8 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9591   if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0)) {
   9592    STACKTOP = i3;
   9593    return;
   9594   }
   9595   HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   9596   HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   9597   HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   9598   HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   9599   HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   9600   HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   9601   HEAP32[i7 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9602   HEAP32[i7 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9603   HEAP32[i7 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9604   if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0)) {
   9605    STACKTOP = i3;
   9606    return;
   9607   }
   9608   HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   9609   HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   9610   HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   9611   HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   9612   HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   9613   HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   9614   HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   9615   HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   9616   HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   9617   STACKTOP = i3;
   9618   return;
   9619  } else if ((i6 | 0) == 21) {
   9620   __ZNSt3__118__insertion_sort_3IRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i8, i1);
   9621   STACKTOP = i3;
   9622   return;
   9623  } else if ((i6 | 0) == 67) {
   9624   STACKTOP = i3;
   9625   return;
   9626  }
   9627 }
   9628 function _free(i7) {
   9629  i7 = i7 | 0;
   9630  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0;
   9631  i1 = STACKTOP;
   9632  if ((i7 | 0) == 0) {
   9633   STACKTOP = i1;
   9634   return;
   9635  }
   9636  i15 = i7 + -8 | 0;
   9637  i16 = HEAP32[7176 >> 2] | 0;
   9638  if (i15 >>> 0 < i16 >>> 0) {
   9639   _abort();
   9640  }
   9641  i13 = HEAP32[i7 + -4 >> 2] | 0;
   9642  i12 = i13 & 3;
   9643  if ((i12 | 0) == 1) {
   9644   _abort();
   9645  }
   9646  i8 = i13 & -8;
   9647  i6 = i7 + (i8 + -8) | 0;
   9648  do {
   9649   if ((i13 & 1 | 0) == 0) {
   9650    i19 = HEAP32[i15 >> 2] | 0;
   9651    if ((i12 | 0) == 0) {
   9652     STACKTOP = i1;
   9653     return;
   9654    }
   9655    i15 = -8 - i19 | 0;
   9656    i13 = i7 + i15 | 0;
   9657    i12 = i19 + i8 | 0;
   9658    if (i13 >>> 0 < i16 >>> 0) {
   9659     _abort();
   9660    }
   9661    if ((i13 | 0) == (HEAP32[7180 >> 2] | 0)) {
   9662     i2 = i7 + (i8 + -4) | 0;
   9663     if ((HEAP32[i2 >> 2] & 3 | 0) != 3) {
   9664      i2 = i13;
   9665      i11 = i12;
   9666      break;
   9667     }
   9668     HEAP32[7168 >> 2] = i12;
   9669     HEAP32[i2 >> 2] = HEAP32[i2 >> 2] & -2;
   9670     HEAP32[i7 + (i15 + 4) >> 2] = i12 | 1;
   9671     HEAP32[i6 >> 2] = i12;
   9672     STACKTOP = i1;
   9673     return;
   9674    }
   9675    i18 = i19 >>> 3;
   9676    if (i19 >>> 0 < 256) {
   9677     i2 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
   9678     i11 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
   9679     i14 = 7200 + (i18 << 1 << 2) | 0;
   9680     if ((i2 | 0) != (i14 | 0)) {
   9681      if (i2 >>> 0 < i16 >>> 0) {
   9682       _abort();
   9683      }
   9684      if ((HEAP32[i2 + 12 >> 2] | 0) != (i13 | 0)) {
   9685       _abort();
   9686      }
   9687     }
   9688     if ((i11 | 0) == (i2 | 0)) {
   9689      HEAP32[1790] = HEAP32[1790] & ~(1 << i18);
   9690      i2 = i13;
   9691      i11 = i12;
   9692      break;
   9693     }
   9694     if ((i11 | 0) != (i14 | 0)) {
   9695      if (i11 >>> 0 < i16 >>> 0) {
   9696       _abort();
   9697      }
   9698      i14 = i11 + 8 | 0;
   9699      if ((HEAP32[i14 >> 2] | 0) == (i13 | 0)) {
   9700       i17 = i14;
   9701      } else {
   9702       _abort();
   9703      }
   9704     } else {
   9705      i17 = i11 + 8 | 0;
   9706     }
   9707     HEAP32[i2 + 12 >> 2] = i11;
   9708     HEAP32[i17 >> 2] = i2;
   9709     i2 = i13;
   9710     i11 = i12;
   9711     break;
   9712    }
   9713    i17 = HEAP32[i7 + (i15 + 24) >> 2] | 0;
   9714    i18 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
   9715    do {
   9716     if ((i18 | 0) == (i13 | 0)) {
   9717      i19 = i7 + (i15 + 20) | 0;
   9718      i18 = HEAP32[i19 >> 2] | 0;
   9719      if ((i18 | 0) == 0) {
   9720       i19 = i7 + (i15 + 16) | 0;
   9721       i18 = HEAP32[i19 >> 2] | 0;
   9722       if ((i18 | 0) == 0) {
   9723        i14 = 0;
   9724        break;
   9725       }
   9726      }
   9727      while (1) {
   9728       i21 = i18 + 20 | 0;
   9729       i20 = HEAP32[i21 >> 2] | 0;
   9730       if ((i20 | 0) != 0) {
   9731        i18 = i20;
   9732        i19 = i21;
   9733        continue;
   9734       }
   9735       i20 = i18 + 16 | 0;
   9736       i21 = HEAP32[i20 >> 2] | 0;
   9737       if ((i21 | 0) == 0) {
   9738        break;
   9739       } else {
   9740        i18 = i21;
   9741        i19 = i20;
   9742       }
   9743      }
   9744      if (i19 >>> 0 < i16 >>> 0) {
   9745       _abort();
   9746      } else {
   9747       HEAP32[i19 >> 2] = 0;
   9748       i14 = i18;
   9749       break;
   9750      }
   9751     } else {
   9752      i19 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
   9753      if (i19 >>> 0 < i16 >>> 0) {
   9754       _abort();
   9755      }
   9756      i16 = i19 + 12 | 0;
   9757      if ((HEAP32[i16 >> 2] | 0) != (i13 | 0)) {
   9758       _abort();
   9759      }
   9760      i20 = i18 + 8 | 0;
   9761      if ((HEAP32[i20 >> 2] | 0) == (i13 | 0)) {
   9762       HEAP32[i16 >> 2] = i18;
   9763       HEAP32[i20 >> 2] = i19;
   9764       i14 = i18;
   9765       break;
   9766      } else {
   9767       _abort();
   9768      }
   9769     }
   9770    } while (0);
   9771    if ((i17 | 0) != 0) {
   9772     i18 = HEAP32[i7 + (i15 + 28) >> 2] | 0;
   9773     i16 = 7464 + (i18 << 2) | 0;
   9774     if ((i13 | 0) == (HEAP32[i16 >> 2] | 0)) {
   9775      HEAP32[i16 >> 2] = i14;
   9776      if ((i14 | 0) == 0) {
   9777       HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i18);
   9778       i2 = i13;
   9779       i11 = i12;
   9780       break;
   9781      }
   9782     } else {
   9783      if (i17 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9784       _abort();
   9785      }
   9786      i16 = i17 + 16 | 0;
   9787      if ((HEAP32[i16 >> 2] | 0) == (i13 | 0)) {
   9788       HEAP32[i16 >> 2] = i14;
   9789      } else {
   9790       HEAP32[i17 + 20 >> 2] = i14;
   9791      }
   9792      if ((i14 | 0) == 0) {
   9793       i2 = i13;
   9794       i11 = i12;
   9795       break;
   9796      }
   9797     }
   9798     if (i14 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9799      _abort();
   9800     }
   9801     HEAP32[i14 + 24 >> 2] = i17;
   9802     i16 = HEAP32[i7 + (i15 + 16) >> 2] | 0;
   9803     do {
   9804      if ((i16 | 0) != 0) {
   9805       if (i16 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9806        _abort();
   9807       } else {
   9808        HEAP32[i14 + 16 >> 2] = i16;
   9809        HEAP32[i16 + 24 >> 2] = i14;
   9810        break;
   9811       }
   9812      }
   9813     } while (0);
   9814     i15 = HEAP32[i7 + (i15 + 20) >> 2] | 0;
   9815     if ((i15 | 0) != 0) {
   9816      if (i15 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9817       _abort();
   9818      } else {
   9819       HEAP32[i14 + 20 >> 2] = i15;
   9820       HEAP32[i15 + 24 >> 2] = i14;
   9821       i2 = i13;
   9822       i11 = i12;
   9823       break;
   9824      }
   9825     } else {
   9826      i2 = i13;
   9827      i11 = i12;
   9828     }
   9829    } else {
   9830     i2 = i13;
   9831     i11 = i12;
   9832    }
   9833   } else {
   9834    i2 = i15;
   9835    i11 = i8;
   9836   }
   9837  } while (0);
   9838  if (!(i2 >>> 0 < i6 >>> 0)) {
   9839   _abort();
   9840  }
   9841  i12 = i7 + (i8 + -4) | 0;
   9842  i13 = HEAP32[i12 >> 2] | 0;
   9843  if ((i13 & 1 | 0) == 0) {
   9844   _abort();
   9845  }
   9846  if ((i13 & 2 | 0) == 0) {
   9847   if ((i6 | 0) == (HEAP32[7184 >> 2] | 0)) {
   9848    i21 = (HEAP32[7172 >> 2] | 0) + i11 | 0;
   9849    HEAP32[7172 >> 2] = i21;
   9850    HEAP32[7184 >> 2] = i2;
   9851    HEAP32[i2 + 4 >> 2] = i21 | 1;
   9852    if ((i2 | 0) != (HEAP32[7180 >> 2] | 0)) {
   9853     STACKTOP = i1;
   9854     return;
   9855    }
   9856    HEAP32[7180 >> 2] = 0;
   9857    HEAP32[7168 >> 2] = 0;
   9858    STACKTOP = i1;
   9859    return;
   9860   }
   9861   if ((i6 | 0) == (HEAP32[7180 >> 2] | 0)) {
   9862    i21 = (HEAP32[7168 >> 2] | 0) + i11 | 0;
   9863    HEAP32[7168 >> 2] = i21;
   9864    HEAP32[7180 >> 2] = i2;
   9865    HEAP32[i2 + 4 >> 2] = i21 | 1;
   9866    HEAP32[i2 + i21 >> 2] = i21;
   9867    STACKTOP = i1;
   9868    return;
   9869   }
   9870   i11 = (i13 & -8) + i11 | 0;
   9871   i12 = i13 >>> 3;
   9872   do {
   9873    if (!(i13 >>> 0 < 256)) {
   9874     i10 = HEAP32[i7 + (i8 + 16) >> 2] | 0;
   9875     i15 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
   9876     do {
   9877      if ((i15 | 0) == (i6 | 0)) {
   9878       i13 = i7 + (i8 + 12) | 0;
   9879       i12 = HEAP32[i13 >> 2] | 0;
   9880       if ((i12 | 0) == 0) {
   9881        i13 = i7 + (i8 + 8) | 0;
   9882        i12 = HEAP32[i13 >> 2] | 0;
   9883        if ((i12 | 0) == 0) {
   9884         i9 = 0;
   9885         break;
   9886        }
   9887       }
   9888       while (1) {
   9889        i14 = i12 + 20 | 0;
   9890        i15 = HEAP32[i14 >> 2] | 0;
   9891        if ((i15 | 0) != 0) {
   9892         i12 = i15;
   9893         i13 = i14;
   9894         continue;
   9895        }
   9896        i14 = i12 + 16 | 0;
   9897        i15 = HEAP32[i14 >> 2] | 0;
   9898        if ((i15 | 0) == 0) {
   9899         break;
   9900        } else {
   9901         i12 = i15;
   9902         i13 = i14;
   9903        }
   9904       }
   9905       if (i13 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9906        _abort();
   9907       } else {
   9908        HEAP32[i13 >> 2] = 0;
   9909        i9 = i12;
   9910        break;
   9911       }
   9912      } else {
   9913       i13 = HEAP32[i7 + i8 >> 2] | 0;
   9914       if (i13 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9915        _abort();
   9916       }
   9917       i14 = i13 + 12 | 0;
   9918       if ((HEAP32[i14 >> 2] | 0) != (i6 | 0)) {
   9919        _abort();
   9920       }
   9921       i12 = i15 + 8 | 0;
   9922       if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
   9923        HEAP32[i14 >> 2] = i15;
   9924        HEAP32[i12 >> 2] = i13;
   9925        i9 = i15;
   9926        break;
   9927       } else {
   9928        _abort();
   9929       }
   9930      }
   9931     } while (0);
   9932     if ((i10 | 0) != 0) {
   9933      i12 = HEAP32[i7 + (i8 + 20) >> 2] | 0;
   9934      i13 = 7464 + (i12 << 2) | 0;
   9935      if ((i6 | 0) == (HEAP32[i13 >> 2] | 0)) {
   9936       HEAP32[i13 >> 2] = i9;
   9937       if ((i9 | 0) == 0) {
   9938        HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i12);
   9939        break;
   9940       }
   9941      } else {
   9942       if (i10 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9943        _abort();
   9944       }
   9945       i12 = i10 + 16 | 0;
   9946       if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
   9947        HEAP32[i12 >> 2] = i9;
   9948       } else {
   9949        HEAP32[i10 + 20 >> 2] = i9;
   9950       }
   9951       if ((i9 | 0) == 0) {
   9952        break;
   9953       }
   9954      }
   9955      if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9956       _abort();
   9957      }
   9958      HEAP32[i9 + 24 >> 2] = i10;
   9959      i6 = HEAP32[i7 + (i8 + 8) >> 2] | 0;
   9960      do {
   9961       if ((i6 | 0) != 0) {
   9962        if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9963         _abort();
   9964        } else {
   9965         HEAP32[i9 + 16 >> 2] = i6;
   9966         HEAP32[i6 + 24 >> 2] = i9;
   9967         break;
   9968        }
   9969       }
   9970      } while (0);
   9971      i6 = HEAP32[i7 + (i8 + 12) >> 2] | 0;
   9972      if ((i6 | 0) != 0) {
   9973       if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9974        _abort();
   9975       } else {
   9976        HEAP32[i9 + 20 >> 2] = i6;
   9977        HEAP32[i6 + 24 >> 2] = i9;
   9978        break;
   9979       }
   9980      }
   9981     }
   9982    } else {
   9983     i9 = HEAP32[i7 + i8 >> 2] | 0;
   9984     i7 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
   9985     i8 = 7200 + (i12 << 1 << 2) | 0;
   9986     if ((i9 | 0) != (i8 | 0)) {
   9987      if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   9988       _abort();
   9989      }
   9990      if ((HEAP32[i9 + 12 >> 2] | 0) != (i6 | 0)) {
   9991       _abort();
   9992      }
   9993     }
   9994     if ((i7 | 0) == (i9 | 0)) {
   9995      HEAP32[1790] = HEAP32[1790] & ~(1 << i12);
   9996      break;
   9997     }
   9998     if ((i7 | 0) != (i8 | 0)) {
   9999      if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   10000       _abort();
   10001      }
   10002      i8 = i7 + 8 | 0;
   10003      if ((HEAP32[i8 >> 2] | 0) == (i6 | 0)) {
   10004       i10 = i8;
   10005      } else {
   10006       _abort();
   10007      }
   10008     } else {
   10009      i10 = i7 + 8 | 0;
   10010     }
   10011     HEAP32[i9 + 12 >> 2] = i7;
   10012     HEAP32[i10 >> 2] = i9;
   10013    }
   10014   } while (0);
   10015   HEAP32[i2 + 4 >> 2] = i11 | 1;
   10016   HEAP32[i2 + i11 >> 2] = i11;
   10017   if ((i2 | 0) == (HEAP32[7180 >> 2] | 0)) {
   10018    HEAP32[7168 >> 2] = i11;
   10019    STACKTOP = i1;
   10020    return;
   10021   }
   10022  } else {
   10023   HEAP32[i12 >> 2] = i13 & -2;
   10024   HEAP32[i2 + 4 >> 2] = i11 | 1;
   10025   HEAP32[i2 + i11 >> 2] = i11;
   10026  }
   10027  i6 = i11 >>> 3;
   10028  if (i11 >>> 0 < 256) {
   10029   i7 = i6 << 1;
   10030   i3 = 7200 + (i7 << 2) | 0;
   10031   i8 = HEAP32[1790] | 0;
   10032   i6 = 1 << i6;
   10033   if ((i8 & i6 | 0) != 0) {
   10034    i6 = 7200 + (i7 + 2 << 2) | 0;
   10035    i7 = HEAP32[i6 >> 2] | 0;
   10036    if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   10037     _abort();
   10038    } else {
   10039     i4 = i6;
   10040     i5 = i7;
   10041    }
   10042   } else {
   10043    HEAP32[1790] = i8 | i6;
   10044    i4 = 7200 + (i7 + 2 << 2) | 0;
   10045    i5 = i3;
   10046   }
   10047   HEAP32[i4 >> 2] = i2;
   10048   HEAP32[i5 + 12 >> 2] = i2;
   10049   HEAP32[i2 + 8 >> 2] = i5;
   10050   HEAP32[i2 + 12 >> 2] = i3;
   10051   STACKTOP = i1;
   10052   return;
   10053  }
   10054  i4 = i11 >>> 8;
   10055  if ((i4 | 0) != 0) {
   10056   if (i11 >>> 0 > 16777215) {
   10057    i4 = 31;
   10058   } else {
   10059    i20 = (i4 + 1048320 | 0) >>> 16 & 8;
   10060    i21 = i4 << i20;
   10061    i19 = (i21 + 520192 | 0) >>> 16 & 4;
   10062    i21 = i21 << i19;
   10063    i4 = (i21 + 245760 | 0) >>> 16 & 2;
   10064    i4 = 14 - (i19 | i20 | i4) + (i21 << i4 >>> 15) | 0;
   10065    i4 = i11 >>> (i4 + 7 | 0) & 1 | i4 << 1;
   10066   }
   10067  } else {
   10068   i4 = 0;
   10069  }
   10070  i5 = 7464 + (i4 << 2) | 0;
   10071  HEAP32[i2 + 28 >> 2] = i4;
   10072  HEAP32[i2 + 20 >> 2] = 0;
   10073  HEAP32[i2 + 16 >> 2] = 0;
   10074  i7 = HEAP32[7164 >> 2] | 0;
   10075  i6 = 1 << i4;
   10076  L199 : do {
   10077   if ((i7 & i6 | 0) != 0) {
   10078    i5 = HEAP32[i5 >> 2] | 0;
   10079    if ((i4 | 0) == 31) {
   10080     i4 = 0;
   10081    } else {
   10082     i4 = 25 - (i4 >>> 1) | 0;
   10083    }
   10084    L204 : do {
   10085     if ((HEAP32[i5 + 4 >> 2] & -8 | 0) != (i11 | 0)) {
   10086      i4 = i11 << i4;
   10087      i7 = i5;
   10088      while (1) {
   10089       i6 = i7 + (i4 >>> 31 << 2) + 16 | 0;
   10090       i5 = HEAP32[i6 >> 2] | 0;
   10091       if ((i5 | 0) == 0) {
   10092        break;
   10093       }
   10094       if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i11 | 0)) {
   10095        i3 = i5;
   10096        break L204;
   10097       } else {
   10098        i4 = i4 << 1;
   10099        i7 = i5;
   10100       }
   10101      }
   10102      if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
   10103       _abort();
   10104      } else {
   10105       HEAP32[i6 >> 2] = i2;
   10106       HEAP32[i2 + 24 >> 2] = i7;
   10107       HEAP32[i2 + 12 >> 2] = i2;
   10108       HEAP32[i2 + 8 >> 2] = i2;
   10109       break L199;
   10110      }
   10111     } else {
   10112      i3 = i5;
   10113     }
   10114    } while (0);
   10115    i5 = i3 + 8 | 0;
   10116    i4 = HEAP32[i5 >> 2] | 0;
   10117    i6 = HEAP32[7176 >> 2] | 0;
   10118    if (i3 >>> 0 < i6 >>> 0) {
   10119     _abort();
   10120    }
   10121    if (i4 >>> 0 < i6 >>> 0) {
   10122     _abort();
   10123    } else {
   10124     HEAP32[i4 + 12 >> 2] = i2;
   10125     HEAP32[i5 >> 2] = i2;
   10126     HEAP32[i2 + 8 >> 2] = i4;
   10127     HEAP32[i2 + 12 >> 2] = i3;
   10128     HEAP32[i2 + 24 >> 2] = 0;
   10129     break;
   10130    }
   10131   } else {
   10132    HEAP32[7164 >> 2] = i7 | i6;
   10133    HEAP32[i5 >> 2] = i2;
   10134    HEAP32[i2 + 24 >> 2] = i5;
   10135    HEAP32[i2 + 12 >> 2] = i2;
   10136    HEAP32[i2 + 8 >> 2] = i2;
   10137   }
   10138  } while (0);
   10139  i21 = (HEAP32[7192 >> 2] | 0) + -1 | 0;
   10140  HEAP32[7192 >> 2] = i21;
   10141  if ((i21 | 0) == 0) {
   10142   i2 = 7616 | 0;
   10143  } else {
   10144   STACKTOP = i1;
   10145   return;
   10146  }
   10147  while (1) {
   10148   i2 = HEAP32[i2 >> 2] | 0;
   10149   if ((i2 | 0) == 0) {
   10150    break;
   10151   } else {
   10152    i2 = i2 + 8 | 0;
   10153   }
   10154  }
   10155  HEAP32[7192 >> 2] = -1;
   10156  STACKTOP = i1;
   10157  return;
   10158 }
   10159 function __ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_(i3, i4, i2) {
   10160  i3 = i3 | 0;
   10161  i4 = i4 | 0;
   10162  i2 = i2 | 0;
   10163  var i1 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
   10164  i1 = STACKTOP;
   10165  STACKTOP = STACKTOP + 32 | 0;
   10166  i7 = i1 + 12 | 0;
   10167  i6 = i1;
   10168  switch ((i4 - i3 | 0) / 12 | 0 | 0) {
   10169  case 5:
   10170   {
   10171    i6 = i3 + 12 | 0;
   10172    i8 = i3 + 24 | 0;
   10173    i5 = i3 + 36 | 0;
   10174    i4 = i4 + -12 | 0;
   10175    __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i3, i6, i8, i5, i2) | 0;
   10176    if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0)) {
   10177     i10 = 1;
   10178     STACKTOP = i1;
   10179     return i10 | 0;
   10180    }
   10181    HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   10182    HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   10183    HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   10184    HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   10185    HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   10186    HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   10187    HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10188    HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10189    HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10190    if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i8) | 0)) {
   10191     i10 = 1;
   10192     STACKTOP = i1;
   10193     return i10 | 0;
   10194    }
   10195    HEAP32[i7 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
   10196    HEAP32[i7 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
   10197    HEAP32[i7 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
   10198    HEAP32[i8 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   10199    HEAP32[i8 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   10200    HEAP32[i8 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   10201    HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10202    HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10203    HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10204    if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i6) | 0)) {
   10205     i10 = 1;
   10206     STACKTOP = i1;
   10207     return i10 | 0;
   10208    }
   10209    HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   10210    HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   10211    HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   10212    HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
   10213    HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
   10214    HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
   10215    HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10216    HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10217    HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10218    if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i3) | 0)) {
   10219     i10 = 1;
   10220     STACKTOP = i1;
   10221     return i10 | 0;
   10222    }
   10223    HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   10224    HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   10225    HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   10226    HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   10227    HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   10228    HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   10229    HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10230    HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10231    HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10232    i10 = 1;
   10233    STACKTOP = i1;
   10234    return i10 | 0;
   10235   }
   10236  case 4:
   10237   {
   10238    __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i3, i3 + 12 | 0, i3 + 24 | 0, i4 + -12 | 0, i2) | 0;
   10239    i10 = 1;
   10240    STACKTOP = i1;
   10241    return i10 | 0;
   10242   }
   10243  case 3:
   10244   {
   10245    i5 = i3 + 12 | 0;
   10246    i4 = i4 + -12 | 0;
   10247    i10 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i3) | 0;
   10248    i6 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0;
   10249    if (!i10) {
   10250     if (!i6) {
   10251      i10 = 1;
   10252      STACKTOP = i1;
   10253      return i10 | 0;
   10254     }
   10255     HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   10256     HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   10257     HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   10258     HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   10259     HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   10260     HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   10261     HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10262     HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10263     HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10264     if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i3) | 0)) {
   10265      i10 = 1;
   10266      STACKTOP = i1;
   10267      return i10 | 0;
   10268     }
   10269     HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   10270     HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   10271     HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   10272     HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   10273     HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   10274     HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   10275     HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10276     HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10277     HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10278     i10 = 1;
   10279     STACKTOP = i1;
   10280     return i10 | 0;
   10281    }
   10282    if (i6) {
   10283     HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   10284     HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   10285     HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   10286     HEAP32[i3 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   10287     HEAP32[i3 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   10288     HEAP32[i3 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   10289     HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10290     HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10291     HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10292     i10 = 1;
   10293     STACKTOP = i1;
   10294     return i10 | 0;
   10295    }
   10296    HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   10297    HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   10298    HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   10299    HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   10300    HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   10301    HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   10302    HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10303    HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10304    HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10305    if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0)) {
   10306     i10 = 1;
   10307     STACKTOP = i1;
   10308     return i10 | 0;
   10309    }
   10310    HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   10311    HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   10312    HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   10313    HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   10314    HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   10315    HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   10316    HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10317    HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10318    HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10319    i10 = 1;
   10320    STACKTOP = i1;
   10321    return i10 | 0;
   10322   }
   10323  case 2:
   10324   {
   10325    i4 = i4 + -12 | 0;
   10326    if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i3) | 0)) {
   10327     i10 = 1;
   10328     STACKTOP = i1;
   10329     return i10 | 0;
   10330    }
   10331    HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   10332    HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   10333    HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   10334    HEAP32[i3 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   10335    HEAP32[i3 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   10336    HEAP32[i3 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   10337    HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10338    HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10339    HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10340    i10 = 1;
   10341    STACKTOP = i1;
   10342    return i10 | 0;
   10343   }
   10344  case 1:
   10345  case 0:
   10346   {
   10347    i10 = 1;
   10348    STACKTOP = i1;
   10349    return i10 | 0;
   10350   }
   10351  default:
   10352   {
   10353    i9 = i3 + 24 | 0;
   10354    i10 = i3 + 12 | 0;
   10355    i11 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i10, i3) | 0;
   10356    i8 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i9, i10) | 0;
   10357    do {
   10358     if (i11) {
   10359      if (i8) {
   10360       HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   10361       HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   10362       HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   10363       HEAP32[i3 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
   10364       HEAP32[i3 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
   10365       HEAP32[i3 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
   10366       HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10367       HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10368       HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10369       break;
   10370      }
   10371      HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   10372      HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   10373      HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   10374      HEAP32[i3 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   10375      HEAP32[i3 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   10376      HEAP32[i3 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   10377      HEAP32[i10 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10378      HEAP32[i10 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10379      HEAP32[i10 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10380      if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i9, i10) | 0) {
   10381       HEAP32[i7 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   10382       HEAP32[i7 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   10383       HEAP32[i7 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   10384       HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
   10385       HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
   10386       HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
   10387       HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10388       HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10389       HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10390      }
   10391     } else {
   10392      if (i8) {
   10393       HEAP32[i7 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   10394       HEAP32[i7 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   10395       HEAP32[i7 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   10396       HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
   10397       HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
   10398       HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
   10399       HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10400       HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10401       HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10402       if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i10, i3) | 0) {
   10403        HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   10404        HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   10405        HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   10406        HEAP32[i3 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
   10407        HEAP32[i3 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
   10408        HEAP32[i3 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
   10409        HEAP32[i10 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10410        HEAP32[i10 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10411        HEAP32[i10 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10412       }
   10413      }
   10414     }
   10415    } while (0);
   10416    i7 = i3 + 36 | 0;
   10417    if ((i7 | 0) == (i4 | 0)) {
   10418     i11 = 1;
   10419     STACKTOP = i1;
   10420     return i11 | 0;
   10421    }
   10422    i8 = 0;
   10423    while (1) {
   10424     if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i9) | 0) {
   10425      HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   10426      HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   10427      HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   10428      i10 = i7;
   10429      while (1) {
   10430       HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
   10431       HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
   10432       HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
   10433       if ((i9 | 0) == (i3 | 0)) {
   10434        break;
   10435       }
   10436       i10 = i9 + -12 | 0;
   10437       if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i10) | 0) {
   10438        i11 = i9;
   10439        i9 = i10;
   10440        i10 = i11;
   10441       } else {
   10442        break;
   10443       }
   10444      }
   10445      HEAP32[i9 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   10446      HEAP32[i9 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   10447      HEAP32[i9 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   10448      i8 = i8 + 1 | 0;
   10449      if ((i8 | 0) == 8) {
   10450       break;
   10451      }
   10452     }
   10453     i9 = i7 + 12 | 0;
   10454     if ((i9 | 0) == (i4 | 0)) {
   10455      i2 = 1;
   10456      i5 = 35;
   10457      break;
   10458     } else {
   10459      i11 = i7;
   10460      i7 = i9;
   10461      i9 = i11;
   10462     }
   10463    }
   10464    if ((i5 | 0) == 35) {
   10465     STACKTOP = i1;
   10466     return i2 | 0;
   10467    }
   10468    i11 = (i7 + 12 | 0) == (i4 | 0);
   10469    STACKTOP = i1;
   10470    return i11 | 0;
   10471   }
   10472  }
   10473  return 0;
   10474 }
   10475 function __ZN13b2DynamicTree7BalanceEi(i11, i6) {
   10476  i11 = i11 | 0;
   10477  i6 = i6 | 0;
   10478  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, d19 = 0.0, i20 = 0, i21 = 0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0;
   10479  i1 = STACKTOP;
   10480  if ((i6 | 0) == -1) {
   10481   ___assert_fail(3216, 2944, 382, 3232);
   10482  }
   10483  i5 = HEAP32[i11 + 4 >> 2] | 0;
   10484  i13 = i5 + (i6 * 36 | 0) | 0;
   10485  i18 = i5 + (i6 * 36 | 0) + 24 | 0;
   10486  i8 = HEAP32[i18 >> 2] | 0;
   10487  if ((i8 | 0) == -1) {
   10488   i21 = i6;
   10489   STACKTOP = i1;
   10490   return i21 | 0;
   10491  }
   10492  i2 = i5 + (i6 * 36 | 0) + 32 | 0;
   10493  if ((HEAP32[i2 >> 2] | 0) < 2) {
   10494   i21 = i6;
   10495   STACKTOP = i1;
   10496   return i21 | 0;
   10497  }
   10498  i20 = i5 + (i6 * 36 | 0) + 28 | 0;
   10499  i7 = HEAP32[i20 >> 2] | 0;
   10500  if (!((i8 | 0) > -1)) {
   10501   ___assert_fail(3240, 2944, 392, 3232);
   10502  }
   10503  i12 = HEAP32[i11 + 12 >> 2] | 0;
   10504  if ((i8 | 0) >= (i12 | 0)) {
   10505   ___assert_fail(3240, 2944, 392, 3232);
   10506  }
   10507  if (!((i7 | 0) > -1 & (i7 | 0) < (i12 | 0))) {
   10508   ___assert_fail(3272, 2944, 393, 3232);
   10509  }
   10510  i9 = i5 + (i8 * 36 | 0) | 0;
   10511  i10 = i5 + (i7 * 36 | 0) | 0;
   10512  i3 = i5 + (i7 * 36 | 0) + 32 | 0;
   10513  i4 = i5 + (i8 * 36 | 0) + 32 | 0;
   10514  i14 = (HEAP32[i3 >> 2] | 0) - (HEAP32[i4 >> 2] | 0) | 0;
   10515  if ((i14 | 0) > 1) {
   10516   i21 = i5 + (i7 * 36 | 0) + 24 | 0;
   10517   i14 = HEAP32[i21 >> 2] | 0;
   10518   i18 = i5 + (i7 * 36 | 0) + 28 | 0;
   10519   i15 = HEAP32[i18 >> 2] | 0;
   10520   i16 = i5 + (i14 * 36 | 0) | 0;
   10521   i17 = i5 + (i15 * 36 | 0) | 0;
   10522   if (!((i14 | 0) > -1 & (i14 | 0) < (i12 | 0))) {
   10523    ___assert_fail(3304, 2944, 407, 3232);
   10524   }
   10525   if (!((i15 | 0) > -1 & (i15 | 0) < (i12 | 0))) {
   10526    ___assert_fail(3336, 2944, 408, 3232);
   10527   }
   10528   HEAP32[i21 >> 2] = i6;
   10529   i21 = i5 + (i6 * 36 | 0) + 20 | 0;
   10530   i12 = i5 + (i7 * 36 | 0) + 20 | 0;
   10531   HEAP32[i12 >> 2] = HEAP32[i21 >> 2];
   10532   HEAP32[i21 >> 2] = i7;
   10533   i12 = HEAP32[i12 >> 2] | 0;
   10534   do {
   10535    if (!((i12 | 0) == -1)) {
   10536     i11 = i5 + (i12 * 36 | 0) + 24 | 0;
   10537     if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
   10538      HEAP32[i11 >> 2] = i7;
   10539      break;
   10540     }
   10541     i11 = i5 + (i12 * 36 | 0) + 28 | 0;
   10542     if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
   10543      HEAP32[i11 >> 2] = i7;
   10544      break;
   10545     } else {
   10546      ___assert_fail(3368, 2944, 424, 3232);
   10547     }
   10548    } else {
   10549     HEAP32[i11 >> 2] = i7;
   10550    }
   10551   } while (0);
   10552   i11 = i5 + (i14 * 36 | 0) + 32 | 0;
   10553   i12 = i5 + (i15 * 36 | 0) + 32 | 0;
   10554   if ((HEAP32[i11 >> 2] | 0) > (HEAP32[i12 >> 2] | 0)) {
   10555    HEAP32[i18 >> 2] = i14;
   10556    HEAP32[i20 >> 2] = i15;
   10557    HEAP32[i5 + (i15 * 36 | 0) + 20 >> 2] = i6;
   10558    d19 = +HEAPF32[i9 >> 2];
   10559    d22 = +HEAPF32[i17 >> 2];
   10560    d19 = d19 < d22 ? d19 : d22;
   10561    d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 4 >> 2];
   10562    d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
   10563    d24 = +d19;
   10564    d23 = +(d23 < d22 ? d23 : d22);
   10565    i21 = i13;
   10566    HEAPF32[i21 >> 2] = d24;
   10567    HEAPF32[i21 + 4 >> 2] = d23;
   10568    d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 8 >> 2];
   10569    d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
   10570    d22 = +HEAPF32[i5 + (i8 * 36 | 0) + 12 >> 2];
   10571    d25 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
   10572    d23 = +(d23 > d24 ? d23 : d24);
   10573    d24 = +(d22 > d25 ? d22 : d25);
   10574    i21 = i5 + (i6 * 36 | 0) + 8 | 0;
   10575    HEAPF32[i21 >> 2] = d23;
   10576    HEAPF32[i21 + 4 >> 2] = d24;
   10577    d24 = +HEAPF32[i16 >> 2];
   10578    d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
   10579    d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
   10580    d19 = +(d19 < d24 ? d19 : d24);
   10581    d22 = +(d22 < d23 ? d22 : d23);
   10582    i21 = i10;
   10583    HEAPF32[i21 >> 2] = d19;
   10584    HEAPF32[i21 + 4 >> 2] = d22;
   10585    d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
   10586    d19 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
   10587    d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
   10588    d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
   10589    d19 = +(d22 > d19 ? d22 : d19);
   10590    d25 = +(d23 > d24 ? d23 : d24);
   10591    i5 = i5 + (i7 * 36 | 0) + 8 | 0;
   10592    HEAPF32[i5 >> 2] = d19;
   10593    HEAPF32[i5 + 4 >> 2] = d25;
   10594    i4 = HEAP32[i4 >> 2] | 0;
   10595    i5 = HEAP32[i12 >> 2] | 0;
   10596    i4 = ((i4 | 0) > (i5 | 0) ? i4 : i5) + 1 | 0;
   10597    HEAP32[i2 >> 2] = i4;
   10598    i2 = HEAP32[i11 >> 2] | 0;
   10599    i2 = (i4 | 0) > (i2 | 0) ? i4 : i2;
   10600   } else {
   10601    HEAP32[i18 >> 2] = i15;
   10602    HEAP32[i20 >> 2] = i14;
   10603    HEAP32[i5 + (i14 * 36 | 0) + 20 >> 2] = i6;
   10604    d19 = +HEAPF32[i9 >> 2];
   10605    d22 = +HEAPF32[i16 >> 2];
   10606    d19 = d19 < d22 ? d19 : d22;
   10607    d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 4 >> 2];
   10608    d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
   10609    d22 = +d19;
   10610    d23 = +(d23 < d24 ? d23 : d24);
   10611    i21 = i13;
   10612    HEAPF32[i21 >> 2] = d22;
   10613    HEAPF32[i21 + 4 >> 2] = d23;
   10614    d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 8 >> 2];
   10615    d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
   10616    d22 = +HEAPF32[i5 + (i8 * 36 | 0) + 12 >> 2];
   10617    d25 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
   10618    d23 = +(d23 > d24 ? d23 : d24);
   10619    d24 = +(d22 > d25 ? d22 : d25);
   10620    i21 = i5 + (i6 * 36 | 0) + 8 | 0;
   10621    HEAPF32[i21 >> 2] = d23;
   10622    HEAPF32[i21 + 4 >> 2] = d24;
   10623    d24 = +HEAPF32[i17 >> 2];
   10624    d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
   10625    d23 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
   10626    d19 = +(d19 < d24 ? d19 : d24);
   10627    d23 = +(d22 < d23 ? d22 : d23);
   10628    i21 = i10;
   10629    HEAPF32[i21 >> 2] = d19;
   10630    HEAPF32[i21 + 4 >> 2] = d23;
   10631    d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
   10632    d19 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
   10633    d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
   10634    d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
   10635    d19 = +(d23 > d19 ? d23 : d19);
   10636    d25 = +(d22 > d24 ? d22 : d24);
   10637    i5 = i5 + (i7 * 36 | 0) + 8 | 0;
   10638    HEAPF32[i5 >> 2] = d19;
   10639    HEAPF32[i5 + 4 >> 2] = d25;
   10640    i4 = HEAP32[i4 >> 2] | 0;
   10641    i5 = HEAP32[i11 >> 2] | 0;
   10642    i4 = ((i4 | 0) > (i5 | 0) ? i4 : i5) + 1 | 0;
   10643    HEAP32[i2 >> 2] = i4;
   10644    i2 = HEAP32[i12 >> 2] | 0;
   10645    i2 = (i4 | 0) > (i2 | 0) ? i4 : i2;
   10646   }
   10647   HEAP32[i3 >> 2] = i2 + 1;
   10648   i21 = i7;
   10649   STACKTOP = i1;
   10650   return i21 | 0;
   10651  }
   10652  if (!((i14 | 0) < -1)) {
   10653   i21 = i6;
   10654   STACKTOP = i1;
   10655   return i21 | 0;
   10656  }
   10657  i21 = i5 + (i8 * 36 | 0) + 24 | 0;
   10658  i14 = HEAP32[i21 >> 2] | 0;
   10659  i20 = i5 + (i8 * 36 | 0) + 28 | 0;
   10660  i15 = HEAP32[i20 >> 2] | 0;
   10661  i17 = i5 + (i14 * 36 | 0) | 0;
   10662  i16 = i5 + (i15 * 36 | 0) | 0;
   10663  if (!((i14 | 0) > -1 & (i14 | 0) < (i12 | 0))) {
   10664   ___assert_fail(3400, 2944, 467, 3232);
   10665  }
   10666  if (!((i15 | 0) > -1 & (i15 | 0) < (i12 | 0))) {
   10667   ___assert_fail(3432, 2944, 468, 3232);
   10668  }
   10669  HEAP32[i21 >> 2] = i6;
   10670  i21 = i5 + (i6 * 36 | 0) + 20 | 0;
   10671  i12 = i5 + (i8 * 36 | 0) + 20 | 0;
   10672  HEAP32[i12 >> 2] = HEAP32[i21 >> 2];
   10673  HEAP32[i21 >> 2] = i8;
   10674  i12 = HEAP32[i12 >> 2] | 0;
   10675  do {
   10676   if (!((i12 | 0) == -1)) {
   10677    i11 = i5 + (i12 * 36 | 0) + 24 | 0;
   10678    if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
   10679     HEAP32[i11 >> 2] = i8;
   10680     break;
   10681    }
   10682    i11 = i5 + (i12 * 36 | 0) + 28 | 0;
   10683    if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
   10684     HEAP32[i11 >> 2] = i8;
   10685     break;
   10686    } else {
   10687     ___assert_fail(3464, 2944, 484, 3232);
   10688    }
   10689   } else {
   10690    HEAP32[i11 >> 2] = i8;
   10691   }
   10692  } while (0);
   10693  i12 = i5 + (i14 * 36 | 0) + 32 | 0;
   10694  i11 = i5 + (i15 * 36 | 0) + 32 | 0;
   10695  if ((HEAP32[i12 >> 2] | 0) > (HEAP32[i11 >> 2] | 0)) {
   10696   HEAP32[i20 >> 2] = i14;
   10697   HEAP32[i18 >> 2] = i15;
   10698   HEAP32[i5 + (i15 * 36 | 0) + 20 >> 2] = i6;
   10699   d19 = +HEAPF32[i10 >> 2];
   10700   d22 = +HEAPF32[i16 >> 2];
   10701   d19 = d19 < d22 ? d19 : d22;
   10702   d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 4 >> 2];
   10703   d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
   10704   d24 = +d19;
   10705   d23 = +(d23 < d22 ? d23 : d22);
   10706   i21 = i13;
   10707   HEAPF32[i21 >> 2] = d24;
   10708   HEAPF32[i21 + 4 >> 2] = d23;
   10709   d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 8 >> 2];
   10710   d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
   10711   d24 = +HEAPF32[i5 + (i7 * 36 | 0) + 12 >> 2];
   10712   d25 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
   10713   d22 = +(d23 > d22 ? d23 : d22);
   10714   d24 = +(d24 > d25 ? d24 : d25);
   10715   i21 = i5 + (i6 * 36 | 0) + 8 | 0;
   10716   HEAPF32[i21 >> 2] = d22;
   10717   HEAPF32[i21 + 4 >> 2] = d24;
   10718   d24 = +HEAPF32[i17 >> 2];
   10719   d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
   10720   d22 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
   10721   d19 = +(d19 < d24 ? d19 : d24);
   10722   d22 = +(d23 < d22 ? d23 : d22);
   10723   i21 = i9;
   10724   HEAPF32[i21 >> 2] = d19;
   10725   HEAPF32[i21 + 4 >> 2] = d22;
   10726   d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
   10727   d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
   10728   d19 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
   10729   d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
   10730   d22 = +(d22 > d23 ? d22 : d23);
   10731   d25 = +(d19 > d24 ? d19 : d24);
   10732   i5 = i5 + (i8 * 36 | 0) + 8 | 0;
   10733   HEAPF32[i5 >> 2] = d22;
   10734   HEAPF32[i5 + 4 >> 2] = d25;
   10735   i3 = HEAP32[i3 >> 2] | 0;
   10736   i5 = HEAP32[i11 >> 2] | 0;
   10737   i3 = ((i3 | 0) > (i5 | 0) ? i3 : i5) + 1 | 0;
   10738   HEAP32[i2 >> 2] = i3;
   10739   i2 = HEAP32[i12 >> 2] | 0;
   10740   i2 = (i3 | 0) > (i2 | 0) ? i3 : i2;
   10741  } else {
   10742   HEAP32[i20 >> 2] = i15;
   10743   HEAP32[i18 >> 2] = i14;
   10744   HEAP32[i5 + (i14 * 36 | 0) + 20 >> 2] = i6;
   10745   d19 = +HEAPF32[i10 >> 2];
   10746   d22 = +HEAPF32[i17 >> 2];
   10747   d19 = d19 < d22 ? d19 : d22;
   10748   d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 4 >> 2];
   10749   d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
   10750   d22 = +d19;
   10751   d24 = +(d23 < d24 ? d23 : d24);
   10752   i21 = i13;
   10753   HEAPF32[i21 >> 2] = d22;
   10754   HEAPF32[i21 + 4 >> 2] = d24;
   10755   d24 = +HEAPF32[i5 + (i7 * 36 | 0) + 8 >> 2];
   10756   d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
   10757   d22 = +HEAPF32[i5 + (i7 * 36 | 0) + 12 >> 2];
   10758   d25 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
   10759   d23 = +(d24 > d23 ? d24 : d23);
   10760   d24 = +(d22 > d25 ? d22 : d25);
   10761   i21 = i5 + (i6 * 36 | 0) + 8 | 0;
   10762   HEAPF32[i21 >> 2] = d23;
   10763   HEAPF32[i21 + 4 >> 2] = d24;
   10764   d24 = +HEAPF32[i16 >> 2];
   10765   d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
   10766   d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
   10767   d19 = +(d19 < d24 ? d19 : d24);
   10768   d22 = +(d23 < d22 ? d23 : d22);
   10769   i21 = i9;
   10770   HEAPF32[i21 >> 2] = d19;
   10771   HEAPF32[i21 + 4 >> 2] = d22;
   10772   d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
   10773   d23 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
   10774   d19 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
   10775   d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
   10776   d22 = +(d22 > d23 ? d22 : d23);
   10777   d25 = +(d19 > d24 ? d19 : d24);
   10778   i5 = i5 + (i8 * 36 | 0) + 8 | 0;
   10779   HEAPF32[i5 >> 2] = d22;
   10780   HEAPF32[i5 + 4 >> 2] = d25;
   10781   i3 = HEAP32[i3 >> 2] | 0;
   10782   i5 = HEAP32[i12 >> 2] | 0;
   10783   i3 = ((i3 | 0) > (i5 | 0) ? i3 : i5) + 1 | 0;
   10784   HEAP32[i2 >> 2] = i3;
   10785   i2 = HEAP32[i11 >> 2] | 0;
   10786   i2 = (i3 | 0) > (i2 | 0) ? i3 : i2;
   10787  }
   10788  HEAP32[i4 >> 2] = i2 + 1;
   10789  i21 = i8;
   10790  STACKTOP = i1;
   10791  return i21 | 0;
   10792 }
   10793 function __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i2, i5, i3) {
   10794  i2 = i2 | 0;
   10795  i5 = i5 | 0;
   10796  i3 = i3 | 0;
   10797  var i1 = 0, i4 = 0, i6 = 0, d7 = 0.0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0, d22 = 0.0, i23 = 0, d24 = 0.0, d25 = 0.0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, d36 = 0.0, d37 = 0.0, d38 = 0.0, i39 = 0, i40 = 0, i41 = 0, i42 = 0, d43 = 0.0, d44 = 0.0, d45 = 0.0, i46 = 0;
   10798  i1 = STACKTOP;
   10799  STACKTOP = STACKTOP + 176 | 0;
   10800  i11 = i1 + 152 | 0;
   10801  i10 = i1 + 136 | 0;
   10802  i4 = i1 + 24 | 0;
   10803  i14 = i1 + 12 | 0;
   10804  i15 = i1;
   10805  HEAP32[652] = (HEAP32[652] | 0) + 1;
   10806  i9 = i3 + 28 | 0;
   10807  i31 = i3 + 56 | 0;
   10808  HEAP32[i11 + 0 >> 2] = HEAP32[i31 + 0 >> 2];
   10809  HEAP32[i11 + 4 >> 2] = HEAP32[i31 + 4 >> 2];
   10810  HEAP32[i11 + 8 >> 2] = HEAP32[i31 + 8 >> 2];
   10811  HEAP32[i11 + 12 >> 2] = HEAP32[i31 + 12 >> 2];
   10812  i31 = i3 + 72 | 0;
   10813  HEAP32[i10 + 0 >> 2] = HEAP32[i31 + 0 >> 2];
   10814  HEAP32[i10 + 4 >> 2] = HEAP32[i31 + 4 >> 2];
   10815  HEAP32[i10 + 8 >> 2] = HEAP32[i31 + 8 >> 2];
   10816  HEAP32[i10 + 12 >> 2] = HEAP32[i31 + 12 >> 2];
   10817  __ZN9b2Simplex9ReadCacheEPK14b2SimplexCachePK15b2DistanceProxyRK11b2TransformS5_S8_(i4, i5, i3, i11, i9, i10);
   10818  i9 = i4 + 108 | 0;
   10819  i31 = HEAP32[i9 >> 2] | 0;
   10820  if ((i31 | 0) == 3 | (i31 | 0) == 2 | (i31 | 0) == 1) {
   10821   i8 = i4 + 16 | 0;
   10822   i6 = i4 + 20 | 0;
   10823   d17 = +HEAPF32[i11 + 12 >> 2];
   10824   d18 = +HEAPF32[i11 + 8 >> 2];
   10825   i13 = i3 + 16 | 0;
   10826   i12 = i3 + 20 | 0;
   10827   d16 = +HEAPF32[i11 >> 2];
   10828   d21 = +HEAPF32[i11 + 4 >> 2];
   10829   d19 = +HEAPF32[i10 + 12 >> 2];
   10830   d22 = +HEAPF32[i10 + 8 >> 2];
   10831   i23 = i3 + 44 | 0;
   10832   i20 = i3 + 48 | 0;
   10833   d24 = +HEAPF32[i10 >> 2];
   10834   d25 = +HEAPF32[i10 + 4 >> 2];
   10835   i11 = i4 + 52 | 0;
   10836   i10 = i4 + 56 | 0;
   10837   i30 = i4 + 16 | 0;
   10838   i27 = i4 + 36 | 0;
   10839   i26 = i4 + 52 | 0;
   10840   i29 = i4 + 24 | 0;
   10841   i28 = i4 + 60 | 0;
   10842   i33 = 0;
   10843   L3 : while (1) {
   10844    i32 = (i31 | 0) > 0;
   10845    if (i32) {
   10846     i34 = 0;
   10847     do {
   10848      HEAP32[i14 + (i34 << 2) >> 2] = HEAP32[i4 + (i34 * 36 | 0) + 28 >> 2];
   10849      HEAP32[i15 + (i34 << 2) >> 2] = HEAP32[i4 + (i34 * 36 | 0) + 32 >> 2];
   10850      i34 = i34 + 1 | 0;
   10851     } while ((i34 | 0) != (i31 | 0));
   10852    }
   10853    do {
   10854     if ((i31 | 0) == 2) {
   10855      i46 = i30;
   10856      d45 = +HEAPF32[i46 >> 2];
   10857      d36 = +HEAPF32[i46 + 4 >> 2];
   10858      i46 = i26;
   10859      d38 = +HEAPF32[i46 >> 2];
   10860      d37 = +HEAPF32[i46 + 4 >> 2];
   10861      d43 = d38 - d45;
   10862      d44 = d37 - d36;
   10863      d36 = d45 * d43 + d36 * d44;
   10864      if (d36 >= -0.0) {
   10865       HEAPF32[i29 >> 2] = 1.0;
   10866       HEAP32[i9 >> 2] = 1;
   10867       i35 = 17;
   10868       break;
   10869      }
   10870      d37 = d38 * d43 + d37 * d44;
   10871      if (!(d37 <= 0.0)) {
   10872       d45 = 1.0 / (d37 - d36);
   10873       HEAPF32[i29 >> 2] = d37 * d45;
   10874       HEAPF32[i28 >> 2] = -(d36 * d45);
   10875       HEAP32[i9 >> 2] = 2;
   10876       i35 = 18;
   10877       break;
   10878      } else {
   10879       HEAPF32[i28 >> 2] = 1.0;
   10880       HEAP32[i9 >> 2] = 1;
   10881       i34 = i4 + 0 | 0;
   10882       i39 = i27 + 0 | 0;
   10883       i35 = i34 + 36 | 0;
   10884       do {
   10885        HEAP32[i34 >> 2] = HEAP32[i39 >> 2];
   10886        i34 = i34 + 4 | 0;
   10887        i39 = i39 + 4 | 0;
   10888       } while ((i34 | 0) < (i35 | 0));
   10889       i35 = 17;
   10890       break;
   10891      }
   10892     } else if ((i31 | 0) == 3) {
   10893      __ZN9b2Simplex6Solve3Ev(i4);
   10894      i34 = HEAP32[i9 >> 2] | 0;
   10895      if ((i34 | 0) == 1) {
   10896       i35 = 17;
   10897      } else if ((i34 | 0) == 0) {
   10898       i35 = 15;
   10899       break L3;
   10900      } else if ((i34 | 0) == 2) {
   10901       i35 = 18;
   10902      } else if ((i34 | 0) == 3) {
   10903       i35 = 42;
   10904       break L3;
   10905      } else {
   10906       i35 = 16;
   10907       break L3;
   10908      }
   10909     } else if ((i31 | 0) == 1) {
   10910      i35 = 17;
   10911     } else {
   10912      i35 = 13;
   10913      break L3;
   10914     }
   10915    } while (0);
   10916    do {
   10917     if ((i35 | 0) == 17) {
   10918      d36 = -+HEAPF32[i8 >> 2];
   10919      d37 = -+HEAPF32[i6 >> 2];
   10920      i34 = 1;
   10921     } else if ((i35 | 0) == 18) {
   10922      d44 = +HEAPF32[i8 >> 2];
   10923      d37 = +HEAPF32[i11 >> 2] - d44;
   10924      d45 = +HEAPF32[i6 >> 2];
   10925      d36 = +HEAPF32[i10 >> 2] - d45;
   10926      if (d44 * d36 - d37 * d45 > 0.0) {
   10927       d36 = -d36;
   10928       i34 = 2;
   10929       break;
   10930      } else {
   10931       d37 = -d37;
   10932       i34 = 2;
   10933       break;
   10934      }
   10935     }
   10936    } while (0);
   10937    if (d37 * d37 + d36 * d36 < 1.4210854715202004e-14) {
   10938     i35 = 42;
   10939     break;
   10940    }
   10941    i39 = i4 + (i34 * 36 | 0) | 0;
   10942    d44 = -d36;
   10943    d45 = -d37;
   10944    d43 = d17 * d44 + d18 * d45;
   10945    d44 = d17 * d45 - d18 * d44;
   10946    i40 = HEAP32[i13 >> 2] | 0;
   10947    i41 = HEAP32[i12 >> 2] | 0;
   10948    if ((i41 | 0) > 1) {
   10949     i42 = 0;
   10950     d45 = d44 * +HEAPF32[i40 + 4 >> 2] + d43 * +HEAPF32[i40 >> 2];
   10951     i46 = 1;
   10952     while (1) {
   10953      d38 = d43 * +HEAPF32[i40 + (i46 << 3) >> 2] + d44 * +HEAPF32[i40 + (i46 << 3) + 4 >> 2];
   10954      i35 = d38 > d45;
   10955      i42 = i35 ? i46 : i42;
   10956      i46 = i46 + 1 | 0;
   10957      if ((i46 | 0) == (i41 | 0)) {
   10958       break;
   10959      } else {
   10960       d45 = i35 ? d38 : d45;
   10961      }
   10962     }
   10963     i35 = i4 + (i34 * 36 | 0) + 28 | 0;
   10964     HEAP32[i35 >> 2] = i42;
   10965     if (!((i42 | 0) > -1)) {
   10966      i35 = 28;
   10967      break;
   10968     }
   10969    } else {
   10970     i35 = i4 + (i34 * 36 | 0) + 28 | 0;
   10971     HEAP32[i35 >> 2] = 0;
   10972     i42 = 0;
   10973    }
   10974    if ((i41 | 0) <= (i42 | 0)) {
   10975     i35 = 28;
   10976     break;
   10977    }
   10978    d45 = +HEAPF32[i40 + (i42 << 3) >> 2];
   10979    d43 = +HEAPF32[i40 + (i42 << 3) + 4 >> 2];
   10980    d38 = d16 + (d17 * d45 - d18 * d43);
   10981    d44 = +d38;
   10982    d43 = +(d45 * d18 + d17 * d43 + d21);
   10983    i40 = i39;
   10984    HEAPF32[i40 >> 2] = d44;
   10985    HEAPF32[i40 + 4 >> 2] = d43;
   10986    d43 = d36 * d19 + d37 * d22;
   10987    d44 = d37 * d19 - d36 * d22;
   10988    i40 = HEAP32[i23 >> 2] | 0;
   10989    i39 = HEAP32[i20 >> 2] | 0;
   10990    if ((i39 | 0) > 1) {
   10991     i41 = 0;
   10992     d37 = d44 * +HEAPF32[i40 + 4 >> 2] + d43 * +HEAPF32[i40 >> 2];
   10993     i42 = 1;
   10994     while (1) {
   10995      d36 = d43 * +HEAPF32[i40 + (i42 << 3) >> 2] + d44 * +HEAPF32[i40 + (i42 << 3) + 4 >> 2];
   10996      i46 = d36 > d37;
   10997      i41 = i46 ? i42 : i41;
   10998      i42 = i42 + 1 | 0;
   10999      if ((i42 | 0) == (i39 | 0)) {
   11000       break;
   11001      } else {
   11002       d37 = i46 ? d36 : d37;
   11003      }
   11004     }
   11005     i42 = i4 + (i34 * 36 | 0) + 32 | 0;
   11006     HEAP32[i42 >> 2] = i41;
   11007     if (!((i41 | 0) > -1)) {
   11008      i35 = 35;
   11009      break;
   11010     }
   11011    } else {
   11012     i42 = i4 + (i34 * 36 | 0) + 32 | 0;
   11013     HEAP32[i42 >> 2] = 0;
   11014     i41 = 0;
   11015    }
   11016    if ((i39 | 0) <= (i41 | 0)) {
   11017     i35 = 35;
   11018     break;
   11019    }
   11020    d37 = +HEAPF32[i40 + (i41 << 3) >> 2];
   11021    d45 = +HEAPF32[i40 + (i41 << 3) + 4 >> 2];
   11022    d44 = d24 + (d19 * d37 - d22 * d45);
   11023    d43 = +d44;
   11024    d45 = +(d37 * d22 + d19 * d45 + d25);
   11025    i46 = i4 + (i34 * 36 | 0) + 8 | 0;
   11026    HEAPF32[i46 >> 2] = d43;
   11027    HEAPF32[i46 + 4 >> 2] = d45;
   11028    d44 = +(d44 - d38);
   11029    d45 = +(+HEAPF32[i4 + (i34 * 36 | 0) + 12 >> 2] - +HEAPF32[i4 + (i34 * 36 | 0) + 4 >> 2]);
   11030    i46 = i4 + (i34 * 36 | 0) + 16 | 0;
   11031    HEAPF32[i46 >> 2] = d44;
   11032    HEAPF32[i46 + 4 >> 2] = d45;
   11033    i33 = i33 + 1 | 0;
   11034    HEAP32[654] = (HEAP32[654] | 0) + 1;
   11035    if (i32) {
   11036     i34 = HEAP32[i35 >> 2] | 0;
   11037     i32 = 0;
   11038     do {
   11039      if ((i34 | 0) == (HEAP32[i14 + (i32 << 2) >> 2] | 0) ? (HEAP32[i42 >> 2] | 0) == (HEAP32[i15 + (i32 << 2) >> 2] | 0) : 0) {
   11040       i35 = 42;
   11041       break L3;
   11042      }
   11043      i32 = i32 + 1 | 0;
   11044     } while ((i32 | 0) < (i31 | 0));
   11045    }
   11046    i31 = (HEAP32[i9 >> 2] | 0) + 1 | 0;
   11047    HEAP32[i9 >> 2] = i31;
   11048    if ((i33 | 0) >= 20) {
   11049     i35 = 42;
   11050     break;
   11051    }
   11052   }
   11053   if ((i35 | 0) == 13) {
   11054    ___assert_fail(2712, 2672, 498, 2720);
   11055   } else if ((i35 | 0) == 15) {
   11056    ___assert_fail(2712, 2672, 194, 2856);
   11057   } else if ((i35 | 0) == 16) {
   11058    ___assert_fail(2712, 2672, 207, 2856);
   11059   } else if ((i35 | 0) == 28) {
   11060    ___assert_fail(2776, 2808, 103, 2840);
   11061   } else if ((i35 | 0) == 35) {
   11062    ___assert_fail(2776, 2808, 103, 2840);
   11063   } else if ((i35 | 0) == 42) {
   11064    i12 = HEAP32[656] | 0;
   11065    HEAP32[656] = (i12 | 0) > (i33 | 0) ? i12 : i33;
   11066    i14 = i2 + 8 | 0;
   11067    __ZNK9b2Simplex16GetWitnessPointsEP6b2Vec2S1_(i4, i2, i14);
   11068    d44 = +HEAPF32[i2 >> 2] - +HEAPF32[i14 >> 2];
   11069    i13 = i2 + 4 | 0;
   11070    i12 = i2 + 12 | 0;
   11071    d45 = +HEAPF32[i13 >> 2] - +HEAPF32[i12 >> 2];
   11072    i15 = i2 + 16 | 0;
   11073    HEAPF32[i15 >> 2] = +Math_sqrt(+(d44 * d44 + d45 * d45));
   11074    HEAP32[i2 + 20 >> 2] = i33;
   11075    i9 = HEAP32[i9 >> 2] | 0;
   11076    if ((i9 | 0) == 2) {
   11077     d45 = +HEAPF32[i8 >> 2] - +HEAPF32[i11 >> 2];
   11078     d7 = +HEAPF32[i6 >> 2] - +HEAPF32[i10 >> 2];
   11079     d7 = +Math_sqrt(+(d45 * d45 + d7 * d7));
   11080    } else if ((i9 | 0) == 3) {
   11081     d7 = +HEAPF32[i8 >> 2];
   11082     d45 = +HEAPF32[i6 >> 2];
   11083     d7 = (+HEAPF32[i11 >> 2] - d7) * (+HEAPF32[i4 + 92 >> 2] - d45) - (+HEAPF32[i10 >> 2] - d45) * (+HEAPF32[i4 + 88 >> 2] - d7);
   11084    } else if ((i9 | 0) == 1) {
   11085     d7 = 0.0;
   11086    } else if ((i9 | 0) == 0) {
   11087     ___assert_fail(2712, 2672, 246, 2736);
   11088    } else {
   11089     ___assert_fail(2712, 2672, 259, 2736);
   11090    }
   11091    HEAPF32[i5 >> 2] = d7;
   11092    HEAP16[i5 + 4 >> 1] = i9;
   11093    i6 = 0;
   11094    do {
   11095     HEAP8[i5 + i6 + 6 | 0] = HEAP32[i4 + (i6 * 36 | 0) + 28 >> 2];
   11096     HEAP8[i5 + i6 + 9 | 0] = HEAP32[i4 + (i6 * 36 | 0) + 32 >> 2];
   11097     i6 = i6 + 1 | 0;
   11098    } while ((i6 | 0) < (i9 | 0));
   11099    if ((HEAP8[i3 + 88 | 0] | 0) == 0) {
   11100     STACKTOP = i1;
   11101     return;
   11102    }
   11103    d7 = +HEAPF32[i3 + 24 >> 2];
   11104    d16 = +HEAPF32[i3 + 52 >> 2];
   11105    d18 = +HEAPF32[i15 >> 2];
   11106    d17 = d7 + d16;
   11107    if (!(d18 > d17 & d18 > 1.1920928955078125e-7)) {
   11108     d44 = +((+HEAPF32[i2 >> 2] + +HEAPF32[i14 >> 2]) * .5);
   11109     d45 = +((+HEAPF32[i13 >> 2] + +HEAPF32[i12 >> 2]) * .5);
   11110     i46 = i2;
   11111     HEAPF32[i46 >> 2] = d44;
   11112     HEAPF32[i46 + 4 >> 2] = d45;
   11113     i46 = i14;
   11114     HEAPF32[i46 >> 2] = d44;
   11115     HEAPF32[i46 + 4 >> 2] = d45;
   11116     HEAPF32[i15 >> 2] = 0.0;
   11117     STACKTOP = i1;
   11118     return;
   11119    }
   11120    HEAPF32[i15 >> 2] = d18 - d17;
   11121    d18 = +HEAPF32[i14 >> 2];
   11122    d21 = +HEAPF32[i2 >> 2];
   11123    d24 = d18 - d21;
   11124    d17 = +HEAPF32[i12 >> 2];
   11125    d19 = +HEAPF32[i13 >> 2];
   11126    d22 = d17 - d19;
   11127    d25 = +Math_sqrt(+(d24 * d24 + d22 * d22));
   11128    if (!(d25 < 1.1920928955078125e-7)) {
   11129     d45 = 1.0 / d25;
   11130     d24 = d24 * d45;
   11131     d22 = d22 * d45;
   11132    }
   11133    HEAPF32[i2 >> 2] = d7 * d24 + d21;
   11134    HEAPF32[i13 >> 2] = d7 * d22 + d19;
   11135    HEAPF32[i14 >> 2] = d18 - d16 * d24;
   11136    HEAPF32[i12 >> 2] = d17 - d16 * d22;
   11137    STACKTOP = i1;
   11138    return;
   11139   }
   11140  } else if ((i31 | 0) == 0) {
   11141   ___assert_fail(2712, 2672, 194, 2856);
   11142  } else {
   11143   ___assert_fail(2712, 2672, 207, 2856);
   11144  }
   11145 }
   11146 function __ZN8b2Island5SolveEP9b2ProfileRK10b2TimeStepRK6b2Vec2b(i4, i8, i11, i17, i7) {
   11147  i4 = i4 | 0;
   11148  i8 = i8 | 0;
   11149  i11 = i11 | 0;
   11150  i17 = i17 | 0;
   11151  i7 = i7 | 0;
   11152  var i1 = 0, i2 = 0, i3 = 0, d5 = 0.0, i6 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i18 = 0, i19 = 0, i20 = 0, d21 = 0.0, i22 = 0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, d29 = 0.0, i30 = 0;
   11153  i3 = STACKTOP;
   11154  STACKTOP = STACKTOP + 160 | 0;
   11155  i6 = i3 + 128 | 0;
   11156  i9 = i3 + 148 | 0;
   11157  i10 = i3 + 96 | 0;
   11158  i16 = i3 + 52 | 0;
   11159  i2 = i3;
   11160  __ZN7b2TimerC2Ev(i9);
   11161  d5 = +HEAPF32[i11 >> 2];
   11162  i1 = i4 + 28 | 0;
   11163  if ((HEAP32[i1 >> 2] | 0) > 0) {
   11164   i13 = i4 + 8 | 0;
   11165   i12 = i17 + 4 | 0;
   11166   i15 = i4 + 20 | 0;
   11167   i14 = i4 + 24 | 0;
   11168   i19 = 0;
   11169   do {
   11170    i22 = HEAP32[(HEAP32[i13 >> 2] | 0) + (i19 << 2) >> 2] | 0;
   11171    i18 = i22 + 44 | 0;
   11172    i20 = HEAP32[i18 >> 2] | 0;
   11173    i18 = HEAP32[i18 + 4 >> 2] | 0;
   11174    d21 = +HEAPF32[i22 + 56 >> 2];
   11175    i30 = i22 + 64 | 0;
   11176    d27 = +HEAPF32[i30 >> 2];
   11177    d24 = +HEAPF32[i30 + 4 >> 2];
   11178    d23 = +HEAPF32[i22 + 72 >> 2];
   11179    i30 = i22 + 36 | 0;
   11180    HEAP32[i30 >> 2] = i20;
   11181    HEAP32[i30 + 4 >> 2] = i18;
   11182    HEAPF32[i22 + 52 >> 2] = d21;
   11183    if ((HEAP32[i22 >> 2] | 0) == 2) {
   11184     d25 = +HEAPF32[i22 + 140 >> 2];
   11185     d26 = +HEAPF32[i22 + 120 >> 2];
   11186     d28 = 1.0 - d5 * +HEAPF32[i22 + 132 >> 2];
   11187     d28 = d28 < 1.0 ? d28 : 1.0;
   11188     d28 = d28 < 0.0 ? 0.0 : d28;
   11189     d29 = 1.0 - d5 * +HEAPF32[i22 + 136 >> 2];
   11190     d29 = d29 < 1.0 ? d29 : 1.0;
   11191     d27 = (d27 + d5 * (d25 * +HEAPF32[i17 >> 2] + d26 * +HEAPF32[i22 + 76 >> 2])) * d28;
   11192     d24 = (d24 + d5 * (d25 * +HEAPF32[i12 >> 2] + d26 * +HEAPF32[i22 + 80 >> 2])) * d28;
   11193     d23 = (d23 + d5 * +HEAPF32[i22 + 128 >> 2] * +HEAPF32[i22 + 84 >> 2]) * (d29 < 0.0 ? 0.0 : d29);
   11194    }
   11195    i30 = (HEAP32[i15 >> 2] | 0) + (i19 * 12 | 0) | 0;
   11196    HEAP32[i30 >> 2] = i20;
   11197    HEAP32[i30 + 4 >> 2] = i18;
   11198    HEAPF32[(HEAP32[i15 >> 2] | 0) + (i19 * 12 | 0) + 8 >> 2] = d21;
   11199    d28 = +d27;
   11200    d29 = +d24;
   11201    i30 = (HEAP32[i14 >> 2] | 0) + (i19 * 12 | 0) | 0;
   11202    HEAPF32[i30 >> 2] = d28;
   11203    HEAPF32[i30 + 4 >> 2] = d29;
   11204    HEAPF32[(HEAP32[i14 >> 2] | 0) + (i19 * 12 | 0) + 8 >> 2] = d23;
   11205    i19 = i19 + 1 | 0;
   11206   } while ((i19 | 0) < (HEAP32[i1 >> 2] | 0));
   11207  } else {
   11208   i14 = i4 + 24 | 0;
   11209   i15 = i4 + 20 | 0;
   11210  }
   11211  HEAP32[i10 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
   11212  HEAP32[i10 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
   11213  HEAP32[i10 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
   11214  HEAP32[i10 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
   11215  HEAP32[i10 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
   11216  HEAP32[i10 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
   11217  i22 = HEAP32[i15 >> 2] | 0;
   11218  HEAP32[i10 + 24 >> 2] = i22;
   11219  i30 = HEAP32[i14 >> 2] | 0;
   11220  HEAP32[i10 + 28 >> 2] = i30;
   11221  HEAP32[i16 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
   11222  HEAP32[i16 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
   11223  HEAP32[i16 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
   11224  HEAP32[i16 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
   11225  HEAP32[i16 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
   11226  HEAP32[i16 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
   11227  i13 = i4 + 12 | 0;
   11228  HEAP32[i16 + 24 >> 2] = HEAP32[i13 >> 2];
   11229  i12 = i4 + 36 | 0;
   11230  HEAP32[i16 + 28 >> 2] = HEAP32[i12 >> 2];
   11231  HEAP32[i16 + 32 >> 2] = i22;
   11232  HEAP32[i16 + 36 >> 2] = i30;
   11233  HEAP32[i16 + 40 >> 2] = HEAP32[i4 >> 2];
   11234  __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i2, i16);
   11235  __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i2);
   11236  if ((HEAP8[i11 + 20 | 0] | 0) != 0) {
   11237   __ZN15b2ContactSolver9WarmStartEv(i2);
   11238  }
   11239  i16 = i4 + 32 | 0;
   11240  if ((HEAP32[i16 >> 2] | 0) > 0) {
   11241   i18 = i4 + 16 | 0;
   11242   i17 = 0;
   11243   do {
   11244    i30 = HEAP32[(HEAP32[i18 >> 2] | 0) + (i17 << 2) >> 2] | 0;
   11245    FUNCTION_TABLE_vii[HEAP32[(HEAP32[i30 >> 2] | 0) + 28 >> 2] & 15](i30, i10);
   11246    i17 = i17 + 1 | 0;
   11247   } while ((i17 | 0) < (HEAP32[i16 >> 2] | 0));
   11248  }
   11249  HEAPF32[i8 + 12 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9);
   11250  i17 = i11 + 12 | 0;
   11251  if ((HEAP32[i17 >> 2] | 0) > 0) {
   11252   i20 = i4 + 16 | 0;
   11253   i19 = 0;
   11254   do {
   11255    if ((HEAP32[i16 >> 2] | 0) > 0) {
   11256     i18 = 0;
   11257     do {
   11258      i30 = HEAP32[(HEAP32[i20 >> 2] | 0) + (i18 << 2) >> 2] | 0;
   11259      FUNCTION_TABLE_vii[HEAP32[(HEAP32[i30 >> 2] | 0) + 32 >> 2] & 15](i30, i10);
   11260      i18 = i18 + 1 | 0;
   11261     } while ((i18 | 0) < (HEAP32[i16 >> 2] | 0));
   11262    }
   11263    __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i2);
   11264    i19 = i19 + 1 | 0;
   11265   } while ((i19 | 0) < (HEAP32[i17 >> 2] | 0));
   11266  }
   11267  __ZN15b2ContactSolver13StoreImpulsesEv(i2);
   11268  HEAPF32[i8 + 16 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9);
   11269  if ((HEAP32[i1 >> 2] | 0) > 0) {
   11270   i19 = HEAP32[i14 >> 2] | 0;
   11271   i18 = 0;
   11272   do {
   11273    i30 = HEAP32[i15 >> 2] | 0;
   11274    i17 = i30 + (i18 * 12 | 0) | 0;
   11275    i22 = i17;
   11276    d23 = +HEAPF32[i22 >> 2];
   11277    d21 = +HEAPF32[i22 + 4 >> 2];
   11278    d24 = +HEAPF32[i30 + (i18 * 12 | 0) + 8 >> 2];
   11279    i30 = i19 + (i18 * 12 | 0) | 0;
   11280    d26 = +HEAPF32[i30 >> 2];
   11281    d27 = +HEAPF32[i30 + 4 >> 2];
   11282    d25 = +HEAPF32[i19 + (i18 * 12 | 0) + 8 >> 2];
   11283    d29 = d5 * d26;
   11284    d28 = d5 * d27;
   11285    d28 = d29 * d29 + d28 * d28;
   11286    if (d28 > 4.0) {
   11287     d29 = 2.0 / +Math_sqrt(+d28);
   11288     d26 = d26 * d29;
   11289     d27 = d27 * d29;
   11290    }
   11291    d28 = d5 * d25;
   11292    if (d28 * d28 > 2.4674012660980225) {
   11293     if (!(d28 > 0.0)) {
   11294      d28 = -d28;
   11295     }
   11296     d25 = d25 * (1.5707963705062866 / d28);
   11297    }
   11298    d29 = +(d23 + d5 * d26);
   11299    d28 = +(d21 + d5 * d27);
   11300    i19 = i17;
   11301    HEAPF32[i19 >> 2] = d29;
   11302    HEAPF32[i19 + 4 >> 2] = d28;
   11303    HEAPF32[(HEAP32[i15 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2] = d24 + d5 * d25;
   11304    d28 = +d26;
   11305    d29 = +d27;
   11306    i19 = (HEAP32[i14 >> 2] | 0) + (i18 * 12 | 0) | 0;
   11307    HEAPF32[i19 >> 2] = d28;
   11308    HEAPF32[i19 + 4 >> 2] = d29;
   11309    i19 = HEAP32[i14 >> 2] | 0;
   11310    HEAPF32[i19 + (i18 * 12 | 0) + 8 >> 2] = d25;
   11311    i18 = i18 + 1 | 0;
   11312   } while ((i18 | 0) < (HEAP32[i1 >> 2] | 0));
   11313  }
   11314  i11 = i11 + 16 | 0;
   11315  L41 : do {
   11316   if ((HEAP32[i11 >> 2] | 0) > 0) {
   11317    i17 = i4 + 16 | 0;
   11318    i19 = 0;
   11319    while (1) {
   11320     i18 = __ZN15b2ContactSolver24SolvePositionConstraintsEv(i2) | 0;
   11321     if ((HEAP32[i16 >> 2] | 0) > 0) {
   11322      i20 = 0;
   11323      i22 = 1;
   11324      do {
   11325       i30 = HEAP32[(HEAP32[i17 >> 2] | 0) + (i20 << 2) >> 2] | 0;
   11326       i22 = i22 & (FUNCTION_TABLE_iii[HEAP32[(HEAP32[i30 >> 2] | 0) + 36 >> 2] & 3](i30, i10) | 0);
   11327       i20 = i20 + 1 | 0;
   11328      } while ((i20 | 0) < (HEAP32[i16 >> 2] | 0));
   11329     } else {
   11330      i22 = 1;
   11331     }
   11332     i19 = i19 + 1 | 0;
   11333     if (i18 & i22) {
   11334      i10 = 0;
   11335      break L41;
   11336     }
   11337     if ((i19 | 0) >= (HEAP32[i11 >> 2] | 0)) {
   11338      i10 = 1;
   11339      break;
   11340     }
   11341    }
   11342   } else {
   11343    i10 = 1;
   11344   }
   11345  } while (0);
   11346  if ((HEAP32[i1 >> 2] | 0) > 0) {
   11347   i11 = i4 + 8 | 0;
   11348   i16 = 0;
   11349   do {
   11350    i30 = HEAP32[(HEAP32[i11 >> 2] | 0) + (i16 << 2) >> 2] | 0;
   11351    i22 = (HEAP32[i15 >> 2] | 0) + (i16 * 12 | 0) | 0;
   11352    i20 = HEAP32[i22 >> 2] | 0;
   11353    i22 = HEAP32[i22 + 4 >> 2] | 0;
   11354    i17 = i30 + 44 | 0;
   11355    HEAP32[i17 >> 2] = i20;
   11356    HEAP32[i17 + 4 >> 2] = i22;
   11357    d27 = +HEAPF32[(HEAP32[i15 >> 2] | 0) + (i16 * 12 | 0) + 8 >> 2];
   11358    HEAPF32[i30 + 56 >> 2] = d27;
   11359    i17 = (HEAP32[i14 >> 2] | 0) + (i16 * 12 | 0) | 0;
   11360    i18 = HEAP32[i17 + 4 >> 2] | 0;
   11361    i19 = i30 + 64 | 0;
   11362    HEAP32[i19 >> 2] = HEAP32[i17 >> 2];
   11363    HEAP32[i19 + 4 >> 2] = i18;
   11364    HEAPF32[i30 + 72 >> 2] = +HEAPF32[(HEAP32[i14 >> 2] | 0) + (i16 * 12 | 0) + 8 >> 2];
   11365    d25 = +Math_sin(+d27);
   11366    HEAPF32[i30 + 20 >> 2] = d25;
   11367    d27 = +Math_cos(+d27);
   11368    HEAPF32[i30 + 24 >> 2] = d27;
   11369    d26 = +HEAPF32[i30 + 28 >> 2];
   11370    d29 = +HEAPF32[i30 + 32 >> 2];
   11371    d28 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]) - (d27 * d26 - d25 * d29);
   11372    d29 = (HEAP32[tempDoublePtr >> 2] = i22, +HEAPF32[tempDoublePtr >> 2]) - (d25 * d26 + d27 * d29);
   11373    d28 = +d28;
   11374    d29 = +d29;
   11375    i30 = i30 + 12 | 0;
   11376    HEAPF32[i30 >> 2] = d28;
   11377    HEAPF32[i30 + 4 >> 2] = d29;
   11378    i16 = i16 + 1 | 0;
   11379   } while ((i16 | 0) < (HEAP32[i1 >> 2] | 0));
   11380  }
   11381  HEAPF32[i8 + 20 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9);
   11382  i9 = HEAP32[i2 + 40 >> 2] | 0;
   11383  i8 = i4 + 4 | 0;
   11384  if ((HEAP32[i8 >> 2] | 0) != 0 ? (HEAP32[i12 >> 2] | 0) > 0 : 0) {
   11385   i11 = i6 + 16 | 0;
   11386   i14 = 0;
   11387   do {
   11388    i15 = HEAP32[(HEAP32[i13 >> 2] | 0) + (i14 << 2) >> 2] | 0;
   11389    i16 = HEAP32[i9 + (i14 * 152 | 0) + 144 >> 2] | 0;
   11390    HEAP32[i11 >> 2] = i16;
   11391    if ((i16 | 0) > 0) {
   11392     i17 = 0;
   11393     do {
   11394      HEAPF32[i6 + (i17 << 2) >> 2] = +HEAPF32[i9 + (i14 * 152 | 0) + (i17 * 36 | 0) + 16 >> 2];
   11395      HEAPF32[i6 + (i17 << 2) + 8 >> 2] = +HEAPF32[i9 + (i14 * 152 | 0) + (i17 * 36 | 0) + 20 >> 2];
   11396      i17 = i17 + 1 | 0;
   11397     } while ((i17 | 0) != (i16 | 0));
   11398    }
   11399    i30 = HEAP32[i8 >> 2] | 0;
   11400    FUNCTION_TABLE_viii[HEAP32[(HEAP32[i30 >> 2] | 0) + 20 >> 2] & 3](i30, i15, i6);
   11401    i14 = i14 + 1 | 0;
   11402   } while ((i14 | 0) < (HEAP32[i12 >> 2] | 0));
   11403  }
   11404  if (!i7) {
   11405   __ZN15b2ContactSolverD2Ev(i2);
   11406   STACKTOP = i3;
   11407   return;
   11408  }
   11409  i7 = HEAP32[i1 >> 2] | 0;
   11410  i6 = (i7 | 0) > 0;
   11411  if (i6) {
   11412   i8 = HEAP32[i4 + 8 >> 2] | 0;
   11413   i9 = 0;
   11414   d21 = 3.4028234663852886e+38;
   11415   do {
   11416    i11 = HEAP32[i8 + (i9 << 2) >> 2] | 0;
   11417    do {
   11418     if ((HEAP32[i11 >> 2] | 0) != 0) {
   11419      if ((!((HEAP16[i11 + 4 >> 1] & 4) == 0) ? (d29 = +HEAPF32[i11 + 72 >> 2], !(d29 * d29 > .001218469929881394)) : 0) ? (d28 = +HEAPF32[i11 + 64 >> 2], d29 = +HEAPF32[i11 + 68 >> 2], !(d28 * d28 + d29 * d29 > 9999999747378752.0e-20)) : 0) {
   11420       i30 = i11 + 144 | 0;
   11421       d23 = d5 + +HEAPF32[i30 >> 2];
   11422       HEAPF32[i30 >> 2] = d23;
   11423       d21 = d21 < d23 ? d21 : d23;
   11424       break;
   11425      }
   11426      HEAPF32[i11 + 144 >> 2] = 0.0;
   11427      d21 = 0.0;
   11428     }
   11429    } while (0);
   11430    i9 = i9 + 1 | 0;
   11431   } while ((i9 | 0) < (i7 | 0));
   11432  } else {
   11433   d21 = 3.4028234663852886e+38;
   11434  }
   11435  if (!(d21 >= .5) | i10 | i6 ^ 1) {
   11436   __ZN15b2ContactSolverD2Ev(i2);
   11437   STACKTOP = i3;
   11438   return;
   11439  }
   11440  i4 = i4 + 8 | 0;
   11441  i6 = 0;
   11442  do {
   11443   i30 = HEAP32[(HEAP32[i4 >> 2] | 0) + (i6 << 2) >> 2] | 0;
   11444   i22 = i30 + 4 | 0;
   11445   HEAP16[i22 >> 1] = HEAP16[i22 >> 1] & 65533;
   11446   HEAPF32[i30 + 144 >> 2] = 0.0;
   11447   i30 = i30 + 64 | 0;
   11448   HEAP32[i30 + 0 >> 2] = 0;
   11449   HEAP32[i30 + 4 >> 2] = 0;
   11450   HEAP32[i30 + 8 >> 2] = 0;
   11451   HEAP32[i30 + 12 >> 2] = 0;
   11452   HEAP32[i30 + 16 >> 2] = 0;
   11453   HEAP32[i30 + 20 >> 2] = 0;
   11454   i6 = i6 + 1 | 0;
   11455  } while ((i6 | 0) < (HEAP32[i1 >> 2] | 0));
   11456  __ZN15b2ContactSolverD2Ev(i2);
   11457  STACKTOP = i3;
   11458  return;
   11459 }
   11460 function __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i4) {
   11461  i4 = i4 | 0;
   11462  var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, i19 = 0, d20 = 0.0, d21 = 0.0, i22 = 0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, d31 = 0.0, i32 = 0, i33 = 0, d34 = 0.0, d35 = 0.0, d36 = 0.0, d37 = 0.0, d38 = 0.0, d39 = 0.0, d40 = 0.0, i41 = 0, i42 = 0, d43 = 0.0, d44 = 0.0;
   11463  i1 = STACKTOP;
   11464  i2 = i4 + 48 | 0;
   11465  if ((HEAP32[i2 >> 2] | 0) <= 0) {
   11466   STACKTOP = i1;
   11467   return;
   11468  }
   11469  i3 = i4 + 40 | 0;
   11470  i4 = i4 + 28 | 0;
   11471  i42 = HEAP32[i4 >> 2] | 0;
   11472  i5 = 0;
   11473  L4 : while (1) {
   11474   i19 = HEAP32[i3 >> 2] | 0;
   11475   i22 = i19 + (i5 * 152 | 0) | 0;
   11476   i8 = HEAP32[i19 + (i5 * 152 | 0) + 112 >> 2] | 0;
   11477   i6 = HEAP32[i19 + (i5 * 152 | 0) + 116 >> 2] | 0;
   11478   d12 = +HEAPF32[i19 + (i5 * 152 | 0) + 120 >> 2];
   11479   d10 = +HEAPF32[i19 + (i5 * 152 | 0) + 128 >> 2];
   11480   d11 = +HEAPF32[i19 + (i5 * 152 | 0) + 124 >> 2];
   11481   d9 = +HEAPF32[i19 + (i5 * 152 | 0) + 132 >> 2];
   11482   i32 = i19 + (i5 * 152 | 0) + 144 | 0;
   11483   i33 = HEAP32[i32 >> 2] | 0;
   11484   i7 = i42 + (i8 * 12 | 0) | 0;
   11485   i41 = i7;
   11486   d21 = +HEAPF32[i41 >> 2];
   11487   d20 = +HEAPF32[i41 + 4 >> 2];
   11488   i41 = i42 + (i6 * 12 | 0) | 0;
   11489   d14 = +HEAPF32[i41 >> 2];
   11490   d13 = +HEAPF32[i41 + 4 >> 2];
   11491   i41 = i19 + (i5 * 152 | 0) + 72 | 0;
   11492   d17 = +HEAPF32[i41 >> 2];
   11493   d16 = +HEAPF32[i41 + 4 >> 2];
   11494   d23 = -d17;
   11495   d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 136 >> 2];
   11496   if ((i33 + -1 | 0) >>> 0 < 2) {
   11497    i41 = 0;
   11498    d18 = +HEAPF32[i42 + (i8 * 12 | 0) + 8 >> 2];
   11499    d15 = +HEAPF32[i42 + (i6 * 12 | 0) + 8 >> 2];
   11500   } else {
   11501    i2 = 4;
   11502    break;
   11503   }
   11504   do {
   11505    d30 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 12 >> 2];
   11506    d25 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 8 >> 2];
   11507    d26 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 4 >> 2];
   11508    d27 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) >> 2];
   11509    d34 = d24 * +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 16 >> 2];
   11510    i42 = i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 20 | 0;
   11511    d28 = +HEAPF32[i42 >> 2];
   11512    d31 = d28 - +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 28 >> 2] * (d16 * (d14 - d15 * d30 - d21 + d18 * d26) + (d13 + d15 * d25 - d20 - d18 * d27) * d23);
   11513    d29 = -d34;
   11514    d31 = d31 < d34 ? d31 : d34;
   11515    d40 = d31 < d29 ? d29 : d31;
   11516    d39 = d40 - d28;
   11517    HEAPF32[i42 >> 2] = d40;
   11518    d40 = d16 * d39;
   11519    d39 = d39 * d23;
   11520    d21 = d21 - d12 * d40;
   11521    d20 = d20 - d12 * d39;
   11522    d18 = d18 - d10 * (d27 * d39 - d26 * d40);
   11523    d14 = d14 + d11 * d40;
   11524    d13 = d13 + d11 * d39;
   11525    d15 = d15 + d9 * (d25 * d39 - d30 * d40);
   11526    i41 = i41 + 1 | 0;
   11527   } while ((i41 | 0) != (i33 | 0));
   11528   do {
   11529    if ((HEAP32[i32 >> 2] | 0) != 1) {
   11530     i32 = i19 + (i5 * 152 | 0) + 16 | 0;
   11531     d31 = +HEAPF32[i32 >> 2];
   11532     i33 = i19 + (i5 * 152 | 0) + 52 | 0;
   11533     d34 = +HEAPF32[i33 >> 2];
   11534     if (!(d31 >= 0.0) | !(d34 >= 0.0)) {
   11535      i2 = 9;
   11536      break L4;
   11537     }
   11538     d23 = +HEAPF32[i19 + (i5 * 152 | 0) + 12 >> 2];
   11539     d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 8 >> 2];
   11540     d26 = +HEAPF32[i19 + (i5 * 152 | 0) + 4 >> 2];
   11541     d30 = +HEAPF32[i22 >> 2];
   11542     d27 = +HEAPF32[i19 + (i5 * 152 | 0) + 48 >> 2];
   11543     d25 = +HEAPF32[i19 + (i5 * 152 | 0) + 44 >> 2];
   11544     d28 = +HEAPF32[i19 + (i5 * 152 | 0) + 40 >> 2];
   11545     d29 = +HEAPF32[i19 + (i5 * 152 | 0) + 36 >> 2];
   11546     d37 = +HEAPF32[i19 + (i5 * 152 | 0) + 104 >> 2];
   11547     d38 = +HEAPF32[i19 + (i5 * 152 | 0) + 100 >> 2];
   11548     d35 = d17 * (d14 - d15 * d23 - d21 + d18 * d26) + d16 * (d13 + d15 * d24 - d20 - d18 * d30) - +HEAPF32[i19 + (i5 * 152 | 0) + 32 >> 2] - (d31 * +HEAPF32[i19 + (i5 * 152 | 0) + 96 >> 2] + d34 * d37);
   11549     d36 = d17 * (d14 - d15 * d27 - d21 + d18 * d28) + d16 * (d13 + d15 * d25 - d20 - d18 * d29) - +HEAPF32[i19 + (i5 * 152 | 0) + 68 >> 2] - (d31 * d38 + d34 * +HEAPF32[i19 + (i5 * 152 | 0) + 108 >> 2]);
   11550     d44 = +HEAPF32[i19 + (i5 * 152 | 0) + 80 >> 2] * d35 + +HEAPF32[i19 + (i5 * 152 | 0) + 88 >> 2] * d36;
   11551     d43 = d35 * +HEAPF32[i19 + (i5 * 152 | 0) + 84 >> 2] + d36 * +HEAPF32[i19 + (i5 * 152 | 0) + 92 >> 2];
   11552     d40 = -d44;
   11553     d39 = -d43;
   11554     if (!(!(d44 <= -0.0) | !(d43 <= -0.0))) {
   11555      d37 = d40 - d31;
   11556      d43 = d39 - d34;
   11557      d38 = d17 * d37;
   11558      d37 = d16 * d37;
   11559      d44 = d17 * d43;
   11560      d43 = d16 * d43;
   11561      d35 = d38 + d44;
   11562      d36 = d37 + d43;
   11563      HEAPF32[i32 >> 2] = d40;
   11564      HEAPF32[i33 >> 2] = d39;
   11565      d21 = d21 - d12 * d35;
   11566      d20 = d20 - d12 * d36;
   11567      d14 = d14 + d11 * d35;
   11568      d13 = d13 + d11 * d36;
   11569      d18 = d18 - d10 * (d30 * d37 - d26 * d38 + (d29 * d43 - d28 * d44));
   11570      d15 = d15 + d9 * (d24 * d37 - d23 * d38 + (d25 * d43 - d27 * d44));
   11571      break;
   11572     }
   11573     d44 = d35 * +HEAPF32[i19 + (i5 * 152 | 0) + 24 >> 2];
   11574     d39 = -d44;
   11575     if (d44 <= -0.0 ? d36 + d38 * d39 >= 0.0 : 0) {
   11576      d38 = d39 - d31;
   11577      d43 = 0.0 - d34;
   11578      d40 = d17 * d38;
   11579      d38 = d16 * d38;
   11580      d44 = d17 * d43;
   11581      d43 = d16 * d43;
   11582      d36 = d44 + d40;
   11583      d37 = d43 + d38;
   11584      HEAPF32[i32 >> 2] = d39;
   11585      HEAPF32[i33 >> 2] = 0.0;
   11586      d21 = d21 - d12 * d36;
   11587      d20 = d20 - d12 * d37;
   11588      d14 = d14 + d11 * d36;
   11589      d13 = d13 + d11 * d37;
   11590      d18 = d18 - d10 * (d38 * d30 - d40 * d26 + (d43 * d29 - d44 * d28));
   11591      d15 = d15 + d9 * (d38 * d24 - d40 * d23 + (d43 * d25 - d44 * d27));
   11592      break;
   11593     }
   11594     d44 = d36 * +HEAPF32[i19 + (i5 * 152 | 0) + 60 >> 2];
   11595     d38 = -d44;
   11596     if (d44 <= -0.0 ? d35 + d37 * d38 >= 0.0 : 0) {
   11597      d39 = 0.0 - d31;
   11598      d43 = d38 - d34;
   11599      d40 = d17 * d39;
   11600      d39 = d16 * d39;
   11601      d44 = d17 * d43;
   11602      d43 = d16 * d43;
   11603      d36 = d40 + d44;
   11604      d37 = d39 + d43;
   11605      HEAPF32[i32 >> 2] = 0.0;
   11606      HEAPF32[i33 >> 2] = d38;
   11607      d21 = d21 - d12 * d36;
   11608      d20 = d20 - d12 * d37;
   11609      d14 = d14 + d11 * d36;
   11610      d13 = d13 + d11 * d37;
   11611      d18 = d18 - d10 * (d39 * d30 - d40 * d26 + (d43 * d29 - d44 * d28));
   11612      d15 = d15 + d9 * (d39 * d24 - d40 * d23 + (d43 * d25 - d44 * d27));
   11613      break;
   11614     }
   11615     if (!(!(d35 >= 0.0) | !(d36 >= 0.0))) {
   11616      d39 = 0.0 - d31;
   11617      d43 = 0.0 - d34;
   11618      d40 = d17 * d39;
   11619      d39 = d16 * d39;
   11620      d44 = d17 * d43;
   11621      d43 = d16 * d43;
   11622      d37 = d40 + d44;
   11623      d38 = d39 + d43;
   11624      HEAPF32[i32 >> 2] = 0.0;
   11625      HEAPF32[i33 >> 2] = 0.0;
   11626      d21 = d21 - d12 * d37;
   11627      d20 = d20 - d12 * d38;
   11628      d14 = d14 + d11 * d37;
   11629      d13 = d13 + d11 * d38;
   11630      d18 = d18 - d10 * (d39 * d30 - d40 * d26 + (d43 * d29 - d44 * d28));
   11631      d15 = d15 + d9 * (d39 * d24 - d40 * d23 + (d43 * d25 - d44 * d27));
   11632     }
   11633    } else {
   11634     d23 = +HEAPF32[i19 + (i5 * 152 | 0) + 12 >> 2];
   11635     d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 8 >> 2];
   11636     d25 = +HEAPF32[i19 + (i5 * 152 | 0) + 4 >> 2];
   11637     d26 = +HEAPF32[i22 >> 2];
   11638     i22 = i19 + (i5 * 152 | 0) + 16 | 0;
   11639     d27 = +HEAPF32[i22 >> 2];
   11640     d28 = d27 - +HEAPF32[i19 + (i5 * 152 | 0) + 24 >> 2] * (d17 * (d14 - d15 * d23 - d21 + d18 * d25) + d16 * (d13 + d15 * d24 - d20 - d18 * d26) - +HEAPF32[i19 + (i5 * 152 | 0) + 32 >> 2]);
   11641     d44 = d28 > 0.0 ? d28 : 0.0;
   11642     d43 = d44 - d27;
   11643     HEAPF32[i22 >> 2] = d44;
   11644     d44 = d17 * d43;
   11645     d43 = d16 * d43;
   11646     d21 = d21 - d12 * d44;
   11647     d20 = d20 - d12 * d43;
   11648     d14 = d14 + d11 * d44;
   11649     d13 = d13 + d11 * d43;
   11650     d18 = d18 - d10 * (d26 * d43 - d25 * d44);
   11651     d15 = d15 + d9 * (d24 * d43 - d23 * d44);
   11652    }
   11653   } while (0);
   11654   d44 = +d21;
   11655   d43 = +d20;
   11656   i42 = i7;
   11657   HEAPF32[i42 >> 2] = d44;
   11658   HEAPF32[i42 + 4 >> 2] = d43;
   11659   i42 = HEAP32[i4 >> 2] | 0;
   11660   HEAPF32[i42 + (i8 * 12 | 0) + 8 >> 2] = d18;
   11661   d43 = +d14;
   11662   d44 = +d13;
   11663   i42 = i42 + (i6 * 12 | 0) | 0;
   11664   HEAPF32[i42 >> 2] = d43;
   11665   HEAPF32[i42 + 4 >> 2] = d44;
   11666   i42 = HEAP32[i4 >> 2] | 0;
   11667   HEAPF32[i42 + (i6 * 12 | 0) + 8 >> 2] = d15;
   11668   i5 = i5 + 1 | 0;
   11669   if ((i5 | 0) >= (HEAP32[i2 >> 2] | 0)) {
   11670    i2 = 21;
   11671    break;
   11672   }
   11673  }
   11674  if ((i2 | 0) == 4) {
   11675   ___assert_fail(6648, 6520, 311, 6688);
   11676  } else if ((i2 | 0) == 9) {
   11677   ___assert_fail(6720, 6520, 406, 6688);
   11678  } else if ((i2 | 0) == 21) {
   11679   STACKTOP = i1;
   11680   return;
   11681  }
   11682 }
   11683 function __Z14b2TimeOfImpactP11b2TOIOutputPK10b2TOIInput(i3, i11) {
   11684  i3 = i3 | 0;
   11685  i11 = i11 | 0;
   11686  var i1 = 0, i2 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0, d14 = 0.0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, d28 = 0.0, i29 = 0, d30 = 0.0, d31 = 0.0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0, i39 = 0, d40 = 0.0, i41 = 0, d42 = 0.0, d43 = 0.0, i44 = 0, i45 = 0, d46 = 0.0, i47 = 0, d48 = 0.0, d49 = 0.0, d50 = 0.0, d51 = 0.0, i52 = 0, d53 = 0.0, d54 = 0.0, d55 = 0.0, d56 = 0.0;
   11687  i1 = STACKTOP;
   11688  STACKTOP = STACKTOP + 320 | 0;
   11689  i12 = i1 + 276 | 0;
   11690  i10 = i1 + 240 | 0;
   11691  i13 = i1 + 228 | 0;
   11692  i5 = i1 + 136 | 0;
   11693  i7 = i1 + 112 | 0;
   11694  i8 = i1 + 8 | 0;
   11695  i9 = i1 + 4 | 0;
   11696  i4 = i1;
   11697  HEAP32[874] = (HEAP32[874] | 0) + 1;
   11698  HEAP32[i3 >> 2] = 0;
   11699  i19 = i11 + 128 | 0;
   11700  i2 = i3 + 4 | 0;
   11701  HEAPF32[i2 >> 2] = +HEAPF32[i19 >> 2];
   11702  i6 = i11 + 28 | 0;
   11703  i16 = i12 + 0 | 0;
   11704  i15 = i11 + 56 | 0;
   11705  i17 = i16 + 36 | 0;
   11706  do {
   11707   HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
   11708   i16 = i16 + 4 | 0;
   11709   i15 = i15 + 4 | 0;
   11710  } while ((i16 | 0) < (i17 | 0));
   11711  i16 = i10 + 0 | 0;
   11712  i15 = i11 + 92 | 0;
   11713  i17 = i16 + 36 | 0;
   11714  do {
   11715   HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
   11716   i16 = i16 + 4 | 0;
   11717   i15 = i15 + 4 | 0;
   11718  } while ((i16 | 0) < (i17 | 0));
   11719  i15 = i12 + 24 | 0;
   11720  d42 = +HEAPF32[i15 >> 2];
   11721  d43 = +Math_floor(+(d42 / 6.2831854820251465)) * 6.2831854820251465;
   11722  d42 = d42 - d43;
   11723  HEAPF32[i15 >> 2] = d42;
   11724  i16 = i12 + 28 | 0;
   11725  d43 = +HEAPF32[i16 >> 2] - d43;
   11726  HEAPF32[i16 >> 2] = d43;
   11727  i17 = i10 + 24 | 0;
   11728  d46 = +HEAPF32[i17 >> 2];
   11729  d40 = +Math_floor(+(d46 / 6.2831854820251465)) * 6.2831854820251465;
   11730  d46 = d46 - d40;
   11731  HEAPF32[i17 >> 2] = d46;
   11732  i18 = i10 + 28 | 0;
   11733  d40 = +HEAPF32[i18 >> 2] - d40;
   11734  HEAPF32[i18 >> 2] = d40;
   11735  d14 = +HEAPF32[i19 >> 2];
   11736  d28 = +HEAPF32[i11 + 24 >> 2] + +HEAPF32[i11 + 52 >> 2] + -.014999999664723873;
   11737  d28 = d28 < .004999999888241291 ? .004999999888241291 : d28;
   11738  if (!(d28 > .0012499999720603228)) {
   11739   ___assert_fail(3536, 3560, 280, 3600);
   11740  }
   11741  HEAP16[i13 + 4 >> 1] = 0;
   11742  HEAP32[i5 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
   11743  HEAP32[i5 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
   11744  HEAP32[i5 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
   11745  HEAP32[i5 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
   11746  HEAP32[i5 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
   11747  HEAP32[i5 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
   11748  HEAP32[i5 + 24 >> 2] = HEAP32[i11 + 24 >> 2];
   11749  i38 = i5 + 28 | 0;
   11750  HEAP32[i38 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   11751  HEAP32[i38 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   11752  HEAP32[i38 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   11753  HEAP32[i38 + 12 >> 2] = HEAP32[i6 + 12 >> 2];
   11754  HEAP32[i38 + 16 >> 2] = HEAP32[i6 + 16 >> 2];
   11755  HEAP32[i38 + 20 >> 2] = HEAP32[i6 + 20 >> 2];
   11756  HEAP32[i38 + 24 >> 2] = HEAP32[i6 + 24 >> 2];
   11757  HEAP8[i5 + 88 | 0] = 0;
   11758  i38 = i12 + 8 | 0;
   11759  i27 = i12 + 12 | 0;
   11760  i29 = i12 + 16 | 0;
   11761  i22 = i12 + 20 | 0;
   11762  i32 = i12 + 4 | 0;
   11763  i34 = i10 + 8 | 0;
   11764  i36 = i10 + 12 | 0;
   11765  i35 = i10 + 16 | 0;
   11766  i37 = i10 + 20 | 0;
   11767  i33 = i10 + 4 | 0;
   11768  i26 = i5 + 56 | 0;
   11769  i25 = i5 + 64 | 0;
   11770  i24 = i5 + 68 | 0;
   11771  i23 = i5 + 72 | 0;
   11772  i20 = i5 + 80 | 0;
   11773  i19 = i5 + 84 | 0;
   11774  i21 = i7 + 16 | 0;
   11775  d30 = d28 + .0012499999720603228;
   11776  d31 = d28 + -.0012499999720603228;
   11777  d48 = d40;
   11778  i39 = 0;
   11779  d40 = 0.0;
   11780  L4 : while (1) {
   11781   d56 = 1.0 - d40;
   11782   d49 = d56 * d42 + d40 * d43;
   11783   d43 = +Math_sin(+d49);
   11784   d49 = +Math_cos(+d49);
   11785   d55 = +HEAPF32[i12 >> 2];
   11786   d54 = +HEAPF32[i32 >> 2];
   11787   d42 = d56 * d46 + d40 * d48;
   11788   d53 = +Math_sin(+d42);
   11789   d42 = +Math_cos(+d42);
   11790   d46 = +HEAPF32[i10 >> 2];
   11791   d51 = +HEAPF32[i33 >> 2];
   11792   d50 = d56 * +HEAPF32[i34 >> 2] + d40 * +HEAPF32[i35 >> 2] - (d42 * d46 - d53 * d51);
   11793   d51 = d56 * +HEAPF32[i36 >> 2] + d40 * +HEAPF32[i37 >> 2] - (d53 * d46 + d42 * d51);
   11794   d46 = +(d56 * +HEAPF32[i38 >> 2] + d40 * +HEAPF32[i29 >> 2] - (d49 * d55 - d43 * d54));
   11795   d48 = +(d56 * +HEAPF32[i27 >> 2] + d40 * +HEAPF32[i22 >> 2] - (d43 * d55 + d49 * d54));
   11796   i52 = i26;
   11797   HEAPF32[i52 >> 2] = d46;
   11798   HEAPF32[i52 + 4 >> 2] = d48;
   11799   HEAPF32[i25 >> 2] = d43;
   11800   HEAPF32[i24 >> 2] = d49;
   11801   d50 = +d50;
   11802   d51 = +d51;
   11803   i52 = i23;
   11804   HEAPF32[i52 >> 2] = d50;
   11805   HEAPF32[i52 + 4 >> 2] = d51;
   11806   HEAPF32[i20 >> 2] = d53;
   11807   HEAPF32[i19 >> 2] = d42;
   11808   __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i7, i13, i5);
   11809   d42 = +HEAPF32[i21 >> 2];
   11810   if (d42 <= 0.0) {
   11811    i4 = 5;
   11812    break;
   11813   }
   11814   if (d42 < d30) {
   11815    i4 = 7;
   11816    break;
   11817   }
   11818   +__ZN20b2SeparationFunction10InitializeEPK14b2SimplexCachePK15b2DistanceProxyRK7b2SweepS5_S8_f(i8, i13, i11, i12, i6, i10, d40);
   11819   i41 = 0;
   11820   d42 = d14;
   11821   do {
   11822    d50 = +__ZNK20b2SeparationFunction17FindMinSeparationEPiS0_f(i8, i9, i4, d42);
   11823    if (d50 > d30) {
   11824     i4 = 10;
   11825     break L4;
   11826    }
   11827    if (d50 > d31) {
   11828     d40 = d42;
   11829     break;
   11830    }
   11831    i45 = HEAP32[i9 >> 2] | 0;
   11832    i44 = HEAP32[i4 >> 2] | 0;
   11833    d48 = +__ZNK20b2SeparationFunction8EvaluateEiif(i8, i45, i44, d40);
   11834    if (d48 < d31) {
   11835     i4 = 13;
   11836     break L4;
   11837    }
   11838    if (!(d48 <= d30)) {
   11839     d43 = d40;
   11840     d46 = d42;
   11841     i47 = 0;
   11842    } else {
   11843     i4 = 15;
   11844     break L4;
   11845    }
   11846    while (1) {
   11847     if ((i47 & 1 | 0) == 0) {
   11848      d49 = (d43 + d46) * .5;
   11849     } else {
   11850      d49 = d43 + (d28 - d48) * (d46 - d43) / (d50 - d48);
   11851     }
   11852     d51 = +__ZNK20b2SeparationFunction8EvaluateEiif(i8, i45, i44, d49);
   11853     d53 = d51 - d28;
   11854     if (!(d53 > 0.0)) {
   11855      d53 = -d53;
   11856     }
   11857     if (d53 < .0012499999720603228) {
   11858      d42 = d49;
   11859      break;
   11860     }
   11861     i52 = d51 > d28;
   11862     i47 = i47 + 1 | 0;
   11863     HEAP32[880] = (HEAP32[880] | 0) + 1;
   11864     if ((i47 | 0) == 50) {
   11865      i47 = 50;
   11866      break;
   11867     } else {
   11868      d43 = i52 ? d49 : d43;
   11869      d46 = i52 ? d46 : d49;
   11870      d48 = i52 ? d51 : d48;
   11871      d50 = i52 ? d50 : d51;
   11872     }
   11873    }
   11874    i44 = HEAP32[882] | 0;
   11875    HEAP32[882] = (i44 | 0) > (i47 | 0) ? i44 : i47;
   11876    i41 = i41 + 1 | 0;
   11877   } while ((i41 | 0) != 8);
   11878   i39 = i39 + 1 | 0;
   11879   HEAP32[876] = (HEAP32[876] | 0) + 1;
   11880   if ((i39 | 0) == 20) {
   11881    i4 = 27;
   11882    break;
   11883   }
   11884   d42 = +HEAPF32[i15 >> 2];
   11885   d43 = +HEAPF32[i16 >> 2];
   11886   d46 = +HEAPF32[i17 >> 2];
   11887   d48 = +HEAPF32[i18 >> 2];
   11888  }
   11889  if ((i4 | 0) == 5) {
   11890   HEAP32[i3 >> 2] = 2;
   11891   HEAPF32[i2 >> 2] = 0.0;
   11892   i2 = HEAP32[878] | 0;
   11893   i52 = (i2 | 0) > (i39 | 0);
   11894   i52 = i52 ? i2 : i39;
   11895   HEAP32[878] = i52;
   11896   STACKTOP = i1;
   11897   return;
   11898  } else if ((i4 | 0) == 7) {
   11899   HEAP32[i3 >> 2] = 3;
   11900   HEAPF32[i2 >> 2] = d40;
   11901   i2 = HEAP32[878] | 0;
   11902   i52 = (i2 | 0) > (i39 | 0);
   11903   i52 = i52 ? i2 : i39;
   11904   HEAP32[878] = i52;
   11905   STACKTOP = i1;
   11906   return;
   11907  } else if ((i4 | 0) == 10) {
   11908   HEAP32[i3 >> 2] = 4;
   11909   HEAPF32[i2 >> 2] = d14;
   11910  } else if ((i4 | 0) == 13) {
   11911   HEAP32[i3 >> 2] = 1;
   11912   HEAPF32[i2 >> 2] = d40;
   11913  } else if ((i4 | 0) == 15) {
   11914   HEAP32[i3 >> 2] = 3;
   11915   HEAPF32[i2 >> 2] = d40;
   11916  } else if ((i4 | 0) == 27) {
   11917   HEAP32[i3 >> 2] = 1;
   11918   HEAPF32[i2 >> 2] = d40;
   11919   i39 = 20;
   11920   i2 = HEAP32[878] | 0;
   11921   i52 = (i2 | 0) > (i39 | 0);
   11922   i52 = i52 ? i2 : i39;
   11923   HEAP32[878] = i52;
   11924   STACKTOP = i1;
   11925   return;
   11926  }
   11927  HEAP32[876] = (HEAP32[876] | 0) + 1;
   11928  i39 = i39 + 1 | 0;
   11929  i2 = HEAP32[878] | 0;
   11930  i52 = (i2 | 0) > (i39 | 0);
   11931  i52 = i52 ? i2 : i39;
   11932  HEAP32[878] = i52;
   11933  STACKTOP = i1;
   11934  return;
   11935 }
   11936 function __ZN7b2World5SolveERK10b2TimeStep(i5, i15) {
   11937  i5 = i5 | 0;
   11938  i15 = i15 | 0;
   11939  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0, d39 = 0.0;
   11940  i3 = STACKTOP;
   11941  STACKTOP = STACKTOP + 96 | 0;
   11942  i4 = i3 + 32 | 0;
   11943  i9 = i3;
   11944  i2 = i3 + 84 | 0;
   11945  i11 = i5 + 103008 | 0;
   11946  HEAPF32[i11 >> 2] = 0.0;
   11947  i14 = i5 + 103012 | 0;
   11948  HEAPF32[i14 >> 2] = 0.0;
   11949  i8 = i5 + 103016 | 0;
   11950  HEAPF32[i8 >> 2] = 0.0;
   11951  i16 = i5 + 102960 | 0;
   11952  i1 = i5 + 102872 | 0;
   11953  i6 = i5 + 68 | 0;
   11954  __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i4, HEAP32[i16 >> 2] | 0, HEAP32[i5 + 102936 >> 2] | 0, HEAP32[i5 + 102964 >> 2] | 0, i6, HEAP32[i5 + 102944 >> 2] | 0);
   11955  i7 = i5 + 102952 | 0;
   11956  i17 = HEAP32[i7 >> 2] | 0;
   11957  if ((i17 | 0) != 0) {
   11958   do {
   11959    i38 = i17 + 4 | 0;
   11960    HEAP16[i38 >> 1] = HEAP16[i38 >> 1] & 65534;
   11961    i17 = HEAP32[i17 + 96 >> 2] | 0;
   11962   } while ((i17 | 0) != 0);
   11963  }
   11964  i17 = HEAP32[i5 + 102932 >> 2] | 0;
   11965  if ((i17 | 0) != 0) {
   11966   do {
   11967    i38 = i17 + 4 | 0;
   11968    HEAP32[i38 >> 2] = HEAP32[i38 >> 2] & -2;
   11969    i17 = HEAP32[i17 + 12 >> 2] | 0;
   11970   } while ((i17 | 0) != 0);
   11971  }
   11972  i17 = HEAP32[i5 + 102956 >> 2] | 0;
   11973  if ((i17 | 0) != 0) {
   11974   do {
   11975    HEAP8[i17 + 60 | 0] = 0;
   11976    i17 = HEAP32[i17 + 12 >> 2] | 0;
   11977   } while ((i17 | 0) != 0);
   11978  }
   11979  i24 = HEAP32[i16 >> 2] | 0;
   11980  i16 = __ZN16b2StackAllocator8AllocateEi(i6, i24 << 2) | 0;
   11981  i32 = HEAP32[i7 >> 2] | 0;
   11982  L13 : do {
   11983   if ((i32 | 0) != 0) {
   11984    i18 = i4 + 28 | 0;
   11985    i30 = i4 + 36 | 0;
   11986    i27 = i4 + 32 | 0;
   11987    i17 = i4 + 40 | 0;
   11988    i23 = i4 + 8 | 0;
   11989    i29 = i4 + 48 | 0;
   11990    i28 = i4 + 16 | 0;
   11991    i26 = i4 + 44 | 0;
   11992    i31 = i4 + 12 | 0;
   11993    i25 = i5 + 102968 | 0;
   11994    i22 = i5 + 102976 | 0;
   11995    i21 = i9 + 12 | 0;
   11996    i20 = i9 + 16 | 0;
   11997    i19 = i9 + 20 | 0;
   11998    L15 : while (1) {
   11999     i33 = i32 + 4 | 0;
   12000     i34 = HEAP16[i33 >> 1] | 0;
   12001     if ((i34 & 35) == 34 ? (HEAP32[i32 >> 2] | 0) != 0 : 0) {
   12002      HEAP32[i18 >> 2] = 0;
   12003      HEAP32[i30 >> 2] = 0;
   12004      HEAP32[i27 >> 2] = 0;
   12005      HEAP32[i16 >> 2] = i32;
   12006      HEAP16[i33 >> 1] = i34 & 65535 | 1;
   12007      i35 = 1;
   12008      do {
   12009       i35 = i35 + -1 | 0;
   12010       i33 = HEAP32[i16 + (i35 << 2) >> 2] | 0;
   12011       i34 = i33 + 4 | 0;
   12012       i36 = HEAP16[i34 >> 1] | 0;
   12013       if ((i36 & 32) == 0) {
   12014        i8 = 13;
   12015        break L15;
   12016       }
   12017       i37 = HEAP32[i18 >> 2] | 0;
   12018       if ((i37 | 0) >= (HEAP32[i17 >> 2] | 0)) {
   12019        i8 = 15;
   12020        break L15;
   12021       }
   12022       HEAP32[i33 + 8 >> 2] = i37;
   12023       i38 = HEAP32[i18 >> 2] | 0;
   12024       HEAP32[(HEAP32[i23 >> 2] | 0) + (i38 << 2) >> 2] = i33;
   12025       HEAP32[i18 >> 2] = i38 + 1;
   12026       i36 = i36 & 65535;
   12027       if ((i36 & 2 | 0) == 0) {
   12028        HEAP16[i34 >> 1] = i36 | 2;
   12029        HEAPF32[i33 + 144 >> 2] = 0.0;
   12030       }
   12031       if ((HEAP32[i33 >> 2] | 0) != 0) {
   12032        i34 = HEAP32[i33 + 112 >> 2] | 0;
   12033        if ((i34 | 0) != 0) {
   12034         do {
   12035          i38 = HEAP32[i34 + 4 >> 2] | 0;
   12036          i36 = i38 + 4 | 0;
   12037          if (((HEAP32[i36 >> 2] & 7 | 0) == 6 ? (HEAP8[(HEAP32[i38 + 48 >> 2] | 0) + 38 | 0] | 0) == 0 : 0) ? (HEAP8[(HEAP32[i38 + 52 >> 2] | 0) + 38 | 0] | 0) == 0 : 0) {
   12038           i37 = HEAP32[i30 >> 2] | 0;
   12039           if ((i37 | 0) >= (HEAP32[i26 >> 2] | 0)) {
   12040            i8 = 25;
   12041            break L15;
   12042           }
   12043           HEAP32[i30 >> 2] = i37 + 1;
   12044           HEAP32[(HEAP32[i31 >> 2] | 0) + (i37 << 2) >> 2] = i38;
   12045           HEAP32[i36 >> 2] = HEAP32[i36 >> 2] | 1;
   12046           i38 = HEAP32[i34 >> 2] | 0;
   12047           i36 = i38 + 4 | 0;
   12048           i37 = HEAP16[i36 >> 1] | 0;
   12049           if ((i37 & 1) == 0) {
   12050            if ((i35 | 0) >= (i24 | 0)) {
   12051             i8 = 28;
   12052             break L15;
   12053            }
   12054            HEAP32[i16 + (i35 << 2) >> 2] = i38;
   12055            HEAP16[i36 >> 1] = i37 & 65535 | 1;
   12056            i35 = i35 + 1 | 0;
   12057           }
   12058          }
   12059          i34 = HEAP32[i34 + 12 >> 2] | 0;
   12060         } while ((i34 | 0) != 0);
   12061        }
   12062        i33 = HEAP32[i33 + 108 >> 2] | 0;
   12063        if ((i33 | 0) != 0) {
   12064         do {
   12065          i37 = i33 + 4 | 0;
   12066          i36 = HEAP32[i37 >> 2] | 0;
   12067          if ((HEAP8[i36 + 60 | 0] | 0) == 0 ? (i10 = HEAP32[i33 >> 2] | 0, i13 = i10 + 4 | 0, i12 = HEAP16[i13 >> 1] | 0, !((i12 & 32) == 0)) : 0) {
   12068           i34 = HEAP32[i27 >> 2] | 0;
   12069           if ((i34 | 0) >= (HEAP32[i29 >> 2] | 0)) {
   12070            i8 = 35;
   12071            break L15;
   12072           }
   12073           HEAP32[i27 >> 2] = i34 + 1;
   12074           HEAP32[(HEAP32[i28 >> 2] | 0) + (i34 << 2) >> 2] = i36;
   12075           HEAP8[(HEAP32[i37 >> 2] | 0) + 60 | 0] = 1;
   12076           if ((i12 & 1) == 0) {
   12077            if ((i35 | 0) >= (i24 | 0)) {
   12078             i8 = 38;
   12079             break L15;
   12080            }
   12081            HEAP32[i16 + (i35 << 2) >> 2] = i10;
   12082            HEAP16[i13 >> 1] = i12 & 65535 | 1;
   12083            i35 = i35 + 1 | 0;
   12084           }
   12085          }
   12086          i33 = HEAP32[i33 + 12 >> 2] | 0;
   12087         } while ((i33 | 0) != 0);
   12088        }
   12089       }
   12090      } while ((i35 | 0) > 0);
   12091      __ZN8b2Island5SolveEP9b2ProfileRK10b2TimeStepRK6b2Vec2b(i4, i9, i15, i25, (HEAP8[i22] | 0) != 0);
   12092      HEAPF32[i11 >> 2] = +HEAPF32[i21 >> 2] + +HEAPF32[i11 >> 2];
   12093      HEAPF32[i14 >> 2] = +HEAPF32[i20 >> 2] + +HEAPF32[i14 >> 2];
   12094      HEAPF32[i8 >> 2] = +HEAPF32[i19 >> 2] + +HEAPF32[i8 >> 2];
   12095      i35 = HEAP32[i18 >> 2] | 0;
   12096      if ((i35 | 0) > 0) {
   12097       i33 = HEAP32[i23 >> 2] | 0;
   12098       i36 = 0;
   12099       do {
   12100        i34 = HEAP32[i33 + (i36 << 2) >> 2] | 0;
   12101        if ((HEAP32[i34 >> 2] | 0) == 0) {
   12102         i38 = i34 + 4 | 0;
   12103         HEAP16[i38 >> 1] = HEAP16[i38 >> 1] & 65534;
   12104        }
   12105        i36 = i36 + 1 | 0;
   12106       } while ((i36 | 0) < (i35 | 0));
   12107      }
   12108     }
   12109     i32 = HEAP32[i32 + 96 >> 2] | 0;
   12110     if ((i32 | 0) == 0) {
   12111      break L13;
   12112     }
   12113    }
   12114    if ((i8 | 0) == 13) {
   12115     ___assert_fail(2232, 2184, 445, 2256);
   12116    } else if ((i8 | 0) == 15) {
   12117     ___assert_fail(2520, 2440, 54, 2472);
   12118    } else if ((i8 | 0) == 25) {
   12119     ___assert_fail(2480, 2440, 62, 2472);
   12120    } else if ((i8 | 0) == 28) {
   12121     ___assert_fail(2264, 2184, 495, 2256);
   12122    } else if ((i8 | 0) == 35) {
   12123     ___assert_fail(2408, 2440, 68, 2472);
   12124    } else if ((i8 | 0) == 38) {
   12125     ___assert_fail(2264, 2184, 524, 2256);
   12126    }
   12127   }
   12128  } while (0);
   12129  __ZN16b2StackAllocator4FreeEPv(i6, i16);
   12130  __ZN7b2TimerC2Ev(i2);
   12131  i6 = HEAP32[i7 >> 2] | 0;
   12132  if ((i6 | 0) == 0) {
   12133   __ZN16b2ContactManager15FindNewContactsEv(i1);
   12134   d39 = +__ZNK7b2Timer15GetMillisecondsEv(i2);
   12135   i38 = i5 + 103020 | 0;
   12136   HEAPF32[i38 >> 2] = d39;
   12137   __ZN8b2IslandD2Ev(i4);
   12138   STACKTOP = i3;
   12139   return;
   12140  }
   12141  do {
   12142   if (!((HEAP16[i6 + 4 >> 1] & 1) == 0) ? (HEAP32[i6 >> 2] | 0) != 0 : 0) {
   12143    __ZN6b2Body19SynchronizeFixturesEv(i6);
   12144   }
   12145   i6 = HEAP32[i6 + 96 >> 2] | 0;
   12146  } while ((i6 | 0) != 0);
   12147  __ZN16b2ContactManager15FindNewContactsEv(i1);
   12148  d39 = +__ZNK7b2Timer15GetMillisecondsEv(i2);
   12149  i38 = i5 + 103020 | 0;
   12150  HEAPF32[i38 >> 2] = d39;
   12151  __ZN8b2IslandD2Ev(i4);
   12152  STACKTOP = i3;
   12153  return;
   12154 }
   12155 function __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i10) {
   12156  i10 = i10 | 0;
   12157  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, i31 = 0, d32 = 0.0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, d38 = 0.0, d39 = 0.0, d40 = 0.0, d41 = 0.0, i42 = 0, d43 = 0.0, d44 = 0.0, d45 = 0.0, d46 = 0.0, d47 = 0.0, d48 = 0.0, i49 = 0, i50 = 0;
   12158  i1 = STACKTOP;
   12159  STACKTOP = STACKTOP + 64 | 0;
   12160  i8 = i1 + 40 | 0;
   12161  i3 = i1 + 24 | 0;
   12162  i5 = i1;
   12163  i4 = i10 + 48 | 0;
   12164  if ((HEAP32[i4 >> 2] | 0) <= 0) {
   12165   STACKTOP = i1;
   12166   return;
   12167  }
   12168  i9 = i10 + 40 | 0;
   12169  i2 = i10 + 36 | 0;
   12170  i7 = i10 + 44 | 0;
   12171  i6 = i10 + 24 | 0;
   12172  i13 = i10 + 28 | 0;
   12173  i14 = i8 + 8 | 0;
   12174  i12 = i8 + 12 | 0;
   12175  i11 = i3 + 8 | 0;
   12176  i10 = i3 + 12 | 0;
   12177  i16 = 0;
   12178  while (1) {
   12179   i15 = HEAP32[i9 >> 2] | 0;
   12180   i33 = HEAP32[i2 >> 2] | 0;
   12181   i31 = HEAP32[(HEAP32[i7 >> 2] | 0) + (HEAP32[i15 + (i16 * 152 | 0) + 148 >> 2] << 2) >> 2] | 0;
   12182   i35 = HEAP32[i15 + (i16 * 152 | 0) + 112 >> 2] | 0;
   12183   i42 = HEAP32[i15 + (i16 * 152 | 0) + 116 >> 2] | 0;
   12184   d30 = +HEAPF32[i15 + (i16 * 152 | 0) + 120 >> 2];
   12185   d24 = +HEAPF32[i15 + (i16 * 152 | 0) + 124 >> 2];
   12186   d17 = +HEAPF32[i15 + (i16 * 152 | 0) + 128 >> 2];
   12187   d18 = +HEAPF32[i15 + (i16 * 152 | 0) + 132 >> 2];
   12188   i36 = i33 + (i16 * 88 | 0) + 48 | 0;
   12189   d39 = +HEAPF32[i36 >> 2];
   12190   d40 = +HEAPF32[i36 + 4 >> 2];
   12191   i36 = i33 + (i16 * 88 | 0) + 56 | 0;
   12192   d41 = +HEAPF32[i36 >> 2];
   12193   d43 = +HEAPF32[i36 + 4 >> 2];
   12194   i36 = HEAP32[i6 >> 2] | 0;
   12195   i37 = i36 + (i35 * 12 | 0) | 0;
   12196   d26 = +HEAPF32[i37 >> 2];
   12197   d27 = +HEAPF32[i37 + 4 >> 2];
   12198   d32 = +HEAPF32[i36 + (i35 * 12 | 0) + 8 >> 2];
   12199   i37 = HEAP32[i13 >> 2] | 0;
   12200   i34 = i37 + (i35 * 12 | 0) | 0;
   12201   d22 = +HEAPF32[i34 >> 2];
   12202   d25 = +HEAPF32[i34 + 4 >> 2];
   12203   d23 = +HEAPF32[i37 + (i35 * 12 | 0) + 8 >> 2];
   12204   i35 = i36 + (i42 * 12 | 0) | 0;
   12205   d28 = +HEAPF32[i35 >> 2];
   12206   d29 = +HEAPF32[i35 + 4 >> 2];
   12207   d38 = +HEAPF32[i36 + (i42 * 12 | 0) + 8 >> 2];
   12208   i36 = i37 + (i42 * 12 | 0) | 0;
   12209   d20 = +HEAPF32[i36 >> 2];
   12210   d19 = +HEAPF32[i36 + 4 >> 2];
   12211   d21 = +HEAPF32[i37 + (i42 * 12 | 0) + 8 >> 2];
   12212   if ((HEAP32[i31 + 124 >> 2] | 0) <= 0) {
   12213    i2 = 4;
   12214    break;
   12215   }
   12216   d44 = +HEAPF32[i33 + (i16 * 88 | 0) + 80 >> 2];
   12217   d45 = +HEAPF32[i33 + (i16 * 88 | 0) + 76 >> 2];
   12218   d47 = +Math_sin(+d32);
   12219   HEAPF32[i14 >> 2] = d47;
   12220   d48 = +Math_cos(+d32);
   12221   HEAPF32[i12 >> 2] = d48;
   12222   d32 = +Math_sin(+d38);
   12223   HEAPF32[i11 >> 2] = d32;
   12224   d38 = +Math_cos(+d38);
   12225   HEAPF32[i10 >> 2] = d38;
   12226   d46 = +(d26 - (d39 * d48 - d40 * d47));
   12227   d40 = +(d27 - (d40 * d48 + d39 * d47));
   12228   i37 = i8;
   12229   HEAPF32[i37 >> 2] = d46;
   12230   HEAPF32[i37 + 4 >> 2] = d40;
   12231   d40 = +(d28 - (d41 * d38 - d43 * d32));
   12232   d43 = +(d29 - (d43 * d38 + d41 * d32));
   12233   i37 = i3;
   12234   HEAPF32[i37 >> 2] = d40;
   12235   HEAPF32[i37 + 4 >> 2] = d43;
   12236   __ZN15b2WorldManifold10InitializeEPK10b2ManifoldRK11b2TransformfS5_f(i5, i31 + 64 | 0, i8, d45, i3, d44);
   12237   i37 = i15 + (i16 * 152 | 0) + 72 | 0;
   12238   i42 = i5;
   12239   i33 = HEAP32[i42 + 4 >> 2] | 0;
   12240   i31 = i37;
   12241   HEAP32[i31 >> 2] = HEAP32[i42 >> 2];
   12242   HEAP32[i31 + 4 >> 2] = i33;
   12243   i31 = i15 + (i16 * 152 | 0) + 144 | 0;
   12244   i33 = HEAP32[i31 >> 2] | 0;
   12245   do {
   12246    if ((i33 | 0) > 0) {
   12247     i36 = i15 + (i16 * 152 | 0) + 76 | 0;
   12248     d32 = d30 + d24;
   12249     i35 = i15 + (i16 * 152 | 0) + 140 | 0;
   12250     i34 = 0;
   12251     do {
   12252      i49 = i5 + (i34 << 3) + 8 | 0;
   12253      d41 = +HEAPF32[i49 >> 2] - d26;
   12254      i42 = i5 + (i34 << 3) + 12 | 0;
   12255      d39 = +d41;
   12256      d40 = +(+HEAPF32[i42 >> 2] - d27);
   12257      i50 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) | 0;
   12258      HEAPF32[i50 >> 2] = d39;
   12259      HEAPF32[i50 + 4 >> 2] = d40;
   12260      d40 = +HEAPF32[i49 >> 2] - d28;
   12261      d39 = +d40;
   12262      d47 = +(+HEAPF32[i42 >> 2] - d29);
   12263      i42 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 8 | 0;
   12264      HEAPF32[i42 >> 2] = d39;
   12265      HEAPF32[i42 + 4 >> 2] = d47;
   12266      d47 = +HEAPF32[i36 >> 2];
   12267      d39 = +HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 4 >> 2];
   12268      d43 = +HEAPF32[i37 >> 2];
   12269      d48 = d41 * d47 - d39 * d43;
   12270      d38 = +HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 12 >> 2];
   12271      d43 = d47 * d40 - d43 * d38;
   12272      d43 = d32 + d48 * d17 * d48 + d43 * d18 * d43;
   12273      if (d43 > 0.0) {
   12274       d43 = 1.0 / d43;
   12275      } else {
   12276       d43 = 0.0;
   12277      }
   12278      HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 24 >> 2] = d43;
   12279      d43 = +HEAPF32[i36 >> 2];
   12280      d47 = -+HEAPF32[i37 >> 2];
   12281      d48 = d41 * d47 - d43 * d39;
   12282      d43 = d40 * d47 - d43 * d38;
   12283      d43 = d32 + d48 * d17 * d48 + d43 * d18 * d43;
   12284      if (d43 > 0.0) {
   12285       d43 = 1.0 / d43;
   12286      } else {
   12287       d43 = 0.0;
   12288      }
   12289      HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 28 >> 2] = d43;
   12290      i42 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 32 | 0;
   12291      HEAPF32[i42 >> 2] = 0.0;
   12292      d38 = +HEAPF32[i37 >> 2] * (d20 - d21 * d38 - d22 + d23 * d39) + +HEAPF32[i36 >> 2] * (d19 + d21 * d40 - d25 - d23 * d41);
   12293      if (d38 < -1.0) {
   12294       HEAPF32[i42 >> 2] = -(d38 * +HEAPF32[i35 >> 2]);
   12295      }
   12296      i34 = i34 + 1 | 0;
   12297     } while ((i34 | 0) != (i33 | 0));
   12298     if ((HEAP32[i31 >> 2] | 0) == 2) {
   12299      d45 = +HEAPF32[i15 + (i16 * 152 | 0) + 76 >> 2];
   12300      d20 = +HEAPF32[i37 >> 2];
   12301      d44 = +HEAPF32[i15 + (i16 * 152 | 0) >> 2] * d45 - +HEAPF32[i15 + (i16 * 152 | 0) + 4 >> 2] * d20;
   12302      d19 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 8 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 12 >> 2];
   12303      d47 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 36 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 40 >> 2];
   12304      d20 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 44 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 48 >> 2];
   12305      d45 = d30 + d24;
   12306      d46 = d17 * d44;
   12307      d48 = d18 * d19;
   12308      d19 = d45 + d44 * d46 + d19 * d48;
   12309      d18 = d45 + d47 * d17 * d47 + d20 * d18 * d20;
   12310      d17 = d45 + d46 * d47 + d48 * d20;
   12311      d20 = d19 * d18 - d17 * d17;
   12312      if (!(d19 * d19 < d20 * 1.0e3)) {
   12313       HEAP32[i31 >> 2] = 1;
   12314       break;
   12315      }
   12316      HEAPF32[i15 + (i16 * 152 | 0) + 96 >> 2] = d19;
   12317      HEAPF32[i15 + (i16 * 152 | 0) + 100 >> 2] = d17;
   12318      HEAPF32[i15 + (i16 * 152 | 0) + 104 >> 2] = d17;
   12319      HEAPF32[i15 + (i16 * 152 | 0) + 108 >> 2] = d18;
   12320      if (d20 != 0.0) {
   12321       d20 = 1.0 / d20;
   12322      }
   12323      d48 = -(d20 * d17);
   12324      HEAPF32[i15 + (i16 * 152 | 0) + 80 >> 2] = d18 * d20;
   12325      HEAPF32[i15 + (i16 * 152 | 0) + 84 >> 2] = d48;
   12326      HEAPF32[i15 + (i16 * 152 | 0) + 88 >> 2] = d48;
   12327      HEAPF32[i15 + (i16 * 152 | 0) + 92 >> 2] = d19 * d20;
   12328     }
   12329    }
   12330   } while (0);
   12331   i16 = i16 + 1 | 0;
   12332   if ((i16 | 0) >= (HEAP32[i4 >> 2] | 0)) {
   12333    i2 = 21;
   12334    break;
   12335   }
   12336  }
   12337  if ((i2 | 0) == 4) {
   12338   ___assert_fail(6584, 6520, 168, 6616);
   12339  } else if ((i2 | 0) == 21) {
   12340   STACKTOP = i1;
   12341   return;
   12342  }
   12343 }
   12344 function __Z17b2CollidePolygonsP10b2ManifoldPK14b2PolygonShapeRK11b2TransformS3_S6_(i5, i27, i28, i24, i14) {
   12345  i5 = i5 | 0;
   12346  i27 = i27 | 0;
   12347  i28 = i28 | 0;
   12348  i24 = i24 | 0;
   12349  i14 = i14 | 0;
   12350  var i1 = 0, i2 = 0, d3 = 0.0, i4 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, d15 = 0.0, d16 = 0.0, i17 = 0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0, d22 = 0.0, d23 = 0.0, d25 = 0.0, d26 = 0.0, d29 = 0.0, d30 = 0.0, i31 = 0, d32 = 0.0, i33 = 0, i34 = 0, d35 = 0.0, d36 = 0.0, d37 = 0.0, d38 = 0.0;
   12351  i1 = STACKTOP;
   12352  STACKTOP = STACKTOP + 96 | 0;
   12353  i17 = i1 + 92 | 0;
   12354  i20 = i1 + 88 | 0;
   12355  i13 = i1;
   12356  i11 = i1 + 80 | 0;
   12357  i12 = i1 + 56 | 0;
   12358  i4 = i1 + 32 | 0;
   12359  i10 = i1 + 24 | 0;
   12360  i2 = i5 + 60 | 0;
   12361  HEAP32[i2 >> 2] = 0;
   12362  d3 = +HEAPF32[i27 + 8 >> 2] + +HEAPF32[i24 + 8 >> 2];
   12363  HEAP32[i17 >> 2] = 0;
   12364  d7 = +__ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i17, i27, i28, i24, i14);
   12365  if (d7 > d3) {
   12366   STACKTOP = i1;
   12367   return;
   12368  }
   12369  HEAP32[i20 >> 2] = 0;
   12370  d6 = +__ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i20, i24, i14, i27, i28);
   12371  if (d6 > d3) {
   12372   STACKTOP = i1;
   12373   return;
   12374  }
   12375  if (d6 > d7 * .9800000190734863 + .0010000000474974513) {
   12376   d18 = +HEAPF32[i14 >> 2];
   12377   d19 = +HEAPF32[i14 + 4 >> 2];
   12378   d15 = +HEAPF32[i14 + 8 >> 2];
   12379   d16 = +HEAPF32[i14 + 12 >> 2];
   12380   d9 = +HEAPF32[i28 >> 2];
   12381   d6 = +HEAPF32[i28 + 4 >> 2];
   12382   d7 = +HEAPF32[i28 + 8 >> 2];
   12383   d8 = +HEAPF32[i28 + 12 >> 2];
   12384   i17 = HEAP32[i20 >> 2] | 0;
   12385   HEAP32[i5 + 56 >> 2] = 2;
   12386   i14 = 1;
   12387   i20 = i24;
   12388  } else {
   12389   d18 = +HEAPF32[i28 >> 2];
   12390   d19 = +HEAPF32[i28 + 4 >> 2];
   12391   d15 = +HEAPF32[i28 + 8 >> 2];
   12392   d16 = +HEAPF32[i28 + 12 >> 2];
   12393   d9 = +HEAPF32[i14 >> 2];
   12394   d6 = +HEAPF32[i14 + 4 >> 2];
   12395   d7 = +HEAPF32[i14 + 8 >> 2];
   12396   d8 = +HEAPF32[i14 + 12 >> 2];
   12397   i17 = HEAP32[i17 >> 2] | 0;
   12398   HEAP32[i5 + 56 >> 2] = 1;
   12399   i14 = 0;
   12400   i20 = i27;
   12401   i27 = i24;
   12402  }
   12403  i28 = HEAP32[i27 + 148 >> 2] | 0;
   12404  if (!((i17 | 0) > -1)) {
   12405   ___assert_fail(5640, 5688, 151, 5728);
   12406  }
   12407  i24 = HEAP32[i20 + 148 >> 2] | 0;
   12408  if ((i24 | 0) <= (i17 | 0)) {
   12409   ___assert_fail(5640, 5688, 151, 5728);
   12410  }
   12411  d21 = +HEAPF32[i20 + (i17 << 3) + 84 >> 2];
   12412  d36 = +HEAPF32[i20 + (i17 << 3) + 88 >> 2];
   12413  d22 = d16 * d21 - d15 * d36;
   12414  d36 = d15 * d21 + d16 * d36;
   12415  d21 = d8 * d22 + d7 * d36;
   12416  d22 = d8 * d36 - d7 * d22;
   12417  if ((i28 | 0) > 0) {
   12418   i33 = 0;
   12419   i34 = 0;
   12420   d23 = 3.4028234663852886e+38;
   12421   while (1) {
   12422    d25 = d21 * +HEAPF32[i27 + (i33 << 3) + 84 >> 2] + d22 * +HEAPF32[i27 + (i33 << 3) + 88 >> 2];
   12423    i31 = d25 < d23;
   12424    i34 = i31 ? i33 : i34;
   12425    i33 = i33 + 1 | 0;
   12426    if ((i33 | 0) == (i28 | 0)) {
   12427     break;
   12428    } else {
   12429     d23 = i31 ? d25 : d23;
   12430    }
   12431   }
   12432  } else {
   12433   i34 = 0;
   12434  }
   12435  i31 = i34 + 1 | 0;
   12436  i33 = (i31 | 0) < (i28 | 0) ? i31 : 0;
   12437  d35 = +HEAPF32[i27 + (i34 << 3) + 20 >> 2];
   12438  d32 = +HEAPF32[i27 + (i34 << 3) + 24 >> 2];
   12439  d36 = +(d9 + (d8 * d35 - d7 * d32));
   12440  d32 = +(d6 + (d7 * d35 + d8 * d32));
   12441  i31 = i13;
   12442  HEAPF32[i31 >> 2] = d36;
   12443  HEAPF32[i31 + 4 >> 2] = d32;
   12444  i31 = i17 & 255;
   12445  i28 = i13 + 8 | 0;
   12446  HEAP8[i28] = i31;
   12447  HEAP8[i28 + 1 | 0] = i34;
   12448  HEAP8[i28 + 2 | 0] = 1;
   12449  HEAP8[i28 + 3 | 0] = 0;
   12450  d32 = +HEAPF32[i27 + (i33 << 3) + 20 >> 2];
   12451  d36 = +HEAPF32[i27 + (i33 << 3) + 24 >> 2];
   12452  d35 = +(d9 + (d8 * d32 - d7 * d36));
   12453  d36 = +(d6 + (d7 * d32 + d8 * d36));
   12454  i27 = i13 + 12 | 0;
   12455  HEAPF32[i27 >> 2] = d35;
   12456  HEAPF32[i27 + 4 >> 2] = d36;
   12457  i27 = i13 + 20 | 0;
   12458  HEAP8[i27] = i31;
   12459  HEAP8[i27 + 1 | 0] = i33;
   12460  HEAP8[i27 + 2 | 0] = 1;
   12461  HEAP8[i27 + 3 | 0] = 0;
   12462  i27 = i17 + 1 | 0;
   12463  i24 = (i27 | 0) < (i24 | 0) ? i27 : 0;
   12464  i34 = i20 + (i17 << 3) + 20 | 0;
   12465  d26 = +HEAPF32[i34 >> 2];
   12466  d25 = +HEAPF32[i34 + 4 >> 2];
   12467  i34 = i20 + (i24 << 3) + 20 | 0;
   12468  d30 = +HEAPF32[i34 >> 2];
   12469  d29 = +HEAPF32[i34 + 4 >> 2];
   12470  d32 = d30 - d26;
   12471  d35 = d29 - d25;
   12472  d21 = +Math_sqrt(+(d32 * d32 + d35 * d35));
   12473  if (!(d21 < 1.1920928955078125e-7)) {
   12474   d36 = 1.0 / d21;
   12475   d32 = d32 * d36;
   12476   d35 = d35 * d36;
   12477  }
   12478  d36 = d16 * d32 - d15 * d35;
   12479  d21 = d16 * d35 + d15 * d32;
   12480  HEAPF32[i11 >> 2] = d36;
   12481  HEAPF32[i11 + 4 >> 2] = d21;
   12482  d22 = -d36;
   12483  d38 = d18 + (d16 * d26 - d15 * d25);
   12484  d37 = d19 + (d15 * d26 + d16 * d25);
   12485  d23 = d38 * d21 + d37 * d22;
   12486  HEAPF32[i10 >> 2] = d22;
   12487  HEAPF32[i10 + 4 >> 2] = -d21;
   12488  if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i12, i13, i10, d3 - (d38 * d36 + d37 * d21), i17) | 0) < 2) {
   12489   STACKTOP = i1;
   12490   return;
   12491  }
   12492  if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i4, i12, i11, d3 + ((d18 + (d16 * d30 - d15 * d29)) * d36 + (d19 + (d15 * d30 + d16 * d29)) * d21), i24) | 0) < 2) {
   12493   STACKTOP = i1;
   12494   return;
   12495  }
   12496  d16 = +d35;
   12497  d15 = +-d32;
   12498  i10 = i5 + 40 | 0;
   12499  HEAPF32[i10 >> 2] = d16;
   12500  HEAPF32[i10 + 4 >> 2] = d15;
   12501  d15 = +((d26 + d30) * .5);
   12502  d16 = +((d25 + d29) * .5);
   12503  i10 = i5 + 48 | 0;
   12504  HEAPF32[i10 >> 2] = d15;
   12505  HEAPF32[i10 + 4 >> 2] = d16;
   12506  d16 = +HEAPF32[i4 >> 2];
   12507  d15 = +HEAPF32[i4 + 4 >> 2];
   12508  i10 = !(d21 * d16 + d15 * d22 - d23 <= d3);
   12509  if (i14 << 24 >> 24 == 0) {
   12510   if (i10) {
   12511    i10 = 0;
   12512   } else {
   12513    d38 = d16 - d9;
   12514    d36 = d15 - d6;
   12515    d37 = +(d8 * d38 + d7 * d36);
   12516    d38 = +(d8 * d36 - d7 * d38);
   12517    i10 = i5;
   12518    HEAPF32[i10 >> 2] = d37;
   12519    HEAPF32[i10 + 4 >> 2] = d38;
   12520    HEAP32[i5 + 16 >> 2] = HEAP32[i4 + 8 >> 2];
   12521    i10 = 1;
   12522   }
   12523   d16 = +HEAPF32[i4 + 12 >> 2];
   12524   d15 = +HEAPF32[i4 + 16 >> 2];
   12525   if (d21 * d16 + d15 * d22 - d23 <= d3) {
   12526    d38 = d16 - d9;
   12527    d36 = d15 - d6;
   12528    d37 = +(d8 * d38 + d7 * d36);
   12529    d38 = +(d8 * d36 - d7 * d38);
   12530    i34 = i5 + (i10 * 20 | 0) | 0;
   12531    HEAPF32[i34 >> 2] = d37;
   12532    HEAPF32[i34 + 4 >> 2] = d38;
   12533    HEAP32[i5 + (i10 * 20 | 0) + 16 >> 2] = HEAP32[i4 + 20 >> 2];
   12534    i10 = i10 + 1 | 0;
   12535   }
   12536  } else {
   12537   if (i10) {
   12538    i10 = 0;
   12539   } else {
   12540    d38 = d16 - d9;
   12541    d36 = d15 - d6;
   12542    d37 = +(d8 * d38 + d7 * d36);
   12543    d38 = +(d8 * d36 - d7 * d38);
   12544    i10 = i5;
   12545    HEAPF32[i10 >> 2] = d37;
   12546    HEAPF32[i10 + 4 >> 2] = d38;
   12547    i10 = i5 + 16 | 0;
   12548    i34 = HEAP32[i4 + 8 >> 2] | 0;
   12549    HEAP32[i10 >> 2] = i34;
   12550    HEAP8[i10] = i34 >>> 8;
   12551    HEAP8[i10 + 1 | 0] = i34;
   12552    HEAP8[i10 + 2 | 0] = i34 >>> 24;
   12553    HEAP8[i10 + 3 | 0] = i34 >>> 16;
   12554    i10 = 1;
   12555   }
   12556   d16 = +HEAPF32[i4 + 12 >> 2];
   12557   d15 = +HEAPF32[i4 + 16 >> 2];
   12558   if (d21 * d16 + d15 * d22 - d23 <= d3) {
   12559    d38 = d16 - d9;
   12560    d36 = d15 - d6;
   12561    d37 = +(d8 * d38 + d7 * d36);
   12562    d38 = +(d8 * d36 - d7 * d38);
   12563    i34 = i5 + (i10 * 20 | 0) | 0;
   12564    HEAPF32[i34 >> 2] = d37;
   12565    HEAPF32[i34 + 4 >> 2] = d38;
   12566    i34 = i5 + (i10 * 20 | 0) + 16 | 0;
   12567    i33 = HEAP32[i4 + 20 >> 2] | 0;
   12568    HEAP32[i34 >> 2] = i33;
   12569    HEAP8[i34] = i33 >>> 8;
   12570    HEAP8[i34 + 1 | 0] = i33;
   12571    HEAP8[i34 + 2 | 0] = i33 >>> 24;
   12572    HEAP8[i34 + 3 | 0] = i33 >>> 16;
   12573    i10 = i10 + 1 | 0;
   12574   }
   12575  }
   12576  HEAP32[i2 >> 2] = i10;
   12577  STACKTOP = i1;
   12578  return;
   12579 }
   12580 function __ZN8b2Island8SolveTOIERK10b2TimeStepii(i4, i11, i15, i18) {
   12581  i4 = i4 | 0;
   12582  i11 = i11 | 0;
   12583  i15 = i15 | 0;
   12584  i18 = i18 | 0;
   12585  var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d16 = 0.0, d17 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, d26 = 0.0;
   12586  i1 = STACKTOP;
   12587  STACKTOP = STACKTOP + 128 | 0;
   12588  i2 = i1 + 96 | 0;
   12589  i10 = i1 + 52 | 0;
   12590  i3 = i1;
   12591  i6 = i4 + 28 | 0;
   12592  i5 = HEAP32[i6 >> 2] | 0;
   12593  if ((i5 | 0) <= (i15 | 0)) {
   12594   ___assert_fail(5464, 5488, 386, 5520);
   12595  }
   12596  if ((i5 | 0) <= (i18 | 0)) {
   12597   ___assert_fail(5536, 5488, 387, 5520);
   12598  }
   12599  if ((i5 | 0) > 0) {
   12600   i9 = i4 + 8 | 0;
   12601   i8 = i4 + 20 | 0;
   12602   i7 = i4 + 24 | 0;
   12603   i22 = 0;
   12604   while (1) {
   12605    i23 = HEAP32[(HEAP32[i9 >> 2] | 0) + (i22 << 2) >> 2] | 0;
   12606    i5 = i23 + 44 | 0;
   12607    i24 = HEAP32[i5 + 4 >> 2] | 0;
   12608    i25 = (HEAP32[i8 >> 2] | 0) + (i22 * 12 | 0) | 0;
   12609    HEAP32[i25 >> 2] = HEAP32[i5 >> 2];
   12610    HEAP32[i25 + 4 >> 2] = i24;
   12611    HEAPF32[(HEAP32[i8 >> 2] | 0) + (i22 * 12 | 0) + 8 >> 2] = +HEAPF32[i23 + 56 >> 2];
   12612    i25 = i23 + 64 | 0;
   12613    i24 = HEAP32[i25 + 4 >> 2] | 0;
   12614    i5 = (HEAP32[i7 >> 2] | 0) + (i22 * 12 | 0) | 0;
   12615    HEAP32[i5 >> 2] = HEAP32[i25 >> 2];
   12616    HEAP32[i5 + 4 >> 2] = i24;
   12617    i5 = HEAP32[i7 >> 2] | 0;
   12618    HEAPF32[i5 + (i22 * 12 | 0) + 8 >> 2] = +HEAPF32[i23 + 72 >> 2];
   12619    i22 = i22 + 1 | 0;
   12620    if ((i22 | 0) >= (HEAP32[i6 >> 2] | 0)) {
   12621     i22 = i5;
   12622     break;
   12623    }
   12624   }
   12625  } else {
   12626   i8 = i4 + 20 | 0;
   12627   i22 = HEAP32[i4 + 24 >> 2] | 0;
   12628  }
   12629  i5 = i4 + 12 | 0;
   12630  HEAP32[i10 + 24 >> 2] = HEAP32[i5 >> 2];
   12631  i7 = i4 + 36 | 0;
   12632  HEAP32[i10 + 28 >> 2] = HEAP32[i7 >> 2];
   12633  HEAP32[i10 + 40 >> 2] = HEAP32[i4 >> 2];
   12634  HEAP32[i10 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
   12635  HEAP32[i10 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
   12636  HEAP32[i10 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
   12637  HEAP32[i10 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
   12638  HEAP32[i10 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
   12639  HEAP32[i10 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
   12640  HEAP32[i10 + 32 >> 2] = HEAP32[i8 >> 2];
   12641  i9 = i4 + 24 | 0;
   12642  HEAP32[i10 + 36 >> 2] = i22;
   12643  __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i3, i10);
   12644  i10 = i11 + 16 | 0;
   12645  L13 : do {
   12646   if ((HEAP32[i10 >> 2] | 0) > 0) {
   12647    i22 = 0;
   12648    do {
   12649     i22 = i22 + 1 | 0;
   12650     if (__ZN15b2ContactSolver27SolveTOIPositionConstraintsEii(i3, i15, i18) | 0) {
   12651      break L13;
   12652     }
   12653    } while ((i22 | 0) < (HEAP32[i10 >> 2] | 0));
   12654   }
   12655  } while (0);
   12656  i10 = i4 + 8 | 0;
   12657  i24 = (HEAP32[i8 >> 2] | 0) + (i15 * 12 | 0) | 0;
   12658  i25 = HEAP32[i24 + 4 >> 2] | 0;
   12659  i23 = (HEAP32[(HEAP32[i10 >> 2] | 0) + (i15 << 2) >> 2] | 0) + 36 | 0;
   12660  HEAP32[i23 >> 2] = HEAP32[i24 >> 2];
   12661  HEAP32[i23 + 4 >> 2] = i25;
   12662  i23 = HEAP32[i8 >> 2] | 0;
   12663  i25 = HEAP32[i10 >> 2] | 0;
   12664  HEAPF32[(HEAP32[i25 + (i15 << 2) >> 2] | 0) + 52 >> 2] = +HEAPF32[i23 + (i15 * 12 | 0) + 8 >> 2];
   12665  i23 = i23 + (i18 * 12 | 0) | 0;
   12666  i24 = HEAP32[i23 + 4 >> 2] | 0;
   12667  i25 = (HEAP32[i25 + (i18 << 2) >> 2] | 0) + 36 | 0;
   12668  HEAP32[i25 >> 2] = HEAP32[i23 >> 2];
   12669  HEAP32[i25 + 4 >> 2] = i24;
   12670  HEAPF32[(HEAP32[(HEAP32[i10 >> 2] | 0) + (i18 << 2) >> 2] | 0) + 52 >> 2] = +HEAPF32[(HEAP32[i8 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2];
   12671  __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i3);
   12672  i18 = i11 + 12 | 0;
   12673  if ((HEAP32[i18 >> 2] | 0) > 0) {
   12674   i15 = 0;
   12675   do {
   12676    __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i3);
   12677    i15 = i15 + 1 | 0;
   12678   } while ((i15 | 0) < (HEAP32[i18 >> 2] | 0));
   12679  }
   12680  d16 = +HEAPF32[i11 >> 2];
   12681  if ((HEAP32[i6 >> 2] | 0) > 0) {
   12682   i15 = 0;
   12683   do {
   12684    i25 = HEAP32[i8 >> 2] | 0;
   12685    i11 = i25 + (i15 * 12 | 0) | 0;
   12686    i24 = i11;
   12687    d12 = +HEAPF32[i24 >> 2];
   12688    d14 = +HEAPF32[i24 + 4 >> 2];
   12689    d13 = +HEAPF32[i25 + (i15 * 12 | 0) + 8 >> 2];
   12690    i25 = HEAP32[i9 >> 2] | 0;
   12691    i24 = i25 + (i15 * 12 | 0) | 0;
   12692    d19 = +HEAPF32[i24 >> 2];
   12693    d20 = +HEAPF32[i24 + 4 >> 2];
   12694    d17 = +HEAPF32[i25 + (i15 * 12 | 0) + 8 >> 2];
   12695    d26 = d16 * d19;
   12696    d21 = d16 * d20;
   12697    d21 = d26 * d26 + d21 * d21;
   12698    if (d21 > 4.0) {
   12699     d26 = 2.0 / +Math_sqrt(+d21);
   12700     d19 = d19 * d26;
   12701     d20 = d20 * d26;
   12702    }
   12703    d21 = d16 * d17;
   12704    if (d21 * d21 > 2.4674012660980225) {
   12705     if (!(d21 > 0.0)) {
   12706      d21 = -d21;
   12707     }
   12708     d17 = d17 * (1.5707963705062866 / d21);
   12709    }
   12710    d21 = d12 + d16 * d19;
   12711    d14 = d14 + d16 * d20;
   12712    d26 = d13 + d16 * d17;
   12713    d12 = +d21;
   12714    d13 = +d14;
   12715    i25 = i11;
   12716    HEAPF32[i25 >> 2] = d12;
   12717    HEAPF32[i25 + 4 >> 2] = d13;
   12718    HEAPF32[(HEAP32[i8 >> 2] | 0) + (i15 * 12 | 0) + 8 >> 2] = d26;
   12719    d19 = +d19;
   12720    d20 = +d20;
   12721    i25 = (HEAP32[i9 >> 2] | 0) + (i15 * 12 | 0) | 0;
   12722    HEAPF32[i25 >> 2] = d19;
   12723    HEAPF32[i25 + 4 >> 2] = d20;
   12724    HEAPF32[(HEAP32[i9 >> 2] | 0) + (i15 * 12 | 0) + 8 >> 2] = d17;
   12725    i25 = HEAP32[(HEAP32[i10 >> 2] | 0) + (i15 << 2) >> 2] | 0;
   12726    i24 = i25 + 44 | 0;
   12727    HEAPF32[i24 >> 2] = d12;
   12728    HEAPF32[i24 + 4 >> 2] = d13;
   12729    HEAPF32[i25 + 56 >> 2] = d26;
   12730    i24 = i25 + 64 | 0;
   12731    HEAPF32[i24 >> 2] = d19;
   12732    HEAPF32[i24 + 4 >> 2] = d20;
   12733    HEAPF32[i25 + 72 >> 2] = d17;
   12734    d17 = +Math_sin(+d26);
   12735    HEAPF32[i25 + 20 >> 2] = d17;
   12736    d20 = +Math_cos(+d26);
   12737    HEAPF32[i25 + 24 >> 2] = d20;
   12738    d19 = +HEAPF32[i25 + 28 >> 2];
   12739    d26 = +HEAPF32[i25 + 32 >> 2];
   12740    d21 = +(d21 - (d20 * d19 - d17 * d26));
   12741    d26 = +(d14 - (d17 * d19 + d20 * d26));
   12742    i25 = i25 + 12 | 0;
   12743    HEAPF32[i25 >> 2] = d21;
   12744    HEAPF32[i25 + 4 >> 2] = d26;
   12745    i15 = i15 + 1 | 0;
   12746   } while ((i15 | 0) < (HEAP32[i6 >> 2] | 0));
   12747  }
   12748  i6 = HEAP32[i3 + 40 >> 2] | 0;
   12749  i4 = i4 + 4 | 0;
   12750  if ((HEAP32[i4 >> 2] | 0) == 0) {
   12751   __ZN15b2ContactSolverD2Ev(i3);
   12752   STACKTOP = i1;
   12753   return;
   12754  }
   12755  if ((HEAP32[i7 >> 2] | 0) <= 0) {
   12756   __ZN15b2ContactSolverD2Ev(i3);
   12757   STACKTOP = i1;
   12758   return;
   12759  }
   12760  i8 = i2 + 16 | 0;
   12761  i9 = 0;
   12762  do {
   12763   i10 = HEAP32[(HEAP32[i5 >> 2] | 0) + (i9 << 2) >> 2] | 0;
   12764   i11 = HEAP32[i6 + (i9 * 152 | 0) + 144 >> 2] | 0;
   12765   HEAP32[i8 >> 2] = i11;
   12766   if ((i11 | 0) > 0) {
   12767    i15 = 0;
   12768    do {
   12769     HEAPF32[i2 + (i15 << 2) >> 2] = +HEAPF32[i6 + (i9 * 152 | 0) + (i15 * 36 | 0) + 16 >> 2];
   12770     HEAPF32[i2 + (i15 << 2) + 8 >> 2] = +HEAPF32[i6 + (i9 * 152 | 0) + (i15 * 36 | 0) + 20 >> 2];
   12771     i15 = i15 + 1 | 0;
   12772    } while ((i15 | 0) != (i11 | 0));
   12773   }
   12774   i25 = HEAP32[i4 >> 2] | 0;
   12775   FUNCTION_TABLE_viii[HEAP32[(HEAP32[i25 >> 2] | 0) + 20 >> 2] & 3](i25, i10, i2);
   12776   i9 = i9 + 1 | 0;
   12777  } while ((i9 | 0) < (HEAP32[i7 >> 2] | 0));
   12778  __ZN15b2ContactSolverD2Ev(i3);
   12779  STACKTOP = i1;
   12780  return;
   12781 }
   12782 function __ZN20b2SeparationFunction10InitializeEPK14b2SimplexCachePK15b2DistanceProxyRK7b2SweepS5_S8_f(i2, i11, i13, i21, i12, i24, d9) {
   12783  i2 = i2 | 0;
   12784  i11 = i11 | 0;
   12785  i13 = i13 | 0;
   12786  i21 = i21 | 0;
   12787  i12 = i12 | 0;
   12788  i24 = i24 | 0;
   12789  d9 = +d9;
   12790  var i1 = 0, d3 = 0.0, d4 = 0.0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d10 = 0.0, i14 = 0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d22 = 0.0, i23 = 0, i25 = 0, i26 = 0, i27 = 0, d28 = 0.0, d29 = 0.0;
   12791  i1 = STACKTOP;
   12792  HEAP32[i2 >> 2] = i13;
   12793  HEAP32[i2 + 4 >> 2] = i12;
   12794  i14 = HEAP16[i11 + 4 >> 1] | 0;
   12795  if (!(i14 << 16 >> 16 != 0 & (i14 & 65535) < 3)) {
   12796   ___assert_fail(3744, 3560, 50, 3768);
   12797  }
   12798  i23 = i2 + 8 | 0;
   12799  i25 = i23 + 0 | 0;
   12800  i27 = i21 + 0 | 0;
   12801  i26 = i25 + 36 | 0;
   12802  do {
   12803   HEAP32[i25 >> 2] = HEAP32[i27 >> 2];
   12804   i25 = i25 + 4 | 0;
   12805   i27 = i27 + 4 | 0;
   12806  } while ((i25 | 0) < (i26 | 0));
   12807  i21 = i2 + 44 | 0;
   12808  i25 = i21 + 0 | 0;
   12809  i27 = i24 + 0 | 0;
   12810  i26 = i25 + 36 | 0;
   12811  do {
   12812   HEAP32[i25 >> 2] = HEAP32[i27 >> 2];
   12813   i25 = i25 + 4 | 0;
   12814   i27 = i27 + 4 | 0;
   12815  } while ((i25 | 0) < (i26 | 0));
   12816  d19 = 1.0 - d9;
   12817  d4 = d19 * +HEAPF32[i2 + 32 >> 2] + +HEAPF32[i2 + 36 >> 2] * d9;
   12818  d3 = +Math_sin(+d4);
   12819  d4 = +Math_cos(+d4);
   12820  d7 = +HEAPF32[i23 >> 2];
   12821  d5 = +HEAPF32[i2 + 12 >> 2];
   12822  d8 = d19 * +HEAPF32[i2 + 16 >> 2] + +HEAPF32[i2 + 24 >> 2] * d9 - (d4 * d7 - d3 * d5);
   12823  d5 = d19 * +HEAPF32[i2 + 20 >> 2] + +HEAPF32[i2 + 28 >> 2] * d9 - (d3 * d7 + d4 * d5);
   12824  d7 = d19 * +HEAPF32[i2 + 68 >> 2] + +HEAPF32[i2 + 72 >> 2] * d9;
   12825  d6 = +Math_sin(+d7);
   12826  d7 = +Math_cos(+d7);
   12827  d20 = +HEAPF32[i21 >> 2];
   12828  d22 = +HEAPF32[i2 + 48 >> 2];
   12829  d10 = d19 * +HEAPF32[i2 + 52 >> 2] + +HEAPF32[i2 + 60 >> 2] * d9 - (d7 * d20 - d6 * d22);
   12830  d9 = d19 * +HEAPF32[i2 + 56 >> 2] + +HEAPF32[i2 + 64 >> 2] * d9 - (d6 * d20 + d7 * d22);
   12831  if (i14 << 16 >> 16 == 1) {
   12832   HEAP32[i2 + 80 >> 2] = 0;
   12833   i14 = HEAPU8[i11 + 6 | 0] | 0;
   12834   if ((HEAP32[i13 + 20 >> 2] | 0) <= (i14 | 0)) {
   12835    ___assert_fail(3640, 3672, 103, 3704);
   12836   }
   12837   i27 = (HEAP32[i13 + 16 >> 2] | 0) + (i14 << 3) | 0;
   12838   d15 = +HEAPF32[i27 >> 2];
   12839   d16 = +HEAPF32[i27 + 4 >> 2];
   12840   i11 = HEAPU8[i11 + 9 | 0] | 0;
   12841   if ((HEAP32[i12 + 20 >> 2] | 0) <= (i11 | 0)) {
   12842    ___assert_fail(3640, 3672, 103, 3704);
   12843   }
   12844   i11 = (HEAP32[i12 + 16 >> 2] | 0) + (i11 << 3) | 0;
   12845   d20 = +HEAPF32[i11 >> 2];
   12846   d22 = +HEAPF32[i11 + 4 >> 2];
   12847   i11 = i2 + 92 | 0;
   12848   d8 = d10 + (d7 * d20 - d6 * d22) - (d8 + (d4 * d15 - d3 * d16));
   12849   d4 = d9 + (d6 * d20 + d7 * d22) - (d5 + (d3 * d15 + d4 * d16));
   12850   d22 = +d8;
   12851   d3 = +d4;
   12852   i27 = i11;
   12853   HEAPF32[i27 >> 2] = d22;
   12854   HEAPF32[i27 + 4 >> 2] = d3;
   12855   d3 = +Math_sqrt(+(d8 * d8 + d4 * d4));
   12856   if (d3 < 1.1920928955078125e-7) {
   12857    d22 = 0.0;
   12858    STACKTOP = i1;
   12859    return +d22;
   12860   }
   12861   d22 = 1.0 / d3;
   12862   HEAPF32[i11 >> 2] = d8 * d22;
   12863   HEAPF32[i2 + 96 >> 2] = d4 * d22;
   12864   d22 = d3;
   12865   STACKTOP = i1;
   12866   return +d22;
   12867  }
   12868  i14 = i11 + 6 | 0;
   12869  i21 = i11 + 7 | 0;
   12870  i23 = i2 + 80 | 0;
   12871  if ((HEAP8[i14] | 0) == (HEAP8[i21] | 0)) {
   12872   HEAP32[i23 >> 2] = 2;
   12873   i23 = HEAPU8[i11 + 9 | 0] | 0;
   12874   i21 = HEAP32[i12 + 20 >> 2] | 0;
   12875   if ((i21 | 0) <= (i23 | 0)) {
   12876    ___assert_fail(3640, 3672, 103, 3704);
   12877   }
   12878   i12 = HEAP32[i12 + 16 >> 2] | 0;
   12879   i27 = i12 + (i23 << 3) | 0;
   12880   d16 = +HEAPF32[i27 >> 2];
   12881   d15 = +HEAPF32[i27 + 4 >> 2];
   12882   i11 = HEAPU8[i11 + 10 | 0] | 0;
   12883   if ((i21 | 0) <= (i11 | 0)) {
   12884    ___assert_fail(3640, 3672, 103, 3704);
   12885   }
   12886   i11 = i12 + (i11 << 3) | 0;
   12887   d20 = +HEAPF32[i11 >> 2];
   12888   d18 = +HEAPF32[i11 + 4 >> 2];
   12889   i11 = i2 + 92 | 0;
   12890   d22 = d20 - d16;
   12891   d19 = d18 - d15;
   12892   d17 = -d22;
   12893   d29 = +d19;
   12894   d28 = +d17;
   12895   i27 = i11;
   12896   HEAPF32[i27 >> 2] = d29;
   12897   HEAPF32[i27 + 4 >> 2] = d28;
   12898   d22 = +Math_sqrt(+(d19 * d19 + d22 * d22));
   12899   if (!(d22 < 1.1920928955078125e-7)) {
   12900    d29 = 1.0 / d22;
   12901    d19 = d19 * d29;
   12902    HEAPF32[i11 >> 2] = d19;
   12903    d17 = d29 * d17;
   12904    HEAPF32[i2 + 96 >> 2] = d17;
   12905   }
   12906   d16 = (d16 + d20) * .5;
   12907   d15 = (d15 + d18) * .5;
   12908   d28 = +d16;
   12909   d29 = +d15;
   12910   i2 = i2 + 84 | 0;
   12911   HEAPF32[i2 >> 2] = d28;
   12912   HEAPF32[i2 + 4 >> 2] = d29;
   12913   i2 = HEAPU8[i14] | 0;
   12914   if ((HEAP32[i13 + 20 >> 2] | 0) <= (i2 | 0)) {
   12915    ___assert_fail(3640, 3672, 103, 3704);
   12916   }
   12917   i27 = (HEAP32[i13 + 16 >> 2] | 0) + (i2 << 3) | 0;
   12918   d28 = +HEAPF32[i27 >> 2];
   12919   d29 = +HEAPF32[i27 + 4 >> 2];
   12920   d3 = (d7 * d19 - d6 * d17) * (d8 + (d4 * d28 - d3 * d29) - (d10 + (d7 * d16 - d6 * d15))) + (d6 * d19 + d7 * d17) * (d5 + (d3 * d28 + d4 * d29) - (d9 + (d6 * d16 + d7 * d15)));
   12921   if (!(d3 < 0.0)) {
   12922    d29 = d3;
   12923    STACKTOP = i1;
   12924    return +d29;
   12925   }
   12926   d28 = +-d19;
   12927   d29 = +-d17;
   12928   i27 = i11;
   12929   HEAPF32[i27 >> 2] = d28;
   12930   HEAPF32[i27 + 4 >> 2] = d29;
   12931   d29 = -d3;
   12932   STACKTOP = i1;
   12933   return +d29;
   12934  } else {
   12935   HEAP32[i23 >> 2] = 1;
   12936   i23 = HEAPU8[i14] | 0;
   12937   i14 = HEAP32[i13 + 20 >> 2] | 0;
   12938   if ((i14 | 0) <= (i23 | 0)) {
   12939    ___assert_fail(3640, 3672, 103, 3704);
   12940   }
   12941   i13 = HEAP32[i13 + 16 >> 2] | 0;
   12942   i27 = i13 + (i23 << 3) | 0;
   12943   d16 = +HEAPF32[i27 >> 2];
   12944   d15 = +HEAPF32[i27 + 4 >> 2];
   12945   i21 = HEAPU8[i21] | 0;
   12946   if ((i14 | 0) <= (i21 | 0)) {
   12947    ___assert_fail(3640, 3672, 103, 3704);
   12948   }
   12949   i13 = i13 + (i21 << 3) | 0;
   12950   d20 = +HEAPF32[i13 >> 2];
   12951   d18 = +HEAPF32[i13 + 4 >> 2];
   12952   i13 = i2 + 92 | 0;
   12953   d22 = d20 - d16;
   12954   d19 = d18 - d15;
   12955   d17 = -d22;
   12956   d28 = +d19;
   12957   d29 = +d17;
   12958   i27 = i13;
   12959   HEAPF32[i27 >> 2] = d28;
   12960   HEAPF32[i27 + 4 >> 2] = d29;
   12961   d22 = +Math_sqrt(+(d19 * d19 + d22 * d22));
   12962   if (!(d22 < 1.1920928955078125e-7)) {
   12963    d29 = 1.0 / d22;
   12964    d19 = d19 * d29;
   12965    HEAPF32[i13 >> 2] = d19;
   12966    d17 = d29 * d17;
   12967    HEAPF32[i2 + 96 >> 2] = d17;
   12968   }
   12969   d16 = (d16 + d20) * .5;
   12970   d15 = (d15 + d18) * .5;
   12971   d28 = +d16;
   12972   d29 = +d15;
   12973   i2 = i2 + 84 | 0;
   12974   HEAPF32[i2 >> 2] = d28;
   12975   HEAPF32[i2 + 4 >> 2] = d29;
   12976   i2 = HEAPU8[i11 + 9 | 0] | 0;
   12977   if ((HEAP32[i12 + 20 >> 2] | 0) <= (i2 | 0)) {
   12978    ___assert_fail(3640, 3672, 103, 3704);
   12979   }
   12980   i27 = (HEAP32[i12 + 16 >> 2] | 0) + (i2 << 3) | 0;
   12981   d28 = +HEAPF32[i27 >> 2];
   12982   d29 = +HEAPF32[i27 + 4 >> 2];
   12983   d3 = (d4 * d19 - d3 * d17) * (d10 + (d7 * d28 - d6 * d29) - (d8 + (d4 * d16 - d3 * d15))) + (d3 * d19 + d4 * d17) * (d9 + (d6 * d28 + d7 * d29) - (d5 + (d3 * d16 + d4 * d15)));
   12984   if (!(d3 < 0.0)) {
   12985    d29 = d3;
   12986    STACKTOP = i1;
   12987    return +d29;
   12988   }
   12989   d28 = +-d19;
   12990   d29 = +-d17;
   12991   i27 = i13;
   12992   HEAPF32[i27 >> 2] = d28;
   12993   HEAPF32[i27 + 4 >> 2] = d29;
   12994   d29 = -d3;
   12995   STACKTOP = i1;
   12996   return +d29;
   12997  }
   12998  return 0.0;
   12999 }
   13000 function __ZNK20b2SeparationFunction17FindMinSeparationEPiS0_f(i12, i10, i9, d5) {
   13001  i12 = i12 | 0;
   13002  i10 = i10 | 0;
   13003  i9 = i9 | 0;
   13004  d5 = +d5;
   13005  var i1 = 0, d2 = 0.0, d3 = 0.0, d4 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d11 = 0.0, d13 = 0.0, d14 = 0.0, i15 = 0, i16 = 0, d17 = 0.0, d18 = 0.0, i19 = 0, d20 = 0.0, d21 = 0.0, i22 = 0, d23 = 0.0, d24 = 0.0, i25 = 0, i26 = 0, i27 = 0;
   13006  i1 = STACKTOP;
   13007  d21 = 1.0 - d5;
   13008  d6 = d21 * +HEAPF32[i12 + 32 >> 2] + +HEAPF32[i12 + 36 >> 2] * d5;
   13009  d7 = +Math_sin(+d6);
   13010  d6 = +Math_cos(+d6);
   13011  d3 = +HEAPF32[i12 + 8 >> 2];
   13012  d8 = +HEAPF32[i12 + 12 >> 2];
   13013  d11 = d21 * +HEAPF32[i12 + 16 >> 2] + +HEAPF32[i12 + 24 >> 2] * d5 - (d6 * d3 - d7 * d8);
   13014  d8 = d21 * +HEAPF32[i12 + 20 >> 2] + +HEAPF32[i12 + 28 >> 2] * d5 - (d7 * d3 + d6 * d8);
   13015  d3 = d21 * +HEAPF32[i12 + 68 >> 2] + +HEAPF32[i12 + 72 >> 2] * d5;
   13016  d2 = +Math_sin(+d3);
   13017  d3 = +Math_cos(+d3);
   13018  d23 = +HEAPF32[i12 + 44 >> 2];
   13019  d24 = +HEAPF32[i12 + 48 >> 2];
   13020  d4 = d21 * +HEAPF32[i12 + 52 >> 2] + +HEAPF32[i12 + 60 >> 2] * d5 - (d3 * d23 - d2 * d24);
   13021  d5 = d21 * +HEAPF32[i12 + 56 >> 2] + +HEAPF32[i12 + 64 >> 2] * d5 - (d2 * d23 + d3 * d24);
   13022  i19 = HEAP32[i12 + 80 >> 2] | 0;
   13023  if ((i19 | 0) == 1) {
   13024   d23 = +HEAPF32[i12 + 92 >> 2];
   13025   d14 = +HEAPF32[i12 + 96 >> 2];
   13026   d13 = d6 * d23 - d7 * d14;
   13027   d14 = d7 * d23 + d6 * d14;
   13028   d23 = +HEAPF32[i12 + 84 >> 2];
   13029   d24 = +HEAPF32[i12 + 88 >> 2];
   13030   d11 = d11 + (d6 * d23 - d7 * d24);
   13031   d6 = d8 + (d7 * d23 + d6 * d24);
   13032   d7 = -d13;
   13033   d24 = -d14;
   13034   d8 = d3 * d7 + d2 * d24;
   13035   d7 = d3 * d24 - d2 * d7;
   13036   HEAP32[i10 >> 2] = -1;
   13037   i25 = i12 + 4 | 0;
   13038   i22 = HEAP32[i25 >> 2] | 0;
   13039   i19 = HEAP32[i22 + 16 >> 2] | 0;
   13040   i22 = HEAP32[i22 + 20 >> 2] | 0;
   13041   if ((i22 | 0) > 1) {
   13042    i10 = 0;
   13043    d18 = d7 * +HEAPF32[i19 + 4 >> 2] + d8 * +HEAPF32[i19 >> 2];
   13044    i12 = 1;
   13045    while (1) {
   13046     d17 = d8 * +HEAPF32[i19 + (i12 << 3) >> 2] + d7 * +HEAPF32[i19 + (i12 << 3) + 4 >> 2];
   13047     i16 = d17 > d18;
   13048     i10 = i16 ? i12 : i10;
   13049     i12 = i12 + 1 | 0;
   13050     if ((i12 | 0) == (i22 | 0)) {
   13051      break;
   13052     } else {
   13053      d18 = i16 ? d17 : d18;
   13054     }
   13055    }
   13056    HEAP32[i9 >> 2] = i10;
   13057    if ((i10 | 0) > -1) {
   13058     i15 = i10;
   13059    } else {
   13060     ___assert_fail(3640, 3672, 103, 3704);
   13061    }
   13062   } else {
   13063    HEAP32[i9 >> 2] = 0;
   13064    i15 = 0;
   13065   }
   13066   i9 = HEAP32[i25 >> 2] | 0;
   13067   if ((HEAP32[i9 + 20 >> 2] | 0) <= (i15 | 0)) {
   13068    ___assert_fail(3640, 3672, 103, 3704);
   13069   }
   13070   i27 = (HEAP32[i9 + 16 >> 2] | 0) + (i15 << 3) | 0;
   13071   d23 = +HEAPF32[i27 >> 2];
   13072   d24 = +HEAPF32[i27 + 4 >> 2];
   13073   d24 = d13 * (d4 + (d3 * d23 - d2 * d24) - d11) + d14 * (d5 + (d2 * d23 + d3 * d24) - d6);
   13074   STACKTOP = i1;
   13075   return +d24;
   13076  } else if ((i19 | 0) == 0) {
   13077   d13 = +HEAPF32[i12 + 92 >> 2];
   13078   d14 = +HEAPF32[i12 + 96 >> 2];
   13079   d21 = d6 * d13 + d7 * d14;
   13080   d24 = d6 * d14 - d7 * d13;
   13081   d17 = -d13;
   13082   d23 = -d14;
   13083   d18 = d3 * d17 + d2 * d23;
   13084   d17 = d3 * d23 - d2 * d17;
   13085   i15 = HEAP32[i12 >> 2] | 0;
   13086   i16 = HEAP32[i15 + 16 >> 2] | 0;
   13087   i15 = i15 + 20 | 0;
   13088   i19 = HEAP32[i15 >> 2] | 0;
   13089   if ((i19 | 0) > 1) {
   13090    i25 = 0;
   13091    d23 = d24 * +HEAPF32[i16 + 4 >> 2] + d21 * +HEAPF32[i16 >> 2];
   13092    i26 = 1;
   13093    while (1) {
   13094     d20 = d21 * +HEAPF32[i16 + (i26 << 3) >> 2] + d24 * +HEAPF32[i16 + (i26 << 3) + 4 >> 2];
   13095     i22 = d20 > d23;
   13096     i25 = i22 ? i26 : i25;
   13097     i26 = i26 + 1 | 0;
   13098     if ((i26 | 0) == (i19 | 0)) {
   13099      break;
   13100     } else {
   13101      d23 = i22 ? d20 : d23;
   13102     }
   13103    }
   13104   } else {
   13105    i25 = 0;
   13106   }
   13107   HEAP32[i10 >> 2] = i25;
   13108   i19 = HEAP32[i12 + 4 >> 2] | 0;
   13109   i12 = HEAP32[i19 + 16 >> 2] | 0;
   13110   i19 = i19 + 20 | 0;
   13111   i25 = HEAP32[i19 >> 2] | 0;
   13112   if ((i25 | 0) > 1) {
   13113    i27 = 0;
   13114    d20 = d17 * +HEAPF32[i12 + 4 >> 2] + d18 * +HEAPF32[i12 >> 2];
   13115    i26 = 1;
   13116    while (1) {
   13117     d21 = d18 * +HEAPF32[i12 + (i26 << 3) >> 2] + d17 * +HEAPF32[i12 + (i26 << 3) + 4 >> 2];
   13118     i22 = d21 > d20;
   13119     i27 = i22 ? i26 : i27;
   13120     i26 = i26 + 1 | 0;
   13121     if ((i26 | 0) == (i25 | 0)) {
   13122      break;
   13123     } else {
   13124      d20 = i22 ? d21 : d20;
   13125     }
   13126    }
   13127   } else {
   13128    i27 = 0;
   13129   }
   13130   HEAP32[i9 >> 2] = i27;
   13131   i9 = HEAP32[i10 >> 2] | 0;
   13132   if (!((i9 | 0) > -1)) {
   13133    ___assert_fail(3640, 3672, 103, 3704);
   13134   }
   13135   if ((HEAP32[i15 >> 2] | 0) <= (i9 | 0)) {
   13136    ___assert_fail(3640, 3672, 103, 3704);
   13137   }
   13138   i26 = i16 + (i9 << 3) | 0;
   13139   d18 = +HEAPF32[i26 >> 2];
   13140   d17 = +HEAPF32[i26 + 4 >> 2];
   13141   if (!((i27 | 0) > -1)) {
   13142    ___assert_fail(3640, 3672, 103, 3704);
   13143   }
   13144   if ((HEAP32[i19 >> 2] | 0) <= (i27 | 0)) {
   13145    ___assert_fail(3640, 3672, 103, 3704);
   13146   }
   13147   i27 = i12 + (i27 << 3) | 0;
   13148   d23 = +HEAPF32[i27 >> 2];
   13149   d24 = +HEAPF32[i27 + 4 >> 2];
   13150   d24 = d13 * (d4 + (d3 * d23 - d2 * d24) - (d11 + (d6 * d18 - d7 * d17))) + d14 * (d5 + (d2 * d23 + d3 * d24) - (d8 + (d7 * d18 + d6 * d17)));
   13151   STACKTOP = i1;
   13152   return +d24;
   13153  } else if ((i19 | 0) == 2) {
   13154   d23 = +HEAPF32[i12 + 92 >> 2];
   13155   d13 = +HEAPF32[i12 + 96 >> 2];
   13156   d14 = d3 * d23 - d2 * d13;
   13157   d13 = d2 * d23 + d3 * d13;
   13158   d23 = +HEAPF32[i12 + 84 >> 2];
   13159   d24 = +HEAPF32[i12 + 88 >> 2];
   13160   d4 = d4 + (d3 * d23 - d2 * d24);
   13161   d2 = d5 + (d2 * d23 + d3 * d24);
   13162   d3 = -d14;
   13163   d24 = -d13;
   13164   d5 = d6 * d3 + d7 * d24;
   13165   d3 = d6 * d24 - d7 * d3;
   13166   HEAP32[i9 >> 2] = -1;
   13167   i22 = HEAP32[i12 >> 2] | 0;
   13168   i15 = HEAP32[i22 + 16 >> 2] | 0;
   13169   i22 = HEAP32[i22 + 20 >> 2] | 0;
   13170   if ((i22 | 0) > 1) {
   13171    i9 = 0;
   13172    d17 = d3 * +HEAPF32[i15 + 4 >> 2] + d5 * +HEAPF32[i15 >> 2];
   13173    i19 = 1;
   13174    while (1) {
   13175     d18 = d5 * +HEAPF32[i15 + (i19 << 3) >> 2] + d3 * +HEAPF32[i15 + (i19 << 3) + 4 >> 2];
   13176     i25 = d18 > d17;
   13177     i9 = i25 ? i19 : i9;
   13178     i19 = i19 + 1 | 0;
   13179     if ((i19 | 0) == (i22 | 0)) {
   13180      break;
   13181     } else {
   13182      d17 = i25 ? d18 : d17;
   13183     }
   13184    }
   13185    HEAP32[i10 >> 2] = i9;
   13186    if ((i9 | 0) > -1) {
   13187     i16 = i9;
   13188    } else {
   13189     ___assert_fail(3640, 3672, 103, 3704);
   13190    }
   13191   } else {
   13192    HEAP32[i10 >> 2] = 0;
   13193    i16 = 0;
   13194   }
   13195   i9 = HEAP32[i12 >> 2] | 0;
   13196   if ((HEAP32[i9 + 20 >> 2] | 0) <= (i16 | 0)) {
   13197    ___assert_fail(3640, 3672, 103, 3704);
   13198   }
   13199   i27 = (HEAP32[i9 + 16 >> 2] | 0) + (i16 << 3) | 0;
   13200   d23 = +HEAPF32[i27 >> 2];
   13201   d24 = +HEAPF32[i27 + 4 >> 2];
   13202   d24 = d14 * (d11 + (d6 * d23 - d7 * d24) - d4) + d13 * (d8 + (d7 * d23 + d6 * d24) - d2);
   13203   STACKTOP = i1;
   13204   return +d24;
   13205  } else {
   13206   ___assert_fail(3616, 3560, 183, 3720);
   13207  }
   13208  return 0.0;
   13209 }
   13210 function __ZN13b2DynamicTree10InsertLeafEi(i3, i4) {
   13211  i3 = i3 | 0;
   13212  i4 = i4 | 0;
   13213  var i1 = 0, i2 = 0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, d22 = 0.0, d23 = 0.0, i24 = 0;
   13214  i1 = STACKTOP;
   13215  i11 = i3 + 24 | 0;
   13216  HEAP32[i11 >> 2] = (HEAP32[i11 >> 2] | 0) + 1;
   13217  i11 = HEAP32[i3 >> 2] | 0;
   13218  if ((i11 | 0) == -1) {
   13219   HEAP32[i3 >> 2] = i4;
   13220   HEAP32[(HEAP32[i3 + 4 >> 2] | 0) + (i4 * 36 | 0) + 20 >> 2] = -1;
   13221   STACKTOP = i1;
   13222   return;
   13223  }
   13224  i2 = i3 + 4 | 0;
   13225  i9 = HEAP32[i2 >> 2] | 0;
   13226  d8 = +HEAPF32[i9 + (i4 * 36 | 0) >> 2];
   13227  d7 = +HEAPF32[i9 + (i4 * 36 | 0) + 4 >> 2];
   13228  d6 = +HEAPF32[i9 + (i4 * 36 | 0) + 8 >> 2];
   13229  d5 = +HEAPF32[i9 + (i4 * 36 | 0) + 12 >> 2];
   13230  i10 = HEAP32[i9 + (i11 * 36 | 0) + 24 >> 2] | 0;
   13231  L5 : do {
   13232   if (!((i10 | 0) == -1)) {
   13233    do {
   13234     i12 = HEAP32[i9 + (i11 * 36 | 0) + 28 >> 2] | 0;
   13235     d14 = +HEAPF32[i9 + (i11 * 36 | 0) + 8 >> 2];
   13236     d15 = +HEAPF32[i9 + (i11 * 36 | 0) >> 2];
   13237     d17 = +HEAPF32[i9 + (i11 * 36 | 0) + 12 >> 2];
   13238     d16 = +HEAPF32[i9 + (i11 * 36 | 0) + 4 >> 2];
   13239     d21 = ((d14 > d6 ? d14 : d6) - (d15 < d8 ? d15 : d8) + ((d17 > d5 ? d17 : d5) - (d16 < d7 ? d16 : d7))) * 2.0;
   13240     d13 = d21 * 2.0;
   13241     d14 = (d21 - (d14 - d15 + (d17 - d16)) * 2.0) * 2.0;
   13242     d21 = +HEAPF32[i9 + (i10 * 36 | 0) >> 2];
   13243     d16 = d8 < d21 ? d8 : d21;
   13244     d17 = +HEAPF32[i9 + (i10 * 36 | 0) + 4 >> 2];
   13245     d18 = d7 < d17 ? d7 : d17;
   13246     d19 = +HEAPF32[i9 + (i10 * 36 | 0) + 8 >> 2];
   13247     d20 = d6 > d19 ? d6 : d19;
   13248     d15 = +HEAPF32[i9 + (i10 * 36 | 0) + 12 >> 2];
   13249     d22 = d5 > d15 ? d5 : d15;
   13250     if ((HEAP32[i9 + (i10 * 36 | 0) + 24 >> 2] | 0) == -1) {
   13251      d15 = (d20 - d16 + (d22 - d18)) * 2.0;
   13252     } else {
   13253      d15 = (d20 - d16 + (d22 - d18)) * 2.0 - (d19 - d21 + (d15 - d17)) * 2.0;
   13254     }
   13255     d15 = d14 + d15;
   13256     d17 = +HEAPF32[i9 + (i12 * 36 | 0) >> 2];
   13257     d18 = d8 < d17 ? d8 : d17;
   13258     d23 = +HEAPF32[i9 + (i12 * 36 | 0) + 4 >> 2];
   13259     d22 = d7 < d23 ? d7 : d23;
   13260     d21 = +HEAPF32[i9 + (i12 * 36 | 0) + 8 >> 2];
   13261     d20 = d6 > d21 ? d6 : d21;
   13262     d19 = +HEAPF32[i9 + (i12 * 36 | 0) + 12 >> 2];
   13263     d16 = d5 > d19 ? d5 : d19;
   13264     if ((HEAP32[i9 + (i12 * 36 | 0) + 24 >> 2] | 0) == -1) {
   13265      d16 = (d20 - d18 + (d16 - d22)) * 2.0;
   13266     } else {
   13267      d16 = (d20 - d18 + (d16 - d22)) * 2.0 - (d21 - d17 + (d19 - d23)) * 2.0;
   13268     }
   13269     d14 = d14 + d16;
   13270     if (d13 < d15 & d13 < d14) {
   13271      break L5;
   13272     }
   13273     i11 = d15 < d14 ? i10 : i12;
   13274     i10 = HEAP32[i9 + (i11 * 36 | 0) + 24 >> 2] | 0;
   13275    } while (!((i10 | 0) == -1));
   13276   }
   13277  } while (0);
   13278  i9 = HEAP32[i9 + (i11 * 36 | 0) + 20 >> 2] | 0;
   13279  i10 = __ZN13b2DynamicTree12AllocateNodeEv(i3) | 0;
   13280  i12 = HEAP32[i2 >> 2] | 0;
   13281  HEAP32[i12 + (i10 * 36 | 0) + 20 >> 2] = i9;
   13282  HEAP32[i12 + (i10 * 36 | 0) + 16 >> 2] = 0;
   13283  i12 = HEAP32[i2 >> 2] | 0;
   13284  d14 = +HEAPF32[i12 + (i11 * 36 | 0) >> 2];
   13285  d13 = +HEAPF32[i12 + (i11 * 36 | 0) + 4 >> 2];
   13286  d8 = +(d8 < d14 ? d8 : d14);
   13287  d7 = +(d7 < d13 ? d7 : d13);
   13288  i24 = i12 + (i10 * 36 | 0) | 0;
   13289  HEAPF32[i24 >> 2] = d8;
   13290  HEAPF32[i24 + 4 >> 2] = d7;
   13291  d8 = +HEAPF32[i12 + (i11 * 36 | 0) + 8 >> 2];
   13292  d7 = +HEAPF32[i12 + (i11 * 36 | 0) + 12 >> 2];
   13293  d6 = +(d6 > d8 ? d6 : d8);
   13294  d23 = +(d5 > d7 ? d5 : d7);
   13295  i12 = i12 + (i10 * 36 | 0) + 8 | 0;
   13296  HEAPF32[i12 >> 2] = d6;
   13297  HEAPF32[i12 + 4 >> 2] = d23;
   13298  i12 = HEAP32[i2 >> 2] | 0;
   13299  HEAP32[i12 + (i10 * 36 | 0) + 32 >> 2] = (HEAP32[i12 + (i11 * 36 | 0) + 32 >> 2] | 0) + 1;
   13300  if ((i9 | 0) == -1) {
   13301   HEAP32[i12 + (i10 * 36 | 0) + 24 >> 2] = i11;
   13302   HEAP32[i12 + (i10 * 36 | 0) + 28 >> 2] = i4;
   13303   HEAP32[i12 + (i11 * 36 | 0) + 20 >> 2] = i10;
   13304   i24 = i12 + (i4 * 36 | 0) + 20 | 0;
   13305   HEAP32[i24 >> 2] = i10;
   13306   HEAP32[i3 >> 2] = i10;
   13307   i10 = HEAP32[i24 >> 2] | 0;
   13308  } else {
   13309   i24 = i12 + (i9 * 36 | 0) + 24 | 0;
   13310   if ((HEAP32[i24 >> 2] | 0) == (i11 | 0)) {
   13311    HEAP32[i24 >> 2] = i10;
   13312   } else {
   13313    HEAP32[i12 + (i9 * 36 | 0) + 28 >> 2] = i10;
   13314   }
   13315   HEAP32[i12 + (i10 * 36 | 0) + 24 >> 2] = i11;
   13316   HEAP32[i12 + (i10 * 36 | 0) + 28 >> 2] = i4;
   13317   HEAP32[i12 + (i11 * 36 | 0) + 20 >> 2] = i10;
   13318   HEAP32[i12 + (i4 * 36 | 0) + 20 >> 2] = i10;
   13319  }
   13320  if ((i10 | 0) == -1) {
   13321   STACKTOP = i1;
   13322   return;
   13323  }
   13324  while (1) {
   13325   i9 = __ZN13b2DynamicTree7BalanceEi(i3, i10) | 0;
   13326   i4 = HEAP32[i2 >> 2] | 0;
   13327   i11 = HEAP32[i4 + (i9 * 36 | 0) + 24 >> 2] | 0;
   13328   i10 = HEAP32[i4 + (i9 * 36 | 0) + 28 >> 2] | 0;
   13329   if ((i11 | 0) == -1) {
   13330    i2 = 20;
   13331    break;
   13332   }
   13333   if ((i10 | 0) == -1) {
   13334    i2 = 22;
   13335    break;
   13336   }
   13337   i12 = HEAP32[i4 + (i11 * 36 | 0) + 32 >> 2] | 0;
   13338   i24 = HEAP32[i4 + (i10 * 36 | 0) + 32 >> 2] | 0;
   13339   HEAP32[i4 + (i9 * 36 | 0) + 32 >> 2] = ((i12 | 0) > (i24 | 0) ? i12 : i24) + 1;
   13340   d7 = +HEAPF32[i4 + (i11 * 36 | 0) >> 2];
   13341   d8 = +HEAPF32[i4 + (i10 * 36 | 0) >> 2];
   13342   d5 = +HEAPF32[i4 + (i11 * 36 | 0) + 4 >> 2];
   13343   d6 = +HEAPF32[i4 + (i10 * 36 | 0) + 4 >> 2];
   13344   d7 = +(d7 < d8 ? d7 : d8);
   13345   d5 = +(d5 < d6 ? d5 : d6);
   13346   i24 = i4 + (i9 * 36 | 0) | 0;
   13347   HEAPF32[i24 >> 2] = d7;
   13348   HEAPF32[i24 + 4 >> 2] = d5;
   13349   d5 = +HEAPF32[i4 + (i11 * 36 | 0) + 8 >> 2];
   13350   d6 = +HEAPF32[i4 + (i10 * 36 | 0) + 8 >> 2];
   13351   d7 = +HEAPF32[i4 + (i11 * 36 | 0) + 12 >> 2];
   13352   d8 = +HEAPF32[i4 + (i10 * 36 | 0) + 12 >> 2];
   13353   d5 = +(d5 > d6 ? d5 : d6);
   13354   d23 = +(d7 > d8 ? d7 : d8);
   13355   i10 = i4 + (i9 * 36 | 0) + 8 | 0;
   13356   HEAPF32[i10 >> 2] = d5;
   13357   HEAPF32[i10 + 4 >> 2] = d23;
   13358   i10 = HEAP32[(HEAP32[i2 >> 2] | 0) + (i9 * 36 | 0) + 20 >> 2] | 0;
   13359   if ((i10 | 0) == -1) {
   13360    i2 = 24;
   13361    break;
   13362   }
   13363  }
   13364  if ((i2 | 0) == 20) {
   13365   ___assert_fail(3168, 2944, 307, 3184);
   13366  } else if ((i2 | 0) == 22) {
   13367   ___assert_fail(3200, 2944, 308, 3184);
   13368  } else if ((i2 | 0) == 24) {
   13369   STACKTOP = i1;
   13370   return;
   13371  }
   13372 }
   13373 function __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i7, i5) {
   13374  i7 = i7 | 0;
   13375  i5 = i5 | 0;
   13376  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, d15 = 0.0, d16 = 0.0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0;
   13377  i1 = STACKTOP;
   13378  HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   13379  HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   13380  HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   13381  HEAP32[i7 + 12 >> 2] = HEAP32[i5 + 12 >> 2];
   13382  HEAP32[i7 + 16 >> 2] = HEAP32[i5 + 16 >> 2];
   13383  HEAP32[i7 + 20 >> 2] = HEAP32[i5 + 20 >> 2];
   13384  i14 = HEAP32[i5 + 40 >> 2] | 0;
   13385  i9 = i7 + 32 | 0;
   13386  HEAP32[i9 >> 2] = i14;
   13387  i2 = HEAP32[i5 + 28 >> 2] | 0;
   13388  i4 = i7 + 48 | 0;
   13389  HEAP32[i4 >> 2] = i2;
   13390  i3 = i7 + 36 | 0;
   13391  HEAP32[i3 >> 2] = __ZN16b2StackAllocator8AllocateEi(i14, i2 * 88 | 0) | 0;
   13392  i2 = i7 + 40 | 0;
   13393  HEAP32[i2 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i9 >> 2] | 0, (HEAP32[i4 >> 2] | 0) * 152 | 0) | 0;
   13394  HEAP32[i7 + 24 >> 2] = HEAP32[i5 + 32 >> 2];
   13395  HEAP32[i7 + 28 >> 2] = HEAP32[i5 + 36 >> 2];
   13396  i9 = HEAP32[i5 + 24 >> 2] | 0;
   13397  i5 = i7 + 44 | 0;
   13398  HEAP32[i5 >> 2] = i9;
   13399  if ((HEAP32[i4 >> 2] | 0) <= 0) {
   13400   STACKTOP = i1;
   13401   return;
   13402  }
   13403  i6 = i7 + 20 | 0;
   13404  i7 = i7 + 8 | 0;
   13405  i8 = 0;
   13406  while (1) {
   13407   i10 = HEAP32[i9 + (i8 << 2) >> 2] | 0;
   13408   i11 = HEAP32[i10 + 48 >> 2] | 0;
   13409   i12 = HEAP32[i10 + 52 >> 2] | 0;
   13410   i14 = HEAP32[i11 + 8 >> 2] | 0;
   13411   i13 = HEAP32[i12 + 8 >> 2] | 0;
   13412   i9 = HEAP32[i10 + 124 >> 2] | 0;
   13413   if ((i9 | 0) <= 0) {
   13414    i2 = 4;
   13415    break;
   13416   }
   13417   d15 = +HEAPF32[(HEAP32[i12 + 12 >> 2] | 0) + 8 >> 2];
   13418   d16 = +HEAPF32[(HEAP32[i11 + 12 >> 2] | 0) + 8 >> 2];
   13419   i12 = HEAP32[i2 >> 2] | 0;
   13420   HEAPF32[i12 + (i8 * 152 | 0) + 136 >> 2] = +HEAPF32[i10 + 136 >> 2];
   13421   HEAPF32[i12 + (i8 * 152 | 0) + 140 >> 2] = +HEAPF32[i10 + 140 >> 2];
   13422   i22 = i14 + 8 | 0;
   13423   HEAP32[i12 + (i8 * 152 | 0) + 112 >> 2] = HEAP32[i22 >> 2];
   13424   i21 = i13 + 8 | 0;
   13425   HEAP32[i12 + (i8 * 152 | 0) + 116 >> 2] = HEAP32[i21 >> 2];
   13426   i19 = i14 + 120 | 0;
   13427   HEAPF32[i12 + (i8 * 152 | 0) + 120 >> 2] = +HEAPF32[i19 >> 2];
   13428   i20 = i13 + 120 | 0;
   13429   HEAPF32[i12 + (i8 * 152 | 0) + 124 >> 2] = +HEAPF32[i20 >> 2];
   13430   i18 = i14 + 128 | 0;
   13431   HEAPF32[i12 + (i8 * 152 | 0) + 128 >> 2] = +HEAPF32[i18 >> 2];
   13432   i17 = i13 + 128 | 0;
   13433   HEAPF32[i12 + (i8 * 152 | 0) + 132 >> 2] = +HEAPF32[i17 >> 2];
   13434   HEAP32[i12 + (i8 * 152 | 0) + 148 >> 2] = i8;
   13435   HEAP32[i12 + (i8 * 152 | 0) + 144 >> 2] = i9;
   13436   i11 = i12 + (i8 * 152 | 0) + 80 | 0;
   13437   HEAP32[i11 + 0 >> 2] = 0;
   13438   HEAP32[i11 + 4 >> 2] = 0;
   13439   HEAP32[i11 + 8 >> 2] = 0;
   13440   HEAP32[i11 + 12 >> 2] = 0;
   13441   HEAP32[i11 + 16 >> 2] = 0;
   13442   HEAP32[i11 + 20 >> 2] = 0;
   13443   HEAP32[i11 + 24 >> 2] = 0;
   13444   HEAP32[i11 + 28 >> 2] = 0;
   13445   i11 = HEAP32[i3 >> 2] | 0;
   13446   HEAP32[i11 + (i8 * 88 | 0) + 32 >> 2] = HEAP32[i22 >> 2];
   13447   HEAP32[i11 + (i8 * 88 | 0) + 36 >> 2] = HEAP32[i21 >> 2];
   13448   HEAPF32[i11 + (i8 * 88 | 0) + 40 >> 2] = +HEAPF32[i19 >> 2];
   13449   HEAPF32[i11 + (i8 * 88 | 0) + 44 >> 2] = +HEAPF32[i20 >> 2];
   13450   i20 = i14 + 28 | 0;
   13451   i14 = HEAP32[i20 + 4 >> 2] | 0;
   13452   i19 = i11 + (i8 * 88 | 0) + 48 | 0;
   13453   HEAP32[i19 >> 2] = HEAP32[i20 >> 2];
   13454   HEAP32[i19 + 4 >> 2] = i14;
   13455   i19 = i13 + 28 | 0;
   13456   i14 = HEAP32[i19 + 4 >> 2] | 0;
   13457   i13 = i11 + (i8 * 88 | 0) + 56 | 0;
   13458   HEAP32[i13 >> 2] = HEAP32[i19 >> 2];
   13459   HEAP32[i13 + 4 >> 2] = i14;
   13460   HEAPF32[i11 + (i8 * 88 | 0) + 64 >> 2] = +HEAPF32[i18 >> 2];
   13461   HEAPF32[i11 + (i8 * 88 | 0) + 68 >> 2] = +HEAPF32[i17 >> 2];
   13462   i13 = i10 + 104 | 0;
   13463   i14 = HEAP32[i13 + 4 >> 2] | 0;
   13464   i17 = i11 + (i8 * 88 | 0) + 16 | 0;
   13465   HEAP32[i17 >> 2] = HEAP32[i13 >> 2];
   13466   HEAP32[i17 + 4 >> 2] = i14;
   13467   i17 = i10 + 112 | 0;
   13468   i14 = HEAP32[i17 + 4 >> 2] | 0;
   13469   i13 = i11 + (i8 * 88 | 0) + 24 | 0;
   13470   HEAP32[i13 >> 2] = HEAP32[i17 >> 2];
   13471   HEAP32[i13 + 4 >> 2] = i14;
   13472   HEAP32[i11 + (i8 * 88 | 0) + 84 >> 2] = i9;
   13473   HEAPF32[i11 + (i8 * 88 | 0) + 76 >> 2] = d16;
   13474   HEAPF32[i11 + (i8 * 88 | 0) + 80 >> 2] = d15;
   13475   HEAP32[i11 + (i8 * 88 | 0) + 72 >> 2] = HEAP32[i10 + 120 >> 2];
   13476   i13 = 0;
   13477   do {
   13478    i14 = i10 + (i13 * 20 | 0) + 64 | 0;
   13479    if ((HEAP8[i6] | 0) == 0) {
   13480     HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 16 >> 2] = 0.0;
   13481     HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 20 >> 2] = 0.0;
   13482    } else {
   13483     HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 16 >> 2] = +HEAPF32[i7 >> 2] * +HEAPF32[i10 + (i13 * 20 | 0) + 72 >> 2];
   13484     HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 20 >> 2] = +HEAPF32[i7 >> 2] * +HEAPF32[i10 + (i13 * 20 | 0) + 76 >> 2];
   13485    }
   13486    i20 = i12 + (i8 * 152 | 0) + (i13 * 36 | 0) | 0;
   13487    HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 24 >> 2] = 0.0;
   13488    HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 28 >> 2] = 0.0;
   13489    HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 32 >> 2] = 0.0;
   13490    i22 = i11 + (i8 * 88 | 0) + (i13 << 3) | 0;
   13491    HEAP32[i20 + 0 >> 2] = 0;
   13492    HEAP32[i20 + 4 >> 2] = 0;
   13493    HEAP32[i20 + 8 >> 2] = 0;
   13494    HEAP32[i20 + 12 >> 2] = 0;
   13495    i20 = i14;
   13496    i21 = HEAP32[i20 + 4 >> 2] | 0;
   13497    HEAP32[i22 >> 2] = HEAP32[i20 >> 2];
   13498    HEAP32[i22 + 4 >> 2] = i21;
   13499    i13 = i13 + 1 | 0;
   13500   } while ((i13 | 0) != (i9 | 0));
   13501   i8 = i8 + 1 | 0;
   13502   if ((i8 | 0) >= (HEAP32[i4 >> 2] | 0)) {
   13503    i2 = 12;
   13504    break;
   13505   }
   13506   i9 = HEAP32[i5 >> 2] | 0;
   13507  }
   13508  if ((i2 | 0) == 4) {
   13509   ___assert_fail(6504, 6520, 71, 6568);
   13510  } else if ((i2 | 0) == 12) {
   13511   STACKTOP = i1;
   13512   return;
   13513  }
   13514 }
   13515 function __Z25b2CollidePolygonAndCircleP10b2ManifoldPK14b2PolygonShapeRK11b2TransformPK13b2CircleShapeS6_(i1, i4, i11, i9, i10) {
   13516  i1 = i1 | 0;
   13517  i4 = i4 | 0;
   13518  i11 = i11 | 0;
   13519  i9 = i9 | 0;
   13520  i10 = i10 | 0;
   13521  var i2 = 0, i3 = 0, i5 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i12 = 0, d13 = 0.0, d14 = 0.0, i15 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, i22 = 0;
   13522  i3 = STACKTOP;
   13523  i5 = i1 + 60 | 0;
   13524  HEAP32[i5 >> 2] = 0;
   13525  i2 = i9 + 12 | 0;
   13526  d20 = +HEAPF32[i10 + 12 >> 2];
   13527  d7 = +HEAPF32[i2 >> 2];
   13528  d6 = +HEAPF32[i10 + 8 >> 2];
   13529  d21 = +HEAPF32[i9 + 16 >> 2];
   13530  d8 = +HEAPF32[i10 >> 2] + (d20 * d7 - d6 * d21) - +HEAPF32[i11 >> 2];
   13531  d21 = d7 * d6 + d20 * d21 + +HEAPF32[i10 + 4 >> 2] - +HEAPF32[i11 + 4 >> 2];
   13532  d20 = +HEAPF32[i11 + 12 >> 2];
   13533  d6 = +HEAPF32[i11 + 8 >> 2];
   13534  d7 = d8 * d20 + d21 * d6;
   13535  d6 = d20 * d21 - d8 * d6;
   13536  d8 = +HEAPF32[i4 + 8 >> 2] + +HEAPF32[i9 + 8 >> 2];
   13537  i12 = HEAP32[i4 + 148 >> 2] | 0;
   13538  do {
   13539   if ((i12 | 0) > 0) {
   13540    i10 = 0;
   13541    i9 = 0;
   13542    d13 = -3.4028234663852886e+38;
   13543    while (1) {
   13544     d14 = (d7 - +HEAPF32[i4 + (i10 << 3) + 20 >> 2]) * +HEAPF32[i4 + (i10 << 3) + 84 >> 2] + (d6 - +HEAPF32[i4 + (i10 << 3) + 24 >> 2]) * +HEAPF32[i4 + (i10 << 3) + 88 >> 2];
   13545     if (d14 > d8) {
   13546      i10 = 19;
   13547      break;
   13548     }
   13549     i11 = d14 > d13;
   13550     d13 = i11 ? d14 : d13;
   13551     i9 = i11 ? i10 : i9;
   13552     i10 = i10 + 1 | 0;
   13553     if ((i10 | 0) >= (i12 | 0)) {
   13554      i10 = 4;
   13555      break;
   13556     }
   13557    }
   13558    if ((i10 | 0) == 4) {
   13559     i22 = d13 < 1.1920928955078125e-7;
   13560     break;
   13561    } else if ((i10 | 0) == 19) {
   13562     STACKTOP = i3;
   13563     return;
   13564    }
   13565   } else {
   13566    i9 = 0;
   13567    i22 = 1;
   13568   }
   13569  } while (0);
   13570  i15 = i9 + 1 | 0;
   13571  i11 = i4 + (i9 << 3) + 20 | 0;
   13572  i10 = HEAP32[i11 >> 2] | 0;
   13573  i11 = HEAP32[i11 + 4 >> 2] | 0;
   13574  d14 = (HEAP32[tempDoublePtr >> 2] = i10, +HEAPF32[tempDoublePtr >> 2]);
   13575  d13 = (HEAP32[tempDoublePtr >> 2] = i11, +HEAPF32[tempDoublePtr >> 2]);
   13576  i12 = i4 + (((i15 | 0) < (i12 | 0) ? i15 : 0) << 3) + 20 | 0;
   13577  i15 = HEAP32[i12 >> 2] | 0;
   13578  i12 = HEAP32[i12 + 4 >> 2] | 0;
   13579  d21 = (HEAP32[tempDoublePtr >> 2] = i15, +HEAPF32[tempDoublePtr >> 2]);
   13580  d18 = (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]);
   13581  if (i22) {
   13582   HEAP32[i5 >> 2] = 1;
   13583   HEAP32[i1 + 56 >> 2] = 1;
   13584   i22 = i4 + (i9 << 3) + 84 | 0;
   13585   i15 = HEAP32[i22 + 4 >> 2] | 0;
   13586   i12 = i1 + 40 | 0;
   13587   HEAP32[i12 >> 2] = HEAP32[i22 >> 2];
   13588   HEAP32[i12 + 4 >> 2] = i15;
   13589   d20 = +((d14 + d21) * .5);
   13590   d21 = +((d13 + d18) * .5);
   13591   i12 = i1 + 48 | 0;
   13592   HEAPF32[i12 >> 2] = d20;
   13593   HEAPF32[i12 + 4 >> 2] = d21;
   13594   i12 = i2;
   13595   i15 = HEAP32[i12 + 4 >> 2] | 0;
   13596   i22 = i1;
   13597   HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
   13598   HEAP32[i22 + 4 >> 2] = i15;
   13599   HEAP32[i1 + 16 >> 2] = 0;
   13600   STACKTOP = i3;
   13601   return;
   13602  }
   13603  d16 = d7 - d14;
   13604  d20 = d6 - d13;
   13605  d19 = d7 - d21;
   13606  d17 = d6 - d18;
   13607  if (d16 * (d21 - d14) + d20 * (d18 - d13) <= 0.0) {
   13608   if (d16 * d16 + d20 * d20 > d8 * d8) {
   13609    STACKTOP = i3;
   13610    return;
   13611   }
   13612   HEAP32[i5 >> 2] = 1;
   13613   HEAP32[i1 + 56 >> 2] = 1;
   13614   i4 = i1 + 40 | 0;
   13615   d21 = +d16;
   13616   d6 = +d20;
   13617   i22 = i4;
   13618   HEAPF32[i22 >> 2] = d21;
   13619   HEAPF32[i22 + 4 >> 2] = d6;
   13620   d6 = +Math_sqrt(+(d16 * d16 + d20 * d20));
   13621   if (!(d6 < 1.1920928955078125e-7)) {
   13622    d21 = 1.0 / d6;
   13623    HEAPF32[i4 >> 2] = d16 * d21;
   13624    HEAPF32[i1 + 44 >> 2] = d20 * d21;
   13625   }
   13626   i12 = i1 + 48 | 0;
   13627   HEAP32[i12 >> 2] = i10;
   13628   HEAP32[i12 + 4 >> 2] = i11;
   13629   i12 = i2;
   13630   i15 = HEAP32[i12 + 4 >> 2] | 0;
   13631   i22 = i1;
   13632   HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
   13633   HEAP32[i22 + 4 >> 2] = i15;
   13634   HEAP32[i1 + 16 >> 2] = 0;
   13635   STACKTOP = i3;
   13636   return;
   13637  }
   13638  if (!(d19 * (d14 - d21) + d17 * (d13 - d18) <= 0.0)) {
   13639   d14 = (d14 + d21) * .5;
   13640   d13 = (d13 + d18) * .5;
   13641   i10 = i4 + (i9 << 3) + 84 | 0;
   13642   if ((d7 - d14) * +HEAPF32[i10 >> 2] + (d6 - d13) * +HEAPF32[i4 + (i9 << 3) + 88 >> 2] > d8) {
   13643    STACKTOP = i3;
   13644    return;
   13645   }
   13646   HEAP32[i5 >> 2] = 1;
   13647   HEAP32[i1 + 56 >> 2] = 1;
   13648   i22 = i10;
   13649   i15 = HEAP32[i22 + 4 >> 2] | 0;
   13650   i12 = i1 + 40 | 0;
   13651   HEAP32[i12 >> 2] = HEAP32[i22 >> 2];
   13652   HEAP32[i12 + 4 >> 2] = i15;
   13653   d20 = +d14;
   13654   d21 = +d13;
   13655   i12 = i1 + 48 | 0;
   13656   HEAPF32[i12 >> 2] = d20;
   13657   HEAPF32[i12 + 4 >> 2] = d21;
   13658   i12 = i2;
   13659   i15 = HEAP32[i12 + 4 >> 2] | 0;
   13660   i22 = i1;
   13661   HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
   13662   HEAP32[i22 + 4 >> 2] = i15;
   13663   HEAP32[i1 + 16 >> 2] = 0;
   13664   STACKTOP = i3;
   13665   return;
   13666  }
   13667  if (d19 * d19 + d17 * d17 > d8 * d8) {
   13668   STACKTOP = i3;
   13669   return;
   13670  }
   13671  HEAP32[i5 >> 2] = 1;
   13672  HEAP32[i1 + 56 >> 2] = 1;
   13673  i4 = i1 + 40 | 0;
   13674  d21 = +d19;
   13675  d6 = +d17;
   13676  i22 = i4;
   13677  HEAPF32[i22 >> 2] = d21;
   13678  HEAPF32[i22 + 4 >> 2] = d6;
   13679  d6 = +Math_sqrt(+(d19 * d19 + d17 * d17));
   13680  if (!(d6 < 1.1920928955078125e-7)) {
   13681   d21 = 1.0 / d6;
   13682   HEAPF32[i4 >> 2] = d19 * d21;
   13683   HEAPF32[i1 + 44 >> 2] = d17 * d21;
   13684  }
   13685  i22 = i1 + 48 | 0;
   13686  HEAP32[i22 >> 2] = i15;
   13687  HEAP32[i22 + 4 >> 2] = i12;
   13688  i12 = i2;
   13689  i15 = HEAP32[i12 + 4 >> 2] | 0;
   13690  i22 = i1;
   13691  HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
   13692  HEAP32[i22 + 4 >> 2] = i15;
   13693  HEAP32[i1 + 16 >> 2] = 0;
   13694  STACKTOP = i3;
   13695  return;
   13696 }
   13697 function __ZN15b2WorldManifold10InitializeEPK10b2ManifoldRK11b2TransformfS5_f(i1, i5, i7, d4, i8, d3) {
   13698  i1 = i1 | 0;
   13699  i5 = i5 | 0;
   13700  i7 = i7 | 0;
   13701  d4 = +d4;
   13702  i8 = i8 | 0;
   13703  d3 = +d3;
   13704  var i2 = 0, i6 = 0, d9 = 0.0, d10 = 0.0, i11 = 0, i12 = 0, i13 = 0, d14 = 0.0, d15 = 0.0, i16 = 0, d17 = 0.0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0, d22 = 0.0;
   13705  i2 = STACKTOP;
   13706  i6 = i5 + 60 | 0;
   13707  if ((HEAP32[i6 >> 2] | 0) == 0) {
   13708   STACKTOP = i2;
   13709   return;
   13710  }
   13711  i11 = HEAP32[i5 + 56 >> 2] | 0;
   13712  if ((i11 | 0) == 2) {
   13713   i13 = i8 + 12 | 0;
   13714   d17 = +HEAPF32[i13 >> 2];
   13715   d18 = +HEAPF32[i5 + 40 >> 2];
   13716   i16 = i8 + 8 | 0;
   13717   d19 = +HEAPF32[i16 >> 2];
   13718   d15 = +HEAPF32[i5 + 44 >> 2];
   13719   d14 = d17 * d18 - d19 * d15;
   13720   d15 = d18 * d19 + d17 * d15;
   13721   d17 = +d14;
   13722   d19 = +d15;
   13723   i12 = i1;
   13724   HEAPF32[i12 >> 2] = d17;
   13725   HEAPF32[i12 + 4 >> 2] = d19;
   13726   d19 = +HEAPF32[i13 >> 2];
   13727   d17 = +HEAPF32[i5 + 48 >> 2];
   13728   d18 = +HEAPF32[i16 >> 2];
   13729   d10 = +HEAPF32[i5 + 52 >> 2];
   13730   d9 = +HEAPF32[i8 >> 2] + (d19 * d17 - d18 * d10);
   13731   d10 = d17 * d18 + d19 * d10 + +HEAPF32[i8 + 4 >> 2];
   13732   if ((HEAP32[i6 >> 2] | 0) > 0) {
   13733    i8 = i7 + 12 | 0;
   13734    i11 = i7 + 8 | 0;
   13735    i12 = i7 + 4 | 0;
   13736    i13 = i1 + 4 | 0;
   13737    i16 = 0;
   13738    do {
   13739     d18 = +HEAPF32[i8 >> 2];
   13740     d22 = +HEAPF32[i5 + (i16 * 20 | 0) >> 2];
   13741     d21 = +HEAPF32[i11 >> 2];
   13742     d17 = +HEAPF32[i5 + (i16 * 20 | 0) + 4 >> 2];
   13743     d19 = +HEAPF32[i7 >> 2] + (d18 * d22 - d21 * d17);
   13744     d17 = d22 * d21 + d18 * d17 + +HEAPF32[i12 >> 2];
   13745     d18 = d3 - (d14 * (d19 - d9) + (d17 - d10) * d15);
   13746     d19 = +((d19 - d14 * d4 + (d19 + d14 * d18)) * .5);
   13747     d14 = +((d17 - d15 * d4 + (d17 + d15 * d18)) * .5);
   13748     i20 = i1 + (i16 << 3) + 8 | 0;
   13749     HEAPF32[i20 >> 2] = d19;
   13750     HEAPF32[i20 + 4 >> 2] = d14;
   13751     i16 = i16 + 1 | 0;
   13752     d14 = +HEAPF32[i1 >> 2];
   13753     d15 = +HEAPF32[i13 >> 2];
   13754    } while ((i16 | 0) < (HEAP32[i6 >> 2] | 0));
   13755   }
   13756   d21 = +-d14;
   13757   d22 = +-d15;
   13758   i20 = i1;
   13759   HEAPF32[i20 >> 2] = d21;
   13760   HEAPF32[i20 + 4 >> 2] = d22;
   13761   STACKTOP = i2;
   13762   return;
   13763  } else if ((i11 | 0) == 1) {
   13764   i16 = i7 + 12 | 0;
   13765   d19 = +HEAPF32[i16 >> 2];
   13766   d21 = +HEAPF32[i5 + 40 >> 2];
   13767   i20 = i7 + 8 | 0;
   13768   d22 = +HEAPF32[i20 >> 2];
   13769   d15 = +HEAPF32[i5 + 44 >> 2];
   13770   d14 = d19 * d21 - d22 * d15;
   13771   d15 = d21 * d22 + d19 * d15;
   13772   d19 = +d14;
   13773   d22 = +d15;
   13774   i13 = i1;
   13775   HEAPF32[i13 >> 2] = d19;
   13776   HEAPF32[i13 + 4 >> 2] = d22;
   13777   d22 = +HEAPF32[i16 >> 2];
   13778   d19 = +HEAPF32[i5 + 48 >> 2];
   13779   d21 = +HEAPF32[i20 >> 2];
   13780   d10 = +HEAPF32[i5 + 52 >> 2];
   13781   d9 = +HEAPF32[i7 >> 2] + (d22 * d19 - d21 * d10);
   13782   d10 = d19 * d21 + d22 * d10 + +HEAPF32[i7 + 4 >> 2];
   13783   if ((HEAP32[i6 >> 2] | 0) <= 0) {
   13784    STACKTOP = i2;
   13785    return;
   13786   }
   13787   i12 = i8 + 12 | 0;
   13788   i11 = i8 + 8 | 0;
   13789   i7 = i8 + 4 | 0;
   13790   i13 = i1 + 4 | 0;
   13791   i16 = 0;
   13792   while (1) {
   13793    d22 = +HEAPF32[i12 >> 2];
   13794    d17 = +HEAPF32[i5 + (i16 * 20 | 0) >> 2];
   13795    d18 = +HEAPF32[i11 >> 2];
   13796    d19 = +HEAPF32[i5 + (i16 * 20 | 0) + 4 >> 2];
   13797    d21 = +HEAPF32[i8 >> 2] + (d22 * d17 - d18 * d19);
   13798    d19 = d17 * d18 + d22 * d19 + +HEAPF32[i7 >> 2];
   13799    d22 = d4 - (d14 * (d21 - d9) + (d19 - d10) * d15);
   13800    d21 = +((d21 - d14 * d3 + (d21 + d14 * d22)) * .5);
   13801    d22 = +((d19 - d15 * d3 + (d19 + d15 * d22)) * .5);
   13802    i20 = i1 + (i16 << 3) + 8 | 0;
   13803    HEAPF32[i20 >> 2] = d21;
   13804    HEAPF32[i20 + 4 >> 2] = d22;
   13805    i16 = i16 + 1 | 0;
   13806    if ((i16 | 0) >= (HEAP32[i6 >> 2] | 0)) {
   13807     break;
   13808    }
   13809    d14 = +HEAPF32[i1 >> 2];
   13810    d15 = +HEAPF32[i13 >> 2];
   13811   }
   13812   STACKTOP = i2;
   13813   return;
   13814  } else if ((i11 | 0) == 0) {
   13815   HEAPF32[i1 >> 2] = 1.0;
   13816   i6 = i1 + 4 | 0;
   13817   HEAPF32[i6 >> 2] = 0.0;
   13818   d21 = +HEAPF32[i7 + 12 >> 2];
   13819   d22 = +HEAPF32[i5 + 48 >> 2];
   13820   d19 = +HEAPF32[i7 + 8 >> 2];
   13821   d10 = +HEAPF32[i5 + 52 >> 2];
   13822   d9 = +HEAPF32[i7 >> 2] + (d21 * d22 - d19 * d10);
   13823   d10 = d22 * d19 + d21 * d10 + +HEAPF32[i7 + 4 >> 2];
   13824   d21 = +HEAPF32[i8 + 12 >> 2];
   13825   d19 = +HEAPF32[i5 >> 2];
   13826   d22 = +HEAPF32[i8 + 8 >> 2];
   13827   d15 = +HEAPF32[i5 + 4 >> 2];
   13828   d14 = +HEAPF32[i8 >> 2] + (d21 * d19 - d22 * d15);
   13829   d15 = d19 * d22 + d21 * d15 + +HEAPF32[i8 + 4 >> 2];
   13830   d21 = d9 - d14;
   13831   d22 = d10 - d15;
   13832   if (d21 * d21 + d22 * d22 > 1.4210854715202004e-14) {
   13833    d19 = d14 - d9;
   13834    d17 = d15 - d10;
   13835    d22 = +d19;
   13836    d18 = +d17;
   13837    i20 = i1;
   13838    HEAPF32[i20 >> 2] = d22;
   13839    HEAPF32[i20 + 4 >> 2] = d18;
   13840    d18 = +Math_sqrt(+(d19 * d19 + d17 * d17));
   13841    if (!(d18 < 1.1920928955078125e-7)) {
   13842     d22 = 1.0 / d18;
   13843     d19 = d19 * d22;
   13844     HEAPF32[i1 >> 2] = d19;
   13845     d17 = d17 * d22;
   13846     HEAPF32[i6 >> 2] = d17;
   13847    }
   13848   } else {
   13849    d19 = 1.0;
   13850    d17 = 0.0;
   13851   }
   13852   d21 = +((d9 + d19 * d4 + (d14 - d19 * d3)) * .5);
   13853   d22 = +((d10 + d17 * d4 + (d15 - d17 * d3)) * .5);
   13854   i20 = i1 + 8 | 0;
   13855   HEAPF32[i20 >> 2] = d21;
   13856   HEAPF32[i20 + 4 >> 2] = d22;
   13857   STACKTOP = i2;
   13858   return;
   13859  } else {
   13860   STACKTOP = i2;
   13861   return;
   13862  }
   13863 }
   13864 function _main(i3, i2) {
   13865  i3 = i3 | 0;
   13866  i2 = i2 | 0;
   13867  var i1 = 0, i4 = 0, i5 = 0, d6 = 0.0, d7 = 0.0, i8 = 0, i9 = 0, d10 = 0.0, d11 = 0.0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, d22 = 0.0, d23 = 0.0;
   13868  i1 = STACKTOP;
   13869  STACKTOP = STACKTOP + 240 | 0;
   13870  i5 = i1;
   13871  i12 = i1 + 224 | 0;
   13872  i4 = i1 + 168 | 0;
   13873  i9 = i1 + 160 | 0;
   13874  i8 = i1 + 152 | 0;
   13875  L1 : do {
   13876   if ((i3 | 0) > 1) {
   13877    i14 = HEAP8[HEAP32[i2 + 4 >> 2] | 0] | 0;
   13878    switch (i14 | 0) {
   13879    case 49:
   13880     {
   13881      HEAP32[2] = 5;
   13882      HEAP32[4] = 35;
   13883      i15 = 35;
   13884      i14 = 5;
   13885      break L1;
   13886     }
   13887    case 50:
   13888     {
   13889      HEAP32[2] = 32;
   13890      HEAP32[4] = 161;
   13891      i15 = 161;
   13892      i14 = 32;
   13893      break L1;
   13894     }
   13895    case 51:
   13896     {
   13897      i13 = 5;
   13898      break L1;
   13899     }
   13900    case 52:
   13901     {
   13902      HEAP32[2] = 320;
   13903      HEAP32[4] = 2331;
   13904      i15 = 2331;
   13905      i14 = 320;
   13906      break L1;
   13907     }
   13908    case 53:
   13909     {
   13910      HEAP32[2] = 640;
   13911      HEAP32[4] = 5661;
   13912      i15 = 5661;
   13913      i14 = 640;
   13914      break L1;
   13915     }
   13916    case 48:
   13917     {
   13918      i20 = 0;
   13919      STACKTOP = i1;
   13920      return i20 | 0;
   13921     }
   13922    default:
   13923     {
   13924      HEAP32[i5 >> 2] = i14 + -48;
   13925      _printf(80, i5 | 0) | 0;
   13926      i20 = -1;
   13927      STACKTOP = i1;
   13928      return i20 | 0;
   13929     }
   13930    }
   13931   } else {
   13932    i13 = 5;
   13933   }
   13934  } while (0);
   13935  if ((i13 | 0) == 5) {
   13936   HEAP32[2] = 64;
   13937   HEAP32[4] = 333;
   13938   i15 = 333;
   13939   i14 = 64;
   13940  }
   13941  i13 = i15 + i14 | 0;
   13942  HEAP32[4] = i13;
   13943  HEAP32[2] = 0;
   13944  HEAP32[8] = __Znaj(i13 >>> 0 > 1073741823 ? -1 : i13 << 2) | 0;
   13945  HEAPF32[i12 >> 2] = 0.0;
   13946  HEAPF32[i12 + 4 >> 2] = -10.0;
   13947  i15 = __Znwj(103028) | 0;
   13948  __ZN7b2WorldC2ERK6b2Vec2(i15, i12);
   13949  HEAP32[6] = i15;
   13950  __ZN7b2World16SetAllowSleepingEb(i15, 0);
   13951  HEAP32[i5 + 44 >> 2] = 0;
   13952  i15 = i5 + 4 | 0;
   13953  i14 = i5 + 36 | 0;
   13954  HEAP32[i15 + 0 >> 2] = 0;
   13955  HEAP32[i15 + 4 >> 2] = 0;
   13956  HEAP32[i15 + 8 >> 2] = 0;
   13957  HEAP32[i15 + 12 >> 2] = 0;
   13958  HEAP32[i15 + 16 >> 2] = 0;
   13959  HEAP32[i15 + 20 >> 2] = 0;
   13960  HEAP32[i15 + 24 >> 2] = 0;
   13961  HEAP32[i15 + 28 >> 2] = 0;
   13962  HEAP8[i14] = 1;
   13963  HEAP8[i5 + 37 | 0] = 1;
   13964  HEAP8[i5 + 38 | 0] = 0;
   13965  HEAP8[i5 + 39 | 0] = 0;
   13966  HEAP32[i5 >> 2] = 0;
   13967  HEAP8[i5 + 40 | 0] = 1;
   13968  HEAPF32[i5 + 48 >> 2] = 1.0;
   13969  i14 = __ZN7b2World10CreateBodyEPK9b2BodyDef(HEAP32[6] | 0, i5) | 0;
   13970  HEAP32[i4 >> 2] = 240;
   13971  HEAP32[i4 + 4 >> 2] = 1;
   13972  HEAPF32[i4 + 8 >> 2] = .009999999776482582;
   13973  i15 = i4 + 28 | 0;
   13974  HEAP32[i15 + 0 >> 2] = 0;
   13975  HEAP32[i15 + 4 >> 2] = 0;
   13976  HEAP32[i15 + 8 >> 2] = 0;
   13977  HEAP32[i15 + 12 >> 2] = 0;
   13978  HEAP16[i15 + 16 >> 1] = 0;
   13979  HEAPF32[i9 >> 2] = -40.0;
   13980  HEAPF32[i9 + 4 >> 2] = 0.0;
   13981  HEAPF32[i8 >> 2] = 40.0;
   13982  HEAPF32[i8 + 4 >> 2] = 0.0;
   13983  __ZN11b2EdgeShape3SetERK6b2Vec2S2_(i4, i9, i8);
   13984  __ZN6b2Body13CreateFixtureEPK7b2Shapef(i14, i4, 0.0) | 0;
   13985  HEAP32[i5 >> 2] = 504;
   13986  HEAP32[i5 + 4 >> 2] = 2;
   13987  HEAPF32[i5 + 8 >> 2] = .009999999776482582;
   13988  HEAP32[i5 + 148 >> 2] = 0;
   13989  HEAPF32[i5 + 12 >> 2] = 0.0;
   13990  HEAPF32[i5 + 16 >> 2] = 0.0;
   13991  __ZN14b2PolygonShape8SetAsBoxEff(i5, .5, .5);
   13992  i14 = i4 + 44 | 0;
   13993  i15 = i4 + 4 | 0;
   13994  i8 = i4 + 36 | 0;
   13995  i17 = i4 + 37 | 0;
   13996  i18 = i4 + 38 | 0;
   13997  i19 = i4 + 39 | 0;
   13998  i20 = i4 + 40 | 0;
   13999  i13 = i4 + 48 | 0;
   14000  i12 = i4 + 4 | 0;
   14001  d11 = -7.0;
   14002  d10 = .75;
   14003  i9 = 0;
   14004  while (1) {
   14005   d7 = d11;
   14006   d6 = d10;
   14007   i16 = i9;
   14008   while (1) {
   14009    HEAP32[i14 >> 2] = 0;
   14010    HEAP32[i15 + 0 >> 2] = 0;
   14011    HEAP32[i15 + 4 >> 2] = 0;
   14012    HEAP32[i15 + 8 >> 2] = 0;
   14013    HEAP32[i15 + 12 >> 2] = 0;
   14014    HEAP32[i15 + 16 >> 2] = 0;
   14015    HEAP32[i15 + 20 >> 2] = 0;
   14016    HEAP32[i15 + 24 >> 2] = 0;
   14017    HEAP32[i15 + 28 >> 2] = 0;
   14018    HEAP8[i8] = 1;
   14019    HEAP8[i17] = 1;
   14020    HEAP8[i18] = 0;
   14021    HEAP8[i19] = 0;
   14022    HEAP8[i20] = 1;
   14023    HEAPF32[i13 >> 2] = 1.0;
   14024    HEAP32[i4 >> 2] = 2;
   14025    d23 = +d7;
   14026    d22 = +d6;
   14027    i21 = i12;
   14028    HEAPF32[i21 >> 2] = d23;
   14029    HEAPF32[i21 + 4 >> 2] = d22;
   14030    i21 = __ZN7b2World10CreateBodyEPK9b2BodyDef(HEAP32[6] | 0, i4) | 0;
   14031    __ZN6b2Body13CreateFixtureEPK7b2Shapef(i21, i5, 5.0) | 0;
   14032    HEAP32[14] = i21;
   14033    i16 = i16 + 1 | 0;
   14034    if ((i16 | 0) >= 40) {
   14035     break;
   14036    } else {
   14037     d7 = d7 + 1.125;
   14038     d6 = d6 + 0.0;
   14039    }
   14040   }
   14041   i9 = i9 + 1 | 0;
   14042   if ((i9 | 0) >= 40) {
   14043    break;
   14044   } else {
   14045    d11 = d11 + .5625;
   14046    d10 = d10 + 1.0;
   14047   }
   14048  }
   14049  if ((HEAP32[2] | 0) > 0) {
   14050   i4 = 0;
   14051   do {
   14052    __ZN7b2World4StepEfii(HEAP32[6] | 0, .01666666753590107, 3, 3);
   14053    i4 = i4 + 1 | 0;
   14054   } while ((i4 | 0) < (HEAP32[2] | 0));
   14055  }
   14056  if ((i3 | 0) > 2) {
   14057   i21 = (HEAP8[HEAP32[i2 + 8 >> 2] | 0] | 0) + -48 | 0;
   14058   HEAP32[18] = i21;
   14059   if ((i21 | 0) != 0) {
   14060    _puts(208) | 0;
   14061    _emscripten_set_main_loop(2, 60, 1);
   14062    i21 = 0;
   14063    STACKTOP = i1;
   14064    return i21 | 0;
   14065   }
   14066  } else {
   14067   HEAP32[18] = 0;
   14068  }
   14069  while (1) {
   14070   __Z4iterv();
   14071   if ((HEAP32[16] | 0) > (HEAP32[4] | 0)) {
   14072    i2 = 0;
   14073    break;
   14074   }
   14075  }
   14076  STACKTOP = i1;
   14077  return i2 | 0;
   14078 }
   14079 function __ZN9b2Simplex9ReadCacheEPK14b2SimplexCachePK15b2DistanceProxyRK11b2TransformS5_S8_(i2, i11, i10, i4, i3, i5) {
   14080  i2 = i2 | 0;
   14081  i11 = i11 | 0;
   14082  i10 = i10 | 0;
   14083  i4 = i4 | 0;
   14084  i3 = i3 | 0;
   14085  i5 = i5 | 0;
   14086  var i1 = 0, i6 = 0, i7 = 0, d8 = 0.0, i9 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, d24 = 0.0, d25 = 0.0, i26 = 0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, d31 = 0.0, d32 = 0.0;
   14087  i1 = STACKTOP;
   14088  i13 = HEAP16[i11 + 4 >> 1] | 0;
   14089  if (!((i13 & 65535) < 4)) {
   14090   ___assert_fail(2872, 2672, 102, 2896);
   14091  }
   14092  i12 = i13 & 65535;
   14093  i6 = i2 + 108 | 0;
   14094  HEAP32[i6 >> 2] = i12;
   14095  L4 : do {
   14096   if (!(i13 << 16 >> 16 == 0)) {
   14097    i17 = i10 + 20 | 0;
   14098    i21 = i10 + 16 | 0;
   14099    i13 = i3 + 20 | 0;
   14100    i14 = i3 + 16 | 0;
   14101    i15 = i4 + 12 | 0;
   14102    i16 = i4 + 8 | 0;
   14103    i12 = i4 + 4 | 0;
   14104    i18 = i5 + 12 | 0;
   14105    i19 = i5 + 8 | 0;
   14106    i20 = i5 + 4 | 0;
   14107    i22 = 0;
   14108    while (1) {
   14109     i26 = HEAPU8[i11 + i22 + 6 | 0] | 0;
   14110     HEAP32[i2 + (i22 * 36 | 0) + 28 >> 2] = i26;
   14111     i23 = HEAPU8[i11 + i22 + 9 | 0] | 0;
   14112     HEAP32[i2 + (i22 * 36 | 0) + 32 >> 2] = i23;
   14113     if ((HEAP32[i17 >> 2] | 0) <= (i26 | 0)) {
   14114      i9 = 6;
   14115      break;
   14116     }
   14117     i26 = (HEAP32[i21 >> 2] | 0) + (i26 << 3) | 0;
   14118     d25 = +HEAPF32[i26 >> 2];
   14119     d24 = +HEAPF32[i26 + 4 >> 2];
   14120     if ((HEAP32[i13 >> 2] | 0) <= (i23 | 0)) {
   14121      i9 = 8;
   14122      break;
   14123     }
   14124     i23 = (HEAP32[i14 >> 2] | 0) + (i23 << 3) | 0;
   14125     d29 = +HEAPF32[i23 >> 2];
   14126     d31 = +HEAPF32[i23 + 4 >> 2];
   14127     d32 = +HEAPF32[i15 >> 2];
   14128     d30 = +HEAPF32[i16 >> 2];
   14129     d27 = +HEAPF32[i4 >> 2] + (d25 * d32 - d24 * d30);
   14130     d28 = +d27;
   14131     d30 = +(d24 * d32 + d25 * d30 + +HEAPF32[i12 >> 2]);
   14132     i23 = i2 + (i22 * 36 | 0) | 0;
   14133     HEAPF32[i23 >> 2] = d28;
   14134     HEAPF32[i23 + 4 >> 2] = d30;
   14135     d30 = +HEAPF32[i18 >> 2];
   14136     d25 = +HEAPF32[i19 >> 2];
   14137     d24 = +HEAPF32[i5 >> 2] + (d29 * d30 - d31 * d25);
   14138     d28 = +d24;
   14139     d25 = +(d31 * d30 + d29 * d25 + +HEAPF32[i20 >> 2]);
   14140     i23 = i2 + (i22 * 36 | 0) + 8 | 0;
   14141     HEAPF32[i23 >> 2] = d28;
   14142     HEAPF32[i23 + 4 >> 2] = d25;
   14143     d24 = +(d24 - d27);
   14144     d25 = +(+HEAPF32[i2 + (i22 * 36 | 0) + 12 >> 2] - +HEAPF32[i2 + (i22 * 36 | 0) + 4 >> 2]);
   14145     i23 = i2 + (i22 * 36 | 0) + 16 | 0;
   14146     HEAPF32[i23 >> 2] = d24;
   14147     HEAPF32[i23 + 4 >> 2] = d25;
   14148     HEAPF32[i2 + (i22 * 36 | 0) + 24 >> 2] = 0.0;
   14149     i22 = i22 + 1 | 0;
   14150     i23 = HEAP32[i6 >> 2] | 0;
   14151     if ((i22 | 0) >= (i23 | 0)) {
   14152      i7 = i23;
   14153      break L4;
   14154     }
   14155    }
   14156    if ((i9 | 0) == 6) {
   14157     ___assert_fail(2776, 2808, 103, 2840);
   14158    } else if ((i9 | 0) == 8) {
   14159     ___assert_fail(2776, 2808, 103, 2840);
   14160    }
   14161   } else {
   14162    i7 = i12;
   14163   }
   14164  } while (0);
   14165  do {
   14166   if ((i7 | 0) > 1) {
   14167    d24 = +HEAPF32[i11 >> 2];
   14168    if ((i7 | 0) == 2) {
   14169     d32 = +HEAPF32[i2 + 16 >> 2] - +HEAPF32[i2 + 52 >> 2];
   14170     d8 = +HEAPF32[i2 + 20 >> 2] - +HEAPF32[i2 + 56 >> 2];
   14171     d8 = +Math_sqrt(+(d32 * d32 + d8 * d8));
   14172    } else if ((i7 | 0) == 3) {
   14173     d8 = +HEAPF32[i2 + 16 >> 2];
   14174     d32 = +HEAPF32[i2 + 20 >> 2];
   14175     d8 = (+HEAPF32[i2 + 52 >> 2] - d8) * (+HEAPF32[i2 + 92 >> 2] - d32) - (+HEAPF32[i2 + 56 >> 2] - d32) * (+HEAPF32[i2 + 88 >> 2] - d8);
   14176    } else {
   14177     ___assert_fail(2712, 2672, 259, 2736);
   14178    }
   14179    if (!(d8 < d24 * .5) ? !(d24 * 2.0 < d8 | d8 < 1.1920928955078125e-7) : 0) {
   14180     i9 = 18;
   14181     break;
   14182    }
   14183    HEAP32[i6 >> 2] = 0;
   14184   } else {
   14185    i9 = 18;
   14186   }
   14187  } while (0);
   14188  if ((i9 | 0) == 18 ? (i7 | 0) != 0 : 0) {
   14189   STACKTOP = i1;
   14190   return;
   14191  }
   14192  HEAP32[i2 + 28 >> 2] = 0;
   14193  HEAP32[i2 + 32 >> 2] = 0;
   14194  if ((HEAP32[i10 + 20 >> 2] | 0) <= 0) {
   14195   ___assert_fail(2776, 2808, 103, 2840);
   14196  }
   14197  i26 = HEAP32[i10 + 16 >> 2] | 0;
   14198  d8 = +HEAPF32[i26 >> 2];
   14199  d24 = +HEAPF32[i26 + 4 >> 2];
   14200  if ((HEAP32[i3 + 20 >> 2] | 0) <= 0) {
   14201   ___assert_fail(2776, 2808, 103, 2840);
   14202  }
   14203  i26 = HEAP32[i3 + 16 >> 2] | 0;
   14204  d27 = +HEAPF32[i26 >> 2];
   14205  d25 = +HEAPF32[i26 + 4 >> 2];
   14206  d30 = +HEAPF32[i4 + 12 >> 2];
   14207  d32 = +HEAPF32[i4 + 8 >> 2];
   14208  d31 = +HEAPF32[i4 >> 2] + (d8 * d30 - d24 * d32);
   14209  d32 = d24 * d30 + d8 * d32 + +HEAPF32[i4 + 4 >> 2];
   14210  d30 = +d31;
   14211  d28 = +d32;
   14212  i26 = i2;
   14213  HEAPF32[i26 >> 2] = d30;
   14214  HEAPF32[i26 + 4 >> 2] = d28;
   14215  d28 = +HEAPF32[i5 + 12 >> 2];
   14216  d30 = +HEAPF32[i5 + 8 >> 2];
   14217  d29 = +HEAPF32[i5 >> 2] + (d27 * d28 - d25 * d30);
   14218  d30 = d25 * d28 + d27 * d30 + +HEAPF32[i5 + 4 >> 2];
   14219  d27 = +d29;
   14220  d28 = +d30;
   14221  i26 = i2 + 8 | 0;
   14222  HEAPF32[i26 >> 2] = d27;
   14223  HEAPF32[i26 + 4 >> 2] = d28;
   14224  d31 = +(d29 - d31);
   14225  d32 = +(d30 - d32);
   14226  i26 = i2 + 16 | 0;
   14227  HEAPF32[i26 >> 2] = d31;
   14228  HEAPF32[i26 + 4 >> 2] = d32;
   14229  HEAP32[i6 >> 2] = 1;
   14230  STACKTOP = i1;
   14231  return;
   14232 }
   14233 function __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i6, i7, i5, i4, i1) {
   14234  i6 = i6 | 0;
   14235  i7 = i7 | 0;
   14236  i5 = i5 | 0;
   14237  i4 = i4 | 0;
   14238  i1 = i1 | 0;
   14239  var i2 = 0, i3 = 0, i8 = 0, i9 = 0;
   14240  i2 = STACKTOP;
   14241  STACKTOP = STACKTOP + 16 | 0;
   14242  i3 = i2;
   14243  i9 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0;
   14244  i8 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0;
   14245  do {
   14246   if (i9) {
   14247    if (i8) {
   14248     HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   14249     HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   14250     HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   14251     HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   14252     HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   14253     HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   14254     HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   14255     HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   14256     HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   14257     i8 = 1;
   14258     break;
   14259    }
   14260    HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   14261    HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   14262    HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   14263    HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   14264    HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   14265    HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   14266    HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   14267    HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   14268    HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   14269    if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0) {
   14270     HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   14271     HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   14272     HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   14273     HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   14274     HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   14275     HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   14276     HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   14277     HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   14278     HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   14279     i8 = 2;
   14280    } else {
   14281     i8 = 1;
   14282    }
   14283   } else {
   14284    if (i8) {
   14285     HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   14286     HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   14287     HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   14288     HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   14289     HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   14290     HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   14291     HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   14292     HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   14293     HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   14294     if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0) {
   14295      HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   14296      HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   14297      HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   14298      HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   14299      HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   14300      HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   14301      HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   14302      HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   14303      HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   14304      i8 = 2;
   14305     } else {
   14306      i8 = 1;
   14307     }
   14308    } else {
   14309     i8 = 0;
   14310    }
   14311   }
   14312  } while (0);
   14313  if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i5) | 0)) {
   14314   i9 = i8;
   14315   STACKTOP = i2;
   14316   return i9 | 0;
   14317  }
   14318  HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   14319  HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   14320  HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   14321  HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
   14322  HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
   14323  HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
   14324  HEAP32[i4 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   14325  HEAP32[i4 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   14326  HEAP32[i4 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   14327  if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0)) {
   14328   i9 = i8 + 1 | 0;
   14329   STACKTOP = i2;
   14330   return i9 | 0;
   14331  }
   14332  HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   14333  HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   14334  HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   14335  HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   14336  HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   14337  HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   14338  HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   14339  HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   14340  HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   14341  if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0)) {
   14342   i9 = i8 + 2 | 0;
   14343   STACKTOP = i2;
   14344   return i9 | 0;
   14345  }
   14346  HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   14347  HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   14348  HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   14349  HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   14350  HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   14351  HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   14352  HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   14353  HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   14354  HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   14355  i9 = i8 + 3 | 0;
   14356  STACKTOP = i2;
   14357  return i9 | 0;
   14358 }
   14359 function __ZN15b2ContactSolver27SolveTOIPositionConstraintsEii(i9, i2, i5) {
   14360  i9 = i9 | 0;
   14361  i2 = i2 | 0;
   14362  i5 = i5 | 0;
   14363  var i1 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, d21 = 0.0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, d31 = 0.0, d32 = 0.0, d33 = 0.0, d34 = 0.0, d35 = 0.0, d36 = 0.0, i37 = 0, d38 = 0.0, d39 = 0.0, d40 = 0.0, d41 = 0.0, d42 = 0.0, d43 = 0.0, d44 = 0.0, d45 = 0.0, i46 = 0, d47 = 0.0;
   14364  i1 = STACKTOP;
   14365  STACKTOP = STACKTOP + 64 | 0;
   14366  i8 = i1 + 40 | 0;
   14367  i3 = i1 + 24 | 0;
   14368  i4 = i1;
   14369  i6 = i9 + 48 | 0;
   14370  if ((HEAP32[i6 >> 2] | 0) <= 0) {
   14371   d45 = 0.0;
   14372   i37 = d45 >= -.007499999832361937;
   14373   STACKTOP = i1;
   14374   return i37 | 0;
   14375  }
   14376  i7 = i9 + 36 | 0;
   14377  i14 = i9 + 24 | 0;
   14378  i9 = i8 + 8 | 0;
   14379  i15 = i8 + 12 | 0;
   14380  i10 = i3 + 8 | 0;
   14381  i11 = i3 + 12 | 0;
   14382  i12 = i4 + 8 | 0;
   14383  i13 = i4 + 16 | 0;
   14384  i16 = 0;
   14385  d34 = 0.0;
   14386  do {
   14387   i37 = HEAP32[i7 >> 2] | 0;
   14388   i19 = i37 + (i16 * 88 | 0) | 0;
   14389   i17 = HEAP32[i37 + (i16 * 88 | 0) + 32 >> 2] | 0;
   14390   i18 = HEAP32[i37 + (i16 * 88 | 0) + 36 >> 2] | 0;
   14391   i20 = i37 + (i16 * 88 | 0) + 48 | 0;
   14392   d21 = +HEAPF32[i20 >> 2];
   14393   d22 = +HEAPF32[i20 + 4 >> 2];
   14394   i20 = i37 + (i16 * 88 | 0) + 56 | 0;
   14395   d23 = +HEAPF32[i20 >> 2];
   14396   d24 = +HEAPF32[i20 + 4 >> 2];
   14397   i20 = HEAP32[i37 + (i16 * 88 | 0) + 84 >> 2] | 0;
   14398   if ((i17 | 0) == (i2 | 0) | (i17 | 0) == (i5 | 0)) {
   14399    d26 = +HEAPF32[i37 + (i16 * 88 | 0) + 64 >> 2];
   14400    d27 = +HEAPF32[i37 + (i16 * 88 | 0) + 40 >> 2];
   14401   } else {
   14402    d26 = 0.0;
   14403    d27 = 0.0;
   14404   }
   14405   d25 = +HEAPF32[i37 + (i16 * 88 | 0) + 44 >> 2];
   14406   d28 = +HEAPF32[i37 + (i16 * 88 | 0) + 68 >> 2];
   14407   i37 = HEAP32[i14 >> 2] | 0;
   14408   i46 = i37 + (i17 * 12 | 0) | 0;
   14409   d33 = +HEAPF32[i46 >> 2];
   14410   d35 = +HEAPF32[i46 + 4 >> 2];
   14411   d29 = +HEAPF32[i37 + (i17 * 12 | 0) + 8 >> 2];
   14412   i46 = i37 + (i18 * 12 | 0) | 0;
   14413   d32 = +HEAPF32[i46 >> 2];
   14414   d36 = +HEAPF32[i46 + 4 >> 2];
   14415   d31 = +HEAPF32[i37 + (i18 * 12 | 0) + 8 >> 2];
   14416   if ((i20 | 0) > 0) {
   14417    d30 = d27 + d25;
   14418    i37 = 0;
   14419    do {
   14420     d38 = +Math_sin(+d29);
   14421     HEAPF32[i9 >> 2] = d38;
   14422     d44 = +Math_cos(+d29);
   14423     HEAPF32[i15 >> 2] = d44;
   14424     d43 = +Math_sin(+d31);
   14425     HEAPF32[i10 >> 2] = d43;
   14426     d41 = +Math_cos(+d31);
   14427     HEAPF32[i11 >> 2] = d41;
   14428     d40 = +(d33 - (d21 * d44 - d22 * d38));
   14429     d38 = +(d35 - (d22 * d44 + d21 * d38));
   14430     i46 = i8;
   14431     HEAPF32[i46 >> 2] = d40;
   14432     HEAPF32[i46 + 4 >> 2] = d38;
   14433     d38 = +(d32 - (d23 * d41 - d24 * d43));
   14434     d43 = +(d36 - (d24 * d41 + d23 * d43));
   14435     i46 = i3;
   14436     HEAPF32[i46 >> 2] = d38;
   14437     HEAPF32[i46 + 4 >> 2] = d43;
   14438     __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK11b2TransformS4_i(i4, i19, i8, i3, i37);
   14439     i46 = i4;
   14440     d43 = +HEAPF32[i46 >> 2];
   14441     d38 = +HEAPF32[i46 + 4 >> 2];
   14442     i46 = i12;
   14443     d41 = +HEAPF32[i46 >> 2];
   14444     d40 = +HEAPF32[i46 + 4 >> 2];
   14445     d44 = +HEAPF32[i13 >> 2];
   14446     d39 = d41 - d33;
   14447     d42 = d40 - d35;
   14448     d41 = d41 - d32;
   14449     d40 = d40 - d36;
   14450     d34 = d34 < d44 ? d34 : d44;
   14451     d44 = (d44 + .004999999888241291) * .75;
   14452     d44 = d44 < 0.0 ? d44 : 0.0;
   14453     d45 = d38 * d39 - d43 * d42;
   14454     d47 = d38 * d41 - d43 * d40;
   14455     d45 = d47 * d28 * d47 + (d30 + d45 * d26 * d45);
   14456     if (d45 > 0.0) {
   14457      d44 = -(d44 < -.20000000298023224 ? -.20000000298023224 : d44) / d45;
   14458     } else {
   14459      d44 = 0.0;
   14460     }
   14461     d47 = d43 * d44;
   14462     d45 = d38 * d44;
   14463     d33 = d33 - d27 * d47;
   14464     d35 = d35 - d27 * d45;
   14465     d29 = d29 - d26 * (d39 * d45 - d42 * d47);
   14466     d32 = d32 + d25 * d47;
   14467     d36 = d36 + d25 * d45;
   14468     d31 = d31 + d28 * (d41 * d45 - d40 * d47);
   14469     i37 = i37 + 1 | 0;
   14470    } while ((i37 | 0) != (i20 | 0));
   14471    i37 = HEAP32[i14 >> 2] | 0;
   14472   }
   14473   d47 = +d33;
   14474   d45 = +d35;
   14475   i46 = i37 + (i17 * 12 | 0) | 0;
   14476   HEAPF32[i46 >> 2] = d47;
   14477   HEAPF32[i46 + 4 >> 2] = d45;
   14478   i46 = HEAP32[i14 >> 2] | 0;
   14479   HEAPF32[i46 + (i17 * 12 | 0) + 8 >> 2] = d29;
   14480   d45 = +d32;
   14481   d47 = +d36;
   14482   i46 = i46 + (i18 * 12 | 0) | 0;
   14483   HEAPF32[i46 >> 2] = d45;
   14484   HEAPF32[i46 + 4 >> 2] = d47;
   14485   HEAPF32[(HEAP32[i14 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2] = d31;
   14486   i16 = i16 + 1 | 0;
   14487  } while ((i16 | 0) < (HEAP32[i6 >> 2] | 0));
   14488  i46 = d34 >= -.007499999832361937;
   14489  STACKTOP = i1;
   14490  return i46 | 0;
   14491 }
   14492 function __ZN15b2ContactSolver24SolvePositionConstraintsEv(i7) {
   14493  i7 = i7 | 0;
   14494  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, i21 = 0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, i26 = 0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, d31 = 0.0, d32 = 0.0, d33 = 0.0, d34 = 0.0, i35 = 0, d36 = 0.0, d37 = 0.0, d38 = 0.0, d39 = 0.0, d40 = 0.0, d41 = 0.0, d42 = 0.0, d43 = 0.0, i44 = 0, d45 = 0.0;
   14495  i1 = STACKTOP;
   14496  STACKTOP = STACKTOP + 64 | 0;
   14497  i4 = i1 + 40 | 0;
   14498  i5 = i1 + 24 | 0;
   14499  i3 = i1;
   14500  i2 = i7 + 48 | 0;
   14501  if ((HEAP32[i2 >> 2] | 0) <= 0) {
   14502   d43 = 0.0;
   14503   i35 = d43 >= -.014999999664723873;
   14504   STACKTOP = i1;
   14505   return i35 | 0;
   14506  }
   14507  i6 = i7 + 36 | 0;
   14508  i9 = i7 + 24 | 0;
   14509  i13 = i4 + 8 | 0;
   14510  i7 = i4 + 12 | 0;
   14511  i8 = i5 + 8 | 0;
   14512  i12 = i5 + 12 | 0;
   14513  i10 = i3 + 8 | 0;
   14514  i11 = i3 + 16 | 0;
   14515  i35 = HEAP32[i9 >> 2] | 0;
   14516  i15 = 0;
   14517  d32 = 0.0;
   14518  do {
   14519   i21 = HEAP32[i6 >> 2] | 0;
   14520   i26 = i21 + (i15 * 88 | 0) | 0;
   14521   i16 = HEAP32[i21 + (i15 * 88 | 0) + 32 >> 2] | 0;
   14522   i14 = HEAP32[i21 + (i15 * 88 | 0) + 36 >> 2] | 0;
   14523   i44 = i21 + (i15 * 88 | 0) + 48 | 0;
   14524   d22 = +HEAPF32[i44 >> 2];
   14525   d23 = +HEAPF32[i44 + 4 >> 2];
   14526   d25 = +HEAPF32[i21 + (i15 * 88 | 0) + 40 >> 2];
   14527   d18 = +HEAPF32[i21 + (i15 * 88 | 0) + 64 >> 2];
   14528   i44 = i21 + (i15 * 88 | 0) + 56 | 0;
   14529   d24 = +HEAPF32[i44 >> 2];
   14530   d19 = +HEAPF32[i44 + 4 >> 2];
   14531   d17 = +HEAPF32[i21 + (i15 * 88 | 0) + 44 >> 2];
   14532   d20 = +HEAPF32[i21 + (i15 * 88 | 0) + 68 >> 2];
   14533   i21 = HEAP32[i21 + (i15 * 88 | 0) + 84 >> 2] | 0;
   14534   i44 = i35 + (i16 * 12 | 0) | 0;
   14535   d28 = +HEAPF32[i44 >> 2];
   14536   d33 = +HEAPF32[i44 + 4 >> 2];
   14537   d29 = +HEAPF32[i35 + (i16 * 12 | 0) + 8 >> 2];
   14538   i44 = i35 + (i14 * 12 | 0) | 0;
   14539   d30 = +HEAPF32[i44 >> 2];
   14540   d34 = +HEAPF32[i44 + 4 >> 2];
   14541   d31 = +HEAPF32[i35 + (i14 * 12 | 0) + 8 >> 2];
   14542   if ((i21 | 0) > 0) {
   14543    d27 = d25 + d17;
   14544    i35 = 0;
   14545    do {
   14546     d41 = +Math_sin(+d29);
   14547     HEAPF32[i13 >> 2] = d41;
   14548     d42 = +Math_cos(+d29);
   14549     HEAPF32[i7 >> 2] = d42;
   14550     d39 = +Math_sin(+d31);
   14551     HEAPF32[i8 >> 2] = d39;
   14552     d38 = +Math_cos(+d31);
   14553     HEAPF32[i12 >> 2] = d38;
   14554     d40 = +(d28 - (d22 * d42 - d23 * d41));
   14555     d41 = +(d33 - (d23 * d42 + d22 * d41));
   14556     i44 = i4;
   14557     HEAPF32[i44 >> 2] = d40;
   14558     HEAPF32[i44 + 4 >> 2] = d41;
   14559     d41 = +(d30 - (d24 * d38 - d19 * d39));
   14560     d39 = +(d34 - (d19 * d38 + d24 * d39));
   14561     i44 = i5;
   14562     HEAPF32[i44 >> 2] = d41;
   14563     HEAPF32[i44 + 4 >> 2] = d39;
   14564     __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK11b2TransformS4_i(i3, i26, i4, i5, i35);
   14565     i44 = i3;
   14566     d39 = +HEAPF32[i44 >> 2];
   14567     d41 = +HEAPF32[i44 + 4 >> 2];
   14568     i44 = i10;
   14569     d38 = +HEAPF32[i44 >> 2];
   14570     d40 = +HEAPF32[i44 + 4 >> 2];
   14571     d42 = +HEAPF32[i11 >> 2];
   14572     d36 = d38 - d28;
   14573     d37 = d40 - d33;
   14574     d38 = d38 - d30;
   14575     d40 = d40 - d34;
   14576     d32 = d32 < d42 ? d32 : d42;
   14577     d42 = (d42 + .004999999888241291) * .20000000298023224;
   14578     d43 = d42 < 0.0 ? d42 : 0.0;
   14579     d42 = d41 * d36 - d39 * d37;
   14580     d45 = d41 * d38 - d39 * d40;
   14581     d42 = d45 * d20 * d45 + (d27 + d42 * d18 * d42);
   14582     if (d42 > 0.0) {
   14583      d42 = -(d43 < -.20000000298023224 ? -.20000000298023224 : d43) / d42;
   14584     } else {
   14585      d42 = 0.0;
   14586     }
   14587     d45 = d39 * d42;
   14588     d43 = d41 * d42;
   14589     d28 = d28 - d25 * d45;
   14590     d33 = d33 - d25 * d43;
   14591     d29 = d29 - d18 * (d36 * d43 - d37 * d45);
   14592     d30 = d30 + d17 * d45;
   14593     d34 = d34 + d17 * d43;
   14594     d31 = d31 + d20 * (d38 * d43 - d40 * d45);
   14595     i35 = i35 + 1 | 0;
   14596    } while ((i35 | 0) != (i21 | 0));
   14597    i35 = HEAP32[i9 >> 2] | 0;
   14598   }
   14599   d45 = +d28;
   14600   d43 = +d33;
   14601   i35 = i35 + (i16 * 12 | 0) | 0;
   14602   HEAPF32[i35 >> 2] = d45;
   14603   HEAPF32[i35 + 4 >> 2] = d43;
   14604   i35 = HEAP32[i9 >> 2] | 0;
   14605   HEAPF32[i35 + (i16 * 12 | 0) + 8 >> 2] = d29;
   14606   d43 = +d30;
   14607   d45 = +d34;
   14608   i35 = i35 + (i14 * 12 | 0) | 0;
   14609   HEAPF32[i35 >> 2] = d43;
   14610   HEAPF32[i35 + 4 >> 2] = d45;
   14611   i35 = HEAP32[i9 >> 2] | 0;
   14612   HEAPF32[i35 + (i14 * 12 | 0) + 8 >> 2] = d31;
   14613   i15 = i15 + 1 | 0;
   14614  } while ((i15 | 0) < (HEAP32[i2 >> 2] | 0));
   14615  i44 = d32 >= -.014999999664723873;
   14616  STACKTOP = i1;
   14617  return i44 | 0;
   14618 }
   14619 function __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2CircleShapeS6_(i1, i7, i6, i22, i5) {
   14620  i1 = i1 | 0;
   14621  i7 = i7 | 0;
   14622  i6 = i6 | 0;
   14623  i22 = i22 | 0;
   14624  i5 = i5 | 0;
   14625  var i2 = 0, i3 = 0, i4 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, i14 = 0, i15 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, d23 = 0.0, d24 = 0.0;
   14626  i4 = STACKTOP;
   14627  i2 = i1 + 60 | 0;
   14628  HEAP32[i2 >> 2] = 0;
   14629  i3 = i22 + 12 | 0;
   14630  d9 = +HEAPF32[i5 + 12 >> 2];
   14631  d23 = +HEAPF32[i3 >> 2];
   14632  d17 = +HEAPF32[i5 + 8 >> 2];
   14633  d18 = +HEAPF32[i22 + 16 >> 2];
   14634  d21 = +HEAPF32[i5 >> 2] + (d9 * d23 - d17 * d18) - +HEAPF32[i6 >> 2];
   14635  d18 = d23 * d17 + d9 * d18 + +HEAPF32[i5 + 4 >> 2] - +HEAPF32[i6 + 4 >> 2];
   14636  d9 = +HEAPF32[i6 + 12 >> 2];
   14637  d17 = +HEAPF32[i6 + 8 >> 2];
   14638  d23 = d21 * d9 + d18 * d17;
   14639  d17 = d9 * d18 - d21 * d17;
   14640  i6 = i7 + 12 | 0;
   14641  i5 = HEAP32[i6 >> 2] | 0;
   14642  i6 = HEAP32[i6 + 4 >> 2] | 0;
   14643  d21 = (HEAP32[tempDoublePtr >> 2] = i5, +HEAPF32[tempDoublePtr >> 2]);
   14644  d18 = (HEAP32[tempDoublePtr >> 2] = i6, +HEAPF32[tempDoublePtr >> 2]);
   14645  i15 = i7 + 20 | 0;
   14646  i14 = HEAP32[i15 >> 2] | 0;
   14647  i15 = HEAP32[i15 + 4 >> 2] | 0;
   14648  d9 = (HEAP32[tempDoublePtr >> 2] = i14, +HEAPF32[tempDoublePtr >> 2]);
   14649  d10 = (HEAP32[tempDoublePtr >> 2] = i15, +HEAPF32[tempDoublePtr >> 2]);
   14650  d8 = d9 - d21;
   14651  d16 = d10 - d18;
   14652  d19 = d8 * (d9 - d23) + d16 * (d10 - d17);
   14653  d13 = d23 - d21;
   14654  d12 = d17 - d18;
   14655  d20 = d13 * d8 + d12 * d16;
   14656  d11 = +HEAPF32[i7 + 8 >> 2] + +HEAPF32[i22 + 8 >> 2];
   14657  if (d20 <= 0.0) {
   14658   if (d13 * d13 + d12 * d12 > d11 * d11) {
   14659    STACKTOP = i4;
   14660    return;
   14661   }
   14662   if ((HEAP8[i7 + 44 | 0] | 0) != 0 ? (i22 = i7 + 28 | 0, d24 = +HEAPF32[i22 >> 2], (d21 - d23) * (d21 - d24) + (d18 - d17) * (d18 - +HEAPF32[i22 + 4 >> 2]) > 0.0) : 0) {
   14663    STACKTOP = i4;
   14664    return;
   14665   }
   14666   HEAP32[i2 >> 2] = 1;
   14667   HEAP32[i1 + 56 >> 2] = 0;
   14668   HEAPF32[i1 + 40 >> 2] = 0.0;
   14669   HEAPF32[i1 + 44 >> 2] = 0.0;
   14670   i14 = i1 + 48 | 0;
   14671   HEAP32[i14 >> 2] = i5;
   14672   HEAP32[i14 + 4 >> 2] = i6;
   14673   i14 = i1 + 16 | 0;
   14674   HEAP32[i14 >> 2] = 0;
   14675   HEAP8[i14] = 0;
   14676   HEAP8[i14 + 1 | 0] = 0;
   14677   HEAP8[i14 + 2 | 0] = 0;
   14678   HEAP8[i14 + 3 | 0] = 0;
   14679   i14 = i3;
   14680   i15 = HEAP32[i14 + 4 >> 2] | 0;
   14681   i22 = i1;
   14682   HEAP32[i22 >> 2] = HEAP32[i14 >> 2];
   14683   HEAP32[i22 + 4 >> 2] = i15;
   14684   STACKTOP = i4;
   14685   return;
   14686  }
   14687  if (d19 <= 0.0) {
   14688   d8 = d23 - d9;
   14689   d12 = d17 - d10;
   14690   if (d8 * d8 + d12 * d12 > d11 * d11) {
   14691    STACKTOP = i4;
   14692    return;
   14693   }
   14694   if ((HEAP8[i7 + 45 | 0] | 0) != 0 ? (i22 = i7 + 36 | 0, d24 = +HEAPF32[i22 >> 2], d8 * (d24 - d9) + d12 * (+HEAPF32[i22 + 4 >> 2] - d10) > 0.0) : 0) {
   14695    STACKTOP = i4;
   14696    return;
   14697   }
   14698   HEAP32[i2 >> 2] = 1;
   14699   HEAP32[i1 + 56 >> 2] = 0;
   14700   HEAPF32[i1 + 40 >> 2] = 0.0;
   14701   HEAPF32[i1 + 44 >> 2] = 0.0;
   14702   i22 = i1 + 48 | 0;
   14703   HEAP32[i22 >> 2] = i14;
   14704   HEAP32[i22 + 4 >> 2] = i15;
   14705   i14 = i1 + 16 | 0;
   14706   HEAP32[i14 >> 2] = 0;
   14707   HEAP8[i14] = 1;
   14708   HEAP8[i14 + 1 | 0] = 0;
   14709   HEAP8[i14 + 2 | 0] = 0;
   14710   HEAP8[i14 + 3 | 0] = 0;
   14711   i14 = i3;
   14712   i15 = HEAP32[i14 + 4 >> 2] | 0;
   14713   i22 = i1;
   14714   HEAP32[i22 >> 2] = HEAP32[i14 >> 2];
   14715   HEAP32[i22 + 4 >> 2] = i15;
   14716   STACKTOP = i4;
   14717   return;
   14718  }
   14719  d24 = d8 * d8 + d16 * d16;
   14720  if (!(d24 > 0.0)) {
   14721   ___assert_fail(5560, 5576, 127, 5616);
   14722  }
   14723  d24 = 1.0 / d24;
   14724  d23 = d23 - (d21 * d19 + d9 * d20) * d24;
   14725  d24 = d17 - (d18 * d19 + d10 * d20) * d24;
   14726  if (d23 * d23 + d24 * d24 > d11 * d11) {
   14727   STACKTOP = i4;
   14728   return;
   14729  }
   14730  d9 = -d16;
   14731  if (d8 * d12 + d13 * d9 < 0.0) {
   14732   d8 = -d8;
   14733  } else {
   14734   d16 = d9;
   14735  }
   14736  d9 = +Math_sqrt(+(d8 * d8 + d16 * d16));
   14737  if (!(d9 < 1.1920928955078125e-7)) {
   14738   d24 = 1.0 / d9;
   14739   d16 = d16 * d24;
   14740   d8 = d8 * d24;
   14741  }
   14742  HEAP32[i2 >> 2] = 1;
   14743  HEAP32[i1 + 56 >> 2] = 1;
   14744  d23 = +d16;
   14745  d24 = +d8;
   14746  i14 = i1 + 40 | 0;
   14747  HEAPF32[i14 >> 2] = d23;
   14748  HEAPF32[i14 + 4 >> 2] = d24;
   14749  i14 = i1 + 48 | 0;
   14750  HEAP32[i14 >> 2] = i5;
   14751  HEAP32[i14 + 4 >> 2] = i6;
   14752  i14 = i1 + 16 | 0;
   14753  HEAP32[i14 >> 2] = 0;
   14754  HEAP8[i14] = 0;
   14755  HEAP8[i14 + 1 | 0] = 0;
   14756  HEAP8[i14 + 2 | 0] = 1;
   14757  HEAP8[i14 + 3 | 0] = 0;
   14758  i14 = i3;
   14759  i15 = HEAP32[i14 + 4 >> 2] | 0;
   14760  i22 = i1;
   14761  HEAP32[i22 >> 2] = HEAP32[i14 >> 2];
   14762  HEAP32[i22 + 4 >> 2] = i15;
   14763  STACKTOP = i4;
   14764  return;
   14765 }
   14766 function __ZN6b2BodyC2EPK9b2BodyDefP7b2World(i1, i2, i5) {
   14767  i1 = i1 | 0;
   14768  i2 = i2 | 0;
   14769  i5 = i5 | 0;
   14770  var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, d13 = 0.0;
   14771  i3 = STACKTOP;
   14772  i9 = i2 + 4 | 0;
   14773  d13 = +HEAPF32[i9 >> 2];
   14774  if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
   14775   ___assert_fail(1496, 1520, 27, 1552);
   14776  }
   14777  d13 = +HEAPF32[i2 + 8 >> 2];
   14778  if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
   14779   ___assert_fail(1496, 1520, 27, 1552);
   14780  }
   14781  i6 = i2 + 16 | 0;
   14782  d13 = +HEAPF32[i6 >> 2];
   14783  if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
   14784   ___assert_fail(1560, 1520, 28, 1552);
   14785  }
   14786  d13 = +HEAPF32[i2 + 20 >> 2];
   14787  if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
   14788   ___assert_fail(1560, 1520, 28, 1552);
   14789  }
   14790  i7 = i2 + 12 | 0;
   14791  d13 = +HEAPF32[i7 >> 2];
   14792  if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
   14793   ___assert_fail(1592, 1520, 29, 1552);
   14794  }
   14795  i8 = i2 + 24 | 0;
   14796  d13 = +HEAPF32[i8 >> 2];
   14797  if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
   14798   ___assert_fail(1616, 1520, 30, 1552);
   14799  }
   14800  i4 = i2 + 32 | 0;
   14801  d13 = +HEAPF32[i4 >> 2];
   14802  if (!(d13 >= 0.0) | d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf ^ 1) {
   14803   ___assert_fail(1648, 1520, 31, 1552);
   14804  }
   14805  i10 = i2 + 28 | 0;
   14806  d13 = +HEAPF32[i10 >> 2];
   14807  if (!(d13 >= 0.0) | d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf ^ 1) {
   14808   ___assert_fail(1712, 1520, 32, 1552);
   14809  }
   14810  i11 = i1 + 4 | 0;
   14811  i12 = (HEAP8[i2 + 39 | 0] | 0) == 0 ? 0 : 8;
   14812  HEAP16[i11 >> 1] = i12;
   14813  if ((HEAP8[i2 + 38 | 0] | 0) != 0) {
   14814   i12 = (i12 & 65535 | 16) & 65535;
   14815   HEAP16[i11 >> 1] = i12;
   14816  }
   14817  if ((HEAP8[i2 + 36 | 0] | 0) != 0) {
   14818   i12 = (i12 & 65535 | 4) & 65535;
   14819   HEAP16[i11 >> 1] = i12;
   14820  }
   14821  if ((HEAP8[i2 + 37 | 0] | 0) != 0) {
   14822   i12 = (i12 & 65535 | 2) & 65535;
   14823   HEAP16[i11 >> 1] = i12;
   14824  }
   14825  if ((HEAP8[i2 + 40 | 0] | 0) != 0) {
   14826   HEAP16[i11 >> 1] = i12 & 65535 | 32;
   14827  }
   14828  HEAP32[i1 + 88 >> 2] = i5;
   14829  i11 = i9;
   14830  i12 = HEAP32[i11 >> 2] | 0;
   14831  i11 = HEAP32[i11 + 4 >> 2] | 0;
   14832  i9 = i1 + 12 | 0;
   14833  HEAP32[i9 >> 2] = i12;
   14834  HEAP32[i9 + 4 >> 2] = i11;
   14835  d13 = +HEAPF32[i7 >> 2];
   14836  HEAPF32[i1 + 20 >> 2] = +Math_sin(+d13);
   14837  HEAPF32[i1 + 24 >> 2] = +Math_cos(+d13);
   14838  HEAPF32[i1 + 28 >> 2] = 0.0;
   14839  HEAPF32[i1 + 32 >> 2] = 0.0;
   14840  i9 = i1 + 36 | 0;
   14841  HEAP32[i9 >> 2] = i12;
   14842  HEAP32[i9 + 4 >> 2] = i11;
   14843  i9 = i1 + 44 | 0;
   14844  HEAP32[i9 >> 2] = i12;
   14845  HEAP32[i9 + 4 >> 2] = i11;
   14846  HEAPF32[i1 + 52 >> 2] = +HEAPF32[i7 >> 2];
   14847  HEAPF32[i1 + 56 >> 2] = +HEAPF32[i7 >> 2];
   14848  HEAPF32[i1 + 60 >> 2] = 0.0;
   14849  HEAP32[i1 + 108 >> 2] = 0;
   14850  HEAP32[i1 + 112 >> 2] = 0;
   14851  HEAP32[i1 + 92 >> 2] = 0;
   14852  HEAP32[i1 + 96 >> 2] = 0;
   14853  i9 = i6;
   14854  i11 = HEAP32[i9 + 4 >> 2] | 0;
   14855  i12 = i1 + 64 | 0;
   14856  HEAP32[i12 >> 2] = HEAP32[i9 >> 2];
   14857  HEAP32[i12 + 4 >> 2] = i11;
   14858  HEAPF32[i1 + 72 >> 2] = +HEAPF32[i8 >> 2];
   14859  HEAPF32[i1 + 132 >> 2] = +HEAPF32[i10 >> 2];
   14860  HEAPF32[i1 + 136 >> 2] = +HEAPF32[i4 >> 2];
   14861  HEAPF32[i1 + 140 >> 2] = +HEAPF32[i2 + 48 >> 2];
   14862  HEAPF32[i1 + 76 >> 2] = 0.0;
   14863  HEAPF32[i1 + 80 >> 2] = 0.0;
   14864  HEAPF32[i1 + 84 >> 2] = 0.0;
   14865  HEAPF32[i1 + 144 >> 2] = 0.0;
   14866  i12 = HEAP32[i2 >> 2] | 0;
   14867  HEAP32[i1 >> 2] = i12;
   14868  i4 = i1 + 116 | 0;
   14869  if ((i12 | 0) == 2) {
   14870   HEAPF32[i4 >> 2] = 1.0;
   14871   HEAPF32[i1 + 120 >> 2] = 1.0;
   14872   i11 = i1 + 124 | 0;
   14873   HEAPF32[i11 >> 2] = 0.0;
   14874   i11 = i1 + 128 | 0;
   14875   HEAPF32[i11 >> 2] = 0.0;
   14876   i11 = i2 + 44 | 0;
   14877   i11 = HEAP32[i11 >> 2] | 0;
   14878   i12 = i1 + 148 | 0;
   14879   HEAP32[i12 >> 2] = i11;
   14880   i12 = i1 + 100 | 0;
   14881   HEAP32[i12 >> 2] = 0;
   14882   i12 = i1 + 104 | 0;
   14883   HEAP32[i12 >> 2] = 0;
   14884   STACKTOP = i3;
   14885   return;
   14886  } else {
   14887   HEAPF32[i4 >> 2] = 0.0;
   14888   HEAPF32[i1 + 120 >> 2] = 0.0;
   14889   i11 = i1 + 124 | 0;
   14890   HEAPF32[i11 >> 2] = 0.0;
   14891   i11 = i1 + 128 | 0;
   14892   HEAPF32[i11 >> 2] = 0.0;
   14893   i11 = i2 + 44 | 0;
   14894   i11 = HEAP32[i11 >> 2] | 0;
   14895   i12 = i1 + 148 | 0;
   14896   HEAP32[i12 >> 2] = i11;
   14897   i12 = i1 + 100 | 0;
   14898   HEAP32[i12 >> 2] = 0;
   14899   i12 = i1 + 104 | 0;
   14900   HEAP32[i12 >> 2] = 0;
   14901   STACKTOP = i3;
   14902   return;
   14903  }
   14904 }
   14905 function __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK11b2TransformS4_i(i2, i1, i13, i12, i15) {
   14906  i2 = i2 | 0;
   14907  i1 = i1 | 0;
   14908  i13 = i13 | 0;
   14909  i12 = i12 | 0;
   14910  i15 = i15 | 0;
   14911  var i3 = 0, d4 = 0.0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i14 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, i19 = 0, i20 = 0;
   14912  i3 = STACKTOP;
   14913  if ((HEAP32[i1 + 84 >> 2] | 0) <= 0) {
   14914   ___assert_fail(6752, 6520, 617, 6776);
   14915  }
   14916  i14 = HEAP32[i1 + 72 >> 2] | 0;
   14917  if ((i14 | 0) == 1) {
   14918   i19 = i13 + 12 | 0;
   14919   d5 = +HEAPF32[i19 >> 2];
   14920   d6 = +HEAPF32[i1 + 16 >> 2];
   14921   i14 = i13 + 8 | 0;
   14922   d7 = +HEAPF32[i14 >> 2];
   14923   d9 = +HEAPF32[i1 + 20 >> 2];
   14924   d4 = d5 * d6 - d7 * d9;
   14925   d9 = d6 * d7 + d5 * d9;
   14926   d5 = +d4;
   14927   d7 = +d9;
   14928   i20 = i2;
   14929   HEAPF32[i20 >> 2] = d5;
   14930   HEAPF32[i20 + 4 >> 2] = d7;
   14931   d7 = +HEAPF32[i19 >> 2];
   14932   d5 = +HEAPF32[i1 + 24 >> 2];
   14933   d6 = +HEAPF32[i14 >> 2];
   14934   d8 = +HEAPF32[i1 + 28 >> 2];
   14935   d16 = +HEAPF32[i12 + 12 >> 2];
   14936   d18 = +HEAPF32[i1 + (i15 << 3) >> 2];
   14937   d17 = +HEAPF32[i12 + 8 >> 2];
   14938   d11 = +HEAPF32[i1 + (i15 << 3) + 4 >> 2];
   14939   d10 = +HEAPF32[i12 >> 2] + (d16 * d18 - d17 * d11);
   14940   d11 = d18 * d17 + d16 * d11 + +HEAPF32[i12 + 4 >> 2];
   14941   HEAPF32[i2 + 16 >> 2] = d4 * (d10 - (+HEAPF32[i13 >> 2] + (d7 * d5 - d6 * d8))) + (d11 - (d5 * d6 + d7 * d8 + +HEAPF32[i13 + 4 >> 2])) * d9 - +HEAPF32[i1 + 76 >> 2] - +HEAPF32[i1 + 80 >> 2];
   14942   d10 = +d10;
   14943   d11 = +d11;
   14944   i15 = i2 + 8 | 0;
   14945   HEAPF32[i15 >> 2] = d10;
   14946   HEAPF32[i15 + 4 >> 2] = d11;
   14947   STACKTOP = i3;
   14948   return;
   14949  } else if ((i14 | 0) == 2) {
   14950   i19 = i12 + 12 | 0;
   14951   d7 = +HEAPF32[i19 >> 2];
   14952   d8 = +HEAPF32[i1 + 16 >> 2];
   14953   i20 = i12 + 8 | 0;
   14954   d9 = +HEAPF32[i20 >> 2];
   14955   d18 = +HEAPF32[i1 + 20 >> 2];
   14956   d17 = d7 * d8 - d9 * d18;
   14957   d18 = d8 * d9 + d7 * d18;
   14958   d7 = +d17;
   14959   d9 = +d18;
   14960   i14 = i2;
   14961   HEAPF32[i14 >> 2] = d7;
   14962   HEAPF32[i14 + 4 >> 2] = d9;
   14963   d9 = +HEAPF32[i19 >> 2];
   14964   d7 = +HEAPF32[i1 + 24 >> 2];
   14965   d8 = +HEAPF32[i20 >> 2];
   14966   d10 = +HEAPF32[i1 + 28 >> 2];
   14967   d6 = +HEAPF32[i13 + 12 >> 2];
   14968   d4 = +HEAPF32[i1 + (i15 << 3) >> 2];
   14969   d5 = +HEAPF32[i13 + 8 >> 2];
   14970   d16 = +HEAPF32[i1 + (i15 << 3) + 4 >> 2];
   14971   d11 = +HEAPF32[i13 >> 2] + (d6 * d4 - d5 * d16);
   14972   d16 = d4 * d5 + d6 * d16 + +HEAPF32[i13 + 4 >> 2];
   14973   HEAPF32[i2 + 16 >> 2] = d17 * (d11 - (+HEAPF32[i12 >> 2] + (d9 * d7 - d8 * d10))) + (d16 - (d7 * d8 + d9 * d10 + +HEAPF32[i12 + 4 >> 2])) * d18 - +HEAPF32[i1 + 76 >> 2] - +HEAPF32[i1 + 80 >> 2];
   14974   d11 = +d11;
   14975   d16 = +d16;
   14976   i20 = i2 + 8 | 0;
   14977   HEAPF32[i20 >> 2] = d11;
   14978   HEAPF32[i20 + 4 >> 2] = d16;
   14979   d17 = +-d17;
   14980   d18 = +-d18;
   14981   i20 = i2;
   14982   HEAPF32[i20 >> 2] = d17;
   14983   HEAPF32[i20 + 4 >> 2] = d18;
   14984   STACKTOP = i3;
   14985   return;
   14986  } else if ((i14 | 0) == 0) {
   14987   d7 = +HEAPF32[i13 + 12 >> 2];
   14988   d8 = +HEAPF32[i1 + 24 >> 2];
   14989   d18 = +HEAPF32[i13 + 8 >> 2];
   14990   d6 = +HEAPF32[i1 + 28 >> 2];
   14991   d4 = +HEAPF32[i13 >> 2] + (d7 * d8 - d18 * d6);
   14992   d6 = d8 * d18 + d7 * d6 + +HEAPF32[i13 + 4 >> 2];
   14993   d7 = +HEAPF32[i12 + 12 >> 2];
   14994   d18 = +HEAPF32[i1 >> 2];
   14995   d8 = +HEAPF32[i12 + 8 >> 2];
   14996   d9 = +HEAPF32[i1 + 4 >> 2];
   14997   d5 = +HEAPF32[i12 >> 2] + (d7 * d18 - d8 * d9);
   14998   d9 = d18 * d8 + d7 * d9 + +HEAPF32[i12 + 4 >> 2];
   14999   d7 = d5 - d4;
   15000   d8 = d9 - d6;
   15001   d18 = +d7;
   15002   d10 = +d8;
   15003   i20 = i2;
   15004   HEAPF32[i20 >> 2] = d18;
   15005   HEAPF32[i20 + 4 >> 2] = d10;
   15006   d10 = +Math_sqrt(+(d7 * d7 + d8 * d8));
   15007   if (d10 < 1.1920928955078125e-7) {
   15008    d10 = d7;
   15009    d11 = d8;
   15010   } else {
   15011    d11 = 1.0 / d10;
   15012    d10 = d7 * d11;
   15013    HEAPF32[i2 >> 2] = d10;
   15014    d11 = d8 * d11;
   15015    HEAPF32[i2 + 4 >> 2] = d11;
   15016   }
   15017   d17 = +((d4 + d5) * .5);
   15018   d18 = +((d6 + d9) * .5);
   15019   i20 = i2 + 8 | 0;
   15020   HEAPF32[i20 >> 2] = d17;
   15021   HEAPF32[i20 + 4 >> 2] = d18;
   15022   HEAPF32[i2 + 16 >> 2] = d7 * d10 + d8 * d11 - +HEAPF32[i1 + 76 >> 2] - +HEAPF32[i1 + 80 >> 2];
   15023   STACKTOP = i3;
   15024   return;
   15025  } else {
   15026   STACKTOP = i3;
   15027   return;
   15028  }
   15029 }
   15030 function __ZNSt3__118__insertion_sort_3IRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i1, i2) {
   15031  i5 = i5 | 0;
   15032  i1 = i1 | 0;
   15033  i2 = i2 | 0;
   15034  var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0;
   15035  i4 = STACKTOP;
   15036  STACKTOP = STACKTOP + 32 | 0;
   15037  i6 = i4 + 12 | 0;
   15038  i3 = i4;
   15039  i7 = i5 + 24 | 0;
   15040  i8 = i5 + 12 | 0;
   15041  i10 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i5) | 0;
   15042  i9 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i8) | 0;
   15043  do {
   15044   if (i10) {
   15045    if (i9) {
   15046     HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   15047     HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   15048     HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   15049     HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   15050     HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   15051     HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   15052     HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   15053     HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   15054     HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   15055     break;
   15056    }
   15057    HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   15058    HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   15059    HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   15060    HEAP32[i5 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
   15061    HEAP32[i5 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
   15062    HEAP32[i5 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
   15063    HEAP32[i8 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   15064    HEAP32[i8 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   15065    HEAP32[i8 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   15066    if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i8) | 0) {
   15067     HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
   15068     HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
   15069     HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
   15070     HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   15071     HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   15072     HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   15073     HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   15074     HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   15075     HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   15076    }
   15077   } else {
   15078    if (i9) {
   15079     HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
   15080     HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
   15081     HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
   15082     HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   15083     HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   15084     HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   15085     HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   15086     HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   15087     HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   15088     if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i5) | 0) {
   15089      HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
   15090      HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
   15091      HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
   15092      HEAP32[i5 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
   15093      HEAP32[i5 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
   15094      HEAP32[i5 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
   15095      HEAP32[i8 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   15096      HEAP32[i8 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   15097      HEAP32[i8 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   15098     }
   15099    }
   15100   }
   15101  } while (0);
   15102  i6 = i5 + 36 | 0;
   15103  if ((i6 | 0) == (i1 | 0)) {
   15104   STACKTOP = i4;
   15105   return;
   15106  }
   15107  while (1) {
   15108   if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i7) | 0) {
   15109    HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   15110    HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   15111    HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   15112    i8 = i6;
   15113    while (1) {
   15114     HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
   15115     HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
   15116     HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
   15117     if ((i7 | 0) == (i5 | 0)) {
   15118      break;
   15119     }
   15120     i8 = i7 + -12 | 0;
   15121     if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i3, i8) | 0) {
   15122      i10 = i7;
   15123      i7 = i8;
   15124      i8 = i10;
   15125     } else {
   15126      break;
   15127     }
   15128    }
   15129    HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
   15130    HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
   15131    HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
   15132   }
   15133   i7 = i6 + 12 | 0;
   15134   if ((i7 | 0) == (i1 | 0)) {
   15135    break;
   15136   } else {
   15137    i10 = i6;
   15138    i6 = i7;
   15139    i7 = i10;
   15140   }
   15141  }
   15142  STACKTOP = i4;
   15143  return;
   15144 }
   15145 function __ZNK20b2SeparationFunction8EvaluateEiif(i10, i12, i11, d9) {
   15146  i10 = i10 | 0;
   15147  i12 = i12 | 0;
   15148  i11 = i11 | 0;
   15149  d9 = +d9;
   15150  var d1 = 0.0, d2 = 0.0, d3 = 0.0, d4 = 0.0, d5 = 0.0, d6 = 0.0, i7 = 0, d8 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, i17 = 0, d18 = 0.0, d19 = 0.0;
   15151  i7 = STACKTOP;
   15152  d14 = 1.0 - d9;
   15153  d3 = d14 * +HEAPF32[i10 + 32 >> 2] + +HEAPF32[i10 + 36 >> 2] * d9;
   15154  d4 = +Math_sin(+d3);
   15155  d3 = +Math_cos(+d3);
   15156  d5 = +HEAPF32[i10 + 8 >> 2];
   15157  d6 = +HEAPF32[i10 + 12 >> 2];
   15158  d2 = d14 * +HEAPF32[i10 + 16 >> 2] + +HEAPF32[i10 + 24 >> 2] * d9 - (d3 * d5 - d4 * d6);
   15159  d6 = d14 * +HEAPF32[i10 + 20 >> 2] + +HEAPF32[i10 + 28 >> 2] * d9 - (d4 * d5 + d3 * d6);
   15160  d5 = d14 * +HEAPF32[i10 + 68 >> 2] + +HEAPF32[i10 + 72 >> 2] * d9;
   15161  d1 = +Math_sin(+d5);
   15162  d5 = +Math_cos(+d5);
   15163  d15 = +HEAPF32[i10 + 44 >> 2];
   15164  d16 = +HEAPF32[i10 + 48 >> 2];
   15165  d8 = d14 * +HEAPF32[i10 + 52 >> 2] + +HEAPF32[i10 + 60 >> 2] * d9 - (d5 * d15 - d1 * d16);
   15166  d9 = d14 * +HEAPF32[i10 + 56 >> 2] + +HEAPF32[i10 + 64 >> 2] * d9 - (d1 * d15 + d5 * d16);
   15167  i17 = HEAP32[i10 + 80 >> 2] | 0;
   15168  if ((i17 | 0) == 0) {
   15169   d14 = +HEAPF32[i10 + 92 >> 2];
   15170   d13 = +HEAPF32[i10 + 96 >> 2];
   15171   i17 = HEAP32[i10 >> 2] | 0;
   15172   if (!((i12 | 0) > -1)) {
   15173    ___assert_fail(3640, 3672, 103, 3704);
   15174   }
   15175   if ((HEAP32[i17 + 20 >> 2] | 0) <= (i12 | 0)) {
   15176    ___assert_fail(3640, 3672, 103, 3704);
   15177   }
   15178   i17 = (HEAP32[i17 + 16 >> 2] | 0) + (i12 << 3) | 0;
   15179   d15 = +HEAPF32[i17 >> 2];
   15180   d16 = +HEAPF32[i17 + 4 >> 2];
   15181   i10 = HEAP32[i10 + 4 >> 2] | 0;
   15182   if (!((i11 | 0) > -1)) {
   15183    ___assert_fail(3640, 3672, 103, 3704);
   15184   }
   15185   if ((HEAP32[i10 + 20 >> 2] | 0) <= (i11 | 0)) {
   15186    ___assert_fail(3640, 3672, 103, 3704);
   15187   }
   15188   i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i11 << 3) | 0;
   15189   d19 = +HEAPF32[i17 >> 2];
   15190   d18 = +HEAPF32[i17 + 4 >> 2];
   15191   d16 = d14 * (d8 + (d5 * d19 - d1 * d18) - (d2 + (d3 * d15 - d4 * d16))) + d13 * (d9 + (d1 * d19 + d5 * d18) - (d6 + (d4 * d15 + d3 * d16)));
   15192   STACKTOP = i7;
   15193   return +d16;
   15194  } else if ((i17 | 0) == 1) {
   15195   d14 = +HEAPF32[i10 + 92 >> 2];
   15196   d13 = +HEAPF32[i10 + 96 >> 2];
   15197   d16 = +HEAPF32[i10 + 84 >> 2];
   15198   d15 = +HEAPF32[i10 + 88 >> 2];
   15199   i10 = HEAP32[i10 + 4 >> 2] | 0;
   15200   if (!((i11 | 0) > -1)) {
   15201    ___assert_fail(3640, 3672, 103, 3704);
   15202   }
   15203   if ((HEAP32[i10 + 20 >> 2] | 0) <= (i11 | 0)) {
   15204    ___assert_fail(3640, 3672, 103, 3704);
   15205   }
   15206   i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i11 << 3) | 0;
   15207   d18 = +HEAPF32[i17 >> 2];
   15208   d19 = +HEAPF32[i17 + 4 >> 2];
   15209   d19 = (d3 * d14 - d4 * d13) * (d8 + (d5 * d18 - d1 * d19) - (d2 + (d3 * d16 - d4 * d15))) + (d4 * d14 + d3 * d13) * (d9 + (d1 * d18 + d5 * d19) - (d6 + (d4 * d16 + d3 * d15)));
   15210   STACKTOP = i7;
   15211   return +d19;
   15212  } else if ((i17 | 0) == 2) {
   15213   d16 = +HEAPF32[i10 + 92 >> 2];
   15214   d15 = +HEAPF32[i10 + 96 >> 2];
   15215   d14 = +HEAPF32[i10 + 84 >> 2];
   15216   d13 = +HEAPF32[i10 + 88 >> 2];
   15217   i10 = HEAP32[i10 >> 2] | 0;
   15218   if (!((i12 | 0) > -1)) {
   15219    ___assert_fail(3640, 3672, 103, 3704);
   15220   }
   15221   if ((HEAP32[i10 + 20 >> 2] | 0) <= (i12 | 0)) {
   15222    ___assert_fail(3640, 3672, 103, 3704);
   15223   }
   15224   i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i12 << 3) | 0;
   15225   d18 = +HEAPF32[i17 >> 2];
   15226   d19 = +HEAPF32[i17 + 4 >> 2];
   15227   d19 = (d5 * d16 - d1 * d15) * (d2 + (d3 * d18 - d4 * d19) - (d8 + (d5 * d14 - d1 * d13))) + (d1 * d16 + d5 * d15) * (d6 + (d4 * d18 + d3 * d19) - (d9 + (d1 * d14 + d5 * d13)));
   15228   STACKTOP = i7;
   15229   return +d19;
   15230  } else {
   15231   ___assert_fail(3616, 3560, 242, 3624);
   15232  }
   15233  return 0.0;
   15234 }
   15235 function __ZN6b2Body13ResetMassDataEv(i2) {
   15236  i2 = i2 | 0;
   15237  var d1 = 0.0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, d14 = 0.0, d15 = 0.0, d16 = 0.0, i17 = 0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0;
   15238  i3 = STACKTOP;
   15239  STACKTOP = STACKTOP + 16 | 0;
   15240  i10 = i3;
   15241  i8 = i2 + 116 | 0;
   15242  i9 = i2 + 120 | 0;
   15243  i4 = i2 + 124 | 0;
   15244  i5 = i2 + 128 | 0;
   15245  i6 = i2 + 28 | 0;
   15246  HEAPF32[i6 >> 2] = 0.0;
   15247  HEAPF32[i2 + 32 >> 2] = 0.0;
   15248  HEAP32[i8 + 0 >> 2] = 0;
   15249  HEAP32[i8 + 4 >> 2] = 0;
   15250  HEAP32[i8 + 8 >> 2] = 0;
   15251  HEAP32[i8 + 12 >> 2] = 0;
   15252  i11 = HEAP32[i2 >> 2] | 0;
   15253  if ((i11 | 0) == 2) {
   15254   i17 = 3784;
   15255   d16 = +HEAPF32[i17 >> 2];
   15256   d18 = +HEAPF32[i17 + 4 >> 2];
   15257   i17 = HEAP32[i2 + 100 >> 2] | 0;
   15258   if ((i17 | 0) != 0) {
   15259    i11 = i10 + 4 | 0;
   15260    i12 = i10 + 8 | 0;
   15261    i13 = i10 + 12 | 0;
   15262    d14 = 0.0;
   15263    d15 = 0.0;
   15264    do {
   15265     d19 = +HEAPF32[i17 >> 2];
   15266     if (!(d19 == 0.0)) {
   15267      i20 = HEAP32[i17 + 12 >> 2] | 0;
   15268      FUNCTION_TABLE_viid[HEAP32[(HEAP32[i20 >> 2] | 0) + 28 >> 2] & 3](i20, i10, d19);
   15269      d14 = +HEAPF32[i10 >> 2];
   15270      d15 = d14 + +HEAPF32[i8 >> 2];
   15271      HEAPF32[i8 >> 2] = d15;
   15272      d16 = d16 + d14 * +HEAPF32[i11 >> 2];
   15273      d18 = d18 + d14 * +HEAPF32[i12 >> 2];
   15274      d14 = +HEAPF32[i13 >> 2] + +HEAPF32[i4 >> 2];
   15275      HEAPF32[i4 >> 2] = d14;
   15276     }
   15277     i17 = HEAP32[i17 + 4 >> 2] | 0;
   15278    } while ((i17 | 0) != 0);
   15279    if (d15 > 0.0) {
   15280     d19 = 1.0 / d15;
   15281     HEAPF32[i9 >> 2] = d19;
   15282     d16 = d16 * d19;
   15283     d18 = d18 * d19;
   15284    } else {
   15285     i7 = 11;
   15286    }
   15287   } else {
   15288    d14 = 0.0;
   15289    i7 = 11;
   15290   }
   15291   if ((i7 | 0) == 11) {
   15292    HEAPF32[i8 >> 2] = 1.0;
   15293    HEAPF32[i9 >> 2] = 1.0;
   15294    d15 = 1.0;
   15295   }
   15296   do {
   15297    if (d14 > 0.0 ? (HEAP16[i2 + 4 >> 1] & 16) == 0 : 0) {
   15298     d14 = d14 - (d18 * d18 + d16 * d16) * d15;
   15299     HEAPF32[i4 >> 2] = d14;
   15300     if (d14 > 0.0) {
   15301      d1 = 1.0 / d14;
   15302      break;
   15303     } else {
   15304      ___assert_fail(1872, 1520, 319, 1856);
   15305     }
   15306    } else {
   15307     i7 = 17;
   15308    }
   15309   } while (0);
   15310   if ((i7 | 0) == 17) {
   15311    HEAPF32[i4 >> 2] = 0.0;
   15312    d1 = 0.0;
   15313   }
   15314   HEAPF32[i5 >> 2] = d1;
   15315   i20 = i2 + 44 | 0;
   15316   i17 = i20;
   15317   d19 = +HEAPF32[i17 >> 2];
   15318   d14 = +HEAPF32[i17 + 4 >> 2];
   15319   d21 = +d16;
   15320   d1 = +d18;
   15321   i17 = i6;
   15322   HEAPF32[i17 >> 2] = d21;
   15323   HEAPF32[i17 + 4 >> 2] = d1;
   15324   d1 = +HEAPF32[i2 + 24 >> 2];
   15325   d21 = +HEAPF32[i2 + 20 >> 2];
   15326   d15 = +HEAPF32[i2 + 12 >> 2] + (d1 * d16 - d21 * d18);
   15327   d16 = d16 * d21 + d1 * d18 + +HEAPF32[i2 + 16 >> 2];
   15328   d1 = +d15;
   15329   d18 = +d16;
   15330   HEAPF32[i20 >> 2] = d1;
   15331   HEAPF32[i20 + 4 >> 2] = d18;
   15332   i20 = i2 + 36 | 0;
   15333   HEAPF32[i20 >> 2] = d1;
   15334   HEAPF32[i20 + 4 >> 2] = d18;
   15335   d18 = +HEAPF32[i2 + 72 >> 2];
   15336   i20 = i2 + 64 | 0;
   15337   HEAPF32[i20 >> 2] = +HEAPF32[i20 >> 2] - d18 * (d16 - d14);
   15338   i20 = i2 + 68 | 0;
   15339   HEAPF32[i20 >> 2] = d18 * (d15 - d19) + +HEAPF32[i20 >> 2];
   15340   STACKTOP = i3;
   15341   return;
   15342  } else if ((i11 | 0) == 1 | (i11 | 0) == 0) {
   15343   i17 = i2 + 12 | 0;
   15344   i13 = HEAP32[i17 >> 2] | 0;
   15345   i17 = HEAP32[i17 + 4 >> 2] | 0;
   15346   i20 = i2 + 36 | 0;
   15347   HEAP32[i20 >> 2] = i13;
   15348   HEAP32[i20 + 4 >> 2] = i17;
   15349   i20 = i2 + 44 | 0;
   15350   HEAP32[i20 >> 2] = i13;
   15351   HEAP32[i20 + 4 >> 2] = i17;
   15352   HEAPF32[i2 + 52 >> 2] = +HEAPF32[i2 + 56 >> 2];
   15353   STACKTOP = i3;
   15354   return;
   15355  } else {
   15356   ___assert_fail(1824, 1520, 284, 1856);
   15357  }
   15358 }
   15359 function __ZN9b2Contact6UpdateEP17b2ContactListener(i1, i4) {
   15360  i1 = i1 | 0;
   15361  i4 = i4 | 0;
   15362  var i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0;
   15363  i3 = STACKTOP;
   15364  STACKTOP = STACKTOP + 64 | 0;
   15365  i2 = i3;
   15366  i10 = i1 + 64 | 0;
   15367  i6 = i2 + 0 | 0;
   15368  i7 = i10 + 0 | 0;
   15369  i5 = i6 + 64 | 0;
   15370  do {
   15371   HEAP32[i6 >> 2] = HEAP32[i7 >> 2];
   15372   i6 = i6 + 4 | 0;
   15373   i7 = i7 + 4 | 0;
   15374  } while ((i6 | 0) < (i5 | 0));
   15375  i6 = i1 + 4 | 0;
   15376  i11 = HEAP32[i6 >> 2] | 0;
   15377  HEAP32[i6 >> 2] = i11 | 4;
   15378  i11 = i11 >>> 1;
   15379  i14 = HEAP32[i1 + 48 >> 2] | 0;
   15380  i15 = HEAP32[i1 + 52 >> 2] | 0;
   15381  i5 = (HEAP8[i15 + 38 | 0] | HEAP8[i14 + 38 | 0]) << 24 >> 24 != 0;
   15382  i8 = HEAP32[i14 + 8 >> 2] | 0;
   15383  i7 = HEAP32[i15 + 8 >> 2] | 0;
   15384  i12 = i8 + 12 | 0;
   15385  i13 = i7 + 12 | 0;
   15386  if (!i5) {
   15387   FUNCTION_TABLE_viiii[HEAP32[HEAP32[i1 >> 2] >> 2] & 15](i1, i10, i12, i13);
   15388   i12 = i1 + 124 | 0;
   15389   i10 = (HEAP32[i12 >> 2] | 0) > 0;
   15390   L4 : do {
   15391    if (i10) {
   15392     i19 = HEAP32[i2 + 60 >> 2] | 0;
   15393     if ((i19 | 0) > 0) {
   15394      i18 = 0;
   15395     } else {
   15396      i9 = 0;
   15397      while (1) {
   15398       HEAPF32[i1 + (i9 * 20 | 0) + 72 >> 2] = 0.0;
   15399       HEAPF32[i1 + (i9 * 20 | 0) + 76 >> 2] = 0.0;
   15400       i9 = i9 + 1 | 0;
   15401       if ((i9 | 0) >= (HEAP32[i12 >> 2] | 0)) {
   15402        break L4;
   15403       }
   15404      }
   15405     }
   15406     do {
   15407      i16 = i1 + (i18 * 20 | 0) + 72 | 0;
   15408      HEAPF32[i16 >> 2] = 0.0;
   15409      i15 = i1 + (i18 * 20 | 0) + 76 | 0;
   15410      HEAPF32[i15 >> 2] = 0.0;
   15411      i14 = HEAP32[i1 + (i18 * 20 | 0) + 80 >> 2] | 0;
   15412      i17 = 0;
   15413      while (1) {
   15414       i13 = i17 + 1 | 0;
   15415       if ((HEAP32[i2 + (i17 * 20 | 0) + 16 >> 2] | 0) == (i14 | 0)) {
   15416        i9 = 7;
   15417        break;
   15418       }
   15419       if ((i13 | 0) < (i19 | 0)) {
   15420        i17 = i13;
   15421       } else {
   15422        break;
   15423       }
   15424      }
   15425      if ((i9 | 0) == 7) {
   15426       i9 = 0;
   15427       HEAPF32[i16 >> 2] = +HEAPF32[i2 + (i17 * 20 | 0) + 8 >> 2];
   15428       HEAPF32[i15 >> 2] = +HEAPF32[i2 + (i17 * 20 | 0) + 12 >> 2];
   15429      }
   15430      i18 = i18 + 1 | 0;
   15431     } while ((i18 | 0) < (HEAP32[i12 >> 2] | 0));
   15432    }
   15433   } while (0);
   15434   i9 = i11 & 1;
   15435   if (i10 ^ (i9 | 0) != 0) {
   15436    i11 = i8 + 4 | 0;
   15437    i12 = HEAPU16[i11 >> 1] | 0;
   15438    if ((i12 & 2 | 0) == 0) {
   15439     HEAP16[i11 >> 1] = i12 | 2;
   15440     HEAPF32[i8 + 144 >> 2] = 0.0;
   15441    }
   15442    i8 = i7 + 4 | 0;
   15443    i11 = HEAPU16[i8 >> 1] | 0;
   15444    if ((i11 & 2 | 0) == 0) {
   15445     HEAP16[i8 >> 1] = i11 | 2;
   15446     HEAPF32[i7 + 144 >> 2] = 0.0;
   15447    }
   15448   }
   15449  } else {
   15450   i10 = __Z13b2TestOverlapPK7b2ShapeiS1_iRK11b2TransformS4_(HEAP32[i14 + 12 >> 2] | 0, HEAP32[i1 + 56 >> 2] | 0, HEAP32[i15 + 12 >> 2] | 0, HEAP32[i1 + 60 >> 2] | 0, i12, i13) | 0;
   15451   HEAP32[i1 + 124 >> 2] = 0;
   15452   i9 = i11 & 1;
   15453  }
   15454  i7 = HEAP32[i6 >> 2] | 0;
   15455  HEAP32[i6 >> 2] = i10 ? i7 | 2 : i7 & -3;
   15456  i8 = (i9 | 0) == 0;
   15457  i6 = i10 ^ 1;
   15458  i7 = (i4 | 0) == 0;
   15459  if (!(i8 ^ 1 | i6 | i7)) {
   15460   FUNCTION_TABLE_vii[HEAP32[(HEAP32[i4 >> 2] | 0) + 8 >> 2] & 15](i4, i1);
   15461  }
   15462  if (!(i8 | i10 | i7)) {
   15463   FUNCTION_TABLE_vii[HEAP32[(HEAP32[i4 >> 2] | 0) + 12 >> 2] & 15](i4, i1);
   15464  }
   15465  if (i5 | i6 | i7) {
   15466   STACKTOP = i3;
   15467   return;
   15468  }
   15469  FUNCTION_TABLE_viii[HEAP32[(HEAP32[i4 >> 2] | 0) + 16 >> 2] & 3](i4, i1, i2);
   15470  STACKTOP = i3;
   15471  return;
   15472 }
   15473 function __ZN13b2DynamicTree10RemoveLeafEi(i1, i12) {
   15474  i1 = i1 | 0;
   15475  i12 = i12 | 0;
   15476  var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i13 = 0;
   15477  i2 = STACKTOP;
   15478  if ((HEAP32[i1 >> 2] | 0) == (i12 | 0)) {
   15479   HEAP32[i1 >> 2] = -1;
   15480   STACKTOP = i2;
   15481   return;
   15482  }
   15483  i3 = i1 + 4 | 0;
   15484  i5 = HEAP32[i3 >> 2] | 0;
   15485  i6 = HEAP32[i5 + (i12 * 36 | 0) + 20 >> 2] | 0;
   15486  i4 = i5 + (i6 * 36 | 0) + 20 | 0;
   15487  i7 = HEAP32[i4 >> 2] | 0;
   15488  i13 = HEAP32[i5 + (i6 * 36 | 0) + 24 >> 2] | 0;
   15489  if ((i13 | 0) == (i12 | 0)) {
   15490   i13 = HEAP32[i5 + (i6 * 36 | 0) + 28 >> 2] | 0;
   15491  }
   15492  if ((i7 | 0) == -1) {
   15493   HEAP32[i1 >> 2] = i13;
   15494   HEAP32[i5 + (i13 * 36 | 0) + 20 >> 2] = -1;
   15495   if (!((i6 | 0) > -1)) {
   15496    ___assert_fail(3e3, 2944, 97, 3040);
   15497   }
   15498   if ((HEAP32[i1 + 12 >> 2] | 0) <= (i6 | 0)) {
   15499    ___assert_fail(3e3, 2944, 97, 3040);
   15500   }
   15501   i3 = i1 + 8 | 0;
   15502   if ((HEAP32[i3 >> 2] | 0) <= 0) {
   15503    ___assert_fail(3056, 2944, 98, 3040);
   15504   }
   15505   i13 = i1 + 16 | 0;
   15506   HEAP32[i4 >> 2] = HEAP32[i13 >> 2];
   15507   HEAP32[i5 + (i6 * 36 | 0) + 32 >> 2] = -1;
   15508   HEAP32[i13 >> 2] = i6;
   15509   HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + -1;
   15510   STACKTOP = i2;
   15511   return;
   15512  }
   15513  i12 = i5 + (i7 * 36 | 0) + 24 | 0;
   15514  if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
   15515   HEAP32[i12 >> 2] = i13;
   15516  } else {
   15517   HEAP32[i5 + (i7 * 36 | 0) + 28 >> 2] = i13;
   15518  }
   15519  HEAP32[i5 + (i13 * 36 | 0) + 20 >> 2] = i7;
   15520  if (!((i6 | 0) > -1)) {
   15521   ___assert_fail(3e3, 2944, 97, 3040);
   15522  }
   15523  if ((HEAP32[i1 + 12 >> 2] | 0) <= (i6 | 0)) {
   15524   ___assert_fail(3e3, 2944, 97, 3040);
   15525  }
   15526  i12 = i1 + 8 | 0;
   15527  if ((HEAP32[i12 >> 2] | 0) <= 0) {
   15528   ___assert_fail(3056, 2944, 98, 3040);
   15529  }
   15530  i13 = i1 + 16 | 0;
   15531  HEAP32[i4 >> 2] = HEAP32[i13 >> 2];
   15532  HEAP32[i5 + (i6 * 36 | 0) + 32 >> 2] = -1;
   15533  HEAP32[i13 >> 2] = i6;
   15534  HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + -1;
   15535  do {
   15536   i4 = __ZN13b2DynamicTree7BalanceEi(i1, i7) | 0;
   15537   i7 = HEAP32[i3 >> 2] | 0;
   15538   i6 = HEAP32[i7 + (i4 * 36 | 0) + 24 >> 2] | 0;
   15539   i5 = HEAP32[i7 + (i4 * 36 | 0) + 28 >> 2] | 0;
   15540   d10 = +HEAPF32[i7 + (i6 * 36 | 0) >> 2];
   15541   d11 = +HEAPF32[i7 + (i5 * 36 | 0) >> 2];
   15542   d9 = +HEAPF32[i7 + (i6 * 36 | 0) + 4 >> 2];
   15543   d8 = +HEAPF32[i7 + (i5 * 36 | 0) + 4 >> 2];
   15544   d10 = +(d10 < d11 ? d10 : d11);
   15545   d11 = +(d9 < d8 ? d9 : d8);
   15546   i13 = i7 + (i4 * 36 | 0) | 0;
   15547   HEAPF32[i13 >> 2] = d10;
   15548   HEAPF32[i13 + 4 >> 2] = d11;
   15549   d11 = +HEAPF32[i7 + (i6 * 36 | 0) + 8 >> 2];
   15550   d10 = +HEAPF32[i7 + (i5 * 36 | 0) + 8 >> 2];
   15551   d9 = +HEAPF32[i7 + (i6 * 36 | 0) + 12 >> 2];
   15552   d8 = +HEAPF32[i7 + (i5 * 36 | 0) + 12 >> 2];
   15553   d10 = +(d11 > d10 ? d11 : d10);
   15554   d11 = +(d9 > d8 ? d9 : d8);
   15555   i7 = i7 + (i4 * 36 | 0) + 8 | 0;
   15556   HEAPF32[i7 >> 2] = d10;
   15557   HEAPF32[i7 + 4 >> 2] = d11;
   15558   i7 = HEAP32[i3 >> 2] | 0;
   15559   i6 = HEAP32[i7 + (i6 * 36 | 0) + 32 >> 2] | 0;
   15560   i5 = HEAP32[i7 + (i5 * 36 | 0) + 32 >> 2] | 0;
   15561   HEAP32[i7 + (i4 * 36 | 0) + 32 >> 2] = ((i6 | 0) > (i5 | 0) ? i6 : i5) + 1;
   15562   i7 = HEAP32[i7 + (i4 * 36 | 0) + 20 >> 2] | 0;
   15563  } while (!((i7 | 0) == -1));
   15564  STACKTOP = i2;
   15565  return;
   15566 }
   15567 function __ZN9b2Simplex6Solve3Ev(i7) {
   15568  i7 = i7 | 0;
   15569  var i1 = 0, i2 = 0, i3 = 0, d4 = 0.0, d5 = 0.0, d6 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, i22 = 0;
   15570  i1 = STACKTOP;
   15571  i2 = i7 + 16 | 0;
   15572  d17 = +HEAPF32[i2 >> 2];
   15573  d15 = +HEAPF32[i2 + 4 >> 2];
   15574  i2 = i7 + 36 | 0;
   15575  i3 = i7 + 52 | 0;
   15576  d14 = +HEAPF32[i3 >> 2];
   15577  d16 = +HEAPF32[i3 + 4 >> 2];
   15578  i3 = i7 + 72 | 0;
   15579  i22 = i7 + 88 | 0;
   15580  d18 = +HEAPF32[i22 >> 2];
   15581  d11 = +HEAPF32[i22 + 4 >> 2];
   15582  d20 = d14 - d17;
   15583  d10 = d16 - d15;
   15584  d9 = d17 * d20 + d15 * d10;
   15585  d8 = d14 * d20 + d16 * d10;
   15586  d4 = d18 - d17;
   15587  d19 = d11 - d15;
   15588  d6 = d17 * d4 + d15 * d19;
   15589  d5 = d18 * d4 + d11 * d19;
   15590  d21 = d18 - d14;
   15591  d12 = d11 - d16;
   15592  d13 = d14 * d21 + d16 * d12;
   15593  d12 = d18 * d21 + d11 * d12;
   15594  d4 = d20 * d19 - d10 * d4;
   15595  d10 = (d14 * d11 - d16 * d18) * d4;
   15596  d11 = (d15 * d18 - d17 * d11) * d4;
   15597  d4 = (d17 * d16 - d15 * d14) * d4;
   15598  if (!(!(d9 >= -0.0) | !(d6 >= -0.0))) {
   15599   HEAPF32[i7 + 24 >> 2] = 1.0;
   15600   HEAP32[i7 + 108 >> 2] = 1;
   15601   STACKTOP = i1;
   15602   return;
   15603  }
   15604  if (!(!(d9 < -0.0) | !(d8 > 0.0) | !(d4 <= 0.0))) {
   15605   d21 = 1.0 / (d8 - d9);
   15606   HEAPF32[i7 + 24 >> 2] = d8 * d21;
   15607   HEAPF32[i7 + 60 >> 2] = -(d9 * d21);
   15608   HEAP32[i7 + 108 >> 2] = 2;
   15609   STACKTOP = i1;
   15610   return;
   15611  }
   15612  if (!(!(d6 < -0.0) | !(d5 > 0.0) | !(d11 <= 0.0))) {
   15613   d21 = 1.0 / (d5 - d6);
   15614   HEAPF32[i7 + 24 >> 2] = d5 * d21;
   15615   HEAPF32[i7 + 96 >> 2] = -(d6 * d21);
   15616   HEAP32[i7 + 108 >> 2] = 2;
   15617   i7 = i2 + 0 | 0;
   15618   i3 = i3 + 0 | 0;
   15619   i2 = i7 + 36 | 0;
   15620   do {
   15621    HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
   15622    i7 = i7 + 4 | 0;
   15623    i3 = i3 + 4 | 0;
   15624   } while ((i7 | 0) < (i2 | 0));
   15625   STACKTOP = i1;
   15626   return;
   15627  }
   15628  if (!(!(d8 <= 0.0) | !(d13 >= -0.0))) {
   15629   HEAPF32[i7 + 60 >> 2] = 1.0;
   15630   HEAP32[i7 + 108 >> 2] = 1;
   15631   i7 = i7 + 0 | 0;
   15632   i3 = i2 + 0 | 0;
   15633   i2 = i7 + 36 | 0;
   15634   do {
   15635    HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
   15636    i7 = i7 + 4 | 0;
   15637    i3 = i3 + 4 | 0;
   15638   } while ((i7 | 0) < (i2 | 0));
   15639   STACKTOP = i1;
   15640   return;
   15641  }
   15642  if (!(!(d5 <= 0.0) | !(d12 <= 0.0))) {
   15643   HEAPF32[i7 + 96 >> 2] = 1.0;
   15644   HEAP32[i7 + 108 >> 2] = 1;
   15645   i7 = i7 + 0 | 0;
   15646   i3 = i3 + 0 | 0;
   15647   i2 = i7 + 36 | 0;
   15648   do {
   15649    HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
   15650    i7 = i7 + 4 | 0;
   15651    i3 = i3 + 4 | 0;
   15652   } while ((i7 | 0) < (i2 | 0));
   15653   STACKTOP = i1;
   15654   return;
   15655  }
   15656  if (!(d13 < -0.0) | !(d12 > 0.0) | !(d10 <= 0.0)) {
   15657   d21 = 1.0 / (d4 + (d10 + d11));
   15658   HEAPF32[i7 + 24 >> 2] = d10 * d21;
   15659   HEAPF32[i7 + 60 >> 2] = d11 * d21;
   15660   HEAPF32[i7 + 96 >> 2] = d4 * d21;
   15661   HEAP32[i7 + 108 >> 2] = 3;
   15662   STACKTOP = i1;
   15663   return;
   15664  } else {
   15665   d21 = 1.0 / (d12 - d13);
   15666   HEAPF32[i7 + 60 >> 2] = d12 * d21;
   15667   HEAPF32[i7 + 96 >> 2] = -(d13 * d21);
   15668   HEAP32[i7 + 108 >> 2] = 2;
   15669   i7 = i7 + 0 | 0;
   15670   i3 = i3 + 0 | 0;
   15671   i2 = i7 + 36 | 0;
   15672   do {
   15673    HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
   15674    i7 = i7 + 4 | 0;
   15675    i3 = i3 + 4 | 0;
   15676   } while ((i7 | 0) < (i2 | 0));
   15677   STACKTOP = i1;
   15678   return;
   15679  }
   15680 }
   15681 function __ZN16b2ContactManager7CollideEv(i3) {
   15682  i3 = i3 | 0;
   15683  var i1 = 0, i2 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0;
   15684  i2 = STACKTOP;
   15685  i8 = HEAP32[i3 + 60 >> 2] | 0;
   15686  if ((i8 | 0) == 0) {
   15687   STACKTOP = i2;
   15688   return;
   15689  }
   15690  i7 = i3 + 12 | 0;
   15691  i6 = i3 + 4 | 0;
   15692  i5 = i3 + 72 | 0;
   15693  i4 = i3 + 68 | 0;
   15694  L4 : while (1) {
   15695   i12 = HEAP32[i8 + 48 >> 2] | 0;
   15696   i10 = HEAP32[i8 + 52 >> 2] | 0;
   15697   i11 = HEAP32[i8 + 56 >> 2] | 0;
   15698   i9 = HEAP32[i8 + 60 >> 2] | 0;
   15699   i15 = HEAP32[i12 + 8 >> 2] | 0;
   15700   i13 = HEAP32[i10 + 8 >> 2] | 0;
   15701   i16 = i8 + 4 | 0;
   15702   do {
   15703    if ((HEAP32[i16 >> 2] & 8 | 0) == 0) {
   15704     i1 = 11;
   15705    } else {
   15706     if (!(__ZNK6b2Body13ShouldCollideEPKS_(i13, i15) | 0)) {
   15707      i16 = HEAP32[i8 + 12 >> 2] | 0;
   15708      __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8);
   15709      i8 = i16;
   15710      break;
   15711     }
   15712     i14 = HEAP32[i4 >> 2] | 0;
   15713     if ((i14 | 0) != 0 ? !(FUNCTION_TABLE_iiii[HEAP32[(HEAP32[i14 >> 2] | 0) + 8 >> 2] & 7](i14, i12, i10) | 0) : 0) {
   15714      i16 = HEAP32[i8 + 12 >> 2] | 0;
   15715      __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8);
   15716      i8 = i16;
   15717      break;
   15718     }
   15719     HEAP32[i16 >> 2] = HEAP32[i16 >> 2] & -9;
   15720     i1 = 11;
   15721    }
   15722   } while (0);
   15723   do {
   15724    if ((i1 | 0) == 11) {
   15725     i1 = 0;
   15726     if ((HEAP16[i15 + 4 >> 1] & 2) == 0) {
   15727      i14 = 0;
   15728     } else {
   15729      i14 = (HEAP32[i15 >> 2] | 0) != 0;
   15730     }
   15731     if ((HEAP16[i13 + 4 >> 1] & 2) == 0) {
   15732      i13 = 0;
   15733     } else {
   15734      i13 = (HEAP32[i13 >> 2] | 0) != 0;
   15735     }
   15736     if (!(i14 | i13)) {
   15737      i8 = HEAP32[i8 + 12 >> 2] | 0;
   15738      break;
   15739     }
   15740     i11 = HEAP32[(HEAP32[i12 + 24 >> 2] | 0) + (i11 * 28 | 0) + 24 >> 2] | 0;
   15741     i9 = HEAP32[(HEAP32[i10 + 24 >> 2] | 0) + (i9 * 28 | 0) + 24 >> 2] | 0;
   15742     if (!((i11 | 0) > -1)) {
   15743      i1 = 19;
   15744      break L4;
   15745     }
   15746     i10 = HEAP32[i7 >> 2] | 0;
   15747     if ((i10 | 0) <= (i11 | 0)) {
   15748      i1 = 19;
   15749      break L4;
   15750     }
   15751     i12 = HEAP32[i6 >> 2] | 0;
   15752     if (!((i9 | 0) > -1 & (i10 | 0) > (i9 | 0))) {
   15753      i1 = 21;
   15754      break L4;
   15755     }
   15756     if (+HEAPF32[i12 + (i9 * 36 | 0) >> 2] - +HEAPF32[i12 + (i11 * 36 | 0) + 8 >> 2] > 0.0 | +HEAPF32[i12 + (i9 * 36 | 0) + 4 >> 2] - +HEAPF32[i12 + (i11 * 36 | 0) + 12 >> 2] > 0.0 | +HEAPF32[i12 + (i11 * 36 | 0) >> 2] - +HEAPF32[i12 + (i9 * 36 | 0) + 8 >> 2] > 0.0 | +HEAPF32[i12 + (i11 * 36 | 0) + 4 >> 2] - +HEAPF32[i12 + (i9 * 36 | 0) + 12 >> 2] > 0.0) {
   15757      i16 = HEAP32[i8 + 12 >> 2] | 0;
   15758      __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8);
   15759      i8 = i16;
   15760      break;
   15761     } else {
   15762      __ZN9b2Contact6UpdateEP17b2ContactListener(i8, HEAP32[i5 >> 2] | 0);
   15763      i8 = HEAP32[i8 + 12 >> 2] | 0;
   15764      break;
   15765     }
   15766    }
   15767   } while (0);
   15768   if ((i8 | 0) == 0) {
   15769    i1 = 25;
   15770    break;
   15771   }
   15772  }
   15773  if ((i1 | 0) == 19) {
   15774   ___assert_fail(1904, 1952, 159, 2008);
   15775  } else if ((i1 | 0) == 21) {
   15776   ___assert_fail(1904, 1952, 159, 2008);
   15777  } else if ((i1 | 0) == 25) {
   15778   STACKTOP = i2;
   15779   return;
   15780  }
   15781 }
   15782 function __ZN16b2ContactManager7AddPairEPvS0_(i1, i5, i6) {
   15783  i1 = i1 | 0;
   15784  i5 = i5 | 0;
   15785  i6 = i6 | 0;
   15786  var i2 = 0, i3 = 0, i4 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0;
   15787  i2 = STACKTOP;
   15788  i4 = HEAP32[i5 + 16 >> 2] | 0;
   15789  i3 = HEAP32[i6 + 16 >> 2] | 0;
   15790  i5 = HEAP32[i5 + 20 >> 2] | 0;
   15791  i6 = HEAP32[i6 + 20 >> 2] | 0;
   15792  i8 = HEAP32[i4 + 8 >> 2] | 0;
   15793  i7 = HEAP32[i3 + 8 >> 2] | 0;
   15794  if ((i8 | 0) == (i7 | 0)) {
   15795   STACKTOP = i2;
   15796   return;
   15797  }
   15798  i10 = HEAP32[i7 + 112 >> 2] | 0;
   15799  L4 : do {
   15800   if ((i10 | 0) != 0) {
   15801    while (1) {
   15802     if ((HEAP32[i10 >> 2] | 0) == (i8 | 0)) {
   15803      i9 = HEAP32[i10 + 4 >> 2] | 0;
   15804      i12 = HEAP32[i9 + 48 >> 2] | 0;
   15805      i13 = HEAP32[i9 + 52 >> 2] | 0;
   15806      i11 = HEAP32[i9 + 56 >> 2] | 0;
   15807      i9 = HEAP32[i9 + 60 >> 2] | 0;
   15808      if ((i12 | 0) == (i4 | 0) & (i13 | 0) == (i3 | 0) & (i11 | 0) == (i5 | 0) & (i9 | 0) == (i6 | 0)) {
   15809       i9 = 22;
   15810       break;
   15811      }
   15812      if ((i12 | 0) == (i3 | 0) & (i13 | 0) == (i4 | 0) & (i11 | 0) == (i6 | 0) & (i9 | 0) == (i5 | 0)) {
   15813       i9 = 22;
   15814       break;
   15815      }
   15816     }
   15817     i10 = HEAP32[i10 + 12 >> 2] | 0;
   15818     if ((i10 | 0) == 0) {
   15819      break L4;
   15820     }
   15821    }
   15822    if ((i9 | 0) == 22) {
   15823     STACKTOP = i2;
   15824     return;
   15825    }
   15826   }
   15827  } while (0);
   15828  if (!(__ZNK6b2Body13ShouldCollideEPKS_(i7, i8) | 0)) {
   15829   STACKTOP = i2;
   15830   return;
   15831  }
   15832  i7 = HEAP32[i1 + 68 >> 2] | 0;
   15833  if ((i7 | 0) != 0 ? !(FUNCTION_TABLE_iiii[HEAP32[(HEAP32[i7 >> 2] | 0) + 8 >> 2] & 7](i7, i4, i3) | 0) : 0) {
   15834   STACKTOP = i2;
   15835   return;
   15836  }
   15837  i5 = __ZN9b2Contact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i4, i5, i3, i6, HEAP32[i1 + 76 >> 2] | 0) | 0;
   15838  if ((i5 | 0) == 0) {
   15839   STACKTOP = i2;
   15840   return;
   15841  }
   15842  i4 = HEAP32[(HEAP32[i5 + 48 >> 2] | 0) + 8 >> 2] | 0;
   15843  i3 = HEAP32[(HEAP32[i5 + 52 >> 2] | 0) + 8 >> 2] | 0;
   15844  HEAP32[i5 + 8 >> 2] = 0;
   15845  i7 = i1 + 60 | 0;
   15846  HEAP32[i5 + 12 >> 2] = HEAP32[i7 >> 2];
   15847  i6 = HEAP32[i7 >> 2] | 0;
   15848  if ((i6 | 0) != 0) {
   15849   HEAP32[i6 + 8 >> 2] = i5;
   15850  }
   15851  HEAP32[i7 >> 2] = i5;
   15852  i8 = i5 + 16 | 0;
   15853  HEAP32[i5 + 20 >> 2] = i5;
   15854  HEAP32[i8 >> 2] = i3;
   15855  HEAP32[i5 + 24 >> 2] = 0;
   15856  i6 = i4 + 112 | 0;
   15857  HEAP32[i5 + 28 >> 2] = HEAP32[i6 >> 2];
   15858  i7 = HEAP32[i6 >> 2] | 0;
   15859  if ((i7 | 0) != 0) {
   15860   HEAP32[i7 + 8 >> 2] = i8;
   15861  }
   15862  HEAP32[i6 >> 2] = i8;
   15863  i6 = i5 + 32 | 0;
   15864  HEAP32[i5 + 36 >> 2] = i5;
   15865  HEAP32[i6 >> 2] = i4;
   15866  HEAP32[i5 + 40 >> 2] = 0;
   15867  i7 = i3 + 112 | 0;
   15868  HEAP32[i5 + 44 >> 2] = HEAP32[i7 >> 2];
   15869  i5 = HEAP32[i7 >> 2] | 0;
   15870  if ((i5 | 0) != 0) {
   15871   HEAP32[i5 + 8 >> 2] = i6;
   15872  }
   15873  HEAP32[i7 >> 2] = i6;
   15874  i5 = i4 + 4 | 0;
   15875  i6 = HEAPU16[i5 >> 1] | 0;
   15876  if ((i6 & 2 | 0) == 0) {
   15877   HEAP16[i5 >> 1] = i6 | 2;
   15878   HEAPF32[i4 + 144 >> 2] = 0.0;
   15879  }
   15880  i4 = i3 + 4 | 0;
   15881  i5 = HEAPU16[i4 >> 1] | 0;
   15882  if ((i5 & 2 | 0) == 0) {
   15883   HEAP16[i4 >> 1] = i5 | 2;
   15884   HEAPF32[i3 + 144 >> 2] = 0.0;
   15885  }
   15886  i13 = i1 + 64 | 0;
   15887  HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + 1;
   15888  STACKTOP = i2;
   15889  return;
   15890 }
   15891 function __ZN12b2BroadPhase11UpdatePairsI16b2ContactManagerEEvPT_(i5, i2) {
   15892  i5 = i5 | 0;
   15893  i2 = i2 | 0;
   15894  var i1 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0;
   15895  i3 = STACKTOP;
   15896  STACKTOP = STACKTOP + 16 | 0;
   15897  i6 = i3;
   15898  i1 = i5 + 52 | 0;
   15899  HEAP32[i1 >> 2] = 0;
   15900  i4 = i5 + 40 | 0;
   15901  i12 = HEAP32[i4 >> 2] | 0;
   15902  do {
   15903   if ((i12 | 0) > 0) {
   15904    i9 = i5 + 32 | 0;
   15905    i11 = i5 + 56 | 0;
   15906    i8 = i5 + 12 | 0;
   15907    i10 = i5 + 4 | 0;
   15908    i13 = 0;
   15909    while (1) {
   15910     i14 = HEAP32[(HEAP32[i9 >> 2] | 0) + (i13 << 2) >> 2] | 0;
   15911     HEAP32[i11 >> 2] = i14;
   15912     if (!((i14 | 0) == -1)) {
   15913      if (!((i14 | 0) > -1)) {
   15914       i8 = 6;
   15915       break;
   15916      }
   15917      if ((HEAP32[i8 >> 2] | 0) <= (i14 | 0)) {
   15918       i8 = 6;
   15919       break;
   15920      }
   15921      __ZNK13b2DynamicTree5QueryI12b2BroadPhaseEEvPT_RK6b2AABB(i5, i5, (HEAP32[i10 >> 2] | 0) + (i14 * 36 | 0) | 0);
   15922      i12 = HEAP32[i4 >> 2] | 0;
   15923     }
   15924     i13 = i13 + 1 | 0;
   15925     if ((i13 | 0) >= (i12 | 0)) {
   15926      i8 = 9;
   15927      break;
   15928     }
   15929    }
   15930    if ((i8 | 0) == 6) {
   15931     ___assert_fail(1904, 1952, 159, 2008);
   15932    } else if ((i8 | 0) == 9) {
   15933     i7 = HEAP32[i1 >> 2] | 0;
   15934     break;
   15935    }
   15936   } else {
   15937    i7 = 0;
   15938   }
   15939  } while (0);
   15940  HEAP32[i4 >> 2] = 0;
   15941  i4 = i5 + 44 | 0;
   15942  i14 = HEAP32[i4 >> 2] | 0;
   15943  HEAP32[i6 >> 2] = 3;
   15944  __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i14, i14 + (i7 * 12 | 0) | 0, i6);
   15945  if ((HEAP32[i1 >> 2] | 0) <= 0) {
   15946   STACKTOP = i3;
   15947   return;
   15948  }
   15949  i6 = i5 + 12 | 0;
   15950  i7 = i5 + 4 | 0;
   15951  i9 = 0;
   15952  L18 : while (1) {
   15953   i8 = HEAP32[i4 >> 2] | 0;
   15954   i5 = i8 + (i9 * 12 | 0) | 0;
   15955   i10 = HEAP32[i5 >> 2] | 0;
   15956   if (!((i10 | 0) > -1)) {
   15957    i8 = 14;
   15958    break;
   15959   }
   15960   i12 = HEAP32[i6 >> 2] | 0;
   15961   if ((i12 | 0) <= (i10 | 0)) {
   15962    i8 = 14;
   15963    break;
   15964   }
   15965   i11 = HEAP32[i7 >> 2] | 0;
   15966   i8 = i8 + (i9 * 12 | 0) + 4 | 0;
   15967   i13 = HEAP32[i8 >> 2] | 0;
   15968   if (!((i13 | 0) > -1 & (i12 | 0) > (i13 | 0))) {
   15969    i8 = 16;
   15970    break;
   15971   }
   15972   __ZN16b2ContactManager7AddPairEPvS0_(i2, HEAP32[i11 + (i10 * 36 | 0) + 16 >> 2] | 0, HEAP32[i11 + (i13 * 36 | 0) + 16 >> 2] | 0);
   15973   i10 = HEAP32[i1 >> 2] | 0;
   15974   while (1) {
   15975    i9 = i9 + 1 | 0;
   15976    if ((i9 | 0) >= (i10 | 0)) {
   15977     i8 = 21;
   15978     break L18;
   15979    }
   15980    i11 = HEAP32[i4 >> 2] | 0;
   15981    if ((HEAP32[i11 + (i9 * 12 | 0) >> 2] | 0) != (HEAP32[i5 >> 2] | 0)) {
   15982     continue L18;
   15983    }
   15984    if ((HEAP32[i11 + (i9 * 12 | 0) + 4 >> 2] | 0) != (HEAP32[i8 >> 2] | 0)) {
   15985     continue L18;
   15986    }
   15987   }
   15988  }
   15989  if ((i8 | 0) == 14) {
   15990   ___assert_fail(1904, 1952, 153, 1992);
   15991  } else if ((i8 | 0) == 16) {
   15992   ___assert_fail(1904, 1952, 153, 1992);
   15993  } else if ((i8 | 0) == 21) {
   15994   STACKTOP = i3;
   15995   return;
   15996  }
   15997 }
   15998 function __ZNK13b2DynamicTree5QueryI12b2BroadPhaseEEvPT_RK6b2AABB(i9, i4, i7) {
   15999  i9 = i9 | 0;
   16000  i4 = i4 | 0;
   16001  i7 = i7 | 0;
   16002  var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i8 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0;
   16003  i2 = STACKTOP;
   16004  STACKTOP = STACKTOP + 1040 | 0;
   16005  i3 = i2;
   16006  i1 = i3 + 4 | 0;
   16007  HEAP32[i3 >> 2] = i1;
   16008  i5 = i3 + 1028 | 0;
   16009  HEAP32[i5 >> 2] = 0;
   16010  i6 = i3 + 1032 | 0;
   16011  HEAP32[i6 >> 2] = 256;
   16012  i14 = HEAP32[i3 >> 2] | 0;
   16013  HEAP32[i14 + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i9 >> 2];
   16014  i15 = HEAP32[i5 >> 2] | 0;
   16015  i16 = i15 + 1 | 0;
   16016  HEAP32[i5 >> 2] = i16;
   16017  L1 : do {
   16018   if ((i15 | 0) > -1) {
   16019    i9 = i9 + 4 | 0;
   16020    i11 = i7 + 4 | 0;
   16021    i12 = i7 + 8 | 0;
   16022    i10 = i7 + 12 | 0;
   16023    while (1) {
   16024     i16 = i16 + -1 | 0;
   16025     HEAP32[i5 >> 2] = i16;
   16026     i13 = HEAP32[i14 + (i16 << 2) >> 2] | 0;
   16027     do {
   16028      if (!((i13 | 0) == -1) ? (i8 = HEAP32[i9 >> 2] | 0, !(+HEAPF32[i7 >> 2] - +HEAPF32[i8 + (i13 * 36 | 0) + 8 >> 2] > 0.0 | +HEAPF32[i11 >> 2] - +HEAPF32[i8 + (i13 * 36 | 0) + 12 >> 2] > 0.0 | +HEAPF32[i8 + (i13 * 36 | 0) >> 2] - +HEAPF32[i12 >> 2] > 0.0 | +HEAPF32[i8 + (i13 * 36 | 0) + 4 >> 2] - +HEAPF32[i10 >> 2] > 0.0)) : 0) {
   16029       i15 = i8 + (i13 * 36 | 0) + 24 | 0;
   16030       if ((HEAP32[i15 >> 2] | 0) == -1) {
   16031        if (!(__ZN12b2BroadPhase13QueryCallbackEi(i4, i13) | 0)) {
   16032         break L1;
   16033        }
   16034        i16 = HEAP32[i5 >> 2] | 0;
   16035        break;
   16036       }
   16037       if ((i16 | 0) == (HEAP32[i6 >> 2] | 0) ? (HEAP32[i6 >> 2] = i16 << 1, i16 = __Z7b2Alloci(i16 << 3) | 0, HEAP32[i3 >> 2] = i16, _memcpy(i16 | 0, i14 | 0, HEAP32[i5 >> 2] << 2 | 0) | 0, (i14 | 0) != (i1 | 0)) : 0) {
   16038        __Z6b2FreePv(i14);
   16039       }
   16040       i14 = HEAP32[i3 >> 2] | 0;
   16041       HEAP32[i14 + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i15 >> 2];
   16042       i15 = (HEAP32[i5 >> 2] | 0) + 1 | 0;
   16043       HEAP32[i5 >> 2] = i15;
   16044       i13 = i8 + (i13 * 36 | 0) + 28 | 0;
   16045       if ((i15 | 0) == (HEAP32[i6 >> 2] | 0) ? (HEAP32[i6 >> 2] = i15 << 1, i16 = __Z7b2Alloci(i15 << 3) | 0, HEAP32[i3 >> 2] = i16, _memcpy(i16 | 0, i14 | 0, HEAP32[i5 >> 2] << 2 | 0) | 0, (i14 | 0) != (i1 | 0)) : 0) {
   16046        __Z6b2FreePv(i14);
   16047       }
   16048       HEAP32[(HEAP32[i3 >> 2] | 0) + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i13 >> 2];
   16049       i16 = (HEAP32[i5 >> 2] | 0) + 1 | 0;
   16050       HEAP32[i5 >> 2] = i16;
   16051      }
   16052     } while (0);
   16053     if ((i16 | 0) <= 0) {
   16054      break L1;
   16055     }
   16056     i14 = HEAP32[i3 >> 2] | 0;
   16057    }
   16058   }
   16059  } while (0);
   16060  i4 = HEAP32[i3 >> 2] | 0;
   16061  if ((i4 | 0) == (i1 | 0)) {
   16062   STACKTOP = i2;
   16063   return;
   16064  }
   16065  __Z6b2FreePv(i4);
   16066  HEAP32[i3 >> 2] = 0;
   16067  STACKTOP = i2;
   16068  return;
   16069 }
   16070 function __ZN15b2ContactSolver9WarmStartEv(i4) {
   16071  i4 = i4 | 0;
   16072  var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, d10 = 0.0, d11 = 0.0, d12 = 0.0, i13 = 0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, i22 = 0, d23 = 0.0, i24 = 0, d25 = 0.0, d26 = 0.0, d27 = 0.0;
   16073  i1 = STACKTOP;
   16074  i2 = i4 + 48 | 0;
   16075  if ((HEAP32[i2 >> 2] | 0) <= 0) {
   16076   STACKTOP = i1;
   16077   return;
   16078  }
   16079  i3 = i4 + 40 | 0;
   16080  i5 = i4 + 28 | 0;
   16081  i22 = HEAP32[i5 >> 2] | 0;
   16082  i8 = 0;
   16083  do {
   16084   i9 = HEAP32[i3 >> 2] | 0;
   16085   i7 = HEAP32[i9 + (i8 * 152 | 0) + 112 >> 2] | 0;
   16086   i6 = HEAP32[i9 + (i8 * 152 | 0) + 116 >> 2] | 0;
   16087   d10 = +HEAPF32[i9 + (i8 * 152 | 0) + 120 >> 2];
   16088   d14 = +HEAPF32[i9 + (i8 * 152 | 0) + 128 >> 2];
   16089   d12 = +HEAPF32[i9 + (i8 * 152 | 0) + 124 >> 2];
   16090   d11 = +HEAPF32[i9 + (i8 * 152 | 0) + 132 >> 2];
   16091   i13 = HEAP32[i9 + (i8 * 152 | 0) + 144 >> 2] | 0;
   16092   i4 = i22 + (i7 * 12 | 0) | 0;
   16093   i24 = i4;
   16094   d17 = +HEAPF32[i24 >> 2];
   16095   d19 = +HEAPF32[i24 + 4 >> 2];
   16096   d20 = +HEAPF32[i22 + (i7 * 12 | 0) + 8 >> 2];
   16097   i24 = i22 + (i6 * 12 | 0) | 0;
   16098   d21 = +HEAPF32[i24 >> 2];
   16099   d23 = +HEAPF32[i24 + 4 >> 2];
   16100   d18 = +HEAPF32[i22 + (i6 * 12 | 0) + 8 >> 2];
   16101   i22 = i9 + (i8 * 152 | 0) + 72 | 0;
   16102   d15 = +HEAPF32[i22 >> 2];
   16103   d16 = +HEAPF32[i22 + 4 >> 2];
   16104   if ((i13 | 0) > 0) {
   16105    i22 = 0;
   16106    do {
   16107     d27 = +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 16 >> 2];
   16108     d25 = +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 20 >> 2];
   16109     d26 = d15 * d27 + d16 * d25;
   16110     d25 = d16 * d27 - d15 * d25;
   16111     d20 = d20 - d14 * (+HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) >> 2] * d25 - +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 4 >> 2] * d26);
   16112     d17 = d17 - d10 * d26;
   16113     d19 = d19 - d10 * d25;
   16114     d18 = d18 + d11 * (d25 * +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 8 >> 2] - d26 * +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 12 >> 2]);
   16115     d21 = d21 + d12 * d26;
   16116     d23 = d23 + d12 * d25;
   16117     i22 = i22 + 1 | 0;
   16118    } while ((i22 | 0) != (i13 | 0));
   16119   }
   16120   d27 = +d17;
   16121   d26 = +d19;
   16122   i22 = i4;
   16123   HEAPF32[i22 >> 2] = d27;
   16124   HEAPF32[i22 + 4 >> 2] = d26;
   16125   i22 = HEAP32[i5 >> 2] | 0;
   16126   HEAPF32[i22 + (i7 * 12 | 0) + 8 >> 2] = d20;
   16127   d26 = +d21;
   16128   d27 = +d23;
   16129   i22 = i22 + (i6 * 12 | 0) | 0;
   16130   HEAPF32[i22 >> 2] = d26;
   16131   HEAPF32[i22 + 4 >> 2] = d27;
   16132   i22 = HEAP32[i5 >> 2] | 0;
   16133   HEAPF32[i22 + (i6 * 12 | 0) + 8 >> 2] = d18;
   16134   i8 = i8 + 1 | 0;
   16135  } while ((i8 | 0) < (HEAP32[i2 >> 2] | 0));
   16136  STACKTOP = i1;
   16137  return;
   16138 }
   16139 function __ZNK14b2PolygonShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi(i1, i5, i8, i7, i4) {
   16140  i1 = i1 | 0;
   16141  i5 = i5 | 0;
   16142  i8 = i8 | 0;
   16143  i7 = i7 | 0;
   16144  i4 = i4 | 0;
   16145  var i2 = 0, d3 = 0.0, i6 = 0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, i14 = 0, i15 = 0, i16 = 0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0;
   16146  i4 = STACKTOP;
   16147  d10 = +HEAPF32[i7 >> 2];
   16148  d9 = +HEAPF32[i8 >> 2] - d10;
   16149  d18 = +HEAPF32[i7 + 4 >> 2];
   16150  d11 = +HEAPF32[i8 + 4 >> 2] - d18;
   16151  i6 = i7 + 12 | 0;
   16152  d17 = +HEAPF32[i6 >> 2];
   16153  i7 = i7 + 8 | 0;
   16154  d19 = +HEAPF32[i7 >> 2];
   16155  d12 = d9 * d17 + d11 * d19;
   16156  d9 = d17 * d11 - d9 * d19;
   16157  d10 = +HEAPF32[i8 + 8 >> 2] - d10;
   16158  d18 = +HEAPF32[i8 + 12 >> 2] - d18;
   16159  d11 = d17 * d10 + d19 * d18 - d12;
   16160  d10 = d17 * d18 - d19 * d10 - d9;
   16161  i8 = i8 + 16 | 0;
   16162  i14 = HEAP32[i1 + 148 >> 2] | 0;
   16163  do {
   16164   if ((i14 | 0) > 0) {
   16165    i16 = 0;
   16166    i15 = -1;
   16167    d13 = 0.0;
   16168    d17 = +HEAPF32[i8 >> 2];
   16169    L3 : while (1) {
   16170     d20 = +HEAPF32[i1 + (i16 << 3) + 84 >> 2];
   16171     d19 = +HEAPF32[i1 + (i16 << 3) + 88 >> 2];
   16172     d18 = (+HEAPF32[i1 + (i16 << 3) + 20 >> 2] - d12) * d20 + (+HEAPF32[i1 + (i16 << 3) + 24 >> 2] - d9) * d19;
   16173     d19 = d11 * d20 + d10 * d19;
   16174     do {
   16175      if (d19 == 0.0) {
   16176       if (d18 < 0.0) {
   16177        i1 = 0;
   16178        i14 = 18;
   16179        break L3;
   16180       }
   16181      } else {
   16182       if (d19 < 0.0 ? d18 < d13 * d19 : 0) {
   16183        i15 = i16;
   16184        d13 = d18 / d19;
   16185        break;
   16186       }
   16187       if (d19 > 0.0 ? d18 < d17 * d19 : 0) {
   16188        d17 = d18 / d19;
   16189       }
   16190      }
   16191     } while (0);
   16192     i16 = i16 + 1 | 0;
   16193     if (d17 < d13) {
   16194      i1 = 0;
   16195      i14 = 18;
   16196      break;
   16197     }
   16198     if ((i16 | 0) >= (i14 | 0)) {
   16199      i14 = 13;
   16200      break;
   16201     }
   16202    }
   16203    if ((i14 | 0) == 13) {
   16204     if (d13 >= 0.0) {
   16205      i2 = i15;
   16206      d3 = d13;
   16207      break;
   16208     }
   16209     ___assert_fail(376, 328, 249, 424);
   16210    } else if ((i14 | 0) == 18) {
   16211     STACKTOP = i4;
   16212     return i1 | 0;
   16213    }
   16214   } else {
   16215    i2 = -1;
   16216    d3 = 0.0;
   16217   }
   16218  } while (0);
   16219  if (!(d3 <= +HEAPF32[i8 >> 2])) {
   16220   ___assert_fail(376, 328, 249, 424);
   16221  }
   16222  if (!((i2 | 0) > -1)) {
   16223   i16 = 0;
   16224   STACKTOP = i4;
   16225   return i16 | 0;
   16226  }
   16227  HEAPF32[i5 + 8 >> 2] = d3;
   16228  d18 = +HEAPF32[i6 >> 2];
   16229  d13 = +HEAPF32[i1 + (i2 << 3) + 84 >> 2];
   16230  d17 = +HEAPF32[i7 >> 2];
   16231  d20 = +HEAPF32[i1 + (i2 << 3) + 88 >> 2];
   16232  d19 = +(d18 * d13 - d17 * d20);
   16233  d20 = +(d13 * d17 + d18 * d20);
   16234  i16 = i5;
   16235  HEAPF32[i16 >> 2] = d19;
   16236  HEAPF32[i16 + 4 >> 2] = d20;
   16237  i16 = 1;
   16238  STACKTOP = i4;
   16239  return i16 | 0;
   16240 }
   16241 function __ZN7b2World4StepEfii(i1, d9, i11, i12) {
   16242  i1 = i1 | 0;
   16243  d9 = +d9;
   16244  i11 = i11 | 0;
   16245  i12 = i12 | 0;
   16246  var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i10 = 0, i13 = 0;
   16247  i4 = STACKTOP;
   16248  STACKTOP = STACKTOP + 32 | 0;
   16249  i3 = i4 + 27 | 0;
   16250  i5 = i4;
   16251  i8 = i4 + 26 | 0;
   16252  i10 = i4 + 25 | 0;
   16253  i7 = i4 + 24 | 0;
   16254  __ZN7b2TimerC2Ev(i3);
   16255  i2 = i1 + 102868 | 0;
   16256  i13 = HEAP32[i2 >> 2] | 0;
   16257  if ((i13 & 1 | 0) != 0) {
   16258   __ZN16b2ContactManager15FindNewContactsEv(i1 + 102872 | 0);
   16259   i13 = HEAP32[i2 >> 2] & -2;
   16260   HEAP32[i2 >> 2] = i13;
   16261  }
   16262  HEAP32[i2 >> 2] = i13 | 2;
   16263  HEAPF32[i5 >> 2] = d9;
   16264  HEAP32[i5 + 12 >> 2] = i11;
   16265  HEAP32[i5 + 16 >> 2] = i12;
   16266  if (d9 > 0.0) {
   16267   HEAPF32[i5 + 4 >> 2] = 1.0 / d9;
   16268  } else {
   16269   HEAPF32[i5 + 4 >> 2] = 0.0;
   16270  }
   16271  i11 = i1 + 102988 | 0;
   16272  HEAPF32[i5 + 8 >> 2] = +HEAPF32[i11 >> 2] * d9;
   16273  HEAP8[i5 + 20 | 0] = HEAP8[i1 + 102992 | 0] | 0;
   16274  __ZN7b2TimerC2Ev(i8);
   16275  __ZN16b2ContactManager7CollideEv(i1 + 102872 | 0);
   16276  HEAPF32[i1 + 103e3 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i8);
   16277  if ((HEAP8[i1 + 102995 | 0] | 0) != 0 ? +HEAPF32[i5 >> 2] > 0.0 : 0) {
   16278   __ZN7b2TimerC2Ev(i10);
   16279   __ZN7b2World5SolveERK10b2TimeStep(i1, i5);
   16280   HEAPF32[i1 + 103004 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i10);
   16281  }
   16282  if ((HEAP8[i1 + 102993 | 0] | 0) != 0) {
   16283   d9 = +HEAPF32[i5 >> 2];
   16284   if (d9 > 0.0) {
   16285    __ZN7b2TimerC2Ev(i7);
   16286    __ZN7b2World8SolveTOIERK10b2TimeStep(i1, i5);
   16287    HEAPF32[i1 + 103024 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i7);
   16288    i6 = 12;
   16289   }
   16290  } else {
   16291   i6 = 12;
   16292  }
   16293  if ((i6 | 0) == 12) {
   16294   d9 = +HEAPF32[i5 >> 2];
   16295  }
   16296  if (d9 > 0.0) {
   16297   HEAPF32[i11 >> 2] = +HEAPF32[i5 + 4 >> 2];
   16298  }
   16299  i5 = HEAP32[i2 >> 2] | 0;
   16300  if ((i5 & 4 | 0) == 0) {
   16301   i13 = i5 & -3;
   16302   HEAP32[i2 >> 2] = i13;
   16303   d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3);
   16304   i13 = i1 + 102996 | 0;
   16305   HEAPF32[i13 >> 2] = d9;
   16306   STACKTOP = i4;
   16307   return;
   16308  }
   16309  i6 = HEAP32[i1 + 102952 >> 2] | 0;
   16310  if ((i6 | 0) == 0) {
   16311   i13 = i5 & -3;
   16312   HEAP32[i2 >> 2] = i13;
   16313   d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3);
   16314   i13 = i1 + 102996 | 0;
   16315   HEAPF32[i13 >> 2] = d9;
   16316   STACKTOP = i4;
   16317   return;
   16318  }
   16319  do {
   16320   HEAPF32[i6 + 76 >> 2] = 0.0;
   16321   HEAPF32[i6 + 80 >> 2] = 0.0;
   16322   HEAPF32[i6 + 84 >> 2] = 0.0;
   16323   i6 = HEAP32[i6 + 96 >> 2] | 0;
   16324  } while ((i6 | 0) != 0);
   16325  i13 = i5 & -3;
   16326  HEAP32[i2 >> 2] = i13;
   16327  d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3);
   16328  i13 = i1 + 102996 | 0;
   16329  HEAPF32[i13 >> 2] = d9;
   16330  STACKTOP = i4;
   16331  return;
   16332 }
   16333 function __ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i1, i5, i6, i3, i4) {
   16334  i1 = i1 | 0;
   16335  i5 = i5 | 0;
   16336  i6 = i6 | 0;
   16337  i3 = i3 | 0;
   16338  i4 = i4 | 0;
   16339  var i2 = 0, i7 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i12 = 0, i13 = 0, i14 = 0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0;
   16340  i2 = STACKTOP;
   16341  i7 = HEAP32[i5 + 148 >> 2] | 0;
   16342  d17 = +HEAPF32[i4 + 12 >> 2];
   16343  d19 = +HEAPF32[i3 + 12 >> 2];
   16344  d18 = +HEAPF32[i4 + 8 >> 2];
   16345  d16 = +HEAPF32[i3 + 16 >> 2];
   16346  d15 = +HEAPF32[i6 + 12 >> 2];
   16347  d10 = +HEAPF32[i5 + 12 >> 2];
   16348  d8 = +HEAPF32[i6 + 8 >> 2];
   16349  d9 = +HEAPF32[i5 + 16 >> 2];
   16350  d11 = +HEAPF32[i4 >> 2] + (d17 * d19 - d18 * d16) - (+HEAPF32[i6 >> 2] + (d15 * d10 - d8 * d9));
   16351  d9 = d19 * d18 + d17 * d16 + +HEAPF32[i4 + 4 >> 2] - (d10 * d8 + d15 * d9 + +HEAPF32[i6 + 4 >> 2]);
   16352  d10 = d15 * d11 + d8 * d9;
   16353  d8 = d15 * d9 - d11 * d8;
   16354  if ((i7 | 0) > 0) {
   16355   i14 = 0;
   16356   i13 = 0;
   16357   d9 = -3.4028234663852886e+38;
   16358   while (1) {
   16359    d11 = d10 * +HEAPF32[i5 + (i13 << 3) + 84 >> 2] + d8 * +HEAPF32[i5 + (i13 << 3) + 88 >> 2];
   16360    i12 = d11 > d9;
   16361    i14 = i12 ? i13 : i14;
   16362    i13 = i13 + 1 | 0;
   16363    if ((i13 | 0) == (i7 | 0)) {
   16364     break;
   16365    } else {
   16366     d9 = i12 ? d11 : d9;
   16367    }
   16368   }
   16369  } else {
   16370   i14 = 0;
   16371  }
   16372  d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i14, i3, i4);
   16373  i12 = ((i14 | 0) > 0 ? i14 : i7) + -1 | 0;
   16374  d8 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i12, i3, i4);
   16375  i13 = i14 + 1 | 0;
   16376  i13 = (i13 | 0) < (i7 | 0) ? i13 : 0;
   16377  d10 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4);
   16378  if (d8 > d9 & d8 > d10) {
   16379   while (1) {
   16380    i13 = ((i12 | 0) > 0 ? i12 : i7) + -1 | 0;
   16381    d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4);
   16382    if (d9 > d8) {
   16383     i12 = i13;
   16384     d8 = d9;
   16385    } else {
   16386     break;
   16387    }
   16388   }
   16389   HEAP32[i1 >> 2] = i12;
   16390   STACKTOP = i2;
   16391   return +d8;
   16392  }
   16393  if (d10 > d9) {
   16394   i12 = i13;
   16395   d8 = d10;
   16396  } else {
   16397   d19 = d9;
   16398   HEAP32[i1 >> 2] = i14;
   16399   STACKTOP = i2;
   16400   return +d19;
   16401  }
   16402  while (1) {
   16403   i13 = i12 + 1 | 0;
   16404   i13 = (i13 | 0) < (i7 | 0) ? i13 : 0;
   16405   d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4);
   16406   if (d9 > d8) {
   16407    i12 = i13;
   16408    d8 = d9;
   16409   } else {
   16410    break;
   16411   }
   16412  }
   16413  HEAP32[i1 >> 2] = i12;
   16414  STACKTOP = i2;
   16415  return +d8;
   16416 }
   16417 function __ZN9b2Fixture11SynchronizeEP12b2BroadPhaseRK11b2TransformS4_(i10, i8, i7, i2) {
   16418  i10 = i10 | 0;
   16419  i8 = i8 | 0;
   16420  i7 = i7 | 0;
   16421  i2 = i2 | 0;
   16422  var i1 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i9 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, i27 = 0;
   16423  i9 = STACKTOP;
   16424  STACKTOP = STACKTOP + 48 | 0;
   16425  i5 = i9 + 24 | 0;
   16426  i6 = i9 + 8 | 0;
   16427  i3 = i9;
   16428  i4 = i10 + 28 | 0;
   16429  if ((HEAP32[i4 >> 2] | 0) <= 0) {
   16430   STACKTOP = i9;
   16431   return;
   16432  }
   16433  i1 = i10 + 24 | 0;
   16434  i18 = i10 + 12 | 0;
   16435  i19 = i5 + 4 | 0;
   16436  i20 = i6 + 4 | 0;
   16437  i13 = i5 + 8 | 0;
   16438  i14 = i6 + 8 | 0;
   16439  i15 = i5 + 12 | 0;
   16440  i16 = i6 + 12 | 0;
   16441  i11 = i2 + 4 | 0;
   16442  i22 = i7 + 4 | 0;
   16443  i12 = i3 + 4 | 0;
   16444  i21 = 0;
   16445  do {
   16446   i10 = HEAP32[i1 >> 2] | 0;
   16447   i27 = HEAP32[i18 >> 2] | 0;
   16448   i17 = i10 + (i21 * 28 | 0) + 20 | 0;
   16449   FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i27 >> 2] | 0) + 24 >> 2] & 15](i27, i5, i7, HEAP32[i17 >> 2] | 0);
   16450   i27 = HEAP32[i18 >> 2] | 0;
   16451   FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i27 >> 2] | 0) + 24 >> 2] & 15](i27, i6, i2, HEAP32[i17 >> 2] | 0);
   16452   i17 = i10 + (i21 * 28 | 0) | 0;
   16453   d25 = +HEAPF32[i5 >> 2];
   16454   d26 = +HEAPF32[i6 >> 2];
   16455   d24 = +HEAPF32[i19 >> 2];
   16456   d23 = +HEAPF32[i20 >> 2];
   16457   d25 = +(d25 < d26 ? d25 : d26);
   16458   d26 = +(d24 < d23 ? d24 : d23);
   16459   i27 = i17;
   16460   HEAPF32[i27 >> 2] = d25;
   16461   HEAPF32[i27 + 4 >> 2] = d26;
   16462   d25 = +HEAPF32[i13 >> 2];
   16463   d26 = +HEAPF32[i14 >> 2];
   16464   d23 = +HEAPF32[i15 >> 2];
   16465   d24 = +HEAPF32[i16 >> 2];
   16466   d25 = +(d25 > d26 ? d25 : d26);
   16467   d26 = +(d23 > d24 ? d23 : d24);
   16468   i27 = i10 + (i21 * 28 | 0) + 8 | 0;
   16469   HEAPF32[i27 >> 2] = d25;
   16470   HEAPF32[i27 + 4 >> 2] = d26;
   16471   d26 = +HEAPF32[i11 >> 2] - +HEAPF32[i22 >> 2];
   16472   HEAPF32[i3 >> 2] = +HEAPF32[i2 >> 2] - +HEAPF32[i7 >> 2];
   16473   HEAPF32[i12 >> 2] = d26;
   16474   __ZN12b2BroadPhase9MoveProxyEiRK6b2AABBRK6b2Vec2(i8, HEAP32[i10 + (i21 * 28 | 0) + 24 >> 2] | 0, i17, i3);
   16475   i21 = i21 + 1 | 0;
   16476  } while ((i21 | 0) < (HEAP32[i4 >> 2] | 0));
   16477  STACKTOP = i9;
   16478  return;
   16479 }
   16480 function __ZN12b2EPCollider24ComputePolygonSeparationEv(i2, i9) {
   16481  i2 = i2 | 0;
   16482  i9 = i9 | 0;
   16483  var i1 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = 0.0, d7 = 0.0, i8 = 0, d10 = 0.0, d11 = 0.0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0;
   16484  i15 = STACKTOP;
   16485  HEAP32[i2 >> 2] = 0;
   16486  i3 = i2 + 4 | 0;
   16487  HEAP32[i3 >> 2] = -1;
   16488  i4 = i2 + 8 | 0;
   16489  HEAPF32[i4 >> 2] = -3.4028234663852886e+38;
   16490  d7 = +HEAPF32[i9 + 216 >> 2];
   16491  d6 = +HEAPF32[i9 + 212 >> 2];
   16492  i5 = HEAP32[i9 + 128 >> 2] | 0;
   16493  if ((i5 | 0) <= 0) {
   16494   STACKTOP = i15;
   16495   return;
   16496  }
   16497  d17 = +HEAPF32[i9 + 164 >> 2];
   16498  d18 = +HEAPF32[i9 + 168 >> 2];
   16499  d11 = +HEAPF32[i9 + 172 >> 2];
   16500  d10 = +HEAPF32[i9 + 176 >> 2];
   16501  d16 = +HEAPF32[i9 + 244 >> 2];
   16502  i12 = i9 + 228 | 0;
   16503  i13 = i9 + 232 | 0;
   16504  i14 = i9 + 236 | 0;
   16505  i1 = i9 + 240 | 0;
   16506  d19 = -3.4028234663852886e+38;
   16507  i20 = 0;
   16508  while (1) {
   16509   d23 = +HEAPF32[i9 + (i20 << 3) + 64 >> 2];
   16510   d21 = -d23;
   16511   d22 = -+HEAPF32[i9 + (i20 << 3) + 68 >> 2];
   16512   d26 = +HEAPF32[i9 + (i20 << 3) >> 2];
   16513   d25 = +HEAPF32[i9 + (i20 << 3) + 4 >> 2];
   16514   d24 = (d26 - d17) * d21 + (d25 - d18) * d22;
   16515   d25 = (d26 - d11) * d21 + (d25 - d10) * d22;
   16516   d24 = d24 < d25 ? d24 : d25;
   16517   if (d24 > d16) {
   16518    break;
   16519   }
   16520   if (!(d7 * d23 + d6 * d22 >= 0.0)) {
   16521    if (!((d21 - +HEAPF32[i12 >> 2]) * d6 + (d22 - +HEAPF32[i13 >> 2]) * d7 < -.03490658849477768) & d24 > d19) {
   16522     i8 = 8;
   16523    }
   16524   } else {
   16525    if (!((d21 - +HEAPF32[i14 >> 2]) * d6 + (d22 - +HEAPF32[i1 >> 2]) * d7 < -.03490658849477768) & d24 > d19) {
   16526     i8 = 8;
   16527    }
   16528   }
   16529   if ((i8 | 0) == 8) {
   16530    i8 = 0;
   16531    HEAP32[i2 >> 2] = 2;
   16532    HEAP32[i3 >> 2] = i20;
   16533    HEAPF32[i4 >> 2] = d24;
   16534    d19 = d24;
   16535   }
   16536   i20 = i20 + 1 | 0;
   16537   if ((i20 | 0) >= (i5 | 0)) {
   16538    i8 = 10;
   16539    break;
   16540   }
   16541  }
   16542  if ((i8 | 0) == 10) {
   16543   STACKTOP = i15;
   16544   return;
   16545  }
   16546  HEAP32[i2 >> 2] = 2;
   16547  HEAP32[i3 >> 2] = i20;
   16548  HEAPF32[i4 >> 2] = d24;
   16549  STACKTOP = i15;
   16550  return;
   16551 }
   16552 function __ZNK11b2EdgeShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi(i17, i1, i2, i18, i3) {
   16553  i17 = i17 | 0;
   16554  i1 = i1 | 0;
   16555  i2 = i2 | 0;
   16556  i18 = i18 | 0;
   16557  i3 = i3 | 0;
   16558  var d4 = 0.0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0;
   16559  i3 = STACKTOP;
   16560  d6 = +HEAPF32[i18 >> 2];
   16561  d7 = +HEAPF32[i2 >> 2] - d6;
   16562  d9 = +HEAPF32[i18 + 4 >> 2];
   16563  d4 = +HEAPF32[i2 + 4 >> 2] - d9;
   16564  d11 = +HEAPF32[i18 + 12 >> 2];
   16565  d5 = +HEAPF32[i18 + 8 >> 2];
   16566  d8 = d7 * d11 + d4 * d5;
   16567  d7 = d11 * d4 - d7 * d5;
   16568  d6 = +HEAPF32[i2 + 8 >> 2] - d6;
   16569  d9 = +HEAPF32[i2 + 12 >> 2] - d9;
   16570  d4 = d11 * d6 + d5 * d9 - d8;
   16571  d6 = d11 * d9 - d5 * d6 - d7;
   16572  i18 = i17 + 12 | 0;
   16573  d5 = +HEAPF32[i18 >> 2];
   16574  d9 = +HEAPF32[i18 + 4 >> 2];
   16575  i18 = i17 + 20 | 0;
   16576  d11 = +HEAPF32[i18 >> 2];
   16577  d11 = d11 - d5;
   16578  d12 = +HEAPF32[i18 + 4 >> 2] - d9;
   16579  d15 = -d11;
   16580  d10 = d11 * d11 + d12 * d12;
   16581  d13 = +Math_sqrt(+d10);
   16582  if (d13 < 1.1920928955078125e-7) {
   16583   d13 = d12;
   16584  } else {
   16585   d16 = 1.0 / d13;
   16586   d13 = d12 * d16;
   16587   d15 = d16 * d15;
   16588  }
   16589  d14 = (d9 - d7) * d15 + (d5 - d8) * d13;
   16590  d16 = d6 * d15 + d4 * d13;
   16591  if (d16 == 0.0) {
   16592   i18 = 0;
   16593   STACKTOP = i3;
   16594   return i18 | 0;
   16595  }
   16596  d16 = d14 / d16;
   16597  if (d16 < 0.0) {
   16598   i18 = 0;
   16599   STACKTOP = i3;
   16600   return i18 | 0;
   16601  }
   16602  if (+HEAPF32[i2 + 16 >> 2] < d16 | d10 == 0.0) {
   16603   i18 = 0;
   16604   STACKTOP = i3;
   16605   return i18 | 0;
   16606  }
   16607  d12 = (d11 * (d8 + d4 * d16 - d5) + d12 * (d7 + d6 * d16 - d9)) / d10;
   16608  if (d12 < 0.0 | d12 > 1.0) {
   16609   i18 = 0;
   16610   STACKTOP = i3;
   16611   return i18 | 0;
   16612  }
   16613  HEAPF32[i1 + 8 >> 2] = d16;
   16614  if (d14 > 0.0) {
   16615   d14 = +-d13;
   16616   d16 = +-d15;
   16617   i18 = i1;
   16618   HEAPF32[i18 >> 2] = d14;
   16619   HEAPF32[i18 + 4 >> 2] = d16;
   16620   i18 = 1;
   16621   STACKTOP = i3;
   16622   return i18 | 0;
   16623  } else {
   16624   d14 = +d13;
   16625   d16 = +d15;
   16626   i18 = i1;
   16627   HEAPF32[i18 >> 2] = d14;
   16628   HEAPF32[i18 + 4 >> 2] = d16;
   16629   i18 = 1;
   16630   STACKTOP = i3;
   16631   return i18 | 0;
   16632  }
   16633  return 0;
   16634 }
   16635 function ___dynamic_cast(i7, i6, i11, i5) {
   16636  i7 = i7 | 0;
   16637  i6 = i6 | 0;
   16638  i11 = i11 | 0;
   16639  i5 = i5 | 0;
   16640  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0;
   16641  i1 = STACKTOP;
   16642  STACKTOP = STACKTOP + 64 | 0;
   16643  i2 = i1;
   16644  i3 = HEAP32[i7 >> 2] | 0;
   16645  i4 = i7 + (HEAP32[i3 + -8 >> 2] | 0) | 0;
   16646  i3 = HEAP32[i3 + -4 >> 2] | 0;
   16647  HEAP32[i2 >> 2] = i11;
   16648  HEAP32[i2 + 4 >> 2] = i7;
   16649  HEAP32[i2 + 8 >> 2] = i6;
   16650  HEAP32[i2 + 12 >> 2] = i5;
   16651  i9 = i2 + 16 | 0;
   16652  i10 = i2 + 20 | 0;
   16653  i6 = i2 + 24 | 0;
   16654  i8 = i2 + 28 | 0;
   16655  i5 = i2 + 32 | 0;
   16656  i7 = i2 + 40 | 0;
   16657  i12 = (i3 | 0) == (i11 | 0);
   16658  i13 = i9 + 0 | 0;
   16659  i11 = i13 + 36 | 0;
   16660  do {
   16661   HEAP32[i13 >> 2] = 0;
   16662   i13 = i13 + 4 | 0;
   16663  } while ((i13 | 0) < (i11 | 0));
   16664  HEAP16[i9 + 36 >> 1] = 0;
   16665  HEAP8[i9 + 38 | 0] = 0;
   16666  if (i12) {
   16667   HEAP32[i2 + 48 >> 2] = 1;
   16668   FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i3 >> 2] | 0) + 20 >> 2] & 3](i3, i2, i4, i4, 1, 0);
   16669   i13 = (HEAP32[i6 >> 2] | 0) == 1 ? i4 : 0;
   16670   STACKTOP = i1;
   16671   return i13 | 0;
   16672  }
   16673  FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[i3 >> 2] | 0) + 24 >> 2] & 3](i3, i2, i4, 1, 0);
   16674  i2 = HEAP32[i2 + 36 >> 2] | 0;
   16675  if ((i2 | 0) == 0) {
   16676   if ((HEAP32[i7 >> 2] | 0) != 1) {
   16677    i13 = 0;
   16678    STACKTOP = i1;
   16679    return i13 | 0;
   16680   }
   16681   if ((HEAP32[i8 >> 2] | 0) != 1) {
   16682    i13 = 0;
   16683    STACKTOP = i1;
   16684    return i13 | 0;
   16685   }
   16686   i13 = (HEAP32[i5 >> 2] | 0) == 1 ? HEAP32[i10 >> 2] | 0 : 0;
   16687   STACKTOP = i1;
   16688   return i13 | 0;
   16689  } else if ((i2 | 0) == 1) {
   16690   if ((HEAP32[i6 >> 2] | 0) != 1) {
   16691    if ((HEAP32[i7 >> 2] | 0) != 0) {
   16692     i13 = 0;
   16693     STACKTOP = i1;
   16694     return i13 | 0;
   16695    }
   16696    if ((HEAP32[i8 >> 2] | 0) != 1) {
   16697     i13 = 0;
   16698     STACKTOP = i1;
   16699     return i13 | 0;
   16700    }
   16701    if ((HEAP32[i5 >> 2] | 0) != 1) {
   16702     i13 = 0;
   16703     STACKTOP = i1;
   16704     return i13 | 0;
   16705    }
   16706   }
   16707   i13 = HEAP32[i9 >> 2] | 0;
   16708   STACKTOP = i1;
   16709   return i13 | 0;
   16710  } else {
   16711   i13 = 0;
   16712   STACKTOP = i1;
   16713   return i13 | 0;
   16714  }
   16715  return 0;
   16716 }
   16717 function __ZNK14b2PolygonShape11ComputeMassEP10b2MassDataf(i4, i1, d2) {
   16718  i4 = i4 | 0;
   16719  i1 = i1 | 0;
   16720  d2 = +d2;
   16721  var i3 = 0, i5 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i12 = 0, d13 = 0.0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, d18 = 0.0, i19 = 0, d20 = 0.0, d21 = 0.0, d22 = 0.0, d23 = 0.0;
   16722  i3 = STACKTOP;
   16723  i5 = HEAP32[i4 + 148 >> 2] | 0;
   16724  if ((i5 | 0) > 2) {
   16725   d7 = 0.0;
   16726   d6 = 0.0;
   16727   i12 = 0;
   16728  } else {
   16729   ___assert_fail(432, 328, 306, 456);
   16730  }
   16731  do {
   16732   d6 = d6 + +HEAPF32[i4 + (i12 << 3) + 20 >> 2];
   16733   d7 = d7 + +HEAPF32[i4 + (i12 << 3) + 24 >> 2];
   16734   i12 = i12 + 1 | 0;
   16735  } while ((i12 | 0) < (i5 | 0));
   16736  d11 = 1.0 / +(i5 | 0);
   16737  d6 = d6 * d11;
   16738  d11 = d7 * d11;
   16739  i16 = i4 + 20 | 0;
   16740  i19 = i4 + 24 | 0;
   16741  d9 = 0.0;
   16742  d10 = 0.0;
   16743  d7 = 0.0;
   16744  d8 = 0.0;
   16745  i17 = 0;
   16746  do {
   16747   d18 = +HEAPF32[i4 + (i17 << 3) + 20 >> 2] - d6;
   16748   d13 = +HEAPF32[i4 + (i17 << 3) + 24 >> 2] - d11;
   16749   i17 = i17 + 1 | 0;
   16750   i12 = (i17 | 0) < (i5 | 0);
   16751   if (i12) {
   16752    i14 = i4 + (i17 << 3) + 20 | 0;
   16753    i15 = i4 + (i17 << 3) + 24 | 0;
   16754   } else {
   16755    i14 = i16;
   16756    i15 = i19;
   16757   }
   16758   d21 = +HEAPF32[i14 >> 2] - d6;
   16759   d20 = +HEAPF32[i15 >> 2] - d11;
   16760   d22 = d18 * d20 - d13 * d21;
   16761   d23 = d22 * .5;
   16762   d8 = d8 + d23;
   16763   d23 = d23 * .3333333432674408;
   16764   d9 = d9 + (d18 + d21) * d23;
   16765   d10 = d10 + (d13 + d20) * d23;
   16766   d7 = d7 + d22 * .0833333358168602 * (d21 * d21 + (d18 * d18 + d18 * d21) + (d20 * d20 + (d13 * d13 + d13 * d20)));
   16767  } while (i12);
   16768  d13 = d8 * d2;
   16769  HEAPF32[i1 >> 2] = d13;
   16770  if (d8 > 1.1920928955078125e-7) {
   16771   d23 = 1.0 / d8;
   16772   d22 = d9 * d23;
   16773   d23 = d10 * d23;
   16774   d20 = d6 + d22;
   16775   d21 = d11 + d23;
   16776   d11 = +d20;
   16777   d18 = +d21;
   16778   i19 = i1 + 4 | 0;
   16779   HEAPF32[i19 >> 2] = d11;
   16780   HEAPF32[i19 + 4 >> 2] = d18;
   16781   HEAPF32[i1 + 12 >> 2] = d7 * d2 + d13 * (d20 * d20 + d21 * d21 - (d22 * d22 + d23 * d23));
   16782   STACKTOP = i3;
   16783   return;
   16784  } else {
   16785   ___assert_fail(472, 328, 352, 456);
   16786  }
   16787 }
   16788 function __ZN16b2ContactManager7DestroyEP9b2Contact(i1, i2) {
   16789  i1 = i1 | 0;
   16790  i2 = i2 | 0;
   16791  var i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0;
   16792  i3 = STACKTOP;
   16793  i5 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 8 >> 2] | 0;
   16794  i4 = HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 8 >> 2] | 0;
   16795  i6 = HEAP32[i1 + 72 >> 2] | 0;
   16796  if ((i6 | 0) != 0 ? (HEAP32[i2 + 4 >> 2] & 2 | 0) != 0 : 0) {
   16797   FUNCTION_TABLE_vii[HEAP32[(HEAP32[i6 >> 2] | 0) + 12 >> 2] & 15](i6, i2);
   16798  }
   16799  i7 = i2 + 8 | 0;
   16800  i8 = HEAP32[i7 >> 2] | 0;
   16801  i6 = i2 + 12 | 0;
   16802  if ((i8 | 0) != 0) {
   16803   HEAP32[i8 + 12 >> 2] = HEAP32[i6 >> 2];
   16804  }
   16805  i8 = HEAP32[i6 >> 2] | 0;
   16806  if ((i8 | 0) != 0) {
   16807   HEAP32[i8 + 8 >> 2] = HEAP32[i7 >> 2];
   16808  }
   16809  i7 = i1 + 60 | 0;
   16810  if ((HEAP32[i7 >> 2] | 0) == (i2 | 0)) {
   16811   HEAP32[i7 >> 2] = HEAP32[i6 >> 2];
   16812  }
   16813  i7 = i2 + 24 | 0;
   16814  i8 = HEAP32[i7 >> 2] | 0;
   16815  i6 = i2 + 28 | 0;
   16816  if ((i8 | 0) != 0) {
   16817   HEAP32[i8 + 12 >> 2] = HEAP32[i6 >> 2];
   16818  }
   16819  i8 = HEAP32[i6 >> 2] | 0;
   16820  if ((i8 | 0) != 0) {
   16821   HEAP32[i8 + 8 >> 2] = HEAP32[i7 >> 2];
   16822  }
   16823  i5 = i5 + 112 | 0;
   16824  if ((i2 + 16 | 0) == (HEAP32[i5 >> 2] | 0)) {
   16825   HEAP32[i5 >> 2] = HEAP32[i6 >> 2];
   16826  }
   16827  i6 = i2 + 40 | 0;
   16828  i7 = HEAP32[i6 >> 2] | 0;
   16829  i5 = i2 + 44 | 0;
   16830  if ((i7 | 0) != 0) {
   16831   HEAP32[i7 + 12 >> 2] = HEAP32[i5 >> 2];
   16832  }
   16833  i7 = HEAP32[i5 >> 2] | 0;
   16834  if ((i7 | 0) != 0) {
   16835   HEAP32[i7 + 8 >> 2] = HEAP32[i6 >> 2];
   16836  }
   16837  i4 = i4 + 112 | 0;
   16838  if ((i2 + 32 | 0) != (HEAP32[i4 >> 2] | 0)) {
   16839   i8 = i1 + 76 | 0;
   16840   i8 = HEAP32[i8 >> 2] | 0;
   16841   __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i2, i8);
   16842   i8 = i1 + 64 | 0;
   16843   i7 = HEAP32[i8 >> 2] | 0;
   16844   i7 = i7 + -1 | 0;
   16845   HEAP32[i8 >> 2] = i7;
   16846   STACKTOP = i3;
   16847   return;
   16848  }
   16849  HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
   16850  i8 = i1 + 76 | 0;
   16851  i8 = HEAP32[i8 >> 2] | 0;
   16852  __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i2, i8);
   16853  i8 = i1 + 64 | 0;
   16854  i7 = HEAP32[i8 >> 2] | 0;
   16855  i7 = i7 + -1 | 0;
   16856  HEAP32[i8 >> 2] = i7;
   16857  STACKTOP = i3;
   16858  return;
   16859 }
   16860 function __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib(i6, i3, i4, i8, i7) {
   16861  i6 = i6 | 0;
   16862  i3 = i3 | 0;
   16863  i4 = i4 | 0;
   16864  i8 = i8 | 0;
   16865  i7 = i7 | 0;
   16866  var i1 = 0, i2 = 0, i5 = 0, i9 = 0, i10 = 0;
   16867  i1 = STACKTOP;
   16868  if ((i6 | 0) == (HEAP32[i3 + 8 >> 2] | 0)) {
   16869   if ((HEAP32[i3 + 4 >> 2] | 0) != (i4 | 0)) {
   16870    STACKTOP = i1;
   16871    return;
   16872   }
   16873   i2 = i3 + 28 | 0;
   16874   if ((HEAP32[i2 >> 2] | 0) == 1) {
   16875    STACKTOP = i1;
   16876    return;
   16877   }
   16878   HEAP32[i2 >> 2] = i8;
   16879   STACKTOP = i1;
   16880   return;
   16881  }
   16882  if ((i6 | 0) != (HEAP32[i3 >> 2] | 0)) {
   16883   i9 = HEAP32[i6 + 8 >> 2] | 0;
   16884   FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[i9 >> 2] | 0) + 24 >> 2] & 3](i9, i3, i4, i8, i7);
   16885   STACKTOP = i1;
   16886   return;
   16887  }
   16888  if ((HEAP32[i3 + 16 >> 2] | 0) != (i4 | 0) ? (i5 = i3 + 20 | 0, (HEAP32[i5 >> 2] | 0) != (i4 | 0)) : 0) {
   16889   HEAP32[i3 + 32 >> 2] = i8;
   16890   i8 = i3 + 44 | 0;
   16891   if ((HEAP32[i8 >> 2] | 0) == 4) {
   16892    STACKTOP = i1;
   16893    return;
   16894   }
   16895   i9 = i3 + 52 | 0;
   16896   HEAP8[i9] = 0;
   16897   i10 = i3 + 53 | 0;
   16898   HEAP8[i10] = 0;
   16899   i6 = HEAP32[i6 + 8 >> 2] | 0;
   16900   FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i6 >> 2] | 0) + 20 >> 2] & 3](i6, i3, i4, i4, 1, i7);
   16901   if ((HEAP8[i10] | 0) != 0) {
   16902    if ((HEAP8[i9] | 0) == 0) {
   16903     i6 = 1;
   16904     i2 = 13;
   16905    }
   16906   } else {
   16907    i6 = 0;
   16908    i2 = 13;
   16909   }
   16910   do {
   16911    if ((i2 | 0) == 13) {
   16912     HEAP32[i5 >> 2] = i4;
   16913     i10 = i3 + 40 | 0;
   16914     HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + 1;
   16915     if ((HEAP32[i3 + 36 >> 2] | 0) == 1 ? (HEAP32[i3 + 24 >> 2] | 0) == 2 : 0) {
   16916      HEAP8[i3 + 54 | 0] = 1;
   16917      if (i6) {
   16918       break;
   16919      }
   16920     } else {
   16921      i2 = 16;
   16922     }
   16923     if ((i2 | 0) == 16 ? i6 : 0) {
   16924      break;
   16925     }
   16926     HEAP32[i8 >> 2] = 4;
   16927     STACKTOP = i1;
   16928     return;
   16929    }
   16930   } while (0);
   16931   HEAP32[i8 >> 2] = 3;
   16932   STACKTOP = i1;
   16933   return;
   16934  }
   16935  if ((i8 | 0) != 1) {
   16936   STACKTOP = i1;
   16937   return;
   16938  }
   16939  HEAP32[i3 + 32 >> 2] = 1;
   16940  STACKTOP = i1;
   16941  return;
   16942 }
   16943 function __ZN16b2BlockAllocator8AllocateEi(i4, i2) {
   16944  i4 = i4 | 0;
   16945  i2 = i2 | 0;
   16946  var i1 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0;
   16947  i1 = STACKTOP;
   16948  if ((i2 | 0) == 0) {
   16949   i9 = 0;
   16950   STACKTOP = i1;
   16951   return i9 | 0;
   16952  }
   16953  if ((i2 | 0) <= 0) {
   16954   ___assert_fail(1376, 1312, 104, 1392);
   16955  }
   16956  if ((i2 | 0) > 640) {
   16957   i9 = __Z7b2Alloci(i2) | 0;
   16958   STACKTOP = i1;
   16959   return i9 | 0;
   16960  }
   16961  i9 = HEAP8[632 + i2 | 0] | 0;
   16962  i5 = i9 & 255;
   16963  if (!((i9 & 255) < 14)) {
   16964   ___assert_fail(1408, 1312, 112, 1392);
   16965  }
   16966  i2 = i4 + (i5 << 2) + 12 | 0;
   16967  i3 = HEAP32[i2 >> 2] | 0;
   16968  if ((i3 | 0) != 0) {
   16969   HEAP32[i2 >> 2] = HEAP32[i3 >> 2];
   16970   i9 = i3;
   16971   STACKTOP = i1;
   16972   return i9 | 0;
   16973  }
   16974  i3 = i4 + 4 | 0;
   16975  i6 = HEAP32[i3 >> 2] | 0;
   16976  i7 = i4 + 8 | 0;
   16977  if ((i6 | 0) == (HEAP32[i7 >> 2] | 0)) {
   16978   i9 = HEAP32[i4 >> 2] | 0;
   16979   i6 = i6 + 128 | 0;
   16980   HEAP32[i7 >> 2] = i6;
   16981   i6 = __Z7b2Alloci(i6 << 3) | 0;
   16982   HEAP32[i4 >> 2] = i6;
   16983   _memcpy(i6 | 0, i9 | 0, HEAP32[i3 >> 2] << 3 | 0) | 0;
   16984   _memset((HEAP32[i4 >> 2] | 0) + (HEAP32[i3 >> 2] << 3) | 0, 0, 1024) | 0;
   16985   __Z6b2FreePv(i9);
   16986   i6 = HEAP32[i3 >> 2] | 0;
   16987  }
   16988  i9 = HEAP32[i4 >> 2] | 0;
   16989  i7 = __Z7b2Alloci(16384) | 0;
   16990  i4 = i9 + (i6 << 3) + 4 | 0;
   16991  HEAP32[i4 >> 2] = i7;
   16992  i5 = HEAP32[576 + (i5 << 2) >> 2] | 0;
   16993  HEAP32[i9 + (i6 << 3) >> 2] = i5;
   16994  i6 = 16384 / (i5 | 0) | 0;
   16995  if ((Math_imul(i6, i5) | 0) >= 16385) {
   16996   ___assert_fail(1448, 1312, 140, 1392);
   16997  }
   16998  i6 = i6 + -1 | 0;
   16999  if ((i6 | 0) > 0) {
   17000   i9 = 0;
   17001   while (1) {
   17002    i8 = i9 + 1 | 0;
   17003    HEAP32[i7 + (Math_imul(i9, i5) | 0) >> 2] = i7 + (Math_imul(i8, i5) | 0);
   17004    i7 = HEAP32[i4 >> 2] | 0;
   17005    if ((i8 | 0) == (i6 | 0)) {
   17006     break;
   17007    } else {
   17008     i9 = i8;
   17009    }
   17010   }
   17011  }
   17012  HEAP32[i7 + (Math_imul(i6, i5) | 0) >> 2] = 0;
   17013  HEAP32[i2 >> 2] = HEAP32[HEAP32[i4 >> 2] >> 2];
   17014  HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1;
   17015  i9 = HEAP32[i4 >> 2] | 0;
   17016  STACKTOP = i1;
   17017  return i9 | 0;
   17018 }
   17019 function __ZN9b2Contact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i4, i5, i1, i3, i6) {
   17020  i4 = i4 | 0;
   17021  i5 = i5 | 0;
   17022  i1 = i1 | 0;
   17023  i3 = i3 | 0;
   17024  i6 = i6 | 0;
   17025  var i2 = 0, i7 = 0, i8 = 0, i9 = 0;
   17026  i2 = STACKTOP;
   17027  if ((HEAP8[4200] | 0) == 0) {
   17028   HEAP32[1002] = 3;
   17029   HEAP32[4012 >> 2] = 3;
   17030   HEAP8[4016 | 0] = 1;
   17031   HEAP32[4104 >> 2] = 4;
   17032   HEAP32[4108 >> 2] = 4;
   17033   HEAP8[4112 | 0] = 1;
   17034   HEAP32[4032 >> 2] = 4;
   17035   HEAP32[4036 >> 2] = 4;
   17036   HEAP8[4040 | 0] = 0;
   17037   HEAP32[4128 >> 2] = 5;
   17038   HEAP32[4132 >> 2] = 5;
   17039   HEAP8[4136 | 0] = 1;
   17040   HEAP32[4056 >> 2] = 6;
   17041   HEAP32[4060 >> 2] = 6;
   17042   HEAP8[4064 | 0] = 1;
   17043   HEAP32[4020 >> 2] = 6;
   17044   HEAP32[4024 >> 2] = 6;
   17045   HEAP8[4028 | 0] = 0;
   17046   HEAP32[4080 >> 2] = 7;
   17047   HEAP32[4084 >> 2] = 7;
   17048   HEAP8[4088 | 0] = 1;
   17049   HEAP32[4116 >> 2] = 7;
   17050   HEAP32[4120 >> 2] = 7;
   17051   HEAP8[4124 | 0] = 0;
   17052   HEAP32[4152 >> 2] = 8;
   17053   HEAP32[4156 >> 2] = 8;
   17054   HEAP8[4160 | 0] = 1;
   17055   HEAP32[4044 >> 2] = 8;
   17056   HEAP32[4048 >> 2] = 8;
   17057   HEAP8[4052 | 0] = 0;
   17058   HEAP32[4176 >> 2] = 9;
   17059   HEAP32[4180 >> 2] = 9;
   17060   HEAP8[4184 | 0] = 1;
   17061   HEAP32[4140 >> 2] = 9;
   17062   HEAP32[4144 >> 2] = 9;
   17063   HEAP8[4148 | 0] = 0;
   17064   HEAP8[4200] = 1;
   17065  }
   17066  i7 = HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 4 >> 2] | 0;
   17067  i8 = HEAP32[(HEAP32[i1 + 12 >> 2] | 0) + 4 >> 2] | 0;
   17068  if (!(i7 >>> 0 < 4)) {
   17069   ___assert_fail(4208, 4256, 80, 4344);
   17070  }
   17071  if (!(i8 >>> 0 < 4)) {
   17072   ___assert_fail(4296, 4256, 81, 4344);
   17073  }
   17074  i9 = HEAP32[4008 + (i7 * 48 | 0) + (i8 * 12 | 0) >> 2] | 0;
   17075  if ((i9 | 0) == 0) {
   17076   i9 = 0;
   17077   STACKTOP = i2;
   17078   return i9 | 0;
   17079  }
   17080  if ((HEAP8[4008 + (i7 * 48 | 0) + (i8 * 12 | 0) + 8 | 0] | 0) == 0) {
   17081   i9 = FUNCTION_TABLE_iiiiii[i9 & 15](i1, i3, i4, i5, i6) | 0;
   17082   STACKTOP = i2;
   17083   return i9 | 0;
   17084  } else {
   17085   i9 = FUNCTION_TABLE_iiiiii[i9 & 15](i4, i5, i1, i3, i6) | 0;
   17086   STACKTOP = i2;
   17087   return i9 | 0;
   17088  }
   17089  return 0;
   17090 }
   17091 function __ZN13b2DynamicTree9MoveProxyEiRK6b2AABBRK6b2Vec2(i1, i2, i13, i9) {
   17092  i1 = i1 | 0;
   17093  i2 = i2 | 0;
   17094  i13 = i13 | 0;
   17095  i9 = i9 | 0;
   17096  var i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d10 = 0.0, d11 = 0.0, i12 = 0;
   17097  i4 = STACKTOP;
   17098  if (!((i2 | 0) > -1)) {
   17099   ___assert_fail(3072, 2944, 135, 3152);
   17100  }
   17101  if ((HEAP32[i1 + 12 >> 2] | 0) <= (i2 | 0)) {
   17102   ___assert_fail(3072, 2944, 135, 3152);
   17103  }
   17104  i3 = i1 + 4 | 0;
   17105  i12 = HEAP32[i3 >> 2] | 0;
   17106  if (!((HEAP32[i12 + (i2 * 36 | 0) + 24 >> 2] | 0) == -1)) {
   17107   ___assert_fail(3120, 2944, 137, 3152);
   17108  }
   17109  if (((+HEAPF32[i12 + (i2 * 36 | 0) >> 2] <= +HEAPF32[i13 >> 2] ? +HEAPF32[i12 + (i2 * 36 | 0) + 4 >> 2] <= +HEAPF32[i13 + 4 >> 2] : 0) ? +HEAPF32[i13 + 8 >> 2] <= +HEAPF32[i12 + (i2 * 36 | 0) + 8 >> 2] : 0) ? +HEAPF32[i13 + 12 >> 2] <= +HEAPF32[i12 + (i2 * 36 | 0) + 12 >> 2] : 0) {
   17110   i13 = 0;
   17111   STACKTOP = i4;
   17112   return i13 | 0;
   17113  }
   17114  __ZN13b2DynamicTree10RemoveLeafEi(i1, i2);
   17115  i12 = i13;
   17116  d6 = +HEAPF32[i12 >> 2];
   17117  d8 = +HEAPF32[i12 + 4 >> 2];
   17118  i13 = i13 + 8 | 0;
   17119  d10 = +HEAPF32[i13 >> 2];
   17120  d6 = d6 + -.10000000149011612;
   17121  d8 = d8 + -.10000000149011612;
   17122  d10 = d10 + .10000000149011612;
   17123  d5 = +HEAPF32[i13 + 4 >> 2] + .10000000149011612;
   17124  d11 = +HEAPF32[i9 >> 2] * 2.0;
   17125  d7 = +HEAPF32[i9 + 4 >> 2] * 2.0;
   17126  if (d11 < 0.0) {
   17127   d6 = d6 + d11;
   17128  } else {
   17129   d10 = d11 + d10;
   17130  }
   17131  if (d7 < 0.0) {
   17132   d8 = d8 + d7;
   17133  } else {
   17134   d5 = d7 + d5;
   17135  }
   17136  i13 = HEAP32[i3 >> 2] | 0;
   17137  d7 = +d6;
   17138  d11 = +d8;
   17139  i12 = i13 + (i2 * 36 | 0) | 0;
   17140  HEAPF32[i12 >> 2] = d7;
   17141  HEAPF32[i12 + 4 >> 2] = d11;
   17142  d10 = +d10;
   17143  d11 = +d5;
   17144  i13 = i13 + (i2 * 36 | 0) + 8 | 0;
   17145  HEAPF32[i13 >> 2] = d10;
   17146  HEAPF32[i13 + 4 >> 2] = d11;
   17147  __ZN13b2DynamicTree10InsertLeafEi(i1, i2);
   17148  i13 = 1;
   17149  STACKTOP = i4;
   17150  return i13 | 0;
   17151 }
   17152 function __ZNK9b2Simplex16GetWitnessPointsEP6b2Vec2S1_(i1, i4, i5) {
   17153  i1 = i1 | 0;
   17154  i4 = i4 | 0;
   17155  i5 = i5 | 0;
   17156  var i2 = 0, i3 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i9 = 0, i10 = 0, d11 = 0.0;
   17157  i2 = STACKTOP;
   17158  i3 = HEAP32[i1 + 108 >> 2] | 0;
   17159  if ((i3 | 0) == 2) {
   17160   i9 = i1 + 24 | 0;
   17161   d7 = +HEAPF32[i9 >> 2];
   17162   i3 = i1 + 60 | 0;
   17163   d8 = +HEAPF32[i3 >> 2];
   17164   d6 = +(d7 * +HEAPF32[i1 >> 2] + d8 * +HEAPF32[i1 + 36 >> 2]);
   17165   d8 = +(d7 * +HEAPF32[i1 + 4 >> 2] + d8 * +HEAPF32[i1 + 40 >> 2]);
   17166   HEAPF32[i4 >> 2] = d6;
   17167   HEAPF32[i4 + 4 >> 2] = d8;
   17168   d8 = +HEAPF32[i9 >> 2];
   17169   d6 = +HEAPF32[i3 >> 2];
   17170   d7 = +(d8 * +HEAPF32[i1 + 8 >> 2] + d6 * +HEAPF32[i1 + 44 >> 2]);
   17171   d6 = +(d8 * +HEAPF32[i1 + 12 >> 2] + d6 * +HEAPF32[i1 + 48 >> 2]);
   17172   HEAPF32[i5 >> 2] = d7;
   17173   HEAPF32[i5 + 4 >> 2] = d6;
   17174   STACKTOP = i2;
   17175   return;
   17176  } else if ((i3 | 0) == 1) {
   17177   i10 = i1;
   17178   i9 = HEAP32[i10 + 4 >> 2] | 0;
   17179   i3 = i4;
   17180   HEAP32[i3 >> 2] = HEAP32[i10 >> 2];
   17181   HEAP32[i3 + 4 >> 2] = i9;
   17182   i3 = i1 + 8 | 0;
   17183   i4 = HEAP32[i3 + 4 >> 2] | 0;
   17184   i9 = i5;
   17185   HEAP32[i9 >> 2] = HEAP32[i3 >> 2];
   17186   HEAP32[i9 + 4 >> 2] = i4;
   17187   STACKTOP = i2;
   17188   return;
   17189  } else if ((i3 | 0) == 0) {
   17190   ___assert_fail(2712, 2672, 217, 2752);
   17191  } else if ((i3 | 0) == 3) {
   17192   d11 = +HEAPF32[i1 + 24 >> 2];
   17193   d6 = +HEAPF32[i1 + 60 >> 2];
   17194   d8 = +HEAPF32[i1 + 96 >> 2];
   17195   d7 = +(d11 * +HEAPF32[i1 >> 2] + d6 * +HEAPF32[i1 + 36 >> 2] + d8 * +HEAPF32[i1 + 72 >> 2]);
   17196   d8 = +(d11 * +HEAPF32[i1 + 4 >> 2] + d6 * +HEAPF32[i1 + 40 >> 2] + d8 * +HEAPF32[i1 + 76 >> 2]);
   17197   i10 = i4;
   17198   HEAPF32[i10 >> 2] = d7;
   17199   HEAPF32[i10 + 4 >> 2] = d8;
   17200   i10 = i5;
   17201   HEAPF32[i10 >> 2] = d7;
   17202   HEAPF32[i10 + 4 >> 2] = d8;
   17203   STACKTOP = i2;
   17204   return;
   17205  } else {
   17206   ___assert_fail(2712, 2672, 236, 2752);
   17207  }
   17208 }
   17209 function __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i4, i3, i1) {
   17210  i4 = i4 | 0;
   17211  i3 = i3 | 0;
   17212  i1 = i1 | 0;
   17213  var i2 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0;
   17214  i2 = STACKTOP;
   17215  if (!((i1 | 0) > -1)) {
   17216   ___assert_fail(6832, 6792, 89, 6872);
   17217  }
   17218  i5 = i4 + 16 | 0;
   17219  if (((HEAP32[i5 >> 2] | 0) + -1 | 0) <= (i1 | 0)) {
   17220   ___assert_fail(6832, 6792, 89, 6872);
   17221  }
   17222  HEAP32[i3 + 4 >> 2] = 1;
   17223  HEAPF32[i3 + 8 >> 2] = +HEAPF32[i4 + 8 >> 2];
   17224  i6 = i4 + 12 | 0;
   17225  i7 = (HEAP32[i6 >> 2] | 0) + (i1 << 3) | 0;
   17226  i8 = HEAP32[i7 + 4 >> 2] | 0;
   17227  i9 = i3 + 12 | 0;
   17228  HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
   17229  HEAP32[i9 + 4 >> 2] = i8;
   17230  i9 = (HEAP32[i6 >> 2] | 0) + (i1 + 1 << 3) | 0;
   17231  i8 = HEAP32[i9 + 4 >> 2] | 0;
   17232  i7 = i3 + 20 | 0;
   17233  HEAP32[i7 >> 2] = HEAP32[i9 >> 2];
   17234  HEAP32[i7 + 4 >> 2] = i8;
   17235  i7 = i3 + 28 | 0;
   17236  if ((i1 | 0) > 0) {
   17237   i10 = (HEAP32[i6 >> 2] | 0) + (i1 + -1 << 3) | 0;
   17238   i8 = HEAP32[i10 + 4 >> 2] | 0;
   17239   i9 = i7;
   17240   HEAP32[i9 >> 2] = HEAP32[i10 >> 2];
   17241   HEAP32[i9 + 4 >> 2] = i8;
   17242   HEAP8[i3 + 44 | 0] = 1;
   17243  } else {
   17244   i8 = i4 + 20 | 0;
   17245   i9 = HEAP32[i8 + 4 >> 2] | 0;
   17246   i10 = i7;
   17247   HEAP32[i10 >> 2] = HEAP32[i8 >> 2];
   17248   HEAP32[i10 + 4 >> 2] = i9;
   17249   HEAP8[i3 + 44 | 0] = HEAP8[i4 + 36 | 0] | 0;
   17250  }
   17251  i7 = i3 + 36 | 0;
   17252  if (((HEAP32[i5 >> 2] | 0) + -2 | 0) > (i1 | 0)) {
   17253   i8 = (HEAP32[i6 >> 2] | 0) + (i1 + 2 << 3) | 0;
   17254   i9 = HEAP32[i8 + 4 >> 2] | 0;
   17255   i10 = i7;
   17256   HEAP32[i10 >> 2] = HEAP32[i8 >> 2];
   17257   HEAP32[i10 + 4 >> 2] = i9;
   17258   HEAP8[i3 + 45 | 0] = 1;
   17259   STACKTOP = i2;
   17260   return;
   17261  } else {
   17262   i8 = i4 + 28 | 0;
   17263   i9 = HEAP32[i8 + 4 >> 2] | 0;
   17264   i10 = i7;
   17265   HEAP32[i10 >> 2] = HEAP32[i8 >> 2];
   17266   HEAP32[i10 + 4 >> 2] = i9;
   17267   HEAP8[i3 + 45 | 0] = HEAP8[i4 + 37 | 0] | 0;
   17268   STACKTOP = i2;
   17269   return;
   17270  }
   17271 }
   17272 function __ZN15b2DistanceProxy3SetEPK7b2Shapei(i3, i1, i5) {
   17273  i3 = i3 | 0;
   17274  i1 = i1 | 0;
   17275  i5 = i5 | 0;
   17276  var i2 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0;
   17277  i2 = STACKTOP;
   17278  i4 = HEAP32[i1 + 4 >> 2] | 0;
   17279  if ((i4 | 0) == 1) {
   17280   HEAP32[i3 + 16 >> 2] = i1 + 12;
   17281   HEAP32[i3 + 20 >> 2] = 2;
   17282   HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
   17283   STACKTOP = i2;
   17284   return;
   17285  } else if ((i4 | 0) == 3) {
   17286   if (!((i5 | 0) > -1)) {
   17287    ___assert_fail(2632, 2672, 53, 2704);
   17288   }
   17289   i4 = i1 + 16 | 0;
   17290   if ((HEAP32[i4 >> 2] | 0) <= (i5 | 0)) {
   17291    ___assert_fail(2632, 2672, 53, 2704);
   17292   }
   17293   i7 = i1 + 12 | 0;
   17294   i9 = (HEAP32[i7 >> 2] | 0) + (i5 << 3) | 0;
   17295   i8 = HEAP32[i9 + 4 >> 2] | 0;
   17296   i6 = i3;
   17297   HEAP32[i6 >> 2] = HEAP32[i9 >> 2];
   17298   HEAP32[i6 + 4 >> 2] = i8;
   17299   i6 = i5 + 1 | 0;
   17300   i5 = i3 + 8 | 0;
   17301   i7 = HEAP32[i7 >> 2] | 0;
   17302   if ((i6 | 0) < (HEAP32[i4 >> 2] | 0)) {
   17303    i7 = i7 + (i6 << 3) | 0;
   17304    i8 = HEAP32[i7 + 4 >> 2] | 0;
   17305    i9 = i5;
   17306    HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
   17307    HEAP32[i9 + 4 >> 2] = i8;
   17308   } else {
   17309    i8 = HEAP32[i7 + 4 >> 2] | 0;
   17310    i9 = i5;
   17311    HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
   17312    HEAP32[i9 + 4 >> 2] = i8;
   17313   }
   17314   HEAP32[i3 + 16 >> 2] = i3;
   17315   HEAP32[i3 + 20 >> 2] = 2;
   17316   HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
   17317   STACKTOP = i2;
   17318   return;
   17319  } else if ((i4 | 0) == 2) {
   17320   HEAP32[i3 + 16 >> 2] = i1 + 20;
   17321   HEAP32[i3 + 20 >> 2] = HEAP32[i1 + 148 >> 2];
   17322   HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
   17323   STACKTOP = i2;
   17324   return;
   17325  } else if ((i4 | 0) == 0) {
   17326   HEAP32[i3 + 16 >> 2] = i1 + 12;
   17327   HEAP32[i3 + 20 >> 2] = 1;
   17328   HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
   17329   STACKTOP = i2;
   17330   return;
   17331  } else {
   17332   ___assert_fail(2712, 2672, 81, 2704);
   17333  }
   17334 }
   17335 function __ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i2, i7, i4, i5, i6) {
   17336  i2 = i2 | 0;
   17337  i7 = i7 | 0;
   17338  i4 = i4 | 0;
   17339  i5 = i5 | 0;
   17340  i6 = i6 | 0;
   17341  var d1 = 0.0, d3 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i12 = 0, i13 = 0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, i18 = 0, i19 = 0, i20 = 0;
   17342  i12 = STACKTOP;
   17343  i13 = HEAP32[i5 + 148 >> 2] | 0;
   17344  if (!((i4 | 0) > -1)) {
   17345   ___assert_fail(5640, 5688, 32, 5752);
   17346  }
   17347  if ((HEAP32[i2 + 148 >> 2] | 0) <= (i4 | 0)) {
   17348   ___assert_fail(5640, 5688, 32, 5752);
   17349  }
   17350  d11 = +HEAPF32[i7 + 12 >> 2];
   17351  d9 = +HEAPF32[i2 + (i4 << 3) + 84 >> 2];
   17352  d1 = +HEAPF32[i7 + 8 >> 2];
   17353  d3 = +HEAPF32[i2 + (i4 << 3) + 88 >> 2];
   17354  d8 = d11 * d9 - d1 * d3;
   17355  d3 = d9 * d1 + d11 * d3;
   17356  d9 = +HEAPF32[i6 + 12 >> 2];
   17357  d10 = +HEAPF32[i6 + 8 >> 2];
   17358  d16 = d9 * d8 + d10 * d3;
   17359  d14 = d9 * d3 - d8 * d10;
   17360  if ((i13 | 0) > 0) {
   17361   i19 = 0;
   17362   i20 = 0;
   17363   d15 = 3.4028234663852886e+38;
   17364   while (1) {
   17365    d17 = d16 * +HEAPF32[i5 + (i19 << 3) + 20 >> 2] + d14 * +HEAPF32[i5 + (i19 << 3) + 24 >> 2];
   17366    i18 = d17 < d15;
   17367    i20 = i18 ? i19 : i20;
   17368    i19 = i19 + 1 | 0;
   17369    if ((i19 | 0) == (i13 | 0)) {
   17370     break;
   17371    } else {
   17372     d15 = i18 ? d17 : d15;
   17373    }
   17374   }
   17375  } else {
   17376   i20 = 0;
   17377  }
   17378  d16 = +HEAPF32[i2 + (i4 << 3) + 20 >> 2];
   17379  d17 = +HEAPF32[i2 + (i4 << 3) + 24 >> 2];
   17380  d14 = +HEAPF32[i5 + (i20 << 3) + 20 >> 2];
   17381  d15 = +HEAPF32[i5 + (i20 << 3) + 24 >> 2];
   17382  STACKTOP = i12;
   17383  return +(d8 * (+HEAPF32[i6 >> 2] + (d9 * d14 - d10 * d15) - (+HEAPF32[i7 >> 2] + (d11 * d16 - d1 * d17))) + d3 * (d14 * d10 + d9 * d15 + +HEAPF32[i6 + 4 >> 2] - (d16 * d1 + d11 * d17 + +HEAPF32[i7 + 4 >> 2])));
   17384 }
   17385 function __Z4iterv() {
   17386  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, d7 = 0.0;
   17387  i1 = STACKTOP;
   17388  STACKTOP = STACKTOP + 48 | 0;
   17389  i2 = i1;
   17390  i3 = i1 + 32 | 0;
   17391  i4 = HEAP32[16] | 0;
   17392  if ((i4 | 0) >= (HEAP32[4] | 0)) {
   17393   HEAP32[16] = i4 + 1;
   17394   __Z7measurePl(i3, HEAP32[8] | 0);
   17395   d7 = +HEAPF32[i3 + 4 >> 2];
   17396   d6 = +(HEAP32[10] | 0) / 1.0e6 * 1.0e3;
   17397   d5 = +(HEAP32[12] | 0) / 1.0e6 * 1.0e3;
   17398   HEAPF64[tempDoublePtr >> 3] = +HEAPF32[i3 >> 2];
   17399   HEAP32[i2 >> 2] = HEAP32[tempDoublePtr >> 2];
   17400   HEAP32[i2 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
   17401   i4 = i2 + 8 | 0;
   17402   HEAPF64[tempDoublePtr >> 3] = d7;
   17403   HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2];
   17404   HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
   17405   i4 = i2 + 16 | 0;
   17406   HEAPF64[tempDoublePtr >> 3] = d6;
   17407   HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2];
   17408   HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
   17409   i4 = i2 + 24 | 0;
   17410   HEAPF64[tempDoublePtr >> 3] = d5;
   17411   HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2];
   17412   HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
   17413   _printf(96, i2 | 0) | 0;
   17414   _emscripten_run_script(152);
   17415   if ((HEAP32[18] | 0) == 0) {
   17416    STACKTOP = i1;
   17417    return;
   17418   }
   17419   _emscripten_cancel_main_loop();
   17420   STACKTOP = i1;
   17421   return;
   17422  }
   17423  i3 = _clock() | 0;
   17424  __ZN7b2World4StepEfii(HEAP32[6] | 0, .01666666753590107, 3, 3);
   17425  i3 = (_clock() | 0) - i3 | 0;
   17426  i2 = HEAP32[16] | 0;
   17427  HEAP32[(HEAP32[8] | 0) + (i2 << 2) >> 2] = i3;
   17428  if ((i3 | 0) < (HEAP32[10] | 0)) {
   17429   HEAP32[10] = i3;
   17430  }
   17431  if ((i3 | 0) > (HEAP32[12] | 0)) {
   17432   HEAP32[12] = i3;
   17433  }
   17434  HEAP32[16] = i2 + 1;
   17435  STACKTOP = i1;
   17436  return;
   17437 }
   17438 function __ZN13b2DynamicTree12AllocateNodeEv(i5) {
   17439  i5 = i5 | 0;
   17440  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0;
   17441  i1 = STACKTOP;
   17442  i2 = i5 + 16 | 0;
   17443  i3 = HEAP32[i2 >> 2] | 0;
   17444  if ((i3 | 0) == -1) {
   17445   i4 = i5 + 8 | 0;
   17446   i6 = HEAP32[i4 >> 2] | 0;
   17447   i3 = i5 + 12 | 0;
   17448   if ((i6 | 0) != (HEAP32[i3 >> 2] | 0)) {
   17449    ___assert_fail(2912, 2944, 61, 2984);
   17450   }
   17451   i5 = i5 + 4 | 0;
   17452   i7 = HEAP32[i5 >> 2] | 0;
   17453   HEAP32[i3 >> 2] = i6 << 1;
   17454   i6 = __Z7b2Alloci(i6 * 72 | 0) | 0;
   17455   HEAP32[i5 >> 2] = i6;
   17456   _memcpy(i6 | 0, i7 | 0, (HEAP32[i4 >> 2] | 0) * 36 | 0) | 0;
   17457   __Z6b2FreePv(i7);
   17458   i6 = HEAP32[i4 >> 2] | 0;
   17459   i7 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
   17460   i5 = HEAP32[i5 >> 2] | 0;
   17461   if ((i6 | 0) < (i7 | 0)) {
   17462    i7 = i6;
   17463    while (1) {
   17464     i6 = i7 + 1 | 0;
   17465     HEAP32[i5 + (i7 * 36 | 0) + 20 >> 2] = i6;
   17466     HEAP32[i5 + (i7 * 36 | 0) + 32 >> 2] = -1;
   17467     i7 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
   17468     if ((i6 | 0) < (i7 | 0)) {
   17469      i7 = i6;
   17470     } else {
   17471      break;
   17472     }
   17473    }
   17474   }
   17475   HEAP32[i5 + (i7 * 36 | 0) + 20 >> 2] = -1;
   17476   HEAP32[i5 + (((HEAP32[i3 >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1;
   17477   i3 = HEAP32[i4 >> 2] | 0;
   17478   HEAP32[i2 >> 2] = i3;
   17479  } else {
   17480   i4 = i5 + 8 | 0;
   17481   i5 = HEAP32[i5 + 4 >> 2] | 0;
   17482  }
   17483  i7 = i5 + (i3 * 36 | 0) + 20 | 0;
   17484  HEAP32[i2 >> 2] = HEAP32[i7 >> 2];
   17485  HEAP32[i7 >> 2] = -1;
   17486  HEAP32[i5 + (i3 * 36 | 0) + 24 >> 2] = -1;
   17487  HEAP32[i5 + (i3 * 36 | 0) + 28 >> 2] = -1;
   17488  HEAP32[i5 + (i3 * 36 | 0) + 32 >> 2] = 0;
   17489  HEAP32[i5 + (i3 * 36 | 0) + 16 >> 2] = 0;
   17490  HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
   17491  STACKTOP = i1;
   17492  return i3 | 0;
   17493 }
   17494 function __ZN9b2Fixture6CreateEP16b2BlockAllocatorP6b2BodyPK12b2FixtureDef(i1, i5, i4, i3) {
   17495  i1 = i1 | 0;
   17496  i5 = i5 | 0;
   17497  i4 = i4 | 0;
   17498  i3 = i3 | 0;
   17499  var i2 = 0, i6 = 0, i7 = 0, d8 = 0.0;
   17500  i2 = STACKTOP;
   17501  HEAP32[i1 + 40 >> 2] = HEAP32[i3 + 4 >> 2];
   17502  HEAPF32[i1 + 16 >> 2] = +HEAPF32[i3 + 8 >> 2];
   17503  HEAPF32[i1 + 20 >> 2] = +HEAPF32[i3 + 12 >> 2];
   17504  HEAP32[i1 + 8 >> 2] = i4;
   17505  HEAP32[i1 + 4 >> 2] = 0;
   17506  i4 = i1 + 32 | 0;
   17507  i6 = i3 + 22 | 0;
   17508  HEAP16[i4 + 0 >> 1] = HEAP16[i6 + 0 >> 1] | 0;
   17509  HEAP16[i4 + 2 >> 1] = HEAP16[i6 + 2 >> 1] | 0;
   17510  HEAP16[i4 + 4 >> 1] = HEAP16[i6 + 4 >> 1] | 0;
   17511  HEAP8[i1 + 38 | 0] = HEAP8[i3 + 20 | 0] | 0;
   17512  i4 = HEAP32[i3 >> 2] | 0;
   17513  i4 = FUNCTION_TABLE_iii[HEAP32[(HEAP32[i4 >> 2] | 0) + 8 >> 2] & 3](i4, i5) | 0;
   17514  HEAP32[i1 + 12 >> 2] = i4;
   17515  i4 = FUNCTION_TABLE_ii[HEAP32[(HEAP32[i4 >> 2] | 0) + 12 >> 2] & 3](i4) | 0;
   17516  i6 = __ZN16b2BlockAllocator8AllocateEi(i5, i4 * 28 | 0) | 0;
   17517  i5 = i1 + 24 | 0;
   17518  HEAP32[i5 >> 2] = i6;
   17519  if ((i4 | 0) > 0) {
   17520   i7 = 0;
   17521  } else {
   17522   i7 = i1 + 28 | 0;
   17523   HEAP32[i7 >> 2] = 0;
   17524   i7 = i3 + 16 | 0;
   17525   d8 = +HEAPF32[i7 >> 2];
   17526   HEAPF32[i1 >> 2] = d8;
   17527   STACKTOP = i2;
   17528   return;
   17529  }
   17530  do {
   17531   HEAP32[i6 + (i7 * 28 | 0) + 16 >> 2] = 0;
   17532   i6 = HEAP32[i5 >> 2] | 0;
   17533   HEAP32[i6 + (i7 * 28 | 0) + 24 >> 2] = -1;
   17534   i7 = i7 + 1 | 0;
   17535  } while ((i7 | 0) != (i4 | 0));
   17536  i7 = i1 + 28 | 0;
   17537  HEAP32[i7 >> 2] = 0;
   17538  i7 = i3 + 16 | 0;
   17539  d8 = +HEAPF32[i7 >> 2];
   17540  HEAPF32[i1 >> 2] = d8;
   17541  STACKTOP = i2;
   17542  return;
   17543 }
   17544 function __Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i4, i1, i5, d9, i2) {
   17545  i4 = i4 | 0;
   17546  i1 = i1 | 0;
   17547  i5 = i5 | 0;
   17548  d9 = +d9;
   17549  i2 = i2 | 0;
   17550  var i3 = 0, i6 = 0, d7 = 0.0, i8 = 0, i10 = 0, d11 = 0.0, d12 = 0.0, i13 = 0;
   17551  i3 = STACKTOP;
   17552  d12 = +HEAPF32[i5 >> 2];
   17553  d11 = +HEAPF32[i5 + 4 >> 2];
   17554  i5 = i1 + 4 | 0;
   17555  d7 = d12 * +HEAPF32[i1 >> 2] + d11 * +HEAPF32[i5 >> 2] - d9;
   17556  i6 = i1 + 12 | 0;
   17557  i8 = i1 + 16 | 0;
   17558  d9 = d12 * +HEAPF32[i6 >> 2] + d11 * +HEAPF32[i8 >> 2] - d9;
   17559  if (!(d7 <= 0.0)) {
   17560   i10 = 0;
   17561  } else {
   17562   HEAP32[i4 + 0 >> 2] = HEAP32[i1 + 0 >> 2];
   17563   HEAP32[i4 + 4 >> 2] = HEAP32[i1 + 4 >> 2];
   17564   HEAP32[i4 + 8 >> 2] = HEAP32[i1 + 8 >> 2];
   17565   i10 = 1;
   17566  }
   17567  if (d9 <= 0.0) {
   17568   i13 = i10 + 1 | 0;
   17569   i10 = i4 + (i10 * 12 | 0) | 0;
   17570   HEAP32[i10 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
   17571   HEAP32[i10 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
   17572   HEAP32[i10 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
   17573   i10 = i13;
   17574  }
   17575  if (!(d7 * d9 < 0.0)) {
   17576   i13 = i10;
   17577   STACKTOP = i3;
   17578   return i13 | 0;
   17579  }
   17580  d9 = d7 / (d7 - d9);
   17581  d11 = +HEAPF32[i1 >> 2];
   17582  d12 = +HEAPF32[i5 >> 2];
   17583  d11 = +(d11 + d9 * (+HEAPF32[i6 >> 2] - d11));
   17584  d12 = +(d12 + d9 * (+HEAPF32[i8 >> 2] - d12));
   17585  i13 = i4 + (i10 * 12 | 0) | 0;
   17586  HEAPF32[i13 >> 2] = d11;
   17587  HEAPF32[i13 + 4 >> 2] = d12;
   17588  i13 = i4 + (i10 * 12 | 0) + 8 | 0;
   17589  HEAP8[i13] = i2;
   17590  HEAP8[i13 + 1 | 0] = HEAP8[i1 + 9 | 0] | 0;
   17591  HEAP8[i13 + 2 | 0] = 0;
   17592  HEAP8[i13 + 3 | 0] = 1;
   17593  i13 = i10 + 1 | 0;
   17594  STACKTOP = i3;
   17595  return i13 | 0;
   17596 }
   17597 function __Z16b2CollideCirclesP10b2ManifoldPK13b2CircleShapeRK11b2TransformS3_S6_(i1, i7, i8, i6, i9) {
   17598  i1 = i1 | 0;
   17599  i7 = i7 | 0;
   17600  i8 = i8 | 0;
   17601  i6 = i6 | 0;
   17602  i9 = i9 | 0;
   17603  var i2 = 0, i3 = 0, i4 = 0, i5 = 0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0;
   17604  i2 = STACKTOP;
   17605  i4 = i1 + 60 | 0;
   17606  HEAP32[i4 >> 2] = 0;
   17607  i3 = i7 + 12 | 0;
   17608  d10 = +HEAPF32[i8 + 12 >> 2];
   17609  d14 = +HEAPF32[i3 >> 2];
   17610  d13 = +HEAPF32[i8 + 8 >> 2];
   17611  d11 = +HEAPF32[i7 + 16 >> 2];
   17612  i5 = i6 + 12 | 0;
   17613  d16 = +HEAPF32[i9 + 12 >> 2];
   17614  d18 = +HEAPF32[i5 >> 2];
   17615  d17 = +HEAPF32[i9 + 8 >> 2];
   17616  d15 = +HEAPF32[i6 + 16 >> 2];
   17617  d12 = +HEAPF32[i9 >> 2] + (d16 * d18 - d17 * d15) - (+HEAPF32[i8 >> 2] + (d10 * d14 - d13 * d11));
   17618  d11 = d18 * d17 + d16 * d15 + +HEAPF32[i9 + 4 >> 2] - (d14 * d13 + d10 * d11 + +HEAPF32[i8 + 4 >> 2]);
   17619  d10 = +HEAPF32[i7 + 8 >> 2] + +HEAPF32[i6 + 8 >> 2];
   17620  if (d12 * d12 + d11 * d11 > d10 * d10) {
   17621   STACKTOP = i2;
   17622   return;
   17623  }
   17624  HEAP32[i1 + 56 >> 2] = 0;
   17625  i9 = i3;
   17626  i8 = HEAP32[i9 + 4 >> 2] | 0;
   17627  i7 = i1 + 48 | 0;
   17628  HEAP32[i7 >> 2] = HEAP32[i9 >> 2];
   17629  HEAP32[i7 + 4 >> 2] = i8;
   17630  HEAPF32[i1 + 40 >> 2] = 0.0;
   17631  HEAPF32[i1 + 44 >> 2] = 0.0;
   17632  HEAP32[i4 >> 2] = 1;
   17633  i7 = i5;
   17634  i8 = HEAP32[i7 + 4 >> 2] | 0;
   17635  i9 = i1;
   17636  HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
   17637  HEAP32[i9 + 4 >> 2] = i8;
   17638  HEAP32[i1 + 16 >> 2] = 0;
   17639  STACKTOP = i2;
   17640  return;
   17641 }
   17642 function __ZNK14b2PolygonShape11ComputeAABBEP6b2AABBRK11b2Transformi(i1, i2, i7, i3) {
   17643  i1 = i1 | 0;
   17644  i2 = i2 | 0;
   17645  i7 = i7 | 0;
   17646  i3 = i3 | 0;
   17647  var d4 = 0.0, d5 = 0.0, d6 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, i13 = 0, d14 = 0.0, d15 = 0.0, d16 = 0.0;
   17648  i3 = STACKTOP;
   17649  d4 = +HEAPF32[i7 + 12 >> 2];
   17650  d15 = +HEAPF32[i1 + 20 >> 2];
   17651  d5 = +HEAPF32[i7 + 8 >> 2];
   17652  d12 = +HEAPF32[i1 + 24 >> 2];
   17653  d6 = +HEAPF32[i7 >> 2];
   17654  d9 = d6 + (d4 * d15 - d5 * d12);
   17655  d8 = +HEAPF32[i7 + 4 >> 2];
   17656  d12 = d15 * d5 + d4 * d12 + d8;
   17657  i7 = HEAP32[i1 + 148 >> 2] | 0;
   17658  if ((i7 | 0) > 1) {
   17659   d10 = d9;
   17660   d11 = d12;
   17661   i13 = 1;
   17662   do {
   17663    d16 = +HEAPF32[i1 + (i13 << 3) + 20 >> 2];
   17664    d14 = +HEAPF32[i1 + (i13 << 3) + 24 >> 2];
   17665    d15 = d6 + (d4 * d16 - d5 * d14);
   17666    d14 = d16 * d5 + d4 * d14 + d8;
   17667    d10 = d10 < d15 ? d10 : d15;
   17668    d11 = d11 < d14 ? d11 : d14;
   17669    d9 = d9 > d15 ? d9 : d15;
   17670    d12 = d12 > d14 ? d12 : d14;
   17671    i13 = i13 + 1 | 0;
   17672   } while ((i13 | 0) < (i7 | 0));
   17673  } else {
   17674   d11 = d12;
   17675   d10 = d9;
   17676  }
   17677  d16 = +HEAPF32[i1 + 8 >> 2];
   17678  d14 = +(d10 - d16);
   17679  d15 = +(d11 - d16);
   17680  i13 = i2;
   17681  HEAPF32[i13 >> 2] = d14;
   17682  HEAPF32[i13 + 4 >> 2] = d15;
   17683  d15 = +(d9 + d16);
   17684  d16 = +(d12 + d16);
   17685  i13 = i2 + 8 | 0;
   17686  HEAPF32[i13 >> 2] = d15;
   17687  HEAPF32[i13 + 4 >> 2] = d16;
   17688  STACKTOP = i3;
   17689  return;
   17690 }
   17691 function __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib(i5, i1, i4, i6, i3, i7) {
   17692  i5 = i5 | 0;
   17693  i1 = i1 | 0;
   17694  i4 = i4 | 0;
   17695  i6 = i6 | 0;
   17696  i3 = i3 | 0;
   17697  i7 = i7 | 0;
   17698  var i2 = 0;
   17699  i2 = STACKTOP;
   17700  if ((i5 | 0) != (HEAP32[i1 + 8 >> 2] | 0)) {
   17701   i5 = HEAP32[i5 + 8 >> 2] | 0;
   17702   FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i5 >> 2] | 0) + 20 >> 2] & 3](i5, i1, i4, i6, i3, i7);
   17703   STACKTOP = i2;
   17704   return;
   17705  }
   17706  HEAP8[i1 + 53 | 0] = 1;
   17707  if ((HEAP32[i1 + 4 >> 2] | 0) != (i6 | 0)) {
   17708   STACKTOP = i2;
   17709   return;
   17710  }
   17711  HEAP8[i1 + 52 | 0] = 1;
   17712  i5 = i1 + 16 | 0;
   17713  i6 = HEAP32[i5 >> 2] | 0;
   17714  if ((i6 | 0) == 0) {
   17715   HEAP32[i5 >> 2] = i4;
   17716   HEAP32[i1 + 24 >> 2] = i3;
   17717   HEAP32[i1 + 36 >> 2] = 1;
   17718   if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i3 | 0) == 1)) {
   17719    STACKTOP = i2;
   17720    return;
   17721   }
   17722   HEAP8[i1 + 54 | 0] = 1;
   17723   STACKTOP = i2;
   17724   return;
   17725  }
   17726  if ((i6 | 0) != (i4 | 0)) {
   17727   i7 = i1 + 36 | 0;
   17728   HEAP32[i7 >> 2] = (HEAP32[i7 >> 2] | 0) + 1;
   17729   HEAP8[i1 + 54 | 0] = 1;
   17730   STACKTOP = i2;
   17731   return;
   17732  }
   17733  i4 = i1 + 24 | 0;
   17734  i5 = HEAP32[i4 >> 2] | 0;
   17735  if ((i5 | 0) == 2) {
   17736   HEAP32[i4 >> 2] = i3;
   17737  } else {
   17738   i3 = i5;
   17739  }
   17740  if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i3 | 0) == 1)) {
   17741   STACKTOP = i2;
   17742   return;
   17743  }
   17744  HEAP8[i1 + 54 | 0] = 1;
   17745  STACKTOP = i2;
   17746  return;
   17747 }
   17748 function __ZN6b2Body13CreateFixtureEPK12b2FixtureDef(i1, i5) {
   17749  i1 = i1 | 0;
   17750  i5 = i5 | 0;
   17751  var i2 = 0, i3 = 0, i4 = 0, i6 = 0;
   17752  i3 = STACKTOP;
   17753  i2 = i1 + 88 | 0;
   17754  i4 = HEAP32[i2 >> 2] | 0;
   17755  if ((HEAP32[i4 + 102868 >> 2] & 2 | 0) != 0) {
   17756   ___assert_fail(1776, 1520, 153, 1808);
   17757  }
   17758  i6 = __ZN16b2BlockAllocator8AllocateEi(i4, 44) | 0;
   17759  if ((i6 | 0) == 0) {
   17760   i6 = 0;
   17761  } else {
   17762   __ZN9b2FixtureC2Ev(i6);
   17763  }
   17764  __ZN9b2Fixture6CreateEP16b2BlockAllocatorP6b2BodyPK12b2FixtureDef(i6, i4, i1, i5);
   17765  if (!((HEAP16[i1 + 4 >> 1] & 32) == 0)) {
   17766   __ZN9b2Fixture13CreateProxiesEP12b2BroadPhaseRK11b2Transform(i6, (HEAP32[i2 >> 2] | 0) + 102872 | 0, i1 + 12 | 0);
   17767  }
   17768  i5 = i1 + 100 | 0;
   17769  HEAP32[i6 + 4 >> 2] = HEAP32[i5 >> 2];
   17770  HEAP32[i5 >> 2] = i6;
   17771  i5 = i1 + 104 | 0;
   17772  HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
   17773  HEAP32[i6 + 8 >> 2] = i1;
   17774  if (!(+HEAPF32[i6 >> 2] > 0.0)) {
   17775   i5 = HEAP32[i2 >> 2] | 0;
   17776   i5 = i5 + 102868 | 0;
   17777   i4 = HEAP32[i5 >> 2] | 0;
   17778   i4 = i4 | 1;
   17779   HEAP32[i5 >> 2] = i4;
   17780   STACKTOP = i3;
   17781   return i6 | 0;
   17782  }
   17783  __ZN6b2Body13ResetMassDataEv(i1);
   17784  i5 = HEAP32[i2 >> 2] | 0;
   17785  i5 = i5 + 102868 | 0;
   17786  i4 = HEAP32[i5 >> 2] | 0;
   17787  i4 = i4 | 1;
   17788  HEAP32[i5 >> 2] = i4;
   17789  STACKTOP = i3;
   17790  return i6 | 0;
   17791 }
   17792 function __Z13b2TestOverlapPK7b2ShapeiS1_iRK11b2TransformS4_(i6, i5, i4, i3, i2, i1) {
   17793  i6 = i6 | 0;
   17794  i5 = i5 | 0;
   17795  i4 = i4 | 0;
   17796  i3 = i3 | 0;
   17797  i2 = i2 | 0;
   17798  i1 = i1 | 0;
   17799  var i7 = 0, i8 = 0, i9 = 0, i10 = 0;
   17800  i8 = STACKTOP;
   17801  STACKTOP = STACKTOP + 128 | 0;
   17802  i9 = i8 + 36 | 0;
   17803  i10 = i8 + 24 | 0;
   17804  i7 = i8;
   17805  HEAP32[i9 + 16 >> 2] = 0;
   17806  HEAP32[i9 + 20 >> 2] = 0;
   17807  HEAPF32[i9 + 24 >> 2] = 0.0;
   17808  HEAP32[i9 + 44 >> 2] = 0;
   17809  HEAP32[i9 + 48 >> 2] = 0;
   17810  HEAPF32[i9 + 52 >> 2] = 0.0;
   17811  __ZN15b2DistanceProxy3SetEPK7b2Shapei(i9, i6, i5);
   17812  __ZN15b2DistanceProxy3SetEPK7b2Shapei(i9 + 28 | 0, i4, i3);
   17813  i6 = i9 + 56 | 0;
   17814  HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
   17815  HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
   17816  HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
   17817  HEAP32[i6 + 12 >> 2] = HEAP32[i2 + 12 >> 2];
   17818  i6 = i9 + 72 | 0;
   17819  HEAP32[i6 + 0 >> 2] = HEAP32[i1 + 0 >> 2];
   17820  HEAP32[i6 + 4 >> 2] = HEAP32[i1 + 4 >> 2];
   17821  HEAP32[i6 + 8 >> 2] = HEAP32[i1 + 8 >> 2];
   17822  HEAP32[i6 + 12 >> 2] = HEAP32[i1 + 12 >> 2];
   17823  HEAP8[i9 + 88 | 0] = 1;
   17824  HEAP16[i10 + 4 >> 1] = 0;
   17825  __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i7, i10, i9);
   17826  STACKTOP = i8;
   17827  return +HEAPF32[i7 + 16 >> 2] < 11920928955078125.0e-22 | 0;
   17828 }
   17829 function __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib(i6, i1, i4, i5, i2, i3) {
   17830  i6 = i6 | 0;
   17831  i1 = i1 | 0;
   17832  i4 = i4 | 0;
   17833  i5 = i5 | 0;
   17834  i2 = i2 | 0;
   17835  i3 = i3 | 0;
   17836  i3 = STACKTOP;
   17837  if ((HEAP32[i1 + 8 >> 2] | 0) != (i6 | 0)) {
   17838   STACKTOP = i3;
   17839   return;
   17840  }
   17841  HEAP8[i1 + 53 | 0] = 1;
   17842  if ((HEAP32[i1 + 4 >> 2] | 0) != (i5 | 0)) {
   17843   STACKTOP = i3;
   17844   return;
   17845  }
   17846  HEAP8[i1 + 52 | 0] = 1;
   17847  i5 = i1 + 16 | 0;
   17848  i6 = HEAP32[i5 >> 2] | 0;
   17849  if ((i6 | 0) == 0) {
   17850   HEAP32[i5 >> 2] = i4;
   17851   HEAP32[i1 + 24 >> 2] = i2;
   17852   HEAP32[i1 + 36 >> 2] = 1;
   17853   if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i2 | 0) == 1)) {
   17854    STACKTOP = i3;
   17855    return;
   17856   }
   17857   HEAP8[i1 + 54 | 0] = 1;
   17858   STACKTOP = i3;
   17859   return;
   17860  }
   17861  if ((i6 | 0) != (i4 | 0)) {
   17862   i6 = i1 + 36 | 0;
   17863   HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
   17864   HEAP8[i1 + 54 | 0] = 1;
   17865   STACKTOP = i3;
   17866   return;
   17867  }
   17868  i4 = i1 + 24 | 0;
   17869  i5 = HEAP32[i4 >> 2] | 0;
   17870  if ((i5 | 0) == 2) {
   17871   HEAP32[i4 >> 2] = i2;
   17872  } else {
   17873   i2 = i5;
   17874  }
   17875  if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i2 | 0) == 1)) {
   17876   STACKTOP = i3;
   17877   return;
   17878  }
   17879  HEAP8[i1 + 54 | 0] = 1;
   17880  STACKTOP = i3;
   17881  return;
   17882 }
   17883 function __ZNK11b2EdgeShape5CloneEP16b2BlockAllocator(i1, i3) {
   17884  i1 = i1 | 0;
   17885  i3 = i3 | 0;
   17886  var i2 = 0, i4 = 0, i5 = 0, i6 = 0;
   17887  i2 = STACKTOP;
   17888  i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 48) | 0;
   17889  if ((i3 | 0) == 0) {
   17890   i3 = 0;
   17891  } else {
   17892   HEAP32[i3 >> 2] = 240;
   17893   HEAP32[i3 + 4 >> 2] = 1;
   17894   HEAPF32[i3 + 8 >> 2] = .009999999776482582;
   17895   i4 = i3 + 28 | 0;
   17896   HEAP32[i4 + 0 >> 2] = 0;
   17897   HEAP32[i4 + 4 >> 2] = 0;
   17898   HEAP32[i4 + 8 >> 2] = 0;
   17899   HEAP32[i4 + 12 >> 2] = 0;
   17900   HEAP16[i4 + 16 >> 1] = 0;
   17901  }
   17902  i6 = i1 + 4 | 0;
   17903  i5 = HEAP32[i6 + 4 >> 2] | 0;
   17904  i4 = i3 + 4 | 0;
   17905  HEAP32[i4 >> 2] = HEAP32[i6 >> 2];
   17906  HEAP32[i4 + 4 >> 2] = i5;
   17907  i4 = i3 + 12 | 0;
   17908  i1 = i1 + 12 | 0;
   17909  HEAP32[i4 + 0 >> 2] = HEAP32[i1 + 0 >> 2];
   17910  HEAP32[i4 + 4 >> 2] = HEAP32[i1 + 4 >> 2];
   17911  HEAP32[i4 + 8 >> 2] = HEAP32[i1 + 8 >> 2];
   17912  HEAP32[i4 + 12 >> 2] = HEAP32[i1 + 12 >> 2];
   17913  HEAP32[i4 + 16 >> 2] = HEAP32[i1 + 16 >> 2];
   17914  HEAP32[i4 + 20 >> 2] = HEAP32[i1 + 20 >> 2];
   17915  HEAP32[i4 + 24 >> 2] = HEAP32[i1 + 24 >> 2];
   17916  HEAP32[i4 + 28 >> 2] = HEAP32[i1 + 28 >> 2];
   17917  HEAP16[i4 + 32 >> 1] = HEAP16[i1 + 32 >> 1] | 0;
   17918  STACKTOP = i2;
   17919  return i3 | 0;
   17920 }
   17921 function __ZN7b2WorldC2ERK6b2Vec2(i1, i2) {
   17922  i1 = i1 | 0;
   17923  i2 = i2 | 0;
   17924  var i3 = 0, i4 = 0, i5 = 0, i6 = 0;
   17925  i3 = STACKTOP;
   17926  __ZN16b2BlockAllocatorC2Ev(i1);
   17927  __ZN16b2StackAllocatorC2Ev(i1 + 68 | 0);
   17928  __ZN16b2ContactManagerC2Ev(i1 + 102872 | 0);
   17929  i6 = i1 + 102968 | 0;
   17930  HEAP32[i1 + 102980 >> 2] = 0;
   17931  HEAP32[i1 + 102984 >> 2] = 0;
   17932  i4 = i1 + 102952 | 0;
   17933  i5 = i1 + 102992 | 0;
   17934  HEAP32[i4 + 0 >> 2] = 0;
   17935  HEAP32[i4 + 4 >> 2] = 0;
   17936  HEAP32[i4 + 8 >> 2] = 0;
   17937  HEAP32[i4 + 12 >> 2] = 0;
   17938  HEAP8[i5] = 1;
   17939  HEAP8[i1 + 102993 | 0] = 1;
   17940  HEAP8[i1 + 102994 | 0] = 0;
   17941  HEAP8[i1 + 102995 | 0] = 1;
   17942  HEAP8[i1 + 102976 | 0] = 1;
   17943  i5 = i2;
   17944  i4 = HEAP32[i5 + 4 >> 2] | 0;
   17945  i2 = i6;
   17946  HEAP32[i2 >> 2] = HEAP32[i5 >> 2];
   17947  HEAP32[i2 + 4 >> 2] = i4;
   17948  HEAP32[i1 + 102868 >> 2] = 4;
   17949  HEAPF32[i1 + 102988 >> 2] = 0.0;
   17950  HEAP32[i1 + 102948 >> 2] = i1;
   17951  i2 = i1 + 102996 | 0;
   17952  HEAP32[i2 + 0 >> 2] = 0;
   17953  HEAP32[i2 + 4 >> 2] = 0;
   17954  HEAP32[i2 + 8 >> 2] = 0;
   17955  HEAP32[i2 + 12 >> 2] = 0;
   17956  HEAP32[i2 + 16 >> 2] = 0;
   17957  HEAP32[i2 + 20 >> 2] = 0;
   17958  HEAP32[i2 + 24 >> 2] = 0;
   17959  HEAP32[i2 + 28 >> 2] = 0;
   17960  STACKTOP = i3;
   17961  return;
   17962 }
   17963 function __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib(i6, i3, i4, i1, i2) {
   17964  i6 = i6 | 0;
   17965  i3 = i3 | 0;
   17966  i4 = i4 | 0;
   17967  i1 = i1 | 0;
   17968  i2 = i2 | 0;
   17969  var i5 = 0;
   17970  i2 = STACKTOP;
   17971  if ((HEAP32[i3 + 8 >> 2] | 0) == (i6 | 0)) {
   17972   if ((HEAP32[i3 + 4 >> 2] | 0) != (i4 | 0)) {
   17973    STACKTOP = i2;
   17974    return;
   17975   }
   17976   i3 = i3 + 28 | 0;
   17977   if ((HEAP32[i3 >> 2] | 0) == 1) {
   17978    STACKTOP = i2;
   17979    return;
   17980   }
   17981   HEAP32[i3 >> 2] = i1;
   17982   STACKTOP = i2;
   17983   return;
   17984  }
   17985  if ((HEAP32[i3 >> 2] | 0) != (i6 | 0)) {
   17986   STACKTOP = i2;
   17987   return;
   17988  }
   17989  if ((HEAP32[i3 + 16 >> 2] | 0) != (i4 | 0) ? (i5 = i3 + 20 | 0, (HEAP32[i5 >> 2] | 0) != (i4 | 0)) : 0) {
   17990   HEAP32[i3 + 32 >> 2] = i1;
   17991   HEAP32[i5 >> 2] = i4;
   17992   i6 = i3 + 40 | 0;
   17993   HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
   17994   if ((HEAP32[i3 + 36 >> 2] | 0) == 1 ? (HEAP32[i3 + 24 >> 2] | 0) == 2 : 0) {
   17995    HEAP8[i3 + 54 | 0] = 1;
   17996   }
   17997   HEAP32[i3 + 44 >> 2] = 4;
   17998   STACKTOP = i2;
   17999   return;
   18000  }
   18001  if ((i1 | 0) != 1) {
   18002   STACKTOP = i2;
   18003   return;
   18004  }
   18005  HEAP32[i3 + 32 >> 2] = 1;
   18006  STACKTOP = i2;
   18007  return;
   18008 }
   18009 function __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i1, i2) {
   18010  i1 = i1 | 0;
   18011  i2 = i2 | 0;
   18012  var i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0;
   18013  i3 = STACKTOP;
   18014  if ((HEAP8[4200] | 0) == 0) {
   18015   ___assert_fail(4352, 4256, 103, 4376);
   18016  }
   18017  i4 = HEAP32[i1 + 48 >> 2] | 0;
   18018  if ((HEAP32[i1 + 124 >> 2] | 0) > 0) {
   18019   i7 = HEAP32[i4 + 8 >> 2] | 0;
   18020   i6 = i7 + 4 | 0;
   18021   i5 = HEAPU16[i6 >> 1] | 0;
   18022   if ((i5 & 2 | 0) == 0) {
   18023    HEAP16[i6 >> 1] = i5 | 2;
   18024    HEAPF32[i7 + 144 >> 2] = 0.0;
   18025   }
   18026   i7 = HEAP32[i1 + 52 >> 2] | 0;
   18027   i6 = HEAP32[i7 + 8 >> 2] | 0;
   18028   i5 = i6 + 4 | 0;
   18029   i8 = HEAPU16[i5 >> 1] | 0;
   18030   if ((i8 & 2 | 0) == 0) {
   18031    HEAP16[i5 >> 1] = i8 | 2;
   18032    HEAPF32[i6 + 144 >> 2] = 0.0;
   18033   }
   18034  } else {
   18035   i7 = HEAP32[i1 + 52 >> 2] | 0;
   18036  }
   18037  i4 = HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 4 >> 2] | 0;
   18038  i5 = HEAP32[(HEAP32[i7 + 12 >> 2] | 0) + 4 >> 2] | 0;
   18039  if ((i4 | 0) > -1 & (i5 | 0) < 4) {
   18040   FUNCTION_TABLE_vii[HEAP32[4008 + (i4 * 48 | 0) + (i5 * 12 | 0) + 4 >> 2] & 15](i1, i2);
   18041   STACKTOP = i3;
   18042   return;
   18043  } else {
   18044   ___assert_fail(4384, 4256, 114, 4376);
   18045  }
   18046 }
   18047 function __ZN9b2Fixture13CreateProxiesEP12b2BroadPhaseRK11b2Transform(i5, i4, i1) {
   18048  i5 = i5 | 0;
   18049  i4 = i4 | 0;
   18050  i1 = i1 | 0;
   18051  var i2 = 0, i3 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
   18052  i2 = STACKTOP;
   18053  i3 = i5 + 28 | 0;
   18054  if ((HEAP32[i3 >> 2] | 0) != 0) {
   18055   ___assert_fail(2088, 2112, 124, 2144);
   18056  }
   18057  i6 = i5 + 12 | 0;
   18058  i8 = HEAP32[i6 >> 2] | 0;
   18059  i8 = FUNCTION_TABLE_ii[HEAP32[(HEAP32[i8 >> 2] | 0) + 12 >> 2] & 3](i8) | 0;
   18060  HEAP32[i3 >> 2] = i8;
   18061  if ((i8 | 0) <= 0) {
   18062   STACKTOP = i2;
   18063   return;
   18064  }
   18065  i7 = i5 + 24 | 0;
   18066  i8 = 0;
   18067  do {
   18068   i9 = HEAP32[i7 >> 2] | 0;
   18069   i10 = i9 + (i8 * 28 | 0) | 0;
   18070   i11 = HEAP32[i6 >> 2] | 0;
   18071   FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i11 >> 2] | 0) + 24 >> 2] & 15](i11, i10, i1, i8);
   18072   HEAP32[i9 + (i8 * 28 | 0) + 24 >> 2] = __ZN12b2BroadPhase11CreateProxyERK6b2AABBPv(i4, i10, i10) | 0;
   18073   HEAP32[i9 + (i8 * 28 | 0) + 16 >> 2] = i5;
   18074   HEAP32[i9 + (i8 * 28 | 0) + 20 >> 2] = i8;
   18075   i8 = i8 + 1 | 0;
   18076  } while ((i8 | 0) < (HEAP32[i3 >> 2] | 0));
   18077  STACKTOP = i2;
   18078  return;
   18079 }
   18080 function __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv(i1, i5, i4) {
   18081  i1 = i1 | 0;
   18082  i5 = i5 | 0;
   18083  i4 = i4 | 0;
   18084  var i2 = 0, i3 = 0, i6 = 0, i7 = 0;
   18085  i2 = STACKTOP;
   18086  STACKTOP = STACKTOP + 64 | 0;
   18087  i3 = i2;
   18088  if ((i1 | 0) == (i5 | 0)) {
   18089   i7 = 1;
   18090   STACKTOP = i2;
   18091   return i7 | 0;
   18092  }
   18093  if ((i5 | 0) == 0) {
   18094   i7 = 0;
   18095   STACKTOP = i2;
   18096   return i7 | 0;
   18097  }
   18098  i5 = ___dynamic_cast(i5, 6952, 7008, 0) | 0;
   18099  if ((i5 | 0) == 0) {
   18100   i7 = 0;
   18101   STACKTOP = i2;
   18102   return i7 | 0;
   18103  }
   18104  i7 = i3 + 0 | 0;
   18105  i6 = i7 + 56 | 0;
   18106  do {
   18107   HEAP32[i7 >> 2] = 0;
   18108   i7 = i7 + 4 | 0;
   18109  } while ((i7 | 0) < (i6 | 0));
   18110  HEAP32[i3 >> 2] = i5;
   18111  HEAP32[i3 + 8 >> 2] = i1;
   18112  HEAP32[i3 + 12 >> 2] = -1;
   18113  HEAP32[i3 + 48 >> 2] = 1;
   18114  FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i5 >> 2] | 0) + 28 >> 2] & 15](i5, i3, HEAP32[i4 >> 2] | 0, 1);
   18115  if ((HEAP32[i3 + 24 >> 2] | 0) != 1) {
   18116   i7 = 0;
   18117   STACKTOP = i2;
   18118   return i7 | 0;
   18119  }
   18120  HEAP32[i4 >> 2] = HEAP32[i3 + 16 >> 2];
   18121  i7 = 1;
   18122  STACKTOP = i2;
   18123  return i7 | 0;
   18124 }
   18125 function __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i1, i4, i3, i2, i5, i6) {
   18126  i1 = i1 | 0;
   18127  i4 = i4 | 0;
   18128  i3 = i3 | 0;
   18129  i2 = i2 | 0;
   18130  i5 = i5 | 0;
   18131  i6 = i6 | 0;
   18132  var i7 = 0, i8 = 0;
   18133  i7 = STACKTOP;
   18134  i8 = i1 + 40 | 0;
   18135  HEAP32[i8 >> 2] = i4;
   18136  HEAP32[i1 + 44 >> 2] = i3;
   18137  HEAP32[i1 + 48 >> 2] = i2;
   18138  HEAP32[i1 + 28 >> 2] = 0;
   18139  HEAP32[i1 + 36 >> 2] = 0;
   18140  HEAP32[i1 + 32 >> 2] = 0;
   18141  HEAP32[i1 >> 2] = i5;
   18142  HEAP32[i1 + 4 >> 2] = i6;
   18143  HEAP32[i1 + 8 >> 2] = __ZN16b2StackAllocator8AllocateEi(i5, i4 << 2) | 0;
   18144  HEAP32[i1 + 12 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, i3 << 2) | 0;
   18145  HEAP32[i1 + 16 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, i2 << 2) | 0;
   18146  HEAP32[i1 + 24 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, (HEAP32[i8 >> 2] | 0) * 12 | 0) | 0;
   18147  HEAP32[i1 + 20 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, (HEAP32[i8 >> 2] | 0) * 12 | 0) | 0;
   18148  STACKTOP = i7;
   18149  return;
   18150 }
   18151 function __ZNK11b2EdgeShape11ComputeAABBEP6b2AABBRK11b2Transformi(i8, i1, i10, i2) {
   18152  i8 = i8 | 0;
   18153  i1 = i1 | 0;
   18154  i10 = i10 | 0;
   18155  i2 = i2 | 0;
   18156  var d3 = 0.0, d4 = 0.0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d9 = 0.0, d11 = 0.0, d12 = 0.0;
   18157  i2 = STACKTOP;
   18158  d7 = +HEAPF32[i10 + 12 >> 2];
   18159  d9 = +HEAPF32[i8 + 12 >> 2];
   18160  d11 = +HEAPF32[i10 + 8 >> 2];
   18161  d3 = +HEAPF32[i8 + 16 >> 2];
   18162  d6 = +HEAPF32[i10 >> 2];
   18163  d5 = d6 + (d7 * d9 - d11 * d3);
   18164  d12 = +HEAPF32[i10 + 4 >> 2];
   18165  d3 = d9 * d11 + d7 * d3 + d12;
   18166  d9 = +HEAPF32[i8 + 20 >> 2];
   18167  d4 = +HEAPF32[i8 + 24 >> 2];
   18168  d6 = d6 + (d7 * d9 - d11 * d4);
   18169  d4 = d12 + (d11 * d9 + d7 * d4);
   18170  d7 = +HEAPF32[i8 + 8 >> 2];
   18171  d9 = +((d5 < d6 ? d5 : d6) - d7);
   18172  d12 = +((d3 < d4 ? d3 : d4) - d7);
   18173  i10 = i1;
   18174  HEAPF32[i10 >> 2] = d9;
   18175  HEAPF32[i10 + 4 >> 2] = d12;
   18176  d5 = +(d7 + (d5 > d6 ? d5 : d6));
   18177  d12 = +(d7 + (d3 > d4 ? d3 : d4));
   18178  i10 = i1 + 8 | 0;
   18179  HEAPF32[i10 >> 2] = d5;
   18180  HEAPF32[i10 + 4 >> 2] = d12;
   18181  STACKTOP = i2;
   18182  return;
   18183 }
   18184 function __ZNK14b2PolygonShape9TestPointERK11b2TransformRK6b2Vec2(i2, i3, i6) {
   18185  i2 = i2 | 0;
   18186  i3 = i3 | 0;
   18187  i6 = i6 | 0;
   18188  var i1 = 0, d4 = 0.0, d5 = 0.0, i7 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0;
   18189  i1 = STACKTOP;
   18190  d8 = +HEAPF32[i6 >> 2] - +HEAPF32[i3 >> 2];
   18191  d9 = +HEAPF32[i6 + 4 >> 2] - +HEAPF32[i3 + 4 >> 2];
   18192  d10 = +HEAPF32[i3 + 12 >> 2];
   18193  d5 = +HEAPF32[i3 + 8 >> 2];
   18194  d4 = d8 * d10 + d9 * d5;
   18195  d5 = d10 * d9 - d8 * d5;
   18196  i3 = HEAP32[i2 + 148 >> 2] | 0;
   18197  if ((i3 | 0) > 0) {
   18198   i6 = 0;
   18199  } else {
   18200   i7 = 1;
   18201   STACKTOP = i1;
   18202   return i7 | 0;
   18203  }
   18204  while (1) {
   18205   i7 = i6 + 1 | 0;
   18206   if ((d4 - +HEAPF32[i2 + (i6 << 3) + 20 >> 2]) * +HEAPF32[i2 + (i6 << 3) + 84 >> 2] + (d5 - +HEAPF32[i2 + (i6 << 3) + 24 >> 2]) * +HEAPF32[i2 + (i6 << 3) + 88 >> 2] > 0.0) {
   18207    i3 = 0;
   18208    i2 = 4;
   18209    break;
   18210   }
   18211   if ((i7 | 0) < (i3 | 0)) {
   18212    i6 = i7;
   18213   } else {
   18214    i3 = 1;
   18215    i2 = 4;
   18216    break;
   18217   }
   18218  }
   18219  if ((i2 | 0) == 4) {
   18220   STACKTOP = i1;
   18221   return i3 | 0;
   18222  }
   18223  return 0;
   18224 }
   18225 function __ZN16b2StackAllocator8AllocateEi(i4, i5) {
   18226  i4 = i4 | 0;
   18227  i5 = i5 | 0;
   18228  var i1 = 0, i2 = 0, i3 = 0, i6 = 0, i7 = 0, i8 = 0;
   18229  i2 = STACKTOP;
   18230  i3 = i4 + 102796 | 0;
   18231  i6 = HEAP32[i3 >> 2] | 0;
   18232  if ((i6 | 0) >= 32) {
   18233   ___assert_fail(3896, 3808, 38, 3936);
   18234  }
   18235  i1 = i4 + (i6 * 12 | 0) + 102412 | 0;
   18236  HEAP32[i4 + (i6 * 12 | 0) + 102416 >> 2] = i5;
   18237  i7 = i4 + 102400 | 0;
   18238  i8 = HEAP32[i7 >> 2] | 0;
   18239  if ((i8 + i5 | 0) > 102400) {
   18240   HEAP32[i1 >> 2] = __Z7b2Alloci(i5) | 0;
   18241   HEAP8[i4 + (i6 * 12 | 0) + 102420 | 0] = 1;
   18242  } else {
   18243   HEAP32[i1 >> 2] = i4 + i8;
   18244   HEAP8[i4 + (i6 * 12 | 0) + 102420 | 0] = 0;
   18245   HEAP32[i7 >> 2] = (HEAP32[i7 >> 2] | 0) + i5;
   18246  }
   18247  i6 = i4 + 102404 | 0;
   18248  i5 = (HEAP32[i6 >> 2] | 0) + i5 | 0;
   18249  HEAP32[i6 >> 2] = i5;
   18250  i4 = i4 + 102408 | 0;
   18251  i6 = HEAP32[i4 >> 2] | 0;
   18252  HEAP32[i4 >> 2] = (i6 | 0) > (i5 | 0) ? i6 : i5;
   18253  HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1;
   18254  STACKTOP = i2;
   18255  return HEAP32[i1 >> 2] | 0;
   18256 }
   18257 function __ZN12b2BroadPhase13QueryCallbackEi(i5, i1) {
   18258  i5 = i5 | 0;
   18259  i1 = i1 | 0;
   18260  var i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0;
   18261  i2 = STACKTOP;
   18262  i4 = i5 + 56 | 0;
   18263  i7 = HEAP32[i4 >> 2] | 0;
   18264  if ((i7 | 0) == (i1 | 0)) {
   18265   STACKTOP = i2;
   18266   return 1;
   18267  }
   18268  i3 = i5 + 52 | 0;
   18269  i6 = HEAP32[i3 >> 2] | 0;
   18270  i8 = i5 + 48 | 0;
   18271  i5 = i5 + 44 | 0;
   18272  if ((i6 | 0) == (HEAP32[i8 >> 2] | 0)) {
   18273   i7 = HEAP32[i5 >> 2] | 0;
   18274   HEAP32[i8 >> 2] = i6 << 1;
   18275   i6 = __Z7b2Alloci(i6 * 24 | 0) | 0;
   18276   HEAP32[i5 >> 2] = i6;
   18277   _memcpy(i6 | 0, i7 | 0, (HEAP32[i3 >> 2] | 0) * 12 | 0) | 0;
   18278   __Z6b2FreePv(i7);
   18279   i7 = HEAP32[i4 >> 2] | 0;
   18280   i6 = HEAP32[i3 >> 2] | 0;
   18281  }
   18282  i5 = HEAP32[i5 >> 2] | 0;
   18283  HEAP32[i5 + (i6 * 12 | 0) >> 2] = (i7 | 0) > (i1 | 0) ? i1 : i7;
   18284  i4 = HEAP32[i4 >> 2] | 0;
   18285  HEAP32[i5 + ((HEAP32[i3 >> 2] | 0) * 12 | 0) + 4 >> 2] = (i4 | 0) < (i1 | 0) ? i1 : i4;
   18286  HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1;
   18287  STACKTOP = i2;
   18288  return 1;
   18289 }
   18290 function __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi(i5, i4, i3, i1) {
   18291  i5 = i5 | 0;
   18292  i4 = i4 | 0;
   18293  i3 = i3 | 0;
   18294  i1 = i1 | 0;
   18295  var i2 = 0, i6 = 0;
   18296  i2 = STACKTOP;
   18297  if ((i5 | 0) != (HEAP32[i4 + 8 >> 2] | 0)) {
   18298   i6 = HEAP32[i5 + 8 >> 2] | 0;
   18299   FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i6 >> 2] | 0) + 28 >> 2] & 15](i6, i4, i3, i1);
   18300   STACKTOP = i2;
   18301   return;
   18302  }
   18303  i5 = i4 + 16 | 0;
   18304  i6 = HEAP32[i5 >> 2] | 0;
   18305  if ((i6 | 0) == 0) {
   18306   HEAP32[i5 >> 2] = i3;
   18307   HEAP32[i4 + 24 >> 2] = i1;
   18308   HEAP32[i4 + 36 >> 2] = 1;
   18309   STACKTOP = i2;
   18310   return;
   18311  }
   18312  if ((i6 | 0) != (i3 | 0)) {
   18313   i6 = i4 + 36 | 0;
   18314   HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
   18315   HEAP32[i4 + 24 >> 2] = 2;
   18316   HEAP8[i4 + 54 | 0] = 1;
   18317   STACKTOP = i2;
   18318   return;
   18319  }
   18320  i3 = i4 + 24 | 0;
   18321  if ((HEAP32[i3 >> 2] | 0) != 2) {
   18322   STACKTOP = i2;
   18323   return;
   18324  }
   18325  HEAP32[i3 >> 2] = i1;
   18326  STACKTOP = i2;
   18327  return;
   18328 }
   18329 function __ZN6b2Body19SynchronizeFixturesEv(i5) {
   18330  i5 = i5 | 0;
   18331  var i1 = 0, i2 = 0, i3 = 0, i4 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0;
   18332  i1 = STACKTOP;
   18333  STACKTOP = STACKTOP + 16 | 0;
   18334  i3 = i1;
   18335  d8 = +HEAPF32[i5 + 52 >> 2];
   18336  d9 = +Math_sin(+d8);
   18337  HEAPF32[i3 + 8 >> 2] = d9;
   18338  d8 = +Math_cos(+d8);
   18339  HEAPF32[i3 + 12 >> 2] = d8;
   18340  d10 = +HEAPF32[i5 + 28 >> 2];
   18341  d6 = +HEAPF32[i5 + 32 >> 2];
   18342  d7 = +(+HEAPF32[i5 + 36 >> 2] - (d8 * d10 - d9 * d6));
   18343  d6 = +(+HEAPF32[i5 + 40 >> 2] - (d10 * d9 + d8 * d6));
   18344  i2 = i3;
   18345  HEAPF32[i2 >> 2] = d7;
   18346  HEAPF32[i2 + 4 >> 2] = d6;
   18347  i2 = (HEAP32[i5 + 88 >> 2] | 0) + 102872 | 0;
   18348  i4 = HEAP32[i5 + 100 >> 2] | 0;
   18349  if ((i4 | 0) == 0) {
   18350   STACKTOP = i1;
   18351   return;
   18352  }
   18353  i5 = i5 + 12 | 0;
   18354  do {
   18355   __ZN9b2Fixture11SynchronizeEP12b2BroadPhaseRK11b2TransformS4_(i4, i2, i3, i5);
   18356   i4 = HEAP32[i4 + 4 >> 2] | 0;
   18357  } while ((i4 | 0) != 0);
   18358  STACKTOP = i1;
   18359  return;
   18360 }
   18361 function __ZN13b2DynamicTreeC2Ev(i1) {
   18362  i1 = i1 | 0;
   18363  var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0;
   18364  i4 = STACKTOP;
   18365  HEAP32[i1 >> 2] = -1;
   18366  i3 = i1 + 12 | 0;
   18367  HEAP32[i3 >> 2] = 16;
   18368  HEAP32[i1 + 8 >> 2] = 0;
   18369  i6 = __Z7b2Alloci(576) | 0;
   18370  i2 = i1 + 4 | 0;
   18371  HEAP32[i2 >> 2] = i6;
   18372  _memset(i6 | 0, 0, (HEAP32[i3 >> 2] | 0) * 36 | 0) | 0;
   18373  i6 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
   18374  i2 = HEAP32[i2 >> 2] | 0;
   18375  if ((i6 | 0) > 0) {
   18376   i6 = 0;
   18377   while (1) {
   18378    i5 = i6 + 1 | 0;
   18379    HEAP32[i2 + (i6 * 36 | 0) + 20 >> 2] = i5;
   18380    HEAP32[i2 + (i6 * 36 | 0) + 32 >> 2] = -1;
   18381    i6 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
   18382    if ((i5 | 0) < (i6 | 0)) {
   18383     i6 = i5;
   18384    } else {
   18385     break;
   18386    }
   18387   }
   18388  }
   18389  HEAP32[i2 + (i6 * 36 | 0) + 20 >> 2] = -1;
   18390  HEAP32[i2 + (((HEAP32[i3 >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1;
   18391  HEAP32[i1 + 16 >> 2] = 0;
   18392  HEAP32[i1 + 20 >> 2] = 0;
   18393  HEAP32[i1 + 24 >> 2] = 0;
   18394  STACKTOP = i4;
   18395  return;
   18396 }
   18397 function __Z7measurePl(i1, i9) {
   18398  i1 = i1 | 0;
   18399  i9 = i9 | 0;
   18400  var i2 = 0, i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, i7 = 0, d8 = 0.0, i10 = 0, d11 = 0.0;
   18401  i2 = STACKTOP;
   18402  i3 = HEAP32[4] | 0;
   18403  i4 = STACKTOP;
   18404  STACKTOP = STACKTOP + ((4 * i3 | 0) + 15 & -16) | 0;
   18405  i7 = (i3 | 0) > 0;
   18406  if (i7) {
   18407   i10 = 0;
   18408   d6 = 0.0;
   18409   do {
   18410    d8 = +(HEAP32[i9 + (i10 << 2) >> 2] | 0) / 1.0e6 * 1.0e3;
   18411    HEAPF32[i4 + (i10 << 2) >> 2] = d8;
   18412    d6 = d6 + d8;
   18413    i10 = i10 + 1 | 0;
   18414   } while ((i10 | 0) < (i3 | 0));
   18415   d5 = +(i3 | 0);
   18416   d6 = d6 / d5;
   18417   HEAPF32[i1 >> 2] = d6;
   18418   if (i7) {
   18419    i7 = 0;
   18420    d8 = 0.0;
   18421    do {
   18422     d11 = +HEAPF32[i4 + (i7 << 2) >> 2] - d6;
   18423     d8 = d8 + d11 * d11;
   18424     i7 = i7 + 1 | 0;
   18425    } while ((i7 | 0) < (i3 | 0));
   18426   } else {
   18427    d8 = 0.0;
   18428   }
   18429  } else {
   18430   d5 = +(i3 | 0);
   18431   HEAPF32[i1 >> 2] = 0.0 / d5;
   18432   d8 = 0.0;
   18433  }
   18434  HEAPF32[i1 + 4 >> 2] = +Math_sqrt(+(d8 / d5));
   18435  STACKTOP = i2;
   18436  return;
   18437 }
   18438 function __ZN13b2DynamicTree11CreateProxyERK6b2AABBPv(i1, i3, i2) {
   18439  i1 = i1 | 0;
   18440  i3 = i3 | 0;
   18441  i2 = i2 | 0;
   18442  var i4 = 0, i5 = 0, i6 = 0, d7 = 0.0, d8 = 0.0, i9 = 0;
   18443  i5 = STACKTOP;
   18444  i4 = __ZN13b2DynamicTree12AllocateNodeEv(i1) | 0;
   18445  i6 = i1 + 4 | 0;
   18446  d7 = +(+HEAPF32[i3 >> 2] + -.10000000149011612);
   18447  d8 = +(+HEAPF32[i3 + 4 >> 2] + -.10000000149011612);
   18448  i9 = (HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) | 0;
   18449  HEAPF32[i9 >> 2] = d7;
   18450  HEAPF32[i9 + 4 >> 2] = d8;
   18451  d8 = +(+HEAPF32[i3 + 8 >> 2] + .10000000149011612);
   18452  d7 = +(+HEAPF32[i3 + 12 >> 2] + .10000000149011612);
   18453  i3 = (HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 8 | 0;
   18454  HEAPF32[i3 >> 2] = d8;
   18455  HEAPF32[i3 + 4 >> 2] = d7;
   18456  HEAP32[(HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 16 >> 2] = i2;
   18457  HEAP32[(HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 32 >> 2] = 0;
   18458  __ZN13b2DynamicTree10InsertLeafEi(i1, i4);
   18459  STACKTOP = i5;
   18460  return i4 | 0;
   18461 }
   18462 function __ZN16b2BlockAllocatorC2Ev(i3) {
   18463  i3 = i3 | 0;
   18464  var i1 = 0, i2 = 0, i4 = 0, i5 = 0;
   18465  i2 = STACKTOP;
   18466  i4 = i3 + 8 | 0;
   18467  HEAP32[i4 >> 2] = 128;
   18468  HEAP32[i3 + 4 >> 2] = 0;
   18469  i5 = __Z7b2Alloci(1024) | 0;
   18470  HEAP32[i3 >> 2] = i5;
   18471  _memset(i5 | 0, 0, HEAP32[i4 >> 2] << 3 | 0) | 0;
   18472  i4 = i3 + 12 | 0;
   18473  i3 = i4 + 56 | 0;
   18474  do {
   18475   HEAP32[i4 >> 2] = 0;
   18476   i4 = i4 + 4 | 0;
   18477  } while ((i4 | 0) < (i3 | 0));
   18478  if ((HEAP8[1280] | 0) == 0) {
   18479   i3 = 1;
   18480   i4 = 0;
   18481  } else {
   18482   STACKTOP = i2;
   18483   return;
   18484  }
   18485  do {
   18486   if ((i4 | 0) >= 14) {
   18487    i1 = 3;
   18488    break;
   18489   }
   18490   if ((i3 | 0) > (HEAP32[576 + (i4 << 2) >> 2] | 0)) {
   18491    i4 = i4 + 1 | 0;
   18492    HEAP8[632 + i3 | 0] = i4;
   18493   } else {
   18494    HEAP8[632 + i3 | 0] = i4;
   18495   }
   18496   i3 = i3 + 1 | 0;
   18497  } while ((i3 | 0) < 641);
   18498  if ((i1 | 0) == 3) {
   18499   ___assert_fail(1288, 1312, 73, 1352);
   18500  }
   18501  HEAP8[1280] = 1;
   18502  STACKTOP = i2;
   18503  return;
   18504 }
   18505 function __ZN24b2ChainAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
   18506  i2 = i2 | 0;
   18507  i4 = i4 | 0;
   18508  i3 = i3 | 0;
   18509  i1 = i1 | 0;
   18510  var i5 = 0, i6 = 0, i7 = 0, i8 = 0;
   18511  i5 = STACKTOP;
   18512  STACKTOP = STACKTOP + 48 | 0;
   18513  i6 = i5;
   18514  i7 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0;
   18515  HEAP32[i6 >> 2] = 240;
   18516  HEAP32[i6 + 4 >> 2] = 1;
   18517  HEAPF32[i6 + 8 >> 2] = .009999999776482582;
   18518  i8 = i6 + 28 | 0;
   18519  HEAP32[i8 + 0 >> 2] = 0;
   18520  HEAP32[i8 + 4 >> 2] = 0;
   18521  HEAP32[i8 + 8 >> 2] = 0;
   18522  HEAP32[i8 + 12 >> 2] = 0;
   18523  HEAP16[i8 + 16 >> 1] = 0;
   18524  __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i7, i6, HEAP32[i2 + 56 >> 2] | 0);
   18525  __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS6_(i4, i6, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
   18526  STACKTOP = i5;
   18527  return;
   18528 }
   18529 function __ZN23b2ChainAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
   18530  i2 = i2 | 0;
   18531  i4 = i4 | 0;
   18532  i3 = i3 | 0;
   18533  i1 = i1 | 0;
   18534  var i5 = 0, i6 = 0, i7 = 0, i8 = 0;
   18535  i5 = STACKTOP;
   18536  STACKTOP = STACKTOP + 48 | 0;
   18537  i6 = i5;
   18538  i7 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0;
   18539  HEAP32[i6 >> 2] = 240;
   18540  HEAP32[i6 + 4 >> 2] = 1;
   18541  HEAPF32[i6 + 8 >> 2] = .009999999776482582;
   18542  i8 = i6 + 28 | 0;
   18543  HEAP32[i8 + 0 >> 2] = 0;
   18544  HEAP32[i8 + 4 >> 2] = 0;
   18545  HEAP32[i8 + 8 >> 2] = 0;
   18546  HEAP32[i8 + 12 >> 2] = 0;
   18547  HEAP16[i8 + 16 >> 1] = 0;
   18548  __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i7, i6, HEAP32[i2 + 56 >> 2] | 0);
   18549  __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2CircleShapeS6_(i4, i6, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
   18550  STACKTOP = i5;
   18551  return;
   18552 }
   18553 function __ZN15b2ContactSolver13StoreImpulsesEv(i4) {
   18554  i4 = i4 | 0;
   18555  var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0;
   18556  i1 = STACKTOP;
   18557  i2 = HEAP32[i4 + 48 >> 2] | 0;
   18558  if ((i2 | 0) <= 0) {
   18559   STACKTOP = i1;
   18560   return;
   18561  }
   18562  i3 = HEAP32[i4 + 40 >> 2] | 0;
   18563  i4 = HEAP32[i4 + 44 >> 2] | 0;
   18564  i5 = 0;
   18565  do {
   18566   i6 = HEAP32[i4 + (HEAP32[i3 + (i5 * 152 | 0) + 148 >> 2] << 2) >> 2] | 0;
   18567   i7 = HEAP32[i3 + (i5 * 152 | 0) + 144 >> 2] | 0;
   18568   if ((i7 | 0) > 0) {
   18569    i8 = 0;
   18570    do {
   18571     HEAPF32[i6 + (i8 * 20 | 0) + 72 >> 2] = +HEAPF32[i3 + (i5 * 152 | 0) + (i8 * 36 | 0) + 16 >> 2];
   18572     HEAPF32[i6 + (i8 * 20 | 0) + 76 >> 2] = +HEAPF32[i3 + (i5 * 152 | 0) + (i8 * 36 | 0) + 20 >> 2];
   18573     i8 = i8 + 1 | 0;
   18574    } while ((i8 | 0) < (i7 | 0));
   18575   }
   18576   i5 = i5 + 1 | 0;
   18577  } while ((i5 | 0) < (i2 | 0));
   18578  STACKTOP = i1;
   18579  return;
   18580 }
   18581 function __ZN16b2StackAllocator4FreeEPv(i1, i5) {
   18582  i1 = i1 | 0;
   18583  i5 = i5 | 0;
   18584  var i2 = 0, i3 = 0, i4 = 0, i6 = 0;
   18585  i3 = STACKTOP;
   18586  i2 = i1 + 102796 | 0;
   18587  i4 = HEAP32[i2 >> 2] | 0;
   18588  if ((i4 | 0) <= 0) {
   18589   ___assert_fail(3952, 3808, 63, 3976);
   18590  }
   18591  i6 = i4 + -1 | 0;
   18592  if ((HEAP32[i1 + (i6 * 12 | 0) + 102412 >> 2] | 0) != (i5 | 0)) {
   18593   ___assert_fail(3984, 3808, 65, 3976);
   18594  }
   18595  if ((HEAP8[i1 + (i6 * 12 | 0) + 102420 | 0] | 0) == 0) {
   18596   i5 = i1 + (i6 * 12 | 0) + 102416 | 0;
   18597   i6 = i1 + 102400 | 0;
   18598   HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) - (HEAP32[i5 >> 2] | 0);
   18599  } else {
   18600   __Z6b2FreePv(i5);
   18601   i5 = i1 + (i6 * 12 | 0) + 102416 | 0;
   18602   i4 = HEAP32[i2 >> 2] | 0;
   18603  }
   18604  i6 = i1 + 102404 | 0;
   18605  HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) - (HEAP32[i5 >> 2] | 0);
   18606  HEAP32[i2 >> 2] = i4 + -1;
   18607  STACKTOP = i3;
   18608  return;
   18609 }
   18610 function __ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi(i5, i4, i3, i2) {
   18611  i5 = i5 | 0;
   18612  i4 = i4 | 0;
   18613  i3 = i3 | 0;
   18614  i2 = i2 | 0;
   18615  var i1 = 0, i6 = 0;
   18616  i1 = STACKTOP;
   18617  if ((HEAP32[i4 + 8 >> 2] | 0) != (i5 | 0)) {
   18618   STACKTOP = i1;
   18619   return;
   18620  }
   18621  i5 = i4 + 16 | 0;
   18622  i6 = HEAP32[i5 >> 2] | 0;
   18623  if ((i6 | 0) == 0) {
   18624   HEAP32[i5 >> 2] = i3;
   18625   HEAP32[i4 + 24 >> 2] = i2;
   18626   HEAP32[i4 + 36 >> 2] = 1;
   18627   STACKTOP = i1;
   18628   return;
   18629  }
   18630  if ((i6 | 0) != (i3 | 0)) {
   18631   i6 = i4 + 36 | 0;
   18632   HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
   18633   HEAP32[i4 + 24 >> 2] = 2;
   18634   HEAP8[i4 + 54 | 0] = 1;
   18635   STACKTOP = i1;
   18636   return;
   18637  }
   18638  i3 = i4 + 24 | 0;
   18639  if ((HEAP32[i3 >> 2] | 0) != 2) {
   18640   STACKTOP = i1;
   18641   return;
   18642  }
   18643  HEAP32[i3 >> 2] = i2;
   18644  STACKTOP = i1;
   18645  return;
   18646 }
   18647 function __ZN12b2BroadPhase11CreateProxyERK6b2AABBPv(i2, i4, i3) {
   18648  i2 = i2 | 0;
   18649  i4 = i4 | 0;
   18650  i3 = i3 | 0;
   18651  var i1 = 0, i5 = 0, i6 = 0, i7 = 0;
   18652  i1 = STACKTOP;
   18653  i3 = __ZN13b2DynamicTree11CreateProxyERK6b2AABBPv(i2, i4, i3) | 0;
   18654  i4 = i2 + 28 | 0;
   18655  HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
   18656  i4 = i2 + 40 | 0;
   18657  i5 = HEAP32[i4 >> 2] | 0;
   18658  i6 = i2 + 36 | 0;
   18659  i2 = i2 + 32 | 0;
   18660  if ((i5 | 0) == (HEAP32[i6 >> 2] | 0)) {
   18661   i7 = HEAP32[i2 >> 2] | 0;
   18662   HEAP32[i6 >> 2] = i5 << 1;
   18663   i5 = __Z7b2Alloci(i5 << 3) | 0;
   18664   HEAP32[i2 >> 2] = i5;
   18665   _memcpy(i5 | 0, i7 | 0, HEAP32[i4 >> 2] << 2 | 0) | 0;
   18666   __Z6b2FreePv(i7);
   18667   i5 = HEAP32[i4 >> 2] | 0;
   18668  }
   18669  HEAP32[(HEAP32[i2 >> 2] | 0) + (i5 << 2) >> 2] = i3;
   18670  HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
   18671  STACKTOP = i1;
   18672  return i3 | 0;
   18673 }
   18674 function __ZN9b2ContactC2EP9b2FixtureiS1_i(i1, i4, i6, i3, i5) {
   18675  i1 = i1 | 0;
   18676  i4 = i4 | 0;
   18677  i6 = i6 | 0;
   18678  i3 = i3 | 0;
   18679  i5 = i5 | 0;
   18680  var i2 = 0, i7 = 0, d8 = 0.0, d9 = 0.0;
   18681  i2 = STACKTOP;
   18682  HEAP32[i1 >> 2] = 4440;
   18683  HEAP32[i1 + 4 >> 2] = 4;
   18684  HEAP32[i1 + 48 >> 2] = i4;
   18685  HEAP32[i1 + 52 >> 2] = i3;
   18686  HEAP32[i1 + 56 >> 2] = i6;
   18687  HEAP32[i1 + 60 >> 2] = i5;
   18688  HEAP32[i1 + 124 >> 2] = 0;
   18689  HEAP32[i1 + 128 >> 2] = 0;
   18690  i5 = i4 + 16 | 0;
   18691  i6 = i1 + 8 | 0;
   18692  i7 = i6 + 40 | 0;
   18693  do {
   18694   HEAP32[i6 >> 2] = 0;
   18695   i6 = i6 + 4 | 0;
   18696  } while ((i6 | 0) < (i7 | 0));
   18697  HEAPF32[i1 + 136 >> 2] = +Math_sqrt(+(+HEAPF32[i5 >> 2] * +HEAPF32[i3 + 16 >> 2]));
   18698  d8 = +HEAPF32[i4 + 20 >> 2];
   18699  d9 = +HEAPF32[i3 + 20 >> 2];
   18700  HEAPF32[i1 + 140 >> 2] = d8 > d9 ? d8 : d9;
   18701  STACKTOP = i2;
   18702  return;
   18703 }
   18704 function __ZN12b2BroadPhase9MoveProxyEiRK6b2AABBRK6b2Vec2(i3, i1, i5, i4) {
   18705  i3 = i3 | 0;
   18706  i1 = i1 | 0;
   18707  i5 = i5 | 0;
   18708  i4 = i4 | 0;
   18709  var i2 = 0, i6 = 0, i7 = 0;
   18710  i2 = STACKTOP;
   18711  if (!(__ZN13b2DynamicTree9MoveProxyEiRK6b2AABBRK6b2Vec2(i3, i1, i5, i4) | 0)) {
   18712   STACKTOP = i2;
   18713   return;
   18714  }
   18715  i4 = i3 + 40 | 0;
   18716  i5 = HEAP32[i4 >> 2] | 0;
   18717  i6 = i3 + 36 | 0;
   18718  i3 = i3 + 32 | 0;
   18719  if ((i5 | 0) == (HEAP32[i6 >> 2] | 0)) {
   18720   i7 = HEAP32[i3 >> 2] | 0;
   18721   HEAP32[i6 >> 2] = i5 << 1;
   18722   i5 = __Z7b2Alloci(i5 << 3) | 0;
   18723   HEAP32[i3 >> 2] = i5;
   18724   _memcpy(i5 | 0, i7 | 0, HEAP32[i4 >> 2] << 2 | 0) | 0;
   18725   __Z6b2FreePv(i7);
   18726   i5 = HEAP32[i4 >> 2] | 0;
   18727  }
   18728  HEAP32[(HEAP32[i3 >> 2] | 0) + (i5 << 2) >> 2] = i1;
   18729  HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
   18730  STACKTOP = i2;
   18731  return;
   18732 }
   18733 function __ZN24b2ChainAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i3, i4, i5, i6) {
   18734  i1 = i1 | 0;
   18735  i3 = i3 | 0;
   18736  i4 = i4 | 0;
   18737  i5 = i5 | 0;
   18738  i6 = i6 | 0;
   18739  var i2 = 0;
   18740  i2 = STACKTOP;
   18741  i6 = __ZN16b2BlockAllocator8AllocateEi(i6, 144) | 0;
   18742  if ((i6 | 0) == 0) {
   18743   i6 = 0;
   18744   STACKTOP = i2;
   18745   return i6 | 0;
   18746  }
   18747  __ZN9b2ContactC2EP9b2FixtureiS1_i(i6, i1, i3, i4, i5);
   18748  HEAP32[i6 >> 2] = 6032;
   18749  if ((HEAP32[(HEAP32[(HEAP32[i6 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 3) {
   18750   ___assert_fail(6048, 6096, 43, 6152);
   18751  }
   18752  if ((HEAP32[(HEAP32[(HEAP32[i6 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 2) {
   18753   STACKTOP = i2;
   18754   return i6 | 0;
   18755  } else {
   18756   ___assert_fail(6184, 6096, 44, 6152);
   18757  }
   18758  return 0;
   18759 }
   18760 function __ZN23b2ChainAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i3, i4, i5, i6) {
   18761  i1 = i1 | 0;
   18762  i3 = i3 | 0;
   18763  i4 = i4 | 0;
   18764  i5 = i5 | 0;
   18765  i6 = i6 | 0;
   18766  var i2 = 0;
   18767  i2 = STACKTOP;
   18768  i6 = __ZN16b2BlockAllocator8AllocateEi(i6, 144) | 0;
   18769  if ((i6 | 0) == 0) {
   18770   i6 = 0;
   18771   STACKTOP = i2;
   18772   return i6 | 0;
   18773  }
   18774  __ZN9b2ContactC2EP9b2FixtureiS1_i(i6, i1, i3, i4, i5);
   18775  HEAP32[i6 >> 2] = 5784;
   18776  if ((HEAP32[(HEAP32[(HEAP32[i6 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 3) {
   18777   ___assert_fail(5800, 5848, 43, 5904);
   18778  }
   18779  if ((HEAP32[(HEAP32[(HEAP32[i6 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) {
   18780   STACKTOP = i2;
   18781   return i6 | 0;
   18782  } else {
   18783   ___assert_fail(5928, 5848, 44, 5904);
   18784  }
   18785  return 0;
   18786 }
   18787 function __ZN25b2PolygonAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
   18788  i1 = i1 | 0;
   18789  i4 = i4 | 0;
   18790  i2 = i2 | 0;
   18791  i5 = i5 | 0;
   18792  i3 = i3 | 0;
   18793  i4 = STACKTOP;
   18794  i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
   18795  if ((i3 | 0) == 0) {
   18796   i5 = 0;
   18797   STACKTOP = i4;
   18798   return i5 | 0;
   18799  }
   18800  __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
   18801  HEAP32[i3 >> 2] = 4984;
   18802  if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 2) {
   18803   ___assert_fail(5e3, 5048, 41, 5104);
   18804  }
   18805  if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) {
   18806   i5 = i3;
   18807   STACKTOP = i4;
   18808   return i5 | 0;
   18809  } else {
   18810   ___assert_fail(5136, 5048, 42, 5104);
   18811  }
   18812  return 0;
   18813 }
   18814 function __ZN23b2EdgeAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
   18815  i1 = i1 | 0;
   18816  i4 = i4 | 0;
   18817  i2 = i2 | 0;
   18818  i5 = i5 | 0;
   18819  i3 = i3 | 0;
   18820  i4 = STACKTOP;
   18821  i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
   18822  if ((i3 | 0) == 0) {
   18823   i5 = 0;
   18824   STACKTOP = i4;
   18825   return i5 | 0;
   18826  }
   18827  __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
   18828  HEAP32[i3 >> 2] = 4736;
   18829  if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 1) {
   18830   ___assert_fail(4752, 4800, 41, 4856);
   18831  }
   18832  if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 2) {
   18833   i5 = i3;
   18834   STACKTOP = i4;
   18835   return i5 | 0;
   18836  } else {
   18837   ___assert_fail(4880, 4800, 42, 4856);
   18838  }
   18839  return 0;
   18840 }
   18841 function __ZN22b2EdgeAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
   18842  i1 = i1 | 0;
   18843  i4 = i4 | 0;
   18844  i2 = i2 | 0;
   18845  i5 = i5 | 0;
   18846  i3 = i3 | 0;
   18847  i4 = STACKTOP;
   18848  i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
   18849  if ((i3 | 0) == 0) {
   18850   i5 = 0;
   18851   STACKTOP = i4;
   18852   return i5 | 0;
   18853  }
   18854  __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
   18855  HEAP32[i3 >> 2] = 4488;
   18856  if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 1) {
   18857   ___assert_fail(4504, 4552, 41, 4608);
   18858  }
   18859  if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) {
   18860   i5 = i3;
   18861   STACKTOP = i4;
   18862   return i5 | 0;
   18863  } else {
   18864   ___assert_fail(4632, 4552, 42, 4608);
   18865  }
   18866  return 0;
   18867 }
   18868 function __ZN14b2PolygonShape8SetAsBoxEff(i1, d3, d2) {
   18869  i1 = i1 | 0;
   18870  d3 = +d3;
   18871  d2 = +d2;
   18872  var d4 = 0.0, d5 = 0.0;
   18873  HEAP32[i1 + 148 >> 2] = 4;
   18874  d4 = -d3;
   18875  d5 = -d2;
   18876  HEAPF32[i1 + 20 >> 2] = d4;
   18877  HEAPF32[i1 + 24 >> 2] = d5;
   18878  HEAPF32[i1 + 28 >> 2] = d3;
   18879  HEAPF32[i1 + 32 >> 2] = d5;
   18880  HEAPF32[i1 + 36 >> 2] = d3;
   18881  HEAPF32[i1 + 40 >> 2] = d2;
   18882  HEAPF32[i1 + 44 >> 2] = d4;
   18883  HEAPF32[i1 + 48 >> 2] = d2;
   18884  HEAPF32[i1 + 84 >> 2] = 0.0;
   18885  HEAPF32[i1 + 88 >> 2] = -1.0;
   18886  HEAPF32[i1 + 92 >> 2] = 1.0;
   18887  HEAPF32[i1 + 96 >> 2] = 0.0;
   18888  HEAPF32[i1 + 100 >> 2] = 0.0;
   18889  HEAPF32[i1 + 104 >> 2] = 1.0;
   18890  HEAPF32[i1 + 108 >> 2] = -1.0;
   18891  HEAPF32[i1 + 112 >> 2] = 0.0;
   18892  HEAPF32[i1 + 12 >> 2] = 0.0;
   18893  HEAPF32[i1 + 16 >> 2] = 0.0;
   18894  return;
   18895 }
   18896 function __ZN16b2PolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
   18897  i1 = i1 | 0;
   18898  i4 = i4 | 0;
   18899  i2 = i2 | 0;
   18900  i5 = i5 | 0;
   18901  i3 = i3 | 0;
   18902  i4 = STACKTOP;
   18903  i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
   18904  if ((i3 | 0) == 0) {
   18905   i5 = 0;
   18906   STACKTOP = i4;
   18907   return i5 | 0;
   18908  }
   18909  __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
   18910  HEAP32[i3 >> 2] = 5240;
   18911  if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 2) {
   18912   ___assert_fail(5256, 5304, 44, 5352);
   18913  }
   18914  if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 2) {
   18915   i5 = i3;
   18916   STACKTOP = i4;
   18917   return i5 | 0;
   18918  } else {
   18919   ___assert_fail(5376, 5304, 45, 5352);
   18920  }
   18921  return 0;
   18922 }
   18923 function __ZN15b2CircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
   18924  i1 = i1 | 0;
   18925  i4 = i4 | 0;
   18926  i2 = i2 | 0;
   18927  i5 = i5 | 0;
   18928  i3 = i3 | 0;
   18929  i4 = STACKTOP;
   18930  i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
   18931  if ((i3 | 0) == 0) {
   18932   i5 = 0;
   18933   STACKTOP = i4;
   18934   return i5 | 0;
   18935  }
   18936  __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
   18937  HEAP32[i3 >> 2] = 6288;
   18938  if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 0) {
   18939   ___assert_fail(6304, 6352, 44, 6400);
   18940  }
   18941  if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) {
   18942   i5 = i3;
   18943   STACKTOP = i4;
   18944   return i5 | 0;
   18945  } else {
   18946   ___assert_fail(6416, 6352, 45, 6400);
   18947  }
   18948  return 0;
   18949 }
   18950 function __ZN7b2World10CreateBodyEPK9b2BodyDef(i1, i4) {
   18951  i1 = i1 | 0;
   18952  i4 = i4 | 0;
   18953  var i2 = 0, i3 = 0, i5 = 0;
   18954  i2 = STACKTOP;
   18955  if ((HEAP32[i1 + 102868 >> 2] & 2 | 0) != 0) {
   18956   ___assert_fail(2160, 2184, 109, 2216);
   18957  }
   18958  i3 = __ZN16b2BlockAllocator8AllocateEi(i1, 152) | 0;
   18959  if ((i3 | 0) == 0) {
   18960   i3 = 0;
   18961  } else {
   18962   __ZN6b2BodyC2EPK9b2BodyDefP7b2World(i3, i4, i1);
   18963  }
   18964  HEAP32[i3 + 92 >> 2] = 0;
   18965  i4 = i1 + 102952 | 0;
   18966  HEAP32[i3 + 96 >> 2] = HEAP32[i4 >> 2];
   18967  i5 = HEAP32[i4 >> 2] | 0;
   18968  if ((i5 | 0) != 0) {
   18969   HEAP32[i5 + 92 >> 2] = i3;
   18970  }
   18971  HEAP32[i4 >> 2] = i3;
   18972  i5 = i1 + 102960 | 0;
   18973  HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
   18974  STACKTOP = i2;
   18975  return i3 | 0;
   18976 }
   18977 function __ZNK6b2Body13ShouldCollideEPKS_(i4, i2) {
   18978  i4 = i4 | 0;
   18979  i2 = i2 | 0;
   18980  var i1 = 0, i3 = 0;
   18981  i1 = STACKTOP;
   18982  if ((HEAP32[i4 >> 2] | 0) != 2 ? (HEAP32[i2 >> 2] | 0) != 2 : 0) {
   18983   i2 = 0;
   18984  } else {
   18985   i3 = 3;
   18986  }
   18987  L3 : do {
   18988   if ((i3 | 0) == 3) {
   18989    i3 = HEAP32[i4 + 108 >> 2] | 0;
   18990    if ((i3 | 0) == 0) {
   18991     i2 = 1;
   18992    } else {
   18993     while (1) {
   18994      if ((HEAP32[i3 >> 2] | 0) == (i2 | 0) ? (HEAP8[(HEAP32[i3 + 4 >> 2] | 0) + 61 | 0] | 0) == 0 : 0) {
   18995       i2 = 0;
   18996       break L3;
   18997      }
   18998      i3 = HEAP32[i3 + 12 >> 2] | 0;
   18999      if ((i3 | 0) == 0) {
   19000       i2 = 1;
   19001       break;
   19002      }
   19003     }
   19004    }
   19005   }
   19006  } while (0);
   19007  STACKTOP = i1;
   19008  return i2 | 0;
   19009 }
   19010 function __ZNK14b2PolygonShape5CloneEP16b2BlockAllocator(i1, i3) {
   19011  i1 = i1 | 0;
   19012  i3 = i3 | 0;
   19013  var i2 = 0, i4 = 0, i5 = 0, i6 = 0;
   19014  i2 = STACKTOP;
   19015  i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 152) | 0;
   19016  if ((i3 | 0) == 0) {
   19017   i3 = 0;
   19018  } else {
   19019   HEAP32[i3 >> 2] = 504;
   19020   HEAP32[i3 + 4 >> 2] = 2;
   19021   HEAPF32[i3 + 8 >> 2] = .009999999776482582;
   19022   HEAP32[i3 + 148 >> 2] = 0;
   19023   HEAPF32[i3 + 12 >> 2] = 0.0;
   19024   HEAPF32[i3 + 16 >> 2] = 0.0;
   19025  }
   19026  i6 = i1 + 4 | 0;
   19027  i5 = HEAP32[i6 + 4 >> 2] | 0;
   19028  i4 = i3 + 4 | 0;
   19029  HEAP32[i4 >> 2] = HEAP32[i6 >> 2];
   19030  HEAP32[i4 + 4 >> 2] = i5;
   19031  _memcpy(i3 + 12 | 0, i1 + 12 | 0, 140) | 0;
   19032  STACKTOP = i2;
   19033  return i3 | 0;
   19034 }
   19035 function _memcpy(i3, i2, i1) {
   19036  i3 = i3 | 0;
   19037  i2 = i2 | 0;
   19038  i1 = i1 | 0;
   19039  var i4 = 0;
   19040  if ((i1 | 0) >= 4096) return _emscripten_memcpy_big(i3 | 0, i2 | 0, i1 | 0) | 0;
   19041  i4 = i3 | 0;
   19042  if ((i3 & 3) == (i2 & 3)) {
   19043   while (i3 & 3) {
   19044    if ((i1 | 0) == 0) return i4 | 0;
   19045    HEAP8[i3] = HEAP8[i2] | 0;
   19046    i3 = i3 + 1 | 0;
   19047    i2 = i2 + 1 | 0;
   19048    i1 = i1 - 1 | 0;
   19049   }
   19050   while ((i1 | 0) >= 4) {
   19051    HEAP32[i3 >> 2] = HEAP32[i2 >> 2];
   19052    i3 = i3 + 4 | 0;
   19053    i2 = i2 + 4 | 0;
   19054    i1 = i1 - 4 | 0;
   19055   }
   19056  }
   19057  while ((i1 | 0) > 0) {
   19058   HEAP8[i3] = HEAP8[i2] | 0;
   19059   i3 = i3 + 1 | 0;
   19060   i2 = i2 + 1 | 0;
   19061   i1 = i1 - 1 | 0;
   19062  }
   19063  return i4 | 0;
   19064 }
   19065 function __ZN7b2World16SetAllowSleepingEb(i2, i4) {
   19066  i2 = i2 | 0;
   19067  i4 = i4 | 0;
   19068  var i1 = 0, i3 = 0;
   19069  i1 = STACKTOP;
   19070  i3 = i2 + 102976 | 0;
   19071  if ((i4 & 1 | 0) == (HEAPU8[i3] | 0 | 0)) {
   19072   STACKTOP = i1;
   19073   return;
   19074  }
   19075  HEAP8[i3] = i4 & 1;
   19076  if (i4) {
   19077   STACKTOP = i1;
   19078   return;
   19079  }
   19080  i2 = HEAP32[i2 + 102952 >> 2] | 0;
   19081  if ((i2 | 0) == 0) {
   19082   STACKTOP = i1;
   19083   return;
   19084  }
   19085  do {
   19086   i3 = i2 + 4 | 0;
   19087   i4 = HEAPU16[i3 >> 1] | 0;
   19088   if ((i4 & 2 | 0) == 0) {
   19089    HEAP16[i3 >> 1] = i4 | 2;
   19090    HEAPF32[i2 + 144 >> 2] = 0.0;
   19091   }
   19092   i2 = HEAP32[i2 + 96 >> 2] | 0;
   19093  } while ((i2 | 0) != 0);
   19094  STACKTOP = i1;
   19095  return;
   19096 }
   19097 function __ZN16b2BlockAllocator4FreeEPvi(i3, i1, i4) {
   19098  i3 = i3 | 0;
   19099  i1 = i1 | 0;
   19100  i4 = i4 | 0;
   19101  var i2 = 0;
   19102  i2 = STACKTOP;
   19103  if ((i4 | 0) == 0) {
   19104   STACKTOP = i2;
   19105   return;
   19106  }
   19107  if ((i4 | 0) <= 0) {
   19108   ___assert_fail(1376, 1312, 164, 1488);
   19109  }
   19110  if ((i4 | 0) > 640) {
   19111   __Z6b2FreePv(i1);
   19112   STACKTOP = i2;
   19113   return;
   19114  }
   19115  i4 = HEAP8[632 + i4 | 0] | 0;
   19116  if (!((i4 & 255) < 14)) {
   19117   ___assert_fail(1408, 1312, 173, 1488);
   19118  }
   19119  i4 = i3 + ((i4 & 255) << 2) + 12 | 0;
   19120  HEAP32[i1 >> 2] = HEAP32[i4 >> 2];
   19121  HEAP32[i4 >> 2] = i1;
   19122  STACKTOP = i2;
   19123  return;
   19124 }
   19125 function __ZN15b2ContactFilter13ShouldCollideEP9b2FixtureS1_(i3, i2, i1) {
   19126  i3 = i3 | 0;
   19127  i2 = i2 | 0;
   19128  i1 = i1 | 0;
   19129  var i4 = 0;
   19130  i3 = STACKTOP;
   19131  i4 = HEAP16[i2 + 36 >> 1] | 0;
   19132  if (!(i4 << 16 >> 16 != (HEAP16[i1 + 36 >> 1] | 0) | i4 << 16 >> 16 == 0)) {
   19133   i4 = i4 << 16 >> 16 > 0;
   19134   STACKTOP = i3;
   19135   return i4 | 0;
   19136  }
   19137  if ((HEAP16[i1 + 32 >> 1] & HEAP16[i2 + 34 >> 1]) << 16 >> 16 == 0) {
   19138   i4 = 0;
   19139   STACKTOP = i3;
   19140   return i4 | 0;
   19141  }
   19142  i4 = (HEAP16[i1 + 34 >> 1] & HEAP16[i2 + 32 >> 1]) << 16 >> 16 != 0;
   19143  STACKTOP = i3;
   19144  return i4 | 0;
   19145 }
   19146 function _memset(i1, i4, i3) {
   19147  i1 = i1 | 0;
   19148  i4 = i4 | 0;
   19149  i3 = i3 | 0;
   19150  var i2 = 0, i5 = 0, i6 = 0, i7 = 0;
   19151  i2 = i1 + i3 | 0;
   19152  if ((i3 | 0) >= 20) {
   19153   i4 = i4 & 255;
   19154   i7 = i1 & 3;
   19155   i6 = i4 | i4 << 8 | i4 << 16 | i4 << 24;
   19156   i5 = i2 & ~3;
   19157   if (i7) {
   19158    i7 = i1 + 4 - i7 | 0;
   19159    while ((i1 | 0) < (i7 | 0)) {
   19160     HEAP8[i1] = i4;
   19161     i1 = i1 + 1 | 0;
   19162    }
   19163   }
   19164   while ((i1 | 0) < (i5 | 0)) {
   19165    HEAP32[i1 >> 2] = i6;
   19166    i1 = i1 + 4 | 0;
   19167   }
   19168  }
   19169  while ((i1 | 0) < (i2 | 0)) {
   19170   HEAP8[i1] = i4;
   19171   i1 = i1 + 1 | 0;
   19172  }
   19173  return i1 - i3 | 0;
   19174 }
   19175 function __ZN6b2Body13CreateFixtureEPK7b2Shapef(i1, i3, d2) {
   19176  i1 = i1 | 0;
   19177  i3 = i3 | 0;
   19178  d2 = +d2;
   19179  var i4 = 0, i5 = 0;
   19180  i4 = STACKTOP;
   19181  STACKTOP = STACKTOP + 32 | 0;
   19182  i5 = i4;
   19183  HEAP16[i5 + 22 >> 1] = 1;
   19184  HEAP16[i5 + 24 >> 1] = -1;
   19185  HEAP16[i5 + 26 >> 1] = 0;
   19186  HEAP32[i5 + 4 >> 2] = 0;
   19187  HEAPF32[i5 + 8 >> 2] = .20000000298023224;
   19188  HEAPF32[i5 + 12 >> 2] = 0.0;
   19189  HEAP8[i5 + 20 | 0] = 0;
   19190  HEAP32[i5 >> 2] = i3;
   19191  HEAPF32[i5 + 16 >> 2] = d2;
   19192  i3 = __ZN6b2Body13CreateFixtureEPK12b2FixtureDef(i1, i5) | 0;
   19193  STACKTOP = i4;
   19194  return i3 | 0;
   19195 }
   19196 function __Znwj(i2) {
   19197  i2 = i2 | 0;
   19198  var i1 = 0, i3 = 0;
   19199  i1 = STACKTOP;
   19200  i2 = (i2 | 0) == 0 ? 1 : i2;
   19201  while (1) {
   19202   i3 = _malloc(i2) | 0;
   19203   if ((i3 | 0) != 0) {
   19204    i2 = 6;
   19205    break;
   19206   }
   19207   i3 = HEAP32[1914] | 0;
   19208   HEAP32[1914] = i3 + 0;
   19209   if ((i3 | 0) == 0) {
   19210    i2 = 5;
   19211    break;
   19212   }
   19213   FUNCTION_TABLE_v[i3 & 3]();
   19214  }
   19215  if ((i2 | 0) == 5) {
   19216   i3 = ___cxa_allocate_exception(4) | 0;
   19217   HEAP32[i3 >> 2] = 7672;
   19218   ___cxa_throw(i3 | 0, 7720, 30);
   19219  } else if ((i2 | 0) == 6) {
   19220   STACKTOP = i1;
   19221   return i3 | 0;
   19222  }
   19223  return 0;
   19224 }
   19225 function __ZN8b2IslandD2Ev(i1) {
   19226  i1 = i1 | 0;
   19227  var i2 = 0;
   19228  i2 = STACKTOP;
   19229  __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 20 >> 2] | 0);
   19230  __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 24 >> 2] | 0);
   19231  __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 16 >> 2] | 0);
   19232  __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 12 >> 2] | 0);
   19233  __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 8 >> 2] | 0);
   19234  STACKTOP = i2;
   19235  return;
   19236 }
   19237 function __ZN16b2BlockAllocatorD2Ev(i2) {
   19238  i2 = i2 | 0;
   19239  var i1 = 0, i3 = 0, i4 = 0, i5 = 0;
   19240  i1 = STACKTOP;
   19241  i3 = i2 + 4 | 0;
   19242  i4 = HEAP32[i2 >> 2] | 0;
   19243  if ((HEAP32[i3 >> 2] | 0) > 0) {
   19244   i5 = 0;
   19245  } else {
   19246   i5 = i4;
   19247   __Z6b2FreePv(i5);
   19248   STACKTOP = i1;
   19249   return;
   19250  }
   19251  do {
   19252   __Z6b2FreePv(HEAP32[i4 + (i5 << 3) + 4 >> 2] | 0);
   19253   i5 = i5 + 1 | 0;
   19254   i4 = HEAP32[i2 >> 2] | 0;
   19255  } while ((i5 | 0) < (HEAP32[i3 >> 2] | 0));
   19256  __Z6b2FreePv(i4);
   19257  STACKTOP = i1;
   19258  return;
   19259 }
   19260 function copyTempDouble(i1) {
   19261  i1 = i1 | 0;
   19262  HEAP8[tempDoublePtr] = HEAP8[i1];
   19263  HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
   19264  HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
   19265  HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
   19266  HEAP8[tempDoublePtr + 4 | 0] = HEAP8[i1 + 4 | 0];
   19267  HEAP8[tempDoublePtr + 5 | 0] = HEAP8[i1 + 5 | 0];
   19268  HEAP8[tempDoublePtr + 6 | 0] = HEAP8[i1 + 6 | 0];
   19269  HEAP8[tempDoublePtr + 7 | 0] = HEAP8[i1 + 7 | 0];
   19270 }
   19271 function __ZNK11b2EdgeShape11ComputeMassEP10b2MassDataf(i2, i1, d3) {
   19272  i2 = i2 | 0;
   19273  i1 = i1 | 0;
   19274  d3 = +d3;
   19275  var i4 = 0, d5 = 0.0;
   19276  i4 = STACKTOP;
   19277  HEAPF32[i1 >> 2] = 0.0;
   19278  d5 = +((+HEAPF32[i2 + 12 >> 2] + +HEAPF32[i2 + 20 >> 2]) * .5);
   19279  d3 = +((+HEAPF32[i2 + 16 >> 2] + +HEAPF32[i2 + 24 >> 2]) * .5);
   19280  i2 = i1 + 4 | 0;
   19281  HEAPF32[i2 >> 2] = d5;
   19282  HEAPF32[i2 + 4 >> 2] = d3;
   19283  HEAPF32[i1 + 12 >> 2] = 0.0;
   19284  STACKTOP = i4;
   19285  return;
   19286 }
   19287 function __ZN11b2EdgeShape3SetERK6b2Vec2S2_(i1, i3, i2) {
   19288  i1 = i1 | 0;
   19289  i3 = i3 | 0;
   19290  i2 = i2 | 0;
   19291  var i4 = 0, i5 = 0;
   19292  i5 = i3;
   19293  i3 = HEAP32[i5 + 4 >> 2] | 0;
   19294  i4 = i1 + 12 | 0;
   19295  HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
   19296  HEAP32[i4 + 4 >> 2] = i3;
   19297  i4 = i2;
   19298  i2 = HEAP32[i4 + 4 >> 2] | 0;
   19299  i3 = i1 + 20 | 0;
   19300  HEAP32[i3 >> 2] = HEAP32[i4 >> 2];
   19301  HEAP32[i3 + 4 >> 2] = i2;
   19302  HEAP8[i1 + 44 | 0] = 0;
   19303  HEAP8[i1 + 45 | 0] = 0;
   19304  return;
   19305 }
   19306 function __ZN25b2PolygonAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
   19307  i2 = i2 | 0;
   19308  i4 = i4 | 0;
   19309  i3 = i3 | 0;
   19310  i1 = i1 | 0;
   19311  var i5 = 0;
   19312  i5 = STACKTOP;
   19313  __Z25b2CollidePolygonAndCircleP10b2ManifoldPK14b2PolygonShapeRK11b2TransformPK13b2CircleShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
   19314  STACKTOP = i5;
   19315  return;
   19316 }
   19317 function __ZN23b2EdgeAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
   19318  i2 = i2 | 0;
   19319  i4 = i4 | 0;
   19320  i3 = i3 | 0;
   19321  i1 = i1 | 0;
   19322  var i5 = 0;
   19323  i5 = STACKTOP;
   19324  __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
   19325  STACKTOP = i5;
   19326  return;
   19327 }
   19328 function __ZN22b2EdgeAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
   19329  i2 = i2 | 0;
   19330  i4 = i4 | 0;
   19331  i3 = i3 | 0;
   19332  i1 = i1 | 0;
   19333  var i5 = 0;
   19334  i5 = STACKTOP;
   19335  __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2CircleShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
   19336  STACKTOP = i5;
   19337  return;
   19338 }
   19339 function __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS6_(i5, i4, i3, i2, i1) {
   19340  i5 = i5 | 0;
   19341  i4 = i4 | 0;
   19342  i3 = i3 | 0;
   19343  i2 = i2 | 0;
   19344  i1 = i1 | 0;
   19345  var i6 = 0;
   19346  i6 = STACKTOP;
   19347  STACKTOP = STACKTOP + 256 | 0;
   19348  __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS7_(i6, i5, i4, i3, i2, i1);
   19349  STACKTOP = i6;
   19350  return;
   19351 }
   19352 function __ZN16b2PolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
   19353  i2 = i2 | 0;
   19354  i4 = i4 | 0;
   19355  i3 = i3 | 0;
   19356  i1 = i1 | 0;
   19357  var i5 = 0;
   19358  i5 = STACKTOP;
   19359  __Z17b2CollidePolygonsP10b2ManifoldPK14b2PolygonShapeRK11b2TransformS3_S6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
   19360  STACKTOP = i5;
   19361  return;
   19362 }
   19363 function __ZN15b2CircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
   19364  i2 = i2 | 0;
   19365  i4 = i4 | 0;
   19366  i3 = i3 | 0;
   19367  i1 = i1 | 0;
   19368  var i5 = 0;
   19369  i5 = STACKTOP;
   19370  __Z16b2CollideCirclesP10b2ManifoldPK13b2CircleShapeRK11b2TransformS3_S6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
   19371  STACKTOP = i5;
   19372  return;
   19373 }
   19374 function __Z14b2PairLessThanRK6b2PairS1_(i2, i5) {
   19375  i2 = i2 | 0;
   19376  i5 = i5 | 0;
   19377  var i1 = 0, i3 = 0, i4 = 0;
   19378  i1 = STACKTOP;
   19379  i4 = HEAP32[i2 >> 2] | 0;
   19380  i3 = HEAP32[i5 >> 2] | 0;
   19381  if ((i4 | 0) >= (i3 | 0)) {
   19382   if ((i4 | 0) == (i3 | 0)) {
   19383    i2 = (HEAP32[i2 + 4 >> 2] | 0) < (HEAP32[i5 + 4 >> 2] | 0);
   19384   } else {
   19385    i2 = 0;
   19386   }
   19387  } else {
   19388   i2 = 1;
   19389  }
   19390  STACKTOP = i1;
   19391  return i2 | 0;
   19392 }
   19393 function __ZN9b2FixtureC2Ev(i1) {
   19394  i1 = i1 | 0;
   19395  var i2 = 0;
   19396  i2 = STACKTOP;
   19397  HEAP16[i1 + 32 >> 1] = 1;
   19398  HEAP16[i1 + 34 >> 1] = -1;
   19399  HEAP16[i1 + 36 >> 1] = 0;
   19400  HEAP32[i1 + 40 >> 2] = 0;
   19401  HEAP32[i1 + 24 >> 2] = 0;
   19402  HEAP32[i1 + 28 >> 2] = 0;
   19403  HEAP32[i1 + 0 >> 2] = 0;
   19404  HEAP32[i1 + 4 >> 2] = 0;
   19405  HEAP32[i1 + 8 >> 2] = 0;
   19406  HEAP32[i1 + 12 >> 2] = 0;
   19407  STACKTOP = i2;
   19408  return;
   19409 }
   19410 function __ZN12b2BroadPhaseC2Ev(i1) {
   19411  i1 = i1 | 0;
   19412  var i2 = 0;
   19413  i2 = STACKTOP;
   19414  __ZN13b2DynamicTreeC2Ev(i1);
   19415  HEAP32[i1 + 28 >> 2] = 0;
   19416  HEAP32[i1 + 48 >> 2] = 16;
   19417  HEAP32[i1 + 52 >> 2] = 0;
   19418  HEAP32[i1 + 44 >> 2] = __Z7b2Alloci(192) | 0;
   19419  HEAP32[i1 + 36 >> 2] = 16;
   19420  HEAP32[i1 + 40 >> 2] = 0;
   19421  HEAP32[i1 + 32 >> 2] = __Z7b2Alloci(64) | 0;
   19422  STACKTOP = i2;
   19423  return;
   19424 }
   19425 function __ZN16b2StackAllocatorD2Ev(i1) {
   19426  i1 = i1 | 0;
   19427  var i2 = 0;
   19428  i2 = STACKTOP;
   19429  if ((HEAP32[i1 + 102400 >> 2] | 0) != 0) {
   19430   ___assert_fail(3792, 3808, 32, 3848);
   19431  }
   19432  if ((HEAP32[i1 + 102796 >> 2] | 0) == 0) {
   19433   STACKTOP = i2;
   19434   return;
   19435  } else {
   19436   ___assert_fail(3872, 3808, 33, 3848);
   19437  }
   19438 }
   19439 function __ZN15b2ContactSolverD2Ev(i1) {
   19440  i1 = i1 | 0;
   19441  var i2 = 0, i3 = 0;
   19442  i2 = STACKTOP;
   19443  i3 = i1 + 32 | 0;
   19444  __ZN16b2StackAllocator4FreeEPv(HEAP32[i3 >> 2] | 0, HEAP32[i1 + 40 >> 2] | 0);
   19445  __ZN16b2StackAllocator4FreeEPv(HEAP32[i3 >> 2] | 0, HEAP32[i1 + 36 >> 2] | 0);
   19446  STACKTOP = i2;
   19447  return;
   19448 }
   19449 function __ZN25b2PolygonAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
   19450  i1 = i1 | 0;
   19451  i2 = i2 | 0;
   19452  var i3 = 0;
   19453  i3 = STACKTOP;
   19454  FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
   19455  __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
   19456  STACKTOP = i3;
   19457  return;
   19458 }
   19459 function __ZN24b2ChainAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
   19460  i1 = i1 | 0;
   19461  i2 = i2 | 0;
   19462  var i3 = 0;
   19463  i3 = STACKTOP;
   19464  FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
   19465  __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
   19466  STACKTOP = i3;
   19467  return;
   19468 }
   19469 function __ZN23b2EdgeAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
   19470  i1 = i1 | 0;
   19471  i2 = i2 | 0;
   19472  var i3 = 0;
   19473  i3 = STACKTOP;
   19474  FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
   19475  __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
   19476  STACKTOP = i3;
   19477  return;
   19478 }
   19479 function __ZN23b2ChainAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
   19480  i1 = i1 | 0;
   19481  i2 = i2 | 0;
   19482  var i3 = 0;
   19483  i3 = STACKTOP;
   19484  FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
   19485  __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
   19486  STACKTOP = i3;
   19487  return;
   19488 }
   19489 function __ZN22b2EdgeAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
   19490  i1 = i1 | 0;
   19491  i2 = i2 | 0;
   19492  var i3 = 0;
   19493  i3 = STACKTOP;
   19494  FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
   19495  __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
   19496  STACKTOP = i3;
   19497  return;
   19498 }
   19499 function __ZN16b2ContactManagerC2Ev(i1) {
   19500  i1 = i1 | 0;
   19501  var i2 = 0;
   19502  i2 = STACKTOP;
   19503  __ZN12b2BroadPhaseC2Ev(i1);
   19504  HEAP32[i1 + 60 >> 2] = 0;
   19505  HEAP32[i1 + 64 >> 2] = 0;
   19506  HEAP32[i1 + 68 >> 2] = 1888;
   19507  HEAP32[i1 + 72 >> 2] = 1896;
   19508  HEAP32[i1 + 76 >> 2] = 0;
   19509  STACKTOP = i2;
   19510  return;
   19511 }
   19512 function __ZN16b2PolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
   19513  i1 = i1 | 0;
   19514  i2 = i2 | 0;
   19515  var i3 = 0;
   19516  i3 = STACKTOP;
   19517  FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
   19518  __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
   19519  STACKTOP = i3;
   19520  return;
   19521 }
   19522 function __ZN15b2CircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
   19523  i1 = i1 | 0;
   19524  i2 = i2 | 0;
   19525  var i3 = 0;
   19526  i3 = STACKTOP;
   19527  FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
   19528  __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
   19529  STACKTOP = i3;
   19530  return;
   19531 }
   19532 function dynCall_viiiiii(i7, i6, i5, i4, i3, i2, i1) {
   19533  i7 = i7 | 0;
   19534  i6 = i6 | 0;
   19535  i5 = i5 | 0;
   19536  i4 = i4 | 0;
   19537  i3 = i3 | 0;
   19538  i2 = i2 | 0;
   19539  i1 = i1 | 0;
   19540  FUNCTION_TABLE_viiiiii[i7 & 3](i6 | 0, i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0);
   19541 }
   19542 function copyTempFloat(i1) {
   19543  i1 = i1 | 0;
   19544  HEAP8[tempDoublePtr] = HEAP8[i1];
   19545  HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
   19546  HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
   19547  HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
   19548 }
   19549 function dynCall_iiiiii(i6, i5, i4, i3, i2, i1) {
   19550  i6 = i6 | 0;
   19551  i5 = i5 | 0;
   19552  i4 = i4 | 0;
   19553  i3 = i3 | 0;
   19554  i2 = i2 | 0;
   19555  i1 = i1 | 0;
   19556  return FUNCTION_TABLE_iiiiii[i6 & 15](i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0) | 0;
   19557 }
   19558 function dynCall_viiiii(i6, i5, i4, i3, i2, i1) {
   19559  i6 = i6 | 0;
   19560  i5 = i5 | 0;
   19561  i4 = i4 | 0;
   19562  i3 = i3 | 0;
   19563  i2 = i2 | 0;
   19564  i1 = i1 | 0;
   19565  FUNCTION_TABLE_viiiii[i6 & 3](i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0);
   19566 }
   19567 function __ZN16b2ContactManager15FindNewContactsEv(i1) {
   19568  i1 = i1 | 0;
   19569  var i2 = 0;
   19570  i2 = STACKTOP;
   19571  __ZN12b2BroadPhase11UpdatePairsI16b2ContactManagerEEvPT_(i1, i1);
   19572  STACKTOP = i2;
   19573  return;
   19574 }
   19575 function __ZN16b2StackAllocatorC2Ev(i1) {
   19576  i1 = i1 | 0;
   19577  HEAP32[i1 + 102400 >> 2] = 0;
   19578  HEAP32[i1 + 102404 >> 2] = 0;
   19579  HEAP32[i1 + 102408 >> 2] = 0;
   19580  HEAP32[i1 + 102796 >> 2] = 0;
   19581  return;
   19582 }
   19583 function dynCall_viiii(i5, i4, i3, i2, i1) {
   19584  i5 = i5 | 0;
   19585  i4 = i4 | 0;
   19586  i3 = i3 | 0;
   19587  i2 = i2 | 0;
   19588  i1 = i1 | 0;
   19589  FUNCTION_TABLE_viiii[i5 & 15](i4 | 0, i3 | 0, i2 | 0, i1 | 0);
   19590 }
   19591 function dynCall_iiii(i4, i3, i2, i1) {
   19592  i4 = i4 | 0;
   19593  i3 = i3 | 0;
   19594  i2 = i2 | 0;
   19595  i1 = i1 | 0;
   19596  return FUNCTION_TABLE_iiii[i4 & 7](i3 | 0, i2 | 0, i1 | 0) | 0;
   19597 }
   19598 function dynCall_viii(i4, i3, i2, i1) {
   19599  i4 = i4 | 0;
   19600  i3 = i3 | 0;
   19601  i2 = i2 | 0;
   19602  i1 = i1 | 0;
   19603  FUNCTION_TABLE_viii[i4 & 3](i3 | 0, i2 | 0, i1 | 0);
   19604 }
   19605 function __ZNSt9bad_allocD0Ev(i1) {
   19606  i1 = i1 | 0;
   19607  var i2 = 0;
   19608  i2 = STACKTOP;
   19609  __ZNSt9exceptionD2Ev(i1 | 0);
   19610  __ZdlPv(i1);
   19611  STACKTOP = i2;
   19612  return;
   19613 }
   19614 function stackAlloc(i1) {
   19615  i1 = i1 | 0;
   19616  var i2 = 0;
   19617  i2 = STACKTOP;
   19618  STACKTOP = STACKTOP + i1 | 0;
   19619  STACKTOP = STACKTOP + 7 & -8;
   19620  return i2 | 0;
   19621 }
   19622 function __ZN13b2DynamicTreeD2Ev(i1) {
   19623  i1 = i1 | 0;
   19624  var i2 = 0;
   19625  i2 = STACKTOP;
   19626  __Z6b2FreePv(HEAP32[i1 + 4 >> 2] | 0);
   19627  STACKTOP = i2;
   19628  return;
   19629 }
   19630 function dynCall_viid(i4, i3, i2, d1) {
   19631  i4 = i4 | 0;
   19632  i3 = i3 | 0;
   19633  i2 = i2 | 0;
   19634  d1 = +d1;
   19635  FUNCTION_TABLE_viid[i4 & 3](i3 | 0, i2 | 0, +d1);
   19636 }
   19637 function __ZN17b2ContactListener9PostSolveEP9b2ContactPK16b2ContactImpulse(i1, i2, i3) {
   19638  i1 = i1 | 0;
   19639  i2 = i2 | 0;
   19640  i3 = i3 | 0;
   19641  return;
   19642 }
   19643 function __ZN10__cxxabiv120__si_class_type_infoD0Ev(i1) {
   19644  i1 = i1 | 0;
   19645  var i2 = 0;
   19646  i2 = STACKTOP;
   19647  __ZdlPv(i1);
   19648  STACKTOP = i2;
   19649  return;
   19650 }
   19651 function __ZN10__cxxabiv117__class_type_infoD0Ev(i1) {
   19652  i1 = i1 | 0;
   19653  var i2 = 0;
   19654  i2 = STACKTOP;
   19655  __ZdlPv(i1);
   19656  STACKTOP = i2;
   19657  return;
   19658 }
   19659 function __ZNSt9bad_allocD2Ev(i1) {
   19660  i1 = i1 | 0;
   19661  var i2 = 0;
   19662  i2 = STACKTOP;
   19663  __ZNSt9exceptionD2Ev(i1 | 0);
   19664  STACKTOP = i2;
   19665  return;
   19666 }
   19667 function dynCall_iii(i3, i2, i1) {
   19668  i3 = i3 | 0;
   19669  i2 = i2 | 0;
   19670  i1 = i1 | 0;
   19671  return FUNCTION_TABLE_iii[i3 & 3](i2 | 0, i1 | 0) | 0;
   19672 }
   19673 function b8(i1, i2, i3, i4, i5, i6) {
   19674  i1 = i1 | 0;
   19675  i2 = i2 | 0;
   19676  i3 = i3 | 0;
   19677  i4 = i4 | 0;
   19678  i5 = i5 | 0;
   19679  i6 = i6 | 0;
   19680  abort(8);
   19681 }
   19682 function __ZN25b2PolygonAndCircleContactD0Ev(i1) {
   19683  i1 = i1 | 0;
   19684  var i2 = 0;
   19685  i2 = STACKTOP;
   19686  __ZdlPv(i1);
   19687  STACKTOP = i2;
   19688  return;
   19689 }
   19690 function __ZN17b2ContactListener8PreSolveEP9b2ContactPK10b2Manifold(i1, i2, i3) {
   19691  i1 = i1 | 0;
   19692  i2 = i2 | 0;
   19693  i3 = i3 | 0;
   19694  return;
   19695 }
   19696 function __ZN24b2ChainAndPolygonContactD0Ev(i1) {
   19697  i1 = i1 | 0;
   19698  var i2 = 0;
   19699  i2 = STACKTOP;
   19700  __ZdlPv(i1);
   19701  STACKTOP = i2;
   19702  return;
   19703 }
   19704 function __ZN23b2EdgeAndPolygonContactD0Ev(i1) {
   19705  i1 = i1 | 0;
   19706  var i2 = 0;
   19707  i2 = STACKTOP;
   19708  __ZdlPv(i1);
   19709  STACKTOP = i2;
   19710  return;
   19711 }
   19712 function __ZN23b2ChainAndCircleContactD0Ev(i1) {
   19713  i1 = i1 | 0;
   19714  var i2 = 0;
   19715  i2 = STACKTOP;
   19716  __ZdlPv(i1);
   19717  STACKTOP = i2;
   19718  return;
   19719 }
   19720 function __ZNK11b2EdgeShape9TestPointERK11b2TransformRK6b2Vec2(i1, i2, i3) {
   19721  i1 = i1 | 0;
   19722  i2 = i2 | 0;
   19723  i3 = i3 | 0;
   19724  return 0;
   19725 }
   19726 function __ZN22b2EdgeAndCircleContactD0Ev(i1) {
   19727  i1 = i1 | 0;
   19728  var i2 = 0;
   19729  i2 = STACKTOP;
   19730  __ZdlPv(i1);
   19731  STACKTOP = i2;
   19732  return;
   19733 }
   19734 function __ZdlPv(i1) {
   19735  i1 = i1 | 0;
   19736  var i2 = 0;
   19737  i2 = STACKTOP;
   19738  if ((i1 | 0) != 0) {
   19739   _free(i1);
   19740  }
   19741  STACKTOP = i2;
   19742  return;
   19743 }
   19744 function b10(i1, i2, i3, i4, i5) {
   19745  i1 = i1 | 0;
   19746  i2 = i2 | 0;
   19747  i3 = i3 | 0;
   19748  i4 = i4 | 0;
   19749  i5 = i5 | 0;
   19750  abort(10);
   19751  return 0;
   19752 }
   19753 function _strlen(i1) {
   19754  i1 = i1 | 0;
   19755  var i2 = 0;
   19756  i2 = i1;
   19757  while (HEAP8[i2] | 0) {
   19758   i2 = i2 + 1 | 0;
   19759  }
   19760  return i2 - i1 | 0;
   19761 }
   19762 function __Z7b2Alloci(i1) {
   19763  i1 = i1 | 0;
   19764  var i2 = 0;
   19765  i2 = STACKTOP;
   19766  i1 = _malloc(i1) | 0;
   19767  STACKTOP = i2;
   19768  return i1 | 0;
   19769 }
   19770 function setThrew(i1, i2) {
   19771  i1 = i1 | 0;
   19772  i2 = i2 | 0;
   19773  if ((__THREW__ | 0) == 0) {
   19774   __THREW__ = i1;
   19775   threwValue = i2;
   19776  }
   19777 }
   19778 function __ZN17b2ContactListenerD0Ev(i1) {
   19779  i1 = i1 | 0;
   19780  var i2 = 0;
   19781  i2 = STACKTOP;
   19782  __ZdlPv(i1);
   19783  STACKTOP = i2;
   19784  return;
   19785 }
   19786 function __ZN16b2PolygonContactD0Ev(i1) {
   19787  i1 = i1 | 0;
   19788  var i2 = 0;
   19789  i2 = STACKTOP;
   19790  __ZdlPv(i1);
   19791  STACKTOP = i2;
   19792  return;
   19793 }
   19794 function dynCall_vii(i3, i2, i1) {
   19795  i3 = i3 | 0;
   19796  i2 = i2 | 0;
   19797  i1 = i1 | 0;
   19798  FUNCTION_TABLE_vii[i3 & 15](i2 | 0, i1 | 0);
   19799 }
   19800 function __ZN15b2ContactFilterD0Ev(i1) {
   19801  i1 = i1 | 0;
   19802  var i2 = 0;
   19803  i2 = STACKTOP;
   19804  __ZdlPv(i1);
   19805  STACKTOP = i2;
   19806  return;
   19807 }
   19808 function __ZN15b2CircleContactD0Ev(i1) {
   19809  i1 = i1 | 0;
   19810  var i2 = 0;
   19811  i2 = STACKTOP;
   19812  __ZdlPv(i1);
   19813  STACKTOP = i2;
   19814  return;
   19815 }
   19816 function __ZN14b2PolygonShapeD0Ev(i1) {
   19817  i1 = i1 | 0;
   19818  var i2 = 0;
   19819  i2 = STACKTOP;
   19820  __ZdlPv(i1);
   19821  STACKTOP = i2;
   19822  return;
   19823 }
   19824 function __Znaj(i1) {
   19825  i1 = i1 | 0;
   19826  var i2 = 0;
   19827  i2 = STACKTOP;
   19828  i1 = __Znwj(i1) | 0;
   19829  STACKTOP = i2;
   19830  return i1 | 0;
   19831 }
   19832 function __ZN11b2EdgeShapeD0Ev(i1) {
   19833  i1 = i1 | 0;
   19834  var i2 = 0;
   19835  i2 = STACKTOP;
   19836  __ZdlPv(i1);
   19837  STACKTOP = i2;
   19838  return;
   19839 }
   19840 function __ZN9b2ContactD0Ev(i1) {
   19841  i1 = i1 | 0;
   19842  var i2 = 0;
   19843  i2 = STACKTOP;
   19844  __ZdlPv(i1);
   19845  STACKTOP = i2;
   19846  return;
   19847 }
   19848 function b1(i1, i2, i3, i4, i5) {
   19849  i1 = i1 | 0;
   19850  i2 = i2 | 0;
   19851  i3 = i3 | 0;
   19852  i4 = i4 | 0;
   19853  i5 = i5 | 0;
   19854  abort(1);
   19855 }
   19856 function __Z6b2FreePv(i1) {
   19857  i1 = i1 | 0;
   19858  var i2 = 0;
   19859  i2 = STACKTOP;
   19860  _free(i1);
   19861  STACKTOP = i2;
   19862  return;
   19863 }
   19864 function ___clang_call_terminate(i1) {
   19865  i1 = i1 | 0;
   19866  ___cxa_begin_catch(i1 | 0) | 0;
   19867  __ZSt9terminatev();
   19868 }
   19869 function __ZN17b2ContactListener12BeginContactEP9b2Contact(i1, i2) {
   19870  i1 = i1 | 0;
   19871  i2 = i2 | 0;
   19872  return;
   19873 }
   19874 function dynCall_ii(i2, i1) {
   19875  i2 = i2 | 0;
   19876  i1 = i1 | 0;
   19877  return FUNCTION_TABLE_ii[i2 & 3](i1 | 0) | 0;
   19878 }
   19879 function __ZN17b2ContactListener10EndContactEP9b2Contact(i1, i2) {
   19880  i1 = i1 | 0;
   19881  i2 = i2 | 0;
   19882  return;
   19883 }
   19884 function b11(i1, i2, i3, i4) {
   19885  i1 = i1 | 0;
   19886  i2 = i2 | 0;
   19887  i3 = i3 | 0;
   19888  i4 = i4 | 0;
   19889  abort(11);
   19890 }
   19891 function dynCall_vi(i2, i1) {
   19892  i2 = i2 | 0;
   19893  i1 = i1 | 0;
   19894  FUNCTION_TABLE_vi[i2 & 31](i1 | 0);
   19895 }
   19896 function b0(i1, i2, i3) {
   19897  i1 = i1 | 0;
   19898  i2 = i2 | 0;
   19899  i3 = i3 | 0;
   19900  abort(0);
   19901  return 0;
   19902 }
   19903 function __ZNK10__cxxabiv116__shim_type_info5noop2Ev(i1) {
   19904  i1 = i1 | 0;
   19905  return;
   19906 }
   19907 function __ZNK10__cxxabiv116__shim_type_info5noop1Ev(i1) {
   19908  i1 = i1 | 0;
   19909  return;
   19910 }
   19911 function b5(i1, i2, i3) {
   19912  i1 = i1 | 0;
   19913  i2 = i2 | 0;
   19914  i3 = i3 | 0;
   19915  abort(5);
   19916 }
   19917 function __ZNK14b2PolygonShape13GetChildCountEv(i1) {
   19918  i1 = i1 | 0;
   19919  return 1;
   19920 }
   19921 function __ZN10__cxxabiv116__shim_type_infoD2Ev(i1) {
   19922  i1 = i1 | 0;
   19923  return;
   19924 }
   19925 function b7(i1, i2, d3) {
   19926  i1 = i1 | 0;
   19927  i2 = i2 | 0;
   19928  d3 = +d3;
   19929  abort(7);
   19930 }
   19931 function __ZNK11b2EdgeShape13GetChildCountEv(i1) {
   19932  i1 = i1 | 0;
   19933  return 1;
   19934 }
   19935 function __ZNK7b2Timer15GetMillisecondsEv(i1) {
   19936  i1 = i1 | 0;
   19937  return 0.0;
   19938 }
   19939 function __ZN25b2PolygonAndCircleContactD1Ev(i1) {
   19940  i1 = i1 | 0;
   19941  return;
   19942 }
   19943 function __ZN24b2ChainAndPolygonContactD1Ev(i1) {
   19944  i1 = i1 | 0;
   19945  return;
   19946 }
   19947 function b9(i1, i2) {
   19948  i1 = i1 | 0;
   19949  i2 = i2 | 0;
   19950  abort(9);
   19951  return 0;
   19952 }
   19953 function __ZN23b2EdgeAndPolygonContactD1Ev(i1) {
   19954  i1 = i1 | 0;
   19955  return;
   19956 }
   19957 function __ZN23b2ChainAndCircleContactD1Ev(i1) {
   19958  i1 = i1 | 0;
   19959  return;
   19960 }
   19961 function __ZN22b2EdgeAndCircleContactD1Ev(i1) {
   19962  i1 = i1 | 0;
   19963  return;
   19964 }
   19965 function dynCall_v(i1) {
   19966  i1 = i1 | 0;
   19967  FUNCTION_TABLE_v[i1 & 3]();
   19968 }
   19969 function __ZNKSt9bad_alloc4whatEv(i1) {
   19970  i1 = i1 | 0;
   19971  return 7688;
   19972 }
   19973 function ___cxa_pure_virtual__wrapper() {
   19974  ___cxa_pure_virtual();
   19975 }
   19976 function __ZN17b2ContactListenerD1Ev(i1) {
   19977  i1 = i1 | 0;
   19978  return;
   19979 }
   19980 function __ZN16b2PolygonContactD1Ev(i1) {
   19981  i1 = i1 | 0;
   19982  return;
   19983 }
   19984 function __ZN15b2ContactFilterD1Ev(i1) {
   19985  i1 = i1 | 0;
   19986  return;
   19987 }
   19988 function __ZN15b2CircleContactD1Ev(i1) {
   19989  i1 = i1 | 0;
   19990  return;
   19991 }
   19992 function __ZN14b2PolygonShapeD1Ev(i1) {
   19993  i1 = i1 | 0;
   19994  return;
   19995 }
   19996 function b3(i1, i2) {
   19997  i1 = i1 | 0;
   19998  i2 = i2 | 0;
   19999  abort(3);
   20000 }
   20001 function runPostSets() {
   20002  HEAP32[1932] = __ZTISt9exception;
   20003 }
   20004 function __ZN11b2EdgeShapeD1Ev(i1) {
   20005  i1 = i1 | 0;
   20006  return;
   20007 }
   20008 function __ZNSt9type_infoD2Ev(i1) {
   20009  i1 = i1 | 0;
   20010  return;
   20011 }
   20012 function __ZN7b2Timer5ResetEv(i1) {
   20013  i1 = i1 | 0;
   20014  return;
   20015 }
   20016 function stackRestore(i1) {
   20017  i1 = i1 | 0;
   20018  STACKTOP = i1;
   20019 }
   20020 function setTempRet9(i1) {
   20021  i1 = i1 | 0;
   20022  tempRet9 = i1;
   20023 }
   20024 function setTempRet8(i1) {
   20025  i1 = i1 | 0;
   20026  tempRet8 = i1;
   20027 }
   20028 function setTempRet7(i1) {
   20029  i1 = i1 | 0;
   20030  tempRet7 = i1;
   20031 }
   20032 function setTempRet6(i1) {
   20033  i1 = i1 | 0;
   20034  tempRet6 = i1;
   20035 }
   20036 function setTempRet5(i1) {
   20037  i1 = i1 | 0;
   20038  tempRet5 = i1;
   20039 }
   20040 function setTempRet4(i1) {
   20041  i1 = i1 | 0;
   20042  tempRet4 = i1;
   20043 }
   20044 function setTempRet3(i1) {
   20045  i1 = i1 | 0;
   20046  tempRet3 = i1;
   20047 }
   20048 function setTempRet2(i1) {
   20049  i1 = i1 | 0;
   20050  tempRet2 = i1;
   20051 }
   20052 function setTempRet1(i1) {
   20053  i1 = i1 | 0;
   20054  tempRet1 = i1;
   20055 }
   20056 function setTempRet0(i1) {
   20057  i1 = i1 | 0;
   20058  tempRet0 = i1;
   20059 }
   20060 function __ZN9b2ContactD1Ev(i1) {
   20061  i1 = i1 | 0;
   20062  return;
   20063 }
   20064 function __ZN7b2TimerC2Ev(i1) {
   20065  i1 = i1 | 0;
   20066  return;
   20067 }
   20068 function b4(i1) {
   20069  i1 = i1 | 0;
   20070  abort(4);
   20071  return 0;
   20072 }
   20073 function stackSave() {
   20074  return STACKTOP | 0;
   20075 }
   20076 function b2(i1) {
   20077  i1 = i1 | 0;
   20078  abort(2);
   20079 }
   20080 function b6() {
   20081  abort(6);
   20082 }
   20083 
   20084 // EMSCRIPTEN_END_FUNCS
   20085   var FUNCTION_TABLE_iiii = [b0,__ZNK11b2EdgeShape9TestPointERK11b2TransformRK6b2Vec2,__ZNK14b2PolygonShape9TestPointERK11b2TransformRK6b2Vec2,__ZN15b2ContactFilter13ShouldCollideEP9b2FixtureS1_,__ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv,b0,b0,b0];
   20086   var FUNCTION_TABLE_viiiii = [b1,__ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,__ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b1];
   20087   var FUNCTION_TABLE_vi = [b2,__ZN11b2EdgeShapeD1Ev,__ZN11b2EdgeShapeD0Ev,__ZN14b2PolygonShapeD1Ev,__ZN14b2PolygonShapeD0Ev,__ZN17b2ContactListenerD1Ev,__ZN17b2ContactListenerD0Ev,__ZN15b2ContactFilterD1Ev,__ZN15b2ContactFilterD0Ev,__ZN9b2ContactD1Ev,__ZN9b2ContactD0Ev,__ZN22b2EdgeAndCircleContactD1Ev,__ZN22b2EdgeAndCircleContactD0Ev,__ZN23b2EdgeAndPolygonContactD1Ev,__ZN23b2EdgeAndPolygonContactD0Ev,__ZN25b2PolygonAndCircleContactD1Ev,__ZN25b2PolygonAndCircleContactD0Ev,__ZN16b2PolygonContactD1Ev,__ZN16b2PolygonContactD0Ev,__ZN23b2ChainAndCircleContactD1Ev,__ZN23b2ChainAndCircleContactD0Ev,__ZN24b2ChainAndPolygonContactD1Ev,__ZN24b2ChainAndPolygonContactD0Ev,__ZN15b2CircleContactD1Ev,__ZN15b2CircleContactD0Ev,__ZN10__cxxabiv116__shim_type_infoD2Ev,__ZN10__cxxabiv117__class_type_infoD0Ev,__ZNK10__cxxabiv116__shim_type_info5noop1Ev,__ZNK10__cxxabiv116__shim_type_info5noop2Ev
   20088   ,__ZN10__cxxabiv120__si_class_type_infoD0Ev,__ZNSt9bad_allocD2Ev,__ZNSt9bad_allocD0Ev];
   20089   var FUNCTION_TABLE_vii = [b3,__ZN17b2ContactListener12BeginContactEP9b2Contact,__ZN17b2ContactListener10EndContactEP9b2Contact,__ZN15b2CircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN25b2PolygonAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN16b2PolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN22b2EdgeAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN23b2EdgeAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN23b2ChainAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN24b2ChainAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,b3,b3,b3,b3,b3,b3];
   20090   var FUNCTION_TABLE_ii = [b4,__ZNK11b2EdgeShape13GetChildCountEv,__ZNK14b2PolygonShape13GetChildCountEv,__ZNKSt9bad_alloc4whatEv];
   20091   var FUNCTION_TABLE_viii = [b5,__ZN17b2ContactListener8PreSolveEP9b2ContactPK10b2Manifold,__ZN17b2ContactListener9PostSolveEP9b2ContactPK16b2ContactImpulse,b5];
   20092   var FUNCTION_TABLE_v = [b6,___cxa_pure_virtual__wrapper,__Z4iterv,b6];
   20093   var FUNCTION_TABLE_viid = [b7,__ZNK11b2EdgeShape11ComputeMassEP10b2MassDataf,__ZNK14b2PolygonShape11ComputeMassEP10b2MassDataf,b7];
   20094   var FUNCTION_TABLE_viiiiii = [b8,__ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,__ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b8];
   20095   var FUNCTION_TABLE_iii = [b9,__ZNK11b2EdgeShape5CloneEP16b2BlockAllocator,__ZNK14b2PolygonShape5CloneEP16b2BlockAllocator,__Z14b2PairLessThanRK6b2PairS1_];
   20096   var FUNCTION_TABLE_iiiiii = [b10,__ZNK11b2EdgeShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi,__ZNK14b2PolygonShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi,__ZN15b2CircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN25b2PolygonAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN16b2PolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN22b2EdgeAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN23b2EdgeAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN23b2ChainAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN24b2ChainAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,b10,b10,b10,b10,b10,b10];
   20097   var FUNCTION_TABLE_viiii = [b11,__ZNK11b2EdgeShape11ComputeAABBEP6b2AABBRK11b2Transformi,__ZNK14b2PolygonShape11ComputeAABBEP6b2AABBRK11b2Transformi,__ZN22b2EdgeAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN23b2EdgeAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN25b2PolygonAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN16b2PolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN23b2ChainAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN24b2ChainAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN15b2CircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,__ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b11,b11,b11,b11];
   20098 
   20099   return { _strlen: _strlen, _free: _free, _main: _main, _memset: _memset, _malloc: _malloc, _memcpy: _memcpy, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, setThrew: setThrew, setTempRet0: setTempRet0, setTempRet1: setTempRet1, setTempRet2: setTempRet2, setTempRet3: setTempRet3, setTempRet4: setTempRet4, setTempRet5: setTempRet5, setTempRet6: setTempRet6, setTempRet7: setTempRet7, setTempRet8: setTempRet8, setTempRet9: setTempRet9, dynCall_iiii: dynCall_iiii, dynCall_viiiii: dynCall_viiiii, dynCall_vi: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_ii: dynCall_ii, dynCall_viii: dynCall_viii, dynCall_v: dynCall_v, dynCall_viid: dynCall_viid, dynCall_viiiiii: dynCall_viiiiii, dynCall_iii: dynCall_iii, dynCall_iiiiii: dynCall_iiiiii, dynCall_viiii: dynCall_viiii };
   20100 })
   20101 // EMSCRIPTEN_END_ASM
   20102 ({ "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array }, { "abort": abort, "assert": assert, "asmPrintInt": asmPrintInt, "asmPrintFloat": asmPrintFloat, "min": Math_min, "invoke_iiii": invoke_iiii, "invoke_viiiii": invoke_viiiii, "invoke_vi": invoke_vi, "invoke_vii": invoke_vii, "invoke_ii": invoke_ii, "invoke_viii": invoke_viii, "invoke_v": invoke_v, "invoke_viid": invoke_viid, "invoke_viiiiii": invoke_viiiiii, "invoke_iii": invoke_iii, "invoke_iiiiii": invoke_iiiiii, "invoke_viiii": invoke_viiii, "___cxa_throw": ___cxa_throw, "_emscripten_run_script": _emscripten_run_script, "_cosf": _cosf, "_send": _send, "__ZSt9terminatev": __ZSt9terminatev, "__reallyNegative": __reallyNegative, "___cxa_is_number_type": ___cxa_is_number_type, "___assert_fail": ___assert_fail, "___cxa_allocate_exception": ___cxa_allocate_exception, "___cxa_find_matching_catch": ___cxa_find_matching_catch, "_fflush": _fflush, "_pwrite": _pwrite, "___setErrNo": ___setErrNo, "_sbrk": _sbrk, "___cxa_begin_catch": ___cxa_begin_catch, "_sinf": _sinf, "_fileno": _fileno, "___resumeException": ___resumeException, "__ZSt18uncaught_exceptionv": __ZSt18uncaught_exceptionv, "_sysconf": _sysconf, "_clock": _clock, "_emscripten_memcpy_big": _emscripten_memcpy_big, "_puts": _puts, "_mkport": _mkport, "_floorf": _floorf, "_sqrtf": _sqrtf, "_write": _write, "_emscripten_set_main_loop": _emscripten_set_main_loop, "___errno_location": ___errno_location, "__ZNSt9exceptionD2Ev": __ZNSt9exceptionD2Ev, "_printf": _printf, "___cxa_does_inherit": ___cxa_does_inherit, "__exit": __exit, "_fputc": _fputc, "_abort": _abort, "_fwrite": _fwrite, "_time": _time, "_fprintf": _fprintf, "_emscripten_cancel_main_loop": _emscripten_cancel_main_loop, "__formatString": __formatString, "_fputs": _fputs, "_exit": _exit, "___cxa_pure_virtual": ___cxa_pure_virtual, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "NaN": NaN, "Infinity": Infinity, "__ZTISt9exception": __ZTISt9exception }, buffer);
   20103 var _strlen = Module["_strlen"] = asm["_strlen"];
   20104 var _free = Module["_free"] = asm["_free"];
   20105 var _main = Module["_main"] = asm["_main"];
   20106 var _memset = Module["_memset"] = asm["_memset"];
   20107 var _malloc = Module["_malloc"] = asm["_malloc"];
   20108 var _memcpy = Module["_memcpy"] = asm["_memcpy"];
   20109 var runPostSets = Module["runPostSets"] = asm["runPostSets"];
   20110 var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"];
   20111 var dynCall_viiiii = Module["dynCall_viiiii"] = asm["dynCall_viiiii"];
   20112 var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"];
   20113 var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
   20114 var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"];
   20115 var dynCall_viii = Module["dynCall_viii"] = asm["dynCall_viii"];
   20116 var dynCall_v = Module["dynCall_v"] = asm["dynCall_v"];
   20117 var dynCall_viid = Module["dynCall_viid"] = asm["dynCall_viid"];
   20118 var dynCall_viiiiii = Module["dynCall_viiiiii"] = asm["dynCall_viiiiii"];
   20119 var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"];
   20120 var dynCall_iiiiii = Module["dynCall_iiiiii"] = asm["dynCall_iiiiii"];
   20121 var dynCall_viiii = Module["dynCall_viiii"] = asm["dynCall_viiii"];
   20122 
   20123 Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) };
   20124 Runtime.stackSave = function() { return asm['stackSave']() };
   20125 Runtime.stackRestore = function(top) { asm['stackRestore'](top) };
   20126 
   20127 
   20128 // Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included
   20129 var i64Math = null;
   20130 
   20131 // === Auto-generated postamble setup entry stuff ===
   20132 
   20133 if (memoryInitializer) {
   20134   if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
   20135     var data = Module['readBinary'](memoryInitializer);
   20136     HEAPU8.set(data, STATIC_BASE);
   20137   } else {
   20138     addRunDependency('memory initializer');
   20139     Browser.asyncLoad(memoryInitializer, function(data) {
   20140       HEAPU8.set(data, STATIC_BASE);
   20141       removeRunDependency('memory initializer');
   20142     }, function(data) {
   20143       throw 'could not load memory initializer ' + memoryInitializer;
   20144     });
   20145   }
   20146 }
   20147 
   20148 function ExitStatus(status) {
   20149   this.name = "ExitStatus";
   20150   this.message = "Program terminated with exit(" + status + ")";
   20151   this.status = status;
   20152 };
   20153 ExitStatus.prototype = new Error();
   20154 ExitStatus.prototype.constructor = ExitStatus;
   20155 
   20156 var initialStackTop;
   20157 var preloadStartTime = null;
   20158 var calledMain = false;
   20159 
   20160 dependenciesFulfilled = function runCaller() {
   20161   // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
   20162   if (!Module['calledRun'] && shouldRunNow) run([].concat(Module["arguments"]));
   20163   if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
   20164 }
   20165 
   20166 Module['callMain'] = Module.callMain = function callMain(args) {
   20167   assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
   20168   assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called');
   20169 
   20170   args = args || [];
   20171 
   20172   ensureInitRuntime();
   20173 
   20174   var argc = args.length+1;
   20175   function pad() {
   20176     for (var i = 0; i < 4-1; i++) {
   20177       argv.push(0);
   20178     }
   20179   }
   20180   var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL) ];
   20181   pad();
   20182   for (var i = 0; i < argc-1; i = i + 1) {
   20183     argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
   20184     pad();
   20185   }
   20186   argv.push(0);
   20187   argv = allocate(argv, 'i32', ALLOC_NORMAL);
   20188 
   20189   initialStackTop = STACKTOP;
   20190 
   20191   try {
   20192 
   20193     var ret = Module['_main'](argc, argv, 0);
   20194 
   20195 
   20196     // if we're not running an evented main loop, it's time to exit
   20197     if (!Module['noExitRuntime']) {
   20198       exit(ret);
   20199     }
   20200   }
   20201   catch(e) {
   20202     if (e instanceof ExitStatus) {
   20203       // exit() throws this once it's done to make sure execution
   20204       // has been stopped completely
   20205       return;
   20206     } else if (e == 'SimulateInfiniteLoop') {
   20207       // running an evented main loop, don't immediately exit
   20208       Module['noExitRuntime'] = true;
   20209       return;
   20210     } else {
   20211       if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]);
   20212       throw e;
   20213     }
   20214   } finally {
   20215     calledMain = true;
   20216   }
   20217 }
   20218 
   20219 
   20220 
   20221 
   20222 function run(args) {
   20223   args = args || Module['arguments'];
   20224 
   20225   if (preloadStartTime === null) preloadStartTime = Date.now();
   20226 
   20227   if (runDependencies > 0) {
   20228     Module.printErr('run() called, but dependencies remain, so not running');
   20229     return;
   20230   }
   20231 
   20232   preRun();
   20233 
   20234   if (runDependencies > 0) return; // a preRun added a dependency, run will be called later
   20235   if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame
   20236 
   20237   function doRun() {
   20238     if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening
   20239     Module['calledRun'] = true;
   20240 
   20241     ensureInitRuntime();
   20242 
   20243     preMain();
   20244 
   20245     if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
   20246       Module.printErr('pre-main prep time: ' + (Date.now() - preloadStartTime) + ' ms');
   20247     }
   20248 
   20249     if (Module['_main'] && shouldRunNow) {
   20250       Module['callMain'](args);
   20251     }
   20252 
   20253     postRun();
   20254   }
   20255 
   20256   if (Module['setStatus']) {
   20257     Module['setStatus']('Running...');
   20258     setTimeout(function() {
   20259       setTimeout(function() {
   20260         Module['setStatus']('');
   20261       }, 1);
   20262       if (!ABORT) doRun();
   20263     }, 1);
   20264   } else {
   20265     doRun();
   20266   }
   20267 }
   20268 Module['run'] = Module.run = run;
   20269 
   20270 function exit(status) {
   20271   ABORT = true;
   20272   EXITSTATUS = status;
   20273   STACKTOP = initialStackTop;
   20274 
   20275   // exit the runtime
   20276   exitRuntime();
   20277 
   20278   // TODO We should handle this differently based on environment.
   20279   // In the browser, the best we can do is throw an exception
   20280   // to halt execution, but in node we could process.exit and
   20281   // I'd imagine SM shell would have something equivalent.
   20282   // This would let us set a proper exit status (which
   20283   // would be great for checking test exit statuses).
   20284   // https://github.com/kripken/emscripten/issues/1371
   20285 
   20286   // throw an exception to halt the current execution
   20287   throw new ExitStatus(status);
   20288 }
   20289 Module['exit'] = Module.exit = exit;
   20290 
   20291 function abort(text) {
   20292   if (text) {
   20293     Module.print(text);
   20294     Module.printErr(text);
   20295   }
   20296 
   20297   ABORT = true;
   20298   EXITSTATUS = 1;
   20299 
   20300   var extra = '\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.';
   20301 
   20302   throw 'abort() at ' + stackTrace() + extra;
   20303 }
   20304 Module['abort'] = Module.abort = abort;
   20305 
   20306 // {{PRE_RUN_ADDITIONS}}
   20307 
   20308 if (Module['preInit']) {
   20309   if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
   20310   while (Module['preInit'].length > 0) {
   20311     Module['preInit'].pop()();
   20312   }
   20313 }
   20314 
   20315 // shouldRunNow refers to calling main(), not run().
   20316 var shouldRunNow = true;
   20317 if (Module['noInitialRun']) {
   20318   shouldRunNow = false;
   20319 }
   20320 
   20321 
   20322 run([].concat(Module["arguments"]));
   20323