Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1118)

Side by Side Diff: test/mjsunit/asm/embenchen/box2d.js

Issue 704653004: Add test cases based on the programs from the Embenchen benchmark suite. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Mark certain tests as slow. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | test/mjsunit/asm/embenchen/copy.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 var EXPECTED_OUTPUT =
6 /frame averages: .+ \+- .+, range: .+ to .+ \n/;
7 var Module = {
8 arguments: [1],
9 print: function(x) {Module.printBuffer += x + '\n';},
10 preRun: [function() {Module.printBuffer = ''}],
11 postRun: [function() {
12 assertTrue(EXPECTED_OUTPUT.test(Module.printBuffer));
13 }],
14 };
15 // The Module object: Our interface to the outside world. We import
16 // and export values on it, and do the work to get that through
17 // closure compiler if necessary. There are various ways Module can be used:
18 // 1. Not defined. We create it here
19 // 2. A function parameter, function(Module) { ..generated code.. }
20 // 3. pre-run appended it, var Module = {}; ..generated code..
21 // 4. External script tag defines var Module.
22 // We need to do an eval in order to handle the closure compiler
23 // case, where this code here is minified but Module was defined
24 // elsewhere (e.g. case 4 above). We also need to check if Module
25 // already exists (e.g. case 3 above).
26 // Note that if you want to run closure, and also to use Module
27 // after the generated code, you will need to define var Module = {};
28 // before the code. Then that object will be used in the code, and you
29 // can continue to use Module afterwards as well.
30 var Module;
31 if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
32
33 // Sometimes an existing Module object exists with properties
34 // meant to overwrite the default module functionality. Here
35 // we collect those properties and reapply _after_ we configure
36 // the current environment's defaults to avoid having to be so
37 // defensive during initialization.
38 var moduleOverrides = {};
39 for (var key in Module) {
40 if (Module.hasOwnProperty(key)) {
41 moduleOverrides[key] = Module[key];
42 }
43 }
44
45 // The environment setup code below is customized to use Module.
46 // *** Environment setup code ***
47 var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'fun ction';
48 var ENVIRONMENT_IS_WEB = typeof window === 'object';
49 var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
50 var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR ONMENT_IS_WORKER;
51
52 if (ENVIRONMENT_IS_NODE) {
53 // Expose functionality in the same simple way that the shells work
54 // Note that we pollute the global namespace here, otherwise we break in node
55 if (!Module['print']) Module['print'] = function print(x) {
56 process['stdout'].write(x + '\n');
57 };
58 if (!Module['printErr']) Module['printErr'] = function printErr(x) {
59 process['stderr'].write(x + '\n');
60 };
61
62 var nodeFS = require('fs');
63 var nodePath = require('path');
64
65 Module['read'] = function read(filename, binary) {
66 filename = nodePath['normalize'](filename);
67 var ret = nodeFS['readFileSync'](filename);
68 // The path is absolute if the normalized version is the same as the resolve d.
69 if (!ret && filename != nodePath['resolve'](filename)) {
70 filename = path.join(__dirname, '..', 'src', filename);
71 ret = nodeFS['readFileSync'](filename);
72 }
73 if (ret && !binary) ret = ret.toString();
74 return ret;
75 };
76
77 Module['readBinary'] = function readBinary(filename) { return Module['read'](f ilename, true) };
78
79 Module['load'] = function load(f) {
80 globalEval(read(f));
81 };
82
83 Module['arguments'] = process['argv'].slice(2);
84
85 module['exports'] = Module;
86 }
87 else if (ENVIRONMENT_IS_SHELL) {
88 if (!Module['print']) Module['print'] = print;
89 if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not pres ent in v8 or older sm
90
91 if (typeof read != 'undefined') {
92 Module['read'] = read;
93 } else {
94 Module['read'] = function read() { throw 'no read() available (jsc?)' };
95 }
96
97 Module['readBinary'] = function readBinary(f) {
98 return read(f, 'binary');
99 };
100
101 if (typeof scriptArgs != 'undefined') {
102 Module['arguments'] = scriptArgs;
103 } else if (typeof arguments != 'undefined') {
104 Module['arguments'] = arguments;
105 }
106
107 this['Module'] = Module;
108
109 eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined"); // wipe out the SpiderMonkey shell 'gc' function, whic h can confuse closure (uses it as a minified name, and it is then initted to a n on-falsey value unexpectedly)
110 }
111 else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
112 Module['read'] = function read(url) {
113 var xhr = new XMLHttpRequest();
114 xhr.open('GET', url, false);
115 xhr.send(null);
116 return xhr.responseText;
117 };
118
119 if (typeof arguments != 'undefined') {
120 Module['arguments'] = arguments;
121 }
122
123 if (typeof console !== 'undefined') {
124 if (!Module['print']) Module['print'] = function print(x) {
125 console.log(x);
126 };
127 if (!Module['printErr']) Module['printErr'] = function printErr(x) {
128 console.log(x);
129 };
130 } else {
131 // Probably a worker, and without console.log. We can do very little here...
132 var TRY_USE_DUMP = false;
133 if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== " undefined") ? (function(x) {
134 dump(x);
135 }) : (function(x) {
136 // self.postMessage(x); // enable this if you want stdout to be sent as me ssages
137 }));
138 }
139
140 if (ENVIRONMENT_IS_WEB) {
141 window['Module'] = Module;
142 } else {
143 Module['load'] = importScripts;
144 }
145 }
146 else {
147 // Unreachable because SHELL is dependant on the others
148 throw 'Unknown runtime environment. Where are we?';
149 }
150
151 function globalEval(x) {
152 eval.call(null, x);
153 }
154 if (!Module['load'] == 'undefined' && Module['read']) {
155 Module['load'] = function load(f) {
156 globalEval(Module['read'](f));
157 };
158 }
159 if (!Module['print']) {
160 Module['print'] = function(){};
161 }
162 if (!Module['printErr']) {
163 Module['printErr'] = Module['print'];
164 }
165 if (!Module['arguments']) {
166 Module['arguments'] = [];
167 }
168 // *** Environment setup code ***
169
170 // Closure helpers
171 Module.print = Module['print'];
172 Module.printErr = Module['printErr'];
173
174 // Callbacks
175 Module['preRun'] = [];
176 Module['postRun'] = [];
177
178 // Merge back in the overrides
179 for (var key in moduleOverrides) {
180 if (moduleOverrides.hasOwnProperty(key)) {
181 Module[key] = moduleOverrides[key];
182 }
183 }
184
185
186
187 // === Auto-generated preamble library stuff ===
188
189 //========================================
190 // Runtime code shared with compiler
191 //========================================
192
193 var Runtime = {
194 stackSave: function () {
195 return STACKTOP;
196 },
197 stackRestore: function (stackTop) {
198 STACKTOP = stackTop;
199 },
200 forceAlign: function (target, quantum) {
201 quantum = quantum || 4;
202 if (quantum == 1) return target;
203 if (isNumber(target) && isNumber(quantum)) {
204 return Math.ceil(target/quantum)*quantum;
205 } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
206 return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')';
207 }
208 return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
209 },
210 isNumberType: function (type) {
211 return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
212 },
213 isPointerType: function isPointerType(type) {
214 return type[type.length-1] == '*';
215 },
216 isStructType: function isStructType(type) {
217 if (isPointerType(type)) return false;
218 if (isArrayType(type)) return true;
219 if (/<?\{ ?[^}]* ?\}>?/.test(type)) return true; // { i32, i8 } etc. - anonymo us struct types
220 // See comment in isStructPointerType()
221 return type[0] == '%';
222 },
223 INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
224 FLOAT_TYPES: {"float":0,"double":0},
225 or64: function (x, y) {
226 var l = (x | 0) | (y | 0);
227 var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 42949672 96;
228 return l + h;
229 },
230 and64: function (x, y) {
231 var l = (x | 0) & (y | 0);
232 var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 42949672 96;
233 return l + h;
234 },
235 xor64: function (x, y) {
236 var l = (x | 0) ^ (y | 0);
237 var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 42949672 96;
238 return l + h;
239 },
240 getNativeTypeSize: function (type) {
241 switch (type) {
242 case 'i1': case 'i8': return 1;
243 case 'i16': return 2;
244 case 'i32': return 4;
245 case 'i64': return 8;
246 case 'float': return 4;
247 case 'double': return 8;
248 default: {
249 if (type[type.length-1] === '*') {
250 return Runtime.QUANTUM_SIZE; // A pointer
251 } else if (type[0] === 'i') {
252 var bits = parseInt(type.substr(1));
253 assert(bits % 8 === 0);
254 return bits/8;
255 } else {
256 return 0;
257 }
258 }
259 }
260 },
261 getNativeFieldSize: function (type) {
262 return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
263 },
264 dedup: function dedup(items, ident) {
265 var seen = {};
266 if (ident) {
267 return items.filter(function(item) {
268 if (seen[item[ident]]) return false;
269 seen[item[ident]] = true;
270 return true;
271 });
272 } else {
273 return items.filter(function(item) {
274 if (seen[item]) return false;
275 seen[item] = true;
276 return true;
277 });
278 }
279 },
280 set: function set() {
281 var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
282 var ret = {};
283 for (var i = 0; i < args.length; i++) {
284 ret[args[i]] = 0;
285 }
286 return ret;
287 },
288 STACK_ALIGN: 8,
289 getAlignSize: function (type, size, vararg) {
290 // we align i64s and doubles on 64-bit boundaries, unlike x86
291 if (!vararg && (type == 'i64' || type == 'double')) return 8;
292 if (!type) return Math.min(size, 8); // align structures internally to 64 bi ts
293 return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runti me.QUANTUM_SIZE);
294 },
295 calculateStructAlignment: function calculateStructAlignment(type) {
296 type.flatSize = 0;
297 type.alignSize = 0;
298 var diffs = [];
299 var prev = -1;
300 var index = 0;
301 type.flatIndexes = type.fields.map(function(field) {
302 index++;
303 var size, alignSize;
304 if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
305 size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
306 alignSize = Runtime.getAlignSize(field, size);
307 } else if (Runtime.isStructType(field)) {
308 if (field[1] === '0') {
309 // this is [0 x something]. When inside another structure like here, i t must be at the end,
310 // and it adds no size
311 // XXX this happens in java-nbody for example... assert(index === type .fields.length, 'zero-length in the middle!');
312 size = 0;
313 if (Types.types[field]) {
314 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize) ;
315 } else {
316 alignSize = type.alignSize || QUANTUM_SIZE;
317 }
318 } else {
319 size = Types.types[field].flatSize;
320 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
321 }
322 } else if (field[0] == 'b') {
323 // bN, large number field, like a [N x i8]
324 size = field.substr(1)|0;
325 alignSize = 1;
326 } else if (field[0] === '<') {
327 // vector type
328 size = alignSize = Types.types[field].flatSize; // fully aligned
329 } else if (field[0] === 'i') {
330 // illegal integer field, that could not be legalized because it is an i nternal structure field
331 // it is ok to have such fields, if we just use them as markers of field size and nothing more complex
332 size = alignSize = parseInt(field.substr(1))/8;
333 assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field);
334 } else {
335 assert(false, 'invalid type for calculateStructAlignment');
336 }
337 if (type.packed) alignSize = 1;
338 type.alignSize = Math.max(type.alignSize, alignSize);
339 var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
340 type.flatSize = curr + size;
341 if (prev >= 0) {
342 diffs.push(curr-prev);
343 }
344 prev = curr;
345 return curr;
346 });
347 if (type.name_ && type.name_[0] === '[') {
348 // arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid
349 // allocating a potentially huge array for [999999 x i8] etc.
350 type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2;
351 }
352 type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
353 if (diffs.length == 0) {
354 type.flatFactor = type.flatSize;
355 } else if (Runtime.dedup(diffs).length == 1) {
356 type.flatFactor = diffs[0];
357 }
358 type.needsFlattening = (type.flatFactor != 1);
359 return type.flatIndexes;
360 },
361 generateStructInfo: function (struct, typeName, offset) {
362 var type, alignment;
363 if (typeName) {
364 offset = offset || 0;
365 type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typ eName];
366 if (!type) return null;
367 if (type.fields.length != struct.length) {
368 printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
369 return null;
370 }
371 alignment = type.flatIndexes;
372 } else {
373 var type = { fields: struct.map(function(item) { return item[0] }) };
374 alignment = Runtime.calculateStructAlignment(type);
375 }
376 var ret = {
377 __size__: type.flatSize
378 };
379 if (typeName) {
380 struct.forEach(function(item, i) {
381 if (typeof item === 'string') {
382 ret[item] = alignment[i] + offset;
383 } else {
384 // embedded struct
385 var key;
386 for (var k in item) key = k;
387 ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], align ment[i]);
388 }
389 });
390 } else {
391 struct.forEach(function(item, i) {
392 ret[item[1]] = alignment[i];
393 });
394 }
395 return ret;
396 },
397 dynCall: function (sig, ptr, args) {
398 if (args && args.length) {
399 if (!args.splice) args = Array.prototype.slice.call(args);
400 args.splice(0, 0, ptr);
401 return Module['dynCall_' + sig].apply(null, args);
402 } else {
403 return Module['dynCall_' + sig].call(null, ptr);
404 }
405 },
406 functionPointers: [],
407 addFunction: function (func) {
408 for (var i = 0; i < Runtime.functionPointers.length; i++) {
409 if (!Runtime.functionPointers[i]) {
410 Runtime.functionPointers[i] = func;
411 return 2*(1 + i);
412 }
413 }
414 throw 'Finished up all reserved function pointers. Use a higher value for RE SERVED_FUNCTION_POINTERS.';
415 },
416 removeFunction: function (index) {
417 Runtime.functionPointers[(index-2)/2] = null;
418 },
419 getAsmConst: function (code, numArgs) {
420 // code is a constant string on the heap, so we can cache these
421 if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
422 var func = Runtime.asmConstCache[code];
423 if (func) return func;
424 var args = [];
425 for (var i = 0; i < numArgs; i++) {
426 args.push(String.fromCharCode(36) + i); // $0, $1 etc
427 }
428 var source = Pointer_stringify(code);
429 if (source[0] === '"') {
430 // tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct
431 if (source.indexOf('"', 1) === source.length-1) {
432 source = source.substr(1, source.length-2);
433 } else {
434 // something invalid happened, e.g. EM_ASM("..code($0)..", input)
435 abort('invalid EM_ASM input |' + source + '|. Please use EM_ASM(..code.. ) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)');
436 }
437 }
438 try {
439 var evalled = eval('(function(' + args.join(',') + '){ ' + source + ' })') ; // new Function does not allow upvars in node
440 } catch(e) {
441 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 o f EM_ASM, EM_ASM_ARGS, etc.)');
442 throw e;
443 }
444 return Runtime.asmConstCache[code] = evalled;
445 },
446 warnOnce: function (text) {
447 if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
448 if (!Runtime.warnOnce.shown[text]) {
449 Runtime.warnOnce.shown[text] = 1;
450 Module.printErr(text);
451 }
452 },
453 funcWrappers: {},
454 getFuncWrapper: function (func, sig) {
455 assert(sig);
456 if (!Runtime.funcWrappers[func]) {
457 Runtime.funcWrappers[func] = function dynCall_wrapper() {
458 return Runtime.dynCall(sig, func, arguments);
459 };
460 }
461 return Runtime.funcWrappers[func];
462 },
463 UTF8Processor: function () {
464 var buffer = [];
465 var needed = 0;
466 this.processCChar = function (code) {
467 code = code & 0xFF;
468
469 if (buffer.length == 0) {
470 if ((code & 0x80) == 0x00) { // 0xxxxxxx
471 return String.fromCharCode(code);
472 }
473 buffer.push(code);
474 if ((code & 0xE0) == 0xC0) { // 110xxxxx
475 needed = 1;
476 } else if ((code & 0xF0) == 0xE0) { // 1110xxxx
477 needed = 2;
478 } else { // 11110xxx
479 needed = 3;
480 }
481 return '';
482 }
483
484 if (needed) {
485 buffer.push(code);
486 needed--;
487 if (needed > 0) return '';
488 }
489
490 var c1 = buffer[0];
491 var c2 = buffer[1];
492 var c3 = buffer[2];
493 var c4 = buffer[3];
494 var ret;
495 if (buffer.length == 2) {
496 ret = String.fromCharCode(((c1 & 0x1F) << 6) | (c2 & 0x3F));
497 } else if (buffer.length == 3) {
498 ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c 3 & 0x3F));
499 } else {
500 // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
501 var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) |
502 ((c3 & 0x3F) << 6) | (c4 & 0x3F);
503 ret = String.fromCharCode(
504 Math.floor((codePoint - 0x10000) / 0x400) + 0xD800,
505 (codePoint - 0x10000) % 0x400 + 0xDC00);
506 }
507 buffer.length = 0;
508 return ret;
509 }
510 this.processJSString = function processJSString(string) {
511 /* TODO: use TextEncoder when present,
512 var encoder = new TextEncoder();
513 encoder['encoding'] = "utf-8";
514 var utf8Array = encoder['encode'](aMsg.data);
515 */
516 string = unescape(encodeURIComponent(string));
517 var ret = [];
518 for (var i = 0; i < string.length; i++) {
519 ret.push(string.charCodeAt(i));
520 }
521 return ret;
522 }
523 },
524 getCompilerSetting: function (name) {
525 throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getComp ilerSetting or emscripten_get_compiler_setting to work';
526 },
527 stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)| 0;STACKTOP = (((STACKTOP)+7)&-8); return ret; },
528 staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + si ze)|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; },
529 dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) en largeMemory();; return ret; },
530 alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quan tum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
531 makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0) ))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+429496729 6)))); return ret; },
532 GLOBAL_BASE: 8,
533 QUANTUM_SIZE: 4,
534 __dummy__: 0
535 }
536
537
538 Module['Runtime'] = Runtime;
539
540
541
542
543
544
545
546
547
548 //========================================
549 // Runtime essentials
550 //========================================
551
552 var __THREW__ = 0; // Used in checking for thrown exceptions.
553
554 var ABORT = false; // whether we are quitting the application. no code should ru n after this. set in exit() and abort()
555 var EXITSTATUS = 0;
556
557 var undef = 0;
558 // tempInt is used for 32-bit signed values or smaller. tempBigInt is used
559 // for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of temp Int
560 var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI , tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
561 var tempI64, tempI64b;
562 var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRe t7, tempRet8, tempRet9;
563
564 function assert(condition, text) {
565 if (!condition) {
566 abort('Assertion failed: ' + text);
567 }
568 }
569
570 var globalScope = this;
571
572 // C calling interface. A convenient way to call C functions (in C files, or
573 // defined with extern "C").
574 //
575 // Note: LLVM optimizations can inline and remove functions, after which you wil l not be
576 // able to call them. Closure can also do so. To avoid that, add your func tion to
577 // the exports using something like
578 //
579 // -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
580 //
581 // @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C")
582 // @param returnType The return type of the function, one of the JS types 'numbe r', 'string' or 'array' (use 'number' for any C pointer, and
583 // 'array' for JavaScript arrays and typed arrays; note that a rrays are 8-bit).
584 // @param argTypes An array of the types of arguments for the function (if the re are no arguments, this can be ommitted). Types are as in returnType,
585 // except that 'array' is not possible (there is no way for us to know the length of the array)
586 // @param args An array of the arguments to the function, as native JS val ues (as in returnType)
587 // Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
588 // @return The return value, as a native JS value (as in returnType)
589 function ccall(ident, returnType, argTypes, args) {
590 return ccallFunc(getCFunc(ident), returnType, argTypes, args);
591 }
592 Module["ccall"] = ccall;
593
594 // Returns the C function with a specified identifier (for C++, you need to do m anual name mangling)
595 function getCFunc(ident) {
596 try {
597 var func = Module['_' + ident]; // closure exported function
598 if (!func) func = eval('_' + ident); // explicit lookup
599 } catch(e) {
600 }
601 assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimiz ations or closure removed it?)');
602 return func;
603 }
604
605 // Internal function that does a C call using a function, not an identifier
606 function ccallFunc(func, returnType, argTypes, args) {
607 var stack = 0;
608 function toC(value, type) {
609 if (type == 'string') {
610 if (value === null || value === undefined || value === 0) return 0; // nul l string
611 value = intArrayFromString(value);
612 type = 'array';
613 }
614 if (type == 'array') {
615 if (!stack) stack = Runtime.stackSave();
616 var ret = Runtime.stackAlloc(value.length);
617 writeArrayToMemory(value, ret);
618 return ret;
619 }
620 return value;
621 }
622 function fromC(value, type) {
623 if (type == 'string') {
624 return Pointer_stringify(value);
625 }
626 assert(type != 'array');
627 return value;
628 }
629 var i = 0;
630 var cArgs = args ? args.map(function(arg) {
631 return toC(arg, argTypes[i++]);
632 }) : [];
633 var ret = fromC(func.apply(null, cArgs), returnType);
634 if (stack) Runtime.stackRestore(stack);
635 return ret;
636 }
637
638 // Returns a native JS wrapper for a C function. This is similar to ccall, but
639 // returns a function you can call repeatedly in a normal way. For example:
640 //
641 // var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
642 // alert(my_function(5, 22));
643 // alert(my_function(99, 12));
644 //
645 function cwrap(ident, returnType, argTypes) {
646 var func = getCFunc(ident);
647 return function() {
648 return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(argu ments));
649 }
650 }
651 Module["cwrap"] = cwrap;
652
653 // Sets a value in memory in a dynamic way at run-time. Uses the
654 // type data. This is the same as makeSetValue, except that
655 // makeSetValue is done at compile-time and generates the needed
656 // code then, whereas this function picks the right code at
657 // run-time.
658 // Note that setValue and getValue only do *aligned* writes and reads!
659 // Note that ccall uses JS types as for defining types, while setValue and
660 // getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
661 function setValue(ptr, value, type, noSafe) {
662 type = type || 'i8';
663 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
664 switch(type) {
665 case 'i1': HEAP8[(ptr)]=value; break;
666 case 'i8': HEAP8[(ptr)]=value; break;
667 case 'i16': HEAP16[((ptr)>>1)]=value; break;
668 case 'i32': HEAP32[((ptr)>>2)]=value; break;
669 case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble ))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+42949 67296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDo uble)))>>>0))/(+4294967296))))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32 [(((ptr)+(4))>>2)]=tempI64[1]); break;
670 case 'float': HEAPF32[((ptr)>>2)]=value; break;
671 case 'double': HEAPF64[((ptr)>>3)]=value; break;
672 default: abort('invalid type for setValue: ' + type);
673 }
674 }
675 Module['setValue'] = setValue;
676
677 // Parallel to setValue.
678 function getValue(ptr, type, noSafe) {
679 type = type || 'i8';
680 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
681 switch(type) {
682 case 'i1': return HEAP8[(ptr)];
683 case 'i8': return HEAP8[(ptr)];
684 case 'i16': return HEAP16[((ptr)>>1)];
685 case 'i32': return HEAP32[((ptr)>>2)];
686 case 'i64': return HEAP32[((ptr)>>2)];
687 case 'float': return HEAPF32[((ptr)>>2)];
688 case 'double': return HEAPF64[((ptr)>>3)];
689 default: abort('invalid type for setValue: ' + type);
690 }
691 return null;
692 }
693 Module['getValue'] = getValue;
694
695 var ALLOC_NORMAL = 0; // Tries to use _malloc()
696 var ALLOC_STACK = 1; // Lives for the duration of the current function call
697 var ALLOC_STATIC = 2; // Cannot be freed
698 var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
699 var ALLOC_NONE = 4; // Do not allocate
700 Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
701 Module['ALLOC_STACK'] = ALLOC_STACK;
702 Module['ALLOC_STATIC'] = ALLOC_STATIC;
703 Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
704 Module['ALLOC_NONE'] = ALLOC_NONE;
705
706 // allocate(): This is for internal use. You can use it yourself as well, but th e interface
707 // is a little tricky (see docs right below). The reason is that it is optimized
708 // for multiple syntaxes to save space in generated code. So you sho uld
709 // normally not use allocate(), and instead allocate memory using _m alloc(),
710 // initialize it with setValue(), and so forth.
711 // @slab: An array of data, or a number. If a number, then the size of the block to allocate,
712 // in *bytes* (note that this is sometimes confusing: the next parameter does not
713 // affect this!)
714 // @types: Either an array of types, one for each byte (or 0 if no type at that position),
715 // or a single type which is used for the entire block. This only matter s if there
716 // is initial data - if @slab is a number, then this does not matter at all and is
717 // ignored.
718 // @allocator: How to allocate memory, see ALLOC_*
719 function allocate(slab, types, allocator, ptr) {
720 var zeroinit, size;
721 if (typeof slab === 'number') {
722 zeroinit = true;
723 size = slab;
724 } else {
725 zeroinit = false;
726 size = slab.length;
727 }
728
729 var singleType = typeof types === 'string' ? types : null;
730
731 var ret;
732 if (allocator == ALLOC_NONE) {
733 ret = ptr;
734 } else {
735 ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAllo c][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
736 }
737
738 if (zeroinit) {
739 var ptr = ret, stop;
740 assert((ret & 3) == 0);
741 stop = ret + (size & ~3);
742 for (; ptr < stop; ptr += 4) {
743 HEAP32[((ptr)>>2)]=0;
744 }
745 stop = ret + size;
746 while (ptr < stop) {
747 HEAP8[((ptr++)|0)]=0;
748 }
749 return ret;
750 }
751
752 if (singleType === 'i8') {
753 if (slab.subarray || slab.slice) {
754 HEAPU8.set(slab, ret);
755 } else {
756 HEAPU8.set(new Uint8Array(slab), ret);
757 }
758 return ret;
759 }
760
761 var i = 0, type, typeSize, previousType;
762 while (i < size) {
763 var curr = slab[i];
764
765 if (typeof curr === 'function') {
766 curr = Runtime.getFunctionIndex(curr);
767 }
768
769 type = singleType || types[i];
770 if (type === 0) {
771 i++;
772 continue;
773 }
774
775 if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
776
777 setValue(ret+i, curr, type);
778
779 // no need to look up size unless type changes, so cache it
780 if (previousType !== type) {
781 typeSize = Runtime.getNativeTypeSize(type);
782 previousType = type;
783 }
784 i += typeSize;
785 }
786
787 return ret;
788 }
789 Module['allocate'] = allocate;
790
791 function Pointer_stringify(ptr, /* optional */ length) {
792 // TODO: use TextDecoder
793 // Find the length, and check for UTF while doing so
794 var hasUtf = false;
795 var t;
796 var i = 0;
797 while (1) {
798 t = HEAPU8[(((ptr)+(i))|0)];
799 if (t >= 128) hasUtf = true;
800 else if (t == 0 && !length) break;
801 i++;
802 if (length && i == length) break;
803 }
804 if (!length) length = i;
805
806 var ret = '';
807
808 if (!hasUtf) {
809 var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge stri ng can overflow the stack
810 var curr;
811 while (length > 0) {
812 curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.m in(length, MAX_CHUNK)));
813 ret = ret ? ret + curr : curr;
814 ptr += MAX_CHUNK;
815 length -= MAX_CHUNK;
816 }
817 return ret;
818 }
819
820 var utf8 = new Runtime.UTF8Processor();
821 for (i = 0; i < length; i++) {
822 t = HEAPU8[(((ptr)+(i))|0)];
823 ret += utf8.processCChar(t);
824 }
825 return ret;
826 }
827 Module['Pointer_stringify'] = Pointer_stringify;
828
829 // Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emsc ripten HEAP, returns
830 // a copy of that string as a Javascript String object.
831 function UTF16ToString(ptr) {
832 var i = 0;
833
834 var str = '';
835 while (1) {
836 var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
837 if (codeUnit == 0)
838 return str;
839 ++i;
840 // fromCharCode constructs a character from a UTF-16 code unit, so we can pa ss the UTF16 string right through.
841 str += String.fromCharCode(codeUnit);
842 }
843 }
844 Module['UTF16ToString'] = UTF16ToString;
845
846 // Copies the given Javascript String object 'str' to the emscripten HEAP at add ress 'outPtr',
847 // null-terminated and encoded in UTF16LE form. The copy will require at most (s tr.length*2+1)*2 bytes of space in the HEAP.
848 function stringToUTF16(str, outPtr) {
849 for(var i = 0; i < str.length; ++i) {
850 // charCodeAt returns a UTF-16 encoded code unit, so it can be directly writ ten to the HEAP.
851 var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
852 HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit;
853 }
854 // Null-terminate the pointer to the HEAP.
855 HEAP16[(((outPtr)+(str.length*2))>>1)]=0;
856 }
857 Module['stringToUTF16'] = stringToUTF16;
858
859 // Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emsc ripten HEAP, returns
860 // a copy of that string as a Javascript String object.
861 function UTF32ToString(ptr) {
862 var i = 0;
863
864 var str = '';
865 while (1) {
866 var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
867 if (utf32 == 0)
868 return str;
869 ++i;
870 // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (p air), not from a Unicode code point! So encode the code point to UTF-16 for cons tructing.
871 if (utf32 >= 0x10000) {
872 var ch = utf32 - 0x10000;
873 str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
874 } else {
875 str += String.fromCharCode(utf32);
876 }
877 }
878 }
879 Module['UTF32ToString'] = UTF32ToString;
880
881 // Copies the given Javascript String object 'str' to the emscripten HEAP at add ress 'outPtr',
882 // null-terminated and encoded in UTF32LE form. The copy will require at most (s tr.length+1)*4 bytes of space in the HEAP,
883 // but can use less, since str.length does not return the number of characters i n the string, but the number of UTF-16 code units in the string.
884 function stringToUTF32(str, outPtr) {
885 var iChar = 0;
886 for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
887 // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code un it, not a Unicode code point of the character! We must decode the string to UTF- 32 to the heap.
888 var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate
889 if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
890 var trailSurrogate = str.charCodeAt(++iCodeUnit);
891 codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF) ;
892 }
893 HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit;
894 ++iChar;
895 }
896 // Null-terminate the pointer to the HEAP.
897 HEAP32[(((outPtr)+(iChar*4))>>2)]=0;
898 }
899 Module['stringToUTF32'] = stringToUTF32;
900
901 function demangle(func) {
902 var i = 3;
903 // params, etc.
904 var basicTypes = {
905 'v': 'void',
906 'b': 'bool',
907 'c': 'char',
908 's': 'short',
909 'i': 'int',
910 'l': 'long',
911 'f': 'float',
912 'd': 'double',
913 'w': 'wchar_t',
914 'a': 'signed char',
915 'h': 'unsigned char',
916 't': 'unsigned short',
917 'j': 'unsigned int',
918 'm': 'unsigned long',
919 'x': 'long long',
920 'y': 'unsigned long long',
921 'z': '...'
922 };
923 var subs = [];
924 var first = true;
925 function dump(x) {
926 //return;
927 if (x) Module.print(x);
928 Module.print(func);
929 var pre = '';
930 for (var a = 0; a < i; a++) pre += ' ';
931 Module.print (pre + '^');
932 }
933 function parseNested() {
934 i++;
935 if (func[i] === 'K') i++; // ignore const
936 var parts = [];
937 while (func[i] !== 'E') {
938 if (func[i] === 'S') { // substitution
939 i++;
940 var next = func.indexOf('_', i);
941 var num = func.substring(i, next) || 0;
942 parts.push(subs[num] || '?');
943 i = next+1;
944 continue;
945 }
946 if (func[i] === 'C') { // constructor
947 parts.push(parts[parts.length-1]);
948 i += 2;
949 continue;
950 }
951 var size = parseInt(func.substr(i));
952 var pre = size.toString().length;
953 if (!size || !pre) { i--; break; } // counter i++ below us
954 var curr = func.substr(i + pre, size);
955 parts.push(curr);
956 subs.push(curr);
957 i += pre + size;
958 }
959 i++; // skip E
960 return parts;
961 }
962 function parse(rawList, limit, allowVoid) { // main parser
963 limit = limit || Infinity;
964 var ret = '', list = [];
965 function flushList() {
966 return '(' + list.join(', ') + ')';
967 }
968 var name;
969 if (func[i] === 'N') {
970 // namespaced N-E
971 name = parseNested().join('::');
972 limit--;
973 if (limit === 0) return rawList ? [name] : name;
974 } else {
975 // not namespaced
976 if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const an d first 'L'
977 var size = parseInt(func.substr(i));
978 if (size) {
979 var pre = size.toString().length;
980 name = func.substr(i + pre, size);
981 i += pre + size;
982 }
983 }
984 first = false;
985 if (func[i] === 'I') {
986 i++;
987 var iList = parse(true);
988 var iRet = parse(true, 1, true);
989 ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>';
990 } else {
991 ret = name;
992 }
993 paramLoop: while (i < func.length && limit-- > 0) {
994 //dump('paramLoop');
995 var c = func[i++];
996 if (c in basicTypes) {
997 list.push(basicTypes[c]);
998 } else {
999 switch (c) {
1000 case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer
1001 case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // referenc e
1002 case 'L': { // literal
1003 i++; // skip basic type
1004 var end = func.indexOf('E', i);
1005 var size = end - i;
1006 list.push(func.substr(i, size));
1007 i += size + 2; // size + 'EE'
1008 break;
1009 }
1010 case 'A': { // array
1011 var size = parseInt(func.substr(i));
1012 i += size.toString().length;
1013 if (func[i] !== '_') throw '?';
1014 i++; // skip _
1015 list.push(parse(true, 1, true)[0] + ' [' + size + ']');
1016 break;
1017 }
1018 case 'E': break paramLoop;
1019 default: ret += '?' + c; break paramLoop;
1020 }
1021 }
1022 }
1023 if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avo id (void)
1024 if (rawList) {
1025 if (ret) {
1026 list.push(ret + '?');
1027 }
1028 return list;
1029 } else {
1030 return ret + flushList();
1031 }
1032 }
1033 try {
1034 // Special-case the entry point, since its name differs from other name mang ling.
1035 if (func == 'Object._main' || func == '_main') {
1036 return 'main()';
1037 }
1038 if (typeof func === 'number') func = Pointer_stringify(func);
1039 if (func[0] !== '_') return func;
1040 if (func[1] !== '_') return func; // C function
1041 if (func[2] !== 'Z') return func;
1042 switch (func[3]) {
1043 case 'n': return 'operator new()';
1044 case 'd': return 'operator delete()';
1045 }
1046 return parse();
1047 } catch(e) {
1048 return func;
1049 }
1050 }
1051
1052 function demangleAll(text) {
1053 return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') });
1054 }
1055
1056 function stackTrace() {
1057 var stack = new Error().stack;
1058 return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack tra ce is not available at least on IE10 and Safari 6.
1059 }
1060
1061 // Memory management
1062
1063 var PAGE_SIZE = 4096;
1064 function alignMemoryPage(x) {
1065 return (x+4095)&-4096;
1066 }
1067
1068 var HEAP;
1069 var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
1070
1071 var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
1072 var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
1073 var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
1074
1075 function enlargeMemory() {
1076 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 ALL OW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizatio ns, or (3) set Module.TOTAL_MEMORY before the program runs.');
1077 }
1078
1079 var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
1080 var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;
1081 var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
1082
1083 var totalMemory = 4096;
1084 while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) {
1085 if (totalMemory < 16*1024*1024) {
1086 totalMemory *= 2;
1087 } else {
1088 totalMemory += 16*1024*1024
1089 }
1090 }
1091 if (totalMemory !== TOTAL_MEMORY) {
1092 Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be more rea sonable');
1093 TOTAL_MEMORY = totalMemory;
1094 }
1095
1096 // Initialize the runtime's memory
1097 // check for full engine support (use string 'subarray' to avoid closure compile r confusion)
1098 assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
1099 'JS engine does not provide full typed array support');
1100
1101 var buffer = new ArrayBuffer(TOTAL_MEMORY);
1102 HEAP8 = new Int8Array(buffer);
1103 HEAP16 = new Int16Array(buffer);
1104 HEAP32 = new Int32Array(buffer);
1105 HEAPU8 = new Uint8Array(buffer);
1106 HEAPU16 = new Uint16Array(buffer);
1107 HEAPU32 = new Uint32Array(buffer);
1108 HEAPF32 = new Float32Array(buffer);
1109 HEAPF64 = new Float64Array(buffer);
1110
1111 // Endianness check (note: assumes compiler arch was little-endian)
1112 HEAP32[0] = 255;
1113 assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a li ttle-endian system');
1114
1115 Module['HEAP'] = HEAP;
1116 Module['HEAP8'] = HEAP8;
1117 Module['HEAP16'] = HEAP16;
1118 Module['HEAP32'] = HEAP32;
1119 Module['HEAPU8'] = HEAPU8;
1120 Module['HEAPU16'] = HEAPU16;
1121 Module['HEAPU32'] = HEAPU32;
1122 Module['HEAPF32'] = HEAPF32;
1123 Module['HEAPF64'] = HEAPF64;
1124
1125 function callRuntimeCallbacks(callbacks) {
1126 while(callbacks.length > 0) {
1127 var callback = callbacks.shift();
1128 if (typeof callback == 'function') {
1129 callback();
1130 continue;
1131 }
1132 var func = callback.func;
1133 if (typeof func === 'number') {
1134 if (callback.arg === undefined) {
1135 Runtime.dynCall('v', func);
1136 } else {
1137 Runtime.dynCall('vi', func, [callback.arg]);
1138 }
1139 } else {
1140 func(callback.arg === undefined ? null : callback.arg);
1141 }
1142 }
1143 }
1144
1145 var __ATPRERUN__ = []; // functions called before the runtime is initialized
1146 var __ATINIT__ = []; // functions called during startup
1147 var __ATMAIN__ = []; // functions called when main() is to be run
1148 var __ATEXIT__ = []; // functions called during shutdown
1149 var __ATPOSTRUN__ = []; // functions called after the runtime has exited
1150
1151 var runtimeInitialized = false;
1152
1153 function preRun() {
1154 // compatibility - merge in anything from Module['preRun'] at this time
1155 if (Module['preRun']) {
1156 if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRu n']];
1157 while (Module['preRun'].length) {
1158 addOnPreRun(Module['preRun'].shift());
1159 }
1160 }
1161 callRuntimeCallbacks(__ATPRERUN__);
1162 }
1163
1164 function ensureInitRuntime() {
1165 if (runtimeInitialized) return;
1166 runtimeInitialized = true;
1167 callRuntimeCallbacks(__ATINIT__);
1168 }
1169
1170 function preMain() {
1171 callRuntimeCallbacks(__ATMAIN__);
1172 }
1173
1174 function exitRuntime() {
1175 callRuntimeCallbacks(__ATEXIT__);
1176 }
1177
1178 function postRun() {
1179 // compatibility - merge in anything from Module['postRun'] at this time
1180 if (Module['postRun']) {
1181 if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['pos tRun']];
1182 while (Module['postRun'].length) {
1183 addOnPostRun(Module['postRun'].shift());
1184 }
1185 }
1186 callRuntimeCallbacks(__ATPOSTRUN__);
1187 }
1188
1189 function addOnPreRun(cb) {
1190 __ATPRERUN__.unshift(cb);
1191 }
1192 Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun;
1193
1194 function addOnInit(cb) {
1195 __ATINIT__.unshift(cb);
1196 }
1197 Module['addOnInit'] = Module.addOnInit = addOnInit;
1198
1199 function addOnPreMain(cb) {
1200 __ATMAIN__.unshift(cb);
1201 }
1202 Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain;
1203
1204 function addOnExit(cb) {
1205 __ATEXIT__.unshift(cb);
1206 }
1207 Module['addOnExit'] = Module.addOnExit = addOnExit;
1208
1209 function addOnPostRun(cb) {
1210 __ATPOSTRUN__.unshift(cb);
1211 }
1212 Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun;
1213
1214 // Tools
1215
1216 // This processes a JS string into a C-line array of numbers, 0-terminated.
1217 // For LLVM-originating strings, see parser.js:parseLLVMString function
1218 function intArrayFromString(stringy, dontAddNull, length /* optional */) {
1219 var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
1220 if (length) {
1221 ret.length = length;
1222 }
1223 if (!dontAddNull) {
1224 ret.push(0);
1225 }
1226 return ret;
1227 }
1228 Module['intArrayFromString'] = intArrayFromString;
1229
1230 function intArrayToString(array) {
1231 var ret = [];
1232 for (var i = 0; i < array.length; i++) {
1233 var chr = array[i];
1234 if (chr > 0xFF) {
1235 chr &= 0xFF;
1236 }
1237 ret.push(String.fromCharCode(chr));
1238 }
1239 return ret.join('');
1240 }
1241 Module['intArrayToString'] = intArrayToString;
1242
1243 // Write a Javascript array to somewhere in the heap
1244 function writeStringToMemory(string, buffer, dontAddNull) {
1245 var array = intArrayFromString(string, dontAddNull);
1246 var i = 0;
1247 while (i < array.length) {
1248 var chr = array[i];
1249 HEAP8[(((buffer)+(i))|0)]=chr;
1250 i = i + 1;
1251 }
1252 }
1253 Module['writeStringToMemory'] = writeStringToMemory;
1254
1255 function writeArrayToMemory(array, buffer) {
1256 for (var i = 0; i < array.length; i++) {
1257 HEAP8[(((buffer)+(i))|0)]=array[i];
1258 }
1259 }
1260 Module['writeArrayToMemory'] = writeArrayToMemory;
1261
1262 function writeAsciiToMemory(str, buffer, dontAddNull) {
1263 for (var i = 0; i < str.length; i++) {
1264 HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i);
1265 }
1266 if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0;
1267 }
1268 Module['writeAsciiToMemory'] = writeAsciiToMemory;
1269
1270 function unSign(value, bits, ignore) {
1271 if (value >= 0) {
1272 return value;
1273 }
1274 return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, s ince if bits == 32, we are right at the limit of the bits JS uses in bitshifts
1275 : Math.pow(2, bits) + value;
1276 }
1277 function reSign(value, bits, ignore) {
1278 if (value <= 0) {
1279 return value;
1280 }
1281 var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
1282 : Math.pow(2, bits-1);
1283 if (value >= half && (bits <= 32 || value > half)) { // for huge values, we ca n hit the precision limit and always get true here. so don't do that
1284 // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
1285 // TODO: In i64 mode 1, r esign the two parts separately and safely
1286 value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
1287 }
1288 return value;
1289 }
1290
1291 // check for imul support, and also for correctness ( https://bugs.webkit.org/sh ow_bug.cgi?id=126345 )
1292 if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
1293 var ah = a >>> 16;
1294 var al = a & 0xffff;
1295 var bh = b >>> 16;
1296 var bl = b & 0xffff;
1297 return (al*bl + ((ah*bl + al*bh) << 16))|0;
1298 };
1299 Math.imul = Math['imul'];
1300
1301
1302 var Math_abs = Math.abs;
1303 var Math_cos = Math.cos;
1304 var Math_sin = Math.sin;
1305 var Math_tan = Math.tan;
1306 var Math_acos = Math.acos;
1307 var Math_asin = Math.asin;
1308 var Math_atan = Math.atan;
1309 var Math_atan2 = Math.atan2;
1310 var Math_exp = Math.exp;
1311 var Math_log = Math.log;
1312 var Math_sqrt = Math.sqrt;
1313 var Math_ceil = Math.ceil;
1314 var Math_floor = Math.floor;
1315 var Math_pow = Math.pow;
1316 var Math_imul = Math.imul;
1317 var Math_fround = Math.fround;
1318 var Math_min = Math.min;
1319
1320 // A counter of dependencies for calling run(). If we need to
1321 // do asynchronous work before running, increment this and
1322 // decrement it. Incrementing must happen in a place like
1323 // PRE_RUN_ADDITIONS (used by emcc to add file preloading).
1324 // Note that you can add dependencies in preRun, even though
1325 // it happens right before run - run will be postponed until
1326 // the dependencies are met.
1327 var runDependencies = 0;
1328 var runDependencyWatcher = null;
1329 var dependenciesFulfilled = null; // overridden to take different actions when a ll run dependencies are fulfilled
1330
1331 function addRunDependency(id) {
1332 runDependencies++;
1333 if (Module['monitorRunDependencies']) {
1334 Module['monitorRunDependencies'](runDependencies);
1335 }
1336 }
1337 Module['addRunDependency'] = addRunDependency;
1338 function removeRunDependency(id) {
1339 runDependencies--;
1340 if (Module['monitorRunDependencies']) {
1341 Module['monitorRunDependencies'](runDependencies);
1342 }
1343 if (runDependencies == 0) {
1344 if (runDependencyWatcher !== null) {
1345 clearInterval(runDependencyWatcher);
1346 runDependencyWatcher = null;
1347 }
1348 if (dependenciesFulfilled) {
1349 var callback = dependenciesFulfilled;
1350 dependenciesFulfilled = null;
1351 callback(); // can add another dependenciesFulfilled
1352 }
1353 }
1354 }
1355 Module['removeRunDependency'] = removeRunDependency;
1356
1357 Module["preloadedImages"] = {}; // maps url to image data
1358 Module["preloadedAudios"] = {}; // maps url to audio data
1359
1360
1361 var memoryInitializer = null;
1362
1363 // === Body ===
1364 var __ZTVN10__cxxabiv117__class_type_infoE = 7024;
1365 var __ZTVN10__cxxabiv120__si_class_type_infoE = 7064;
1366
1367
1368
1369
1370 STATIC_BASE = 8;
1371
1372 STATICTOP = STATIC_BASE + Runtime.alignMemory(7731);
1373 /* global initializers */ __ATINIT__.push();
1374
1375
1376 /* 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,4 5,32,37,46,51,102,44,32,114,97,110,103,101,58,32,37,46,51,102,32,116,111,32,37,4 6,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,4 9,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,8 0,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,3 2,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,9 7,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,22 4,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,1 07,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,9 8,108,111,99,107,83,105,122,101,32,60,61,32,98,50,95,99,104,117,110,107,83,105,1 22,101,0,0,70,114,101,101,0,0,0,0,98,100,45,62,112,111,115,105,116,105,111,110,4 6,73,115,86,97,108,105,100,40,41,0,0,66,111,120,50,68,47,68,121,110,97,109,105,9 9,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,8 6,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,11 0,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,1 08,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,1 11,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,1 09,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,3 2,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,1 09,105,99,84,114,101,101,46,104,0,0,0,0,0,0,0,71,101,116,85,115,101,114,68,97,11 6,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,11 6,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,12 1,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,1 10,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,11 6,97,99,116,67,111,117,110,116,32,60,32,109,95,99,111,110,116,97,99,116,67,97,11 2,97,99,105,116,121,0,0,0,0,0,0,109,95,98,111,100,121,67,111,117,110,116,32,60,3 2,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,11 6,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,1 01,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,1 14,101,101,46,99,112,112,0,0,0,0,0,0,0,65,108,108,111,99,97,116,101,78,111,100,1 01,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,1 01,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,9 9,104,105,108,100,49,32,33,61,32,40,45,49,41,0,0,73,110,115,101,114,116,76,101,9 7,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,3 2,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,10 9,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,10 9,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,11 0,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,1 10,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,1 05,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,9 7,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,1 16,114,121,67,111,117,110,116,32,61,61,32,48,0,0,0,0,0,0,0,109,95,101,110,116,11 4,121,67,111,117,110,116,32,60,32,98,50,95,109,97,120,83,116,97,99,107,69,110,11 6,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,10 1,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,12 1,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,3 2,116,121,112,101,66,32,60,32,98,50,83,104,97,112,101,58,58,101,95,116,121,112,1 01,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,10 1,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,5 8,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,10 9,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,6 9,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,1 16,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,12 0,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,1 21,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,1 11,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,7 2,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,1 10,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,98,50,80,111,108,121,103,111,1 10,67,111,110,116,97,99,116,0,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,6 6,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,5 8,101,95,112,111,108,121,103,111,110,0,0,0,0,0,49,54,98,50,80,111,108,121,103,11 1,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,1 10,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,10 0,67,105,114,99,108,101,0,0,48,32,60,61,32,101,100,103,101,49,32,38,38,32,101,10 0,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,11 2,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,11 0,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,104,97,105,110,6 5,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,1 16,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,11 6,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,11 1,108,121,103,111,110,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,98,50,67,10 4,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,10 1,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,1 10,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,1 14,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,11 0,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,105,114,99,108,1 01,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,11 6,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,1 14,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,6 7,111,117,110,116,32,62,32,48,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,1 15,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,11 8,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,1 20,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,9 8,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,6 9,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,1 20,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,2 32,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,7 8,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,1 15,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);
1377
1378
1379
1380
1381 var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
1382
1383 assert(tempDoublePtr % 8 == 0);
1384
1385 function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
1386
1387 HEAP8[tempDoublePtr] = HEAP8[ptr];
1388
1389 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1390
1391 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1392
1393 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1394
1395 }
1396
1397 function copyTempDouble(ptr) {
1398
1399 HEAP8[tempDoublePtr] = HEAP8[ptr];
1400
1401 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1402
1403 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1404
1405 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1406
1407 HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
1408
1409 HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
1410
1411 HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
1412
1413 HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
1414
1415 }
1416
1417
1418 function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg) {
1419 Module['noExitRuntime'] = true;
1420
1421 Browser.mainLoop.runner = function Browser_mainLoop_runner() {
1422 if (ABORT) return;
1423 if (Browser.mainLoop.queue.length > 0) {
1424 var start = Date.now();
1425 var blocker = Browser.mainLoop.queue.shift();
1426 blocker.func(blocker.arg);
1427 if (Browser.mainLoop.remainingBlockers) {
1428 var remaining = Browser.mainLoop.remainingBlockers;
1429 var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining);
1430 if (blocker.counted) {
1431 Browser.mainLoop.remainingBlockers = next;
1432 } else {
1433 // not counted, but move the progress along a tiny bit
1434 next = next + 0.5; // do not steal all the next one's progress
1435 Browser.mainLoop.remainingBlockers = (8*remaining + next)/9;
1436 }
1437 }
1438 console.log('main loop blocker "' + blocker.name + '" took ' + (Date.n ow() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers);
1439 Browser.mainLoop.updateStatus();
1440 setTimeout(Browser.mainLoop.runner, 0);
1441 return;
1442 }
1443 if (Browser.mainLoop.shouldPause) {
1444 // catch pauses from non-main loop sources
1445 Browser.mainLoop.paused = true;
1446 Browser.mainLoop.shouldPause = false;
1447 return;
1448 }
1449
1450 // Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize
1451 // VBO double-buffering and reduce GPU stalls.
1452
1453 if (Browser.mainLoop.method === 'timeout' && Module.ctx) {
1454 Module.printErr('Looks like you are rendering without using requestAni mationFrame 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 improv e your frame rates!');
1455 Browser.mainLoop.method = ''; // just warn once per call to set main l oop
1456 }
1457
1458 if (Module['preMainLoop']) {
1459 Module['preMainLoop']();
1460 }
1461
1462 try {
1463 if (typeof arg !== 'undefined') {
1464 Runtime.dynCall('vi', func, [arg]);
1465 } else {
1466 Runtime.dynCall('v', func);
1467 }
1468 } catch (e) {
1469 if (e instanceof ExitStatus) {
1470 return;
1471 } else {
1472 if (e && typeof e === 'object' && e.stack) Module.printErr('exceptio n thrown: ' + [e, e.stack]);
1473 throw e;
1474 }
1475 }
1476
1477 if (Module['postMainLoop']) {
1478 Module['postMainLoop']();
1479 }
1480
1481 if (Browser.mainLoop.shouldPause) {
1482 // catch pauses from the main loop itself
1483 Browser.mainLoop.paused = true;
1484 Browser.mainLoop.shouldPause = false;
1485 return;
1486 }
1487 Browser.mainLoop.scheduler();
1488 }
1489 if (fps && fps > 0) {
1490 Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
1491 setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop
1492 };
1493 Browser.mainLoop.method = 'timeout';
1494 } else {
1495 Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
1496 Browser.requestAnimationFrame(Browser.mainLoop.runner);
1497 };
1498 Browser.mainLoop.method = 'rAF';
1499 }
1500 Browser.mainLoop.scheduler();
1501
1502 if (simulateInfiniteLoop) {
1503 throw 'SimulateInfiniteLoop';
1504 }
1505 }
1506
1507 var _cosf=Math_cos;
1508
1509 function ___cxa_pure_virtual() {
1510 ABORT = true;
1511 throw 'Pure virtual function called!';
1512 }
1513
1514 function _time(ptr) {
1515 var ret = Math.floor(Date.now()/1000);
1516 if (ptr) {
1517 HEAP32[((ptr)>>2)]=ret;
1518 }
1519 return ret;
1520 }
1521
1522 function ___assert_fail(condition, filename, line, func) {
1523 ABORT = true;
1524 throw 'Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [fi lename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_ stringify(func) : 'unknown function'] + ' at ' + stackTrace();
1525 }
1526
1527
1528 function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()
1529 return !!__ZSt18uncaught_exceptionv.uncaught_exception;
1530 }
1531
1532
1533
1534 function ___cxa_is_number_type(type) {
1535 var isNumber = false;
1536 try { if (type == __ZTIi) isNumber = true } catch(e){}
1537 try { if (type == __ZTIj) isNumber = true } catch(e){}
1538 try { if (type == __ZTIl) isNumber = true } catch(e){}
1539 try { if (type == __ZTIm) isNumber = true } catch(e){}
1540 try { if (type == __ZTIx) isNumber = true } catch(e){}
1541 try { if (type == __ZTIy) isNumber = true } catch(e){}
1542 try { if (type == __ZTIf) isNumber = true } catch(e){}
1543 try { if (type == __ZTId) isNumber = true } catch(e){}
1544 try { if (type == __ZTIe) isNumber = true } catch(e){}
1545 try { if (type == __ZTIc) isNumber = true } catch(e){}
1546 try { if (type == __ZTIa) isNumber = true } catch(e){}
1547 try { if (type == __ZTIh) isNumber = true } catch(e){}
1548 try { if (type == __ZTIs) isNumber = true } catch(e){}
1549 try { if (type == __ZTIt) isNumber = true } catch(e){}
1550 return isNumber;
1551 }function ___cxa_does_inherit(definiteType, possibilityType, possibility) {
1552 if (possibility == 0) return false;
1553 if (possibilityType == 0 || possibilityType == definiteType)
1554 return true;
1555 var possibility_type_info;
1556 if (___cxa_is_number_type(possibilityType)) {
1557 possibility_type_info = possibilityType;
1558 } else {
1559 var possibility_type_infoAddr = HEAP32[((possibilityType)>>2)] - 8;
1560 possibility_type_info = HEAP32[((possibility_type_infoAddr)>>2)];
1561 }
1562 switch (possibility_type_info) {
1563 case 0: // possibility is a pointer
1564 // See if definite type is a pointer
1565 var definite_type_infoAddr = HEAP32[((definiteType)>>2)] - 8;
1566 var definite_type_info = HEAP32[((definite_type_infoAddr)>>2)];
1567 if (definite_type_info == 0) {
1568 // Also a pointer; compare base types of pointers
1569 var defPointerBaseAddr = definiteType+8;
1570 var defPointerBaseType = HEAP32[((defPointerBaseAddr)>>2)];
1571 var possPointerBaseAddr = possibilityType+8;
1572 var possPointerBaseType = HEAP32[((possPointerBaseAddr)>>2)];
1573 return ___cxa_does_inherit(defPointerBaseType, possPointerBaseType, po ssibility);
1574 } else
1575 return false; // one pointer and one non-pointer
1576 case 1: // class with no base class
1577 return false;
1578 case 2: // class with base class
1579 var parentTypeAddr = possibilityType + 8;
1580 var parentType = HEAP32[((parentTypeAddr)>>2)];
1581 return ___cxa_does_inherit(definiteType, parentType, possibility);
1582 default:
1583 return false; // some unencountered type
1584 }
1585 }
1586
1587
1588
1589 var ___cxa_last_thrown_exception=0;function ___resumeException(ptr) {
1590 if (!___cxa_last_thrown_exception) { ___cxa_last_thrown_exception = ptr; }
1591 throw ptr + " - Exception catching is disabled, this exception cannot be c aught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHIN G=2 to catch.";
1592 }
1593
1594 var ___cxa_exception_header_size=8;function ___cxa_find_matching_catch(thrown, throwntype) {
1595 if (thrown == -1) thrown = ___cxa_last_thrown_exception;
1596 header = thrown - ___cxa_exception_header_size;
1597 if (throwntype == -1) throwntype = HEAP32[((header)>>2)];
1598 var typeArray = Array.prototype.slice.call(arguments, 2);
1599
1600 // If throwntype is a pointer, this means a pointer has been
1601 // thrown. When a pointer is thrown, actually what's thrown
1602 // is a pointer to the pointer. We'll dereference it.
1603 if (throwntype != 0 && !___cxa_is_number_type(throwntype)) {
1604 var throwntypeInfoAddr= HEAP32[((throwntype)>>2)] - 8;
1605 var throwntypeInfo= HEAP32[((throwntypeInfoAddr)>>2)];
1606 if (throwntypeInfo == 0)
1607 thrown = HEAP32[((thrown)>>2)];
1608 }
1609 // The different catch blocks are denoted by different types.
1610 // Due to inheritance, those types may not precisely match the
1611 // type of the thrown object. Find one which matches, and
1612 // return the type of the catch block which should be called.
1613 for (var i = 0; i < typeArray.length; i++) {
1614 if (___cxa_does_inherit(typeArray[i], throwntype, thrown))
1615 return ((asm["setTempRet0"](typeArray[i]),thrown)|0);
1616 }
1617 // Shouldn't happen unless we have bogus data in typeArray
1618 // or encounter a type for which emscripten doesn't have suitable
1619 // typeinfo defined. Best-efforts match just in case.
1620 return ((asm["setTempRet0"](throwntype),thrown)|0);
1621 }function ___cxa_throw(ptr, type, destructor) {
1622 if (!___cxa_throw.initialized) {
1623 try {
1624 HEAP32[((__ZTVN10__cxxabiv119__pointer_type_infoE)>>2)]=0; // Workarou nd for libcxxabi integration bug
1625 } catch(e){}
1626 try {
1627 HEAP32[((__ZTVN10__cxxabiv117__class_type_infoE)>>2)]=1; // Workaround for libcxxabi integration bug
1628 } catch(e){}
1629 try {
1630 HEAP32[((__ZTVN10__cxxabiv120__si_class_type_infoE)>>2)]=2; // Workaro und for libcxxabi integration bug
1631 } catch(e){}
1632 ___cxa_throw.initialized = true;
1633 }
1634 var header = ptr - ___cxa_exception_header_size;
1635 HEAP32[((header)>>2)]=type;
1636 HEAP32[(((header)+(4))>>2)]=destructor;
1637 ___cxa_last_thrown_exception = ptr;
1638 if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) {
1639 __ZSt18uncaught_exceptionv.uncaught_exception = 1;
1640 } else {
1641 __ZSt18uncaught_exceptionv.uncaught_exception++;
1642 }
1643 throw ptr + " - Exception catching is disabled, this exception cannot be c aught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHIN G=2 to catch.";
1644 }
1645
1646
1647 Module["_memset"] = _memset;
1648
1649
1650
1651 function __exit(status) {
1652 // void _exit(int status);
1653 // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
1654 Module['exit'](status);
1655 }function _exit(status) {
1656 __exit(status);
1657 }function __ZSt9terminatev() {
1658 _exit(-1234);
1659 }
1660
1661 function _abort() {
1662 Module['abort']();
1663 }
1664
1665
1666
1667
1668
1669 var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXE C:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENO TBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENF ILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLI NK: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,EBAD E:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,E NOSTR: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,E CONNRESET: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,EALRE ADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRN OTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQ UOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125 ,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};
1670
1671 var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or director y",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such devi ce or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",1 0:"No children",11:"No more processes",12:"Not enough core",13:"Permission denie d",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File e xists",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:"N o space left on device",29:"Illegal seek",30:"Read only file system",31:"Too man y links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result no t 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:"Identif ier 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 dr iver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Inval id 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 r esources",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:"Srmoun t error",70:"Communication error on send",71:"Protocol error",72:"Multihop attem pted",73:"Cross mount point (not really error)",74:"Trying to read unreadable me ssage",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 acc ess 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 e xec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address require d",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not av ailable",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 int erface 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:"Connectio n timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachabl e",114:"Socket already connected",115:"Connection already in progress",116:"Stal e file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operati on canceled",130:"Previous owner died",131:"State not recoverable"};
1672
1673
1674 var ___errno_state=0;function ___setErrNo(value) {
1675 // For convenient setting and returning of errno.
1676 HEAP32[((___errno_state)>>2)]=value;
1677 return value;
1678 }
1679
1680 var PATH={splitPath:function (filename) {
1681 var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(? :[\/]*)$/;
1682 return splitPathRe.exec(filename).slice(1);
1683 },normalizeArray:function (parts, allowAboveRoot) {
1684 // if the path tries to go above the root, `up` ends up > 0
1685 var up = 0;
1686 for (var i = parts.length - 1; i >= 0; i--) {
1687 var last = parts[i];
1688 if (last === '.') {
1689 parts.splice(i, 1);
1690 } else if (last === '..') {
1691 parts.splice(i, 1);
1692 up++;
1693 } else if (up) {
1694 parts.splice(i, 1);
1695 up--;
1696 }
1697 }
1698 // if the path is allowed to go above the root, restore leading ..s
1699 if (allowAboveRoot) {
1700 for (; up--; up) {
1701 parts.unshift('..');
1702 }
1703 }
1704 return parts;
1705 },normalize:function (path) {
1706 var isAbsolute = path.charAt(0) === '/',
1707 trailingSlash = path.substr(-1) === '/';
1708 // Normalize the path
1709 path = PATH.normalizeArray(path.split('/').filter(function(p) {
1710 return !!p;
1711 }), !isAbsolute).join('/');
1712 if (!path && !isAbsolute) {
1713 path = '.';
1714 }
1715 if (path && trailingSlash) {
1716 path += '/';
1717 }
1718 return (isAbsolute ? '/' : '') + path;
1719 },dirname:function (path) {
1720 var result = PATH.splitPath(path),
1721 root = result[0],
1722 dir = result[1];
1723 if (!root && !dir) {
1724 // No dirname whatsoever
1725 return '.';
1726 }
1727 if (dir) {
1728 // It has a dirname, strip trailing slash
1729 dir = dir.substr(0, dir.length - 1);
1730 }
1731 return root + dir;
1732 },basename:function (path) {
1733 // EMSCRIPTEN return '/'' for '/', not an empty string
1734 if (path === '/') return '/';
1735 var lastSlash = path.lastIndexOf('/');
1736 if (lastSlash === -1) return path;
1737 return path.substr(lastSlash+1);
1738 },extname:function (path) {
1739 return PATH.splitPath(path)[3];
1740 },join:function () {
1741 var paths = Array.prototype.slice.call(arguments, 0);
1742 return PATH.normalize(paths.join('/'));
1743 },join2:function (l, r) {
1744 return PATH.normalize(l + '/' + r);
1745 },resolve:function () {
1746 var resolvedPath = '',
1747 resolvedAbsolute = false;
1748 for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
1749 var path = (i >= 0) ? arguments[i] : FS.cwd();
1750 // Skip empty and invalid entries
1751 if (typeof path !== 'string') {
1752 throw new TypeError('Arguments to path.resolve must be strings');
1753 } else if (!path) {
1754 continue;
1755 }
1756 resolvedPath = path + '/' + resolvedPath;
1757 resolvedAbsolute = path.charAt(0) === '/';
1758 }
1759 // At this point the path should be resolved to a full absolute path, bu t
1760 // handle relative paths to be safe (might happen when process.cwd() fai ls)
1761 resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(functi on(p) {
1762 return !!p;
1763 }), !resolvedAbsolute).join('/');
1764 return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
1765 },relative:function (from, to) {
1766 from = PATH.resolve(from).substr(1);
1767 to = PATH.resolve(to).substr(1);
1768 function trim(arr) {
1769 var start = 0;
1770 for (; start < arr.length; start++) {
1771 if (arr[start] !== '') break;
1772 }
1773 var end = arr.length - 1;
1774 for (; end >= 0; end--) {
1775 if (arr[end] !== '') break;
1776 }
1777 if (start > end) return [];
1778 return arr.slice(start, end - start + 1);
1779 }
1780 var fromParts = trim(from.split('/'));
1781 var toParts = trim(to.split('/'));
1782 var length = Math.min(fromParts.length, toParts.length);
1783 var samePartsLength = length;
1784 for (var i = 0; i < length; i++) {
1785 if (fromParts[i] !== toParts[i]) {
1786 samePartsLength = i;
1787 break;
1788 }
1789 }
1790 var outputParts = [];
1791 for (var i = samePartsLength; i < fromParts.length; i++) {
1792 outputParts.push('..');
1793 }
1794 outputParts = outputParts.concat(toParts.slice(samePartsLength));
1795 return outputParts.join('/');
1796 }};
1797
1798 var TTY={ttys:[],init:function () {
1799 // https://github.com/kripken/emscripten/pull/1555
1800 // if (ENVIRONMENT_IS_NODE) {
1801 // // currently, FS.init does not distinguish if process.stdin is a fi le or TTY
1802 // // device, it always assumes it's a TTY device. because of this, we 're forcing
1803 // // process.stdin to UTF8 encoding to at least make stdin reading co mpatible
1804 // // with text files until FS.init can be refactored.
1805 // process['stdin']['setEncoding']('utf8');
1806 // }
1807 },shutdown:function () {
1808 // https://github.com/kripken/emscripten/pull/1555
1809 // if (ENVIRONMENT_IS_NODE) {
1810 // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn 't exit immediately (with process.stdin being a tty)?
1811 // // isaacs: because now it's reading from the stream, you've express ed interest in it, so that read() kicks off a _read() which creates a ReadReq op eration
1812 // // inolen: I thought read() in that case was a synchronous operatio n that just grabbed some amount of buffered data if it exists?
1813 // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
1814 // // isaacs: do process.stdin.pause() and i'd think it'd probably clo se the pending call
1815 // process['stdin']['pause']();
1816 // }
1817 },register:function (dev, ops) {
1818 TTY.ttys[dev] = { input: [], output: [], ops: ops };
1819 FS.registerDevice(dev, TTY.stream_ops);
1820 },stream_ops:{open:function (stream) {
1821 var tty = TTY.ttys[stream.node.rdev];
1822 if (!tty) {
1823 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
1824 }
1825 stream.tty = tty;
1826 stream.seekable = false;
1827 },close:function (stream) {
1828 // flush any pending line data
1829 if (stream.tty.output.length) {
1830 stream.tty.ops.put_char(stream.tty, 10);
1831 }
1832 },read:function (stream, buffer, offset, length, pos /* ignored */) {
1833 if (!stream.tty || !stream.tty.ops.get_char) {
1834 throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1835 }
1836 var bytesRead = 0;
1837 for (var i = 0; i < length; i++) {
1838 var result;
1839 try {
1840 result = stream.tty.ops.get_char(stream.tty);
1841 } catch (e) {
1842 throw new FS.ErrnoError(ERRNO_CODES.EIO);
1843 }
1844 if (result === undefined && bytesRead === 0) {
1845 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
1846 }
1847 if (result === null || result === undefined) break;
1848 bytesRead++;
1849 buffer[offset+i] = result;
1850 }
1851 if (bytesRead) {
1852 stream.node.timestamp = Date.now();
1853 }
1854 return bytesRead;
1855 },write:function (stream, buffer, offset, length, pos) {
1856 if (!stream.tty || !stream.tty.ops.put_char) {
1857 throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1858 }
1859 for (var i = 0; i < length; i++) {
1860 try {
1861 stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
1862 } catch (e) {
1863 throw new FS.ErrnoError(ERRNO_CODES.EIO);
1864 }
1865 }
1866 if (length) {
1867 stream.node.timestamp = Date.now();
1868 }
1869 return i;
1870 }},default_tty_ops:{get_char:function (tty) {
1871 if (!tty.input.length) {
1872 var result = null;
1873 if (ENVIRONMENT_IS_NODE) {
1874 result = process['stdin']['read']();
1875 if (!result) {
1876 if (process['stdin']['_readableState'] && process['stdin']['_rea dableState']['ended']) {
1877 return null; // EOF
1878 }
1879 return undefined; // no data available
1880 }
1881 } else if (typeof window != 'undefined' &&
1882 typeof window.prompt == 'function') {
1883 // Browser.
1884 result = window.prompt('Input: '); // returns null on cancel
1885 if (result !== null) {
1886 result += '\n';
1887 }
1888 } else if (typeof readline == 'function') {
1889 // Command line.
1890 result = readline();
1891 if (result !== null) {
1892 result += '\n';
1893 }
1894 }
1895 if (!result) {
1896 return null;
1897 }
1898 tty.input = intArrayFromString(result, true);
1899 }
1900 return tty.input.shift();
1901 },put_char:function (tty, val) {
1902 if (val === null || val === 10) {
1903 Module['print'](tty.output.join(''));
1904 tty.output = [];
1905 } else {
1906 tty.output.push(TTY.utf8.processCChar(val));
1907 }
1908 }},default_tty1_ops:{put_char:function (tty, val) {
1909 if (val === null || val === 10) {
1910 Module['printErr'](tty.output.join(''));
1911 tty.output = [];
1912 } else {
1913 tty.output.push(TTY.utf8.processCChar(val));
1914 }
1915 }}};
1916
1917 var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3, mount:function (mount) {
1918 return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
1919 },createNode:function (parent, name, mode, dev) {
1920 if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
1921 // no supported
1922 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
1923 }
1924 if (!MEMFS.ops_table) {
1925 MEMFS.ops_table = {
1926 dir: {
1927 node: {
1928 getattr: MEMFS.node_ops.getattr,
1929 setattr: MEMFS.node_ops.setattr,
1930 lookup: MEMFS.node_ops.lookup,
1931 mknod: MEMFS.node_ops.mknod,
1932 rename: MEMFS.node_ops.rename,
1933 unlink: MEMFS.node_ops.unlink,
1934 rmdir: MEMFS.node_ops.rmdir,
1935 readdir: MEMFS.node_ops.readdir,
1936 symlink: MEMFS.node_ops.symlink
1937 },
1938 stream: {
1939 llseek: MEMFS.stream_ops.llseek
1940 }
1941 },
1942 file: {
1943 node: {
1944 getattr: MEMFS.node_ops.getattr,
1945 setattr: MEMFS.node_ops.setattr
1946 },
1947 stream: {
1948 llseek: MEMFS.stream_ops.llseek,
1949 read: MEMFS.stream_ops.read,
1950 write: MEMFS.stream_ops.write,
1951 allocate: MEMFS.stream_ops.allocate,
1952 mmap: MEMFS.stream_ops.mmap
1953 }
1954 },
1955 link: {
1956 node: {
1957 getattr: MEMFS.node_ops.getattr,
1958 setattr: MEMFS.node_ops.setattr,
1959 readlink: MEMFS.node_ops.readlink
1960 },
1961 stream: {}
1962 },
1963 chrdev: {
1964 node: {
1965 getattr: MEMFS.node_ops.getattr,
1966 setattr: MEMFS.node_ops.setattr
1967 },
1968 stream: FS.chrdev_stream_ops
1969 },
1970 };
1971 }
1972 var node = FS.createNode(parent, name, mode, dev);
1973 if (FS.isDir(node.mode)) {
1974 node.node_ops = MEMFS.ops_table.dir.node;
1975 node.stream_ops = MEMFS.ops_table.dir.stream;
1976 node.contents = {};
1977 } else if (FS.isFile(node.mode)) {
1978 node.node_ops = MEMFS.ops_table.file.node;
1979 node.stream_ops = MEMFS.ops_table.file.stream;
1980 node.contents = [];
1981 node.contentMode = MEMFS.CONTENT_FLEXIBLE;
1982 } else if (FS.isLink(node.mode)) {
1983 node.node_ops = MEMFS.ops_table.link.node;
1984 node.stream_ops = MEMFS.ops_table.link.stream;
1985 } else if (FS.isChrdev(node.mode)) {
1986 node.node_ops = MEMFS.ops_table.chrdev.node;
1987 node.stream_ops = MEMFS.ops_table.chrdev.stream;
1988 }
1989 node.timestamp = Date.now();
1990 // add the new node to the parent
1991 if (parent) {
1992 parent.contents[name] = node;
1993 }
1994 return node;
1995 },ensureFlexible:function (node) {
1996 if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) {
1997 var contents = node.contents;
1998 node.contents = Array.prototype.slice.call(contents);
1999 node.contentMode = MEMFS.CONTENT_FLEXIBLE;
2000 }
2001 },node_ops:{getattr:function (node) {
2002 var attr = {};
2003 // device numbers reuse inode numbers.
2004 attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
2005 attr.ino = node.id;
2006 attr.mode = node.mode;
2007 attr.nlink = 1;
2008 attr.uid = 0;
2009 attr.gid = 0;
2010 attr.rdev = node.rdev;
2011 if (FS.isDir(node.mode)) {
2012 attr.size = 4096;
2013 } else if (FS.isFile(node.mode)) {
2014 attr.size = node.contents.length;
2015 } else if (FS.isLink(node.mode)) {
2016 attr.size = node.link.length;
2017 } else {
2018 attr.size = 0;
2019 }
2020 attr.atime = new Date(node.timestamp);
2021 attr.mtime = new Date(node.timestamp);
2022 attr.ctime = new Date(node.timestamp);
2023 // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksi ze),
2024 // but this is not required by the standard.
2025 attr.blksize = 4096;
2026 attr.blocks = Math.ceil(attr.size / attr.blksize);
2027 return attr;
2028 },setattr:function (node, attr) {
2029 if (attr.mode !== undefined) {
2030 node.mode = attr.mode;
2031 }
2032 if (attr.timestamp !== undefined) {
2033 node.timestamp = attr.timestamp;
2034 }
2035 if (attr.size !== undefined) {
2036 MEMFS.ensureFlexible(node);
2037 var contents = node.contents;
2038 if (attr.size < contents.length) contents.length = attr.size;
2039 else while (attr.size > contents.length) contents.push(0);
2040 }
2041 },lookup:function (parent, name) {
2042 throw FS.genericErrors[ERRNO_CODES.ENOENT];
2043 },mknod:function (parent, name, mode, dev) {
2044 return MEMFS.createNode(parent, name, mode, dev);
2045 },rename:function (old_node, new_dir, new_name) {
2046 // if we're overwriting a directory at new_name, make sure it's empty.
2047 if (FS.isDir(old_node.mode)) {
2048 var new_node;
2049 try {
2050 new_node = FS.lookupNode(new_dir, new_name);
2051 } catch (e) {
2052 }
2053 if (new_node) {
2054 for (var i in new_node.contents) {
2055 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
2056 }
2057 }
2058 }
2059 // do the internal rewiring
2060 delete old_node.parent.contents[old_node.name];
2061 old_node.name = new_name;
2062 new_dir.contents[new_name] = old_node;
2063 old_node.parent = new_dir;
2064 },unlink:function (parent, name) {
2065 delete parent.contents[name];
2066 },rmdir:function (parent, name) {
2067 var node = FS.lookupNode(parent, name);
2068 for (var i in node.contents) {
2069 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
2070 }
2071 delete parent.contents[name];
2072 },readdir:function (node) {
2073 var entries = ['.', '..']
2074 for (var key in node.contents) {
2075 if (!node.contents.hasOwnProperty(key)) {
2076 continue;
2077 }
2078 entries.push(key);
2079 }
2080 return entries;
2081 },symlink:function (parent, newname, oldpath) {
2082 var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0 );
2083 node.link = oldpath;
2084 return node;
2085 },readlink:function (node) {
2086 if (!FS.isLink(node.mode)) {
2087 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2088 }
2089 return node.link;
2090 }},stream_ops:{read:function (stream, buffer, offset, length, position) {
2091 var contents = stream.node.contents;
2092 if (position >= contents.length)
2093 return 0;
2094 var size = Math.min(contents.length - position, length);
2095 assert(size >= 0);
2096 if (size > 8 && contents.subarray) { // non-trivial, and typed array
2097 buffer.set(contents.subarray(position, position + size), offset);
2098 } else
2099 {
2100 for (var i = 0; i < size; i++) {
2101 buffer[offset + i] = contents[position + i];
2102 }
2103 }
2104 return size;
2105 },write:function (stream, buffer, offset, length, position, canOwn) {
2106 var node = stream.node;
2107 node.timestamp = Date.now();
2108 var contents = node.contents;
2109 if (length && contents.length === 0 && position === 0 && buffer.subarr ay) {
2110 // just replace it with the new data
2111 if (canOwn && offset === 0) {
2112 node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source.
2113 node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTEN T_OWNING : MEMFS.CONTENT_FIXED;
2114 } else {
2115 node.contents = new Uint8Array(buffer.subarray(offset, offset+leng th));
2116 node.contentMode = MEMFS.CONTENT_FIXED;
2117 }
2118 return length;
2119 }
2120 MEMFS.ensureFlexible(node);
2121 var contents = node.contents;
2122 while (contents.length < position) contents.push(0);
2123 for (var i = 0; i < length; i++) {
2124 contents[position + i] = buffer[offset + i];
2125 }
2126 return length;
2127 },llseek:function (stream, offset, whence) {
2128 var position = offset;
2129 if (whence === 1) { // SEEK_CUR.
2130 position += stream.position;
2131 } else if (whence === 2) { // SEEK_END.
2132 if (FS.isFile(stream.node.mode)) {
2133 position += stream.node.contents.length;
2134 }
2135 }
2136 if (position < 0) {
2137 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2138 }
2139 stream.ungotten = [];
2140 stream.position = position;
2141 return position;
2142 },allocate:function (stream, offset, length) {
2143 MEMFS.ensureFlexible(stream.node);
2144 var contents = stream.node.contents;
2145 var limit = offset + length;
2146 while (limit > contents.length) contents.push(0);
2147 },mmap:function (stream, buffer, offset, length, position, prot, flags) {
2148 if (!FS.isFile(stream.node.mode)) {
2149 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
2150 }
2151 var ptr;
2152 var allocated;
2153 var contents = stream.node.contents;
2154 // Only make a new copy when MAP_PRIVATE is specified.
2155 if ( !(flags & 2) &&
2156 (contents.buffer === buffer || contents.buffer === buffer.buffer ) ) {
2157 // We can't emulate MAP_SHARED when the file is not backed by the bu ffer
2158 // we're mapping to (e.g. the HEAP buffer).
2159 allocated = false;
2160 ptr = contents.byteOffset;
2161 } else {
2162 // Try to avoid unnecessary slices.
2163 if (position > 0 || position + length < contents.length) {
2164 if (contents.subarray) {
2165 contents = contents.subarray(position, position + length);
2166 } else {
2167 contents = Array.prototype.slice.call(contents, position, positi on + length);
2168 }
2169 }
2170 allocated = true;
2171 ptr = _malloc(length);
2172 if (!ptr) {
2173 throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
2174 }
2175 buffer.set(contents, ptr);
2176 }
2177 return { ptr: ptr, allocated: allocated };
2178 }}};
2179
2180 var IDBFS={dbs:{},indexedDB:function () {
2181 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
2182 },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
2183 // reuse all of the core MEMFS functionality
2184 return MEMFS.mount.apply(null, arguments);
2185 },syncfs:function (mount, populate, callback) {
2186 IDBFS.getLocalSet(mount, function(err, local) {
2187 if (err) return callback(err);
2188
2189 IDBFS.getRemoteSet(mount, function(err, remote) {
2190 if (err) return callback(err);
2191
2192 var src = populate ? remote : local;
2193 var dst = populate ? local : remote;
2194
2195 IDBFS.reconcile(src, dst, callback);
2196 });
2197 });
2198 },getDB:function (name, callback) {
2199 // check the cache first
2200 var db = IDBFS.dbs[name];
2201 if (db) {
2202 return callback(null, db);
2203 }
2204
2205 var req;
2206 try {
2207 req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
2208 } catch (e) {
2209 return callback(e);
2210 }
2211 req.onupgradeneeded = function(e) {
2212 var db = e.target.result;
2213 var transaction = e.target.transaction;
2214
2215 var fileStore;
2216
2217 if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
2218 fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
2219 } else {
2220 fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
2221 }
2222
2223 fileStore.createIndex('timestamp', 'timestamp', { unique: false });
2224 };
2225 req.onsuccess = function() {
2226 db = req.result;
2227
2228 // add to the cache
2229 IDBFS.dbs[name] = db;
2230 callback(null, db);
2231 };
2232 req.onerror = function() {
2233 callback(this.error);
2234 };
2235 },getLocalSet:function (mount, callback) {
2236 var entries = {};
2237
2238 function isRealDir(p) {
2239 return p !== '.' && p !== '..';
2240 };
2241 function toAbsolute(root) {
2242 return function(p) {
2243 return PATH.join2(root, p);
2244 }
2245 };
2246
2247 var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolut e(mount.mountpoint));
2248
2249 while (check.length) {
2250 var path = check.pop();
2251 var stat;
2252
2253 try {
2254 stat = FS.stat(path);
2255 } catch (e) {
2256 return callback(e);
2257 }
2258
2259 if (FS.isDir(stat.mode)) {
2260 check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbs olute(path)));
2261 }
2262
2263 entries[path] = { timestamp: stat.mtime };
2264 }
2265
2266 return callback(null, { type: 'local', entries: entries });
2267 },getRemoteSet:function (mount, callback) {
2268 var entries = {};
2269
2270 IDBFS.getDB(mount.mountpoint, function(err, db) {
2271 if (err) return callback(err);
2272
2273 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
2274 transaction.onerror = function() { callback(this.error); };
2275
2276 var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2277 var index = store.index('timestamp');
2278
2279 index.openKeyCursor().onsuccess = function(event) {
2280 var cursor = event.target.result;
2281
2282 if (!cursor) {
2283 return callback(null, { type: 'remote', db: db, entries: entries } );
2284 }
2285
2286 entries[cursor.primaryKey] = { timestamp: cursor.key };
2287
2288 cursor.continue();
2289 };
2290 });
2291 },loadLocalEntry:function (path, callback) {
2292 var stat, node;
2293
2294 try {
2295 var lookup = FS.lookupPath(path);
2296 node = lookup.node;
2297 stat = FS.stat(path);
2298 } catch (e) {
2299 return callback(e);
2300 }
2301
2302 if (FS.isDir(stat.mode)) {
2303 return callback(null, { timestamp: stat.mtime, mode: stat.mode });
2304 } else if (FS.isFile(stat.mode)) {
2305 return callback(null, { timestamp: stat.mtime, mode: stat.mode, conten ts: node.contents });
2306 } else {
2307 return callback(new Error('node type not supported'));
2308 }
2309 },storeLocalEntry:function (path, entry, callback) {
2310 try {
2311 if (FS.isDir(entry.mode)) {
2312 FS.mkdir(path, entry.mode);
2313 } else if (FS.isFile(entry.mode)) {
2314 FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: tru e });
2315 } else {
2316 return callback(new Error('node type not supported'));
2317 }
2318
2319 FS.utime(path, entry.timestamp, entry.timestamp);
2320 } catch (e) {
2321 return callback(e);
2322 }
2323
2324 callback(null);
2325 },removeLocalEntry:function (path, callback) {
2326 try {
2327 var lookup = FS.lookupPath(path);
2328 var stat = FS.stat(path);
2329
2330 if (FS.isDir(stat.mode)) {
2331 FS.rmdir(path);
2332 } else if (FS.isFile(stat.mode)) {
2333 FS.unlink(path);
2334 }
2335 } catch (e) {
2336 return callback(e);
2337 }
2338
2339 callback(null);
2340 },loadRemoteEntry:function (store, path, callback) {
2341 var req = store.get(path);
2342 req.onsuccess = function(event) { callback(null, event.target.result); } ;
2343 req.onerror = function() { callback(this.error); };
2344 },storeRemoteEntry:function (store, path, entry, callback) {
2345 var req = store.put(entry, path);
2346 req.onsuccess = function() { callback(null); };
2347 req.onerror = function() { callback(this.error); };
2348 },removeRemoteEntry:function (store, path, callback) {
2349 var req = store.delete(path);
2350 req.onsuccess = function() { callback(null); };
2351 req.onerror = function() { callback(this.error); };
2352 },reconcile:function (src, dst, callback) {
2353 var total = 0;
2354
2355 var create = [];
2356 Object.keys(src.entries).forEach(function (key) {
2357 var e = src.entries[key];
2358 var e2 = dst.entries[key];
2359 if (!e2 || e.timestamp > e2.timestamp) {
2360 create.push(key);
2361 total++;
2362 }
2363 });
2364
2365 var remove = [];
2366 Object.keys(dst.entries).forEach(function (key) {
2367 var e = dst.entries[key];
2368 var e2 = src.entries[key];
2369 if (!e2) {
2370 remove.push(key);
2371 total++;
2372 }
2373 });
2374
2375 if (!total) {
2376 return callback(null);
2377 }
2378
2379 var errored = false;
2380 var completed = 0;
2381 var db = src.type === 'remote' ? src.db : dst.db;
2382 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
2383 var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2384
2385 function done(err) {
2386 if (err) {
2387 if (!done.errored) {
2388 done.errored = true;
2389 return callback(err);
2390 }
2391 return;
2392 }
2393 if (++completed >= total) {
2394 return callback(null);
2395 }
2396 };
2397
2398 transaction.onerror = function() { done(this.error); };
2399
2400 // sort paths in ascending order so directory entries are created
2401 // before the files inside them
2402 create.sort().forEach(function (path) {
2403 if (dst.type === 'local') {
2404 IDBFS.loadRemoteEntry(store, path, function (err, entry) {
2405 if (err) return done(err);
2406 IDBFS.storeLocalEntry(path, entry, done);
2407 });
2408 } else {
2409 IDBFS.loadLocalEntry(path, function (err, entry) {
2410 if (err) return done(err);
2411 IDBFS.storeRemoteEntry(store, path, entry, done);
2412 });
2413 }
2414 });
2415
2416 // sort paths in descending order so files are deleted before their
2417 // parent directories
2418 remove.sort().reverse().forEach(function(path) {
2419 if (dst.type === 'local') {
2420 IDBFS.removeLocalEntry(path, done);
2421 } else {
2422 IDBFS.removeRemoteEntry(store, path, done);
2423 }
2424 });
2425 }};
2426
2427 var NODEFS={isWindows:false,staticInit:function () {
2428 NODEFS.isWindows = !!process.platform.match(/^win/);
2429 },mount:function (mount) {
2430 assert(ENVIRONMENT_IS_NODE);
2431 return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
2432 },createNode:function (parent, name, mode, dev) {
2433 if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
2434 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2435 }
2436 var node = FS.createNode(parent, name, mode);
2437 node.node_ops = NODEFS.node_ops;
2438 node.stream_ops = NODEFS.stream_ops;
2439 return node;
2440 },getMode:function (path) {
2441 var stat;
2442 try {
2443 stat = fs.lstatSync(path);
2444 if (NODEFS.isWindows) {
2445 // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
2446 // propagate write bits to execute bits.
2447 stat.mode = stat.mode | ((stat.mode & 146) >> 1);
2448 }
2449 } catch (e) {
2450 if (!e.code) throw e;
2451 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2452 }
2453 return stat.mode;
2454 },realPath:function (node) {
2455 var parts = [];
2456 while (node.parent !== node) {
2457 parts.push(node.name);
2458 node = node.parent;
2459 }
2460 parts.push(node.mount.opts.root);
2461 parts.reverse();
2462 return PATH.join.apply(null, parts);
2463 },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",1 29:"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:"r s",4098:"rs+"},flagsToPermissionString:function (flags) {
2464 if (flags in NODEFS.flagsToPermissionStringMap) {
2465 return NODEFS.flagsToPermissionStringMap[flags];
2466 } else {
2467 return flags;
2468 }
2469 },node_ops:{getattr:function (node) {
2470 var path = NODEFS.realPath(node);
2471 var stat;
2472 try {
2473 stat = fs.lstatSync(path);
2474 } catch (e) {
2475 if (!e.code) throw e;
2476 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2477 }
2478 // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
2479 // See http://support.microsoft.com/kb/140365
2480 if (NODEFS.isWindows && !stat.blksize) {
2481 stat.blksize = 4096;
2482 }
2483 if (NODEFS.isWindows && !stat.blocks) {
2484 stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
2485 }
2486 return {
2487 dev: stat.dev,
2488 ino: stat.ino,
2489 mode: stat.mode,
2490 nlink: stat.nlink,
2491 uid: stat.uid,
2492 gid: stat.gid,
2493 rdev: stat.rdev,
2494 size: stat.size,
2495 atime: stat.atime,
2496 mtime: stat.mtime,
2497 ctime: stat.ctime,
2498 blksize: stat.blksize,
2499 blocks: stat.blocks
2500 };
2501 },setattr:function (node, attr) {
2502 var path = NODEFS.realPath(node);
2503 try {
2504 if (attr.mode !== undefined) {
2505 fs.chmodSync(path, attr.mode);
2506 // update the common node structure mode as well
2507 node.mode = attr.mode;
2508 }
2509 if (attr.timestamp !== undefined) {
2510 var date = new Date(attr.timestamp);
2511 fs.utimesSync(path, date, date);
2512 }
2513 if (attr.size !== undefined) {
2514 fs.truncateSync(path, attr.size);
2515 }
2516 } catch (e) {
2517 if (!e.code) throw e;
2518 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2519 }
2520 },lookup:function (parent, name) {
2521 var path = PATH.join2(NODEFS.realPath(parent), name);
2522 var mode = NODEFS.getMode(path);
2523 return NODEFS.createNode(parent, name, mode);
2524 },mknod:function (parent, name, mode, dev) {
2525 var node = NODEFS.createNode(parent, name, mode, dev);
2526 // create the backing node for this in the fs root as well
2527 var path = NODEFS.realPath(node);
2528 try {
2529 if (FS.isDir(node.mode)) {
2530 fs.mkdirSync(path, node.mode);
2531 } else {
2532 fs.writeFileSync(path, '', { mode: node.mode });
2533 }
2534 } catch (e) {
2535 if (!e.code) throw e;
2536 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2537 }
2538 return node;
2539 },rename:function (oldNode, newDir, newName) {
2540 var oldPath = NODEFS.realPath(oldNode);
2541 var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
2542 try {
2543 fs.renameSync(oldPath, newPath);
2544 } catch (e) {
2545 if (!e.code) throw e;
2546 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2547 }
2548 },unlink:function (parent, name) {
2549 var path = PATH.join2(NODEFS.realPath(parent), name);
2550 try {
2551 fs.unlinkSync(path);
2552 } catch (e) {
2553 if (!e.code) throw e;
2554 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2555 }
2556 },rmdir:function (parent, name) {
2557 var path = PATH.join2(NODEFS.realPath(parent), name);
2558 try {
2559 fs.rmdirSync(path);
2560 } catch (e) {
2561 if (!e.code) throw e;
2562 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2563 }
2564 },readdir:function (node) {
2565 var path = NODEFS.realPath(node);
2566 try {
2567 return fs.readdirSync(path);
2568 } catch (e) {
2569 if (!e.code) throw e;
2570 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2571 }
2572 },symlink:function (parent, newName, oldPath) {
2573 var newPath = PATH.join2(NODEFS.realPath(parent), newName);
2574 try {
2575 fs.symlinkSync(oldPath, newPath);
2576 } catch (e) {
2577 if (!e.code) throw e;
2578 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2579 }
2580 },readlink:function (node) {
2581 var path = NODEFS.realPath(node);
2582 try {
2583 return fs.readlinkSync(path);
2584 } catch (e) {
2585 if (!e.code) throw e;
2586 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2587 }
2588 }},stream_ops:{open:function (stream) {
2589 var path = NODEFS.realPath(stream.node);
2590 try {
2591 if (FS.isFile(stream.node.mode)) {
2592 stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stre am.flags));
2593 }
2594 } catch (e) {
2595 if (!e.code) throw e;
2596 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2597 }
2598 },close:function (stream) {
2599 try {
2600 if (FS.isFile(stream.node.mode) && stream.nfd) {
2601 fs.closeSync(stream.nfd);
2602 }
2603 } catch (e) {
2604 if (!e.code) throw e;
2605 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2606 }
2607 },read:function (stream, buffer, offset, length, position) {
2608 // FIXME this is terrible.
2609 var nbuffer = new Buffer(length);
2610 var res;
2611 try {
2612 res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
2613 } catch (e) {
2614 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2615 }
2616 if (res > 0) {
2617 for (var i = 0; i < res; i++) {
2618 buffer[offset + i] = nbuffer[i];
2619 }
2620 }
2621 return res;
2622 },write:function (stream, buffer, offset, length, position) {
2623 // FIXME this is terrible.
2624 var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
2625 var res;
2626 try {
2627 res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
2628 } catch (e) {
2629 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2630 }
2631 return res;
2632 },llseek:function (stream, offset, whence) {
2633 var position = offset;
2634 if (whence === 1) { // SEEK_CUR.
2635 position += stream.position;
2636 } else if (whence === 2) { // SEEK_END.
2637 if (FS.isFile(stream.node.mode)) {
2638 try {
2639 var stat = fs.fstatSync(stream.nfd);
2640 position += stat.size;
2641 } catch (e) {
2642 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2643 }
2644 }
2645 }
2646
2647 if (position < 0) {
2648 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2649 }
2650
2651 stream.position = position;
2652 return position;
2653 }}};
2654
2655 var _stdin=allocate(1, "i32*", ALLOC_STATIC);
2656
2657 var _stdout=allocate(1, "i32*", ALLOC_STATIC);
2658
2659 var _stderr=allocate(1, "i32*", ALLOC_STATIC);
2660
2661 function _fflush(stream) {
2662 // int fflush(FILE *stream);
2663 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
2664 // we don't currently perform any user-space buffering of data
2665 }var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable :null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,g enericErrors:{},handleFSError:function (e) {
2666 if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
2667 return ___setErrNo(e.errno);
2668 },lookupPath:function (path, opts) {
2669 path = PATH.resolve(FS.cwd(), path);
2670 opts = opts || {};
2671
2672 var defaults = {
2673 follow_mount: true,
2674 recurse_count: 0
2675 };
2676 for (var key in defaults) {
2677 if (opts[key] === undefined) {
2678 opts[key] = defaults[key];
2679 }
2680 }
2681
2682 if (opts.recurse_count > 8) { // max recursive lookup of 8
2683 throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2684 }
2685
2686 // split the path
2687 var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
2688 return !!p;
2689 }), false);
2690
2691 // start at the root
2692 var current = FS.root;
2693 var current_path = '/';
2694
2695 for (var i = 0; i < parts.length; i++) {
2696 var islast = (i === parts.length-1);
2697 if (islast && opts.parent) {
2698 // stop resolving
2699 break;
2700 }
2701
2702 current = FS.lookupNode(current, parts[i]);
2703 current_path = PATH.join2(current_path, parts[i]);
2704
2705 // jump to the mount's root node if this is a mountpoint
2706 if (FS.isMountpoint(current)) {
2707 if (!islast || (islast && opts.follow_mount)) {
2708 current = current.mounted.root;
2709 }
2710 }
2711
2712 // by default, lookupPath will not follow a symlink if it is the final path component.
2713 // setting opts.follow = true will override this behavior.
2714 if (!islast || opts.follow) {
2715 var count = 0;
2716 while (FS.isLink(current.mode)) {
2717 var link = FS.readlink(current_path);
2718 current_path = PATH.resolve(PATH.dirname(current_path), link);
2719
2720 var lookup = FS.lookupPath(current_path, { recurse_count: opts.rec urse_count });
2721 current = lookup.node;
2722
2723 if (count++ > 40) { // limit max consecutive symlinks to 40 (SYML OOP_MAX).
2724 throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2725 }
2726 }
2727 }
2728 }
2729
2730 return { path: current_path, node: current };
2731 },getPath:function (node) {
2732 var path;
2733 while (true) {
2734 if (FS.isRoot(node)) {
2735 var mount = node.mount.mountpoint;
2736 if (!path) return mount;
2737 return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
2738 }
2739 path = path ? node.name + '/' + path : node.name;
2740 node = node.parent;
2741 }
2742 },hashName:function (parentid, name) {
2743 var hash = 0;
2744
2745
2746 for (var i = 0; i < name.length; i++) {
2747 hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
2748 }
2749 return ((parentid + hash) >>> 0) % FS.nameTable.length;
2750 },hashAddNode:function (node) {
2751 var hash = FS.hashName(node.parent.id, node.name);
2752 node.name_next = FS.nameTable[hash];
2753 FS.nameTable[hash] = node;
2754 },hashRemoveNode:function (node) {
2755 var hash = FS.hashName(node.parent.id, node.name);
2756 if (FS.nameTable[hash] === node) {
2757 FS.nameTable[hash] = node.name_next;
2758 } else {
2759 var current = FS.nameTable[hash];
2760 while (current) {
2761 if (current.name_next === node) {
2762 current.name_next = node.name_next;
2763 break;
2764 }
2765 current = current.name_next;
2766 }
2767 }
2768 },lookupNode:function (parent, name) {
2769 var err = FS.mayLookup(parent);
2770 if (err) {
2771 throw new FS.ErrnoError(err);
2772 }
2773 var hash = FS.hashName(parent.id, name);
2774 for (var node = FS.nameTable[hash]; node; node = node.name_next) {
2775 var nodeName = node.name;
2776 if (node.parent.id === parent.id && nodeName === name) {
2777 return node;
2778 }
2779 }
2780 // if we failed to find it in the cache, call into the VFS
2781 return FS.lookup(parent, name);
2782 },createNode:function (parent, name, mode, rdev) {
2783 if (!FS.FSNode) {
2784 FS.FSNode = function(parent, name, mode, rdev) {
2785 if (!parent) {
2786 parent = this; // root node sets parent to itself
2787 }
2788 this.parent = parent;
2789 this.mount = parent.mount;
2790 this.mounted = null;
2791 this.id = FS.nextInode++;
2792 this.name = name;
2793 this.mode = mode;
2794 this.node_ops = {};
2795 this.stream_ops = {};
2796 this.rdev = rdev;
2797 };
2798
2799 FS.FSNode.prototype = {};
2800
2801 // compatibility
2802 var readMode = 292 | 73;
2803 var writeMode = 146;
2804
2805 // NOTE we must use Object.defineProperties instead of individual call s to
2806 // Object.defineProperty in order to make closure compiler happy
2807 Object.defineProperties(FS.FSNode.prototype, {
2808 read: {
2809 get: function() { return (this.mode & readMode) === readMode; },
2810 set: function(val) { val ? this.mode |= readMode : this.mode &= ~r eadMode; }
2811 },
2812 write: {
2813 get: function() { return (this.mode & writeMode) === writeMode; },
2814 set: function(val) { val ? this.mode |= writeMode : this.mode &= ~ writeMode; }
2815 },
2816 isFolder: {
2817 get: function() { return FS.isDir(this.mode); },
2818 },
2819 isDevice: {
2820 get: function() { return FS.isChrdev(this.mode); },
2821 },
2822 });
2823 }
2824
2825 var node = new FS.FSNode(parent, name, mode, rdev);
2826
2827 FS.hashAddNode(node);
2828
2829 return node;
2830 },destroyNode:function (node) {
2831 FS.hashRemoveNode(node);
2832 },isRoot:function (node) {
2833 return node === node.parent;
2834 },isMountpoint:function (node) {
2835 return !!node.mounted;
2836 },isFile:function (mode) {
2837 return (mode & 61440) === 32768;
2838 },isDir:function (mode) {
2839 return (mode & 61440) === 16384;
2840 },isLink:function (mode) {
2841 return (mode & 61440) === 40960;
2842 },isChrdev:function (mode) {
2843 return (mode & 61440) === 8192;
2844 },isBlkdev:function (mode) {
2845 return (mode & 61440) === 24576;
2846 },isFIFO:function (mode) {
2847 return (mode & 61440) === 4096;
2848 },isSocket:function (mode) {
2849 return (mode & 49152) === 49152;
2850 },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) {
2851 var flags = FS.flagModes[str];
2852 if (typeof flags === 'undefined') {
2853 throw new Error('Unknown file open mode: ' + str);
2854 }
2855 return flags;
2856 },flagsToPermissionString:function (flag) {
2857 var accmode = flag & 2097155;
2858 var perms = ['r', 'w', 'rw'][accmode];
2859 if ((flag & 512)) {
2860 perms += 'w';
2861 }
2862 return perms;
2863 },nodePermissions:function (node, perms) {
2864 if (FS.ignorePermissions) {
2865 return 0;
2866 }
2867 // return 0 if any user, group or owner bits are set.
2868 if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
2869 return ERRNO_CODES.EACCES;
2870 } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
2871 return ERRNO_CODES.EACCES;
2872 } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
2873 return ERRNO_CODES.EACCES;
2874 }
2875 return 0;
2876 },mayLookup:function (dir) {
2877 return FS.nodePermissions(dir, 'x');
2878 },mayCreate:function (dir, name) {
2879 try {
2880 var node = FS.lookupNode(dir, name);
2881 return ERRNO_CODES.EEXIST;
2882 } catch (e) {
2883 }
2884 return FS.nodePermissions(dir, 'wx');
2885 },mayDelete:function (dir, name, isdir) {
2886 var node;
2887 try {
2888 node = FS.lookupNode(dir, name);
2889 } catch (e) {
2890 return e.errno;
2891 }
2892 var err = FS.nodePermissions(dir, 'wx');
2893 if (err) {
2894 return err;
2895 }
2896 if (isdir) {
2897 if (!FS.isDir(node.mode)) {
2898 return ERRNO_CODES.ENOTDIR;
2899 }
2900 if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
2901 return ERRNO_CODES.EBUSY;
2902 }
2903 } else {
2904 if (FS.isDir(node.mode)) {
2905 return ERRNO_CODES.EISDIR;
2906 }
2907 }
2908 return 0;
2909 },mayOpen:function (node, flags) {
2910 if (!node) {
2911 return ERRNO_CODES.ENOENT;
2912 }
2913 if (FS.isLink(node.mode)) {
2914 return ERRNO_CODES.ELOOP;
2915 } else if (FS.isDir(node.mode)) {
2916 if ((flags & 2097155) !== 0 || // opening for write
2917 (flags & 512)) {
2918 return ERRNO_CODES.EISDIR;
2919 }
2920 }
2921 return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
2922 },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
2923 fd_start = fd_start || 0;
2924 fd_end = fd_end || FS.MAX_OPEN_FDS;
2925 for (var fd = fd_start; fd <= fd_end; fd++) {
2926 if (!FS.streams[fd]) {
2927 return fd;
2928 }
2929 }
2930 throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
2931 },getStream:function (fd) {
2932 return FS.streams[fd];
2933 },createStream:function (stream, fd_start, fd_end) {
2934 if (!FS.FSStream) {
2935 FS.FSStream = function(){};
2936 FS.FSStream.prototype = {};
2937 // compatibility
2938 Object.defineProperties(FS.FSStream.prototype, {
2939 object: {
2940 get: function() { return this.node; },
2941 set: function(val) { this.node = val; }
2942 },
2943 isRead: {
2944 get: function() { return (this.flags & 2097155) !== 1; }
2945 },
2946 isWrite: {
2947 get: function() { return (this.flags & 2097155) !== 0; }
2948 },
2949 isAppend: {
2950 get: function() { return (this.flags & 1024); }
2951 }
2952 });
2953 }
2954 if (0) {
2955 // reuse the object
2956 stream.__proto__ = FS.FSStream.prototype;
2957 } else {
2958 var newStream = new FS.FSStream();
2959 for (var p in stream) {
2960 newStream[p] = stream[p];
2961 }
2962 stream = newStream;
2963 }
2964 var fd = FS.nextfd(fd_start, fd_end);
2965 stream.fd = fd;
2966 FS.streams[fd] = stream;
2967 return stream;
2968 },closeStream:function (fd) {
2969 FS.streams[fd] = null;
2970 },getStreamFromPtr:function (ptr) {
2971 return FS.streams[ptr - 1];
2972 },getPtrForStream:function (stream) {
2973 return stream ? stream.fd + 1 : 0;
2974 },chrdev_stream_ops:{open:function (stream) {
2975 var device = FS.getDevice(stream.node.rdev);
2976 // override node's stream ops with the device's
2977 stream.stream_ops = device.stream_ops;
2978 // forward the open call
2979 if (stream.stream_ops.open) {
2980 stream.stream_ops.open(stream);
2981 }
2982 },llseek:function () {
2983 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
2984 }},major:function (dev) {
2985 return ((dev) >> 8);
2986 },minor:function (dev) {
2987 return ((dev) & 0xff);
2988 },makedev:function (ma, mi) {
2989 return ((ma) << 8 | (mi));
2990 },registerDevice:function (dev, ops) {
2991 FS.devices[dev] = { stream_ops: ops };
2992 },getDevice:function (dev) {
2993 return FS.devices[dev];
2994 },getMounts:function (mount) {
2995 var mounts = [];
2996 var check = [mount];
2997
2998 while (check.length) {
2999 var m = check.pop();
3000
3001 mounts.push(m);
3002
3003 check.push.apply(check, m.mounts);
3004 }
3005
3006 return mounts;
3007 },syncfs:function (populate, callback) {
3008 if (typeof(populate) === 'function') {
3009 callback = populate;
3010 populate = false;
3011 }
3012
3013 var mounts = FS.getMounts(FS.root.mount);
3014 var completed = 0;
3015
3016 function done(err) {
3017 if (err) {
3018 if (!done.errored) {
3019 done.errored = true;
3020 return callback(err);
3021 }
3022 return;
3023 }
3024 if (++completed >= mounts.length) {
3025 callback(null);
3026 }
3027 };
3028
3029 // sync all mounts
3030 mounts.forEach(function (mount) {
3031 if (!mount.type.syncfs) {
3032 return done(null);
3033 }
3034 mount.type.syncfs(mount, populate, done);
3035 });
3036 },mount:function (type, opts, mountpoint) {
3037 var root = mountpoint === '/';
3038 var pseudo = !mountpoint;
3039 var node;
3040
3041 if (root && FS.root) {
3042 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3043 } else if (!root && !pseudo) {
3044 var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
3045
3046 mountpoint = lookup.path; // use the absolute path
3047 node = lookup.node;
3048
3049 if (FS.isMountpoint(node)) {
3050 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3051 }
3052
3053 if (!FS.isDir(node.mode)) {
3054 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3055 }
3056 }
3057
3058 var mount = {
3059 type: type,
3060 opts: opts,
3061 mountpoint: mountpoint,
3062 mounts: []
3063 };
3064
3065 // create a root node for the fs
3066 var mountRoot = type.mount(mount);
3067 mountRoot.mount = mount;
3068 mount.root = mountRoot;
3069
3070 if (root) {
3071 FS.root = mountRoot;
3072 } else if (node) {
3073 // set as a mountpoint
3074 node.mounted = mount;
3075
3076 // add the new mount to the current mount's children
3077 if (node.mount) {
3078 node.mount.mounts.push(mount);
3079 }
3080 }
3081
3082 return mountRoot;
3083 },unmount:function (mountpoint) {
3084 var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
3085
3086 if (!FS.isMountpoint(lookup.node)) {
3087 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3088 }
3089
3090 // destroy the nodes for this mount, and all its child mounts
3091 var node = lookup.node;
3092 var mount = node.mounted;
3093 var mounts = FS.getMounts(mount);
3094
3095 Object.keys(FS.nameTable).forEach(function (hash) {
3096 var current = FS.nameTable[hash];
3097
3098 while (current) {
3099 var next = current.name_next;
3100
3101 if (mounts.indexOf(current.mount) !== -1) {
3102 FS.destroyNode(current);
3103 }
3104
3105 current = next;
3106 }
3107 });
3108
3109 // no longer a mountpoint
3110 node.mounted = null;
3111
3112 // remove this mount from the child mounts
3113 var idx = node.mount.mounts.indexOf(mount);
3114 assert(idx !== -1);
3115 node.mount.mounts.splice(idx, 1);
3116 },lookup:function (parent, name) {
3117 return parent.node_ops.lookup(parent, name);
3118 },mknod:function (path, mode, dev) {
3119 var lookup = FS.lookupPath(path, { parent: true });
3120 var parent = lookup.node;
3121 var name = PATH.basename(path);
3122 var err = FS.mayCreate(parent, name);
3123 if (err) {
3124 throw new FS.ErrnoError(err);
3125 }
3126 if (!parent.node_ops.mknod) {
3127 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3128 }
3129 return parent.node_ops.mknod(parent, name, mode, dev);
3130 },create:function (path, mode) {
3131 mode = mode !== undefined ? mode : 438 /* 0666 */;
3132 mode &= 4095;
3133 mode |= 32768;
3134 return FS.mknod(path, mode, 0);
3135 },mkdir:function (path, mode) {
3136 mode = mode !== undefined ? mode : 511 /* 0777 */;
3137 mode &= 511 | 512;
3138 mode |= 16384;
3139 return FS.mknod(path, mode, 0);
3140 },mkdev:function (path, mode, dev) {
3141 if (typeof(dev) === 'undefined') {
3142 dev = mode;
3143 mode = 438 /* 0666 */;
3144 }
3145 mode |= 8192;
3146 return FS.mknod(path, mode, dev);
3147 },symlink:function (oldpath, newpath) {
3148 var lookup = FS.lookupPath(newpath, { parent: true });
3149 var parent = lookup.node;
3150 var newname = PATH.basename(newpath);
3151 var err = FS.mayCreate(parent, newname);
3152 if (err) {
3153 throw new FS.ErrnoError(err);
3154 }
3155 if (!parent.node_ops.symlink) {
3156 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3157 }
3158 return parent.node_ops.symlink(parent, newname, oldpath);
3159 },rename:function (old_path, new_path) {
3160 var old_dirname = PATH.dirname(old_path);
3161 var new_dirname = PATH.dirname(new_path);
3162 var old_name = PATH.basename(old_path);
3163 var new_name = PATH.basename(new_path);
3164 // parents must exist
3165 var lookup, old_dir, new_dir;
3166 try {
3167 lookup = FS.lookupPath(old_path, { parent: true });
3168 old_dir = lookup.node;
3169 lookup = FS.lookupPath(new_path, { parent: true });
3170 new_dir = lookup.node;
3171 } catch (e) {
3172 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3173 }
3174 // need to be part of the same mount
3175 if (old_dir.mount !== new_dir.mount) {
3176 throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
3177 }
3178 // source must exist
3179 var old_node = FS.lookupNode(old_dir, old_name);
3180 // old path should not be an ancestor of the new path
3181 var relative = PATH.relative(old_path, new_dirname);
3182 if (relative.charAt(0) !== '.') {
3183 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3184 }
3185 // new path should not be an ancestor of the old path
3186 relative = PATH.relative(new_path, old_dirname);
3187 if (relative.charAt(0) !== '.') {
3188 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
3189 }
3190 // see if the new path already exists
3191 var new_node;
3192 try {
3193 new_node = FS.lookupNode(new_dir, new_name);
3194 } catch (e) {
3195 // not fatal
3196 }
3197 // early out if nothing needs to change
3198 if (old_node === new_node) {
3199 return;
3200 }
3201 // we'll need to delete the old entry
3202 var isdir = FS.isDir(old_node.mode);
3203 var err = FS.mayDelete(old_dir, old_name, isdir);
3204 if (err) {
3205 throw new FS.ErrnoError(err);
3206 }
3207 // need delete permissions if we'll be overwriting.
3208 // need create permissions if new doesn't already exist.
3209 err = new_node ?
3210 FS.mayDelete(new_dir, new_name, isdir) :
3211 FS.mayCreate(new_dir, new_name);
3212 if (err) {
3213 throw new FS.ErrnoError(err);
3214 }
3215 if (!old_dir.node_ops.rename) {
3216 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3217 }
3218 if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node)) ) {
3219 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3220 }
3221 // if we are going to change the parent, check write permissions
3222 if (new_dir !== old_dir) {
3223 err = FS.nodePermissions(old_dir, 'w');
3224 if (err) {
3225 throw new FS.ErrnoError(err);
3226 }
3227 }
3228 // remove the node from the lookup hash
3229 FS.hashRemoveNode(old_node);
3230 // do the underlying fs rename
3231 try {
3232 old_dir.node_ops.rename(old_node, new_dir, new_name);
3233 } catch (e) {
3234 throw e;
3235 } finally {
3236 // add the node back to the hash (in case node_ops.rename
3237 // changed its name)
3238 FS.hashAddNode(old_node);
3239 }
3240 },rmdir:function (path) {
3241 var lookup = FS.lookupPath(path, { parent: true });
3242 var parent = lookup.node;
3243 var name = PATH.basename(path);
3244 var node = FS.lookupNode(parent, name);
3245 var err = FS.mayDelete(parent, name, true);
3246 if (err) {
3247 throw new FS.ErrnoError(err);
3248 }
3249 if (!parent.node_ops.rmdir) {
3250 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3251 }
3252 if (FS.isMountpoint(node)) {
3253 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3254 }
3255 parent.node_ops.rmdir(parent, name);
3256 FS.destroyNode(node);
3257 },readdir:function (path) {
3258 var lookup = FS.lookupPath(path, { follow: true });
3259 var node = lookup.node;
3260 if (!node.node_ops.readdir) {
3261 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3262 }
3263 return node.node_ops.readdir(node);
3264 },unlink:function (path) {
3265 var lookup = FS.lookupPath(path, { parent: true });
3266 var parent = lookup.node;
3267 var name = PATH.basename(path);
3268 var node = FS.lookupNode(parent, name);
3269 var err = FS.mayDelete(parent, name, false);
3270 if (err) {
3271 // POSIX says unlink should set EPERM, not EISDIR
3272 if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM;
3273 throw new FS.ErrnoError(err);
3274 }
3275 if (!parent.node_ops.unlink) {
3276 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3277 }
3278 if (FS.isMountpoint(node)) {
3279 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3280 }
3281 parent.node_ops.unlink(parent, name);
3282 FS.destroyNode(node);
3283 },readlink:function (path) {
3284 var lookup = FS.lookupPath(path);
3285 var link = lookup.node;
3286 if (!link.node_ops.readlink) {
3287 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3288 }
3289 return link.node_ops.readlink(link);
3290 },stat:function (path, dontFollow) {
3291 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3292 var node = lookup.node;
3293 if (!node.node_ops.getattr) {
3294 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3295 }
3296 return node.node_ops.getattr(node);
3297 },lstat:function (path) {
3298 return FS.stat(path, true);
3299 },chmod:function (path, mode, dontFollow) {
3300 var node;
3301 if (typeof path === 'string') {
3302 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3303 node = lookup.node;
3304 } else {
3305 node = path;
3306 }
3307 if (!node.node_ops.setattr) {
3308 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3309 }
3310 node.node_ops.setattr(node, {
3311 mode: (mode & 4095) | (node.mode & ~4095),
3312 timestamp: Date.now()
3313 });
3314 },lchmod:function (path, mode) {
3315 FS.chmod(path, mode, true);
3316 },fchmod:function (fd, mode) {
3317 var stream = FS.getStream(fd);
3318 if (!stream) {
3319 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3320 }
3321 FS.chmod(stream.node, mode);
3322 },chown:function (path, uid, gid, dontFollow) {
3323 var node;
3324 if (typeof path === 'string') {
3325 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3326 node = lookup.node;
3327 } else {
3328 node = path;
3329 }
3330 if (!node.node_ops.setattr) {
3331 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3332 }
3333 node.node_ops.setattr(node, {
3334 timestamp: Date.now()
3335 // we ignore the uid / gid for now
3336 });
3337 },lchown:function (path, uid, gid) {
3338 FS.chown(path, uid, gid, true);
3339 },fchown:function (fd, uid, gid) {
3340 var stream = FS.getStream(fd);
3341 if (!stream) {
3342 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3343 }
3344 FS.chown(stream.node, uid, gid);
3345 },truncate:function (path, len) {
3346 if (len < 0) {
3347 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3348 }
3349 var node;
3350 if (typeof path === 'string') {
3351 var lookup = FS.lookupPath(path, { follow: true });
3352 node = lookup.node;
3353 } else {
3354 node = path;
3355 }
3356 if (!node.node_ops.setattr) {
3357 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3358 }
3359 if (FS.isDir(node.mode)) {
3360 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3361 }
3362 if (!FS.isFile(node.mode)) {
3363 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3364 }
3365 var err = FS.nodePermissions(node, 'w');
3366 if (err) {
3367 throw new FS.ErrnoError(err);
3368 }
3369 node.node_ops.setattr(node, {
3370 size: len,
3371 timestamp: Date.now()
3372 });
3373 },ftruncate:function (fd, len) {
3374 var stream = FS.getStream(fd);
3375 if (!stream) {
3376 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3377 }
3378 if ((stream.flags & 2097155) === 0) {
3379 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3380 }
3381 FS.truncate(stream.node, len);
3382 },utime:function (path, atime, mtime) {
3383 var lookup = FS.lookupPath(path, { follow: true });
3384 var node = lookup.node;
3385 node.node_ops.setattr(node, {
3386 timestamp: Math.max(atime, mtime)
3387 });
3388 },open:function (path, flags, mode, fd_start, fd_end) {
3389 flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
3390 mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode;
3391 if ((flags & 64)) {
3392 mode = (mode & 4095) | 32768;
3393 } else {
3394 mode = 0;
3395 }
3396 var node;
3397 if (typeof path === 'object') {
3398 node = path;
3399 } else {
3400 path = PATH.normalize(path);
3401 try {
3402 var lookup = FS.lookupPath(path, {
3403 follow: !(flags & 131072)
3404 });
3405 node = lookup.node;
3406 } catch (e) {
3407 // ignore
3408 }
3409 }
3410 // perhaps we need to create the node
3411 if ((flags & 64)) {
3412 if (node) {
3413 // if O_CREAT and O_EXCL are set, error out if the node already exis ts
3414 if ((flags & 128)) {
3415 throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
3416 }
3417 } else {
3418 // node doesn't exist, try to create it
3419 node = FS.mknod(path, mode, 0);
3420 }
3421 }
3422 if (!node) {
3423 throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
3424 }
3425 // can't truncate a device
3426 if (FS.isChrdev(node.mode)) {
3427 flags &= ~512;
3428 }
3429 // check permissions
3430 var err = FS.mayOpen(node, flags);
3431 if (err) {
3432 throw new FS.ErrnoError(err);
3433 }
3434 // do truncation if necessary
3435 if ((flags & 512)) {
3436 FS.truncate(node, 0);
3437 }
3438 // we've already handled these, don't pass down to the underlying vfs
3439 flags &= ~(128 | 512);
3440
3441 // register the stream with the filesystem
3442 var stream = FS.createStream({
3443 node: node,
3444 path: FS.getPath(node), // we want the absolute path to the node
3445 flags: flags,
3446 seekable: true,
3447 position: 0,
3448 stream_ops: node.stream_ops,
3449 // used by the file family libc calls (fopen, fwrite, ferror, etc.)
3450 ungotten: [],
3451 error: false
3452 }, fd_start, fd_end);
3453 // call the new stream's open function
3454 if (stream.stream_ops.open) {
3455 stream.stream_ops.open(stream);
3456 }
3457 if (Module['logReadFiles'] && !(flags & 1)) {
3458 if (!FS.readFiles) FS.readFiles = {};
3459 if (!(path in FS.readFiles)) {
3460 FS.readFiles[path] = 1;
3461 Module['printErr']('read file: ' + path);
3462 }
3463 }
3464 return stream;
3465 },close:function (stream) {
3466 try {
3467 if (stream.stream_ops.close) {
3468 stream.stream_ops.close(stream);
3469 }
3470 } catch (e) {
3471 throw e;
3472 } finally {
3473 FS.closeStream(stream.fd);
3474 }
3475 },llseek:function (stream, offset, whence) {
3476 if (!stream.seekable || !stream.stream_ops.llseek) {
3477 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3478 }
3479 return stream.stream_ops.llseek(stream, offset, whence);
3480 },read:function (stream, buffer, offset, length, position) {
3481 if (length < 0 || position < 0) {
3482 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3483 }
3484 if ((stream.flags & 2097155) === 1) {
3485 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3486 }
3487 if (FS.isDir(stream.node.mode)) {
3488 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3489 }
3490 if (!stream.stream_ops.read) {
3491 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3492 }
3493 var seeking = true;
3494 if (typeof position === 'undefined') {
3495 position = stream.position;
3496 seeking = false;
3497 } else if (!stream.seekable) {
3498 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3499 }
3500 var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, p osition);
3501 if (!seeking) stream.position += bytesRead;
3502 return bytesRead;
3503 },write:function (stream, buffer, offset, length, position, canOwn) {
3504 if (length < 0 || position < 0) {
3505 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3506 }
3507 if ((stream.flags & 2097155) === 0) {
3508 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3509 }
3510 if (FS.isDir(stream.node.mode)) {
3511 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3512 }
3513 if (!stream.stream_ops.write) {
3514 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3515 }
3516 var seeking = true;
3517 if (typeof position === 'undefined') {
3518 position = stream.position;
3519 seeking = false;
3520 } else if (!stream.seekable) {
3521 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3522 }
3523 if (stream.flags & 1024) {
3524 // seek to the end before writing in append mode
3525 FS.llseek(stream, 0, 2);
3526 }
3527 var bytesWritten = stream.stream_ops.write(stream, buffer, offset, lengt h, position, canOwn);
3528 if (!seeking) stream.position += bytesWritten;
3529 return bytesWritten;
3530 },allocate:function (stream, offset, length) {
3531 if (offset < 0 || length <= 0) {
3532 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3533 }
3534 if ((stream.flags & 2097155) === 0) {
3535 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3536 }
3537 if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
3538 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3539 }
3540 if (!stream.stream_ops.allocate) {
3541 throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
3542 }
3543 stream.stream_ops.allocate(stream, offset, length);
3544 },mmap:function (stream, buffer, offset, length, position, prot, flags) {
3545 // TODO if PROT is PROT_WRITE, make sure we have write access
3546 if ((stream.flags & 2097155) === 1) {
3547 throw new FS.ErrnoError(ERRNO_CODES.EACCES);
3548 }
3549 if (!stream.stream_ops.mmap) {
3550 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3551 }
3552 return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
3553 },ioctl:function (stream, cmd, arg) {
3554 if (!stream.stream_ops.ioctl) {
3555 throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
3556 }
3557 return stream.stream_ops.ioctl(stream, cmd, arg);
3558 },readFile:function (path, opts) {
3559 opts = opts || {};
3560 opts.flags = opts.flags || 'r';
3561 opts.encoding = opts.encoding || 'binary';
3562 if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
3563 throw new Error('Invalid encoding type "' + opts.encoding + '"');
3564 }
3565 var ret;
3566 var stream = FS.open(path, opts.flags);
3567 var stat = FS.stat(path);
3568 var length = stat.size;
3569 var buf = new Uint8Array(length);
3570 FS.read(stream, buf, 0, length, 0);
3571 if (opts.encoding === 'utf8') {
3572 ret = '';
3573 var utf8 = new Runtime.UTF8Processor();
3574 for (var i = 0; i < length; i++) {
3575 ret += utf8.processCChar(buf[i]);
3576 }
3577 } else if (opts.encoding === 'binary') {
3578 ret = buf;
3579 }
3580 FS.close(stream);
3581 return ret;
3582 },writeFile:function (path, data, opts) {
3583 opts = opts || {};
3584 opts.flags = opts.flags || 'w';
3585 opts.encoding = opts.encoding || 'utf8';
3586 if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
3587 throw new Error('Invalid encoding type "' + opts.encoding + '"');
3588 }
3589 var stream = FS.open(path, opts.flags, opts.mode);
3590 if (opts.encoding === 'utf8') {
3591 var utf8 = new Runtime.UTF8Processor();
3592 var buf = new Uint8Array(utf8.processJSString(data));
3593 FS.write(stream, buf, 0, buf.length, 0, opts.canOwn);
3594 } else if (opts.encoding === 'binary') {
3595 FS.write(stream, data, 0, data.length, 0, opts.canOwn);
3596 }
3597 FS.close(stream);
3598 },cwd:function () {
3599 return FS.currentPath;
3600 },chdir:function (path) {
3601 var lookup = FS.lookupPath(path, { follow: true });
3602 if (!FS.isDir(lookup.node.mode)) {
3603 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3604 }
3605 var err = FS.nodePermissions(lookup.node, 'x');
3606 if (err) {
3607 throw new FS.ErrnoError(err);
3608 }
3609 FS.currentPath = lookup.path;
3610 },createDefaultDirectories:function () {
3611 FS.mkdir('/tmp');
3612 },createDefaultDevices:function () {
3613 // create /dev
3614 FS.mkdir('/dev');
3615 // setup /dev/null
3616 FS.registerDevice(FS.makedev(1, 3), {
3617 read: function() { return 0; },
3618 write: function() { return 0; }
3619 });
3620 FS.mkdev('/dev/null', FS.makedev(1, 3));
3621 // setup /dev/tty and /dev/tty1
3622 // stderr needs to print output using Module['printErr']
3623 // so we register a second tty just for it.
3624 TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
3625 TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
3626 FS.mkdev('/dev/tty', FS.makedev(5, 0));
3627 FS.mkdev('/dev/tty1', FS.makedev(6, 0));
3628 // we're not going to emulate the actual shm device,
3629 // just create the tmp dirs that reside in it commonly
3630 FS.mkdir('/dev/shm');
3631 FS.mkdir('/dev/shm/tmp');
3632 },createStandardStreams:function () {
3633 // TODO deprecate the old functionality of a single
3634 // input / output callback and that utilizes FS.createDevice
3635 // and instead require a unique set of stream ops
3636
3637 // by default, we symlink the standard streams to the
3638 // default tty devices. however, if the standard streams
3639 // have been overwritten we create a unique device for
3640 // them instead.
3641 if (Module['stdin']) {
3642 FS.createDevice('/dev', 'stdin', Module['stdin']);
3643 } else {
3644 FS.symlink('/dev/tty', '/dev/stdin');
3645 }
3646 if (Module['stdout']) {
3647 FS.createDevice('/dev', 'stdout', null, Module['stdout']);
3648 } else {
3649 FS.symlink('/dev/tty', '/dev/stdout');
3650 }
3651 if (Module['stderr']) {
3652 FS.createDevice('/dev', 'stderr', null, Module['stderr']);
3653 } else {
3654 FS.symlink('/dev/tty1', '/dev/stderr');
3655 }
3656
3657 // open default streams for the stdin, stdout and stderr devices
3658 var stdin = FS.open('/dev/stdin', 'r');
3659 HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin);
3660 assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
3661
3662 var stdout = FS.open('/dev/stdout', 'w');
3663 HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout);
3664 assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')') ;
3665
3666 var stderr = FS.open('/dev/stderr', 'w');
3667 HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr);
3668 assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')') ;
3669 },ensureErrnoError:function () {
3670 if (FS.ErrnoError) return;
3671 FS.ErrnoError = function ErrnoError(errno) {
3672 this.errno = errno;
3673 for (var key in ERRNO_CODES) {
3674 if (ERRNO_CODES[key] === errno) {
3675 this.code = key;
3676 break;
3677 }
3678 }
3679 this.message = ERRNO_MESSAGES[errno];
3680 };
3681 FS.ErrnoError.prototype = new Error();
3682 FS.ErrnoError.prototype.constructor = FS.ErrnoError;
3683 // Some errors may happen quite a bit, to avoid overhead we reuse them ( and suffer a lack of stack info)
3684 [ERRNO_CODES.ENOENT].forEach(function(code) {
3685 FS.genericErrors[code] = new FS.ErrnoError(code);
3686 FS.genericErrors[code].stack = '<generic error, no stack>';
3687 });
3688 },staticInit:function () {
3689 FS.ensureErrnoError();
3690
3691 FS.nameTable = new Array(4096);
3692
3693 FS.mount(MEMFS, {}, '/');
3694
3695 FS.createDefaultDirectories();
3696 FS.createDefaultDevices();
3697 },init:function (input, output, error) {
3698 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)');
3699 FS.init.initialized = true;
3700
3701 FS.ensureErrnoError();
3702
3703 // Allow Module.stdin etc. to provide defaults, if none explicitly passe d to us here
3704 Module['stdin'] = input || Module['stdin'];
3705 Module['stdout'] = output || Module['stdout'];
3706 Module['stderr'] = error || Module['stderr'];
3707
3708 FS.createStandardStreams();
3709 },quit:function () {
3710 FS.init.initialized = false;
3711 for (var i = 0; i < FS.streams.length; i++) {
3712 var stream = FS.streams[i];
3713 if (!stream) {
3714 continue;
3715 }
3716 FS.close(stream);
3717 }
3718 },getMode:function (canRead, canWrite) {
3719 var mode = 0;
3720 if (canRead) mode |= 292 | 73;
3721 if (canWrite) mode |= 146;
3722 return mode;
3723 },joinPath:function (parts, forceRelative) {
3724 var path = PATH.join.apply(null, parts);
3725 if (forceRelative && path[0] == '/') path = path.substr(1);
3726 return path;
3727 },absolutePath:function (relative, base) {
3728 return PATH.resolve(base, relative);
3729 },standardizePath:function (path) {
3730 return PATH.normalize(path);
3731 },findObject:function (path, dontResolveLastLink) {
3732 var ret = FS.analyzePath(path, dontResolveLastLink);
3733 if (ret.exists) {
3734 return ret.object;
3735 } else {
3736 ___setErrNo(ret.error);
3737 return null;
3738 }
3739 },analyzePath:function (path, dontResolveLastLink) {
3740 // operate from within the context of the symlink's target
3741 try {
3742 var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3743 path = lookup.path;
3744 } catch (e) {
3745 }
3746 var ret = {
3747 isRoot: false, exists: false, error: 0, name: null, path: null, object : null,
3748 parentExists: false, parentPath: null, parentObject: null
3749 };
3750 try {
3751 var lookup = FS.lookupPath(path, { parent: true });
3752 ret.parentExists = true;
3753 ret.parentPath = lookup.path;
3754 ret.parentObject = lookup.node;
3755 ret.name = PATH.basename(path);
3756 lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3757 ret.exists = true;
3758 ret.path = lookup.path;
3759 ret.object = lookup.node;
3760 ret.name = lookup.node.name;
3761 ret.isRoot = lookup.path === '/';
3762 } catch (e) {
3763 ret.error = e.errno;
3764 };
3765 return ret;
3766 },createFolder:function (parent, name, canRead, canWrite) {
3767 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(p arent), name);
3768 var mode = FS.getMode(canRead, canWrite);
3769 return FS.mkdir(path, mode);
3770 },createPath:function (parent, path, canRead, canWrite) {
3771 parent = typeof parent === 'string' ? parent : FS.getPath(parent);
3772 var parts = path.split('/').reverse();
3773 while (parts.length) {
3774 var part = parts.pop();
3775 if (!part) continue;
3776 var current = PATH.join2(parent, part);
3777 try {
3778 FS.mkdir(current);
3779 } catch (e) {
3780 // ignore EEXIST
3781 }
3782 parent = current;
3783 }
3784 return current;
3785 },createFile:function (parent, name, properties, canRead, canWrite) {
3786 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(p arent), name);
3787 var mode = FS.getMode(canRead, canWrite);
3788 return FS.create(path, mode);
3789 },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
3790 var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.ge tPath(parent), name) : parent;
3791 var mode = FS.getMode(canRead, canWrite);
3792 var node = FS.create(path, mode);
3793 if (data) {
3794 if (typeof data === 'string') {
3795 var arr = new Array(data.length);
3796 for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charC odeAt(i);
3797 data = arr;
3798 }
3799 // make sure we can write to the file
3800 FS.chmod(node, mode | 146);
3801 var stream = FS.open(node, 'w');
3802 FS.write(stream, data, 0, data.length, 0, canOwn);
3803 FS.close(stream);
3804 FS.chmod(node, mode);
3805 }
3806 return node;
3807 },createDevice:function (parent, name, input, output) {
3808 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(p arent), name);
3809 var mode = FS.getMode(!!input, !!output);
3810 if (!FS.createDevice.major) FS.createDevice.major = 64;
3811 var dev = FS.makedev(FS.createDevice.major++, 0);
3812 // Create a fake device that a set of stream ops to emulate
3813 // the old behavior.
3814 FS.registerDevice(dev, {
3815 open: function(stream) {
3816 stream.seekable = false;
3817 },
3818 close: function(stream) {
3819 // flush any pending line data
3820 if (output && output.buffer && output.buffer.length) {
3821 output(10);
3822 }
3823 },
3824 read: function(stream, buffer, offset, length, pos /* ignored */) {
3825 var bytesRead = 0;
3826 for (var i = 0; i < length; i++) {
3827 var result;
3828 try {
3829 result = input();
3830 } catch (e) {
3831 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3832 }
3833 if (result === undefined && bytesRead === 0) {
3834 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
3835 }
3836 if (result === null || result === undefined) break;
3837 bytesRead++;
3838 buffer[offset+i] = result;
3839 }
3840 if (bytesRead) {
3841 stream.node.timestamp = Date.now();
3842 }
3843 return bytesRead;
3844 },
3845 write: function(stream, buffer, offset, length, pos) {
3846 for (var i = 0; i < length; i++) {
3847 try {
3848 output(buffer[offset+i]);
3849 } catch (e) {
3850 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3851 }
3852 }
3853 if (length) {
3854 stream.node.timestamp = Date.now();
3855 }
3856 return i;
3857 }
3858 });
3859 return FS.mkdev(path, mode, dev);
3860 },createLink:function (parent, name, target, canRead, canWrite) {
3861 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(p arent), name);
3862 return FS.symlink(target, path);
3863 },forceLoadFile:function (obj) {
3864 if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return tru e;
3865 var success = true;
3866 if (typeof XMLHttpRequest !== 'undefined') {
3867 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.");
3868 } else if (Module['read']) {
3869 // Command-line.
3870 try {
3871 // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
3872 // read() will try to parse UTF8.
3873 obj.contents = intArrayFromString(Module['read'](obj.url), true);
3874 } catch (e) {
3875 success = false;
3876 }
3877 } else {
3878 throw new Error('Cannot load without read() or XMLHttpRequest.');
3879 }
3880 if (!success) ___setErrNo(ERRNO_CODES.EIO);
3881 return success;
3882 },createLazyFile:function (parent, name, url, canRead, canWrite) {
3883 // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
3884 function LazyUint8Array() {
3885 this.lengthKnown = false;
3886 this.chunks = []; // Loaded chunks. Index is the chunk number
3887 }
3888 LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
3889 if (idx > this.length-1 || idx < 0) {
3890 return undefined;
3891 }
3892 var chunkOffset = idx % this.chunkSize;
3893 var chunkNum = Math.floor(idx / this.chunkSize);
3894 return this.getter(chunkNum)[chunkOffset];
3895 }
3896 LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setData Getter(getter) {
3897 this.getter = getter;
3898 }
3899 LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLeng th() {
3900 // Find length
3901 var xhr = new XMLHttpRequest();
3902 xhr.open('HEAD', url, false);
3903 xhr.send(null);
3904 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3905 var datalength = Number(xhr.getResponseHeader("Content-length"));
3906 var header;
3907 var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges" )) && header === "bytes";
3908 var chunkSize = 1024*1024; // Chunk size in bytes
3909
3910 if (!hasByteServing) chunkSize = datalength;
3911
3912 // Function to get a range from the remote URL.
3913 var doXHR = (function(from, to) {
3914 if (from > to) throw new Error("invalid range (" + from + ", " + t o + ") or no bytes requested!");
3915 if (to > datalength-1) throw new Error("only " + datalength + " by tes available! programmer error!");
3916
3917 // TODO: Use mozResponseArrayBuffer, responseStream, etc. if avail able.
3918 var xhr = new XMLHttpRequest();
3919 xhr.open('GET', url, false);
3920 if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes =" + from + "-" + to);
3921
3922 // Some hints to the browser that we want binary data.
3923 if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuf fer';
3924 if (xhr.overrideMimeType) {
3925 xhr.overrideMimeType('text/plain; charset=x-user-defined');
3926 }
3927
3928 xhr.send(null);
3929 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3930 if (xhr.response !== undefined) {
3931 return new Uint8Array(xhr.response || []);
3932 } else {
3933 return intArrayFromString(xhr.responseText || '', true);
3934 }
3935 });
3936 var lazyArray = this;
3937 lazyArray.setDataGetter(function(chunkNum) {
3938 var start = chunkNum * chunkSize;
3939 var end = (chunkNum+1) * chunkSize - 1; // including this byte
3940 end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
3941 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
3942 lazyArray.chunks[chunkNum] = doXHR(start, end);
3943 }
3944 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
3945 return lazyArray.chunks[chunkNum];
3946 });
3947
3948 this._length = datalength;
3949 this._chunkSize = chunkSize;
3950 this.lengthKnown = true;
3951 }
3952 if (typeof XMLHttpRequest !== 'undefined') {
3953 if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs o utside webworkers in modern browsers. Use --embed-file or --preload-file in emcc ';
3954 var lazyArray = new LazyUint8Array();
3955 Object.defineProperty(lazyArray, "length", {
3956 get: function() {
3957 if(!this.lengthKnown) {
3958 this.cacheLength();
3959 }
3960 return this._length;
3961 }
3962 });
3963 Object.defineProperty(lazyArray, "chunkSize", {
3964 get: function() {
3965 if(!this.lengthKnown) {
3966 this.cacheLength();
3967 }
3968 return this._chunkSize;
3969 }
3970 });
3971
3972 var properties = { isDevice: false, contents: lazyArray };
3973 } else {
3974 var properties = { isDevice: false, url: url };
3975 }
3976
3977 var node = FS.createFile(parent, name, properties, canRead, canWrite);
3978 // This is a total hack, but I want to get this lazy file code out of th e
3979 // core of MEMFS. If we want to keep this lazy file concept I feel it sh ould
3980 // be its own thin LAZYFS proxying calls to MEMFS.
3981 if (properties.contents) {
3982 node.contents = properties.contents;
3983 } else if (properties.url) {
3984 node.contents = null;
3985 node.url = properties.url;
3986 }
3987 // override each stream op with one that tries to force load the lazy fi le first
3988 var stream_ops = {};
3989 var keys = Object.keys(node.stream_ops);
3990 keys.forEach(function(key) {
3991 var fn = node.stream_ops[key];
3992 stream_ops[key] = function forceLoadLazyFile() {
3993 if (!FS.forceLoadFile(node)) {
3994 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3995 }
3996 return fn.apply(null, arguments);
3997 };
3998 });
3999 // use a custom read function
4000 stream_ops.read = function stream_ops_read(stream, buffer, offset, lengt h, position) {
4001 if (!FS.forceLoadFile(node)) {
4002 throw new FS.ErrnoError(ERRNO_CODES.EIO);
4003 }
4004 var contents = stream.node.contents;
4005 if (position >= contents.length)
4006 return 0;
4007 var size = Math.min(contents.length - position, length);
4008 assert(size >= 0);
4009 if (contents.slice) { // normal array
4010 for (var i = 0; i < size; i++) {
4011 buffer[offset + i] = contents[position + i];
4012 }
4013 } else {
4014 for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
4015 buffer[offset + i] = contents.get(position + i);
4016 }
4017 }
4018 return size;
4019 };
4020 node.stream_ops = stream_ops;
4021 return node;
4022 },createPreloadedFile:function (parent, name, url, canRead, canWrite, onlo ad, onerror, dontCreateFile, canOwn) {
4023 Browser.init();
4024 // TODO we should allow people to just pass in a complete filename inste ad
4025 // of parent and name being that we just join them anyways
4026 var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
4027 function processData(byteArray) {
4028 function finish(byteArray) {
4029 if (!dontCreateFile) {
4030 FS.createDataFile(parent, name, byteArray, canRead, canWrite, canO wn);
4031 }
4032 if (onload) onload();
4033 removeRunDependency('cp ' + fullname);
4034 }
4035 var handled = false;
4036 Module['preloadPlugins'].forEach(function(plugin) {
4037 if (handled) return;
4038 if (plugin['canHandle'](fullname)) {
4039 plugin['handle'](byteArray, fullname, finish, function() {
4040 if (onerror) onerror();
4041 removeRunDependency('cp ' + fullname);
4042 });
4043 handled = true;
4044 }
4045 });
4046 if (!handled) finish(byteArray);
4047 }
4048 addRunDependency('cp ' + fullname);
4049 if (typeof url == 'string') {
4050 Browser.asyncLoad(url, function(byteArray) {
4051 processData(byteArray);
4052 }, onerror);
4053 } else {
4054 processData(url);
4055 }
4056 },indexedDB:function () {
4057 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
4058 },DB_NAME:function () {
4059 return 'EM_FS_' + window.location.pathname;
4060 },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, o nload, onerror) {
4061 onload = onload || function(){};
4062 onerror = onerror || function(){};
4063 var indexedDB = FS.indexedDB();
4064 try {
4065 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
4066 } catch (e) {
4067 return onerror(e);
4068 }
4069 openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
4070 console.log('creating db');
4071 var db = openRequest.result;
4072 db.createObjectStore(FS.DB_STORE_NAME);
4073 };
4074 openRequest.onsuccess = function openRequest_onsuccess() {
4075 var db = openRequest.result;
4076 var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
4077 var files = transaction.objectStore(FS.DB_STORE_NAME);
4078 var ok = 0, fail = 0, total = paths.length;
4079 function finish() {
4080 if (fail == 0) onload(); else onerror();
4081 }
4082 paths.forEach(function(path) {
4083 var putRequest = files.put(FS.analyzePath(path).object.contents, pat h);
4084 putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (o k + fail == total) finish() };
4085 putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
4086 });
4087 transaction.onerror = onerror;
4088 };
4089 openRequest.onerror = onerror;
4090 },loadFilesFromDB:function (paths, onload, onerror) {
4091 onload = onload || function(){};
4092 onerror = onerror || function(){};
4093 var indexedDB = FS.indexedDB();
4094 try {
4095 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
4096 } catch (e) {
4097 return onerror(e);
4098 }
4099 openRequest.onupgradeneeded = onerror; // no database to load from
4100 openRequest.onsuccess = function openRequest_onsuccess() {
4101 var db = openRequest.result;
4102 try {
4103 var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
4104 } catch(e) {
4105 onerror(e);
4106 return;
4107 }
4108 var files = transaction.objectStore(FS.DB_STORE_NAME);
4109 var ok = 0, fail = 0, total = paths.length;
4110 function finish() {
4111 if (fail == 0) onload(); else onerror();
4112 }
4113 paths.forEach(function(path) {
4114 var getRequest = files.get(path);
4115 getRequest.onsuccess = function getRequest_onsuccess() {
4116 if (FS.analyzePath(path).exists) {
4117 FS.unlink(path);
4118 }
4119 FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequ est.result, true, true, true);
4120 ok++;
4121 if (ok + fail == total) finish();
4122 };
4123 getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
4124 });
4125 transaction.onerror = onerror;
4126 };
4127 openRequest.onerror = onerror;
4128 }};
4129
4130
4131
4132
4133 function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) {
4134 return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
4135 },createSocket:function (family, type, protocol) {
4136 var streaming = type == 1;
4137 if (protocol) {
4138 assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp
4139 }
4140
4141 // create our internal socket structure
4142 var sock = {
4143 family: family,
4144 type: type,
4145 protocol: protocol,
4146 server: null,
4147 peers: {},
4148 pending: [],
4149 recv_queue: [],
4150 sock_ops: SOCKFS.websocket_sock_ops
4151 };
4152
4153 // create the filesystem node to store the socket structure
4154 var name = SOCKFS.nextname();
4155 var node = FS.createNode(SOCKFS.root, name, 49152, 0);
4156 node.sock = sock;
4157
4158 // and the wrapping stream that enables library functions such
4159 // as read and write to indirectly interact with the socket
4160 var stream = FS.createStream({
4161 path: name,
4162 node: node,
4163 flags: FS.modeStringToFlags('r+'),
4164 seekable: false,
4165 stream_ops: SOCKFS.stream_ops
4166 });
4167
4168 // map the new stream to the socket structure (sockets have a 1:1
4169 // relationship with a stream)
4170 sock.stream = stream;
4171
4172 return sock;
4173 },getSocket:function (fd) {
4174 var stream = FS.getStream(fd);
4175 if (!stream || !FS.isSocket(stream.node.mode)) {
4176 return null;
4177 }
4178 return stream.node.sock;
4179 },stream_ops:{poll:function (stream) {
4180 var sock = stream.node.sock;
4181 return sock.sock_ops.poll(sock);
4182 },ioctl:function (stream, request, varargs) {
4183 var sock = stream.node.sock;
4184 return sock.sock_ops.ioctl(sock, request, varargs);
4185 },read:function (stream, buffer, offset, length, position /* ignored */) {
4186 var sock = stream.node.sock;
4187 var msg = sock.sock_ops.recvmsg(sock, length);
4188 if (!msg) {
4189 // socket is closed
4190 return 0;
4191 }
4192 buffer.set(msg.buffer, offset);
4193 return msg.buffer.length;
4194 },write:function (stream, buffer, offset, length, position /* ignored */ ) {
4195 var sock = stream.node.sock;
4196 return sock.sock_ops.sendmsg(sock, buffer, offset, length);
4197 },close:function (stream) {
4198 var sock = stream.node.sock;
4199 sock.sock_ops.close(sock);
4200 }},nextname:function () {
4201 if (!SOCKFS.nextname.current) {
4202 SOCKFS.nextname.current = 0;
4203 }
4204 return 'socket[' + (SOCKFS.nextname.current++) + ']';
4205 },websocket_sock_ops:{createPeer:function (sock, addr, port) {
4206 var ws;
4207
4208 if (typeof addr === 'object') {
4209 ws = addr;
4210 addr = null;
4211 port = null;
4212 }
4213
4214 if (ws) {
4215 // for sockets that've already connected (e.g. we're the server)
4216 // we can inspect the _socket property for the address
4217 if (ws._socket) {
4218 addr = ws._socket.remoteAddress;
4219 port = ws._socket.remotePort;
4220 }
4221 // if we're just now initializing a connection to the remote,
4222 // inspect the url property
4223 else {
4224 var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);
4225 if (!result) {
4226 throw new Error('WebSocket URL must be in the format ws(s)://add ress:port');
4227 }
4228 addr = result[1];
4229 port = parseInt(result[2], 10);
4230 }
4231 } else {
4232 // create the actual websocket object and connect
4233 try {
4234 // runtimeConfig gets set to true if WebSocket runtime configurati on is available.
4235 var runtimeConfig = (Module['websocket'] && ('object' === typeof M odule['websocket']));
4236
4237 // The default value is 'ws://' the replace is needed because the compiler replaces "//" comments with '#'
4238 // comments without checking context, so we'd end up with ws:#, th e replace swaps the "#" for "//" again.
4239 var url = 'ws:#'.replace('#', '//');
4240
4241 if (runtimeConfig) {
4242 if ('string' === typeof Module['websocket']['url']) {
4243 url = Module['websocket']['url']; // Fetch runtime WebSocket U RL config.
4244 }
4245 }
4246
4247 if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it.
4248 url = url + addr + ':' + port;
4249 }
4250
4251 // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set.
4252 var subProtocols = 'binary'; // The default value is 'binary'
4253
4254 if (runtimeConfig) {
4255 if ('string' === typeof Module['websocket']['subprotocol']) {
4256 subProtocols = Module['websocket']['subprotocol']; // Fetch ru ntime WebSocket subprotocol config.
4257 }
4258 }
4259
4260 // The regex trims the string (removes spaces at the beginning and end, then splits the string by
4261 // <any space>,<any space> into an Array. Whitespace removal is im portant for Websockify and ws.
4262 subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */);
4263
4264 // The node ws library API for specifying optional subprotocol is slightly different than the browser's.
4265 var opts = ENVIRONMENT_IS_NODE ? {'protocol': subProtocols.toStrin g()} : subProtocols;
4266
4267 // If node we use the ws library.
4268 var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebS ocket'];
4269 ws = new WebSocket(url, opts);
4270 ws.binaryType = 'arraybuffer';
4271 } catch (e) {
4272 throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH);
4273 }
4274 }
4275
4276
4277 var peer = {
4278 addr: addr,
4279 port: port,
4280 socket: ws,
4281 dgram_send_queue: []
4282 };
4283
4284 SOCKFS.websocket_sock_ops.addPeer(sock, peer);
4285 SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer);
4286
4287 // if this is a bound dgram socket, send the port number first to allo w
4288 // us to override the ephemeral port reported to us by remotePort on t he
4289 // remote end.
4290 if (sock.type === 2 && typeof sock.sport !== 'undefined') {
4291 peer.dgram_send_queue.push(new Uint8Array([
4292 255, 255, 255, 255,
4293 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.cha rCodeAt(0),
4294 ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff)
4295 ]));
4296 }
4297
4298 return peer;
4299 },getPeer:function (sock, addr, port) {
4300 return sock.peers[addr + ':' + port];
4301 },addPeer:function (sock, peer) {
4302 sock.peers[peer.addr + ':' + peer.port] = peer;
4303 },removePeer:function (sock, peer) {
4304 delete sock.peers[peer.addr + ':' + peer.port];
4305 },handlePeerEvents:function (sock, peer) {
4306 var first = true;
4307
4308 var handleOpen = function () {
4309 try {
4310 var queued = peer.dgram_send_queue.shift();
4311 while (queued) {
4312 peer.socket.send(queued);
4313 queued = peer.dgram_send_queue.shift();
4314 }
4315 } catch (e) {
4316 // not much we can do here in the way of proper error handling as we've already
4317 // lied and said this data was sent. shut it down.
4318 peer.socket.close();
4319 }
4320 };
4321
4322 function handleMessage(data) {
4323 assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer
4324 data = new Uint8Array(data); // make a typed array view on the arra y buffer
4325
4326
4327 // if this is the port message, override the peer's port with it
4328 var wasfirst = first;
4329 first = false;
4330 if (wasfirst &&
4331 data.length === 10 &&
4332 data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 &&
4333 data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) & & data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) {
4334 // update the peer's port and it's key in the peer map
4335 var newport = ((data[8] << 8) | data[9]);
4336 SOCKFS.websocket_sock_ops.removePeer(sock, peer);
4337 peer.port = newport;
4338 SOCKFS.websocket_sock_ops.addPeer(sock, peer);
4339 return;
4340 }
4341
4342 sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data });
4343 };
4344
4345 if (ENVIRONMENT_IS_NODE) {
4346 peer.socket.on('open', handleOpen);
4347 peer.socket.on('message', function(data, flags) {
4348 if (!flags.binary) {
4349 return;
4350 }
4351 handleMessage((new Uint8Array(data)).buffer); // copy from node B uffer -> ArrayBuffer
4352 });
4353 peer.socket.on('error', function() {
4354 // don't throw
4355 });
4356 } else {
4357 peer.socket.onopen = handleOpen;
4358 peer.socket.onmessage = function peer_socket_onmessage(event) {
4359 handleMessage(event.data);
4360 };
4361 }
4362 },poll:function (sock) {
4363 if (sock.type === 1 && sock.server) {
4364 // listen sockets should only say they're available for reading
4365 // if there are pending clients.
4366 return sock.pending.length ? (64 | 1) : 0;
4367 }
4368
4369 var mask = 0;
4370 var dest = sock.type === 1 ? // we only care about the socket state f or connection-based sockets
4371 SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) :
4372 null;
4373
4374 if (sock.recv_queue.length ||
4375 !dest || // connection-less sockets are always ready to read
4376 (dest && dest.socket.readyState === dest.socket.CLOSING) ||
4377 (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed
4378 mask |= (64 | 1);
4379 }
4380
4381 if (!dest || // connection-less sockets are always ready to write
4382 (dest && dest.socket.readyState === dest.socket.OPEN)) {
4383 mask |= 4;
4384 }
4385
4386 if ((dest && dest.socket.readyState === dest.socket.CLOSING) ||
4387 (dest && dest.socket.readyState === dest.socket.CLOSED)) {
4388 mask |= 16;
4389 }
4390
4391 return mask;
4392 },ioctl:function (sock, request, arg) {
4393 switch (request) {
4394 case 21531:
4395 var bytes = 0;
4396 if (sock.recv_queue.length) {
4397 bytes = sock.recv_queue[0].data.length;
4398 }
4399 HEAP32[((arg)>>2)]=bytes;
4400 return 0;
4401 default:
4402 return ERRNO_CODES.EINVAL;
4403 }
4404 },close:function (sock) {
4405 // if we've spawned a listen server, close it
4406 if (sock.server) {
4407 try {
4408 sock.server.close();
4409 } catch (e) {
4410 }
4411 sock.server = null;
4412 }
4413 // close any peer connections
4414 var peers = Object.keys(sock.peers);
4415 for (var i = 0; i < peers.length; i++) {
4416 var peer = sock.peers[peers[i]];
4417 try {
4418 peer.socket.close();
4419 } catch (e) {
4420 }
4421 SOCKFS.websocket_sock_ops.removePeer(sock, peer);
4422 }
4423 return 0;
4424 },bind:function (sock, addr, port) {
4425 if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefi ned') {
4426 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound
4427 }
4428 sock.saddr = addr;
4429 sock.sport = port || _mkport();
4430 // in order to emulate dgram sockets, we need to launch a listen serve r when
4431 // binding on a connection-less socket
4432 // note: this is only required on the server side
4433 if (sock.type === 2) {
4434 // close the existing server if it exists
4435 if (sock.server) {
4436 sock.server.close();
4437 sock.server = null;
4438 }
4439 // swallow error operation not supported error that occurs when bind ing in the
4440 // browser where this isn't supported
4441 try {
4442 sock.sock_ops.listen(sock, 0);
4443 } catch (e) {
4444 if (!(e instanceof FS.ErrnoError)) throw e;
4445 if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e;
4446 }
4447 }
4448 },connect:function (sock, addr, port) {
4449 if (sock.server) {
4450 throw new FS.ErrnoError(ERRNO_CODS.EOPNOTSUPP);
4451 }
4452
4453 // TODO autobind
4454 // if (!sock.addr && sock.type == 2) {
4455 // }
4456
4457 // early out if we're already connected / in the middle of connecting
4458 if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefi ned') {
4459 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock. dport);
4460 if (dest) {
4461 if (dest.socket.readyState === dest.socket.CONNECTING) {
4462 throw new FS.ErrnoError(ERRNO_CODES.EALREADY);
4463 } else {
4464 throw new FS.ErrnoError(ERRNO_CODES.EISCONN);
4465 }
4466 }
4467 }
4468
4469 // add the socket to our peer list and set our
4470 // destination address / port to match
4471 var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
4472 sock.daddr = peer.addr;
4473 sock.dport = peer.port;
4474
4475 // always "fail" in non-blocking mode
4476 throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS);
4477 },listen:function (sock, backlog) {
4478 if (!ENVIRONMENT_IS_NODE) {
4479 throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
4480 }
4481 if (sock.server) {
4482 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening
4483 }
4484 var WebSocketServer = require('ws').Server;
4485 var host = sock.saddr;
4486 sock.server = new WebSocketServer({
4487 host: host,
4488 port: sock.sport
4489 // TODO support backlog
4490 });
4491
4492 sock.server.on('connection', function(ws) {
4493 if (sock.type === 1) {
4494 var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.pro tocol);
4495
4496 // create a peer on the new socket
4497 var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws);
4498 newsock.daddr = peer.addr;
4499 newsock.dport = peer.port;
4500
4501 // push to queue for accept to pick up
4502 sock.pending.push(newsock);
4503 } else {
4504 // create a peer on the listen socket so calling sendto
4505 // with the listen socket and an address will resolve
4506 // to the correct client
4507 SOCKFS.websocket_sock_ops.createPeer(sock, ws);
4508 }
4509 });
4510 sock.server.on('closed', function() {
4511 sock.server = null;
4512 });
4513 sock.server.on('error', function() {
4514 // don't throw
4515 });
4516 },accept:function (listensock) {
4517 if (!listensock.server) {
4518 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
4519 }
4520 var newsock = listensock.pending.shift();
4521 newsock.stream.flags = listensock.stream.flags;
4522 return newsock;
4523 },getname:function (sock, peer) {
4524 var addr, port;
4525 if (peer) {
4526 if (sock.daddr === undefined || sock.dport === undefined) {
4527 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4528 }
4529 addr = sock.daddr;
4530 port = sock.dport;
4531 } else {
4532 // TODO saddr and sport will be set for bind()'d UDP sockets, but wh at
4533 // should we be returning for TCP sockets that've been connect()'d?
4534 addr = sock.saddr || 0;
4535 port = sock.sport || 0;
4536 }
4537 return { addr: addr, port: port };
4538 },sendmsg:function (sock, buffer, offset, length, addr, port) {
4539 if (sock.type === 2) {
4540 // connection-less sockets will honor the message address,
4541 // and otherwise fall back to the bound destination address
4542 if (addr === undefined || port === undefined) {
4543 addr = sock.daddr;
4544 port = sock.dport;
4545 }
4546 // if there was no address to fall back to, error out
4547 if (addr === undefined || port === undefined) {
4548 throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ);
4549 }
4550 } else {
4551 // connection-based sockets will only use the bound
4552 addr = sock.daddr;
4553 port = sock.dport;
4554 }
4555
4556 // find the peer for the destination address
4557 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port);
4558
4559 // early out if not connected with a connection-based socket
4560 if (sock.type === 1) {
4561 if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest. socket.readyState === dest.socket.CLOSED) {
4562 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4563 } else if (dest.socket.readyState === dest.socket.CONNECTING) {
4564 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4565 }
4566 }
4567
4568 // create a copy of the incoming data to send, as the WebSocket API
4569 // doesn't work entirely with an ArrayBufferView, it'll just send
4570 // the entire underlying buffer
4571 var data;
4572 if (buffer instanceof Array || buffer instanceof ArrayBuffer) {
4573 data = buffer.slice(offset, offset + length);
4574 } else { // ArrayBufferView
4575 data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOf fset + offset + length);
4576 }
4577
4578 // if we're emulating a connection-less dgram socket and don't have
4579 // a cached connection, queue the buffer to send upon connect and
4580 // lie, saying the data was sent now.
4581 if (sock.type === 2) {
4582 if (!dest || dest.socket.readyState !== dest.socket.OPEN) {
4583 // if we're not connected, open a new connection
4584 if (!dest || dest.socket.readyState === dest.socket.CLOSING || des t.socket.readyState === dest.socket.CLOSED) {
4585 dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
4586 }
4587 dest.dgram_send_queue.push(data);
4588 return length;
4589 }
4590 }
4591
4592 try {
4593 // send the actual data
4594 dest.socket.send(data);
4595 return length;
4596 } catch (e) {
4597 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
4598 }
4599 },recvmsg:function (sock, length) {
4600 // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html
4601 if (sock.type === 1 && sock.server) {
4602 // tcp servers should not be recv()'ing on the listen socket
4603 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4604 }
4605
4606 var queued = sock.recv_queue.shift();
4607 if (!queued) {
4608 if (sock.type === 1) {
4609 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, soc k.dport);
4610
4611 if (!dest) {
4612 // if we have a destination address but are not connected, error out
4613 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4614 }
4615 else if (dest.socket.readyState === dest.socket.CLOSING || dest.so cket.readyState === dest.socket.CLOSED) {
4616 // return null if the socket has closed
4617 return null;
4618 }
4619 else {
4620 // else, our socket is in a valid state but truly has nothing av ailable
4621 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4622 }
4623 } else {
4624 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4625 }
4626 }
4627
4628 // queued.data will be an ArrayBuffer if it's unadulterated, but if it 's
4629 // requeued TCP data it'll be an ArrayBufferView
4630 var queuedLength = queued.data.byteLength || queued.data.length;
4631 var queuedOffset = queued.data.byteOffset || 0;
4632 var queuedBuffer = queued.data.buffer || queued.data;
4633 var bytesRead = Math.min(length, queuedLength);
4634 var res = {
4635 buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead),
4636 addr: queued.addr,
4637 port: queued.port
4638 };
4639
4640
4641 // push back any unread data for TCP connections
4642 if (sock.type === 1 && bytesRead < queuedLength) {
4643 var bytesRemaining = queuedLength - bytesRead;
4644 queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining);
4645 sock.recv_queue.unshift(queued);
4646 }
4647
4648 return res;
4649 }}};function _send(fd, buf, len, flags) {
4650 var sock = SOCKFS.getSocket(fd);
4651 if (!sock) {
4652 ___setErrNo(ERRNO_CODES.EBADF);
4653 return -1;
4654 }
4655 // TODO honor flags
4656 return _write(fd, buf, len);
4657 }
4658
4659 function _pwrite(fildes, buf, nbyte, offset) {
4660 // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset) ;
4661 // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
4662 var stream = FS.getStream(fildes);
4663 if (!stream) {
4664 ___setErrNo(ERRNO_CODES.EBADF);
4665 return -1;
4666 }
4667 try {
4668 var slab = HEAP8;
4669 return FS.write(stream, slab, buf, nbyte, offset);
4670 } catch (e) {
4671 FS.handleFSError(e);
4672 return -1;
4673 }
4674 }function _write(fildes, buf, nbyte) {
4675 // ssize_t write(int fildes, const void *buf, size_t nbyte);
4676 // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
4677 var stream = FS.getStream(fildes);
4678 if (!stream) {
4679 ___setErrNo(ERRNO_CODES.EBADF);
4680 return -1;
4681 }
4682
4683
4684 try {
4685 var slab = HEAP8;
4686 return FS.write(stream, slab, buf, nbyte);
4687 } catch (e) {
4688 FS.handleFSError(e);
4689 return -1;
4690 }
4691 }
4692
4693 function _fileno(stream) {
4694 // int fileno(FILE *stream);
4695 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html
4696 stream = FS.getStreamFromPtr(stream);
4697 if (!stream) return -1;
4698 return stream.fd;
4699 }function _fwrite(ptr, size, nitems, stream) {
4700 // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FIL E *restrict stream);
4701 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
4702 var bytesToWrite = nitems * size;
4703 if (bytesToWrite == 0) return 0;
4704 var fd = _fileno(stream);
4705 var bytesWritten = _write(fd, ptr, bytesToWrite);
4706 if (bytesWritten == -1) {
4707 var streamObj = FS.getStreamFromPtr(stream);
4708 if (streamObj) streamObj.error = true;
4709 return 0;
4710 } else {
4711 return Math.floor(bytesWritten / size);
4712 }
4713 }
4714
4715
4716
4717 Module["_strlen"] = _strlen;
4718
4719 function __reallyNegative(x) {
4720 return x < 0 || (x === 0 && (1/x) === -Infinity);
4721 }function __formatString(format, varargs) {
4722 var textIndex = format;
4723 var argIndex = 0;
4724 function getNextArg(type) {
4725 // NOTE: Explicitly ignoring type safety. Otherwise this fails:
4726 // int x = 4; printf("%c\n", (char)x);
4727 var ret;
4728 if (type === 'double') {
4729 ret = HEAPF64[(((varargs)+(argIndex))>>3)];
4730 } else if (type == 'i64') {
4731 ret = [HEAP32[(((varargs)+(argIndex))>>2)],
4732 HEAP32[(((varargs)+(argIndex+4))>>2)]];
4733
4734 } else {
4735 type = 'i32'; // varargs are always i32, i64, or double
4736 ret = HEAP32[(((varargs)+(argIndex))>>2)];
4737 }
4738 argIndex += Runtime.getNativeFieldSize(type);
4739 return ret;
4740 }
4741
4742 var ret = [];
4743 var curr, next, currArg;
4744 while(1) {
4745 var startTextIndex = textIndex;
4746 curr = HEAP8[(textIndex)];
4747 if (curr === 0) break;
4748 next = HEAP8[((textIndex+1)|0)];
4749 if (curr == 37) {
4750 // Handle flags.
4751 var flagAlwaysSigned = false;
4752 var flagLeftAlign = false;
4753 var flagAlternative = false;
4754 var flagZeroPad = false;
4755 var flagPadSign = false;
4756 flagsLoop: while (1) {
4757 switch (next) {
4758 case 43:
4759 flagAlwaysSigned = true;
4760 break;
4761 case 45:
4762 flagLeftAlign = true;
4763 break;
4764 case 35:
4765 flagAlternative = true;
4766 break;
4767 case 48:
4768 if (flagZeroPad) {
4769 break flagsLoop;
4770 } else {
4771 flagZeroPad = true;
4772 break;
4773 }
4774 case 32:
4775 flagPadSign = true;
4776 break;
4777 default:
4778 break flagsLoop;
4779 }
4780 textIndex++;
4781 next = HEAP8[((textIndex+1)|0)];
4782 }
4783
4784 // Handle width.
4785 var width = 0;
4786 if (next == 42) {
4787 width = getNextArg('i32');
4788 textIndex++;
4789 next = HEAP8[((textIndex+1)|0)];
4790 } else {
4791 while (next >= 48 && next <= 57) {
4792 width = width * 10 + (next - 48);
4793 textIndex++;
4794 next = HEAP8[((textIndex+1)|0)];
4795 }
4796 }
4797
4798 // Handle precision.
4799 var precisionSet = false, precision = -1;
4800 if (next == 46) {
4801 precision = 0;
4802 precisionSet = true;
4803 textIndex++;
4804 next = HEAP8[((textIndex+1)|0)];
4805 if (next == 42) {
4806 precision = getNextArg('i32');
4807 textIndex++;
4808 } else {
4809 while(1) {
4810 var precisionChr = HEAP8[((textIndex+1)|0)];
4811 if (precisionChr < 48 ||
4812 precisionChr > 57) break;
4813 precision = precision * 10 + (precisionChr - 48);
4814 textIndex++;
4815 }
4816 }
4817 next = HEAP8[((textIndex+1)|0)];
4818 }
4819 if (precision < 0) {
4820 precision = 6; // Standard default.
4821 precisionSet = false;
4822 }
4823
4824 // Handle integer sizes. WARNING: These assume a 32-bit architecture!
4825 var argSize;
4826 switch (String.fromCharCode(next)) {
4827 case 'h':
4828 var nextNext = HEAP8[((textIndex+2)|0)];
4829 if (nextNext == 104) {
4830 textIndex++;
4831 argSize = 1; // char (actually i32 in varargs)
4832 } else {
4833 argSize = 2; // short (actually i32 in varargs)
4834 }
4835 break;
4836 case 'l':
4837 var nextNext = HEAP8[((textIndex+2)|0)];
4838 if (nextNext == 108) {
4839 textIndex++;
4840 argSize = 8; // long long
4841 } else {
4842 argSize = 4; // long
4843 }
4844 break;
4845 case 'L': // long long
4846 case 'q': // int64_t
4847 case 'j': // intmax_t
4848 argSize = 8;
4849 break;
4850 case 'z': // size_t
4851 case 't': // ptrdiff_t
4852 case 'I': // signed ptrdiff_t or unsigned size_t
4853 argSize = 4;
4854 break;
4855 default:
4856 argSize = null;
4857 }
4858 if (argSize) textIndex++;
4859 next = HEAP8[((textIndex+1)|0)];
4860
4861 // Handle type specifier.
4862 switch (String.fromCharCode(next)) {
4863 case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p' : {
4864 // Integer.
4865 var signed = next == 100 || next == 105;
4866 argSize = argSize || 4;
4867 var currArg = getNextArg('i' + (argSize * 8));
4868 var argText;
4869 // Flatten i64-1 [low, high] into a (slightly rounded) double
4870 if (argSize == 8) {
4871 currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117 );
4872 }
4873 // Truncate to requested size.
4874 if (argSize <= 4) {
4875 var limit = Math.pow(256, argSize) - 1;
4876 currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
4877 }
4878 // Format the number.
4879 var currAbsArg = Math.abs(currArg);
4880 var prefix = '';
4881 if (next == 100 || next == 105) {
4882 argText = reSign(currArg, 8 * argSize, 1).toString(10);
4883 } else if (next == 117) {
4884 argText = unSign(currArg, 8 * argSize, 1).toString(10);
4885 currArg = Math.abs(currArg);
4886 } else if (next == 111) {
4887 argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
4888 } else if (next == 120 || next == 88) {
4889 prefix = (flagAlternative && currArg != 0) ? '0x' : '';
4890 if (currArg < 0) {
4891 // Represent negative numbers in hex as 2's complement.
4892 currArg = -currArg;
4893 argText = (currAbsArg - 1).toString(16);
4894 var buffer = [];
4895 for (var i = 0; i < argText.length; i++) {
4896 buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
4897 }
4898 argText = buffer.join('');
4899 while (argText.length < argSize * 2) argText = 'f' + argText;
4900 } else {
4901 argText = currAbsArg.toString(16);
4902 }
4903 if (next == 88) {
4904 prefix = prefix.toUpperCase();
4905 argText = argText.toUpperCase();
4906 }
4907 } else if (next == 112) {
4908 if (currAbsArg === 0) {
4909 argText = '(nil)';
4910 } else {
4911 prefix = '0x';
4912 argText = currAbsArg.toString(16);
4913 }
4914 }
4915 if (precisionSet) {
4916 while (argText.length < precision) {
4917 argText = '0' + argText;
4918 }
4919 }
4920
4921 // Add sign if needed
4922 if (currArg >= 0) {
4923 if (flagAlwaysSigned) {
4924 prefix = '+' + prefix;
4925 } else if (flagPadSign) {
4926 prefix = ' ' + prefix;
4927 }
4928 }
4929
4930 // Move sign to prefix so we zero-pad after the sign
4931 if (argText.charAt(0) == '-') {
4932 prefix = '-' + prefix;
4933 argText = argText.substr(1);
4934 }
4935
4936 // Add padding.
4937 while (prefix.length + argText.length < width) {
4938 if (flagLeftAlign) {
4939 argText += ' ';
4940 } else {
4941 if (flagZeroPad) {
4942 argText = '0' + argText;
4943 } else {
4944 prefix = ' ' + prefix;
4945 }
4946 }
4947 }
4948
4949 // Insert the result into the buffer.
4950 argText = prefix + argText;
4951 argText.split('').forEach(function(chr) {
4952 ret.push(chr.charCodeAt(0));
4953 });
4954 break;
4955 }
4956 case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
4957 // Float.
4958 var currArg = getNextArg('double');
4959 var argText;
4960 if (isNaN(currArg)) {
4961 argText = 'nan';
4962 flagZeroPad = false;
4963 } else if (!isFinite(currArg)) {
4964 argText = (currArg < 0 ? '-' : '') + 'inf';
4965 flagZeroPad = false;
4966 } else {
4967 var isGeneral = false;
4968 var effectivePrecision = Math.min(precision, 20);
4969
4970 // Convert g/G to f/F or e/E, as per:
4971 // http://pubs.opengroup.org/onlinepubs/9699919799/functions/pri ntf.html
4972 if (next == 103 || next == 71) {
4973 isGeneral = true;
4974 precision = precision || 1;
4975 var exponent = parseInt(currArg.toExponential(effectivePrecisi on).split('e')[1], 10);
4976 if (precision > exponent && exponent >= -4) {
4977 next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
4978 precision -= exponent + 1;
4979 } else {
4980 next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
4981 precision--;
4982 }
4983 effectivePrecision = Math.min(precision, 20);
4984 }
4985
4986 if (next == 101 || next == 69) {
4987 argText = currArg.toExponential(effectivePrecision);
4988 // Make sure the exponent has at least 2 digits.
4989 if (/[eE][-+]\d$/.test(argText)) {
4990 argText = argText.slice(0, -1) + '0' + argText.slice(-1);
4991 }
4992 } else if (next == 102 || next == 70) {
4993 argText = currArg.toFixed(effectivePrecision);
4994 if (currArg === 0 && __reallyNegative(currArg)) {
4995 argText = '-' + argText;
4996 }
4997 }
4998
4999 var parts = argText.split('e');
5000 if (isGeneral && !flagAlternative) {
5001 // Discard trailing zeros and periods.
5002 while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
5003 (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.' )) {
5004 parts[0] = parts[0].slice(0, -1);
5005 }
5006 } else {
5007 // Make sure we have a period in alternative mode.
5008 if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
5009 // Zero pad until required precision.
5010 while (precision > effectivePrecision++) parts[0] += '0';
5011 }
5012 argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
5013
5014 // Capitalize 'E' if needed.
5015 if (next == 69) argText = argText.toUpperCase();
5016
5017 // Add sign.
5018 if (currArg >= 0) {
5019 if (flagAlwaysSigned) {
5020 argText = '+' + argText;
5021 } else if (flagPadSign) {
5022 argText = ' ' + argText;
5023 }
5024 }
5025 }
5026
5027 // Add padding.
5028 while (argText.length < width) {
5029 if (flagLeftAlign) {
5030 argText += ' ';
5031 } else {
5032 if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
5033 argText = argText[0] + '0' + argText.slice(1);
5034 } else {
5035 argText = (flagZeroPad ? '0' : ' ') + argText;
5036 }
5037 }
5038 }
5039
5040 // Adjust case.
5041 if (next < 97) argText = argText.toUpperCase();
5042
5043 // Insert the result into the buffer.
5044 argText.split('').forEach(function(chr) {
5045 ret.push(chr.charCodeAt(0));
5046 });
5047 break;
5048 }
5049 case 's': {
5050 // String.
5051 var arg = getNextArg('i8*');
5052 var argLength = arg ? _strlen(arg) : '(null)'.length;
5053 if (precisionSet) argLength = Math.min(argLength, precision);
5054 if (!flagLeftAlign) {
5055 while (argLength < width--) {
5056 ret.push(32);
5057 }
5058 }
5059 if (arg) {
5060 for (var i = 0; i < argLength; i++) {
5061 ret.push(HEAPU8[((arg++)|0)]);
5062 }
5063 } else {
5064 ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength ), true));
5065 }
5066 if (flagLeftAlign) {
5067 while (argLength < width--) {
5068 ret.push(32);
5069 }
5070 }
5071 break;
5072 }
5073 case 'c': {
5074 // Character.
5075 if (flagLeftAlign) ret.push(getNextArg('i8'));
5076 while (--width > 0) {
5077 ret.push(32);
5078 }
5079 if (!flagLeftAlign) ret.push(getNextArg('i8'));
5080 break;
5081 }
5082 case 'n': {
5083 // Write the length written so far to the next parameter.
5084 var ptr = getNextArg('i32*');
5085 HEAP32[((ptr)>>2)]=ret.length;
5086 break;
5087 }
5088 case '%': {
5089 // Literal percent sign.
5090 ret.push(curr);
5091 break;
5092 }
5093 default: {
5094 // Unknown specifiers remain untouched.
5095 for (var i = startTextIndex; i < textIndex + 2; i++) {
5096 ret.push(HEAP8[(i)]);
5097 }
5098 }
5099 }
5100 textIndex += 2;
5101 // TODO: Support a/A (hex float) and m (last error) specifiers.
5102 // TODO: Support %1${specifier} for arg selection.
5103 } else {
5104 ret.push(curr);
5105 textIndex += 1;
5106 }
5107 }
5108 return ret;
5109 }function _fprintf(stream, format, varargs) {
5110 // int fprintf(FILE *restrict stream, const char *restrict format, ...);
5111 // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
5112 var result = __formatString(format, varargs);
5113 var stack = Runtime.stackSave();
5114 var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, s tream);
5115 Runtime.stackRestore(stack);
5116 return ret;
5117 }function _printf(format, varargs) {
5118 // int printf(const char *restrict format, ...);
5119 // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
5120 var stdout = HEAP32[((_stdout)>>2)];
5121 return _fprintf(stdout, format, varargs);
5122 }
5123
5124 var _sinf=Math_sin;
5125
5126
5127 var _sqrtf=Math_sqrt;
5128
5129 var _floorf=Math_floor;
5130
5131
5132 function _fputs(s, stream) {
5133 // int fputs(const char *restrict s, FILE *restrict stream);
5134 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
5135 var fd = _fileno(stream);
5136 return _write(fd, s, _strlen(s));
5137 }
5138
5139 function _fputc(c, stream) {
5140 // int fputc(int c, FILE *stream);
5141 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
5142 var chr = unSign(c & 0xFF);
5143 HEAP8[((_fputc.ret)|0)]=chr;
5144 var fd = _fileno(stream);
5145 var ret = _write(fd, _fputc.ret, 1);
5146 if (ret == -1) {
5147 var streamObj = FS.getStreamFromPtr(stream);
5148 if (streamObj) streamObj.error = true;
5149 return -1;
5150 } else {
5151 return chr;
5152 }
5153 }function _puts(s) {
5154 // int puts(const char *s);
5155 // http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html
5156 // NOTE: puts() always writes an extra newline.
5157 var stdout = HEAP32[((_stdout)>>2)];
5158 var ret = _fputs(s, stdout);
5159 if (ret < 0) {
5160 return ret;
5161 } else {
5162 var newlineRet = _fputc(10, stdout);
5163 return (newlineRet < 0) ? -1 : ret + 1;
5164 }
5165 }
5166
5167 function _clock() {
5168 if (_clock.start === undefined) _clock.start = Date.now();
5169 return Math.floor((Date.now() - _clock.start) * (1000000/1000));
5170 }
5171
5172
5173 var ___cxa_caught_exceptions=[];function ___cxa_begin_catch(ptr) {
5174 __ZSt18uncaught_exceptionv.uncaught_exception--;
5175 ___cxa_caught_exceptions.push(___cxa_last_thrown_exception);
5176 return ptr;
5177 }
5178
5179 function ___errno_location() {
5180 return ___errno_state;
5181 }
5182
5183
5184 function _emscripten_memcpy_big(dest, src, num) {
5185 HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
5186 return dest;
5187 }
5188 Module["_memcpy"] = _memcpy;
5189
5190 function __ZNSt9exceptionD2Ev() {}
5191
5192 var Browser={mainLoop:{scheduler:null,method:"",shouldPause:false,paused:false ,queue:[],pause:function () {
5193 Browser.mainLoop.shouldPause = true;
5194 },resume:function () {
5195 if (Browser.mainLoop.paused) {
5196 Browser.mainLoop.paused = false;
5197 Browser.mainLoop.scheduler();
5198 }
5199 Browser.mainLoop.shouldPause = false;
5200 },updateStatus:function () {
5201 if (Module['setStatus']) {
5202 var message = Module['statusMessage'] || 'Please wait...';
5203 var remaining = Browser.mainLoop.remainingBlockers;
5204 var expected = Browser.mainLoop.expectedBlockers;
5205 if (remaining) {
5206 if (remaining < expected) {
5207 Module['setStatus'](message + ' (' + (expected - remaining) + '/ ' + expected + ')');
5208 } else {
5209 Module['setStatus'](message);
5210 }
5211 } else {
5212 Module['setStatus']('');
5213 }
5214 }
5215 }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[] ,workers:[],init:function () {
5216 if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs t o exist even in workers
5217
5218 if (Browser.initted || ENVIRONMENT_IS_WORKER) return;
5219 Browser.initted = true;
5220
5221 try {
5222 new Blob();
5223 Browser.hasBlobConstructor = true;
5224 } catch(e) {
5225 Browser.hasBlobConstructor = false;
5226 console.log("warning: no blob constructor, cannot create blobs with mi metypes");
5227 }
5228 Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuil der : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.h asBlobConstructor ? console.log("warning: no BlobBuilder") : null));
5229 Browser.URLObject = typeof window != "undefined" ? (window.URL ? window. URL : window.webkitURL) : undefined;
5230 if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
5231 console.log("warning: Browser does not support creating object URLs. B uilt-in browser image decoding will not be available.");
5232 Module.noImageDecoding = true;
5233 }
5234
5235 // Support for plugins that can process preloaded files. You can add mor e of these to
5236 // your app by creating and appending to Module.preloadPlugins.
5237 //
5238 // Each plugin is asked if it can handle a file based on the file's name . If it can,
5239 // it is given the file's raw data. When it is done, it calls a callback with the file's
5240 // (possibly modified) data. For example, a plugin might decompress a fi le, or it
5241 // might create some side data structure for use later (like an Image el ement, etc.).
5242
5243 var imagePlugin = {};
5244 imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
5245 return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
5246 };
5247 imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onl oad, onerror) {
5248 var b = null;
5249 if (Browser.hasBlobConstructor) {
5250 try {
5251 b = new Blob([byteArray], { type: Browser.getMimetype(name) });
5252 if (b.size !== byteArray.length) { // Safari bug #118630
5253 // Safari's Blob can only take an ArrayBuffer
5254 b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Brows er.getMimetype(name) });
5255 }
5256 } catch(e) {
5257 Runtime.warnOnce('Blob constructor present but fails: ' + e + '; f alling back to blob builder');
5258 }
5259 }
5260 if (!b) {
5261 var bb = new Browser.BlobBuilder();
5262 bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
5263 b = bb.getBlob();
5264 }
5265 var url = Browser.URLObject.createObjectURL(b);
5266 var img = new Image();
5267 img.onload = function img_onload() {
5268 assert(img.complete, 'Image ' + name + ' could not be decoded');
5269 var canvas = document.createElement('canvas');
5270 canvas.width = img.width;
5271 canvas.height = img.height;
5272 var ctx = canvas.getContext('2d');
5273 ctx.drawImage(img, 0, 0);
5274 Module["preloadedImages"][name] = canvas;
5275 Browser.URLObject.revokeObjectURL(url);
5276 if (onload) onload(byteArray);
5277 };
5278 img.onerror = function img_onerror(event) {
5279 console.log('Image ' + url + ' could not be decoded');
5280 if (onerror) onerror();
5281 };
5282 img.src = url;
5283 };
5284 Module['preloadPlugins'].push(imagePlugin);
5285
5286 var audioPlugin = {};
5287 audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
5288 return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wa v': 1, '.mp3': 1 };
5289 };
5290 audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onl oad, onerror) {
5291 var done = false;
5292 function finish(audio) {
5293 if (done) return;
5294 done = true;
5295 Module["preloadedAudios"][name] = audio;
5296 if (onload) onload(byteArray);
5297 }
5298 function fail() {
5299 if (done) return;
5300 done = true;
5301 Module["preloadedAudios"][name] = new Audio(); // empty shim
5302 if (onerror) onerror();
5303 }
5304 if (Browser.hasBlobConstructor) {
5305 try {
5306 var b = new Blob([byteArray], { type: Browser.getMimetype(name) }) ;
5307 } catch(e) {
5308 return fail();
5309 }
5310 var url = Browser.URLObject.createObjectURL(b); // XXX we never revo ke this!
5311 var audio = new Audio();
5312 audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
5313 audio.onerror = function audio_onerror(event) {
5314 if (done) return;
5315 console.log('warning: browser could not fully decode audio ' + nam e + ', trying slower base64 approach');
5316 function encode64(data) {
5317 var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789+/';
5318 var PAD = '=';
5319 var ret = '';
5320 var leftchar = 0;
5321 var leftbits = 0;
5322 for (var i = 0; i < data.length; i++) {
5323 leftchar = (leftchar << 8) | data[i];
5324 leftbits += 8;
5325 while (leftbits >= 6) {
5326 var curr = (leftchar >> (leftbits-6)) & 0x3f;
5327 leftbits -= 6;
5328 ret += BASE[curr];
5329 }
5330 }
5331 if (leftbits == 2) {
5332 ret += BASE[(leftchar&3) << 4];
5333 ret += PAD + PAD;
5334 } else if (leftbits == 4) {
5335 ret += BASE[(leftchar&0xf) << 2];
5336 ret += PAD;
5337 }
5338 return ret;
5339 }
5340 audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encod e64(byteArray);
5341 finish(audio); // we don't wait for confirmation this worked - but it's worth trying
5342 };
5343 audio.src = url;
5344 // workaround for chrome bug 124926 - we do not always get oncanplay through or onerror
5345 Browser.safeSetTimeout(function() {
5346 finish(audio); // try to use it even though it is not necessarily ready to play
5347 }, 10000);
5348 } else {
5349 return fail();
5350 }
5351 };
5352 Module['preloadPlugins'].push(audioPlugin);
5353
5354 // Canvas event setup
5355
5356 var canvas = Module['canvas'];
5357
5358 // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module
5359 // Module['forcedAspectRatio'] = 4 / 3;
5360
5361 canvas.requestPointerLock = canvas['requestPointerLock'] ||
5362 canvas['mozRequestPointerLock'] ||
5363 canvas['webkitRequestPointerLock'] ||
5364 canvas['msRequestPointerLock'] ||
5365 function(){};
5366 canvas.exitPointerLock = document['exitPointerLock'] ||
5367 document['mozExitPointerLock'] ||
5368 document['webkitExitPointerLock'] ||
5369 document['msExitPointerLock'] ||
5370 function(){}; // no-op if function does not exi st
5371 canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
5372
5373 function pointerLockChange() {
5374 Browser.pointerLock = document['pointerLockElement'] === canvas ||
5375 document['mozPointerLockElement'] === canvas ||
5376 document['webkitPointerLockElement'] === canvas ||
5377 document['msPointerLockElement'] === canvas;
5378 }
5379
5380 document.addEventListener('pointerlockchange', pointerLockChange, false) ;
5381 document.addEventListener('mozpointerlockchange', pointerLockChange, fal se);
5382 document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
5383 document.addEventListener('mspointerlockchange', pointerLockChange, fals e);
5384
5385 if (Module['elementPointerLock']) {
5386 canvas.addEventListener("click", function(ev) {
5387 if (!Browser.pointerLock && canvas.requestPointerLock) {
5388 canvas.requestPointerLock();
5389 ev.preventDefault();
5390 }
5391 }, false);
5392 }
5393 },createContext:function (canvas, useWebGL, setInModule, webGLContextAttri butes) {
5394 var ctx;
5395 var errorInfo = '?';
5396 function onContextCreationError(event) {
5397 errorInfo = event.statusMessage || errorInfo;
5398 }
5399 try {
5400 if (useWebGL) {
5401 var contextAttributes = {
5402 antialias: false,
5403 alpha: false
5404 };
5405
5406 if (webGLContextAttributes) {
5407 for (var attribute in webGLContextAttributes) {
5408 contextAttributes[attribute] = webGLContextAttributes[attribute] ;
5409 }
5410 }
5411
5412
5413 canvas.addEventListener('webglcontextcreationerror', onContextCreati onError, false);
5414 try {
5415 ['experimental-webgl', 'webgl'].some(function(webglId) {
5416 return ctx = canvas.getContext(webglId, contextAttributes);
5417 });
5418 } finally {
5419 canvas.removeEventListener('webglcontextcreationerror', onContextC reationError, false);
5420 }
5421 } else {
5422 ctx = canvas.getContext('2d');
5423 }
5424 if (!ctx) throw ':(';
5425 } catch (e) {
5426 Module.print('Could not create canvas: ' + [errorInfo, e]);
5427 return null;
5428 }
5429 if (useWebGL) {
5430 // Set the background of the WebGL canvas to black
5431 canvas.style.backgroundColor = "black";
5432
5433 // Warn on context loss
5434 canvas.addEventListener('webglcontextlost', function(event) {
5435 alert('WebGL context lost. You will need to reload the page.');
5436 }, false);
5437 }
5438 if (setInModule) {
5439 GLctx = Module.ctx = ctx;
5440 Module.useWebGL = useWebGL;
5441 Browser.moduleContextCreatedCallbacks.forEach(function(callback) { cal lback() });
5442 Browser.init();
5443 }
5444 return ctx;
5445 },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHan dlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScr een:function (lockPointer, resizeCanvas) {
5446 Browser.lockPointer = lockPointer;
5447 Browser.resizeCanvas = resizeCanvas;
5448 if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = tr ue;
5449 if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
5450
5451 var canvas = Module['canvas'];
5452 function fullScreenChange() {
5453 Browser.isFullScreen = false;
5454 var canvasContainer = canvas.parentNode;
5455 if ((document['webkitFullScreenElement'] || document['webkitFullscreen Element'] ||
5456 document['mozFullScreenElement'] || document['mozFullscreenElemen t'] ||
5457 document['fullScreenElement'] || document['fullscreenElement'] ||
5458 document['msFullScreenElement'] || document['msFullscreenElement' ] ||
5459 document['webkitCurrentFullScreenElement']) === canvasContainer) {
5460 canvas.cancelFullScreen = document['cancelFullScreen'] ||
5461 document['mozCancelFullScreen'] ||
5462 document['webkitCancelFullScreen'] ||
5463 document['msExitFullscreen'] ||
5464 document['exitFullscreen'] ||
5465 function() {};
5466 canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
5467 if (Browser.lockPointer) canvas.requestPointerLock();
5468 Browser.isFullScreen = true;
5469 if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
5470 } else {
5471
5472 // remove the full screen specific parent of the canvas again to res tore the HTML structure from before going full screen
5473 canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
5474 canvasContainer.parentNode.removeChild(canvasContainer);
5475
5476 if (Browser.resizeCanvas) Browser.setWindowedCanvasSize();
5477 }
5478 if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScree n);
5479 Browser.updateCanvasDimensions(canvas);
5480 }
5481
5482 if (!Browser.fullScreenHandlersInstalled) {
5483 Browser.fullScreenHandlersInstalled = true;
5484 document.addEventListener('fullscreenchange', fullScreenChange, false) ;
5485 document.addEventListener('mozfullscreenchange', fullScreenChange, fal se);
5486 document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
5487 document.addEventListener('MSFullscreenChange', fullScreenChange, fals e);
5488 }
5489
5490 // 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
5491 var canvasContainer = document.createElement("div");
5492 canvas.parentNode.insertBefore(canvasContainer, canvas);
5493 canvasContainer.appendChild(canvas);
5494
5495 // use parent of canvas as full screen root to allow aspect ratio correc tion (Firefox stretches the root to screen size)
5496 canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] ||
5497 canvasContainer['mozRequestFullScree n'] ||
5498 canvasContainer['msRequestFullscreen '] ||
5499 (canvasContainer['webkitRequestFullSc reen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_ KEYBOARD_INPUT']) } : null);
5500 canvasContainer.requestFullScreen();
5501 },requestAnimationFrame:function requestAnimationFrame(func) {
5502 if (typeof window === 'undefined') { // Provide fallback to setTimeout i f window is undefined (e.g. in Node.js)
5503 setTimeout(func, 1000/60);
5504 } else {
5505 if (!window.requestAnimationFrame) {
5506 window.requestAnimationFrame = window['requestAnimationFrame'] ||
5507 window['mozRequestAnimationFrame'] ||
5508 window['webkitRequestAnimationFrame'] ||
5509 window['msRequestAnimationFrame'] ||
5510 window['oRequestAnimationFrame'] ||
5511 window['setTimeout'];
5512 }
5513 window.requestAnimationFrame(func);
5514 }
5515 },safeCallback:function (func) {
5516 return function() {
5517 if (!ABORT) return func.apply(null, arguments);
5518 };
5519 },safeRequestAnimationFrame:function (func) {
5520 return Browser.requestAnimationFrame(function() {
5521 if (!ABORT) func();
5522 });
5523 },safeSetTimeout:function (func, timeout) {
5524 return setTimeout(function() {
5525 if (!ABORT) func();
5526 }, timeout);
5527 },safeSetInterval:function (func, timeout) {
5528 return setInterval(function() {
5529 if (!ABORT) func();
5530 }, timeout);
5531 },getMimetype:function (name) {
5532 return {
5533 'jpg': 'image/jpeg',
5534 'jpeg': 'image/jpeg',
5535 'png': 'image/png',
5536 'bmp': 'image/bmp',
5537 'ogg': 'audio/ogg',
5538 'wav': 'audio/wav',
5539 'mp3': 'audio/mpeg'
5540 }[name.substr(name.lastIndexOf('.')+1)];
5541 },getUserMedia:function (func) {
5542 if(!window.getUserMedia) {
5543 window.getUserMedia = navigator['getUserMedia'] ||
5544 navigator['mozGetUserMedia'];
5545 }
5546 window.getUserMedia(func);
5547 },getMovementX:function (event) {
5548 return event['movementX'] ||
5549 event['mozMovementX'] ||
5550 event['webkitMovementX'] ||
5551 0;
5552 },getMovementY:function (event) {
5553 return event['movementY'] ||
5554 event['mozMovementY'] ||
5555 event['webkitMovementY'] ||
5556 0;
5557 },getMouseWheelDelta:function (event) {
5558 return Math.max(-1, Math.min(1, event.type === 'DOMMouseScroll' ? event. detail : -event.wheelDelta));
5559 },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent: function (event) { // event should be mousemove, mousedown or mouseup
5560 if (Browser.pointerLock) {
5561 // When the pointer is locked, calculate the coordinates
5562 // based on the movement of the mouse.
5563 // Workaround for Firefox bug 764498
5564 if (event.type != 'mousemove' &&
5565 ('mozMovementX' in event)) {
5566 Browser.mouseMovementX = Browser.mouseMovementY = 0;
5567 } else {
5568 Browser.mouseMovementX = Browser.getMovementX(event);
5569 Browser.mouseMovementY = Browser.getMovementY(event);
5570 }
5571
5572 // check if SDL is available
5573 if (typeof SDL != "undefined") {
5574 Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
5575 Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
5576 } else {
5577 // just add the mouse delta to the current absolut mouse position
5578 // FIXME: ideally this should be clamped against the canvas size and zero
5579 Browser.mouseX += Browser.mouseMovementX;
5580 Browser.mouseY += Browser.mouseMovementY;
5581 }
5582 } else {
5583 // Otherwise, calculate the movement based on the changes
5584 // in the coordinates.
5585 var rect = Module["canvas"].getBoundingClientRect();
5586 var x, y;
5587
5588 // Neither .scrollX or .pageXOffset are defined in a spec, but
5589 // we prefer .scrollX because it is currently in a spec draft.
5590 // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
5591 var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scroll X : window.pageXOffset);
5592 var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scroll Y : window.pageYOffset);
5593 if (event.type == 'touchstart' ||
5594 event.type == 'touchend' ||
5595 event.type == 'touchmove') {
5596 var t = event.touches.item(0);
5597 if (t) {
5598 x = t.pageX - (scrollX + rect.left);
5599 y = t.pageY - (scrollY + rect.top);
5600 } else {
5601 return;
5602 }
5603 } else {
5604 x = event.pageX - (scrollX + rect.left);
5605 y = event.pageY - (scrollY + rect.top);
5606 }
5607
5608 // the canvas might be CSS-scaled compared to its backbuffer;
5609 // SDL-using content will want mouse coordinates in terms
5610 // of backbuffer units.
5611 var cw = Module["canvas"].width;
5612 var ch = Module["canvas"].height;
5613 x = x * (cw / rect.width);
5614 y = y * (ch / rect.height);
5615
5616 Browser.mouseMovementX = x - Browser.mouseX;
5617 Browser.mouseMovementY = y - Browser.mouseY;
5618 Browser.mouseX = x;
5619 Browser.mouseY = y;
5620 }
5621 },xhrLoad:function (url, onload, onerror) {
5622 var xhr = new XMLHttpRequest();
5623 xhr.open('GET', url, true);
5624 xhr.responseType = 'arraybuffer';
5625 xhr.onload = function xhr_onload() {
5626 if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
5627 onload(xhr.response);
5628 } else {
5629 onerror();
5630 }
5631 };
5632 xhr.onerror = onerror;
5633 xhr.send(null);
5634 },asyncLoad:function (url, onload, onerror, noRunDep) {
5635 Browser.xhrLoad(url, function(arrayBuffer) {
5636 assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayB uffer).');
5637 onload(new Uint8Array(arrayBuffer));
5638 if (!noRunDep) removeRunDependency('al ' + url);
5639 }, function(event) {
5640 if (onerror) {
5641 onerror();
5642 } else {
5643 throw 'Loading data file "' + url + '" failed.';
5644 }
5645 });
5646 if (!noRunDep) addRunDependency('al ' + url);
5647 },resizeListeners:[],updateResizeListeners:function () {
5648 var canvas = Module['canvas'];
5649 Browser.resizeListeners.forEach(function(listener) {
5650 listener(canvas.width, canvas.height);
5651 });
5652 },setCanvasSize:function (width, height, noUpdates) {
5653 var canvas = Module['canvas'];
5654 Browser.updateCanvasDimensions(canvas, width, height);
5655 if (!noUpdates) Browser.updateResizeListeners();
5656 },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
5657 // check if SDL is available
5658 if (typeof SDL != "undefined") {
5659 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
5660 flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
5661 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
5662 }
5663 Browser.updateResizeListeners();
5664 },setWindowedCanvasSize:function () {
5665 // check if SDL is available
5666 if (typeof SDL != "undefined") {
5667 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
5668 flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
5669 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
5670 }
5671 Browser.updateResizeListeners();
5672 },updateCanvasDimensions:function (canvas, wNative, hNative) {
5673 if (wNative && hNative) {
5674 canvas.widthNative = wNative;
5675 canvas.heightNative = hNative;
5676 } else {
5677 wNative = canvas.widthNative;
5678 hNative = canvas.heightNative;
5679 }
5680 var w = wNative;
5681 var h = hNative;
5682 if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) {
5683 if (w/h < Module['forcedAspectRatio']) {
5684 w = Math.round(h * Module['forcedAspectRatio']);
5685 } else {
5686 h = Math.round(w / Module['forcedAspectRatio']);
5687 }
5688 }
5689 if (((document['webkitFullScreenElement'] || document['webkitFullscreenE lement'] ||
5690 document['mozFullScreenElement'] || document['mozFullscreenElement' ] ||
5691 document['fullScreenElement'] || document['fullscreenElement'] ||
5692 document['msFullScreenElement'] || document['msFullscreenElement'] ||
5693 document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) {
5694 var factor = Math.min(screen.width / w, screen.height / h);
5695 w = Math.round(w * factor);
5696 h = Math.round(h * factor);
5697 }
5698 if (Browser.resizeCanvas) {
5699 if (canvas.width != w) canvas.width = w;
5700 if (canvas.height != h) canvas.height = h;
5701 if (typeof canvas.style != 'undefined') {
5702 canvas.style.removeProperty( "width");
5703 canvas.style.removeProperty("height");
5704 }
5705 } else {
5706 if (canvas.width != wNative) canvas.width = wNative;
5707 if (canvas.height != hNative) canvas.height = hNative;
5708 if (typeof canvas.style != 'undefined') {
5709 if (w != wNative || h != hNative) {
5710 canvas.style.setProperty( "width", w + "px", "important");
5711 canvas.style.setProperty("height", h + "px", "important");
5712 } else {
5713 canvas.style.removeProperty( "width");
5714 canvas.style.removeProperty("height");
5715 }
5716 }
5717 }
5718 }};
5719
5720 function _sbrk(bytes) {
5721 // Implement a Linux-like 'memory area' for our 'process'.
5722 // Changes the size of the memory area by |bytes|; returns the
5723 // address of the previous top ('break') of the memory area
5724 // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
5725 var self = _sbrk;
5726 if (!self.called) {
5727 DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out alig ned
5728 self.called = true;
5729 assert(Runtime.dynamicAlloc);
5730 self.alloc = Runtime.dynamicAlloc;
5731 Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
5732 }
5733 var ret = DYNAMICTOP;
5734 if (bytes != 0) self.alloc(bytes);
5735 return ret; // Previous break location.
5736 }
5737
5738 function _sysconf(name) {
5739 // long sysconf(int name);
5740 // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
5741 switch(name) {
5742 case 30: return PAGE_SIZE;
5743 case 132:
5744 case 133:
5745 case 12:
5746 case 137:
5747 case 138:
5748 case 15:
5749 case 235:
5750 case 16:
5751 case 17:
5752 case 18:
5753 case 19:
5754 case 20:
5755 case 149:
5756 case 13:
5757 case 10:
5758 case 236:
5759 case 153:
5760 case 9:
5761 case 21:
5762 case 22:
5763 case 159:
5764 case 154:
5765 case 14:
5766 case 77:
5767 case 78:
5768 case 139:
5769 case 80:
5770 case 81:
5771 case 79:
5772 case 82:
5773 case 68:
5774 case 67:
5775 case 164:
5776 case 11:
5777 case 29:
5778 case 47:
5779 case 48:
5780 case 95:
5781 case 52:
5782 case 51:
5783 case 46:
5784 return 200809;
5785 case 27:
5786 case 246:
5787 case 127:
5788 case 128:
5789 case 23:
5790 case 24:
5791 case 160:
5792 case 161:
5793 case 181:
5794 case 182:
5795 case 242:
5796 case 183:
5797 case 184:
5798 case 243:
5799 case 244:
5800 case 245:
5801 case 165:
5802 case 178:
5803 case 179:
5804 case 49:
5805 case 50:
5806 case 168:
5807 case 169:
5808 case 175:
5809 case 170:
5810 case 171:
5811 case 172:
5812 case 97:
5813 case 76:
5814 case 32:
5815 case 173:
5816 case 35:
5817 return -1;
5818 case 176:
5819 case 177:
5820 case 7:
5821 case 155:
5822 case 8:
5823 case 157:
5824 case 125:
5825 case 126:
5826 case 92:
5827 case 93:
5828 case 129:
5829 case 130:
5830 case 131:
5831 case 94:
5832 case 91:
5833 return 1;
5834 case 74:
5835 case 60:
5836 case 69:
5837 case 70:
5838 case 4:
5839 return 1024;
5840 case 31:
5841 case 42:
5842 case 72:
5843 return 32;
5844 case 87:
5845 case 26:
5846 case 33:
5847 return 2147483647;
5848 case 34:
5849 case 1:
5850 return 47839;
5851 case 38:
5852 case 36:
5853 return 99;
5854 case 43:
5855 case 37:
5856 return 2048;
5857 case 0: return 2097152;
5858 case 3: return 65536;
5859 case 28: return 32768;
5860 case 44: return 32767;
5861 case 75: return 16384;
5862 case 39: return 1000;
5863 case 89: return 700;
5864 case 71: return 256;
5865 case 40: return 255;
5866 case 2: return 100;
5867 case 180: return 64;
5868 case 25: return 20;
5869 case 5: return 16;
5870 case 6: return 6;
5871 case 73: return 4;
5872 case 84: return 1;
5873 }
5874 ___setErrNo(ERRNO_CODES.EINVAL);
5875 return -1;
5876 }
5877
5878 function _emscripten_run_script(ptr) {
5879 eval(Pointer_stringify(ptr));
5880 }
5881
5882
5883 function _malloc(bytes) {
5884 /* Over-allocate to make sure it is byte-aligned by 8.
5885 * This will leak memory, but this is only the dummy
5886 * implementation (replaced by dlmalloc normally) so
5887 * not an issue.
5888 */
5889 var ptr = Runtime.dynamicAlloc(bytes + 8);
5890 return (ptr+8) & 0xFFFFFFF8;
5891 }
5892 Module["_malloc"] = _malloc;function ___cxa_allocate_exception(size) {
5893 var ptr = _malloc(size + ___cxa_exception_header_size);
5894 return ptr + ___cxa_exception_header_size;
5895 }
5896
5897 function _emscripten_cancel_main_loop() {
5898 Browser.mainLoop.scheduler = null;
5899 Browser.mainLoop.shouldPause = true;
5900 }
5901
5902 var __ZTISt9exception=allocate([allocate([1,0,0,0,0,0,0], "i8", ALLOC_STATIC)+ 8, 0], "i32", ALLOC_STATIC);
5903 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.crea tePath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloade dFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile ;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDe vice;
5904 ___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
5905 __ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor();
5906 if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); }
5907 __ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } });
5908 _fputc.ret = allocate([0], "i8", ALLOC_STATIC);
5909 Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, res izeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
5910 Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };
5911 Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdat es) { Browser.setCanvasSize(width, height, noUpdates) };
5912 Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.p ause() };
5913 Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop .resume() };
5914 Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia () }
5915 STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
5916
5917 staticSealed = true; // seal the static portion of memory
5918
5919 STACK_MAX = STACK_BASE + 5242880;
5920
5921 DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
5922
5923 assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
5924
5925
5926 var Math_min = Math.min;
5927 function invoke_iiii(index,a1,a2,a3) {
5928 try {
5929 return Module["dynCall_iiii"](index,a1,a2,a3);
5930 } catch(e) {
5931 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5932 asm["setThrew"](1, 0);
5933 }
5934 }
5935
5936 function invoke_viiiii(index,a1,a2,a3,a4,a5) {
5937 try {
5938 Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5);
5939 } catch(e) {
5940 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5941 asm["setThrew"](1, 0);
5942 }
5943 }
5944
5945 function invoke_vi(index,a1) {
5946 try {
5947 Module["dynCall_vi"](index,a1);
5948 } catch(e) {
5949 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5950 asm["setThrew"](1, 0);
5951 }
5952 }
5953
5954 function invoke_vii(index,a1,a2) {
5955 try {
5956 Module["dynCall_vii"](index,a1,a2);
5957 } catch(e) {
5958 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5959 asm["setThrew"](1, 0);
5960 }
5961 }
5962
5963 function invoke_ii(index,a1) {
5964 try {
5965 return Module["dynCall_ii"](index,a1);
5966 } catch(e) {
5967 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5968 asm["setThrew"](1, 0);
5969 }
5970 }
5971
5972 function invoke_viii(index,a1,a2,a3) {
5973 try {
5974 Module["dynCall_viii"](index,a1,a2,a3);
5975 } catch(e) {
5976 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5977 asm["setThrew"](1, 0);
5978 }
5979 }
5980
5981 function invoke_v(index) {
5982 try {
5983 Module["dynCall_v"](index);
5984 } catch(e) {
5985 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5986 asm["setThrew"](1, 0);
5987 }
5988 }
5989
5990 function invoke_viid(index,a1,a2,a3) {
5991 try {
5992 Module["dynCall_viid"](index,a1,a2,a3);
5993 } catch(e) {
5994 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5995 asm["setThrew"](1, 0);
5996 }
5997 }
5998
5999 function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
6000 try {
6001 Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6);
6002 } catch(e) {
6003 if (typeof e !== 'number' && e !== 'longjmp') throw e;
6004 asm["setThrew"](1, 0);
6005 }
6006 }
6007
6008 function invoke_iii(index,a1,a2) {
6009 try {
6010 return Module["dynCall_iii"](index,a1,a2);
6011 } catch(e) {
6012 if (typeof e !== 'number' && e !== 'longjmp') throw e;
6013 asm["setThrew"](1, 0);
6014 }
6015 }
6016
6017 function invoke_iiiiii(index,a1,a2,a3,a4,a5) {
6018 try {
6019 return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5);
6020 } catch(e) {
6021 if (typeof e !== 'number' && e !== 'longjmp') throw e;
6022 asm["setThrew"](1, 0);
6023 }
6024 }
6025
6026 function invoke_viiii(index,a1,a2,a3,a4) {
6027 try {
6028 Module["dynCall_viiii"](index,a1,a2,a3,a4);
6029 } catch(e) {
6030 if (typeof e !== 'number' && e !== 'longjmp') throw e;
6031 asm["setThrew"](1, 0);
6032 }
6033 }
6034
6035 function asmPrintInt(x, y) {
6036 Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
6037 }
6038 function asmPrintFloat(x, y) {
6039 Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
6040 }
6041 // EMSCRIPTEN_START_ASM
6042 var asm = (function(global, env, buffer) {
6043 'use asm';
6044 var HEAP8 = new global.Int8Array(buffer);
6045 var HEAP16 = new global.Int16Array(buffer);
6046 var HEAP32 = new global.Int32Array(buffer);
6047 var HEAPU8 = new global.Uint8Array(buffer);
6048 var HEAPU16 = new global.Uint16Array(buffer);
6049 var HEAPU32 = new global.Uint32Array(buffer);
6050 var HEAPF32 = new global.Float32Array(buffer);
6051 var HEAPF64 = new global.Float64Array(buffer);
6052
6053 var STACKTOP=env.STACKTOP|0;
6054 var STACK_MAX=env.STACK_MAX|0;
6055 var tempDoublePtr=env.tempDoublePtr|0;
6056 var ABORT=env.ABORT|0;
6057 var __ZTISt9exception=env.__ZTISt9exception|0;
6058
6059 var __THREW__ = 0;
6060 var threwValue = 0;
6061 var setjmpId = 0;
6062 var undef = 0;
6063 var nan = +env.NaN, inf = +env.Infinity;
6064 var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0;
6065
6066 var tempRet0 = 0;
6067 var tempRet1 = 0;
6068 var tempRet2 = 0;
6069 var tempRet3 = 0;
6070 var tempRet4 = 0;
6071 var tempRet5 = 0;
6072 var tempRet6 = 0;
6073 var tempRet7 = 0;
6074 var tempRet8 = 0;
6075 var tempRet9 = 0;
6076 var Math_floor=global.Math.floor;
6077 var Math_abs=global.Math.abs;
6078 var Math_sqrt=global.Math.sqrt;
6079 var Math_pow=global.Math.pow;
6080 var Math_cos=global.Math.cos;
6081 var Math_sin=global.Math.sin;
6082 var Math_tan=global.Math.tan;
6083 var Math_acos=global.Math.acos;
6084 var Math_asin=global.Math.asin;
6085 var Math_atan=global.Math.atan;
6086 var Math_atan2=global.Math.atan2;
6087 var Math_exp=global.Math.exp;
6088 var Math_log=global.Math.log;
6089 var Math_ceil=global.Math.ceil;
6090 var Math_imul=global.Math.imul;
6091 var abort=env.abort;
6092 var assert=env.assert;
6093 var asmPrintInt=env.asmPrintInt;
6094 var asmPrintFloat=env.asmPrintFloat;
6095 var Math_min=env.min;
6096 var invoke_iiii=env.invoke_iiii;
6097 var invoke_viiiii=env.invoke_viiiii;
6098 var invoke_vi=env.invoke_vi;
6099 var invoke_vii=env.invoke_vii;
6100 var invoke_ii=env.invoke_ii;
6101 var invoke_viii=env.invoke_viii;
6102 var invoke_v=env.invoke_v;
6103 var invoke_viid=env.invoke_viid;
6104 var invoke_viiiiii=env.invoke_viiiiii;
6105 var invoke_iii=env.invoke_iii;
6106 var invoke_iiiiii=env.invoke_iiiiii;
6107 var invoke_viiii=env.invoke_viiii;
6108 var ___cxa_throw=env.___cxa_throw;
6109 var _emscripten_run_script=env._emscripten_run_script;
6110 var _cosf=env._cosf;
6111 var _send=env._send;
6112 var __ZSt9terminatev=env.__ZSt9terminatev;
6113 var __reallyNegative=env.__reallyNegative;
6114 var ___cxa_is_number_type=env.___cxa_is_number_type;
6115 var ___assert_fail=env.___assert_fail;
6116 var ___cxa_allocate_exception=env.___cxa_allocate_exception;
6117 var ___cxa_find_matching_catch=env.___cxa_find_matching_catch;
6118 var _fflush=env._fflush;
6119 var _pwrite=env._pwrite;
6120 var ___setErrNo=env.___setErrNo;
6121 var _sbrk=env._sbrk;
6122 var ___cxa_begin_catch=env.___cxa_begin_catch;
6123 var _sinf=env._sinf;
6124 var _fileno=env._fileno;
6125 var ___resumeException=env.___resumeException;
6126 var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv;
6127 var _sysconf=env._sysconf;
6128 var _clock=env._clock;
6129 var _emscripten_memcpy_big=env._emscripten_memcpy_big;
6130 var _puts=env._puts;
6131 var _mkport=env._mkport;
6132 var _floorf=env._floorf;
6133 var _sqrtf=env._sqrtf;
6134 var _write=env._write;
6135 var _emscripten_set_main_loop=env._emscripten_set_main_loop;
6136 var ___errno_location=env.___errno_location;
6137 var __ZNSt9exceptionD2Ev=env.__ZNSt9exceptionD2Ev;
6138 var _printf=env._printf;
6139 var ___cxa_does_inherit=env.___cxa_does_inherit;
6140 var __exit=env.__exit;
6141 var _fputc=env._fputc;
6142 var _abort=env._abort;
6143 var _fwrite=env._fwrite;
6144 var _time=env._time;
6145 var _fprintf=env._fprintf;
6146 var _emscripten_cancel_main_loop=env._emscripten_cancel_main_loop;
6147 var __formatString=env.__formatString;
6148 var _fputs=env._fputs;
6149 var _exit=env._exit;
6150 var ___cxa_pure_virtual=env.___cxa_pure_virtual;
6151 var tempFloat = 0.0;
6152
6153 // EMSCRIPTEN_START_FUNCS
6154 function _malloc(i12) {
6155 i12 = i12 | 0;
6156 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, i2 0 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i 29 = 0, i30 = 0, i31 = 0, i32 = 0;
6157 i1 = STACKTOP;
6158 do {
6159 if (i12 >>> 0 < 245) {
6160 if (i12 >>> 0 < 11) {
6161 i12 = 16;
6162 } else {
6163 i12 = i12 + 11 & -8;
6164 }
6165 i20 = i12 >>> 3;
6166 i18 = HEAP32[1790] | 0;
6167 i21 = i18 >>> i20;
6168 if ((i21 & 3 | 0) != 0) {
6169 i6 = (i21 & 1 ^ 1) + i20 | 0;
6170 i5 = i6 << 1;
6171 i3 = 7200 + (i5 << 2) | 0;
6172 i5 = 7200 + (i5 + 2 << 2) | 0;
6173 i7 = HEAP32[i5 >> 2] | 0;
6174 i2 = i7 + 8 | 0;
6175 i4 = HEAP32[i2 >> 2] | 0;
6176 do {
6177 if ((i3 | 0) != (i4 | 0)) {
6178 if (i4 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6179 _abort();
6180 }
6181 i8 = i4 + 12 | 0;
6182 if ((HEAP32[i8 >> 2] | 0) == (i7 | 0)) {
6183 HEAP32[i8 >> 2] = i3;
6184 HEAP32[i5 >> 2] = i4;
6185 break;
6186 } else {
6187 _abort();
6188 }
6189 } else {
6190 HEAP32[1790] = i18 & ~(1 << i6);
6191 }
6192 } while (0);
6193 i32 = i6 << 3;
6194 HEAP32[i7 + 4 >> 2] = i32 | 3;
6195 i32 = i7 + (i32 | 4) | 0;
6196 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
6197 i32 = i2;
6198 STACKTOP = i1;
6199 return i32 | 0;
6200 }
6201 if (i12 >>> 0 > (HEAP32[7168 >> 2] | 0) >>> 0) {
6202 if ((i21 | 0) != 0) {
6203 i7 = 2 << i20;
6204 i7 = i21 << i20 & (i7 | 0 - i7);
6205 i7 = (i7 & 0 - i7) + -1 | 0;
6206 i2 = i7 >>> 12 & 16;
6207 i7 = i7 >>> i2;
6208 i6 = i7 >>> 5 & 8;
6209 i7 = i7 >>> i6;
6210 i5 = i7 >>> 2 & 4;
6211 i7 = i7 >>> i5;
6212 i4 = i7 >>> 1 & 2;
6213 i7 = i7 >>> i4;
6214 i3 = i7 >>> 1 & 1;
6215 i3 = (i6 | i2 | i5 | i4 | i3) + (i7 >>> i3) | 0;
6216 i7 = i3 << 1;
6217 i4 = 7200 + (i7 << 2) | 0;
6218 i7 = 7200 + (i7 + 2 << 2) | 0;
6219 i5 = HEAP32[i7 >> 2] | 0;
6220 i2 = i5 + 8 | 0;
6221 i6 = HEAP32[i2 >> 2] | 0;
6222 do {
6223 if ((i4 | 0) != (i6 | 0)) {
6224 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6225 _abort();
6226 }
6227 i8 = i6 + 12 | 0;
6228 if ((HEAP32[i8 >> 2] | 0) == (i5 | 0)) {
6229 HEAP32[i8 >> 2] = i4;
6230 HEAP32[i7 >> 2] = i6;
6231 break;
6232 } else {
6233 _abort();
6234 }
6235 } else {
6236 HEAP32[1790] = i18 & ~(1 << i3);
6237 }
6238 } while (0);
6239 i6 = i3 << 3;
6240 i4 = i6 - i12 | 0;
6241 HEAP32[i5 + 4 >> 2] = i12 | 3;
6242 i3 = i5 + i12 | 0;
6243 HEAP32[i5 + (i12 | 4) >> 2] = i4 | 1;
6244 HEAP32[i5 + i6 >> 2] = i4;
6245 i6 = HEAP32[7168 >> 2] | 0;
6246 if ((i6 | 0) != 0) {
6247 i5 = HEAP32[7180 >> 2] | 0;
6248 i8 = i6 >>> 3;
6249 i9 = i8 << 1;
6250 i6 = 7200 + (i9 << 2) | 0;
6251 i7 = HEAP32[1790] | 0;
6252 i8 = 1 << i8;
6253 if ((i7 & i8 | 0) != 0) {
6254 i7 = 7200 + (i9 + 2 << 2) | 0;
6255 i8 = HEAP32[i7 >> 2] | 0;
6256 if (i8 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6257 _abort();
6258 } else {
6259 i28 = i7;
6260 i27 = i8;
6261 }
6262 } else {
6263 HEAP32[1790] = i7 | i8;
6264 i28 = 7200 + (i9 + 2 << 2) | 0;
6265 i27 = i6;
6266 }
6267 HEAP32[i28 >> 2] = i5;
6268 HEAP32[i27 + 12 >> 2] = i5;
6269 HEAP32[i5 + 8 >> 2] = i27;
6270 HEAP32[i5 + 12 >> 2] = i6;
6271 }
6272 HEAP32[7168 >> 2] = i4;
6273 HEAP32[7180 >> 2] = i3;
6274 i32 = i2;
6275 STACKTOP = i1;
6276 return i32 | 0;
6277 }
6278 i18 = HEAP32[7164 >> 2] | 0;
6279 if ((i18 | 0) != 0) {
6280 i2 = (i18 & 0 - i18) + -1 | 0;
6281 i31 = i2 >>> 12 & 16;
6282 i2 = i2 >>> i31;
6283 i30 = i2 >>> 5 & 8;
6284 i2 = i2 >>> i30;
6285 i32 = i2 >>> 2 & 4;
6286 i2 = i2 >>> i32;
6287 i6 = i2 >>> 1 & 2;
6288 i2 = i2 >>> i6;
6289 i3 = i2 >>> 1 & 1;
6290 i3 = HEAP32[7464 + ((i30 | i31 | i32 | i6 | i3) + (i2 >>> i3) << 2) >> 2] | 0;
6291 i2 = (HEAP32[i3 + 4 >> 2] & -8) - i12 | 0;
6292 i6 = i3;
6293 while (1) {
6294 i5 = HEAP32[i6 + 16 >> 2] | 0;
6295 if ((i5 | 0) == 0) {
6296 i5 = HEAP32[i6 + 20 >> 2] | 0;
6297 if ((i5 | 0) == 0) {
6298 break;
6299 }
6300 }
6301 i6 = (HEAP32[i5 + 4 >> 2] & -8) - i12 | 0;
6302 i4 = i6 >>> 0 < i2 >>> 0;
6303 i2 = i4 ? i6 : i2;
6304 i6 = i5;
6305 i3 = i4 ? i5 : i3;
6306 }
6307 i6 = HEAP32[7176 >> 2] | 0;
6308 if (i3 >>> 0 < i6 >>> 0) {
6309 _abort();
6310 }
6311 i4 = i3 + i12 | 0;
6312 if (!(i3 >>> 0 < i4 >>> 0)) {
6313 _abort();
6314 }
6315 i5 = HEAP32[i3 + 24 >> 2] | 0;
6316 i7 = HEAP32[i3 + 12 >> 2] | 0;
6317 do {
6318 if ((i7 | 0) == (i3 | 0)) {
6319 i8 = i3 + 20 | 0;
6320 i7 = HEAP32[i8 >> 2] | 0;
6321 if ((i7 | 0) == 0) {
6322 i8 = i3 + 16 | 0;
6323 i7 = HEAP32[i8 >> 2] | 0;
6324 if ((i7 | 0) == 0) {
6325 i26 = 0;
6326 break;
6327 }
6328 }
6329 while (1) {
6330 i10 = i7 + 20 | 0;
6331 i9 = HEAP32[i10 >> 2] | 0;
6332 if ((i9 | 0) != 0) {
6333 i7 = i9;
6334 i8 = i10;
6335 continue;
6336 }
6337 i10 = i7 + 16 | 0;
6338 i9 = HEAP32[i10 >> 2] | 0;
6339 if ((i9 | 0) == 0) {
6340 break;
6341 } else {
6342 i7 = i9;
6343 i8 = i10;
6344 }
6345 }
6346 if (i8 >>> 0 < i6 >>> 0) {
6347 _abort();
6348 } else {
6349 HEAP32[i8 >> 2] = 0;
6350 i26 = i7;
6351 break;
6352 }
6353 } else {
6354 i8 = HEAP32[i3 + 8 >> 2] | 0;
6355 if (i8 >>> 0 < i6 >>> 0) {
6356 _abort();
6357 }
6358 i6 = i8 + 12 | 0;
6359 if ((HEAP32[i6 >> 2] | 0) != (i3 | 0)) {
6360 _abort();
6361 }
6362 i9 = i7 + 8 | 0;
6363 if ((HEAP32[i9 >> 2] | 0) == (i3 | 0)) {
6364 HEAP32[i6 >> 2] = i7;
6365 HEAP32[i9 >> 2] = i8;
6366 i26 = i7;
6367 break;
6368 } else {
6369 _abort();
6370 }
6371 }
6372 } while (0);
6373 do {
6374 if ((i5 | 0) != 0) {
6375 i7 = HEAP32[i3 + 28 >> 2] | 0;
6376 i6 = 7464 + (i7 << 2) | 0;
6377 if ((i3 | 0) == (HEAP32[i6 >> 2] | 0)) {
6378 HEAP32[i6 >> 2] = i26;
6379 if ((i26 | 0) == 0) {
6380 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i7);
6381 break;
6382 }
6383 } else {
6384 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6385 _abort();
6386 }
6387 i6 = i5 + 16 | 0;
6388 if ((HEAP32[i6 >> 2] | 0) == (i3 | 0)) {
6389 HEAP32[i6 >> 2] = i26;
6390 } else {
6391 HEAP32[i5 + 20 >> 2] = i26;
6392 }
6393 if ((i26 | 0) == 0) {
6394 break;
6395 }
6396 }
6397 if (i26 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6398 _abort();
6399 }
6400 HEAP32[i26 + 24 >> 2] = i5;
6401 i5 = HEAP32[i3 + 16 >> 2] | 0;
6402 do {
6403 if ((i5 | 0) != 0) {
6404 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6405 _abort();
6406 } else {
6407 HEAP32[i26 + 16 >> 2] = i5;
6408 HEAP32[i5 + 24 >> 2] = i26;
6409 break;
6410 }
6411 }
6412 } while (0);
6413 i5 = HEAP32[i3 + 20 >> 2] | 0;
6414 if ((i5 | 0) != 0) {
6415 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6416 _abort();
6417 } else {
6418 HEAP32[i26 + 20 >> 2] = i5;
6419 HEAP32[i5 + 24 >> 2] = i26;
6420 break;
6421 }
6422 }
6423 }
6424 } while (0);
6425 if (i2 >>> 0 < 16) {
6426 i32 = i2 + i12 | 0;
6427 HEAP32[i3 + 4 >> 2] = i32 | 3;
6428 i32 = i3 + (i32 + 4) | 0;
6429 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
6430 } else {
6431 HEAP32[i3 + 4 >> 2] = i12 | 3;
6432 HEAP32[i3 + (i12 | 4) >> 2] = i2 | 1;
6433 HEAP32[i3 + (i2 + i12) >> 2] = i2;
6434 i6 = HEAP32[7168 >> 2] | 0;
6435 if ((i6 | 0) != 0) {
6436 i5 = HEAP32[7180 >> 2] | 0;
6437 i8 = i6 >>> 3;
6438 i9 = i8 << 1;
6439 i6 = 7200 + (i9 << 2) | 0;
6440 i7 = HEAP32[1790] | 0;
6441 i8 = 1 << i8;
6442 if ((i7 & i8 | 0) != 0) {
6443 i7 = 7200 + (i9 + 2 << 2) | 0;
6444 i8 = HEAP32[i7 >> 2] | 0;
6445 if (i8 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6446 _abort();
6447 } else {
6448 i25 = i7;
6449 i24 = i8;
6450 }
6451 } else {
6452 HEAP32[1790] = i7 | i8;
6453 i25 = 7200 + (i9 + 2 << 2) | 0;
6454 i24 = i6;
6455 }
6456 HEAP32[i25 >> 2] = i5;
6457 HEAP32[i24 + 12 >> 2] = i5;
6458 HEAP32[i5 + 8 >> 2] = i24;
6459 HEAP32[i5 + 12 >> 2] = i6;
6460 }
6461 HEAP32[7168 >> 2] = i2;
6462 HEAP32[7180 >> 2] = i4;
6463 }
6464 i32 = i3 + 8 | 0;
6465 STACKTOP = i1;
6466 return i32 | 0;
6467 }
6468 }
6469 } else {
6470 if (!(i12 >>> 0 > 4294967231)) {
6471 i24 = i12 + 11 | 0;
6472 i12 = i24 & -8;
6473 i26 = HEAP32[7164 >> 2] | 0;
6474 if ((i26 | 0) != 0) {
6475 i25 = 0 - i12 | 0;
6476 i24 = i24 >>> 8;
6477 if ((i24 | 0) != 0) {
6478 if (i12 >>> 0 > 16777215) {
6479 i27 = 31;
6480 } else {
6481 i31 = (i24 + 1048320 | 0) >>> 16 & 8;
6482 i32 = i24 << i31;
6483 i30 = (i32 + 520192 | 0) >>> 16 & 4;
6484 i32 = i32 << i30;
6485 i27 = (i32 + 245760 | 0) >>> 16 & 2;
6486 i27 = 14 - (i30 | i31 | i27) + (i32 << i27 >>> 15) | 0;
6487 i27 = i12 >>> (i27 + 7 | 0) & 1 | i27 << 1;
6488 }
6489 } else {
6490 i27 = 0;
6491 }
6492 i30 = HEAP32[7464 + (i27 << 2) >> 2] | 0;
6493 L126 : do {
6494 if ((i30 | 0) == 0) {
6495 i29 = 0;
6496 i24 = 0;
6497 } else {
6498 if ((i27 | 0) == 31) {
6499 i24 = 0;
6500 } else {
6501 i24 = 25 - (i27 >>> 1) | 0;
6502 }
6503 i29 = 0;
6504 i28 = i12 << i24;
6505 i24 = 0;
6506 while (1) {
6507 i32 = HEAP32[i30 + 4 >> 2] & -8;
6508 i31 = i32 - i12 | 0;
6509 if (i31 >>> 0 < i25 >>> 0) {
6510 if ((i32 | 0) == (i12 | 0)) {
6511 i25 = i31;
6512 i29 = i30;
6513 i24 = i30;
6514 break L126;
6515 } else {
6516 i25 = i31;
6517 i24 = i30;
6518 }
6519 }
6520 i31 = HEAP32[i30 + 20 >> 2] | 0;
6521 i30 = HEAP32[i30 + (i28 >>> 31 << 2) + 16 >> 2] | 0;
6522 i29 = (i31 | 0) == 0 | (i31 | 0) == (i30 | 0) ? i29 : i31;
6523 if ((i30 | 0) == 0) {
6524 break;
6525 } else {
6526 i28 = i28 << 1;
6527 }
6528 }
6529 }
6530 } while (0);
6531 if ((i29 | 0) == 0 & (i24 | 0) == 0) {
6532 i32 = 2 << i27;
6533 i26 = i26 & (i32 | 0 - i32);
6534 if ((i26 | 0) == 0) {
6535 break;
6536 }
6537 i32 = (i26 & 0 - i26) + -1 | 0;
6538 i28 = i32 >>> 12 & 16;
6539 i32 = i32 >>> i28;
6540 i27 = i32 >>> 5 & 8;
6541 i32 = i32 >>> i27;
6542 i30 = i32 >>> 2 & 4;
6543 i32 = i32 >>> i30;
6544 i31 = i32 >>> 1 & 2;
6545 i32 = i32 >>> i31;
6546 i29 = i32 >>> 1 & 1;
6547 i29 = HEAP32[7464 + ((i27 | i28 | i30 | i31 | i29) + (i32 >>> i29) << 2) > > 2] | 0;
6548 }
6549 if ((i29 | 0) != 0) {
6550 while (1) {
6551 i27 = (HEAP32[i29 + 4 >> 2] & -8) - i12 | 0;
6552 i26 = i27 >>> 0 < i25 >>> 0;
6553 i25 = i26 ? i27 : i25;
6554 i24 = i26 ? i29 : i24;
6555 i26 = HEAP32[i29 + 16 >> 2] | 0;
6556 if ((i26 | 0) != 0) {
6557 i29 = i26;
6558 continue;
6559 }
6560 i29 = HEAP32[i29 + 20 >> 2] | 0;
6561 if ((i29 | 0) == 0) {
6562 break;
6563 }
6564 }
6565 }
6566 if ((i24 | 0) != 0 ? i25 >>> 0 < ((HEAP32[7168 >> 2] | 0) - i12 | 0) >>> 0 : 0) {
6567 i4 = HEAP32[7176 >> 2] | 0;
6568 if (i24 >>> 0 < i4 >>> 0) {
6569 _abort();
6570 }
6571 i2 = i24 + i12 | 0;
6572 if (!(i24 >>> 0 < i2 >>> 0)) {
6573 _abort();
6574 }
6575 i3 = HEAP32[i24 + 24 >> 2] | 0;
6576 i6 = HEAP32[i24 + 12 >> 2] | 0;
6577 do {
6578 if ((i6 | 0) == (i24 | 0)) {
6579 i6 = i24 + 20 | 0;
6580 i5 = HEAP32[i6 >> 2] | 0;
6581 if ((i5 | 0) == 0) {
6582 i6 = i24 + 16 | 0;
6583 i5 = HEAP32[i6 >> 2] | 0;
6584 if ((i5 | 0) == 0) {
6585 i22 = 0;
6586 break;
6587 }
6588 }
6589 while (1) {
6590 i8 = i5 + 20 | 0;
6591 i7 = HEAP32[i8 >> 2] | 0;
6592 if ((i7 | 0) != 0) {
6593 i5 = i7;
6594 i6 = i8;
6595 continue;
6596 }
6597 i7 = i5 + 16 | 0;
6598 i8 = HEAP32[i7 >> 2] | 0;
6599 if ((i8 | 0) == 0) {
6600 break;
6601 } else {
6602 i5 = i8;
6603 i6 = i7;
6604 }
6605 }
6606 if (i6 >>> 0 < i4 >>> 0) {
6607 _abort();
6608 } else {
6609 HEAP32[i6 >> 2] = 0;
6610 i22 = i5;
6611 break;
6612 }
6613 } else {
6614 i5 = HEAP32[i24 + 8 >> 2] | 0;
6615 if (i5 >>> 0 < i4 >>> 0) {
6616 _abort();
6617 }
6618 i7 = i5 + 12 | 0;
6619 if ((HEAP32[i7 >> 2] | 0) != (i24 | 0)) {
6620 _abort();
6621 }
6622 i4 = i6 + 8 | 0;
6623 if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
6624 HEAP32[i7 >> 2] = i6;
6625 HEAP32[i4 >> 2] = i5;
6626 i22 = i6;
6627 break;
6628 } else {
6629 _abort();
6630 }
6631 }
6632 } while (0);
6633 do {
6634 if ((i3 | 0) != 0) {
6635 i4 = HEAP32[i24 + 28 >> 2] | 0;
6636 i5 = 7464 + (i4 << 2) | 0;
6637 if ((i24 | 0) == (HEAP32[i5 >> 2] | 0)) {
6638 HEAP32[i5 >> 2] = i22;
6639 if ((i22 | 0) == 0) {
6640 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i4);
6641 break;
6642 }
6643 } else {
6644 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6645 _abort();
6646 }
6647 i4 = i3 + 16 | 0;
6648 if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
6649 HEAP32[i4 >> 2] = i22;
6650 } else {
6651 HEAP32[i3 + 20 >> 2] = i22;
6652 }
6653 if ((i22 | 0) == 0) {
6654 break;
6655 }
6656 }
6657 if (i22 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6658 _abort();
6659 }
6660 HEAP32[i22 + 24 >> 2] = i3;
6661 i3 = HEAP32[i24 + 16 >> 2] | 0;
6662 do {
6663 if ((i3 | 0) != 0) {
6664 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6665 _abort();
6666 } else {
6667 HEAP32[i22 + 16 >> 2] = i3;
6668 HEAP32[i3 + 24 >> 2] = i22;
6669 break;
6670 }
6671 }
6672 } while (0);
6673 i3 = HEAP32[i24 + 20 >> 2] | 0;
6674 if ((i3 | 0) != 0) {
6675 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6676 _abort();
6677 } else {
6678 HEAP32[i22 + 20 >> 2] = i3;
6679 HEAP32[i3 + 24 >> 2] = i22;
6680 break;
6681 }
6682 }
6683 }
6684 } while (0);
6685 L204 : do {
6686 if (!(i25 >>> 0 < 16)) {
6687 HEAP32[i24 + 4 >> 2] = i12 | 3;
6688 HEAP32[i24 + (i12 | 4) >> 2] = i25 | 1;
6689 HEAP32[i24 + (i25 + i12) >> 2] = i25;
6690 i4 = i25 >>> 3;
6691 if (i25 >>> 0 < 256) {
6692 i6 = i4 << 1;
6693 i3 = 7200 + (i6 << 2) | 0;
6694 i5 = HEAP32[1790] | 0;
6695 i4 = 1 << i4;
6696 if ((i5 & i4 | 0) != 0) {
6697 i5 = 7200 + (i6 + 2 << 2) | 0;
6698 i4 = HEAP32[i5 >> 2] | 0;
6699 if (i4 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6700 _abort();
6701 } else {
6702 i21 = i5;
6703 i20 = i4;
6704 }
6705 } else {
6706 HEAP32[1790] = i5 | i4;
6707 i21 = 7200 + (i6 + 2 << 2) | 0;
6708 i20 = i3;
6709 }
6710 HEAP32[i21 >> 2] = i2;
6711 HEAP32[i20 + 12 >> 2] = i2;
6712 HEAP32[i24 + (i12 + 8) >> 2] = i20;
6713 HEAP32[i24 + (i12 + 12) >> 2] = i3;
6714 break;
6715 }
6716 i3 = i25 >>> 8;
6717 if ((i3 | 0) != 0) {
6718 if (i25 >>> 0 > 16777215) {
6719 i3 = 31;
6720 } else {
6721 i31 = (i3 + 1048320 | 0) >>> 16 & 8;
6722 i32 = i3 << i31;
6723 i30 = (i32 + 520192 | 0) >>> 16 & 4;
6724 i32 = i32 << i30;
6725 i3 = (i32 + 245760 | 0) >>> 16 & 2;
6726 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
6727 i3 = i25 >>> (i3 + 7 | 0) & 1 | i3 << 1;
6728 }
6729 } else {
6730 i3 = 0;
6731 }
6732 i6 = 7464 + (i3 << 2) | 0;
6733 HEAP32[i24 + (i12 + 28) >> 2] = i3;
6734 HEAP32[i24 + (i12 + 20) >> 2] = 0;
6735 HEAP32[i24 + (i12 + 16) >> 2] = 0;
6736 i4 = HEAP32[7164 >> 2] | 0;
6737 i5 = 1 << i3;
6738 if ((i4 & i5 | 0) == 0) {
6739 HEAP32[7164 >> 2] = i4 | i5;
6740 HEAP32[i6 >> 2] = i2;
6741 HEAP32[i24 + (i12 + 24) >> 2] = i6;
6742 HEAP32[i24 + (i12 + 12) >> 2] = i2;
6743 HEAP32[i24 + (i12 + 8) >> 2] = i2;
6744 break;
6745 }
6746 i4 = HEAP32[i6 >> 2] | 0;
6747 if ((i3 | 0) == 31) {
6748 i3 = 0;
6749 } else {
6750 i3 = 25 - (i3 >>> 1) | 0;
6751 }
6752 L225 : do {
6753 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i25 | 0)) {
6754 i3 = i25 << i3;
6755 while (1) {
6756 i6 = i4 + (i3 >>> 31 << 2) + 16 | 0;
6757 i5 = HEAP32[i6 >> 2] | 0;
6758 if ((i5 | 0) == 0) {
6759 break;
6760 }
6761 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i25 | 0)) {
6762 i18 = i5;
6763 break L225;
6764 } else {
6765 i3 = i3 << 1;
6766 i4 = i5;
6767 }
6768 }
6769 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6770 _abort();
6771 } else {
6772 HEAP32[i6 >> 2] = i2;
6773 HEAP32[i24 + (i12 + 24) >> 2] = i4;
6774 HEAP32[i24 + (i12 + 12) >> 2] = i2;
6775 HEAP32[i24 + (i12 + 8) >> 2] = i2;
6776 break L204;
6777 }
6778 } else {
6779 i18 = i4;
6780 }
6781 } while (0);
6782 i4 = i18 + 8 | 0;
6783 i3 = HEAP32[i4 >> 2] | 0;
6784 i5 = HEAP32[7176 >> 2] | 0;
6785 if (i18 >>> 0 < i5 >>> 0) {
6786 _abort();
6787 }
6788 if (i3 >>> 0 < i5 >>> 0) {
6789 _abort();
6790 } else {
6791 HEAP32[i3 + 12 >> 2] = i2;
6792 HEAP32[i4 >> 2] = i2;
6793 HEAP32[i24 + (i12 + 8) >> 2] = i3;
6794 HEAP32[i24 + (i12 + 12) >> 2] = i18;
6795 HEAP32[i24 + (i12 + 24) >> 2] = 0;
6796 break;
6797 }
6798 } else {
6799 i32 = i25 + i12 | 0;
6800 HEAP32[i24 + 4 >> 2] = i32 | 3;
6801 i32 = i24 + (i32 + 4) | 0;
6802 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
6803 }
6804 } while (0);
6805 i32 = i24 + 8 | 0;
6806 STACKTOP = i1;
6807 return i32 | 0;
6808 }
6809 }
6810 } else {
6811 i12 = -1;
6812 }
6813 }
6814 } while (0);
6815 i18 = HEAP32[7168 >> 2] | 0;
6816 if (!(i12 >>> 0 > i18 >>> 0)) {
6817 i3 = i18 - i12 | 0;
6818 i2 = HEAP32[7180 >> 2] | 0;
6819 if (i3 >>> 0 > 15) {
6820 HEAP32[7180 >> 2] = i2 + i12;
6821 HEAP32[7168 >> 2] = i3;
6822 HEAP32[i2 + (i12 + 4) >> 2] = i3 | 1;
6823 HEAP32[i2 + i18 >> 2] = i3;
6824 HEAP32[i2 + 4 >> 2] = i12 | 3;
6825 } else {
6826 HEAP32[7168 >> 2] = 0;
6827 HEAP32[7180 >> 2] = 0;
6828 HEAP32[i2 + 4 >> 2] = i18 | 3;
6829 i32 = i2 + (i18 + 4) | 0;
6830 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
6831 }
6832 i32 = i2 + 8 | 0;
6833 STACKTOP = i1;
6834 return i32 | 0;
6835 }
6836 i18 = HEAP32[7172 >> 2] | 0;
6837 if (i12 >>> 0 < i18 >>> 0) {
6838 i31 = i18 - i12 | 0;
6839 HEAP32[7172 >> 2] = i31;
6840 i32 = HEAP32[7184 >> 2] | 0;
6841 HEAP32[7184 >> 2] = i32 + i12;
6842 HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
6843 HEAP32[i32 + 4 >> 2] = i12 | 3;
6844 i32 = i32 + 8 | 0;
6845 STACKTOP = i1;
6846 return i32 | 0;
6847 }
6848 do {
6849 if ((HEAP32[1908] | 0) == 0) {
6850 i18 = _sysconf(30) | 0;
6851 if ((i18 + -1 & i18 | 0) == 0) {
6852 HEAP32[7640 >> 2] = i18;
6853 HEAP32[7636 >> 2] = i18;
6854 HEAP32[7644 >> 2] = -1;
6855 HEAP32[7648 >> 2] = -1;
6856 HEAP32[7652 >> 2] = 0;
6857 HEAP32[7604 >> 2] = 0;
6858 HEAP32[1908] = (_time(0) | 0) & -16 ^ 1431655768;
6859 break;
6860 } else {
6861 _abort();
6862 }
6863 }
6864 } while (0);
6865 i20 = i12 + 48 | 0;
6866 i25 = HEAP32[7640 >> 2] | 0;
6867 i21 = i12 + 47 | 0;
6868 i22 = i25 + i21 | 0;
6869 i25 = 0 - i25 | 0;
6870 i18 = i22 & i25;
6871 if (!(i18 >>> 0 > i12 >>> 0)) {
6872 i32 = 0;
6873 STACKTOP = i1;
6874 return i32 | 0;
6875 }
6876 i24 = HEAP32[7600 >> 2] | 0;
6877 if ((i24 | 0) != 0 ? (i31 = HEAP32[7592 >> 2] | 0, i32 = i31 + i18 | 0, i32 >>> 0 <= i31 >>> 0 | i32 >>> 0 > i24 >>> 0) : 0) {
6878 i32 = 0;
6879 STACKTOP = i1;
6880 return i32 | 0;
6881 }
6882 L269 : do {
6883 if ((HEAP32[7604 >> 2] & 4 | 0) == 0) {
6884 i26 = HEAP32[7184 >> 2] | 0;
6885 L271 : do {
6886 if ((i26 | 0) != 0) {
6887 i24 = 7608 | 0;
6888 while (1) {
6889 i27 = HEAP32[i24 >> 2] | 0;
6890 if (!(i27 >>> 0 > i26 >>> 0) ? (i23 = i24 + 4 | 0, (i27 + (HEAP32[i23 >> 2 ] | 0) | 0) >>> 0 > i26 >>> 0) : 0) {
6891 break;
6892 }
6893 i24 = HEAP32[i24 + 8 >> 2] | 0;
6894 if ((i24 | 0) == 0) {
6895 i13 = 182;
6896 break L271;
6897 }
6898 }
6899 if ((i24 | 0) != 0) {
6900 i25 = i22 - (HEAP32[7172 >> 2] | 0) & i25;
6901 if (i25 >>> 0 < 2147483647) {
6902 i13 = _sbrk(i25 | 0) | 0;
6903 i26 = (i13 | 0) == ((HEAP32[i24 >> 2] | 0) + (HEAP32[i23 >> 2] | 0) | 0);
6904 i22 = i13;
6905 i24 = i25;
6906 i23 = i26 ? i13 : -1;
6907 i25 = i26 ? i25 : 0;
6908 i13 = 191;
6909 } else {
6910 i25 = 0;
6911 }
6912 } else {
6913 i13 = 182;
6914 }
6915 } else {
6916 i13 = 182;
6917 }
6918 } while (0);
6919 do {
6920 if ((i13 | 0) == 182) {
6921 i23 = _sbrk(0) | 0;
6922 if ((i23 | 0) != (-1 | 0)) {
6923 i24 = i23;
6924 i22 = HEAP32[7636 >> 2] | 0;
6925 i25 = i22 + -1 | 0;
6926 if ((i25 & i24 | 0) == 0) {
6927 i25 = i18;
6928 } else {
6929 i25 = i18 - i24 + (i25 + i24 & 0 - i22) | 0;
6930 }
6931 i24 = HEAP32[7592 >> 2] | 0;
6932 i26 = i24 + i25 | 0;
6933 if (i25 >>> 0 > i12 >>> 0 & i25 >>> 0 < 2147483647) {
6934 i22 = HEAP32[7600 >> 2] | 0;
6935 if ((i22 | 0) != 0 ? i26 >>> 0 <= i24 >>> 0 | i26 >>> 0 > i22 >>> 0 : 0) {
6936 i25 = 0;
6937 break;
6938 }
6939 i22 = _sbrk(i25 | 0) | 0;
6940 i13 = (i22 | 0) == (i23 | 0);
6941 i24 = i25;
6942 i23 = i13 ? i23 : -1;
6943 i25 = i13 ? i25 : 0;
6944 i13 = 191;
6945 } else {
6946 i25 = 0;
6947 }
6948 } else {
6949 i25 = 0;
6950 }
6951 }
6952 } while (0);
6953 L291 : do {
6954 if ((i13 | 0) == 191) {
6955 i13 = 0 - i24 | 0;
6956 if ((i23 | 0) != (-1 | 0)) {
6957 i17 = i23;
6958 i14 = i25;
6959 i13 = 202;
6960 break L269;
6961 }
6962 do {
6963 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 < 21 47483647) : 0) {
6964 if ((_sbrk(i19 | 0) | 0) == (-1 | 0)) {
6965 _sbrk(i13 | 0) | 0;
6966 break L291;
6967 } else {
6968 i24 = i19 + i24 | 0;
6969 break;
6970 }
6971 }
6972 } while (0);
6973 if ((i22 | 0) != (-1 | 0)) {
6974 i17 = i22;
6975 i14 = i24;
6976 i13 = 202;
6977 break L269;
6978 }
6979 }
6980 } while (0);
6981 HEAP32[7604 >> 2] = HEAP32[7604 >> 2] | 4;
6982 i13 = 199;
6983 } else {
6984 i25 = 0;
6985 i13 = 199;
6986 }
6987 } while (0);
6988 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) {
6989 i14 = i14 ? i15 : i25;
6990 i13 = 202;
6991 }
6992 if ((i13 | 0) == 202) {
6993 i15 = (HEAP32[7592 >> 2] | 0) + i14 | 0;
6994 HEAP32[7592 >> 2] = i15;
6995 if (i15 >>> 0 > (HEAP32[7596 >> 2] | 0) >>> 0) {
6996 HEAP32[7596 >> 2] = i15;
6997 }
6998 i15 = HEAP32[7184 >> 2] | 0;
6999 L311 : do {
7000 if ((i15 | 0) != 0) {
7001 i21 = 7608 | 0;
7002 while (1) {
7003 i16 = HEAP32[i21 >> 2] | 0;
7004 i19 = i21 + 4 | 0;
7005 i20 = HEAP32[i19 >> 2] | 0;
7006 if ((i17 | 0) == (i16 + i20 | 0)) {
7007 i13 = 214;
7008 break;
7009 }
7010 i18 = HEAP32[i21 + 8 >> 2] | 0;
7011 if ((i18 | 0) == 0) {
7012 break;
7013 } else {
7014 i21 = i18;
7015 }
7016 }
7017 if (((i13 | 0) == 214 ? (HEAP32[i21 + 12 >> 2] & 8 | 0) == 0 : 0) ? i15 >>> 0 >= i16 >>> 0 & i15 >>> 0 < i17 >>> 0 : 0) {
7018 HEAP32[i19 >> 2] = i20 + i14;
7019 i2 = (HEAP32[7172 >> 2] | 0) + i14 | 0;
7020 i3 = i15 + 8 | 0;
7021 if ((i3 & 7 | 0) == 0) {
7022 i3 = 0;
7023 } else {
7024 i3 = 0 - i3 & 7;
7025 }
7026 i32 = i2 - i3 | 0;
7027 HEAP32[7184 >> 2] = i15 + i3;
7028 HEAP32[7172 >> 2] = i32;
7029 HEAP32[i15 + (i3 + 4) >> 2] = i32 | 1;
7030 HEAP32[i15 + (i2 + 4) >> 2] = 40;
7031 HEAP32[7188 >> 2] = HEAP32[7648 >> 2];
7032 break;
7033 }
7034 if (i17 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7035 HEAP32[7176 >> 2] = i17;
7036 }
7037 i19 = i17 + i14 | 0;
7038 i16 = 7608 | 0;
7039 while (1) {
7040 if ((HEAP32[i16 >> 2] | 0) == (i19 | 0)) {
7041 i13 = 224;
7042 break;
7043 }
7044 i18 = HEAP32[i16 + 8 >> 2] | 0;
7045 if ((i18 | 0) == 0) {
7046 break;
7047 } else {
7048 i16 = i18;
7049 }
7050 }
7051 if ((i13 | 0) == 224 ? (HEAP32[i16 + 12 >> 2] & 8 | 0) == 0 : 0) {
7052 HEAP32[i16 >> 2] = i17;
7053 i6 = i16 + 4 | 0;
7054 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i14;
7055 i6 = i17 + 8 | 0;
7056 if ((i6 & 7 | 0) == 0) {
7057 i6 = 0;
7058 } else {
7059 i6 = 0 - i6 & 7;
7060 }
7061 i7 = i17 + (i14 + 8) | 0;
7062 if ((i7 & 7 | 0) == 0) {
7063 i13 = 0;
7064 } else {
7065 i13 = 0 - i7 & 7;
7066 }
7067 i15 = i17 + (i13 + i14) | 0;
7068 i8 = i6 + i12 | 0;
7069 i7 = i17 + i8 | 0;
7070 i10 = i15 - (i17 + i6) - i12 | 0;
7071 HEAP32[i17 + (i6 + 4) >> 2] = i12 | 3;
7072 L348 : do {
7073 if ((i15 | 0) != (HEAP32[7184 >> 2] | 0)) {
7074 if ((i15 | 0) == (HEAP32[7180 >> 2] | 0)) {
7075 i32 = (HEAP32[7168 >> 2] | 0) + i10 | 0;
7076 HEAP32[7168 >> 2] = i32;
7077 HEAP32[7180 >> 2] = i7;
7078 HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
7079 HEAP32[i17 + (i32 + i8) >> 2] = i32;
7080 break;
7081 }
7082 i12 = i14 + 4 | 0;
7083 i18 = HEAP32[i17 + (i12 + i13) >> 2] | 0;
7084 if ((i18 & 3 | 0) == 1) {
7085 i11 = i18 & -8;
7086 i16 = i18 >>> 3;
7087 do {
7088 if (!(i18 >>> 0 < 256)) {
7089 i9 = HEAP32[i17 + ((i13 | 24) + i14) >> 2] | 0;
7090 i19 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
7091 do {
7092 if ((i19 | 0) == (i15 | 0)) {
7093 i19 = i13 | 16;
7094 i18 = i17 + (i12 + i19) | 0;
7095 i16 = HEAP32[i18 >> 2] | 0;
7096 if ((i16 | 0) == 0) {
7097 i18 = i17 + (i19 + i14) | 0;
7098 i16 = HEAP32[i18 >> 2] | 0;
7099 if ((i16 | 0) == 0) {
7100 i5 = 0;
7101 break;
7102 }
7103 }
7104 while (1) {
7105 i20 = i16 + 20 | 0;
7106 i19 = HEAP32[i20 >> 2] | 0;
7107 if ((i19 | 0) != 0) {
7108 i16 = i19;
7109 i18 = i20;
7110 continue;
7111 }
7112 i19 = i16 + 16 | 0;
7113 i20 = HEAP32[i19 >> 2] | 0;
7114 if ((i20 | 0) == 0) {
7115 break;
7116 } else {
7117 i16 = i20;
7118 i18 = i19;
7119 }
7120 }
7121 if (i18 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7122 _abort();
7123 } else {
7124 HEAP32[i18 >> 2] = 0;
7125 i5 = i16;
7126 break;
7127 }
7128 } else {
7129 i18 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
7130 if (i18 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7131 _abort();
7132 }
7133 i16 = i18 + 12 | 0;
7134 if ((HEAP32[i16 >> 2] | 0) != (i15 | 0)) {
7135 _abort();
7136 }
7137 i20 = i19 + 8 | 0;
7138 if ((HEAP32[i20 >> 2] | 0) == (i15 | 0)) {
7139 HEAP32[i16 >> 2] = i19;
7140 HEAP32[i20 >> 2] = i18;
7141 i5 = i19;
7142 break;
7143 } else {
7144 _abort();
7145 }
7146 }
7147 } while (0);
7148 if ((i9 | 0) != 0) {
7149 i16 = HEAP32[i17 + (i14 + 28 + i13) >> 2] | 0;
7150 i18 = 7464 + (i16 << 2) | 0;
7151 if ((i15 | 0) == (HEAP32[i18 >> 2] | 0)) {
7152 HEAP32[i18 >> 2] = i5;
7153 if ((i5 | 0) == 0) {
7154 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i16);
7155 break;
7156 }
7157 } else {
7158 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7159 _abort();
7160 }
7161 i16 = i9 + 16 | 0;
7162 if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
7163 HEAP32[i16 >> 2] = i5;
7164 } else {
7165 HEAP32[i9 + 20 >> 2] = i5;
7166 }
7167 if ((i5 | 0) == 0) {
7168 break;
7169 }
7170 }
7171 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7172 _abort();
7173 }
7174 HEAP32[i5 + 24 >> 2] = i9;
7175 i15 = i13 | 16;
7176 i9 = HEAP32[i17 + (i15 + i14) >> 2] | 0;
7177 do {
7178 if ((i9 | 0) != 0) {
7179 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7180 _abort();
7181 } else {
7182 HEAP32[i5 + 16 >> 2] = i9;
7183 HEAP32[i9 + 24 >> 2] = i5;
7184 break;
7185 }
7186 }
7187 } while (0);
7188 i9 = HEAP32[i17 + (i12 + i15) >> 2] | 0;
7189 if ((i9 | 0) != 0) {
7190 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7191 _abort();
7192 } else {
7193 HEAP32[i5 + 20 >> 2] = i9;
7194 HEAP32[i9 + 24 >> 2] = i5;
7195 break;
7196 }
7197 }
7198 }
7199 } else {
7200 i5 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
7201 i12 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
7202 i18 = 7200 + (i16 << 1 << 2) | 0;
7203 if ((i5 | 0) != (i18 | 0)) {
7204 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7205 _abort();
7206 }
7207 if ((HEAP32[i5 + 12 >> 2] | 0) != (i15 | 0)) {
7208 _abort();
7209 }
7210 }
7211 if ((i12 | 0) == (i5 | 0)) {
7212 HEAP32[1790] = HEAP32[1790] & ~(1 << i16);
7213 break;
7214 }
7215 if ((i12 | 0) != (i18 | 0)) {
7216 if (i12 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7217 _abort();
7218 }
7219 i16 = i12 + 8 | 0;
7220 if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
7221 i9 = i16;
7222 } else {
7223 _abort();
7224 }
7225 } else {
7226 i9 = i12 + 8 | 0;
7227 }
7228 HEAP32[i5 + 12 >> 2] = i12;
7229 HEAP32[i9 >> 2] = i5;
7230 }
7231 } while (0);
7232 i15 = i17 + ((i11 | i13) + i14) | 0;
7233 i10 = i11 + i10 | 0;
7234 }
7235 i5 = i15 + 4 | 0;
7236 HEAP32[i5 >> 2] = HEAP32[i5 >> 2] & -2;
7237 HEAP32[i17 + (i8 + 4) >> 2] = i10 | 1;
7238 HEAP32[i17 + (i10 + i8) >> 2] = i10;
7239 i5 = i10 >>> 3;
7240 if (i10 >>> 0 < 256) {
7241 i10 = i5 << 1;
7242 i2 = 7200 + (i10 << 2) | 0;
7243 i9 = HEAP32[1790] | 0;
7244 i5 = 1 << i5;
7245 if ((i9 & i5 | 0) != 0) {
7246 i9 = 7200 + (i10 + 2 << 2) | 0;
7247 i5 = HEAP32[i9 >> 2] | 0;
7248 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7249 _abort();
7250 } else {
7251 i3 = i9;
7252 i4 = i5;
7253 }
7254 } else {
7255 HEAP32[1790] = i9 | i5;
7256 i3 = 7200 + (i10 + 2 << 2) | 0;
7257 i4 = i2;
7258 }
7259 HEAP32[i3 >> 2] = i7;
7260 HEAP32[i4 + 12 >> 2] = i7;
7261 HEAP32[i17 + (i8 + 8) >> 2] = i4;
7262 HEAP32[i17 + (i8 + 12) >> 2] = i2;
7263 break;
7264 }
7265 i3 = i10 >>> 8;
7266 if ((i3 | 0) != 0) {
7267 if (i10 >>> 0 > 16777215) {
7268 i3 = 31;
7269 } else {
7270 i31 = (i3 + 1048320 | 0) >>> 16 & 8;
7271 i32 = i3 << i31;
7272 i30 = (i32 + 520192 | 0) >>> 16 & 4;
7273 i32 = i32 << i30;
7274 i3 = (i32 + 245760 | 0) >>> 16 & 2;
7275 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
7276 i3 = i10 >>> (i3 + 7 | 0) & 1 | i3 << 1;
7277 }
7278 } else {
7279 i3 = 0;
7280 }
7281 i4 = 7464 + (i3 << 2) | 0;
7282 HEAP32[i17 + (i8 + 28) >> 2] = i3;
7283 HEAP32[i17 + (i8 + 20) >> 2] = 0;
7284 HEAP32[i17 + (i8 + 16) >> 2] = 0;
7285 i9 = HEAP32[7164 >> 2] | 0;
7286 i5 = 1 << i3;
7287 if ((i9 & i5 | 0) == 0) {
7288 HEAP32[7164 >> 2] = i9 | i5;
7289 HEAP32[i4 >> 2] = i7;
7290 HEAP32[i17 + (i8 + 24) >> 2] = i4;
7291 HEAP32[i17 + (i8 + 12) >> 2] = i7;
7292 HEAP32[i17 + (i8 + 8) >> 2] = i7;
7293 break;
7294 }
7295 i4 = HEAP32[i4 >> 2] | 0;
7296 if ((i3 | 0) == 31) {
7297 i3 = 0;
7298 } else {
7299 i3 = 25 - (i3 >>> 1) | 0;
7300 }
7301 L444 : do {
7302 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i10 | 0)) {
7303 i3 = i10 << i3;
7304 while (1) {
7305 i5 = i4 + (i3 >>> 31 << 2) + 16 | 0;
7306 i9 = HEAP32[i5 >> 2] | 0;
7307 if ((i9 | 0) == 0) {
7308 break;
7309 }
7310 if ((HEAP32[i9 + 4 >> 2] & -8 | 0) == (i10 | 0)) {
7311 i2 = i9;
7312 break L444;
7313 } else {
7314 i3 = i3 << 1;
7315 i4 = i9;
7316 }
7317 }
7318 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7319 _abort();
7320 } else {
7321 HEAP32[i5 >> 2] = i7;
7322 HEAP32[i17 + (i8 + 24) >> 2] = i4;
7323 HEAP32[i17 + (i8 + 12) >> 2] = i7;
7324 HEAP32[i17 + (i8 + 8) >> 2] = i7;
7325 break L348;
7326 }
7327 } else {
7328 i2 = i4;
7329 }
7330 } while (0);
7331 i4 = i2 + 8 | 0;
7332 i3 = HEAP32[i4 >> 2] | 0;
7333 i5 = HEAP32[7176 >> 2] | 0;
7334 if (i2 >>> 0 < i5 >>> 0) {
7335 _abort();
7336 }
7337 if (i3 >>> 0 < i5 >>> 0) {
7338 _abort();
7339 } else {
7340 HEAP32[i3 + 12 >> 2] = i7;
7341 HEAP32[i4 >> 2] = i7;
7342 HEAP32[i17 + (i8 + 8) >> 2] = i3;
7343 HEAP32[i17 + (i8 + 12) >> 2] = i2;
7344 HEAP32[i17 + (i8 + 24) >> 2] = 0;
7345 break;
7346 }
7347 } else {
7348 i32 = (HEAP32[7172 >> 2] | 0) + i10 | 0;
7349 HEAP32[7172 >> 2] = i32;
7350 HEAP32[7184 >> 2] = i7;
7351 HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
7352 }
7353 } while (0);
7354 i32 = i17 + (i6 | 8) | 0;
7355 STACKTOP = i1;
7356 return i32 | 0;
7357 }
7358 i3 = 7608 | 0;
7359 while (1) {
7360 i2 = HEAP32[i3 >> 2] | 0;
7361 if (!(i2 >>> 0 > i15 >>> 0) ? (i11 = HEAP32[i3 + 4 >> 2] | 0, i10 = i2 + i1 1 | 0, i10 >>> 0 > i15 >>> 0) : 0) {
7362 break;
7363 }
7364 i3 = HEAP32[i3 + 8 >> 2] | 0;
7365 }
7366 i3 = i2 + (i11 + -39) | 0;
7367 if ((i3 & 7 | 0) == 0) {
7368 i3 = 0;
7369 } else {
7370 i3 = 0 - i3 & 7;
7371 }
7372 i2 = i2 + (i11 + -47 + i3) | 0;
7373 i2 = i2 >>> 0 < (i15 + 16 | 0) >>> 0 ? i15 : i2;
7374 i3 = i2 + 8 | 0;
7375 i4 = i17 + 8 | 0;
7376 if ((i4 & 7 | 0) == 0) {
7377 i4 = 0;
7378 } else {
7379 i4 = 0 - i4 & 7;
7380 }
7381 i32 = i14 + -40 - i4 | 0;
7382 HEAP32[7184 >> 2] = i17 + i4;
7383 HEAP32[7172 >> 2] = i32;
7384 HEAP32[i17 + (i4 + 4) >> 2] = i32 | 1;
7385 HEAP32[i17 + (i14 + -36) >> 2] = 40;
7386 HEAP32[7188 >> 2] = HEAP32[7648 >> 2];
7387 HEAP32[i2 + 4 >> 2] = 27;
7388 HEAP32[i3 + 0 >> 2] = HEAP32[7608 >> 2];
7389 HEAP32[i3 + 4 >> 2] = HEAP32[7612 >> 2];
7390 HEAP32[i3 + 8 >> 2] = HEAP32[7616 >> 2];
7391 HEAP32[i3 + 12 >> 2] = HEAP32[7620 >> 2];
7392 HEAP32[7608 >> 2] = i17;
7393 HEAP32[7612 >> 2] = i14;
7394 HEAP32[7620 >> 2] = 0;
7395 HEAP32[7616 >> 2] = i3;
7396 i4 = i2 + 28 | 0;
7397 HEAP32[i4 >> 2] = 7;
7398 if ((i2 + 32 | 0) >>> 0 < i10 >>> 0) {
7399 while (1) {
7400 i3 = i4 + 4 | 0;
7401 HEAP32[i3 >> 2] = 7;
7402 if ((i4 + 8 | 0) >>> 0 < i10 >>> 0) {
7403 i4 = i3;
7404 } else {
7405 break;
7406 }
7407 }
7408 }
7409 if ((i2 | 0) != (i15 | 0)) {
7410 i2 = i2 - i15 | 0;
7411 i3 = i15 + (i2 + 4) | 0;
7412 HEAP32[i3 >> 2] = HEAP32[i3 >> 2] & -2;
7413 HEAP32[i15 + 4 >> 2] = i2 | 1;
7414 HEAP32[i15 + i2 >> 2] = i2;
7415 i3 = i2 >>> 3;
7416 if (i2 >>> 0 < 256) {
7417 i4 = i3 << 1;
7418 i2 = 7200 + (i4 << 2) | 0;
7419 i5 = HEAP32[1790] | 0;
7420 i3 = 1 << i3;
7421 if ((i5 & i3 | 0) != 0) {
7422 i4 = 7200 + (i4 + 2 << 2) | 0;
7423 i3 = HEAP32[i4 >> 2] | 0;
7424 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7425 _abort();
7426 } else {
7427 i7 = i4;
7428 i8 = i3;
7429 }
7430 } else {
7431 HEAP32[1790] = i5 | i3;
7432 i7 = 7200 + (i4 + 2 << 2) | 0;
7433 i8 = i2;
7434 }
7435 HEAP32[i7 >> 2] = i15;
7436 HEAP32[i8 + 12 >> 2] = i15;
7437 HEAP32[i15 + 8 >> 2] = i8;
7438 HEAP32[i15 + 12 >> 2] = i2;
7439 break;
7440 }
7441 i3 = i2 >>> 8;
7442 if ((i3 | 0) != 0) {
7443 if (i2 >>> 0 > 16777215) {
7444 i3 = 31;
7445 } else {
7446 i31 = (i3 + 1048320 | 0) >>> 16 & 8;
7447 i32 = i3 << i31;
7448 i30 = (i32 + 520192 | 0) >>> 16 & 4;
7449 i32 = i32 << i30;
7450 i3 = (i32 + 245760 | 0) >>> 16 & 2;
7451 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
7452 i3 = i2 >>> (i3 + 7 | 0) & 1 | i3 << 1;
7453 }
7454 } else {
7455 i3 = 0;
7456 }
7457 i7 = 7464 + (i3 << 2) | 0;
7458 HEAP32[i15 + 28 >> 2] = i3;
7459 HEAP32[i15 + 20 >> 2] = 0;
7460 HEAP32[i15 + 16 >> 2] = 0;
7461 i4 = HEAP32[7164 >> 2] | 0;
7462 i5 = 1 << i3;
7463 if ((i4 & i5 | 0) == 0) {
7464 HEAP32[7164 >> 2] = i4 | i5;
7465 HEAP32[i7 >> 2] = i15;
7466 HEAP32[i15 + 24 >> 2] = i7;
7467 HEAP32[i15 + 12 >> 2] = i15;
7468 HEAP32[i15 + 8 >> 2] = i15;
7469 break;
7470 }
7471 i4 = HEAP32[i7 >> 2] | 0;
7472 if ((i3 | 0) == 31) {
7473 i3 = 0;
7474 } else {
7475 i3 = 25 - (i3 >>> 1) | 0;
7476 }
7477 L499 : do {
7478 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i2 | 0)) {
7479 i3 = i2 << i3;
7480 while (1) {
7481 i7 = i4 + (i3 >>> 31 << 2) + 16 | 0;
7482 i5 = HEAP32[i7 >> 2] | 0;
7483 if ((i5 | 0) == 0) {
7484 break;
7485 }
7486 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i2 | 0)) {
7487 i6 = i5;
7488 break L499;
7489 } else {
7490 i3 = i3 << 1;
7491 i4 = i5;
7492 }
7493 }
7494 if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7495 _abort();
7496 } else {
7497 HEAP32[i7 >> 2] = i15;
7498 HEAP32[i15 + 24 >> 2] = i4;
7499 HEAP32[i15 + 12 >> 2] = i15;
7500 HEAP32[i15 + 8 >> 2] = i15;
7501 break L311;
7502 }
7503 } else {
7504 i6 = i4;
7505 }
7506 } while (0);
7507 i4 = i6 + 8 | 0;
7508 i3 = HEAP32[i4 >> 2] | 0;
7509 i2 = HEAP32[7176 >> 2] | 0;
7510 if (i6 >>> 0 < i2 >>> 0) {
7511 _abort();
7512 }
7513 if (i3 >>> 0 < i2 >>> 0) {
7514 _abort();
7515 } else {
7516 HEAP32[i3 + 12 >> 2] = i15;
7517 HEAP32[i4 >> 2] = i15;
7518 HEAP32[i15 + 8 >> 2] = i3;
7519 HEAP32[i15 + 12 >> 2] = i6;
7520 HEAP32[i15 + 24 >> 2] = 0;
7521 break;
7522 }
7523 }
7524 } else {
7525 i32 = HEAP32[7176 >> 2] | 0;
7526 if ((i32 | 0) == 0 | i17 >>> 0 < i32 >>> 0) {
7527 HEAP32[7176 >> 2] = i17;
7528 }
7529 HEAP32[7608 >> 2] = i17;
7530 HEAP32[7612 >> 2] = i14;
7531 HEAP32[7620 >> 2] = 0;
7532 HEAP32[7196 >> 2] = HEAP32[1908];
7533 HEAP32[7192 >> 2] = -1;
7534 i2 = 0;
7535 do {
7536 i32 = i2 << 1;
7537 i31 = 7200 + (i32 << 2) | 0;
7538 HEAP32[7200 + (i32 + 3 << 2) >> 2] = i31;
7539 HEAP32[7200 + (i32 + 2 << 2) >> 2] = i31;
7540 i2 = i2 + 1 | 0;
7541 } while ((i2 | 0) != 32);
7542 i2 = i17 + 8 | 0;
7543 if ((i2 & 7 | 0) == 0) {
7544 i2 = 0;
7545 } else {
7546 i2 = 0 - i2 & 7;
7547 }
7548 i32 = i14 + -40 - i2 | 0;
7549 HEAP32[7184 >> 2] = i17 + i2;
7550 HEAP32[7172 >> 2] = i32;
7551 HEAP32[i17 + (i2 + 4) >> 2] = i32 | 1;
7552 HEAP32[i17 + (i14 + -36) >> 2] = 40;
7553 HEAP32[7188 >> 2] = HEAP32[7648 >> 2];
7554 }
7555 } while (0);
7556 i2 = HEAP32[7172 >> 2] | 0;
7557 if (i2 >>> 0 > i12 >>> 0) {
7558 i31 = i2 - i12 | 0;
7559 HEAP32[7172 >> 2] = i31;
7560 i32 = HEAP32[7184 >> 2] | 0;
7561 HEAP32[7184 >> 2] = i32 + i12;
7562 HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
7563 HEAP32[i32 + 4 >> 2] = i12 | 3;
7564 i32 = i32 + 8 | 0;
7565 STACKTOP = i1;
7566 return i32 | 0;
7567 }
7568 }
7569 HEAP32[(___errno_location() | 0) >> 2] = 12;
7570 i32 = 0;
7571 STACKTOP = i1;
7572 return i32 | 0;
7573 }
7574 function __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformP K14b2PolygonShapeS7_(i12, i2, i16, i5, i8, i6) {
7575 i12 = i12 | 0;
7576 i2 = i2 | 0;
7577 i16 = i16 | 0;
7578 i5 = i5 | 0;
7579 i8 = i8 | 0;
7580 i6 = i6 | 0;
7581 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;
7582 i1 = STACKTOP;
7583 STACKTOP = STACKTOP + 144 | 0;
7584 i18 = i1 + 128 | 0;
7585 i11 = i1 + 24 | 0;
7586 i9 = i1 + 72 | 0;
7587 i10 = i1 + 48 | 0;
7588 i3 = i1;
7589 i4 = i12 + 132 | 0;
7590 d28 = +HEAPF32[i5 + 12 >> 2];
7591 d37 = +HEAPF32[i6 + 8 >> 2];
7592 d23 = +HEAPF32[i5 + 8 >> 2];
7593 d27 = +HEAPF32[i6 + 12 >> 2];
7594 d22 = d28 * d37 - d23 * d27;
7595 d27 = d37 * d23 + d28 * d27;
7596 d37 = +d22;
7597 d26 = +d27;
7598 d25 = +HEAPF32[i6 >> 2] - +HEAPF32[i5 >> 2];
7599 d36 = +HEAPF32[i6 + 4 >> 2] - +HEAPF32[i5 + 4 >> 2];
7600 d24 = d28 * d25 + d23 * d36;
7601 d25 = d28 * d36 - d23 * d25;
7602 d23 = +d24;
7603 d36 = +d25;
7604 i5 = i4;
7605 HEAPF32[i5 >> 2] = d23;
7606 HEAPF32[i5 + 4 >> 2] = d36;
7607 i5 = i12 + 140 | 0;
7608 HEAPF32[i5 >> 2] = d37;
7609 HEAPF32[i5 + 4 >> 2] = d26;
7610 i5 = i12 + 144 | 0;
7611 d26 = +HEAPF32[i8 + 12 >> 2];
7612 i7 = i12 + 140 | 0;
7613 d37 = +HEAPF32[i8 + 16 >> 2];
7614 d24 = d24 + (d27 * d26 - d22 * d37);
7615 i6 = i12 + 136 | 0;
7616 d25 = d26 * d22 + d27 * d37 + d25;
7617 d37 = +d24;
7618 d27 = +d25;
7619 i34 = i12 + 148 | 0;
7620 HEAPF32[i34 >> 2] = d37;
7621 HEAPF32[i34 + 4 >> 2] = d27;
7622 i34 = i16 + 28 | 0;
7623 i29 = HEAP32[i34 >> 2] | 0;
7624 i34 = HEAP32[i34 + 4 >> 2] | 0;
7625 i14 = i12 + 156 | 0;
7626 HEAP32[i14 >> 2] = i29;
7627 HEAP32[i14 + 4 >> 2] = i34;
7628 i14 = i12 + 164 | 0;
7629 i17 = i16 + 12 | 0;
7630 i40 = HEAP32[i17 >> 2] | 0;
7631 i17 = HEAP32[i17 + 4 >> 2] | 0;
7632 i13 = i14;
7633 HEAP32[i13 >> 2] = i40;
7634 HEAP32[i13 + 4 >> 2] = i17;
7635 i13 = i12 + 172 | 0;
7636 i20 = i16 + 20 | 0;
7637 i41 = HEAP32[i20 >> 2] | 0;
7638 i20 = HEAP32[i20 + 4 >> 2] | 0;
7639 i38 = i13;
7640 HEAP32[i38 >> 2] = i41;
7641 HEAP32[i38 + 4 >> 2] = i20;
7642 i38 = i16 + 36 | 0;
7643 i35 = HEAP32[i38 >> 2] | 0;
7644 i38 = HEAP32[i38 + 4 >> 2] | 0;
7645 i19 = i12 + 180 | 0;
7646 HEAP32[i19 >> 2] = i35;
7647 HEAP32[i19 + 4 >> 2] = i38;
7648 i19 = (HEAP8[i16 + 44 | 0] | 0) != 0;
7649 i21 = (HEAP8[i16 + 45 | 0] | 0) != 0;
7650 d27 = (HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
7651 d37 = (HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]);
7652 d22 = d27 - d37;
7653 d26 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]);
7654 i20 = i12 + 168 | 0;
7655 d36 = (HEAP32[tempDoublePtr >> 2] = i17, +HEAPF32[tempDoublePtr >> 2]);
7656 d23 = d26 - d36;
7657 d28 = +Math_sqrt(+(d22 * d22 + d23 * d23));
7658 d33 = (HEAP32[tempDoublePtr >> 2] = i29, +HEAPF32[tempDoublePtr >> 2]);
7659 d32 = (HEAP32[tempDoublePtr >> 2] = i34, +HEAPF32[tempDoublePtr >> 2]);
7660 d31 = (HEAP32[tempDoublePtr >> 2] = i35, +HEAPF32[tempDoublePtr >> 2]);
7661 d30 = (HEAP32[tempDoublePtr >> 2] = i38, +HEAPF32[tempDoublePtr >> 2]);
7662 if (!(d28 < 1.1920928955078125e-7)) {
7663 d39 = 1.0 / d28;
7664 d22 = d22 * d39;
7665 d23 = d23 * d39;
7666 }
7667 i16 = i12 + 196 | 0;
7668 d28 = -d22;
7669 HEAPF32[i16 >> 2] = d23;
7670 i17 = i12 + 200 | 0;
7671 HEAPF32[i17 >> 2] = d28;
7672 d28 = (d24 - d37) * d23 + (d25 - d36) * d28;
7673 if (i19) {
7674 d37 = d37 - d33;
7675 d36 = d36 - d32;
7676 d39 = +Math_sqrt(+(d37 * d37 + d36 * d36));
7677 if (!(d39 < 1.1920928955078125e-7)) {
7678 d39 = 1.0 / d39;
7679 d37 = d37 * d39;
7680 d36 = d36 * d39;
7681 }
7682 d39 = -d37;
7683 HEAPF32[i12 + 188 >> 2] = d36;
7684 HEAPF32[i12 + 192 >> 2] = d39;
7685 i29 = d23 * d37 - d22 * d36 >= 0.0;
7686 d32 = (d24 - d33) * d36 + (d25 - d32) * d39;
7687 } else {
7688 i29 = 0;
7689 d32 = 0.0;
7690 }
7691 L10 : do {
7692 if (!i21) {
7693 if (!i19) {
7694 i41 = d28 >= 0.0;
7695 HEAP8[i12 + 248 | 0] = i41 & 1;
7696 i19 = i12 + 212 | 0;
7697 if (i41) {
7698 i15 = 64;
7699 break;
7700 } else {
7701 i15 = 65;
7702 break;
7703 }
7704 }
7705 i19 = d32 >= 0.0;
7706 if (i29) {
7707 if (!i19) {
7708 i41 = d28 >= 0.0;
7709 HEAP8[i12 + 248 | 0] = i41 & 1;
7710 i19 = i12 + 212 | 0;
7711 if (!i41) {
7712 d37 = +-d23;
7713 d39 = +d22;
7714 i38 = i19;
7715 HEAPF32[i38 >> 2] = d37;
7716 HEAPF32[i38 + 4 >> 2] = d39;
7717 i38 = i16;
7718 i40 = HEAP32[i38 >> 2] | 0;
7719 i38 = HEAP32[i38 + 4 >> 2] | 0;
7720 i41 = i12 + 228 | 0;
7721 HEAP32[i41 >> 2] = i40;
7722 HEAP32[i41 + 4 >> 2] = i38;
7723 i41 = i12 + 236 | 0;
7724 HEAPF32[i41 >> 2] = -(HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoubl ePtr >> 2]);
7725 HEAPF32[i41 + 4 >> 2] = d39;
7726 break;
7727 }
7728 } else {
7729 HEAP8[i12 + 248 | 0] = 1;
7730 i19 = i12 + 212 | 0;
7731 }
7732 i41 = i16;
7733 i40 = HEAP32[i41 + 4 >> 2] | 0;
7734 i38 = i19;
7735 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
7736 HEAP32[i38 + 4 >> 2] = i40;
7737 i38 = i12 + 188 | 0;
7738 i40 = HEAP32[i38 + 4 >> 2] | 0;
7739 i41 = i12 + 228 | 0;
7740 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7741 HEAP32[i41 + 4 >> 2] = i40;
7742 d37 = +-+HEAPF32[i16 >> 2];
7743 d39 = +-+HEAPF32[i17 >> 2];
7744 i41 = i12 + 236 | 0;
7745 HEAPF32[i41 >> 2] = d37;
7746 HEAPF32[i41 + 4 >> 2] = d39;
7747 break;
7748 } else {
7749 if (i19) {
7750 i41 = d28 >= 0.0;
7751 HEAP8[i12 + 248 | 0] = i41 & 1;
7752 i19 = i12 + 212 | 0;
7753 if (i41) {
7754 i38 = i16;
7755 i41 = HEAP32[i38 >> 2] | 0;
7756 i38 = HEAP32[i38 + 4 >> 2] | 0;
7757 i40 = i19;
7758 HEAP32[i40 >> 2] = i41;
7759 HEAP32[i40 + 4 >> 2] = i38;
7760 i40 = i12 + 228 | 0;
7761 HEAP32[i40 >> 2] = i41;
7762 HEAP32[i40 + 4 >> 2] = i38;
7763 d37 = +-(HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
7764 d39 = +d22;
7765 i41 = i12 + 236 | 0;
7766 HEAPF32[i41 >> 2] = d37;
7767 HEAPF32[i41 + 4 >> 2] = d39;
7768 break;
7769 }
7770 } else {
7771 HEAP8[i12 + 248 | 0] = 0;
7772 i19 = i12 + 212 | 0;
7773 }
7774 d39 = +-d23;
7775 d37 = +d22;
7776 i38 = i19;
7777 HEAPF32[i38 >> 2] = d39;
7778 HEAPF32[i38 + 4 >> 2] = d37;
7779 i38 = i16;
7780 i40 = HEAP32[i38 + 4 >> 2] | 0;
7781 i41 = i12 + 228 | 0;
7782 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7783 HEAP32[i41 + 4 >> 2] = i40;
7784 d37 = +-+HEAPF32[i12 + 188 >> 2];
7785 d39 = +-+HEAPF32[i12 + 192 >> 2];
7786 i41 = i12 + 236 | 0;
7787 HEAPF32[i41 >> 2] = d37;
7788 HEAPF32[i41 + 4 >> 2] = d39;
7789 break;
7790 }
7791 } else {
7792 d33 = d31 - d27;
7793 d31 = d30 - d26;
7794 d30 = +Math_sqrt(+(d33 * d33 + d31 * d31));
7795 if (d30 < 1.1920928955078125e-7) {
7796 d30 = d33;
7797 } else {
7798 d39 = 1.0 / d30;
7799 d30 = d33 * d39;
7800 d31 = d31 * d39;
7801 }
7802 d39 = -d30;
7803 i34 = i12 + 204 | 0;
7804 HEAPF32[i34 >> 2] = d31;
7805 i35 = i12 + 208 | 0;
7806 HEAPF32[i35 >> 2] = d39;
7807 i38 = d22 * d31 - d23 * d30 > 0.0;
7808 d24 = (d24 - d27) * d31 + (d25 - d26) * d39;
7809 if (!i19) {
7810 i19 = d28 >= 0.0;
7811 if (!i21) {
7812 HEAP8[i12 + 248 | 0] = i19 & 1;
7813 i15 = i12 + 212 | 0;
7814 if (i19) {
7815 i19 = i15;
7816 i15 = 64;
7817 break;
7818 } else {
7819 i19 = i15;
7820 i15 = 65;
7821 break;
7822 }
7823 }
7824 if (i38) {
7825 if (!i19) {
7826 i41 = d24 >= 0.0;
7827 HEAP8[i12 + 248 | 0] = i41 & 1;
7828 i19 = i12 + 212 | 0;
7829 if (!i41) {
7830 d37 = +-d23;
7831 d39 = +d22;
7832 i38 = i19;
7833 HEAPF32[i38 >> 2] = d37;
7834 HEAPF32[i38 + 4 >> 2] = d39;
7835 i38 = i12 + 228 | 0;
7836 HEAPF32[i38 >> 2] = d37;
7837 HEAPF32[i38 + 4 >> 2] = d39;
7838 i38 = i16;
7839 i40 = HEAP32[i38 + 4 >> 2] | 0;
7840 i41 = i12 + 236 | 0;
7841 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7842 HEAP32[i41 + 4 >> 2] = i40;
7843 break;
7844 }
7845 } else {
7846 HEAP8[i12 + 248 | 0] = 1;
7847 i19 = i12 + 212 | 0;
7848 }
7849 i41 = i16;
7850 i40 = HEAP32[i41 + 4 >> 2] | 0;
7851 i38 = i19;
7852 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
7853 HEAP32[i38 + 4 >> 2] = i40;
7854 d37 = +-+HEAPF32[i16 >> 2];
7855 d39 = +-+HEAPF32[i17 >> 2];
7856 i38 = i12 + 228 | 0;
7857 HEAPF32[i38 >> 2] = d37;
7858 HEAPF32[i38 + 4 >> 2] = d39;
7859 i38 = i12 + 204 | 0;
7860 i40 = HEAP32[i38 + 4 >> 2] | 0;
7861 i41 = i12 + 236 | 0;
7862 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7863 HEAP32[i41 + 4 >> 2] = i40;
7864 break;
7865 } else {
7866 if (i19) {
7867 i41 = d24 >= 0.0;
7868 HEAP8[i12 + 248 | 0] = i41 & 1;
7869 i19 = i12 + 212 | 0;
7870 if (i41) {
7871 i40 = i16;
7872 i38 = HEAP32[i40 >> 2] | 0;
7873 i40 = HEAP32[i40 + 4 >> 2] | 0;
7874 i41 = i19;
7875 HEAP32[i41 >> 2] = i38;
7876 HEAP32[i41 + 4 >> 2] = i40;
7877 d37 = +-(HEAP32[tempDoublePtr >> 2] = i38, +HEAPF32[tempDoublePtr >> 2]);
7878 d39 = +d22;
7879 i41 = i12 + 228 | 0;
7880 HEAPF32[i41 >> 2] = d37;
7881 HEAPF32[i41 + 4 >> 2] = d39;
7882 i41 = i12 + 236 | 0;
7883 HEAP32[i41 >> 2] = i38;
7884 HEAP32[i41 + 4 >> 2] = i40;
7885 break;
7886 }
7887 } else {
7888 HEAP8[i12 + 248 | 0] = 0;
7889 i19 = i12 + 212 | 0;
7890 }
7891 d39 = +-d23;
7892 d37 = +d22;
7893 i38 = i19;
7894 HEAPF32[i38 >> 2] = d39;
7895 HEAPF32[i38 + 4 >> 2] = d37;
7896 d37 = +-+HEAPF32[i12 + 204 >> 2];
7897 d39 = +-+HEAPF32[i12 + 208 >> 2];
7898 i38 = i12 + 228 | 0;
7899 HEAPF32[i38 >> 2] = d37;
7900 HEAPF32[i38 + 4 >> 2] = d39;
7901 i38 = i16;
7902 i40 = HEAP32[i38 + 4 >> 2] | 0;
7903 i41 = i12 + 236 | 0;
7904 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7905 HEAP32[i41 + 4 >> 2] = i40;
7906 break;
7907 }
7908 }
7909 if (i29 & i38) {
7910 if (!(d32 >= 0.0) & !(d28 >= 0.0)) {
7911 i41 = d24 >= 0.0;
7912 HEAP8[i12 + 248 | 0] = i41 & 1;
7913 i19 = i12 + 212 | 0;
7914 if (!i41) {
7915 d37 = +-d23;
7916 d39 = +d22;
7917 i41 = i19;
7918 HEAPF32[i41 >> 2] = d37;
7919 HEAPF32[i41 + 4 >> 2] = d39;
7920 i41 = i12 + 228 | 0;
7921 HEAPF32[i41 >> 2] = d37;
7922 HEAPF32[i41 + 4 >> 2] = d39;
7923 i41 = i12 + 236 | 0;
7924 HEAPF32[i41 >> 2] = d37;
7925 HEAPF32[i41 + 4 >> 2] = d39;
7926 break;
7927 }
7928 } else {
7929 HEAP8[i12 + 248 | 0] = 1;
7930 i19 = i12 + 212 | 0;
7931 }
7932 i38 = i16;
7933 i40 = HEAP32[i38 + 4 >> 2] | 0;
7934 i41 = i19;
7935 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7936 HEAP32[i41 + 4 >> 2] = i40;
7937 i41 = i12 + 188 | 0;
7938 i40 = HEAP32[i41 + 4 >> 2] | 0;
7939 i38 = i12 + 228 | 0;
7940 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
7941 HEAP32[i38 + 4 >> 2] = i40;
7942 i38 = i12 + 204 | 0;
7943 i40 = HEAP32[i38 + 4 >> 2] | 0;
7944 i41 = i12 + 236 | 0;
7945 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7946 HEAP32[i41 + 4 >> 2] = i40;
7947 break;
7948 }
7949 if (i29) {
7950 do {
7951 if (!(d32 >= 0.0)) {
7952 if (d28 >= 0.0) {
7953 i41 = d24 >= 0.0;
7954 HEAP8[i12 + 248 | 0] = i41 & 1;
7955 i19 = i12 + 212 | 0;
7956 if (i41) {
7957 break;
7958 }
7959 } else {
7960 HEAP8[i12 + 248 | 0] = 0;
7961 i19 = i12 + 212 | 0;
7962 }
7963 d37 = +-d23;
7964 d39 = +d22;
7965 i41 = i19;
7966 HEAPF32[i41 >> 2] = d37;
7967 HEAPF32[i41 + 4 >> 2] = d39;
7968 d39 = +-+HEAPF32[i34 >> 2];
7969 d37 = +-+HEAPF32[i35 >> 2];
7970 i41 = i12 + 228 | 0;
7971 HEAPF32[i41 >> 2] = d39;
7972 HEAPF32[i41 + 4 >> 2] = d37;
7973 d37 = +-+HEAPF32[i16 >> 2];
7974 d39 = +-+HEAPF32[i17 >> 2];
7975 i41 = i12 + 236 | 0;
7976 HEAPF32[i41 >> 2] = d37;
7977 HEAPF32[i41 + 4 >> 2] = d39;
7978 break L10;
7979 } else {
7980 HEAP8[i12 + 248 | 0] = 1;
7981 i19 = i12 + 212 | 0;
7982 }
7983 } while (0);
7984 i38 = i16;
7985 i40 = HEAP32[i38 + 4 >> 2] | 0;
7986 i41 = i19;
7987 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7988 HEAP32[i41 + 4 >> 2] = i40;
7989 i41 = i12 + 188 | 0;
7990 i40 = HEAP32[i41 + 4 >> 2] | 0;
7991 i38 = i12 + 228 | 0;
7992 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
7993 HEAP32[i38 + 4 >> 2] = i40;
7994 i38 = i16;
7995 i40 = HEAP32[i38 + 4 >> 2] | 0;
7996 i41 = i12 + 236 | 0;
7997 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7998 HEAP32[i41 + 4 >> 2] = i40;
7999 break;
8000 }
8001 if (!i38) {
8002 if (!(!(d32 >= 0.0) | !(d28 >= 0.0))) {
8003 i41 = d24 >= 0.0;
8004 HEAP8[i12 + 248 | 0] = i41 & 1;
8005 i19 = i12 + 212 | 0;
8006 if (i41) {
8007 i40 = i16;
8008 i38 = HEAP32[i40 >> 2] | 0;
8009 i40 = HEAP32[i40 + 4 >> 2] | 0;
8010 i41 = i19;
8011 HEAP32[i41 >> 2] = i38;
8012 HEAP32[i41 + 4 >> 2] = i40;
8013 i41 = i12 + 228 | 0;
8014 HEAP32[i41 >> 2] = i38;
8015 HEAP32[i41 + 4 >> 2] = i40;
8016 i41 = i12 + 236 | 0;
8017 HEAP32[i41 >> 2] = i38;
8018 HEAP32[i41 + 4 >> 2] = i40;
8019 break;
8020 }
8021 } else {
8022 HEAP8[i12 + 248 | 0] = 0;
8023 i19 = i12 + 212 | 0;
8024 }
8025 d37 = +-d23;
8026 d39 = +d22;
8027 i41 = i19;
8028 HEAPF32[i41 >> 2] = d37;
8029 HEAPF32[i41 + 4 >> 2] = d39;
8030 d39 = +-+HEAPF32[i34 >> 2];
8031 d37 = +-+HEAPF32[i35 >> 2];
8032 i41 = i12 + 228 | 0;
8033 HEAPF32[i41 >> 2] = d39;
8034 HEAPF32[i41 + 4 >> 2] = d37;
8035 d37 = +-+HEAPF32[i12 + 188 >> 2];
8036 d39 = +-+HEAPF32[i12 + 192 >> 2];
8037 i41 = i12 + 236 | 0;
8038 HEAPF32[i41 >> 2] = d37;
8039 HEAPF32[i41 + 4 >> 2] = d39;
8040 break;
8041 }
8042 do {
8043 if (!(d24 >= 0.0)) {
8044 if (d32 >= 0.0) {
8045 i41 = d28 >= 0.0;
8046 HEAP8[i12 + 248 | 0] = i41 & 1;
8047 i19 = i12 + 212 | 0;
8048 if (i41) {
8049 break;
8050 }
8051 } else {
8052 HEAP8[i12 + 248 | 0] = 0;
8053 i19 = i12 + 212 | 0;
8054 }
8055 d37 = +-d23;
8056 d39 = +d22;
8057 i41 = i19;
8058 HEAPF32[i41 >> 2] = d37;
8059 HEAPF32[i41 + 4 >> 2] = d39;
8060 d39 = +-+HEAPF32[i16 >> 2];
8061 d37 = +-+HEAPF32[i17 >> 2];
8062 i41 = i12 + 228 | 0;
8063 HEAPF32[i41 >> 2] = d39;
8064 HEAPF32[i41 + 4 >> 2] = d37;
8065 d37 = +-+HEAPF32[i12 + 188 >> 2];
8066 d39 = +-+HEAPF32[i12 + 192 >> 2];
8067 i41 = i12 + 236 | 0;
8068 HEAPF32[i41 >> 2] = d37;
8069 HEAPF32[i41 + 4 >> 2] = d39;
8070 break L10;
8071 } else {
8072 HEAP8[i12 + 248 | 0] = 1;
8073 i19 = i12 + 212 | 0;
8074 }
8075 } while (0);
8076 i38 = i16;
8077 i40 = HEAP32[i38 + 4 >> 2] | 0;
8078 i41 = i19;
8079 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
8080 HEAP32[i41 + 4 >> 2] = i40;
8081 i41 = i16;
8082 i40 = HEAP32[i41 + 4 >> 2] | 0;
8083 i38 = i12 + 228 | 0;
8084 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
8085 HEAP32[i38 + 4 >> 2] = i40;
8086 i38 = i12 + 204 | 0;
8087 i40 = HEAP32[i38 + 4 >> 2] | 0;
8088 i41 = i12 + 236 | 0;
8089 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
8090 HEAP32[i41 + 4 >> 2] = i40;
8091 }
8092 } while (0);
8093 if ((i15 | 0) == 64) {
8094 i38 = i16;
8095 i41 = HEAP32[i38 >> 2] | 0;
8096 i38 = HEAP32[i38 + 4 >> 2] | 0;
8097 i40 = i19;
8098 HEAP32[i40 >> 2] = i41;
8099 HEAP32[i40 + 4 >> 2] = i38;
8100 d37 = +-(HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
8101 d39 = +d22;
8102 i41 = i12 + 228 | 0;
8103 HEAPF32[i41 >> 2] = d37;
8104 HEAPF32[i41 + 4 >> 2] = d39;
8105 i41 = i12 + 236 | 0;
8106 HEAPF32[i41 >> 2] = d37;
8107 HEAPF32[i41 + 4 >> 2] = d39;
8108 } else if ((i15 | 0) == 65) {
8109 d37 = +-d23;
8110 d39 = +d22;
8111 i40 = i19;
8112 HEAPF32[i40 >> 2] = d37;
8113 HEAPF32[i40 + 4 >> 2] = d39;
8114 i40 = i16;
8115 i38 = HEAP32[i40 >> 2] | 0;
8116 i40 = HEAP32[i40 + 4 >> 2] | 0;
8117 i41 = i12 + 228 | 0;
8118 HEAP32[i41 >> 2] = i38;
8119 HEAP32[i41 + 4 >> 2] = i40;
8120 i41 = i12 + 236 | 0;
8121 HEAP32[i41 >> 2] = i38;
8122 HEAP32[i41 + 4 >> 2] = i40;
8123 }
8124 i21 = i8 + 148 | 0;
8125 i34 = i12 + 128 | 0;
8126 HEAP32[i34 >> 2] = HEAP32[i21 >> 2];
8127 if ((HEAP32[i21 >> 2] | 0) > 0) {
8128 i19 = 0;
8129 do {
8130 d33 = +HEAPF32[i5 >> 2];
8131 d37 = +HEAPF32[i8 + (i19 << 3) + 20 >> 2];
8132 d39 = +HEAPF32[i7 >> 2];
8133 d36 = +HEAPF32[i8 + (i19 << 3) + 24 >> 2];
8134 d32 = +(+HEAPF32[i4 >> 2] + (d33 * d37 - d39 * d36));
8135 d36 = +(d37 * d39 + d33 * d36 + +HEAPF32[i6 >> 2]);
8136 i41 = i12 + (i19 << 3) | 0;
8137 HEAPF32[i41 >> 2] = d32;
8138 HEAPF32[i41 + 4 >> 2] = d36;
8139 d36 = +HEAPF32[i5 >> 2];
8140 d32 = +HEAPF32[i8 + (i19 << 3) + 84 >> 2];
8141 d33 = +HEAPF32[i7 >> 2];
8142 d39 = +HEAPF32[i8 + (i19 << 3) + 88 >> 2];
8143 d37 = +(d36 * d32 - d33 * d39);
8144 d39 = +(d32 * d33 + d36 * d39);
8145 i41 = i12 + (i19 << 3) + 64 | 0;
8146 HEAPF32[i41 >> 2] = d37;
8147 HEAPF32[i41 + 4 >> 2] = d39;
8148 i19 = i19 + 1 | 0;
8149 } while ((i19 | 0) < (HEAP32[i21 >> 2] | 0));
8150 }
8151 i21 = i12 + 244 | 0;
8152 HEAPF32[i21 >> 2] = .019999999552965164;
8153 i19 = i2 + 60 | 0;
8154 HEAP32[i19 >> 2] = 0;
8155 i29 = i12 + 248 | 0;
8156 i35 = HEAP32[i34 >> 2] | 0;
8157 if ((i35 | 0) <= 0) {
8158 STACKTOP = i1;
8159 return;
8160 }
8161 d23 = +HEAPF32[i12 + 164 >> 2];
8162 d26 = +HEAPF32[i20 >> 2];
8163 d24 = +HEAPF32[i12 + 212 >> 2];
8164 d27 = +HEAPF32[i12 + 216 >> 2];
8165 d22 = 3.4028234663852886e+38;
8166 i20 = 0;
8167 do {
8168 d25 = d24 * (+HEAPF32[i12 + (i20 << 3) >> 2] - d23) + d27 * (+HEAPF32[i12 + (i 20 << 3) + 4 >> 2] - d26);
8169 d22 = d25 < d22 ? d25 : d22;
8170 i20 = i20 + 1 | 0;
8171 } while ((i20 | 0) != (i35 | 0));
8172 if (d22 > .019999999552965164) {
8173 STACKTOP = i1;
8174 return;
8175 }
8176 __ZN12b2EPCollider24ComputePolygonSeparationEv(i18, i12);
8177 i20 = HEAP32[i18 >> 2] | 0;
8178 if ((i20 | 0) != 0) {
8179 d23 = +HEAPF32[i18 + 8 >> 2];
8180 if (d23 > +HEAPF32[i21 >> 2]) {
8181 STACKTOP = i1;
8182 return;
8183 }
8184 if (d23 > d22 * .9800000190734863 + .0010000000474974513) {
8185 i18 = HEAP32[i18 + 4 >> 2] | 0;
8186 i35 = i2 + 56 | 0;
8187 if ((i20 | 0) == 1) {
8188 i18 = i11;
8189 i15 = 77;
8190 } else {
8191 HEAP32[i35 >> 2] = 2;
8192 i40 = i14;
8193 i41 = HEAP32[i40 + 4 >> 2] | 0;
8194 i38 = i11;
8195 HEAP32[i38 >> 2] = HEAP32[i40 >> 2];
8196 HEAP32[i38 + 4 >> 2] = i41;
8197 i38 = i11 + 8 | 0;
8198 HEAP8[i38] = 0;
8199 i41 = i18 & 255;
8200 HEAP8[i38 + 1 | 0] = i41;
8201 HEAP8[i38 + 2 | 0] = 0;
8202 HEAP8[i38 + 3 | 0] = 1;
8203 i38 = i13;
8204 i40 = HEAP32[i38 + 4 >> 2] | 0;
8205 i13 = i11 + 12 | 0;
8206 HEAP32[i13 >> 2] = HEAP32[i38 >> 2];
8207 HEAP32[i13 + 4 >> 2] = i40;
8208 i13 = i11 + 20 | 0;
8209 HEAP8[i13] = 0;
8210 HEAP8[i13 + 1 | 0] = i41;
8211 HEAP8[i13 + 2 | 0] = 0;
8212 HEAP8[i13 + 3 | 0] = 1;
8213 HEAP32[i9 >> 2] = i18;
8214 i13 = i18 + 1 | 0;
8215 i16 = (i13 | 0) < (HEAP32[i34 >> 2] | 0) ? i13 : 0;
8216 HEAP32[i9 + 4 >> 2] = i16;
8217 i17 = i12 + (i18 << 3) | 0;
8218 i13 = HEAP32[i17 >> 2] | 0;
8219 i17 = HEAP32[i17 + 4 >> 2] | 0;
8220 i29 = i9 + 8 | 0;
8221 HEAP32[i29 >> 2] = i13;
8222 HEAP32[i29 + 4 >> 2] = i17;
8223 i16 = i12 + (i16 << 3) | 0;
8224 i29 = HEAP32[i16 >> 2] | 0;
8225 i16 = HEAP32[i16 + 4 >> 2] | 0;
8226 i20 = i9 + 16 | 0;
8227 HEAP32[i20 >> 2] = i29;
8228 HEAP32[i20 + 4 >> 2] = i16;
8229 i20 = i12 + (i18 << 3) + 64 | 0;
8230 i12 = HEAP32[i20 >> 2] | 0;
8231 i20 = HEAP32[i20 + 4 >> 2] | 0;
8232 i14 = i9 + 24 | 0;
8233 HEAP32[i14 >> 2] = i12;
8234 HEAP32[i14 + 4 >> 2] = i20;
8235 i14 = 0;
8236 }
8237 } else {
8238 i15 = 75;
8239 }
8240 } else {
8241 i15 = 75;
8242 }
8243 if ((i15 | 0) == 75) {
8244 i18 = i11;
8245 i35 = i2 + 56 | 0;
8246 i15 = 77;
8247 }
8248 do {
8249 if ((i15 | 0) == 77) {
8250 HEAP32[i35 >> 2] = 1;
8251 i15 = HEAP32[i34 >> 2] | 0;
8252 if ((i15 | 0) > 1) {
8253 d23 = +HEAPF32[i12 + 216 >> 2];
8254 d22 = +HEAPF32[i12 + 212 >> 2];
8255 i34 = 0;
8256 d24 = d22 * +HEAPF32[i12 + 64 >> 2] + d23 * +HEAPF32[i12 + 68 >> 2];
8257 i35 = 1;
8258 while (1) {
8259 d25 = d22 * +HEAPF32[i12 + (i35 << 3) + 64 >> 2] + d23 * +HEAPF32[i12 + (i3 5 << 3) + 68 >> 2];
8260 i20 = d25 < d24;
8261 i34 = i20 ? i35 : i34;
8262 i35 = i35 + 1 | 0;
8263 if ((i35 | 0) < (i15 | 0)) {
8264 d24 = i20 ? d25 : d24;
8265 } else {
8266 break;
8267 }
8268 }
8269 } else {
8270 i34 = 0;
8271 }
8272 i20 = i34 + 1 | 0;
8273 i40 = (i20 | 0) < (i15 | 0) ? i20 : 0;
8274 i41 = i12 + (i34 << 3) | 0;
8275 i38 = HEAP32[i41 + 4 >> 2] | 0;
8276 i35 = i11;
8277 HEAP32[i35 >> 2] = HEAP32[i41 >> 2];
8278 HEAP32[i35 + 4 >> 2] = i38;
8279 i35 = i11 + 8 | 0;
8280 HEAP8[i35] = 0;
8281 HEAP8[i35 + 1 | 0] = i34;
8282 HEAP8[i35 + 2 | 0] = 1;
8283 HEAP8[i35 + 3 | 0] = 0;
8284 i35 = i12 + (i40 << 3) | 0;
8285 i38 = HEAP32[i35 + 4 >> 2] | 0;
8286 i41 = i11 + 12 | 0;
8287 HEAP32[i41 >> 2] = HEAP32[i35 >> 2];
8288 HEAP32[i41 + 4 >> 2] = i38;
8289 i41 = i11 + 20 | 0;
8290 HEAP8[i41] = 0;
8291 HEAP8[i41 + 1 | 0] = i40;
8292 HEAP8[i41 + 2 | 0] = 1;
8293 HEAP8[i41 + 3 | 0] = 0;
8294 if ((HEAP8[i29] | 0) == 0) {
8295 HEAP32[i9 >> 2] = 1;
8296 HEAP32[i9 + 4 >> 2] = 0;
8297 i11 = i13;
8298 i13 = HEAP32[i11 >> 2] | 0;
8299 i11 = HEAP32[i11 + 4 >> 2] | 0;
8300 i29 = i9 + 8 | 0;
8301 HEAP32[i29 >> 2] = i13;
8302 HEAP32[i29 + 4 >> 2] = i11;
8303 i29 = HEAP32[i14 >> 2] | 0;
8304 i14 = HEAP32[i14 + 4 >> 2] | 0;
8305 i12 = i9 + 16 | 0;
8306 HEAP32[i12 >> 2] = i29;
8307 HEAP32[i12 + 4 >> 2] = i14;
8308 i12 = (HEAPF32[tempDoublePtr >> 2] = -+HEAPF32[i16 >> 2], HEAP32[tempDoubleP tr >> 2] | 0);
8309 i20 = (HEAPF32[tempDoublePtr >> 2] = -+HEAPF32[i17 >> 2], HEAP32[tempDoubleP tr >> 2] | 0);
8310 i16 = i9 + 24 | 0;
8311 HEAP32[i16 >> 2] = i12;
8312 HEAP32[i16 + 4 >> 2] = i20;
8313 i16 = i14;
8314 i17 = i11;
8315 i11 = i18;
8316 i18 = 1;
8317 i14 = 1;
8318 break;
8319 } else {
8320 HEAP32[i9 >> 2] = 0;
8321 HEAP32[i9 + 4 >> 2] = 1;
8322 i17 = i14;
8323 i11 = HEAP32[i17 >> 2] | 0;
8324 i17 = HEAP32[i17 + 4 >> 2] | 0;
8325 i29 = i9 + 8 | 0;
8326 HEAP32[i29 >> 2] = i11;
8327 HEAP32[i29 + 4 >> 2] = i17;
8328 i29 = HEAP32[i13 >> 2] | 0;
8329 i13 = HEAP32[i13 + 4 >> 2] | 0;
8330 i20 = i9 + 16 | 0;
8331 HEAP32[i20 >> 2] = i29;
8332 HEAP32[i20 + 4 >> 2] = i13;
8333 i20 = i16;
8334 i12 = HEAP32[i20 >> 2] | 0;
8335 i20 = HEAP32[i20 + 4 >> 2] | 0;
8336 i16 = i9 + 24 | 0;
8337 HEAP32[i16 >> 2] = i12;
8338 HEAP32[i16 + 4 >> 2] = i20;
8339 i16 = i13;
8340 i13 = i11;
8341 i11 = i18;
8342 i18 = 0;
8343 i14 = 1;
8344 break;
8345 }
8346 }
8347 } while (0);
8348 d30 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]);
8349 d39 = (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]);
8350 d31 = (HEAP32[tempDoublePtr >> 2] = i13, +HEAPF32[tempDoublePtr >> 2]);
8351 d32 = (HEAP32[tempDoublePtr >> 2] = i17, +HEAPF32[tempDoublePtr >> 2]);
8352 d33 = (HEAP32[tempDoublePtr >> 2] = i29, +HEAPF32[tempDoublePtr >> 2]);
8353 d37 = (HEAP32[tempDoublePtr >> 2] = i16, +HEAPF32[tempDoublePtr >> 2]);
8354 i41 = i9 + 32 | 0;
8355 i16 = i9 + 24 | 0;
8356 i13 = i9 + 28 | 0;
8357 d39 = -d39;
8358 HEAPF32[i41 >> 2] = d30;
8359 HEAPF32[i9 + 36 >> 2] = d39;
8360 i20 = i9 + 44 | 0;
8361 d36 = -d30;
8362 i17 = i20;
8363 HEAPF32[i17 >> 2] = d36;
8364 HEAP32[i17 + 4 >> 2] = i12;
8365 i17 = i9 + 8 | 0;
8366 i15 = i9 + 12 | 0;
8367 d39 = d30 * d31 + d32 * d39;
8368 HEAPF32[i9 + 40 >> 2] = d39;
8369 i29 = i9 + 52 | 0;
8370 HEAPF32[i29 >> 2] = d33 * d36 + (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tem pDoublePtr >> 2]) * d37;
8371 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i10, i11, i41, d39, i18) | 0) < 2) {
8372 STACKTOP = i1;
8373 return;
8374 }
8375 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i3, i10, i20, +HEAP F32[i29 >> 2], HEAP32[i9 + 4 >> 2] | 0) | 0) < 2) {
8376 STACKTOP = i1;
8377 return;
8378 }
8379 i10 = i2 + 40 | 0;
8380 if (i14) {
8381 i40 = i16;
8382 i41 = HEAP32[i40 >> 2] | 0;
8383 i40 = HEAP32[i40 + 4 >> 2] | 0;
8384 i35 = i10;
8385 HEAP32[i35 >> 2] = i41;
8386 HEAP32[i35 + 4 >> 2] = i40;
8387 i35 = i17;
8388 i40 = HEAP32[i35 >> 2] | 0;
8389 i35 = HEAP32[i35 + 4 >> 2] | 0;
8390 i38 = i2 + 48 | 0;
8391 HEAP32[i38 >> 2] = i40;
8392 HEAP32[i38 + 4 >> 2] = i35;
8393 d23 = (HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]);
8394 d22 = (HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
8395 d24 = +HEAPF32[i15 >> 2];
8396 d25 = +HEAPF32[i13 >> 2];
8397 d28 = +HEAPF32[i3 >> 2];
8398 d27 = +HEAPF32[i3 + 4 >> 2];
8399 d26 = +HEAPF32[i21 >> 2];
8400 if (!((d28 - d23) * d22 + (d27 - d24) * d25 <= d26)) {
8401 d28 = d26;
8402 i8 = 0;
8403 } else {
8404 d37 = d28 - +HEAPF32[i4 >> 2];
8405 d36 = d27 - +HEAPF32[i6 >> 2];
8406 d33 = +HEAPF32[i5 >> 2];
8407 d28 = +HEAPF32[i7 >> 2];
8408 d39 = +(d37 * d33 + d36 * d28);
8409 d28 = +(d33 * d36 - d37 * d28);
8410 i8 = i2;
8411 HEAPF32[i8 >> 2] = d39;
8412 HEAPF32[i8 + 4 >> 2] = d28;
8413 HEAP32[i2 + 16 >> 2] = HEAP32[i3 + 8 >> 2];
8414 d28 = +HEAPF32[i21 >> 2];
8415 i8 = 1;
8416 }
8417 d26 = +HEAPF32[i3 + 12 >> 2];
8418 d27 = +HEAPF32[i3 + 16 >> 2];
8419 if ((d26 - d23) * d22 + (d27 - d24) * d25 <= d28) {
8420 d36 = d26 - +HEAPF32[i4 >> 2];
8421 d33 = d27 - +HEAPF32[i6 >> 2];
8422 d32 = +HEAPF32[i5 >> 2];
8423 d39 = +HEAPF32[i7 >> 2];
8424 d37 = +(d36 * d32 + d33 * d39);
8425 d39 = +(d32 * d33 - d36 * d39);
8426 i41 = i2 + (i8 * 20 | 0) | 0;
8427 HEAPF32[i41 >> 2] = d37;
8428 HEAPF32[i41 + 4 >> 2] = d39;
8429 HEAP32[i2 + (i8 * 20 | 0) + 16 >> 2] = HEAP32[i3 + 20 >> 2];
8430 i8 = i8 + 1 | 0;
8431 }
8432 } else {
8433 i38 = HEAP32[i9 >> 2] | 0;
8434 i35 = i8 + (i38 << 3) + 84 | 0;
8435 i41 = HEAP32[i35 + 4 >> 2] | 0;
8436 i40 = i10;
8437 HEAP32[i40 >> 2] = HEAP32[i35 >> 2];
8438 HEAP32[i40 + 4 >> 2] = i41;
8439 i38 = i8 + (i38 << 3) + 20 | 0;
8440 i40 = HEAP32[i38 + 4 >> 2] | 0;
8441 i41 = i2 + 48 | 0;
8442 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
8443 HEAP32[i41 + 4 >> 2] = i40;
8444 d22 = +HEAPF32[i17 >> 2];
8445 d23 = +HEAPF32[i16 >> 2];
8446 d24 = +HEAPF32[i15 >> 2];
8447 d25 = +HEAPF32[i13 >> 2];
8448 d26 = +HEAPF32[i21 >> 2];
8449 if (!((+HEAPF32[i3 >> 2] - d22) * d23 + (+HEAPF32[i3 + 4 >> 2] - d24) * d25 <= d26)) {
8450 i8 = 0;
8451 } else {
8452 i40 = i3;
8453 i8 = HEAP32[i40 + 4 >> 2] | 0;
8454 i41 = i2;
8455 HEAP32[i41 >> 2] = HEAP32[i40 >> 2];
8456 HEAP32[i41 + 4 >> 2] = i8;
8457 i41 = i3 + 8 | 0;
8458 i8 = i2 + 16 | 0;
8459 HEAP8[i8 + 2 | 0] = HEAP8[i41 + 3 | 0] | 0;
8460 HEAP8[i8 + 3 | 0] = HEAP8[i41 + 2 | 0] | 0;
8461 HEAP8[i8] = HEAP8[i41 + 1 | 0] | 0;
8462 HEAP8[i8 + 1 | 0] = HEAP8[i41] | 0;
8463 d26 = +HEAPF32[i21 >> 2];
8464 i8 = 1;
8465 }
8466 i4 = i3 + 12 | 0;
8467 if ((+HEAPF32[i4 >> 2] - d22) * d23 + (+HEAPF32[i3 + 16 >> 2] - d24) * d25 <= d26) {
8468 i38 = i4;
8469 i41 = HEAP32[i38 + 4 >> 2] | 0;
8470 i40 = i2 + (i8 * 20 | 0) | 0;
8471 HEAP32[i40 >> 2] = HEAP32[i38 >> 2];
8472 HEAP32[i40 + 4 >> 2] = i41;
8473 i40 = i3 + 20 | 0;
8474 i41 = i2 + (i8 * 20 | 0) + 16 | 0;
8475 HEAP8[i41 + 2 | 0] = HEAP8[i40 + 3 | 0] | 0;
8476 HEAP8[i41 + 3 | 0] = HEAP8[i40 + 2 | 0] | 0;
8477 HEAP8[i41] = HEAP8[i40 + 1 | 0] | 0;
8478 HEAP8[i41 + 1 | 0] = HEAP8[i40] | 0;
8479 i8 = i8 + 1 | 0;
8480 }
8481 }
8482 HEAP32[i19 >> 2] = i8;
8483 STACKTOP = i1;
8484 return;
8485 }
8486 function __ZN7b2World8SolveTOIERK10b2TimeStep(i30, i11) {
8487 i30 = i30 | 0;
8488 i11 = i11 | 0;
8489 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, i2 0 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i 29 = 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;
8490 i1 = STACKTOP;
8491 STACKTOP = STACKTOP + 336 | 0;
8492 i3 = i1 + 284 | 0;
8493 i6 = i1 + 152 | 0;
8494 i5 = i1 + 144 | 0;
8495 i4 = i1 + 108 | 0;
8496 i8 = i1 + 72 | 0;
8497 i7 = i1 + 64 | 0;
8498 i14 = i1 + 24 | 0;
8499 i9 = i1;
8500 i10 = i30 + 102872 | 0;
8501 i13 = i30 + 102944 | 0;
8502 __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i3, 64, 32, 0, i30 + 68 | 0, HEAP32[i13 >> 2] | 0);
8503 i2 = i30 + 102995 | 0;
8504 if ((HEAP8[i2] | 0) != 0) {
8505 i15 = HEAP32[i30 + 102952 >> 2] | 0;
8506 if ((i15 | 0) != 0) {
8507 do {
8508 i66 = i15 + 4 | 0;
8509 HEAP16[i66 >> 1] = HEAP16[i66 >> 1] & 65534;
8510 HEAPF32[i15 + 60 >> 2] = 0.0;
8511 i15 = HEAP32[i15 + 96 >> 2] | 0;
8512 } while ((i15 | 0) != 0);
8513 }
8514 i15 = i30 + 102932 | 0;
8515 i16 = HEAP32[i15 >> 2] | 0;
8516 if ((i16 | 0) != 0) {
8517 do {
8518 i66 = i16 + 4 | 0;
8519 HEAP32[i66 >> 2] = HEAP32[i66 >> 2] & -34;
8520 HEAP32[i16 + 128 >> 2] = 0;
8521 HEAPF32[i16 + 132 >> 2] = 1.0;
8522 i16 = HEAP32[i16 + 12 >> 2] | 0;
8523 } while ((i16 | 0) != 0);
8524 }
8525 } else {
8526 i15 = i30 + 102932 | 0;
8527 }
8528 i25 = i3 + 28 | 0;
8529 i26 = i3 + 36 | 0;
8530 i27 = i3 + 32 | 0;
8531 i28 = i3 + 40 | 0;
8532 i29 = i3 + 8 | 0;
8533 i24 = i3 + 44 | 0;
8534 i23 = i3 + 12 | 0;
8535 i22 = i7 + 4 | 0;
8536 i21 = i9 + 4 | 0;
8537 i20 = i9 + 8 | 0;
8538 i19 = i9 + 16 | 0;
8539 i18 = i11 + 12 | 0;
8540 i17 = i9 + 12 | 0;
8541 i16 = i9 + 20 | 0;
8542 i39 = i30 + 102994 | 0;
8543 i37 = i6 + 16 | 0;
8544 i36 = i6 + 20 | 0;
8545 i35 = i6 + 24 | 0;
8546 i34 = i6 + 44 | 0;
8547 i33 = i6 + 48 | 0;
8548 i32 = i6 + 52 | 0;
8549 i41 = i6 + 28 | 0;
8550 i31 = i6 + 56 | 0;
8551 i40 = i6 + 92 | 0;
8552 i30 = i6 + 128 | 0;
8553 i38 = i5 + 4 | 0;
8554 L11 : while (1) {
8555 i47 = HEAP32[i15 >> 2] | 0;
8556 if ((i47 | 0) == 0) {
8557 i4 = 36;
8558 break;
8559 } else {
8560 d42 = 1.0;
8561 i44 = 0;
8562 }
8563 do {
8564 i48 = i47 + 4 | 0;
8565 i43 = HEAP32[i48 >> 2] | 0;
8566 do {
8567 if ((i43 & 4 | 0) != 0 ? (HEAP32[i47 + 128 >> 2] | 0) <= 8 : 0) {
8568 if ((i43 & 32 | 0) == 0) {
8569 i43 = HEAP32[i47 + 48 >> 2] | 0;
8570 i45 = HEAP32[i47 + 52 >> 2] | 0;
8571 if ((HEAP8[i43 + 38 | 0] | 0) != 0) {
8572 break;
8573 }
8574 if ((HEAP8[i45 + 38 | 0] | 0) != 0) {
8575 break;
8576 }
8577 i46 = HEAP32[i43 + 8 >> 2] | 0;
8578 i50 = HEAP32[i45 + 8 >> 2] | 0;
8579 i53 = HEAP32[i46 >> 2] | 0;
8580 i52 = HEAP32[i50 >> 2] | 0;
8581 if (!((i53 | 0) == 2 | (i52 | 0) == 2)) {
8582 i4 = 16;
8583 break L11;
8584 }
8585 i51 = HEAP16[i46 + 4 >> 1] | 0;
8586 i49 = HEAP16[i50 + 4 >> 1] | 0;
8587 if (!((i51 & 2) != 0 & (i53 | 0) != 0 | (i49 & 2) != 0 & (i52 | 0) != 0)) {
8588 break;
8589 }
8590 if (!((i51 & 8) != 0 | (i53 | 0) != 2 | ((i49 & 8) != 0 | (i52 | 0) != 2)) ) {
8591 break;
8592 }
8593 i51 = i46 + 28 | 0;
8594 i52 = i46 + 60 | 0;
8595 d68 = +HEAPF32[i52 >> 2];
8596 i49 = i50 + 28 | 0;
8597 i53 = i50 + 60 | 0;
8598 d67 = +HEAPF32[i53 >> 2];
8599 if (!(d68 < d67)) {
8600 if (d67 < d68) {
8601 if (!(d67 < 1.0)) {
8602 i4 = 25;
8603 break L11;
8604 }
8605 d67 = (d68 - d67) / (1.0 - d67);
8606 i66 = i50 + 36 | 0;
8607 d69 = 1.0 - d67;
8608 d71 = +(+HEAPF32[i66 >> 2] * d69 + d67 * +HEAPF32[i50 + 44 >> 2]);
8609 d70 = +(d69 * +HEAPF32[i50 + 40 >> 2] + d67 * +HEAPF32[i50 + 48 >> 2]);
8610 HEAPF32[i66 >> 2] = d71;
8611 HEAPF32[i66 + 4 >> 2] = d70;
8612 i66 = i50 + 52 | 0;
8613 HEAPF32[i66 >> 2] = d69 * +HEAPF32[i66 >> 2] + d67 * +HEAPF32[i50 + 56 > > 2];
8614 HEAPF32[i53 >> 2] = d68;
8615 d67 = d68;
8616 } else {
8617 d67 = d68;
8618 }
8619 } else {
8620 if (!(d68 < 1.0)) {
8621 i4 = 21;
8622 break L11;
8623 }
8624 d71 = (d67 - d68) / (1.0 - d68);
8625 i66 = i46 + 36 | 0;
8626 d70 = 1.0 - d71;
8627 d68 = +(+HEAPF32[i66 >> 2] * d70 + d71 * +HEAPF32[i46 + 44 >> 2]);
8628 d69 = +(d70 * +HEAPF32[i46 + 40 >> 2] + d71 * +HEAPF32[i46 + 48 >> 2]);
8629 HEAPF32[i66 >> 2] = d68;
8630 HEAPF32[i66 + 4 >> 2] = d69;
8631 i66 = i46 + 52 | 0;
8632 HEAPF32[i66 >> 2] = d70 * +HEAPF32[i66 >> 2] + d71 * +HEAPF32[i46 + 56 >> 2];
8633 HEAPF32[i52 >> 2] = d67;
8634 }
8635 if (!(d67 < 1.0)) {
8636 i4 = 28;
8637 break L11;
8638 }
8639 i66 = HEAP32[i47 + 56 >> 2] | 0;
8640 i46 = HEAP32[i47 + 60 >> 2] | 0;
8641 HEAP32[i37 >> 2] = 0;
8642 HEAP32[i36 >> 2] = 0;
8643 HEAPF32[i35 >> 2] = 0.0;
8644 HEAP32[i34 >> 2] = 0;
8645 HEAP32[i33 >> 2] = 0;
8646 HEAPF32[i32 >> 2] = 0.0;
8647 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i6, HEAP32[i43 + 12 >> 2] | 0, i66);
8648 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i41, HEAP32[i45 + 12 >> 2] | 0, i46) ;
8649 i43 = i31 + 0 | 0;
8650 i45 = i51 + 0 | 0;
8651 i46 = i43 + 36 | 0;
8652 do {
8653 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8654 i43 = i43 + 4 | 0;
8655 i45 = i45 + 4 | 0;
8656 } while ((i43 | 0) < (i46 | 0));
8657 i43 = i40 + 0 | 0;
8658 i45 = i49 + 0 | 0;
8659 i46 = i43 + 36 | 0;
8660 do {
8661 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8662 i43 = i43 + 4 | 0;
8663 i45 = i45 + 4 | 0;
8664 } while ((i43 | 0) < (i46 | 0));
8665 HEAPF32[i30 >> 2] = 1.0;
8666 __Z14b2TimeOfImpactP11b2TOIOutputPK10b2TOIInput(i5, i6);
8667 if ((HEAP32[i5 >> 2] | 0) == 3) {
8668 d67 = d67 + (1.0 - d67) * +HEAPF32[i38 >> 2];
8669 d67 = d67 < 1.0 ? d67 : 1.0;
8670 } else {
8671 d67 = 1.0;
8672 }
8673 HEAPF32[i47 + 132 >> 2] = d67;
8674 HEAP32[i48 >> 2] = HEAP32[i48 >> 2] | 32;
8675 } else {
8676 d67 = +HEAPF32[i47 + 132 >> 2];
8677 }
8678 if (d67 < d42) {
8679 d42 = d67;
8680 i44 = i47;
8681 }
8682 }
8683 } while (0);
8684 i47 = HEAP32[i47 + 12 >> 2] | 0;
8685 } while ((i47 | 0) != 0);
8686 if ((i44 | 0) == 0 | d42 > .9999988079071045) {
8687 i4 = 36;
8688 break;
8689 }
8690 i47 = HEAP32[(HEAP32[i44 + 48 >> 2] | 0) + 8 >> 2] | 0;
8691 i48 = HEAP32[(HEAP32[i44 + 52 >> 2] | 0) + 8 >> 2] | 0;
8692 i49 = i47 + 28 | 0;
8693 i43 = i4 + 0 | 0;
8694 i45 = i49 + 0 | 0;
8695 i46 = i43 + 36 | 0;
8696 do {
8697 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8698 i43 = i43 + 4 | 0;
8699 i45 = i45 + 4 | 0;
8700 } while ((i43 | 0) < (i46 | 0));
8701 i50 = i48 + 28 | 0;
8702 i43 = i8 + 0 | 0;
8703 i45 = i50 + 0 | 0;
8704 i46 = i43 + 36 | 0;
8705 do {
8706 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8707 i43 = i43 + 4 | 0;
8708 i45 = i45 + 4 | 0;
8709 } while ((i43 | 0) < (i46 | 0));
8710 i43 = i47 + 60 | 0;
8711 d67 = +HEAPF32[i43 >> 2];
8712 if (!(d67 < 1.0)) {
8713 i4 = 38;
8714 break;
8715 }
8716 d70 = (d42 - d67) / (1.0 - d67);
8717 i57 = i47 + 36 | 0;
8718 d67 = 1.0 - d70;
8719 i52 = i47 + 44 | 0;
8720 i53 = i47 + 48 | 0;
8721 d71 = +HEAPF32[i57 >> 2] * d67 + d70 * +HEAPF32[i52 >> 2];
8722 d72 = d67 * +HEAPF32[i47 + 40 >> 2] + d70 * +HEAPF32[i53 >> 2];
8723 d69 = +d71;
8724 d68 = +d72;
8725 HEAPF32[i57 >> 2] = d69;
8726 HEAPF32[i57 + 4 >> 2] = d68;
8727 i57 = i47 + 52 | 0;
8728 i51 = i47 + 56 | 0;
8729 d70 = d67 * +HEAPF32[i57 >> 2] + d70 * +HEAPF32[i51 >> 2];
8730 HEAPF32[i57 >> 2] = d70;
8731 HEAPF32[i43 >> 2] = d42;
8732 i57 = i47 + 44 | 0;
8733 HEAPF32[i57 >> 2] = d69;
8734 HEAPF32[i57 + 4 >> 2] = d68;
8735 HEAPF32[i51 >> 2] = d70;
8736 d68 = +Math_sin(+d70);
8737 i57 = i47 + 20 | 0;
8738 HEAPF32[i57 >> 2] = d68;
8739 d70 = +Math_cos(+d70);
8740 i56 = i47 + 24 | 0;
8741 HEAPF32[i56 >> 2] = d70;
8742 i58 = i47 + 12 | 0;
8743 i55 = i47 + 28 | 0;
8744 d69 = +HEAPF32[i55 >> 2];
8745 i54 = i47 + 32 | 0;
8746 d67 = +HEAPF32[i54 >> 2];
8747 d71 = +(d71 - (d70 * d69 - d68 * d67));
8748 d67 = +(d72 - (d68 * d69 + d70 * d67));
8749 i43 = i58;
8750 HEAPF32[i43 >> 2] = d71;
8751 HEAPF32[i43 + 4 >> 2] = d67;
8752 i43 = i48 + 60 | 0;
8753 d67 = +HEAPF32[i43 >> 2];
8754 if (!(d67 < 1.0)) {
8755 i4 = 40;
8756 break;
8757 }
8758 d70 = (d42 - d67) / (1.0 - d67);
8759 i64 = i48 + 36 | 0;
8760 d72 = 1.0 - d70;
8761 i61 = i48 + 44 | 0;
8762 i60 = i48 + 48 | 0;
8763 d71 = +HEAPF32[i64 >> 2] * d72 + d70 * +HEAPF32[i61 >> 2];
8764 d67 = d72 * +HEAPF32[i48 + 40 >> 2] + d70 * +HEAPF32[i60 >> 2];
8765 d69 = +d71;
8766 d68 = +d67;
8767 HEAPF32[i64 >> 2] = d69;
8768 HEAPF32[i64 + 4 >> 2] = d68;
8769 i64 = i48 + 52 | 0;
8770 i59 = i48 + 56 | 0;
8771 d70 = d72 * +HEAPF32[i64 >> 2] + d70 * +HEAPF32[i59 >> 2];
8772 HEAPF32[i64 >> 2] = d70;
8773 HEAPF32[i43 >> 2] = d42;
8774 i64 = i48 + 44 | 0;
8775 HEAPF32[i64 >> 2] = d69;
8776 HEAPF32[i64 + 4 >> 2] = d68;
8777 HEAPF32[i59 >> 2] = d70;
8778 d68 = +Math_sin(+d70);
8779 i64 = i48 + 20 | 0;
8780 HEAPF32[i64 >> 2] = d68;
8781 d70 = +Math_cos(+d70);
8782 i63 = i48 + 24 | 0;
8783 HEAPF32[i63 >> 2] = d70;
8784 i65 = i48 + 12 | 0;
8785 i62 = i48 + 28 | 0;
8786 d69 = +HEAPF32[i62 >> 2];
8787 i66 = i48 + 32 | 0;
8788 d72 = +HEAPF32[i66 >> 2];
8789 d71 = +(d71 - (d70 * d69 - d68 * d72));
8790 d72 = +(d67 - (d68 * d69 + d70 * d72));
8791 i43 = i65;
8792 HEAPF32[i43 >> 2] = d71;
8793 HEAPF32[i43 + 4 >> 2] = d72;
8794 __ZN9b2Contact6UpdateEP17b2ContactListener(i44, HEAP32[i13 >> 2] | 0);
8795 i43 = i44 + 4 | 0;
8796 i45 = HEAP32[i43 >> 2] | 0;
8797 HEAP32[i43 >> 2] = i45 & -33;
8798 i46 = i44 + 128 | 0;
8799 HEAP32[i46 >> 2] = (HEAP32[i46 >> 2] | 0) + 1;
8800 if ((i45 & 6 | 0) != 6) {
8801 HEAP32[i43 >> 2] = i45 & -37;
8802 i43 = i49 + 0 | 0;
8803 i45 = i4 + 0 | 0;
8804 i46 = i43 + 36 | 0;
8805 do {
8806 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8807 i43 = i43 + 4 | 0;
8808 i45 = i45 + 4 | 0;
8809 } while ((i43 | 0) < (i46 | 0));
8810 i43 = i50 + 0 | 0;
8811 i45 = i8 + 0 | 0;
8812 i46 = i43 + 36 | 0;
8813 do {
8814 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8815 i43 = i43 + 4 | 0;
8816 i45 = i45 + 4 | 0;
8817 } while ((i43 | 0) < (i46 | 0));
8818 d69 = +HEAPF32[i51 >> 2];
8819 d71 = +Math_sin(+d69);
8820 HEAPF32[i57 >> 2] = d71;
8821 d69 = +Math_cos(+d69);
8822 HEAPF32[i56 >> 2] = d69;
8823 d72 = +HEAPF32[i55 >> 2];
8824 d70 = +HEAPF32[i54 >> 2];
8825 d68 = +(+HEAPF32[i52 >> 2] - (d69 * d72 - d71 * d70));
8826 d70 = +(+HEAPF32[i53 >> 2] - (d71 * d72 + d69 * d70));
8827 HEAPF32[i58 >> 2] = d68;
8828 HEAPF32[i58 + 4 >> 2] = d70;
8829 d70 = +HEAPF32[i59 >> 2];
8830 d68 = +Math_sin(+d70);
8831 HEAPF32[i64 >> 2] = d68;
8832 d70 = +Math_cos(+d70);
8833 HEAPF32[i63 >> 2] = d70;
8834 d69 = +HEAPF32[i62 >> 2];
8835 d72 = +HEAPF32[i66 >> 2];
8836 d71 = +(+HEAPF32[i61 >> 2] - (d70 * d69 - d68 * d72));
8837 d72 = +(+HEAPF32[i60 >> 2] - (d68 * d69 + d70 * d72));
8838 i66 = i65;
8839 HEAPF32[i66 >> 2] = d71;
8840 HEAPF32[i66 + 4 >> 2] = d72;
8841 continue;
8842 }
8843 i45 = i47 + 4 | 0;
8844 i46 = HEAPU16[i45 >> 1] | 0;
8845 if ((i46 & 2 | 0) == 0) {
8846 HEAP16[i45 >> 1] = i46 | 2;
8847 HEAPF32[i47 + 144 >> 2] = 0.0;
8848 }
8849 i46 = i48 + 4 | 0;
8850 i49 = HEAPU16[i46 >> 1] | 0;
8851 if ((i49 & 2 | 0) == 0) {
8852 HEAP16[i46 >> 1] = i49 | 2;
8853 HEAPF32[i48 + 144 >> 2] = 0.0;
8854 }
8855 HEAP32[i25 >> 2] = 0;
8856 HEAP32[i26 >> 2] = 0;
8857 HEAP32[i27 >> 2] = 0;
8858 if ((HEAP32[i28 >> 2] | 0) <= 0) {
8859 i4 = 48;
8860 break;
8861 }
8862 i49 = i47 + 8 | 0;
8863 HEAP32[i49 >> 2] = 0;
8864 i51 = HEAP32[i25 >> 2] | 0;
8865 HEAP32[(HEAP32[i29 >> 2] | 0) + (i51 << 2) >> 2] = i47;
8866 i51 = i51 + 1 | 0;
8867 HEAP32[i25 >> 2] = i51;
8868 if ((i51 | 0) >= (HEAP32[i28 >> 2] | 0)) {
8869 i4 = 50;
8870 break;
8871 }
8872 i50 = i48 + 8 | 0;
8873 HEAP32[i50 >> 2] = i51;
8874 i51 = HEAP32[i25 >> 2] | 0;
8875 HEAP32[(HEAP32[i29 >> 2] | 0) + (i51 << 2) >> 2] = i48;
8876 HEAP32[i25 >> 2] = i51 + 1;
8877 i51 = HEAP32[i26 >> 2] | 0;
8878 if ((i51 | 0) >= (HEAP32[i24 >> 2] | 0)) {
8879 i4 = 52;
8880 break;
8881 }
8882 HEAP32[i26 >> 2] = i51 + 1;
8883 HEAP32[(HEAP32[i23 >> 2] | 0) + (i51 << 2) >> 2] = i44;
8884 HEAP16[i45 >> 1] = HEAPU16[i45 >> 1] | 1;
8885 HEAP16[i46 >> 1] = HEAPU16[i46 >> 1] | 1;
8886 HEAP32[i43 >> 2] = HEAP32[i43 >> 2] | 1;
8887 HEAP32[i7 >> 2] = i47;
8888 HEAP32[i22 >> 2] = i48;
8889 i44 = 1;
8890 while (1) {
8891 L58 : do {
8892 if ((HEAP32[i47 >> 2] | 0) == 2 ? (i12 = HEAP32[i47 + 112 >> 2] | 0, (i12 | 0) != 0) : 0) {
8893 i47 = i47 + 4 | 0;
8894 i51 = i12;
8895 do {
8896 if ((HEAP32[i25 >> 2] | 0) == (HEAP32[i28 >> 2] | 0)) {
8897 break L58;
8898 }
8899 if ((HEAP32[i26 >> 2] | 0) == (HEAP32[i24 >> 2] | 0)) {
8900 break L58;
8901 }
8902 i52 = HEAP32[i51 + 4 >> 2] | 0;
8903 i53 = i52 + 4 | 0;
8904 do {
8905 if ((HEAP32[i53 >> 2] & 1 | 0) == 0) {
8906 i48 = HEAP32[i51 >> 2] | 0;
8907 if (((HEAP32[i48 >> 2] | 0) == 2 ? (HEAP16[i47 >> 1] & 8) == 0 : 0) ? (H EAP16[i48 + 4 >> 1] & 8) == 0 : 0) {
8908 break;
8909 }
8910 if ((HEAP8[(HEAP32[i52 + 48 >> 2] | 0) + 38 | 0] | 0) == 0 ? (HEAP8[(HEA P32[i52 + 52 >> 2] | 0) + 38 | 0] | 0) == 0 : 0) {
8911 i54 = i48 + 28 | 0;
8912 i43 = i14 + 0 | 0;
8913 i45 = i54 + 0 | 0;
8914 i46 = i43 + 36 | 0;
8915 do {
8916 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8917 i43 = i43 + 4 | 0;
8918 i45 = i45 + 4 | 0;
8919 } while ((i43 | 0) < (i46 | 0));
8920 i43 = i48 + 4 | 0;
8921 if ((HEAP16[i43 >> 1] & 1) == 0) {
8922 i45 = i48 + 60 | 0;
8923 d67 = +HEAPF32[i45 >> 2];
8924 if (!(d67 < 1.0)) {
8925 i4 = 67;
8926 break L11;
8927 }
8928 d70 = (d42 - d67) / (1.0 - d67);
8929 i65 = i48 + 36 | 0;
8930 d72 = 1.0 - d70;
8931 d71 = +HEAPF32[i65 >> 2] * d72 + d70 * +HEAPF32[i48 + 44 >> 2];
8932 d67 = d72 * +HEAPF32[i48 + 40 >> 2] + d70 * +HEAPF32[i48 + 48 >> 2];
8933 d69 = +d71;
8934 d68 = +d67;
8935 HEAPF32[i65 >> 2] = d69;
8936 HEAPF32[i65 + 4 >> 2] = d68;
8937 i65 = i48 + 52 | 0;
8938 i66 = i48 + 56 | 0;
8939 d70 = d72 * +HEAPF32[i65 >> 2] + d70 * +HEAPF32[i66 >> 2];
8940 HEAPF32[i65 >> 2] = d70;
8941 HEAPF32[i45 >> 2] = d42;
8942 i65 = i48 + 44 | 0;
8943 HEAPF32[i65 >> 2] = d69;
8944 HEAPF32[i65 + 4 >> 2] = d68;
8945 HEAPF32[i66 >> 2] = d70;
8946 d68 = +Math_sin(+d70);
8947 HEAPF32[i48 + 20 >> 2] = d68;
8948 d70 = +Math_cos(+d70);
8949 HEAPF32[i48 + 24 >> 2] = d70;
8950 d69 = +HEAPF32[i48 + 28 >> 2];
8951 d72 = +HEAPF32[i48 + 32 >> 2];
8952 d71 = +(d71 - (d70 * d69 - d68 * d72));
8953 d72 = +(d67 - (d68 * d69 + d70 * d72));
8954 i66 = i48 + 12 | 0;
8955 HEAPF32[i66 >> 2] = d71;
8956 HEAPF32[i66 + 4 >> 2] = d72;
8957 }
8958 __ZN9b2Contact6UpdateEP17b2ContactListener(i52, HEAP32[i13 >> 2] | 0);
8959 i45 = HEAP32[i53 >> 2] | 0;
8960 if ((i45 & 4 | 0) == 0) {
8961 i43 = i54 + 0 | 0;
8962 i45 = i14 + 0 | 0;
8963 i46 = i43 + 36 | 0;
8964 do {
8965 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8966 i43 = i43 + 4 | 0;
8967 i45 = i45 + 4 | 0;
8968 } while ((i43 | 0) < (i46 | 0));
8969 d70 = +HEAPF32[i48 + 56 >> 2];
8970 d68 = +Math_sin(+d70);
8971 HEAPF32[i48 + 20 >> 2] = d68;
8972 d70 = +Math_cos(+d70);
8973 HEAPF32[i48 + 24 >> 2] = d70;
8974 d69 = +HEAPF32[i48 + 28 >> 2];
8975 d72 = +HEAPF32[i48 + 32 >> 2];
8976 d71 = +(+HEAPF32[i48 + 44 >> 2] - (d70 * d69 - d68 * d72));
8977 d72 = +(+HEAPF32[i48 + 48 >> 2] - (d68 * d69 + d70 * d72));
8978 i66 = i48 + 12 | 0;
8979 HEAPF32[i66 >> 2] = d71;
8980 HEAPF32[i66 + 4 >> 2] = d72;
8981 break;
8982 }
8983 if ((i45 & 2 | 0) == 0) {
8984 i43 = i54 + 0 | 0;
8985 i45 = i14 + 0 | 0;
8986 i46 = i43 + 36 | 0;
8987 do {
8988 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8989 i43 = i43 + 4 | 0;
8990 i45 = i45 + 4 | 0;
8991 } while ((i43 | 0) < (i46 | 0));
8992 d70 = +HEAPF32[i48 + 56 >> 2];
8993 d68 = +Math_sin(+d70);
8994 HEAPF32[i48 + 20 >> 2] = d68;
8995 d70 = +Math_cos(+d70);
8996 HEAPF32[i48 + 24 >> 2] = d70;
8997 d69 = +HEAPF32[i48 + 28 >> 2];
8998 d72 = +HEAPF32[i48 + 32 >> 2];
8999 d71 = +(+HEAPF32[i48 + 44 >> 2] - (d70 * d69 - d68 * d72));
9000 d72 = +(+HEAPF32[i48 + 48 >> 2] - (d68 * d69 + d70 * d72));
9001 i66 = i48 + 12 | 0;
9002 HEAPF32[i66 >> 2] = d71;
9003 HEAPF32[i66 + 4 >> 2] = d72;
9004 break;
9005 }
9006 HEAP32[i53 >> 2] = i45 | 1;
9007 i45 = HEAP32[i26 >> 2] | 0;
9008 if ((i45 | 0) >= (HEAP32[i24 >> 2] | 0)) {
9009 i4 = 74;
9010 break L11;
9011 }
9012 HEAP32[i26 >> 2] = i45 + 1;
9013 HEAP32[(HEAP32[i23 >> 2] | 0) + (i45 << 2) >> 2] = i52;
9014 i45 = HEAPU16[i43 >> 1] | 0;
9015 if ((i45 & 1 | 0) == 0) {
9016 HEAP16[i43 >> 1] = i45 | 1;
9017 if ((HEAP32[i48 >> 2] | 0) != 0 ? (i45 & 2 | 0) == 0 : 0) {
9018 HEAP16[i43 >> 1] = i45 | 3;
9019 HEAPF32[i48 + 144 >> 2] = 0.0;
9020 }
9021 i43 = HEAP32[i25 >> 2] | 0;
9022 if ((i43 | 0) >= (HEAP32[i28 >> 2] | 0)) {
9023 i4 = 80;
9024 break L11;
9025 }
9026 HEAP32[i48 + 8 >> 2] = i43;
9027 i66 = HEAP32[i25 >> 2] | 0;
9028 HEAP32[(HEAP32[i29 >> 2] | 0) + (i66 << 2) >> 2] = i48;
9029 HEAP32[i25 >> 2] = i66 + 1;
9030 }
9031 }
9032 }
9033 } while (0);
9034 i51 = HEAP32[i51 + 12 >> 2] | 0;
9035 } while ((i51 | 0) != 0);
9036 }
9037 } while (0);
9038 if ((i44 | 0) >= 2) {
9039 break;
9040 }
9041 i47 = HEAP32[i7 + (i44 << 2) >> 2] | 0;
9042 i44 = i44 + 1 | 0;
9043 }
9044 d72 = (1.0 - d42) * +HEAPF32[i11 >> 2];
9045 HEAPF32[i9 >> 2] = d72;
9046 HEAPF32[i21 >> 2] = 1.0 / d72;
9047 HEAPF32[i20 >> 2] = 1.0;
9048 HEAP32[i19 >> 2] = 20;
9049 HEAP32[i17 >> 2] = HEAP32[i18 >> 2];
9050 HEAP8[i16] = 0;
9051 __ZN8b2Island8SolveTOIERK10b2TimeStepii(i3, i9, HEAP32[i49 >> 2] | 0, HEAP32[i 50 >> 2] | 0);
9052 i44 = HEAP32[i25 >> 2] | 0;
9053 if ((i44 | 0) > 0) {
9054 i43 = 0;
9055 do {
9056 i45 = HEAP32[(HEAP32[i29 >> 2] | 0) + (i43 << 2) >> 2] | 0;
9057 i66 = i45 + 4 | 0;
9058 HEAP16[i66 >> 1] = HEAP16[i66 >> 1] & 65534;
9059 if ((HEAP32[i45 >> 2] | 0) == 2) {
9060 __ZN6b2Body19SynchronizeFixturesEv(i45);
9061 i44 = HEAP32[i45 + 112 >> 2] | 0;
9062 if ((i44 | 0) != 0) {
9063 do {
9064 i66 = (HEAP32[i44 + 4 >> 2] | 0) + 4 | 0;
9065 HEAP32[i66 >> 2] = HEAP32[i66 >> 2] & -34;
9066 i44 = HEAP32[i44 + 12 >> 2] | 0;
9067 } while ((i44 | 0) != 0);
9068 }
9069 i44 = HEAP32[i25 >> 2] | 0;
9070 }
9071 i43 = i43 + 1 | 0;
9072 } while ((i43 | 0) < (i44 | 0));
9073 }
9074 __ZN16b2ContactManager15FindNewContactsEv(i10);
9075 if ((HEAP8[i39] | 0) != 0) {
9076 i4 = 92;
9077 break;
9078 }
9079 }
9080 if ((i4 | 0) == 16) {
9081 ___assert_fail(2288, 2184, 641, 2344);
9082 } else if ((i4 | 0) == 21) {
9083 ___assert_fail(2360, 2376, 723, 2400);
9084 } else if ((i4 | 0) == 25) {
9085 ___assert_fail(2360, 2376, 723, 2400);
9086 } else if ((i4 | 0) == 28) {
9087 ___assert_fail(2360, 2184, 676, 2344);
9088 } else if ((i4 | 0) == 36) {
9089 HEAP8[i2] = 1;
9090 __ZN8b2IslandD2Ev(i3);
9091 STACKTOP = i1;
9092 return;
9093 } else if ((i4 | 0) == 38) {
9094 ___assert_fail(2360, 2376, 723, 2400);
9095 } else if ((i4 | 0) == 40) {
9096 ___assert_fail(2360, 2376, 723, 2400);
9097 } else if ((i4 | 0) == 48) {
9098 ___assert_fail(2520, 2440, 54, 2472);
9099 } else if ((i4 | 0) == 50) {
9100 ___assert_fail(2520, 2440, 54, 2472);
9101 } else if ((i4 | 0) == 52) {
9102 ___assert_fail(2480, 2440, 62, 2472);
9103 } else if ((i4 | 0) == 67) {
9104 ___assert_fail(2360, 2376, 723, 2400);
9105 } else if ((i4 | 0) == 74) {
9106 ___assert_fail(2480, 2440, 62, 2472);
9107 } else if ((i4 | 0) == 80) {
9108 ___assert_fail(2520, 2440, 54, 2472);
9109 } else if ((i4 | 0) == 92) {
9110 HEAP8[i2] = 0;
9111 __ZN8b2IslandD2Ev(i3);
9112 STACKTOP = i1;
9113 return;
9114 }
9115 }
9116 function __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i8, i1) {
9117 i5 = i5 | 0;
9118 i8 = i8 | 0;
9119 i1 = i1 | 0;
9120 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;
9121 i3 = STACKTOP;
9122 STACKTOP = STACKTOP + 16 | 0;
9123 i2 = i3;
9124 L1 : while (1) {
9125 i7 = i8;
9126 i4 = i8 + -12 | 0;
9127 L3 : while (1) {
9128 i9 = i5;
9129 i11 = i7 - i9 | 0;
9130 switch ((i11 | 0) / 12 | 0 | 0) {
9131 case 4:
9132 {
9133 i6 = 14;
9134 break L1;
9135 }
9136 case 2:
9137 {
9138 i6 = 4;
9139 break L1;
9140 }
9141 case 3:
9142 {
9143 i6 = 6;
9144 break L1;
9145 }
9146 case 5:
9147 {
9148 i6 = 15;
9149 break L1;
9150 }
9151 case 1:
9152 case 0:
9153 {
9154 i6 = 67;
9155 break L1;
9156 }
9157 default:
9158 {}
9159 }
9160 if ((i11 | 0) < 372) {
9161 i6 = 21;
9162 break L1;
9163 }
9164 i12 = (i11 | 0) / 24 | 0;
9165 i10 = i5 + (i12 * 12 | 0) | 0;
9166 do {
9167 if ((i11 | 0) > 11988) {
9168 i14 = (i11 | 0) / 48 | 0;
9169 i11 = i5 + (i14 * 12 | 0) | 0;
9170 i14 = i5 + ((i14 + i12 | 0) * 12 | 0) | 0;
9171 i12 = __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i11, i1 0, i14, i1) | 0;
9172 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i14) | 0) {
9173 HEAP32[i2 + 0 >> 2] = HEAP32[i14 + 0 >> 2];
9174 HEAP32[i2 + 4 >> 2] = HEAP32[i14 + 4 >> 2];
9175 HEAP32[i2 + 8 >> 2] = HEAP32[i14 + 8 >> 2];
9176 HEAP32[i14 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9177 HEAP32[i14 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9178 HEAP32[i14 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9179 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9180 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9181 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9182 i13 = i12 + 1 | 0;
9183 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i14, i10) | 0) {
9184 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9185 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9186 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9187 HEAP32[i10 + 0 >> 2] = HEAP32[i14 + 0 >> 2];
9188 HEAP32[i10 + 4 >> 2] = HEAP32[i14 + 4 >> 2];
9189 HEAP32[i10 + 8 >> 2] = HEAP32[i14 + 8 >> 2];
9190 HEAP32[i14 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9191 HEAP32[i14 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9192 HEAP32[i14 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9193 i13 = i12 + 2 | 0;
9194 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i11) | 0) {
9195 HEAP32[i2 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
9196 HEAP32[i2 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
9197 HEAP32[i2 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
9198 HEAP32[i11 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9199 HEAP32[i11 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9200 HEAP32[i11 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9201 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9202 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9203 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9204 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i11, i5) | 0) {
9205 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9206 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9207 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9208 HEAP32[i5 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
9209 HEAP32[i5 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
9210 HEAP32[i5 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
9211 HEAP32[i11 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9212 HEAP32[i11 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9213 HEAP32[i11 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9214 i12 = i12 + 4 | 0;
9215 } else {
9216 i12 = i12 + 3 | 0;
9217 }
9218 } else {
9219 i12 = i13;
9220 }
9221 } else {
9222 i12 = i13;
9223 }
9224 }
9225 } else {
9226 i15 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i5) | 0;
9227 i11 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i10) | 0;
9228 if (!i15) {
9229 if (!i11) {
9230 i12 = 0;
9231 break;
9232 }
9233 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9234 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9235 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9236 HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9237 HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9238 HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9239 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9240 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9241 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9242 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i5) | 0)) {
9243 i12 = 1;
9244 break;
9245 }
9246 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9247 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9248 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9249 HEAP32[i5 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9250 HEAP32[i5 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9251 HEAP32[i5 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9252 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9253 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9254 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9255 i12 = 2;
9256 break;
9257 }
9258 if (i11) {
9259 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9260 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9261 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9262 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9263 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9264 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9265 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9266 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9267 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9268 i12 = 1;
9269 break;
9270 }
9271 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9272 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9273 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9274 HEAP32[i5 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9275 HEAP32[i5 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9276 HEAP32[i5 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9277 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9278 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9279 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9280 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i10) | 0) {
9281 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9282 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9283 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9284 HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9285 HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9286 HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9287 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9288 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9289 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9290 i12 = 2;
9291 } else {
9292 i12 = 1;
9293 }
9294 }
9295 } while (0);
9296 do {
9297 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) {
9298 i13 = i4;
9299 } else {
9300 i13 = i4;
9301 while (1) {
9302 i13 = i13 + -12 | 0;
9303 if ((i5 | 0) == (i13 | 0)) {
9304 break;
9305 }
9306 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i13, i10) | 0) {
9307 i6 = 50;
9308 break;
9309 }
9310 }
9311 if ((i6 | 0) == 50) {
9312 i6 = 0;
9313 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9314 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9315 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9316 HEAP32[i5 + 0 >> 2] = HEAP32[i13 + 0 >> 2];
9317 HEAP32[i5 + 4 >> 2] = HEAP32[i13 + 4 >> 2];
9318 HEAP32[i5 + 8 >> 2] = HEAP32[i13 + 8 >> 2];
9319 HEAP32[i13 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9320 HEAP32[i13 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9321 HEAP32[i13 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9322 i12 = i12 + 1 | 0;
9323 break;
9324 }
9325 i10 = i5 + 12 | 0;
9326 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i4) | 0)) {
9327 if ((i10 | 0) == (i4 | 0)) {
9328 i6 = 67;
9329 break L1;
9330 }
9331 while (1) {
9332 i9 = i10 + 12 | 0;
9333 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) {
9334 break;
9335 }
9336 if ((i9 | 0) == (i4 | 0)) {
9337 i6 = 67;
9338 break L1;
9339 } else {
9340 i10 = i9;
9341 }
9342 }
9343 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9344 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9345 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9346 HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9347 HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9348 HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9349 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9350 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9351 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9352 i10 = i9;
9353 }
9354 if ((i10 | 0) == (i4 | 0)) {
9355 i6 = 67;
9356 break L1;
9357 } else {
9358 i9 = i4;
9359 }
9360 while (1) {
9361 while (1) {
9362 i11 = i10 + 12 | 0;
9363 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) {
9364 break;
9365 } else {
9366 i10 = i11;
9367 }
9368 }
9369 do {
9370 i9 = i9 + -12 | 0;
9371 } while (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i9) | 0);
9372 if (!(i10 >>> 0 < i9 >>> 0)) {
9373 i5 = i10;
9374 continue L3;
9375 }
9376 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9377 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9378 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9379 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
9380 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
9381 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
9382 HEAP32[i9 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9383 HEAP32[i9 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9384 HEAP32[i9 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9385 i10 = i11;
9386 }
9387 }
9388 } while (0);
9389 i11 = i5 + 12 | 0;
9390 L47 : do {
9391 if (i11 >>> 0 < i13 >>> 0) {
9392 while (1) {
9393 i15 = i11;
9394 while (1) {
9395 i11 = i15 + 12 | 0;
9396 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i15, i10) | 0) {
9397 i15 = i11;
9398 } else {
9399 i14 = i13;
9400 break;
9401 }
9402 }
9403 do {
9404 i14 = i14 + -12 | 0;
9405 } while (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i14, i10) | 0));
9406 if (i15 >>> 0 > i14 >>> 0) {
9407 i11 = i15;
9408 break L47;
9409 }
9410 HEAP32[i2 + 0 >> 2] = HEAP32[i15 + 0 >> 2];
9411 HEAP32[i2 + 4 >> 2] = HEAP32[i15 + 4 >> 2];
9412 HEAP32[i2 + 8 >> 2] = HEAP32[i15 + 8 >> 2];
9413 HEAP32[i15 + 0 >> 2] = HEAP32[i14 + 0 >> 2];
9414 HEAP32[i15 + 4 >> 2] = HEAP32[i14 + 4 >> 2];
9415 HEAP32[i15 + 8 >> 2] = HEAP32[i14 + 8 >> 2];
9416 HEAP32[i14 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9417 HEAP32[i14 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9418 HEAP32[i14 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9419 i13 = i14;
9420 i10 = (i10 | 0) == (i15 | 0) ? i14 : i10;
9421 i12 = i12 + 1 | 0;
9422 }
9423 }
9424 } while (0);
9425 if ((i11 | 0) != (i10 | 0) ? FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i11 ) | 0 : 0) {
9426 HEAP32[i2 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
9427 HEAP32[i2 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
9428 HEAP32[i2 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
9429 HEAP32[i11 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9430 HEAP32[i11 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9431 HEAP32[i11 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9432 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9433 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9434 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9435 i12 = i12 + 1 | 0;
9436 }
9437 if ((i12 | 0) == 0) {
9438 i12 = __ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_ T_(i5, i11, i1) | 0;
9439 i10 = i11 + 12 | 0;
9440 if (__ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_ (i10, i8, i1) | 0) {
9441 i6 = 62;
9442 break;
9443 }
9444 if (i12) {
9445 i5 = i10;
9446 continue;
9447 }
9448 }
9449 i15 = i11;
9450 if ((i15 - i9 | 0) >= (i7 - i15 | 0)) {
9451 i6 = 66;
9452 break;
9453 }
9454 __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i11, i1);
9455 i5 = i11 + 12 | 0;
9456 }
9457 if ((i6 | 0) == 62) {
9458 i6 = 0;
9459 if (i12) {
9460 i6 = 67;
9461 break;
9462 } else {
9463 i8 = i11;
9464 continue;
9465 }
9466 } else if ((i6 | 0) == 66) {
9467 i6 = 0;
9468 __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i11 + 12 | 0, i8, i1);
9469 i8 = i11;
9470 continue;
9471 }
9472 }
9473 if ((i6 | 0) == 4) {
9474 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i5) | 0)) {
9475 STACKTOP = i3;
9476 return;
9477 }
9478 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9479 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9480 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9481 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9482 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9483 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9484 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9485 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9486 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9487 STACKTOP = i3;
9488 return;
9489 } else if ((i6 | 0) == 6) {
9490 i6 = i5 + 12 | 0;
9491 i15 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0;
9492 i7 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i6) | 0;
9493 if (!i15) {
9494 if (!i7) {
9495 STACKTOP = i3;
9496 return;
9497 }
9498 HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9499 HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9500 HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9501 HEAP32[i6 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9502 HEAP32[i6 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9503 HEAP32[i6 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9504 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9505 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9506 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9507 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0)) {
9508 STACKTOP = i3;
9509 return;
9510 }
9511 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9512 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9513 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9514 HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9515 HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9516 HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9517 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9518 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9519 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9520 STACKTOP = i3;
9521 return;
9522 }
9523 if (i7) {
9524 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9525 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9526 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9527 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9528 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9529 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9530 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9531 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9532 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9533 STACKTOP = i3;
9534 return;
9535 }
9536 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9537 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9538 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9539 HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9540 HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9541 HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9542 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9543 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9544 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9545 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i6) | 0)) {
9546 STACKTOP = i3;
9547 return;
9548 }
9549 HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9550 HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9551 HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9552 HEAP32[i6 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9553 HEAP32[i6 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9554 HEAP32[i6 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9555 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9556 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9557 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9558 STACKTOP = i3;
9559 return;
9560 } else if ((i6 | 0) == 14) {
9561 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i5 + 12 | 0, i5 + 24 | 0, i4, i1) | 0;
9562 STACKTOP = i3;
9563 return;
9564 } else if ((i6 | 0) == 15) {
9565 i6 = i5 + 12 | 0;
9566 i7 = i5 + 24 | 0;
9567 i8 = i5 + 36 | 0;
9568 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i6, i7, i8, i1) | 0;
9569 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i8) | 0)) {
9570 STACKTOP = i3;
9571 return;
9572 }
9573 HEAP32[i2 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
9574 HEAP32[i2 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
9575 HEAP32[i2 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
9576 HEAP32[i8 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9577 HEAP32[i8 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9578 HEAP32[i8 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9579 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9580 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9581 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9582 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i8, i7) | 0)) {
9583 STACKTOP = i3;
9584 return;
9585 }
9586 HEAP32[i2 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
9587 HEAP32[i2 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
9588 HEAP32[i2 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
9589 HEAP32[i7 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
9590 HEAP32[i7 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
9591 HEAP32[i7 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
9592 HEAP32[i8 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9593 HEAP32[i8 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9594 HEAP32[i8 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9595 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0)) {
9596 STACKTOP = i3;
9597 return;
9598 }
9599 HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9600 HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9601 HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9602 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
9603 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
9604 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
9605 HEAP32[i7 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9606 HEAP32[i7 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9607 HEAP32[i7 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9608 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0)) {
9609 STACKTOP = i3;
9610 return;
9611 }
9612 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9613 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9614 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9615 HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9616 HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9617 HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9618 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9619 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9620 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9621 STACKTOP = i3;
9622 return;
9623 } else if ((i6 | 0) == 21) {
9624 __ZNSt3__118__insertion_sort_3IRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i8, i1);
9625 STACKTOP = i3;
9626 return;
9627 } else if ((i6 | 0) == 67) {
9628 STACKTOP = i3;
9629 return;
9630 }
9631 }
9632 function _free(i7) {
9633 i7 = i7 | 0;
9634 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i1 1 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i 20 = 0, i21 = 0;
9635 i1 = STACKTOP;
9636 if ((i7 | 0) == 0) {
9637 STACKTOP = i1;
9638 return;
9639 }
9640 i15 = i7 + -8 | 0;
9641 i16 = HEAP32[7176 >> 2] | 0;
9642 if (i15 >>> 0 < i16 >>> 0) {
9643 _abort();
9644 }
9645 i13 = HEAP32[i7 + -4 >> 2] | 0;
9646 i12 = i13 & 3;
9647 if ((i12 | 0) == 1) {
9648 _abort();
9649 }
9650 i8 = i13 & -8;
9651 i6 = i7 + (i8 + -8) | 0;
9652 do {
9653 if ((i13 & 1 | 0) == 0) {
9654 i19 = HEAP32[i15 >> 2] | 0;
9655 if ((i12 | 0) == 0) {
9656 STACKTOP = i1;
9657 return;
9658 }
9659 i15 = -8 - i19 | 0;
9660 i13 = i7 + i15 | 0;
9661 i12 = i19 + i8 | 0;
9662 if (i13 >>> 0 < i16 >>> 0) {
9663 _abort();
9664 }
9665 if ((i13 | 0) == (HEAP32[7180 >> 2] | 0)) {
9666 i2 = i7 + (i8 + -4) | 0;
9667 if ((HEAP32[i2 >> 2] & 3 | 0) != 3) {
9668 i2 = i13;
9669 i11 = i12;
9670 break;
9671 }
9672 HEAP32[7168 >> 2] = i12;
9673 HEAP32[i2 >> 2] = HEAP32[i2 >> 2] & -2;
9674 HEAP32[i7 + (i15 + 4) >> 2] = i12 | 1;
9675 HEAP32[i6 >> 2] = i12;
9676 STACKTOP = i1;
9677 return;
9678 }
9679 i18 = i19 >>> 3;
9680 if (i19 >>> 0 < 256) {
9681 i2 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
9682 i11 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
9683 i14 = 7200 + (i18 << 1 << 2) | 0;
9684 if ((i2 | 0) != (i14 | 0)) {
9685 if (i2 >>> 0 < i16 >>> 0) {
9686 _abort();
9687 }
9688 if ((HEAP32[i2 + 12 >> 2] | 0) != (i13 | 0)) {
9689 _abort();
9690 }
9691 }
9692 if ((i11 | 0) == (i2 | 0)) {
9693 HEAP32[1790] = HEAP32[1790] & ~(1 << i18);
9694 i2 = i13;
9695 i11 = i12;
9696 break;
9697 }
9698 if ((i11 | 0) != (i14 | 0)) {
9699 if (i11 >>> 0 < i16 >>> 0) {
9700 _abort();
9701 }
9702 i14 = i11 + 8 | 0;
9703 if ((HEAP32[i14 >> 2] | 0) == (i13 | 0)) {
9704 i17 = i14;
9705 } else {
9706 _abort();
9707 }
9708 } else {
9709 i17 = i11 + 8 | 0;
9710 }
9711 HEAP32[i2 + 12 >> 2] = i11;
9712 HEAP32[i17 >> 2] = i2;
9713 i2 = i13;
9714 i11 = i12;
9715 break;
9716 }
9717 i17 = HEAP32[i7 + (i15 + 24) >> 2] | 0;
9718 i18 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
9719 do {
9720 if ((i18 | 0) == (i13 | 0)) {
9721 i19 = i7 + (i15 + 20) | 0;
9722 i18 = HEAP32[i19 >> 2] | 0;
9723 if ((i18 | 0) == 0) {
9724 i19 = i7 + (i15 + 16) | 0;
9725 i18 = HEAP32[i19 >> 2] | 0;
9726 if ((i18 | 0) == 0) {
9727 i14 = 0;
9728 break;
9729 }
9730 }
9731 while (1) {
9732 i21 = i18 + 20 | 0;
9733 i20 = HEAP32[i21 >> 2] | 0;
9734 if ((i20 | 0) != 0) {
9735 i18 = i20;
9736 i19 = i21;
9737 continue;
9738 }
9739 i20 = i18 + 16 | 0;
9740 i21 = HEAP32[i20 >> 2] | 0;
9741 if ((i21 | 0) == 0) {
9742 break;
9743 } else {
9744 i18 = i21;
9745 i19 = i20;
9746 }
9747 }
9748 if (i19 >>> 0 < i16 >>> 0) {
9749 _abort();
9750 } else {
9751 HEAP32[i19 >> 2] = 0;
9752 i14 = i18;
9753 break;
9754 }
9755 } else {
9756 i19 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
9757 if (i19 >>> 0 < i16 >>> 0) {
9758 _abort();
9759 }
9760 i16 = i19 + 12 | 0;
9761 if ((HEAP32[i16 >> 2] | 0) != (i13 | 0)) {
9762 _abort();
9763 }
9764 i20 = i18 + 8 | 0;
9765 if ((HEAP32[i20 >> 2] | 0) == (i13 | 0)) {
9766 HEAP32[i16 >> 2] = i18;
9767 HEAP32[i20 >> 2] = i19;
9768 i14 = i18;
9769 break;
9770 } else {
9771 _abort();
9772 }
9773 }
9774 } while (0);
9775 if ((i17 | 0) != 0) {
9776 i18 = HEAP32[i7 + (i15 + 28) >> 2] | 0;
9777 i16 = 7464 + (i18 << 2) | 0;
9778 if ((i13 | 0) == (HEAP32[i16 >> 2] | 0)) {
9779 HEAP32[i16 >> 2] = i14;
9780 if ((i14 | 0) == 0) {
9781 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i18);
9782 i2 = i13;
9783 i11 = i12;
9784 break;
9785 }
9786 } else {
9787 if (i17 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9788 _abort();
9789 }
9790 i16 = i17 + 16 | 0;
9791 if ((HEAP32[i16 >> 2] | 0) == (i13 | 0)) {
9792 HEAP32[i16 >> 2] = i14;
9793 } else {
9794 HEAP32[i17 + 20 >> 2] = i14;
9795 }
9796 if ((i14 | 0) == 0) {
9797 i2 = i13;
9798 i11 = i12;
9799 break;
9800 }
9801 }
9802 if (i14 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9803 _abort();
9804 }
9805 HEAP32[i14 + 24 >> 2] = i17;
9806 i16 = HEAP32[i7 + (i15 + 16) >> 2] | 0;
9807 do {
9808 if ((i16 | 0) != 0) {
9809 if (i16 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9810 _abort();
9811 } else {
9812 HEAP32[i14 + 16 >> 2] = i16;
9813 HEAP32[i16 + 24 >> 2] = i14;
9814 break;
9815 }
9816 }
9817 } while (0);
9818 i15 = HEAP32[i7 + (i15 + 20) >> 2] | 0;
9819 if ((i15 | 0) != 0) {
9820 if (i15 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9821 _abort();
9822 } else {
9823 HEAP32[i14 + 20 >> 2] = i15;
9824 HEAP32[i15 + 24 >> 2] = i14;
9825 i2 = i13;
9826 i11 = i12;
9827 break;
9828 }
9829 } else {
9830 i2 = i13;
9831 i11 = i12;
9832 }
9833 } else {
9834 i2 = i13;
9835 i11 = i12;
9836 }
9837 } else {
9838 i2 = i15;
9839 i11 = i8;
9840 }
9841 } while (0);
9842 if (!(i2 >>> 0 < i6 >>> 0)) {
9843 _abort();
9844 }
9845 i12 = i7 + (i8 + -4) | 0;
9846 i13 = HEAP32[i12 >> 2] | 0;
9847 if ((i13 & 1 | 0) == 0) {
9848 _abort();
9849 }
9850 if ((i13 & 2 | 0) == 0) {
9851 if ((i6 | 0) == (HEAP32[7184 >> 2] | 0)) {
9852 i21 = (HEAP32[7172 >> 2] | 0) + i11 | 0;
9853 HEAP32[7172 >> 2] = i21;
9854 HEAP32[7184 >> 2] = i2;
9855 HEAP32[i2 + 4 >> 2] = i21 | 1;
9856 if ((i2 | 0) != (HEAP32[7180 >> 2] | 0)) {
9857 STACKTOP = i1;
9858 return;
9859 }
9860 HEAP32[7180 >> 2] = 0;
9861 HEAP32[7168 >> 2] = 0;
9862 STACKTOP = i1;
9863 return;
9864 }
9865 if ((i6 | 0) == (HEAP32[7180 >> 2] | 0)) {
9866 i21 = (HEAP32[7168 >> 2] | 0) + i11 | 0;
9867 HEAP32[7168 >> 2] = i21;
9868 HEAP32[7180 >> 2] = i2;
9869 HEAP32[i2 + 4 >> 2] = i21 | 1;
9870 HEAP32[i2 + i21 >> 2] = i21;
9871 STACKTOP = i1;
9872 return;
9873 }
9874 i11 = (i13 & -8) + i11 | 0;
9875 i12 = i13 >>> 3;
9876 do {
9877 if (!(i13 >>> 0 < 256)) {
9878 i10 = HEAP32[i7 + (i8 + 16) >> 2] | 0;
9879 i15 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
9880 do {
9881 if ((i15 | 0) == (i6 | 0)) {
9882 i13 = i7 + (i8 + 12) | 0;
9883 i12 = HEAP32[i13 >> 2] | 0;
9884 if ((i12 | 0) == 0) {
9885 i13 = i7 + (i8 + 8) | 0;
9886 i12 = HEAP32[i13 >> 2] | 0;
9887 if ((i12 | 0) == 0) {
9888 i9 = 0;
9889 break;
9890 }
9891 }
9892 while (1) {
9893 i14 = i12 + 20 | 0;
9894 i15 = HEAP32[i14 >> 2] | 0;
9895 if ((i15 | 0) != 0) {
9896 i12 = i15;
9897 i13 = i14;
9898 continue;
9899 }
9900 i14 = i12 + 16 | 0;
9901 i15 = HEAP32[i14 >> 2] | 0;
9902 if ((i15 | 0) == 0) {
9903 break;
9904 } else {
9905 i12 = i15;
9906 i13 = i14;
9907 }
9908 }
9909 if (i13 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9910 _abort();
9911 } else {
9912 HEAP32[i13 >> 2] = 0;
9913 i9 = i12;
9914 break;
9915 }
9916 } else {
9917 i13 = HEAP32[i7 + i8 >> 2] | 0;
9918 if (i13 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9919 _abort();
9920 }
9921 i14 = i13 + 12 | 0;
9922 if ((HEAP32[i14 >> 2] | 0) != (i6 | 0)) {
9923 _abort();
9924 }
9925 i12 = i15 + 8 | 0;
9926 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
9927 HEAP32[i14 >> 2] = i15;
9928 HEAP32[i12 >> 2] = i13;
9929 i9 = i15;
9930 break;
9931 } else {
9932 _abort();
9933 }
9934 }
9935 } while (0);
9936 if ((i10 | 0) != 0) {
9937 i12 = HEAP32[i7 + (i8 + 20) >> 2] | 0;
9938 i13 = 7464 + (i12 << 2) | 0;
9939 if ((i6 | 0) == (HEAP32[i13 >> 2] | 0)) {
9940 HEAP32[i13 >> 2] = i9;
9941 if ((i9 | 0) == 0) {
9942 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i12);
9943 break;
9944 }
9945 } else {
9946 if (i10 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9947 _abort();
9948 }
9949 i12 = i10 + 16 | 0;
9950 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
9951 HEAP32[i12 >> 2] = i9;
9952 } else {
9953 HEAP32[i10 + 20 >> 2] = i9;
9954 }
9955 if ((i9 | 0) == 0) {
9956 break;
9957 }
9958 }
9959 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9960 _abort();
9961 }
9962 HEAP32[i9 + 24 >> 2] = i10;
9963 i6 = HEAP32[i7 + (i8 + 8) >> 2] | 0;
9964 do {
9965 if ((i6 | 0) != 0) {
9966 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9967 _abort();
9968 } else {
9969 HEAP32[i9 + 16 >> 2] = i6;
9970 HEAP32[i6 + 24 >> 2] = i9;
9971 break;
9972 }
9973 }
9974 } while (0);
9975 i6 = HEAP32[i7 + (i8 + 12) >> 2] | 0;
9976 if ((i6 | 0) != 0) {
9977 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9978 _abort();
9979 } else {
9980 HEAP32[i9 + 20 >> 2] = i6;
9981 HEAP32[i6 + 24 >> 2] = i9;
9982 break;
9983 }
9984 }
9985 }
9986 } else {
9987 i9 = HEAP32[i7 + i8 >> 2] | 0;
9988 i7 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
9989 i8 = 7200 + (i12 << 1 << 2) | 0;
9990 if ((i9 | 0) != (i8 | 0)) {
9991 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9992 _abort();
9993 }
9994 if ((HEAP32[i9 + 12 >> 2] | 0) != (i6 | 0)) {
9995 _abort();
9996 }
9997 }
9998 if ((i7 | 0) == (i9 | 0)) {
9999 HEAP32[1790] = HEAP32[1790] & ~(1 << i12);
10000 break;
10001 }
10002 if ((i7 | 0) != (i8 | 0)) {
10003 if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
10004 _abort();
10005 }
10006 i8 = i7 + 8 | 0;
10007 if ((HEAP32[i8 >> 2] | 0) == (i6 | 0)) {
10008 i10 = i8;
10009 } else {
10010 _abort();
10011 }
10012 } else {
10013 i10 = i7 + 8 | 0;
10014 }
10015 HEAP32[i9 + 12 >> 2] = i7;
10016 HEAP32[i10 >> 2] = i9;
10017 }
10018 } while (0);
10019 HEAP32[i2 + 4 >> 2] = i11 | 1;
10020 HEAP32[i2 + i11 >> 2] = i11;
10021 if ((i2 | 0) == (HEAP32[7180 >> 2] | 0)) {
10022 HEAP32[7168 >> 2] = i11;
10023 STACKTOP = i1;
10024 return;
10025 }
10026 } else {
10027 HEAP32[i12 >> 2] = i13 & -2;
10028 HEAP32[i2 + 4 >> 2] = i11 | 1;
10029 HEAP32[i2 + i11 >> 2] = i11;
10030 }
10031 i6 = i11 >>> 3;
10032 if (i11 >>> 0 < 256) {
10033 i7 = i6 << 1;
10034 i3 = 7200 + (i7 << 2) | 0;
10035 i8 = HEAP32[1790] | 0;
10036 i6 = 1 << i6;
10037 if ((i8 & i6 | 0) != 0) {
10038 i6 = 7200 + (i7 + 2 << 2) | 0;
10039 i7 = HEAP32[i6 >> 2] | 0;
10040 if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
10041 _abort();
10042 } else {
10043 i4 = i6;
10044 i5 = i7;
10045 }
10046 } else {
10047 HEAP32[1790] = i8 | i6;
10048 i4 = 7200 + (i7 + 2 << 2) | 0;
10049 i5 = i3;
10050 }
10051 HEAP32[i4 >> 2] = i2;
10052 HEAP32[i5 + 12 >> 2] = i2;
10053 HEAP32[i2 + 8 >> 2] = i5;
10054 HEAP32[i2 + 12 >> 2] = i3;
10055 STACKTOP = i1;
10056 return;
10057 }
10058 i4 = i11 >>> 8;
10059 if ((i4 | 0) != 0) {
10060 if (i11 >>> 0 > 16777215) {
10061 i4 = 31;
10062 } else {
10063 i20 = (i4 + 1048320 | 0) >>> 16 & 8;
10064 i21 = i4 << i20;
10065 i19 = (i21 + 520192 | 0) >>> 16 & 4;
10066 i21 = i21 << i19;
10067 i4 = (i21 + 245760 | 0) >>> 16 & 2;
10068 i4 = 14 - (i19 | i20 | i4) + (i21 << i4 >>> 15) | 0;
10069 i4 = i11 >>> (i4 + 7 | 0) & 1 | i4 << 1;
10070 }
10071 } else {
10072 i4 = 0;
10073 }
10074 i5 = 7464 + (i4 << 2) | 0;
10075 HEAP32[i2 + 28 >> 2] = i4;
10076 HEAP32[i2 + 20 >> 2] = 0;
10077 HEAP32[i2 + 16 >> 2] = 0;
10078 i7 = HEAP32[7164 >> 2] | 0;
10079 i6 = 1 << i4;
10080 L199 : do {
10081 if ((i7 & i6 | 0) != 0) {
10082 i5 = HEAP32[i5 >> 2] | 0;
10083 if ((i4 | 0) == 31) {
10084 i4 = 0;
10085 } else {
10086 i4 = 25 - (i4 >>> 1) | 0;
10087 }
10088 L204 : do {
10089 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) != (i11 | 0)) {
10090 i4 = i11 << i4;
10091 i7 = i5;
10092 while (1) {
10093 i6 = i7 + (i4 >>> 31 << 2) + 16 | 0;
10094 i5 = HEAP32[i6 >> 2] | 0;
10095 if ((i5 | 0) == 0) {
10096 break;
10097 }
10098 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i11 | 0)) {
10099 i3 = i5;
10100 break L204;
10101 } else {
10102 i4 = i4 << 1;
10103 i7 = i5;
10104 }
10105 }
10106 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
10107 _abort();
10108 } else {
10109 HEAP32[i6 >> 2] = i2;
10110 HEAP32[i2 + 24 >> 2] = i7;
10111 HEAP32[i2 + 12 >> 2] = i2;
10112 HEAP32[i2 + 8 >> 2] = i2;
10113 break L199;
10114 }
10115 } else {
10116 i3 = i5;
10117 }
10118 } while (0);
10119 i5 = i3 + 8 | 0;
10120 i4 = HEAP32[i5 >> 2] | 0;
10121 i6 = HEAP32[7176 >> 2] | 0;
10122 if (i3 >>> 0 < i6 >>> 0) {
10123 _abort();
10124 }
10125 if (i4 >>> 0 < i6 >>> 0) {
10126 _abort();
10127 } else {
10128 HEAP32[i4 + 12 >> 2] = i2;
10129 HEAP32[i5 >> 2] = i2;
10130 HEAP32[i2 + 8 >> 2] = i4;
10131 HEAP32[i2 + 12 >> 2] = i3;
10132 HEAP32[i2 + 24 >> 2] = 0;
10133 break;
10134 }
10135 } else {
10136 HEAP32[7164 >> 2] = i7 | i6;
10137 HEAP32[i5 >> 2] = i2;
10138 HEAP32[i2 + 24 >> 2] = i5;
10139 HEAP32[i2 + 12 >> 2] = i2;
10140 HEAP32[i2 + 8 >> 2] = i2;
10141 }
10142 } while (0);
10143 i21 = (HEAP32[7192 >> 2] | 0) + -1 | 0;
10144 HEAP32[7192 >> 2] = i21;
10145 if ((i21 | 0) == 0) {
10146 i2 = 7616 | 0;
10147 } else {
10148 STACKTOP = i1;
10149 return;
10150 }
10151 while (1) {
10152 i2 = HEAP32[i2 >> 2] | 0;
10153 if ((i2 | 0) == 0) {
10154 break;
10155 } else {
10156 i2 = i2 + 8 | 0;
10157 }
10158 }
10159 HEAP32[7192 >> 2] = -1;
10160 STACKTOP = i1;
10161 return;
10162 }
10163 function __ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T _(i3, i4, i2) {
10164 i3 = i3 | 0;
10165 i4 = i4 | 0;
10166 i2 = i2 | 0;
10167 var i1 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
10168 i1 = STACKTOP;
10169 STACKTOP = STACKTOP + 32 | 0;
10170 i7 = i1 + 12 | 0;
10171 i6 = i1;
10172 switch ((i4 - i3 | 0) / 12 | 0 | 0) {
10173 case 5:
10174 {
10175 i6 = i3 + 12 | 0;
10176 i8 = i3 + 24 | 0;
10177 i5 = i3 + 36 | 0;
10178 i4 = i4 + -12 | 0;
10179 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i3, i6, i8, i5, i2) | 0;
10180 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0)) {
10181 i10 = 1;
10182 STACKTOP = i1;
10183 return i10 | 0;
10184 }
10185 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10186 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10187 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10188 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10189 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10190 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10191 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10192 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10193 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10194 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i8) | 0)) {
10195 i10 = 1;
10196 STACKTOP = i1;
10197 return i10 | 0;
10198 }
10199 HEAP32[i7 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
10200 HEAP32[i7 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
10201 HEAP32[i7 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
10202 HEAP32[i8 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10203 HEAP32[i8 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10204 HEAP32[i8 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10205 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10206 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10207 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10208 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i6) | 0)) {
10209 i10 = 1;
10210 STACKTOP = i1;
10211 return i10 | 0;
10212 }
10213 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
10214 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
10215 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
10216 HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
10217 HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
10218 HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
10219 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10220 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10221 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10222 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i3) | 0)) {
10223 i10 = 1;
10224 STACKTOP = i1;
10225 return i10 | 0;
10226 }
10227 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10228 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10229 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10230 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
10231 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
10232 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
10233 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10234 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10235 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10236 i10 = 1;
10237 STACKTOP = i1;
10238 return i10 | 0;
10239 }
10240 case 4:
10241 {
10242 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i3, i3 + 12 | 0, i3 + 24 | 0, i4 + -12 | 0, i2) | 0;
10243 i10 = 1;
10244 STACKTOP = i1;
10245 return i10 | 0;
10246 }
10247 case 3:
10248 {
10249 i5 = i3 + 12 | 0;
10250 i4 = i4 + -12 | 0;
10251 i10 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i3) | 0;
10252 i6 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0;
10253 if (!i10) {
10254 if (!i6) {
10255 i10 = 1;
10256 STACKTOP = i1;
10257 return i10 | 0;
10258 }
10259 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10260 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10261 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10262 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10263 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10264 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10265 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10266 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10267 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10268 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i3) | 0)) {
10269 i10 = 1;
10270 STACKTOP = i1;
10271 return i10 | 0;
10272 }
10273 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10274 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10275 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10276 HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10277 HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10278 HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10279 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10280 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10281 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10282 i10 = 1;
10283 STACKTOP = i1;
10284 return i10 | 0;
10285 }
10286 if (i6) {
10287 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10288 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10289 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10290 HEAP32[i3 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10291 HEAP32[i3 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10292 HEAP32[i3 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10293 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10294 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10295 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10296 i10 = 1;
10297 STACKTOP = i1;
10298 return i10 | 0;
10299 }
10300 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10301 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10302 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10303 HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10304 HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10305 HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10306 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10307 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10308 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10309 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0)) {
10310 i10 = 1;
10311 STACKTOP = i1;
10312 return i10 | 0;
10313 }
10314 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10315 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10316 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10317 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10318 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10319 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10320 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10321 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10322 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10323 i10 = 1;
10324 STACKTOP = i1;
10325 return i10 | 0;
10326 }
10327 case 2:
10328 {
10329 i4 = i4 + -12 | 0;
10330 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i3) | 0)) {
10331 i10 = 1;
10332 STACKTOP = i1;
10333 return i10 | 0;
10334 }
10335 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10336 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10337 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10338 HEAP32[i3 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10339 HEAP32[i3 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10340 HEAP32[i3 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10341 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10342 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10343 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10344 i10 = 1;
10345 STACKTOP = i1;
10346 return i10 | 0;
10347 }
10348 case 1:
10349 case 0:
10350 {
10351 i10 = 1;
10352 STACKTOP = i1;
10353 return i10 | 0;
10354 }
10355 default:
10356 {
10357 i9 = i3 + 24 | 0;
10358 i10 = i3 + 12 | 0;
10359 i11 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i10, i3) | 0;
10360 i8 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i9, i10) | 0;
10361 do {
10362 if (i11) {
10363 if (i8) {
10364 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10365 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10366 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10367 HEAP32[i3 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
10368 HEAP32[i3 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
10369 HEAP32[i3 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
10370 HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10371 HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10372 HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10373 break;
10374 }
10375 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10376 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10377 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10378 HEAP32[i3 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
10379 HEAP32[i3 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
10380 HEAP32[i3 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
10381 HEAP32[i10 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10382 HEAP32[i10 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10383 HEAP32[i10 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10384 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i9, i10) | 0) {
10385 HEAP32[i7 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
10386 HEAP32[i7 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
10387 HEAP32[i7 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
10388 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
10389 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
10390 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
10391 HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10392 HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10393 HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10394 }
10395 } else {
10396 if (i8) {
10397 HEAP32[i7 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
10398 HEAP32[i7 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
10399 HEAP32[i7 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
10400 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
10401 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
10402 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
10403 HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10404 HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10405 HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10406 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i10, i3) | 0) {
10407 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10408 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10409 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10410 HEAP32[i3 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
10411 HEAP32[i3 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
10412 HEAP32[i3 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
10413 HEAP32[i10 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10414 HEAP32[i10 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10415 HEAP32[i10 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10416 }
10417 }
10418 }
10419 } while (0);
10420 i7 = i3 + 36 | 0;
10421 if ((i7 | 0) == (i4 | 0)) {
10422 i11 = 1;
10423 STACKTOP = i1;
10424 return i11 | 0;
10425 }
10426 i8 = 0;
10427 while (1) {
10428 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i9) | 0) {
10429 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10430 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10431 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10432 i10 = i7;
10433 while (1) {
10434 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
10435 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
10436 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
10437 if ((i9 | 0) == (i3 | 0)) {
10438 break;
10439 }
10440 i10 = i9 + -12 | 0;
10441 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i10) | 0) {
10442 i11 = i9;
10443 i9 = i10;
10444 i10 = i11;
10445 } else {
10446 break;
10447 }
10448 }
10449 HEAP32[i9 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
10450 HEAP32[i9 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
10451 HEAP32[i9 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
10452 i8 = i8 + 1 | 0;
10453 if ((i8 | 0) == 8) {
10454 break;
10455 }
10456 }
10457 i9 = i7 + 12 | 0;
10458 if ((i9 | 0) == (i4 | 0)) {
10459 i2 = 1;
10460 i5 = 35;
10461 break;
10462 } else {
10463 i11 = i7;
10464 i7 = i9;
10465 i9 = i11;
10466 }
10467 }
10468 if ((i5 | 0) == 35) {
10469 STACKTOP = i1;
10470 return i2 | 0;
10471 }
10472 i11 = (i7 + 12 | 0) == (i4 | 0);
10473 STACKTOP = i1;
10474 return i11 | 0;
10475 }
10476 }
10477 return 0;
10478 }
10479 function __ZN13b2DynamicTree7BalanceEi(i11, i6) {
10480 i11 = i11 | 0;
10481 i6 = i6 | 0;
10482 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i1 2 = 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;
10483 i1 = STACKTOP;
10484 if ((i6 | 0) == -1) {
10485 ___assert_fail(3216, 2944, 382, 3232);
10486 }
10487 i5 = HEAP32[i11 + 4 >> 2] | 0;
10488 i13 = i5 + (i6 * 36 | 0) | 0;
10489 i18 = i5 + (i6 * 36 | 0) + 24 | 0;
10490 i8 = HEAP32[i18 >> 2] | 0;
10491 if ((i8 | 0) == -1) {
10492 i21 = i6;
10493 STACKTOP = i1;
10494 return i21 | 0;
10495 }
10496 i2 = i5 + (i6 * 36 | 0) + 32 | 0;
10497 if ((HEAP32[i2 >> 2] | 0) < 2) {
10498 i21 = i6;
10499 STACKTOP = i1;
10500 return i21 | 0;
10501 }
10502 i20 = i5 + (i6 * 36 | 0) + 28 | 0;
10503 i7 = HEAP32[i20 >> 2] | 0;
10504 if (!((i8 | 0) > -1)) {
10505 ___assert_fail(3240, 2944, 392, 3232);
10506 }
10507 i12 = HEAP32[i11 + 12 >> 2] | 0;
10508 if ((i8 | 0) >= (i12 | 0)) {
10509 ___assert_fail(3240, 2944, 392, 3232);
10510 }
10511 if (!((i7 | 0) > -1 & (i7 | 0) < (i12 | 0))) {
10512 ___assert_fail(3272, 2944, 393, 3232);
10513 }
10514 i9 = i5 + (i8 * 36 | 0) | 0;
10515 i10 = i5 + (i7 * 36 | 0) | 0;
10516 i3 = i5 + (i7 * 36 | 0) + 32 | 0;
10517 i4 = i5 + (i8 * 36 | 0) + 32 | 0;
10518 i14 = (HEAP32[i3 >> 2] | 0) - (HEAP32[i4 >> 2] | 0) | 0;
10519 if ((i14 | 0) > 1) {
10520 i21 = i5 + (i7 * 36 | 0) + 24 | 0;
10521 i14 = HEAP32[i21 >> 2] | 0;
10522 i18 = i5 + (i7 * 36 | 0) + 28 | 0;
10523 i15 = HEAP32[i18 >> 2] | 0;
10524 i16 = i5 + (i14 * 36 | 0) | 0;
10525 i17 = i5 + (i15 * 36 | 0) | 0;
10526 if (!((i14 | 0) > -1 & (i14 | 0) < (i12 | 0))) {
10527 ___assert_fail(3304, 2944, 407, 3232);
10528 }
10529 if (!((i15 | 0) > -1 & (i15 | 0) < (i12 | 0))) {
10530 ___assert_fail(3336, 2944, 408, 3232);
10531 }
10532 HEAP32[i21 >> 2] = i6;
10533 i21 = i5 + (i6 * 36 | 0) + 20 | 0;
10534 i12 = i5 + (i7 * 36 | 0) + 20 | 0;
10535 HEAP32[i12 >> 2] = HEAP32[i21 >> 2];
10536 HEAP32[i21 >> 2] = i7;
10537 i12 = HEAP32[i12 >> 2] | 0;
10538 do {
10539 if (!((i12 | 0) == -1)) {
10540 i11 = i5 + (i12 * 36 | 0) + 24 | 0;
10541 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
10542 HEAP32[i11 >> 2] = i7;
10543 break;
10544 }
10545 i11 = i5 + (i12 * 36 | 0) + 28 | 0;
10546 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
10547 HEAP32[i11 >> 2] = i7;
10548 break;
10549 } else {
10550 ___assert_fail(3368, 2944, 424, 3232);
10551 }
10552 } else {
10553 HEAP32[i11 >> 2] = i7;
10554 }
10555 } while (0);
10556 i11 = i5 + (i14 * 36 | 0) + 32 | 0;
10557 i12 = i5 + (i15 * 36 | 0) + 32 | 0;
10558 if ((HEAP32[i11 >> 2] | 0) > (HEAP32[i12 >> 2] | 0)) {
10559 HEAP32[i18 >> 2] = i14;
10560 HEAP32[i20 >> 2] = i15;
10561 HEAP32[i5 + (i15 * 36 | 0) + 20 >> 2] = i6;
10562 d19 = +HEAPF32[i9 >> 2];
10563 d22 = +HEAPF32[i17 >> 2];
10564 d19 = d19 < d22 ? d19 : d22;
10565 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 4 >> 2];
10566 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
10567 d24 = +d19;
10568 d23 = +(d23 < d22 ? d23 : d22);
10569 i21 = i13;
10570 HEAPF32[i21 >> 2] = d24;
10571 HEAPF32[i21 + 4 >> 2] = d23;
10572 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 8 >> 2];
10573 d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
10574 d22 = +HEAPF32[i5 + (i8 * 36 | 0) + 12 >> 2];
10575 d25 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
10576 d23 = +(d23 > d24 ? d23 : d24);
10577 d24 = +(d22 > d25 ? d22 : d25);
10578 i21 = i5 + (i6 * 36 | 0) + 8 | 0;
10579 HEAPF32[i21 >> 2] = d23;
10580 HEAPF32[i21 + 4 >> 2] = d24;
10581 d24 = +HEAPF32[i16 >> 2];
10582 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
10583 d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
10584 d19 = +(d19 < d24 ? d19 : d24);
10585 d22 = +(d22 < d23 ? d22 : d23);
10586 i21 = i10;
10587 HEAPF32[i21 >> 2] = d19;
10588 HEAPF32[i21 + 4 >> 2] = d22;
10589 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
10590 d19 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
10591 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
10592 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
10593 d19 = +(d22 > d19 ? d22 : d19);
10594 d25 = +(d23 > d24 ? d23 : d24);
10595 i5 = i5 + (i7 * 36 | 0) + 8 | 0;
10596 HEAPF32[i5 >> 2] = d19;
10597 HEAPF32[i5 + 4 >> 2] = d25;
10598 i4 = HEAP32[i4 >> 2] | 0;
10599 i5 = HEAP32[i12 >> 2] | 0;
10600 i4 = ((i4 | 0) > (i5 | 0) ? i4 : i5) + 1 | 0;
10601 HEAP32[i2 >> 2] = i4;
10602 i2 = HEAP32[i11 >> 2] | 0;
10603 i2 = (i4 | 0) > (i2 | 0) ? i4 : i2;
10604 } else {
10605 HEAP32[i18 >> 2] = i15;
10606 HEAP32[i20 >> 2] = i14;
10607 HEAP32[i5 + (i14 * 36 | 0) + 20 >> 2] = i6;
10608 d19 = +HEAPF32[i9 >> 2];
10609 d22 = +HEAPF32[i16 >> 2];
10610 d19 = d19 < d22 ? d19 : d22;
10611 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 4 >> 2];
10612 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
10613 d22 = +d19;
10614 d23 = +(d23 < d24 ? d23 : d24);
10615 i21 = i13;
10616 HEAPF32[i21 >> 2] = d22;
10617 HEAPF32[i21 + 4 >> 2] = d23;
10618 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 8 >> 2];
10619 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
10620 d22 = +HEAPF32[i5 + (i8 * 36 | 0) + 12 >> 2];
10621 d25 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
10622 d23 = +(d23 > d24 ? d23 : d24);
10623 d24 = +(d22 > d25 ? d22 : d25);
10624 i21 = i5 + (i6 * 36 | 0) + 8 | 0;
10625 HEAPF32[i21 >> 2] = d23;
10626 HEAPF32[i21 + 4 >> 2] = d24;
10627 d24 = +HEAPF32[i17 >> 2];
10628 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
10629 d23 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
10630 d19 = +(d19 < d24 ? d19 : d24);
10631 d23 = +(d22 < d23 ? d22 : d23);
10632 i21 = i10;
10633 HEAPF32[i21 >> 2] = d19;
10634 HEAPF32[i21 + 4 >> 2] = d23;
10635 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
10636 d19 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
10637 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
10638 d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
10639 d19 = +(d23 > d19 ? d23 : d19);
10640 d25 = +(d22 > d24 ? d22 : d24);
10641 i5 = i5 + (i7 * 36 | 0) + 8 | 0;
10642 HEAPF32[i5 >> 2] = d19;
10643 HEAPF32[i5 + 4 >> 2] = d25;
10644 i4 = HEAP32[i4 >> 2] | 0;
10645 i5 = HEAP32[i11 >> 2] | 0;
10646 i4 = ((i4 | 0) > (i5 | 0) ? i4 : i5) + 1 | 0;
10647 HEAP32[i2 >> 2] = i4;
10648 i2 = HEAP32[i12 >> 2] | 0;
10649 i2 = (i4 | 0) > (i2 | 0) ? i4 : i2;
10650 }
10651 HEAP32[i3 >> 2] = i2 + 1;
10652 i21 = i7;
10653 STACKTOP = i1;
10654 return i21 | 0;
10655 }
10656 if (!((i14 | 0) < -1)) {
10657 i21 = i6;
10658 STACKTOP = i1;
10659 return i21 | 0;
10660 }
10661 i21 = i5 + (i8 * 36 | 0) + 24 | 0;
10662 i14 = HEAP32[i21 >> 2] | 0;
10663 i20 = i5 + (i8 * 36 | 0) + 28 | 0;
10664 i15 = HEAP32[i20 >> 2] | 0;
10665 i17 = i5 + (i14 * 36 | 0) | 0;
10666 i16 = i5 + (i15 * 36 | 0) | 0;
10667 if (!((i14 | 0) > -1 & (i14 | 0) < (i12 | 0))) {
10668 ___assert_fail(3400, 2944, 467, 3232);
10669 }
10670 if (!((i15 | 0) > -1 & (i15 | 0) < (i12 | 0))) {
10671 ___assert_fail(3432, 2944, 468, 3232);
10672 }
10673 HEAP32[i21 >> 2] = i6;
10674 i21 = i5 + (i6 * 36 | 0) + 20 | 0;
10675 i12 = i5 + (i8 * 36 | 0) + 20 | 0;
10676 HEAP32[i12 >> 2] = HEAP32[i21 >> 2];
10677 HEAP32[i21 >> 2] = i8;
10678 i12 = HEAP32[i12 >> 2] | 0;
10679 do {
10680 if (!((i12 | 0) == -1)) {
10681 i11 = i5 + (i12 * 36 | 0) + 24 | 0;
10682 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
10683 HEAP32[i11 >> 2] = i8;
10684 break;
10685 }
10686 i11 = i5 + (i12 * 36 | 0) + 28 | 0;
10687 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
10688 HEAP32[i11 >> 2] = i8;
10689 break;
10690 } else {
10691 ___assert_fail(3464, 2944, 484, 3232);
10692 }
10693 } else {
10694 HEAP32[i11 >> 2] = i8;
10695 }
10696 } while (0);
10697 i12 = i5 + (i14 * 36 | 0) + 32 | 0;
10698 i11 = i5 + (i15 * 36 | 0) + 32 | 0;
10699 if ((HEAP32[i12 >> 2] | 0) > (HEAP32[i11 >> 2] | 0)) {
10700 HEAP32[i20 >> 2] = i14;
10701 HEAP32[i18 >> 2] = i15;
10702 HEAP32[i5 + (i15 * 36 | 0) + 20 >> 2] = i6;
10703 d19 = +HEAPF32[i10 >> 2];
10704 d22 = +HEAPF32[i16 >> 2];
10705 d19 = d19 < d22 ? d19 : d22;
10706 d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 4 >> 2];
10707 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
10708 d24 = +d19;
10709 d23 = +(d23 < d22 ? d23 : d22);
10710 i21 = i13;
10711 HEAPF32[i21 >> 2] = d24;
10712 HEAPF32[i21 + 4 >> 2] = d23;
10713 d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 8 >> 2];
10714 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
10715 d24 = +HEAPF32[i5 + (i7 * 36 | 0) + 12 >> 2];
10716 d25 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
10717 d22 = +(d23 > d22 ? d23 : d22);
10718 d24 = +(d24 > d25 ? d24 : d25);
10719 i21 = i5 + (i6 * 36 | 0) + 8 | 0;
10720 HEAPF32[i21 >> 2] = d22;
10721 HEAPF32[i21 + 4 >> 2] = d24;
10722 d24 = +HEAPF32[i17 >> 2];
10723 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
10724 d22 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
10725 d19 = +(d19 < d24 ? d19 : d24);
10726 d22 = +(d23 < d22 ? d23 : d22);
10727 i21 = i9;
10728 HEAPF32[i21 >> 2] = d19;
10729 HEAPF32[i21 + 4 >> 2] = d22;
10730 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
10731 d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
10732 d19 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
10733 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
10734 d22 = +(d22 > d23 ? d22 : d23);
10735 d25 = +(d19 > d24 ? d19 : d24);
10736 i5 = i5 + (i8 * 36 | 0) + 8 | 0;
10737 HEAPF32[i5 >> 2] = d22;
10738 HEAPF32[i5 + 4 >> 2] = d25;
10739 i3 = HEAP32[i3 >> 2] | 0;
10740 i5 = HEAP32[i11 >> 2] | 0;
10741 i3 = ((i3 | 0) > (i5 | 0) ? i3 : i5) + 1 | 0;
10742 HEAP32[i2 >> 2] = i3;
10743 i2 = HEAP32[i12 >> 2] | 0;
10744 i2 = (i3 | 0) > (i2 | 0) ? i3 : i2;
10745 } else {
10746 HEAP32[i20 >> 2] = i15;
10747 HEAP32[i18 >> 2] = i14;
10748 HEAP32[i5 + (i14 * 36 | 0) + 20 >> 2] = i6;
10749 d19 = +HEAPF32[i10 >> 2];
10750 d22 = +HEAPF32[i17 >> 2];
10751 d19 = d19 < d22 ? d19 : d22;
10752 d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 4 >> 2];
10753 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
10754 d22 = +d19;
10755 d24 = +(d23 < d24 ? d23 : d24);
10756 i21 = i13;
10757 HEAPF32[i21 >> 2] = d22;
10758 HEAPF32[i21 + 4 >> 2] = d24;
10759 d24 = +HEAPF32[i5 + (i7 * 36 | 0) + 8 >> 2];
10760 d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
10761 d22 = +HEAPF32[i5 + (i7 * 36 | 0) + 12 >> 2];
10762 d25 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
10763 d23 = +(d24 > d23 ? d24 : d23);
10764 d24 = +(d22 > d25 ? d22 : d25);
10765 i21 = i5 + (i6 * 36 | 0) + 8 | 0;
10766 HEAPF32[i21 >> 2] = d23;
10767 HEAPF32[i21 + 4 >> 2] = d24;
10768 d24 = +HEAPF32[i16 >> 2];
10769 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
10770 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
10771 d19 = +(d19 < d24 ? d19 : d24);
10772 d22 = +(d23 < d22 ? d23 : d22);
10773 i21 = i9;
10774 HEAPF32[i21 >> 2] = d19;
10775 HEAPF32[i21 + 4 >> 2] = d22;
10776 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
10777 d23 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
10778 d19 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
10779 d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
10780 d22 = +(d22 > d23 ? d22 : d23);
10781 d25 = +(d19 > d24 ? d19 : d24);
10782 i5 = i5 + (i8 * 36 | 0) + 8 | 0;
10783 HEAPF32[i5 >> 2] = d22;
10784 HEAPF32[i5 + 4 >> 2] = d25;
10785 i3 = HEAP32[i3 >> 2] | 0;
10786 i5 = HEAP32[i12 >> 2] | 0;
10787 i3 = ((i3 | 0) > (i5 | 0) ? i3 : i5) + 1 | 0;
10788 HEAP32[i2 >> 2] = i3;
10789 i2 = HEAP32[i11 >> 2] | 0;
10790 i2 = (i3 | 0) > (i2 | 0) ? i3 : i2;
10791 }
10792 HEAP32[i4 >> 2] = i2 + 1;
10793 i21 = i8;
10794 STACKTOP = i1;
10795 return i21 | 0;
10796 }
10797 function __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput( i2, i5, i3) {
10798 i2 = i2 | 0;
10799 i5 = i5 | 0;
10800 i3 = i3 | 0;
10801 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;
10802 i1 = STACKTOP;
10803 STACKTOP = STACKTOP + 176 | 0;
10804 i11 = i1 + 152 | 0;
10805 i10 = i1 + 136 | 0;
10806 i4 = i1 + 24 | 0;
10807 i14 = i1 + 12 | 0;
10808 i15 = i1;
10809 HEAP32[652] = (HEAP32[652] | 0) + 1;
10810 i9 = i3 + 28 | 0;
10811 i31 = i3 + 56 | 0;
10812 HEAP32[i11 + 0 >> 2] = HEAP32[i31 + 0 >> 2];
10813 HEAP32[i11 + 4 >> 2] = HEAP32[i31 + 4 >> 2];
10814 HEAP32[i11 + 8 >> 2] = HEAP32[i31 + 8 >> 2];
10815 HEAP32[i11 + 12 >> 2] = HEAP32[i31 + 12 >> 2];
10816 i31 = i3 + 72 | 0;
10817 HEAP32[i10 + 0 >> 2] = HEAP32[i31 + 0 >> 2];
10818 HEAP32[i10 + 4 >> 2] = HEAP32[i31 + 4 >> 2];
10819 HEAP32[i10 + 8 >> 2] = HEAP32[i31 + 8 >> 2];
10820 HEAP32[i10 + 12 >> 2] = HEAP32[i31 + 12 >> 2];
10821 __ZN9b2Simplex9ReadCacheEPK14b2SimplexCachePK15b2DistanceProxyRK11b2TransformS5 _S8_(i4, i5, i3, i11, i9, i10);
10822 i9 = i4 + 108 | 0;
10823 i31 = HEAP32[i9 >> 2] | 0;
10824 if ((i31 | 0) == 3 | (i31 | 0) == 2 | (i31 | 0) == 1) {
10825 i8 = i4 + 16 | 0;
10826 i6 = i4 + 20 | 0;
10827 d17 = +HEAPF32[i11 + 12 >> 2];
10828 d18 = +HEAPF32[i11 + 8 >> 2];
10829 i13 = i3 + 16 | 0;
10830 i12 = i3 + 20 | 0;
10831 d16 = +HEAPF32[i11 >> 2];
10832 d21 = +HEAPF32[i11 + 4 >> 2];
10833 d19 = +HEAPF32[i10 + 12 >> 2];
10834 d22 = +HEAPF32[i10 + 8 >> 2];
10835 i23 = i3 + 44 | 0;
10836 i20 = i3 + 48 | 0;
10837 d24 = +HEAPF32[i10 >> 2];
10838 d25 = +HEAPF32[i10 + 4 >> 2];
10839 i11 = i4 + 52 | 0;
10840 i10 = i4 + 56 | 0;
10841 i30 = i4 + 16 | 0;
10842 i27 = i4 + 36 | 0;
10843 i26 = i4 + 52 | 0;
10844 i29 = i4 + 24 | 0;
10845 i28 = i4 + 60 | 0;
10846 i33 = 0;
10847 L3 : while (1) {
10848 i32 = (i31 | 0) > 0;
10849 if (i32) {
10850 i34 = 0;
10851 do {
10852 HEAP32[i14 + (i34 << 2) >> 2] = HEAP32[i4 + (i34 * 36 | 0) + 28 >> 2];
10853 HEAP32[i15 + (i34 << 2) >> 2] = HEAP32[i4 + (i34 * 36 | 0) + 32 >> 2];
10854 i34 = i34 + 1 | 0;
10855 } while ((i34 | 0) != (i31 | 0));
10856 }
10857 do {
10858 if ((i31 | 0) == 2) {
10859 i46 = i30;
10860 d45 = +HEAPF32[i46 >> 2];
10861 d36 = +HEAPF32[i46 + 4 >> 2];
10862 i46 = i26;
10863 d38 = +HEAPF32[i46 >> 2];
10864 d37 = +HEAPF32[i46 + 4 >> 2];
10865 d43 = d38 - d45;
10866 d44 = d37 - d36;
10867 d36 = d45 * d43 + d36 * d44;
10868 if (d36 >= -0.0) {
10869 HEAPF32[i29 >> 2] = 1.0;
10870 HEAP32[i9 >> 2] = 1;
10871 i35 = 17;
10872 break;
10873 }
10874 d37 = d38 * d43 + d37 * d44;
10875 if (!(d37 <= 0.0)) {
10876 d45 = 1.0 / (d37 - d36);
10877 HEAPF32[i29 >> 2] = d37 * d45;
10878 HEAPF32[i28 >> 2] = -(d36 * d45);
10879 HEAP32[i9 >> 2] = 2;
10880 i35 = 18;
10881 break;
10882 } else {
10883 HEAPF32[i28 >> 2] = 1.0;
10884 HEAP32[i9 >> 2] = 1;
10885 i34 = i4 + 0 | 0;
10886 i39 = i27 + 0 | 0;
10887 i35 = i34 + 36 | 0;
10888 do {
10889 HEAP32[i34 >> 2] = HEAP32[i39 >> 2];
10890 i34 = i34 + 4 | 0;
10891 i39 = i39 + 4 | 0;
10892 } while ((i34 | 0) < (i35 | 0));
10893 i35 = 17;
10894 break;
10895 }
10896 } else if ((i31 | 0) == 3) {
10897 __ZN9b2Simplex6Solve3Ev(i4);
10898 i34 = HEAP32[i9 >> 2] | 0;
10899 if ((i34 | 0) == 1) {
10900 i35 = 17;
10901 } else if ((i34 | 0) == 0) {
10902 i35 = 15;
10903 break L3;
10904 } else if ((i34 | 0) == 2) {
10905 i35 = 18;
10906 } else if ((i34 | 0) == 3) {
10907 i35 = 42;
10908 break L3;
10909 } else {
10910 i35 = 16;
10911 break L3;
10912 }
10913 } else if ((i31 | 0) == 1) {
10914 i35 = 17;
10915 } else {
10916 i35 = 13;
10917 break L3;
10918 }
10919 } while (0);
10920 do {
10921 if ((i35 | 0) == 17) {
10922 d36 = -+HEAPF32[i8 >> 2];
10923 d37 = -+HEAPF32[i6 >> 2];
10924 i34 = 1;
10925 } else if ((i35 | 0) == 18) {
10926 d44 = +HEAPF32[i8 >> 2];
10927 d37 = +HEAPF32[i11 >> 2] - d44;
10928 d45 = +HEAPF32[i6 >> 2];
10929 d36 = +HEAPF32[i10 >> 2] - d45;
10930 if (d44 * d36 - d37 * d45 > 0.0) {
10931 d36 = -d36;
10932 i34 = 2;
10933 break;
10934 } else {
10935 d37 = -d37;
10936 i34 = 2;
10937 break;
10938 }
10939 }
10940 } while (0);
10941 if (d37 * d37 + d36 * d36 < 1.4210854715202004e-14) {
10942 i35 = 42;
10943 break;
10944 }
10945 i39 = i4 + (i34 * 36 | 0) | 0;
10946 d44 = -d36;
10947 d45 = -d37;
10948 d43 = d17 * d44 + d18 * d45;
10949 d44 = d17 * d45 - d18 * d44;
10950 i40 = HEAP32[i13 >> 2] | 0;
10951 i41 = HEAP32[i12 >> 2] | 0;
10952 if ((i41 | 0) > 1) {
10953 i42 = 0;
10954 d45 = d44 * +HEAPF32[i40 + 4 >> 2] + d43 * +HEAPF32[i40 >> 2];
10955 i46 = 1;
10956 while (1) {
10957 d38 = d43 * +HEAPF32[i40 + (i46 << 3) >> 2] + d44 * +HEAPF32[i40 + (i46 << 3) + 4 >> 2];
10958 i35 = d38 > d45;
10959 i42 = i35 ? i46 : i42;
10960 i46 = i46 + 1 | 0;
10961 if ((i46 | 0) == (i41 | 0)) {
10962 break;
10963 } else {
10964 d45 = i35 ? d38 : d45;
10965 }
10966 }
10967 i35 = i4 + (i34 * 36 | 0) + 28 | 0;
10968 HEAP32[i35 >> 2] = i42;
10969 if (!((i42 | 0) > -1)) {
10970 i35 = 28;
10971 break;
10972 }
10973 } else {
10974 i35 = i4 + (i34 * 36 | 0) + 28 | 0;
10975 HEAP32[i35 >> 2] = 0;
10976 i42 = 0;
10977 }
10978 if ((i41 | 0) <= (i42 | 0)) {
10979 i35 = 28;
10980 break;
10981 }
10982 d45 = +HEAPF32[i40 + (i42 << 3) >> 2];
10983 d43 = +HEAPF32[i40 + (i42 << 3) + 4 >> 2];
10984 d38 = d16 + (d17 * d45 - d18 * d43);
10985 d44 = +d38;
10986 d43 = +(d45 * d18 + d17 * d43 + d21);
10987 i40 = i39;
10988 HEAPF32[i40 >> 2] = d44;
10989 HEAPF32[i40 + 4 >> 2] = d43;
10990 d43 = d36 * d19 + d37 * d22;
10991 d44 = d37 * d19 - d36 * d22;
10992 i40 = HEAP32[i23 >> 2] | 0;
10993 i39 = HEAP32[i20 >> 2] | 0;
10994 if ((i39 | 0) > 1) {
10995 i41 = 0;
10996 d37 = d44 * +HEAPF32[i40 + 4 >> 2] + d43 * +HEAPF32[i40 >> 2];
10997 i42 = 1;
10998 while (1) {
10999 d36 = d43 * +HEAPF32[i40 + (i42 << 3) >> 2] + d44 * +HEAPF32[i40 + (i42 << 3) + 4 >> 2];
11000 i46 = d36 > d37;
11001 i41 = i46 ? i42 : i41;
11002 i42 = i42 + 1 | 0;
11003 if ((i42 | 0) == (i39 | 0)) {
11004 break;
11005 } else {
11006 d37 = i46 ? d36 : d37;
11007 }
11008 }
11009 i42 = i4 + (i34 * 36 | 0) + 32 | 0;
11010 HEAP32[i42 >> 2] = i41;
11011 if (!((i41 | 0) > -1)) {
11012 i35 = 35;
11013 break;
11014 }
11015 } else {
11016 i42 = i4 + (i34 * 36 | 0) + 32 | 0;
11017 HEAP32[i42 >> 2] = 0;
11018 i41 = 0;
11019 }
11020 if ((i39 | 0) <= (i41 | 0)) {
11021 i35 = 35;
11022 break;
11023 }
11024 d37 = +HEAPF32[i40 + (i41 << 3) >> 2];
11025 d45 = +HEAPF32[i40 + (i41 << 3) + 4 >> 2];
11026 d44 = d24 + (d19 * d37 - d22 * d45);
11027 d43 = +d44;
11028 d45 = +(d37 * d22 + d19 * d45 + d25);
11029 i46 = i4 + (i34 * 36 | 0) + 8 | 0;
11030 HEAPF32[i46 >> 2] = d43;
11031 HEAPF32[i46 + 4 >> 2] = d45;
11032 d44 = +(d44 - d38);
11033 d45 = +(+HEAPF32[i4 + (i34 * 36 | 0) + 12 >> 2] - +HEAPF32[i4 + (i34 * 36 | 0 ) + 4 >> 2]);
11034 i46 = i4 + (i34 * 36 | 0) + 16 | 0;
11035 HEAPF32[i46 >> 2] = d44;
11036 HEAPF32[i46 + 4 >> 2] = d45;
11037 i33 = i33 + 1 | 0;
11038 HEAP32[654] = (HEAP32[654] | 0) + 1;
11039 if (i32) {
11040 i34 = HEAP32[i35 >> 2] | 0;
11041 i32 = 0;
11042 do {
11043 if ((i34 | 0) == (HEAP32[i14 + (i32 << 2) >> 2] | 0) ? (HEAP32[i42 >> 2] | 0) == (HEAP32[i15 + (i32 << 2) >> 2] | 0) : 0) {
11044 i35 = 42;
11045 break L3;
11046 }
11047 i32 = i32 + 1 | 0;
11048 } while ((i32 | 0) < (i31 | 0));
11049 }
11050 i31 = (HEAP32[i9 >> 2] | 0) + 1 | 0;
11051 HEAP32[i9 >> 2] = i31;
11052 if ((i33 | 0) >= 20) {
11053 i35 = 42;
11054 break;
11055 }
11056 }
11057 if ((i35 | 0) == 13) {
11058 ___assert_fail(2712, 2672, 498, 2720);
11059 } else if ((i35 | 0) == 15) {
11060 ___assert_fail(2712, 2672, 194, 2856);
11061 } else if ((i35 | 0) == 16) {
11062 ___assert_fail(2712, 2672, 207, 2856);
11063 } else if ((i35 | 0) == 28) {
11064 ___assert_fail(2776, 2808, 103, 2840);
11065 } else if ((i35 | 0) == 35) {
11066 ___assert_fail(2776, 2808, 103, 2840);
11067 } else if ((i35 | 0) == 42) {
11068 i12 = HEAP32[656] | 0;
11069 HEAP32[656] = (i12 | 0) > (i33 | 0) ? i12 : i33;
11070 i14 = i2 + 8 | 0;
11071 __ZNK9b2Simplex16GetWitnessPointsEP6b2Vec2S1_(i4, i2, i14);
11072 d44 = +HEAPF32[i2 >> 2] - +HEAPF32[i14 >> 2];
11073 i13 = i2 + 4 | 0;
11074 i12 = i2 + 12 | 0;
11075 d45 = +HEAPF32[i13 >> 2] - +HEAPF32[i12 >> 2];
11076 i15 = i2 + 16 | 0;
11077 HEAPF32[i15 >> 2] = +Math_sqrt(+(d44 * d44 + d45 * d45));
11078 HEAP32[i2 + 20 >> 2] = i33;
11079 i9 = HEAP32[i9 >> 2] | 0;
11080 if ((i9 | 0) == 2) {
11081 d45 = +HEAPF32[i8 >> 2] - +HEAPF32[i11 >> 2];
11082 d7 = +HEAPF32[i6 >> 2] - +HEAPF32[i10 >> 2];
11083 d7 = +Math_sqrt(+(d45 * d45 + d7 * d7));
11084 } else if ((i9 | 0) == 3) {
11085 d7 = +HEAPF32[i8 >> 2];
11086 d45 = +HEAPF32[i6 >> 2];
11087 d7 = (+HEAPF32[i11 >> 2] - d7) * (+HEAPF32[i4 + 92 >> 2] - d45) - (+HEAPF32[ i10 >> 2] - d45) * (+HEAPF32[i4 + 88 >> 2] - d7);
11088 } else if ((i9 | 0) == 1) {
11089 d7 = 0.0;
11090 } else if ((i9 | 0) == 0) {
11091 ___assert_fail(2712, 2672, 246, 2736);
11092 } else {
11093 ___assert_fail(2712, 2672, 259, 2736);
11094 }
11095 HEAPF32[i5 >> 2] = d7;
11096 HEAP16[i5 + 4 >> 1] = i9;
11097 i6 = 0;
11098 do {
11099 HEAP8[i5 + i6 + 6 | 0] = HEAP32[i4 + (i6 * 36 | 0) + 28 >> 2];
11100 HEAP8[i5 + i6 + 9 | 0] = HEAP32[i4 + (i6 * 36 | 0) + 32 >> 2];
11101 i6 = i6 + 1 | 0;
11102 } while ((i6 | 0) < (i9 | 0));
11103 if ((HEAP8[i3 + 88 | 0] | 0) == 0) {
11104 STACKTOP = i1;
11105 return;
11106 }
11107 d7 = +HEAPF32[i3 + 24 >> 2];
11108 d16 = +HEAPF32[i3 + 52 >> 2];
11109 d18 = +HEAPF32[i15 >> 2];
11110 d17 = d7 + d16;
11111 if (!(d18 > d17 & d18 > 1.1920928955078125e-7)) {
11112 d44 = +((+HEAPF32[i2 >> 2] + +HEAPF32[i14 >> 2]) * .5);
11113 d45 = +((+HEAPF32[i13 >> 2] + +HEAPF32[i12 >> 2]) * .5);
11114 i46 = i2;
11115 HEAPF32[i46 >> 2] = d44;
11116 HEAPF32[i46 + 4 >> 2] = d45;
11117 i46 = i14;
11118 HEAPF32[i46 >> 2] = d44;
11119 HEAPF32[i46 + 4 >> 2] = d45;
11120 HEAPF32[i15 >> 2] = 0.0;
11121 STACKTOP = i1;
11122 return;
11123 }
11124 HEAPF32[i15 >> 2] = d18 - d17;
11125 d18 = +HEAPF32[i14 >> 2];
11126 d21 = +HEAPF32[i2 >> 2];
11127 d24 = d18 - d21;
11128 d17 = +HEAPF32[i12 >> 2];
11129 d19 = +HEAPF32[i13 >> 2];
11130 d22 = d17 - d19;
11131 d25 = +Math_sqrt(+(d24 * d24 + d22 * d22));
11132 if (!(d25 < 1.1920928955078125e-7)) {
11133 d45 = 1.0 / d25;
11134 d24 = d24 * d45;
11135 d22 = d22 * d45;
11136 }
11137 HEAPF32[i2 >> 2] = d7 * d24 + d21;
11138 HEAPF32[i13 >> 2] = d7 * d22 + d19;
11139 HEAPF32[i14 >> 2] = d18 - d16 * d24;
11140 HEAPF32[i12 >> 2] = d17 - d16 * d22;
11141 STACKTOP = i1;
11142 return;
11143 }
11144 } else if ((i31 | 0) == 0) {
11145 ___assert_fail(2712, 2672, 194, 2856);
11146 } else {
11147 ___assert_fail(2712, 2672, 207, 2856);
11148 }
11149 }
11150 function __ZN8b2Island5SolveEP9b2ProfileRK10b2TimeStepRK6b2Vec2b(i4, i8, i11, i1 7, i7) {
11151 i4 = i4 | 0;
11152 i8 = i8 | 0;
11153 i11 = i11 | 0;
11154 i17 = i17 | 0;
11155 i7 = i7 | 0;
11156 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 ;
11157 i3 = STACKTOP;
11158 STACKTOP = STACKTOP + 160 | 0;
11159 i6 = i3 + 128 | 0;
11160 i9 = i3 + 148 | 0;
11161 i10 = i3 + 96 | 0;
11162 i16 = i3 + 52 | 0;
11163 i2 = i3;
11164 __ZN7b2TimerC2Ev(i9);
11165 d5 = +HEAPF32[i11 >> 2];
11166 i1 = i4 + 28 | 0;
11167 if ((HEAP32[i1 >> 2] | 0) > 0) {
11168 i13 = i4 + 8 | 0;
11169 i12 = i17 + 4 | 0;
11170 i15 = i4 + 20 | 0;
11171 i14 = i4 + 24 | 0;
11172 i19 = 0;
11173 do {
11174 i22 = HEAP32[(HEAP32[i13 >> 2] | 0) + (i19 << 2) >> 2] | 0;
11175 i18 = i22 + 44 | 0;
11176 i20 = HEAP32[i18 >> 2] | 0;
11177 i18 = HEAP32[i18 + 4 >> 2] | 0;
11178 d21 = +HEAPF32[i22 + 56 >> 2];
11179 i30 = i22 + 64 | 0;
11180 d27 = +HEAPF32[i30 >> 2];
11181 d24 = +HEAPF32[i30 + 4 >> 2];
11182 d23 = +HEAPF32[i22 + 72 >> 2];
11183 i30 = i22 + 36 | 0;
11184 HEAP32[i30 >> 2] = i20;
11185 HEAP32[i30 + 4 >> 2] = i18;
11186 HEAPF32[i22 + 52 >> 2] = d21;
11187 if ((HEAP32[i22 >> 2] | 0) == 2) {
11188 d25 = +HEAPF32[i22 + 140 >> 2];
11189 d26 = +HEAPF32[i22 + 120 >> 2];
11190 d28 = 1.0 - d5 * +HEAPF32[i22 + 132 >> 2];
11191 d28 = d28 < 1.0 ? d28 : 1.0;
11192 d28 = d28 < 0.0 ? 0.0 : d28;
11193 d29 = 1.0 - d5 * +HEAPF32[i22 + 136 >> 2];
11194 d29 = d29 < 1.0 ? d29 : 1.0;
11195 d27 = (d27 + d5 * (d25 * +HEAPF32[i17 >> 2] + d26 * +HEAPF32[i22 + 76 >> 2]) ) * d28;
11196 d24 = (d24 + d5 * (d25 * +HEAPF32[i12 >> 2] + d26 * +HEAPF32[i22 + 80 >> 2]) ) * d28;
11197 d23 = (d23 + d5 * +HEAPF32[i22 + 128 >> 2] * +HEAPF32[i22 + 84 >> 2]) * (d29 < 0.0 ? 0.0 : d29);
11198 }
11199 i30 = (HEAP32[i15 >> 2] | 0) + (i19 * 12 | 0) | 0;
11200 HEAP32[i30 >> 2] = i20;
11201 HEAP32[i30 + 4 >> 2] = i18;
11202 HEAPF32[(HEAP32[i15 >> 2] | 0) + (i19 * 12 | 0) + 8 >> 2] = d21;
11203 d28 = +d27;
11204 d29 = +d24;
11205 i30 = (HEAP32[i14 >> 2] | 0) + (i19 * 12 | 0) | 0;
11206 HEAPF32[i30 >> 2] = d28;
11207 HEAPF32[i30 + 4 >> 2] = d29;
11208 HEAPF32[(HEAP32[i14 >> 2] | 0) + (i19 * 12 | 0) + 8 >> 2] = d23;
11209 i19 = i19 + 1 | 0;
11210 } while ((i19 | 0) < (HEAP32[i1 >> 2] | 0));
11211 } else {
11212 i14 = i4 + 24 | 0;
11213 i15 = i4 + 20 | 0;
11214 }
11215 HEAP32[i10 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
11216 HEAP32[i10 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
11217 HEAP32[i10 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
11218 HEAP32[i10 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
11219 HEAP32[i10 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
11220 HEAP32[i10 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
11221 i22 = HEAP32[i15 >> 2] | 0;
11222 HEAP32[i10 + 24 >> 2] = i22;
11223 i30 = HEAP32[i14 >> 2] | 0;
11224 HEAP32[i10 + 28 >> 2] = i30;
11225 HEAP32[i16 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
11226 HEAP32[i16 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
11227 HEAP32[i16 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
11228 HEAP32[i16 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
11229 HEAP32[i16 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
11230 HEAP32[i16 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
11231 i13 = i4 + 12 | 0;
11232 HEAP32[i16 + 24 >> 2] = HEAP32[i13 >> 2];
11233 i12 = i4 + 36 | 0;
11234 HEAP32[i16 + 28 >> 2] = HEAP32[i12 >> 2];
11235 HEAP32[i16 + 32 >> 2] = i22;
11236 HEAP32[i16 + 36 >> 2] = i30;
11237 HEAP32[i16 + 40 >> 2] = HEAP32[i4 >> 2];
11238 __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i2, i16);
11239 __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i2);
11240 if ((HEAP8[i11 + 20 | 0] | 0) != 0) {
11241 __ZN15b2ContactSolver9WarmStartEv(i2);
11242 }
11243 i16 = i4 + 32 | 0;
11244 if ((HEAP32[i16 >> 2] | 0) > 0) {
11245 i18 = i4 + 16 | 0;
11246 i17 = 0;
11247 do {
11248 i30 = HEAP32[(HEAP32[i18 >> 2] | 0) + (i17 << 2) >> 2] | 0;
11249 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i30 >> 2] | 0) + 28 >> 2] & 15](i30, i10);
11250 i17 = i17 + 1 | 0;
11251 } while ((i17 | 0) < (HEAP32[i16 >> 2] | 0));
11252 }
11253 HEAPF32[i8 + 12 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9);
11254 i17 = i11 + 12 | 0;
11255 if ((HEAP32[i17 >> 2] | 0) > 0) {
11256 i20 = i4 + 16 | 0;
11257 i19 = 0;
11258 do {
11259 if ((HEAP32[i16 >> 2] | 0) > 0) {
11260 i18 = 0;
11261 do {
11262 i30 = HEAP32[(HEAP32[i20 >> 2] | 0) + (i18 << 2) >> 2] | 0;
11263 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i30 >> 2] | 0) + 32 >> 2] & 15](i30, i10) ;
11264 i18 = i18 + 1 | 0;
11265 } while ((i18 | 0) < (HEAP32[i16 >> 2] | 0));
11266 }
11267 __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i2);
11268 i19 = i19 + 1 | 0;
11269 } while ((i19 | 0) < (HEAP32[i17 >> 2] | 0));
11270 }
11271 __ZN15b2ContactSolver13StoreImpulsesEv(i2);
11272 HEAPF32[i8 + 16 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9);
11273 if ((HEAP32[i1 >> 2] | 0) > 0) {
11274 i19 = HEAP32[i14 >> 2] | 0;
11275 i18 = 0;
11276 do {
11277 i30 = HEAP32[i15 >> 2] | 0;
11278 i17 = i30 + (i18 * 12 | 0) | 0;
11279 i22 = i17;
11280 d23 = +HEAPF32[i22 >> 2];
11281 d21 = +HEAPF32[i22 + 4 >> 2];
11282 d24 = +HEAPF32[i30 + (i18 * 12 | 0) + 8 >> 2];
11283 i30 = i19 + (i18 * 12 | 0) | 0;
11284 d26 = +HEAPF32[i30 >> 2];
11285 d27 = +HEAPF32[i30 + 4 >> 2];
11286 d25 = +HEAPF32[i19 + (i18 * 12 | 0) + 8 >> 2];
11287 d29 = d5 * d26;
11288 d28 = d5 * d27;
11289 d28 = d29 * d29 + d28 * d28;
11290 if (d28 > 4.0) {
11291 d29 = 2.0 / +Math_sqrt(+d28);
11292 d26 = d26 * d29;
11293 d27 = d27 * d29;
11294 }
11295 d28 = d5 * d25;
11296 if (d28 * d28 > 2.4674012660980225) {
11297 if (!(d28 > 0.0)) {
11298 d28 = -d28;
11299 }
11300 d25 = d25 * (1.5707963705062866 / d28);
11301 }
11302 d29 = +(d23 + d5 * d26);
11303 d28 = +(d21 + d5 * d27);
11304 i19 = i17;
11305 HEAPF32[i19 >> 2] = d29;
11306 HEAPF32[i19 + 4 >> 2] = d28;
11307 HEAPF32[(HEAP32[i15 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2] = d24 + d5 * d25;
11308 d28 = +d26;
11309 d29 = +d27;
11310 i19 = (HEAP32[i14 >> 2] | 0) + (i18 * 12 | 0) | 0;
11311 HEAPF32[i19 >> 2] = d28;
11312 HEAPF32[i19 + 4 >> 2] = d29;
11313 i19 = HEAP32[i14 >> 2] | 0;
11314 HEAPF32[i19 + (i18 * 12 | 0) + 8 >> 2] = d25;
11315 i18 = i18 + 1 | 0;
11316 } while ((i18 | 0) < (HEAP32[i1 >> 2] | 0));
11317 }
11318 i11 = i11 + 16 | 0;
11319 L41 : do {
11320 if ((HEAP32[i11 >> 2] | 0) > 0) {
11321 i17 = i4 + 16 | 0;
11322 i19 = 0;
11323 while (1) {
11324 i18 = __ZN15b2ContactSolver24SolvePositionConstraintsEv(i2) | 0;
11325 if ((HEAP32[i16 >> 2] | 0) > 0) {
11326 i20 = 0;
11327 i22 = 1;
11328 do {
11329 i30 = HEAP32[(HEAP32[i17 >> 2] | 0) + (i20 << 2) >> 2] | 0;
11330 i22 = i22 & (FUNCTION_TABLE_iii[HEAP32[(HEAP32[i30 >> 2] | 0) + 36 >> 2] & 3](i30, i10) | 0);
11331 i20 = i20 + 1 | 0;
11332 } while ((i20 | 0) < (HEAP32[i16 >> 2] | 0));
11333 } else {
11334 i22 = 1;
11335 }
11336 i19 = i19 + 1 | 0;
11337 if (i18 & i22) {
11338 i10 = 0;
11339 break L41;
11340 }
11341 if ((i19 | 0) >= (HEAP32[i11 >> 2] | 0)) {
11342 i10 = 1;
11343 break;
11344 }
11345 }
11346 } else {
11347 i10 = 1;
11348 }
11349 } while (0);
11350 if ((HEAP32[i1 >> 2] | 0) > 0) {
11351 i11 = i4 + 8 | 0;
11352 i16 = 0;
11353 do {
11354 i30 = HEAP32[(HEAP32[i11 >> 2] | 0) + (i16 << 2) >> 2] | 0;
11355 i22 = (HEAP32[i15 >> 2] | 0) + (i16 * 12 | 0) | 0;
11356 i20 = HEAP32[i22 >> 2] | 0;
11357 i22 = HEAP32[i22 + 4 >> 2] | 0;
11358 i17 = i30 + 44 | 0;
11359 HEAP32[i17 >> 2] = i20;
11360 HEAP32[i17 + 4 >> 2] = i22;
11361 d27 = +HEAPF32[(HEAP32[i15 >> 2] | 0) + (i16 * 12 | 0) + 8 >> 2];
11362 HEAPF32[i30 + 56 >> 2] = d27;
11363 i17 = (HEAP32[i14 >> 2] | 0) + (i16 * 12 | 0) | 0;
11364 i18 = HEAP32[i17 + 4 >> 2] | 0;
11365 i19 = i30 + 64 | 0;
11366 HEAP32[i19 >> 2] = HEAP32[i17 >> 2];
11367 HEAP32[i19 + 4 >> 2] = i18;
11368 HEAPF32[i30 + 72 >> 2] = +HEAPF32[(HEAP32[i14 >> 2] | 0) + (i16 * 12 | 0) + 8 >> 2];
11369 d25 = +Math_sin(+d27);
11370 HEAPF32[i30 + 20 >> 2] = d25;
11371 d27 = +Math_cos(+d27);
11372 HEAPF32[i30 + 24 >> 2] = d27;
11373 d26 = +HEAPF32[i30 + 28 >> 2];
11374 d29 = +HEAPF32[i30 + 32 >> 2];
11375 d28 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]) - (d27 * d26 - d25 * d29);
11376 d29 = (HEAP32[tempDoublePtr >> 2] = i22, +HEAPF32[tempDoublePtr >> 2]) - (d25 * d26 + d27 * d29);
11377 d28 = +d28;
11378 d29 = +d29;
11379 i30 = i30 + 12 | 0;
11380 HEAPF32[i30 >> 2] = d28;
11381 HEAPF32[i30 + 4 >> 2] = d29;
11382 i16 = i16 + 1 | 0;
11383 } while ((i16 | 0) < (HEAP32[i1 >> 2] | 0));
11384 }
11385 HEAPF32[i8 + 20 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9);
11386 i9 = HEAP32[i2 + 40 >> 2] | 0;
11387 i8 = i4 + 4 | 0;
11388 if ((HEAP32[i8 >> 2] | 0) != 0 ? (HEAP32[i12 >> 2] | 0) > 0 : 0) {
11389 i11 = i6 + 16 | 0;
11390 i14 = 0;
11391 do {
11392 i15 = HEAP32[(HEAP32[i13 >> 2] | 0) + (i14 << 2) >> 2] | 0;
11393 i16 = HEAP32[i9 + (i14 * 152 | 0) + 144 >> 2] | 0;
11394 HEAP32[i11 >> 2] = i16;
11395 if ((i16 | 0) > 0) {
11396 i17 = 0;
11397 do {
11398 HEAPF32[i6 + (i17 << 2) >> 2] = +HEAPF32[i9 + (i14 * 152 | 0) + (i17 * 36 | 0) + 16 >> 2];
11399 HEAPF32[i6 + (i17 << 2) + 8 >> 2] = +HEAPF32[i9 + (i14 * 152 | 0) + (i17 * 36 | 0) + 20 >> 2];
11400 i17 = i17 + 1 | 0;
11401 } while ((i17 | 0) != (i16 | 0));
11402 }
11403 i30 = HEAP32[i8 >> 2] | 0;
11404 FUNCTION_TABLE_viii[HEAP32[(HEAP32[i30 >> 2] | 0) + 20 >> 2] & 3](i30, i15, i 6);
11405 i14 = i14 + 1 | 0;
11406 } while ((i14 | 0) < (HEAP32[i12 >> 2] | 0));
11407 }
11408 if (!i7) {
11409 __ZN15b2ContactSolverD2Ev(i2);
11410 STACKTOP = i3;
11411 return;
11412 }
11413 i7 = HEAP32[i1 >> 2] | 0;
11414 i6 = (i7 | 0) > 0;
11415 if (i6) {
11416 i8 = HEAP32[i4 + 8 >> 2] | 0;
11417 i9 = 0;
11418 d21 = 3.4028234663852886e+38;
11419 do {
11420 i11 = HEAP32[i8 + (i9 << 2) >> 2] | 0;
11421 do {
11422 if ((HEAP32[i11 >> 2] | 0) != 0) {
11423 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) {
11424 i30 = i11 + 144 | 0;
11425 d23 = d5 + +HEAPF32[i30 >> 2];
11426 HEAPF32[i30 >> 2] = d23;
11427 d21 = d21 < d23 ? d21 : d23;
11428 break;
11429 }
11430 HEAPF32[i11 + 144 >> 2] = 0.0;
11431 d21 = 0.0;
11432 }
11433 } while (0);
11434 i9 = i9 + 1 | 0;
11435 } while ((i9 | 0) < (i7 | 0));
11436 } else {
11437 d21 = 3.4028234663852886e+38;
11438 }
11439 if (!(d21 >= .5) | i10 | i6 ^ 1) {
11440 __ZN15b2ContactSolverD2Ev(i2);
11441 STACKTOP = i3;
11442 return;
11443 }
11444 i4 = i4 + 8 | 0;
11445 i6 = 0;
11446 do {
11447 i30 = HEAP32[(HEAP32[i4 >> 2] | 0) + (i6 << 2) >> 2] | 0;
11448 i22 = i30 + 4 | 0;
11449 HEAP16[i22 >> 1] = HEAP16[i22 >> 1] & 65533;
11450 HEAPF32[i30 + 144 >> 2] = 0.0;
11451 i30 = i30 + 64 | 0;
11452 HEAP32[i30 + 0 >> 2] = 0;
11453 HEAP32[i30 + 4 >> 2] = 0;
11454 HEAP32[i30 + 8 >> 2] = 0;
11455 HEAP32[i30 + 12 >> 2] = 0;
11456 HEAP32[i30 + 16 >> 2] = 0;
11457 HEAP32[i30 + 20 >> 2] = 0;
11458 i6 = i6 + 1 | 0;
11459 } while ((i6 | 0) < (HEAP32[i1 >> 2] | 0));
11460 __ZN15b2ContactSolverD2Ev(i2);
11461 STACKTOP = i3;
11462 return;
11463 }
11464 function __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i4) {
11465 i4 = i4 | 0;
11466 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, d 18 = 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, i3 3 = 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;
11467 i1 = STACKTOP;
11468 i2 = i4 + 48 | 0;
11469 if ((HEAP32[i2 >> 2] | 0) <= 0) {
11470 STACKTOP = i1;
11471 return;
11472 }
11473 i3 = i4 + 40 | 0;
11474 i4 = i4 + 28 | 0;
11475 i42 = HEAP32[i4 >> 2] | 0;
11476 i5 = 0;
11477 L4 : while (1) {
11478 i19 = HEAP32[i3 >> 2] | 0;
11479 i22 = i19 + (i5 * 152 | 0) | 0;
11480 i8 = HEAP32[i19 + (i5 * 152 | 0) + 112 >> 2] | 0;
11481 i6 = HEAP32[i19 + (i5 * 152 | 0) + 116 >> 2] | 0;
11482 d12 = +HEAPF32[i19 + (i5 * 152 | 0) + 120 >> 2];
11483 d10 = +HEAPF32[i19 + (i5 * 152 | 0) + 128 >> 2];
11484 d11 = +HEAPF32[i19 + (i5 * 152 | 0) + 124 >> 2];
11485 d9 = +HEAPF32[i19 + (i5 * 152 | 0) + 132 >> 2];
11486 i32 = i19 + (i5 * 152 | 0) + 144 | 0;
11487 i33 = HEAP32[i32 >> 2] | 0;
11488 i7 = i42 + (i8 * 12 | 0) | 0;
11489 i41 = i7;
11490 d21 = +HEAPF32[i41 >> 2];
11491 d20 = +HEAPF32[i41 + 4 >> 2];
11492 i41 = i42 + (i6 * 12 | 0) | 0;
11493 d14 = +HEAPF32[i41 >> 2];
11494 d13 = +HEAPF32[i41 + 4 >> 2];
11495 i41 = i19 + (i5 * 152 | 0) + 72 | 0;
11496 d17 = +HEAPF32[i41 >> 2];
11497 d16 = +HEAPF32[i41 + 4 >> 2];
11498 d23 = -d17;
11499 d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 136 >> 2];
11500 if ((i33 + -1 | 0) >>> 0 < 2) {
11501 i41 = 0;
11502 d18 = +HEAPF32[i42 + (i8 * 12 | 0) + 8 >> 2];
11503 d15 = +HEAPF32[i42 + (i6 * 12 | 0) + 8 >> 2];
11504 } else {
11505 i2 = 4;
11506 break;
11507 }
11508 do {
11509 d30 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 12 >> 2];
11510 d25 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 8 >> 2];
11511 d26 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 4 >> 2];
11512 d27 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) >> 2];
11513 d34 = d24 * +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 16 >> 2];
11514 i42 = i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 20 | 0;
11515 d28 = +HEAPF32[i42 >> 2];
11516 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) * d2 3);
11517 d29 = -d34;
11518 d31 = d31 < d34 ? d31 : d34;
11519 d40 = d31 < d29 ? d29 : d31;
11520 d39 = d40 - d28;
11521 HEAPF32[i42 >> 2] = d40;
11522 d40 = d16 * d39;
11523 d39 = d39 * d23;
11524 d21 = d21 - d12 * d40;
11525 d20 = d20 - d12 * d39;
11526 d18 = d18 - d10 * (d27 * d39 - d26 * d40);
11527 d14 = d14 + d11 * d40;
11528 d13 = d13 + d11 * d39;
11529 d15 = d15 + d9 * (d25 * d39 - d30 * d40);
11530 i41 = i41 + 1 | 0;
11531 } while ((i41 | 0) != (i33 | 0));
11532 do {
11533 if ((HEAP32[i32 >> 2] | 0) != 1) {
11534 i32 = i19 + (i5 * 152 | 0) + 16 | 0;
11535 d31 = +HEAPF32[i32 >> 2];
11536 i33 = i19 + (i5 * 152 | 0) + 52 | 0;
11537 d34 = +HEAPF32[i33 >> 2];
11538 if (!(d31 >= 0.0) | !(d34 >= 0.0)) {
11539 i2 = 9;
11540 break L4;
11541 }
11542 d23 = +HEAPF32[i19 + (i5 * 152 | 0) + 12 >> 2];
11543 d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 8 >> 2];
11544 d26 = +HEAPF32[i19 + (i5 * 152 | 0) + 4 >> 2];
11545 d30 = +HEAPF32[i22 >> 2];
11546 d27 = +HEAPF32[i19 + (i5 * 152 | 0) + 48 >> 2];
11547 d25 = +HEAPF32[i19 + (i5 * 152 | 0) + 44 >> 2];
11548 d28 = +HEAPF32[i19 + (i5 * 152 | 0) + 40 >> 2];
11549 d29 = +HEAPF32[i19 + (i5 * 152 | 0) + 36 >> 2];
11550 d37 = +HEAPF32[i19 + (i5 * 152 | 0) + 104 >> 2];
11551 d38 = +HEAPF32[i19 + (i5 * 152 | 0) + 100 >> 2];
11552 d35 = d17 * (d14 - d15 * d23 - d21 + d18 * d26) + d16 * (d13 + d15 * d24 - d 20 - d18 * d30) - +HEAPF32[i19 + (i5 * 152 | 0) + 32 >> 2] - (d31 * +HEAPF32[i19 + (i5 * 152 | 0) + 96 >> 2] + d34 * d37);
11553 d36 = d17 * (d14 - d15 * d27 - d21 + d18 * d28) + d16 * (d13 + d15 * d25 - d 20 - d18 * d29) - +HEAPF32[i19 + (i5 * 152 | 0) + 68 >> 2] - (d31 * d38 + d34 * +HEAPF32[i19 + (i5 * 152 | 0) + 108 >> 2]);
11554 d44 = +HEAPF32[i19 + (i5 * 152 | 0) + 80 >> 2] * d35 + +HEAPF32[i19 + (i5 * 152 | 0) + 88 >> 2] * d36;
11555 d43 = d35 * +HEAPF32[i19 + (i5 * 152 | 0) + 84 >> 2] + d36 * +HEAPF32[i19 + (i5 * 152 | 0) + 92 >> 2];
11556 d40 = -d44;
11557 d39 = -d43;
11558 if (!(!(d44 <= -0.0) | !(d43 <= -0.0))) {
11559 d37 = d40 - d31;
11560 d43 = d39 - d34;
11561 d38 = d17 * d37;
11562 d37 = d16 * d37;
11563 d44 = d17 * d43;
11564 d43 = d16 * d43;
11565 d35 = d38 + d44;
11566 d36 = d37 + d43;
11567 HEAPF32[i32 >> 2] = d40;
11568 HEAPF32[i33 >> 2] = d39;
11569 d21 = d21 - d12 * d35;
11570 d20 = d20 - d12 * d36;
11571 d14 = d14 + d11 * d35;
11572 d13 = d13 + d11 * d36;
11573 d18 = d18 - d10 * (d30 * d37 - d26 * d38 + (d29 * d43 - d28 * d44));
11574 d15 = d15 + d9 * (d24 * d37 - d23 * d38 + (d25 * d43 - d27 * d44));
11575 break;
11576 }
11577 d44 = d35 * +HEAPF32[i19 + (i5 * 152 | 0) + 24 >> 2];
11578 d39 = -d44;
11579 if (d44 <= -0.0 ? d36 + d38 * d39 >= 0.0 : 0) {
11580 d38 = d39 - d31;
11581 d43 = 0.0 - d34;
11582 d40 = d17 * d38;
11583 d38 = d16 * d38;
11584 d44 = d17 * d43;
11585 d43 = d16 * d43;
11586 d36 = d44 + d40;
11587 d37 = d43 + d38;
11588 HEAPF32[i32 >> 2] = d39;
11589 HEAPF32[i33 >> 2] = 0.0;
11590 d21 = d21 - d12 * d36;
11591 d20 = d20 - d12 * d37;
11592 d14 = d14 + d11 * d36;
11593 d13 = d13 + d11 * d37;
11594 d18 = d18 - d10 * (d38 * d30 - d40 * d26 + (d43 * d29 - d44 * d28));
11595 d15 = d15 + d9 * (d38 * d24 - d40 * d23 + (d43 * d25 - d44 * d27));
11596 break;
11597 }
11598 d44 = d36 * +HEAPF32[i19 + (i5 * 152 | 0) + 60 >> 2];
11599 d38 = -d44;
11600 if (d44 <= -0.0 ? d35 + d37 * d38 >= 0.0 : 0) {
11601 d39 = 0.0 - d31;
11602 d43 = d38 - d34;
11603 d40 = d17 * d39;
11604 d39 = d16 * d39;
11605 d44 = d17 * d43;
11606 d43 = d16 * d43;
11607 d36 = d40 + d44;
11608 d37 = d39 + d43;
11609 HEAPF32[i32 >> 2] = 0.0;
11610 HEAPF32[i33 >> 2] = d38;
11611 d21 = d21 - d12 * d36;
11612 d20 = d20 - d12 * d37;
11613 d14 = d14 + d11 * d36;
11614 d13 = d13 + d11 * d37;
11615 d18 = d18 - d10 * (d39 * d30 - d40 * d26 + (d43 * d29 - d44 * d28));
11616 d15 = d15 + d9 * (d39 * d24 - d40 * d23 + (d43 * d25 - d44 * d27));
11617 break;
11618 }
11619 if (!(!(d35 >= 0.0) | !(d36 >= 0.0))) {
11620 d39 = 0.0 - d31;
11621 d43 = 0.0 - d34;
11622 d40 = d17 * d39;
11623 d39 = d16 * d39;
11624 d44 = d17 * d43;
11625 d43 = d16 * d43;
11626 d37 = d40 + d44;
11627 d38 = d39 + d43;
11628 HEAPF32[i32 >> 2] = 0.0;
11629 HEAPF32[i33 >> 2] = 0.0;
11630 d21 = d21 - d12 * d37;
11631 d20 = d20 - d12 * d38;
11632 d14 = d14 + d11 * d37;
11633 d13 = d13 + d11 * d38;
11634 d18 = d18 - d10 * (d39 * d30 - d40 * d26 + (d43 * d29 - d44 * d28));
11635 d15 = d15 + d9 * (d39 * d24 - d40 * d23 + (d43 * d25 - d44 * d27));
11636 }
11637 } else {
11638 d23 = +HEAPF32[i19 + (i5 * 152 | 0) + 12 >> 2];
11639 d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 8 >> 2];
11640 d25 = +HEAPF32[i19 + (i5 * 152 | 0) + 4 >> 2];
11641 d26 = +HEAPF32[i22 >> 2];
11642 i22 = i19 + (i5 * 152 | 0) + 16 | 0;
11643 d27 = +HEAPF32[i22 >> 2];
11644 d28 = d27 - +HEAPF32[i19 + (i5 * 152 | 0) + 24 >> 2] * (d17 * (d14 - d15 * d 23 - d21 + d18 * d25) + d16 * (d13 + d15 * d24 - d20 - d18 * d26) - +HEAPF32[i19 + (i5 * 152 | 0) + 32 >> 2]);
11645 d44 = d28 > 0.0 ? d28 : 0.0;
11646 d43 = d44 - d27;
11647 HEAPF32[i22 >> 2] = d44;
11648 d44 = d17 * d43;
11649 d43 = d16 * d43;
11650 d21 = d21 - d12 * d44;
11651 d20 = d20 - d12 * d43;
11652 d14 = d14 + d11 * d44;
11653 d13 = d13 + d11 * d43;
11654 d18 = d18 - d10 * (d26 * d43 - d25 * d44);
11655 d15 = d15 + d9 * (d24 * d43 - d23 * d44);
11656 }
11657 } while (0);
11658 d44 = +d21;
11659 d43 = +d20;
11660 i42 = i7;
11661 HEAPF32[i42 >> 2] = d44;
11662 HEAPF32[i42 + 4 >> 2] = d43;
11663 i42 = HEAP32[i4 >> 2] | 0;
11664 HEAPF32[i42 + (i8 * 12 | 0) + 8 >> 2] = d18;
11665 d43 = +d14;
11666 d44 = +d13;
11667 i42 = i42 + (i6 * 12 | 0) | 0;
11668 HEAPF32[i42 >> 2] = d43;
11669 HEAPF32[i42 + 4 >> 2] = d44;
11670 i42 = HEAP32[i4 >> 2] | 0;
11671 HEAPF32[i42 + (i6 * 12 | 0) + 8 >> 2] = d15;
11672 i5 = i5 + 1 | 0;
11673 if ((i5 | 0) >= (HEAP32[i2 >> 2] | 0)) {
11674 i2 = 21;
11675 break;
11676 }
11677 }
11678 if ((i2 | 0) == 4) {
11679 ___assert_fail(6648, 6520, 311, 6688);
11680 } else if ((i2 | 0) == 9) {
11681 ___assert_fail(6720, 6520, 406, 6688);
11682 } else if ((i2 | 0) == 21) {
11683 STACKTOP = i1;
11684 return;
11685 }
11686 }
11687 function __Z14b2TimeOfImpactP11b2TOIOutputPK10b2TOIInput(i3, i11) {
11688 i3 = i3 | 0;
11689 i11 = i11 | 0;
11690 var i1 = 0, i2 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i1 2 = 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, d4 6 = 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;
11691 i1 = STACKTOP;
11692 STACKTOP = STACKTOP + 320 | 0;
11693 i12 = i1 + 276 | 0;
11694 i10 = i1 + 240 | 0;
11695 i13 = i1 + 228 | 0;
11696 i5 = i1 + 136 | 0;
11697 i7 = i1 + 112 | 0;
11698 i8 = i1 + 8 | 0;
11699 i9 = i1 + 4 | 0;
11700 i4 = i1;
11701 HEAP32[874] = (HEAP32[874] | 0) + 1;
11702 HEAP32[i3 >> 2] = 0;
11703 i19 = i11 + 128 | 0;
11704 i2 = i3 + 4 | 0;
11705 HEAPF32[i2 >> 2] = +HEAPF32[i19 >> 2];
11706 i6 = i11 + 28 | 0;
11707 i16 = i12 + 0 | 0;
11708 i15 = i11 + 56 | 0;
11709 i17 = i16 + 36 | 0;
11710 do {
11711 HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
11712 i16 = i16 + 4 | 0;
11713 i15 = i15 + 4 | 0;
11714 } while ((i16 | 0) < (i17 | 0));
11715 i16 = i10 + 0 | 0;
11716 i15 = i11 + 92 | 0;
11717 i17 = i16 + 36 | 0;
11718 do {
11719 HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
11720 i16 = i16 + 4 | 0;
11721 i15 = i15 + 4 | 0;
11722 } while ((i16 | 0) < (i17 | 0));
11723 i15 = i12 + 24 | 0;
11724 d42 = +HEAPF32[i15 >> 2];
11725 d43 = +Math_floor(+(d42 / 6.2831854820251465)) * 6.2831854820251465;
11726 d42 = d42 - d43;
11727 HEAPF32[i15 >> 2] = d42;
11728 i16 = i12 + 28 | 0;
11729 d43 = +HEAPF32[i16 >> 2] - d43;
11730 HEAPF32[i16 >> 2] = d43;
11731 i17 = i10 + 24 | 0;
11732 d46 = +HEAPF32[i17 >> 2];
11733 d40 = +Math_floor(+(d46 / 6.2831854820251465)) * 6.2831854820251465;
11734 d46 = d46 - d40;
11735 HEAPF32[i17 >> 2] = d46;
11736 i18 = i10 + 28 | 0;
11737 d40 = +HEAPF32[i18 >> 2] - d40;
11738 HEAPF32[i18 >> 2] = d40;
11739 d14 = +HEAPF32[i19 >> 2];
11740 d28 = +HEAPF32[i11 + 24 >> 2] + +HEAPF32[i11 + 52 >> 2] + -.014999999664723873;
11741 d28 = d28 < .004999999888241291 ? .004999999888241291 : d28;
11742 if (!(d28 > .0012499999720603228)) {
11743 ___assert_fail(3536, 3560, 280, 3600);
11744 }
11745 HEAP16[i13 + 4 >> 1] = 0;
11746 HEAP32[i5 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
11747 HEAP32[i5 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
11748 HEAP32[i5 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
11749 HEAP32[i5 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
11750 HEAP32[i5 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
11751 HEAP32[i5 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
11752 HEAP32[i5 + 24 >> 2] = HEAP32[i11 + 24 >> 2];
11753 i38 = i5 + 28 | 0;
11754 HEAP32[i38 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
11755 HEAP32[i38 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
11756 HEAP32[i38 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
11757 HEAP32[i38 + 12 >> 2] = HEAP32[i6 + 12 >> 2];
11758 HEAP32[i38 + 16 >> 2] = HEAP32[i6 + 16 >> 2];
11759 HEAP32[i38 + 20 >> 2] = HEAP32[i6 + 20 >> 2];
11760 HEAP32[i38 + 24 >> 2] = HEAP32[i6 + 24 >> 2];
11761 HEAP8[i5 + 88 | 0] = 0;
11762 i38 = i12 + 8 | 0;
11763 i27 = i12 + 12 | 0;
11764 i29 = i12 + 16 | 0;
11765 i22 = i12 + 20 | 0;
11766 i32 = i12 + 4 | 0;
11767 i34 = i10 + 8 | 0;
11768 i36 = i10 + 12 | 0;
11769 i35 = i10 + 16 | 0;
11770 i37 = i10 + 20 | 0;
11771 i33 = i10 + 4 | 0;
11772 i26 = i5 + 56 | 0;
11773 i25 = i5 + 64 | 0;
11774 i24 = i5 + 68 | 0;
11775 i23 = i5 + 72 | 0;
11776 i20 = i5 + 80 | 0;
11777 i19 = i5 + 84 | 0;
11778 i21 = i7 + 16 | 0;
11779 d30 = d28 + .0012499999720603228;
11780 d31 = d28 + -.0012499999720603228;
11781 d48 = d40;
11782 i39 = 0;
11783 d40 = 0.0;
11784 L4 : while (1) {
11785 d56 = 1.0 - d40;
11786 d49 = d56 * d42 + d40 * d43;
11787 d43 = +Math_sin(+d49);
11788 d49 = +Math_cos(+d49);
11789 d55 = +HEAPF32[i12 >> 2];
11790 d54 = +HEAPF32[i32 >> 2];
11791 d42 = d56 * d46 + d40 * d48;
11792 d53 = +Math_sin(+d42);
11793 d42 = +Math_cos(+d42);
11794 d46 = +HEAPF32[i10 >> 2];
11795 d51 = +HEAPF32[i33 >> 2];
11796 d50 = d56 * +HEAPF32[i34 >> 2] + d40 * +HEAPF32[i35 >> 2] - (d42 * d46 - d53 * d51);
11797 d51 = d56 * +HEAPF32[i36 >> 2] + d40 * +HEAPF32[i37 >> 2] - (d53 * d46 + d42 * d51);
11798 d46 = +(d56 * +HEAPF32[i38 >> 2] + d40 * +HEAPF32[i29 >> 2] - (d49 * d55 - d43 * d54));
11799 d48 = +(d56 * +HEAPF32[i27 >> 2] + d40 * +HEAPF32[i22 >> 2] - (d43 * d55 + d49 * d54));
11800 i52 = i26;
11801 HEAPF32[i52 >> 2] = d46;
11802 HEAPF32[i52 + 4 >> 2] = d48;
11803 HEAPF32[i25 >> 2] = d43;
11804 HEAPF32[i24 >> 2] = d49;
11805 d50 = +d50;
11806 d51 = +d51;
11807 i52 = i23;
11808 HEAPF32[i52 >> 2] = d50;
11809 HEAPF32[i52 + 4 >> 2] = d51;
11810 HEAPF32[i20 >> 2] = d53;
11811 HEAPF32[i19 >> 2] = d42;
11812 __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i7, i13 , i5);
11813 d42 = +HEAPF32[i21 >> 2];
11814 if (d42 <= 0.0) {
11815 i4 = 5;
11816 break;
11817 }
11818 if (d42 < d30) {
11819 i4 = 7;
11820 break;
11821 }
11822 +__ZN20b2SeparationFunction10InitializeEPK14b2SimplexCachePK15b2DistanceProxyR K7b2SweepS5_S8_f(i8, i13, i11, i12, i6, i10, d40);
11823 i41 = 0;
11824 d42 = d14;
11825 do {
11826 d50 = +__ZNK20b2SeparationFunction17FindMinSeparationEPiS0_f(i8, i9, i4, d42) ;
11827 if (d50 > d30) {
11828 i4 = 10;
11829 break L4;
11830 }
11831 if (d50 > d31) {
11832 d40 = d42;
11833 break;
11834 }
11835 i45 = HEAP32[i9 >> 2] | 0;
11836 i44 = HEAP32[i4 >> 2] | 0;
11837 d48 = +__ZNK20b2SeparationFunction8EvaluateEiif(i8, i45, i44, d40);
11838 if (d48 < d31) {
11839 i4 = 13;
11840 break L4;
11841 }
11842 if (!(d48 <= d30)) {
11843 d43 = d40;
11844 d46 = d42;
11845 i47 = 0;
11846 } else {
11847 i4 = 15;
11848 break L4;
11849 }
11850 while (1) {
11851 if ((i47 & 1 | 0) == 0) {
11852 d49 = (d43 + d46) * .5;
11853 } else {
11854 d49 = d43 + (d28 - d48) * (d46 - d43) / (d50 - d48);
11855 }
11856 d51 = +__ZNK20b2SeparationFunction8EvaluateEiif(i8, i45, i44, d49);
11857 d53 = d51 - d28;
11858 if (!(d53 > 0.0)) {
11859 d53 = -d53;
11860 }
11861 if (d53 < .0012499999720603228) {
11862 d42 = d49;
11863 break;
11864 }
11865 i52 = d51 > d28;
11866 i47 = i47 + 1 | 0;
11867 HEAP32[880] = (HEAP32[880] | 0) + 1;
11868 if ((i47 | 0) == 50) {
11869 i47 = 50;
11870 break;
11871 } else {
11872 d43 = i52 ? d49 : d43;
11873 d46 = i52 ? d46 : d49;
11874 d48 = i52 ? d51 : d48;
11875 d50 = i52 ? d50 : d51;
11876 }
11877 }
11878 i44 = HEAP32[882] | 0;
11879 HEAP32[882] = (i44 | 0) > (i47 | 0) ? i44 : i47;
11880 i41 = i41 + 1 | 0;
11881 } while ((i41 | 0) != 8);
11882 i39 = i39 + 1 | 0;
11883 HEAP32[876] = (HEAP32[876] | 0) + 1;
11884 if ((i39 | 0) == 20) {
11885 i4 = 27;
11886 break;
11887 }
11888 d42 = +HEAPF32[i15 >> 2];
11889 d43 = +HEAPF32[i16 >> 2];
11890 d46 = +HEAPF32[i17 >> 2];
11891 d48 = +HEAPF32[i18 >> 2];
11892 }
11893 if ((i4 | 0) == 5) {
11894 HEAP32[i3 >> 2] = 2;
11895 HEAPF32[i2 >> 2] = 0.0;
11896 i2 = HEAP32[878] | 0;
11897 i52 = (i2 | 0) > (i39 | 0);
11898 i52 = i52 ? i2 : i39;
11899 HEAP32[878] = i52;
11900 STACKTOP = i1;
11901 return;
11902 } else if ((i4 | 0) == 7) {
11903 HEAP32[i3 >> 2] = 3;
11904 HEAPF32[i2 >> 2] = d40;
11905 i2 = HEAP32[878] | 0;
11906 i52 = (i2 | 0) > (i39 | 0);
11907 i52 = i52 ? i2 : i39;
11908 HEAP32[878] = i52;
11909 STACKTOP = i1;
11910 return;
11911 } else if ((i4 | 0) == 10) {
11912 HEAP32[i3 >> 2] = 4;
11913 HEAPF32[i2 >> 2] = d14;
11914 } else if ((i4 | 0) == 13) {
11915 HEAP32[i3 >> 2] = 1;
11916 HEAPF32[i2 >> 2] = d40;
11917 } else if ((i4 | 0) == 15) {
11918 HEAP32[i3 >> 2] = 3;
11919 HEAPF32[i2 >> 2] = d40;
11920 } else if ((i4 | 0) == 27) {
11921 HEAP32[i3 >> 2] = 1;
11922 HEAPF32[i2 >> 2] = d40;
11923 i39 = 20;
11924 i2 = HEAP32[878] | 0;
11925 i52 = (i2 | 0) > (i39 | 0);
11926 i52 = i52 ? i2 : i39;
11927 HEAP32[878] = i52;
11928 STACKTOP = i1;
11929 return;
11930 }
11931 HEAP32[876] = (HEAP32[876] | 0) + 1;
11932 i39 = i39 + 1 | 0;
11933 i2 = HEAP32[878] | 0;
11934 i52 = (i2 | 0) > (i39 | 0);
11935 i52 = i52 ? i2 : i39;
11936 HEAP32[878] = i52;
11937 STACKTOP = i1;
11938 return;
11939 }
11940 function __ZN7b2World5SolveERK10b2TimeStep(i5, i15) {
11941 i5 = i5 | 0;
11942 i15 = i15 | 0;
11943 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i1 1 = 0, i12 = 0, i13 = 0, i14 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i 21 = 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;
11944 i3 = STACKTOP;
11945 STACKTOP = STACKTOP + 96 | 0;
11946 i4 = i3 + 32 | 0;
11947 i9 = i3;
11948 i2 = i3 + 84 | 0;
11949 i11 = i5 + 103008 | 0;
11950 HEAPF32[i11 >> 2] = 0.0;
11951 i14 = i5 + 103012 | 0;
11952 HEAPF32[i14 >> 2] = 0.0;
11953 i8 = i5 + 103016 | 0;
11954 HEAPF32[i8 >> 2] = 0.0;
11955 i16 = i5 + 102960 | 0;
11956 i1 = i5 + 102872 | 0;
11957 i6 = i5 + 68 | 0;
11958 __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i4, HEAP32[i16 >> 2] | 0, HEAP32[i5 + 102936 >> 2] | 0, HEAP32[i5 + 102964 >> 2] | 0, i6, HEAP32[i5 + 102944 >> 2] | 0);
11959 i7 = i5 + 102952 | 0;
11960 i17 = HEAP32[i7 >> 2] | 0;
11961 if ((i17 | 0) != 0) {
11962 do {
11963 i38 = i17 + 4 | 0;
11964 HEAP16[i38 >> 1] = HEAP16[i38 >> 1] & 65534;
11965 i17 = HEAP32[i17 + 96 >> 2] | 0;
11966 } while ((i17 | 0) != 0);
11967 }
11968 i17 = HEAP32[i5 + 102932 >> 2] | 0;
11969 if ((i17 | 0) != 0) {
11970 do {
11971 i38 = i17 + 4 | 0;
11972 HEAP32[i38 >> 2] = HEAP32[i38 >> 2] & -2;
11973 i17 = HEAP32[i17 + 12 >> 2] | 0;
11974 } while ((i17 | 0) != 0);
11975 }
11976 i17 = HEAP32[i5 + 102956 >> 2] | 0;
11977 if ((i17 | 0) != 0) {
11978 do {
11979 HEAP8[i17 + 60 | 0] = 0;
11980 i17 = HEAP32[i17 + 12 >> 2] | 0;
11981 } while ((i17 | 0) != 0);
11982 }
11983 i24 = HEAP32[i16 >> 2] | 0;
11984 i16 = __ZN16b2StackAllocator8AllocateEi(i6, i24 << 2) | 0;
11985 i32 = HEAP32[i7 >> 2] | 0;
11986 L13 : do {
11987 if ((i32 | 0) != 0) {
11988 i18 = i4 + 28 | 0;
11989 i30 = i4 + 36 | 0;
11990 i27 = i4 + 32 | 0;
11991 i17 = i4 + 40 | 0;
11992 i23 = i4 + 8 | 0;
11993 i29 = i4 + 48 | 0;
11994 i28 = i4 + 16 | 0;
11995 i26 = i4 + 44 | 0;
11996 i31 = i4 + 12 | 0;
11997 i25 = i5 + 102968 | 0;
11998 i22 = i5 + 102976 | 0;
11999 i21 = i9 + 12 | 0;
12000 i20 = i9 + 16 | 0;
12001 i19 = i9 + 20 | 0;
12002 L15 : while (1) {
12003 i33 = i32 + 4 | 0;
12004 i34 = HEAP16[i33 >> 1] | 0;
12005 if ((i34 & 35) == 34 ? (HEAP32[i32 >> 2] | 0) != 0 : 0) {
12006 HEAP32[i18 >> 2] = 0;
12007 HEAP32[i30 >> 2] = 0;
12008 HEAP32[i27 >> 2] = 0;
12009 HEAP32[i16 >> 2] = i32;
12010 HEAP16[i33 >> 1] = i34 & 65535 | 1;
12011 i35 = 1;
12012 do {
12013 i35 = i35 + -1 | 0;
12014 i33 = HEAP32[i16 + (i35 << 2) >> 2] | 0;
12015 i34 = i33 + 4 | 0;
12016 i36 = HEAP16[i34 >> 1] | 0;
12017 if ((i36 & 32) == 0) {
12018 i8 = 13;
12019 break L15;
12020 }
12021 i37 = HEAP32[i18 >> 2] | 0;
12022 if ((i37 | 0) >= (HEAP32[i17 >> 2] | 0)) {
12023 i8 = 15;
12024 break L15;
12025 }
12026 HEAP32[i33 + 8 >> 2] = i37;
12027 i38 = HEAP32[i18 >> 2] | 0;
12028 HEAP32[(HEAP32[i23 >> 2] | 0) + (i38 << 2) >> 2] = i33;
12029 HEAP32[i18 >> 2] = i38 + 1;
12030 i36 = i36 & 65535;
12031 if ((i36 & 2 | 0) == 0) {
12032 HEAP16[i34 >> 1] = i36 | 2;
12033 HEAPF32[i33 + 144 >> 2] = 0.0;
12034 }
12035 if ((HEAP32[i33 >> 2] | 0) != 0) {
12036 i34 = HEAP32[i33 + 112 >> 2] | 0;
12037 if ((i34 | 0) != 0) {
12038 do {
12039 i38 = HEAP32[i34 + 4 >> 2] | 0;
12040 i36 = i38 + 4 | 0;
12041 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) {
12042 i37 = HEAP32[i30 >> 2] | 0;
12043 if ((i37 | 0) >= (HEAP32[i26 >> 2] | 0)) {
12044 i8 = 25;
12045 break L15;
12046 }
12047 HEAP32[i30 >> 2] = i37 + 1;
12048 HEAP32[(HEAP32[i31 >> 2] | 0) + (i37 << 2) >> 2] = i38;
12049 HEAP32[i36 >> 2] = HEAP32[i36 >> 2] | 1;
12050 i38 = HEAP32[i34 >> 2] | 0;
12051 i36 = i38 + 4 | 0;
12052 i37 = HEAP16[i36 >> 1] | 0;
12053 if ((i37 & 1) == 0) {
12054 if ((i35 | 0) >= (i24 | 0)) {
12055 i8 = 28;
12056 break L15;
12057 }
12058 HEAP32[i16 + (i35 << 2) >> 2] = i38;
12059 HEAP16[i36 >> 1] = i37 & 65535 | 1;
12060 i35 = i35 + 1 | 0;
12061 }
12062 }
12063 i34 = HEAP32[i34 + 12 >> 2] | 0;
12064 } while ((i34 | 0) != 0);
12065 }
12066 i33 = HEAP32[i33 + 108 >> 2] | 0;
12067 if ((i33 | 0) != 0) {
12068 do {
12069 i37 = i33 + 4 | 0;
12070 i36 = HEAP32[i37 >> 2] | 0;
12071 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) {
12072 i34 = HEAP32[i27 >> 2] | 0;
12073 if ((i34 | 0) >= (HEAP32[i29 >> 2] | 0)) {
12074 i8 = 35;
12075 break L15;
12076 }
12077 HEAP32[i27 >> 2] = i34 + 1;
12078 HEAP32[(HEAP32[i28 >> 2] | 0) + (i34 << 2) >> 2] = i36;
12079 HEAP8[(HEAP32[i37 >> 2] | 0) + 60 | 0] = 1;
12080 if ((i12 & 1) == 0) {
12081 if ((i35 | 0) >= (i24 | 0)) {
12082 i8 = 38;
12083 break L15;
12084 }
12085 HEAP32[i16 + (i35 << 2) >> 2] = i10;
12086 HEAP16[i13 >> 1] = i12 & 65535 | 1;
12087 i35 = i35 + 1 | 0;
12088 }
12089 }
12090 i33 = HEAP32[i33 + 12 >> 2] | 0;
12091 } while ((i33 | 0) != 0);
12092 }
12093 }
12094 } while ((i35 | 0) > 0);
12095 __ZN8b2Island5SolveEP9b2ProfileRK10b2TimeStepRK6b2Vec2b(i4, i9, i15, i25, ( HEAP8[i22] | 0) != 0);
12096 HEAPF32[i11 >> 2] = +HEAPF32[i21 >> 2] + +HEAPF32[i11 >> 2];
12097 HEAPF32[i14 >> 2] = +HEAPF32[i20 >> 2] + +HEAPF32[i14 >> 2];
12098 HEAPF32[i8 >> 2] = +HEAPF32[i19 >> 2] + +HEAPF32[i8 >> 2];
12099 i35 = HEAP32[i18 >> 2] | 0;
12100 if ((i35 | 0) > 0) {
12101 i33 = HEAP32[i23 >> 2] | 0;
12102 i36 = 0;
12103 do {
12104 i34 = HEAP32[i33 + (i36 << 2) >> 2] | 0;
12105 if ((HEAP32[i34 >> 2] | 0) == 0) {
12106 i38 = i34 + 4 | 0;
12107 HEAP16[i38 >> 1] = HEAP16[i38 >> 1] & 65534;
12108 }
12109 i36 = i36 + 1 | 0;
12110 } while ((i36 | 0) < (i35 | 0));
12111 }
12112 }
12113 i32 = HEAP32[i32 + 96 >> 2] | 0;
12114 if ((i32 | 0) == 0) {
12115 break L13;
12116 }
12117 }
12118 if ((i8 | 0) == 13) {
12119 ___assert_fail(2232, 2184, 445, 2256);
12120 } else if ((i8 | 0) == 15) {
12121 ___assert_fail(2520, 2440, 54, 2472);
12122 } else if ((i8 | 0) == 25) {
12123 ___assert_fail(2480, 2440, 62, 2472);
12124 } else if ((i8 | 0) == 28) {
12125 ___assert_fail(2264, 2184, 495, 2256);
12126 } else if ((i8 | 0) == 35) {
12127 ___assert_fail(2408, 2440, 68, 2472);
12128 } else if ((i8 | 0) == 38) {
12129 ___assert_fail(2264, 2184, 524, 2256);
12130 }
12131 }
12132 } while (0);
12133 __ZN16b2StackAllocator4FreeEPv(i6, i16);
12134 __ZN7b2TimerC2Ev(i2);
12135 i6 = HEAP32[i7 >> 2] | 0;
12136 if ((i6 | 0) == 0) {
12137 __ZN16b2ContactManager15FindNewContactsEv(i1);
12138 d39 = +__ZNK7b2Timer15GetMillisecondsEv(i2);
12139 i38 = i5 + 103020 | 0;
12140 HEAPF32[i38 >> 2] = d39;
12141 __ZN8b2IslandD2Ev(i4);
12142 STACKTOP = i3;
12143 return;
12144 }
12145 do {
12146 if (!((HEAP16[i6 + 4 >> 1] & 1) == 0) ? (HEAP32[i6 >> 2] | 0) != 0 : 0) {
12147 __ZN6b2Body19SynchronizeFixturesEv(i6);
12148 }
12149 i6 = HEAP32[i6 + 96 >> 2] | 0;
12150 } while ((i6 | 0) != 0);
12151 __ZN16b2ContactManager15FindNewContactsEv(i1);
12152 d39 = +__ZNK7b2Timer15GetMillisecondsEv(i2);
12153 i38 = i5 + 103020 | 0;
12154 HEAPF32[i38 >> 2] = d39;
12155 __ZN8b2IslandD2Ev(i4);
12156 STACKTOP = i3;
12157 return;
12158 }
12159 function __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i10) {
12160 i10 = i10 | 0;
12161 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, i5 0 = 0;
12162 i1 = STACKTOP;
12163 STACKTOP = STACKTOP + 64 | 0;
12164 i8 = i1 + 40 | 0;
12165 i3 = i1 + 24 | 0;
12166 i5 = i1;
12167 i4 = i10 + 48 | 0;
12168 if ((HEAP32[i4 >> 2] | 0) <= 0) {
12169 STACKTOP = i1;
12170 return;
12171 }
12172 i9 = i10 + 40 | 0;
12173 i2 = i10 + 36 | 0;
12174 i7 = i10 + 44 | 0;
12175 i6 = i10 + 24 | 0;
12176 i13 = i10 + 28 | 0;
12177 i14 = i8 + 8 | 0;
12178 i12 = i8 + 12 | 0;
12179 i11 = i3 + 8 | 0;
12180 i10 = i3 + 12 | 0;
12181 i16 = 0;
12182 while (1) {
12183 i15 = HEAP32[i9 >> 2] | 0;
12184 i33 = HEAP32[i2 >> 2] | 0;
12185 i31 = HEAP32[(HEAP32[i7 >> 2] | 0) + (HEAP32[i15 + (i16 * 152 | 0) + 148 >> 2] << 2) >> 2] | 0;
12186 i35 = HEAP32[i15 + (i16 * 152 | 0) + 112 >> 2] | 0;
12187 i42 = HEAP32[i15 + (i16 * 152 | 0) + 116 >> 2] | 0;
12188 d30 = +HEAPF32[i15 + (i16 * 152 | 0) + 120 >> 2];
12189 d24 = +HEAPF32[i15 + (i16 * 152 | 0) + 124 >> 2];
12190 d17 = +HEAPF32[i15 + (i16 * 152 | 0) + 128 >> 2];
12191 d18 = +HEAPF32[i15 + (i16 * 152 | 0) + 132 >> 2];
12192 i36 = i33 + (i16 * 88 | 0) + 48 | 0;
12193 d39 = +HEAPF32[i36 >> 2];
12194 d40 = +HEAPF32[i36 + 4 >> 2];
12195 i36 = i33 + (i16 * 88 | 0) + 56 | 0;
12196 d41 = +HEAPF32[i36 >> 2];
12197 d43 = +HEAPF32[i36 + 4 >> 2];
12198 i36 = HEAP32[i6 >> 2] | 0;
12199 i37 = i36 + (i35 * 12 | 0) | 0;
12200 d26 = +HEAPF32[i37 >> 2];
12201 d27 = +HEAPF32[i37 + 4 >> 2];
12202 d32 = +HEAPF32[i36 + (i35 * 12 | 0) + 8 >> 2];
12203 i37 = HEAP32[i13 >> 2] | 0;
12204 i34 = i37 + (i35 * 12 | 0) | 0;
12205 d22 = +HEAPF32[i34 >> 2];
12206 d25 = +HEAPF32[i34 + 4 >> 2];
12207 d23 = +HEAPF32[i37 + (i35 * 12 | 0) + 8 >> 2];
12208 i35 = i36 + (i42 * 12 | 0) | 0;
12209 d28 = +HEAPF32[i35 >> 2];
12210 d29 = +HEAPF32[i35 + 4 >> 2];
12211 d38 = +HEAPF32[i36 + (i42 * 12 | 0) + 8 >> 2];
12212 i36 = i37 + (i42 * 12 | 0) | 0;
12213 d20 = +HEAPF32[i36 >> 2];
12214 d19 = +HEAPF32[i36 + 4 >> 2];
12215 d21 = +HEAPF32[i37 + (i42 * 12 | 0) + 8 >> 2];
12216 if ((HEAP32[i31 + 124 >> 2] | 0) <= 0) {
12217 i2 = 4;
12218 break;
12219 }
12220 d44 = +HEAPF32[i33 + (i16 * 88 | 0) + 80 >> 2];
12221 d45 = +HEAPF32[i33 + (i16 * 88 | 0) + 76 >> 2];
12222 d47 = +Math_sin(+d32);
12223 HEAPF32[i14 >> 2] = d47;
12224 d48 = +Math_cos(+d32);
12225 HEAPF32[i12 >> 2] = d48;
12226 d32 = +Math_sin(+d38);
12227 HEAPF32[i11 >> 2] = d32;
12228 d38 = +Math_cos(+d38);
12229 HEAPF32[i10 >> 2] = d38;
12230 d46 = +(d26 - (d39 * d48 - d40 * d47));
12231 d40 = +(d27 - (d40 * d48 + d39 * d47));
12232 i37 = i8;
12233 HEAPF32[i37 >> 2] = d46;
12234 HEAPF32[i37 + 4 >> 2] = d40;
12235 d40 = +(d28 - (d41 * d38 - d43 * d32));
12236 d43 = +(d29 - (d43 * d38 + d41 * d32));
12237 i37 = i3;
12238 HEAPF32[i37 >> 2] = d40;
12239 HEAPF32[i37 + 4 >> 2] = d43;
12240 __ZN15b2WorldManifold10InitializeEPK10b2ManifoldRK11b2TransformfS5_f(i5, i31 + 64 | 0, i8, d45, i3, d44);
12241 i37 = i15 + (i16 * 152 | 0) + 72 | 0;
12242 i42 = i5;
12243 i33 = HEAP32[i42 + 4 >> 2] | 0;
12244 i31 = i37;
12245 HEAP32[i31 >> 2] = HEAP32[i42 >> 2];
12246 HEAP32[i31 + 4 >> 2] = i33;
12247 i31 = i15 + (i16 * 152 | 0) + 144 | 0;
12248 i33 = HEAP32[i31 >> 2] | 0;
12249 do {
12250 if ((i33 | 0) > 0) {
12251 i36 = i15 + (i16 * 152 | 0) + 76 | 0;
12252 d32 = d30 + d24;
12253 i35 = i15 + (i16 * 152 | 0) + 140 | 0;
12254 i34 = 0;
12255 do {
12256 i49 = i5 + (i34 << 3) + 8 | 0;
12257 d41 = +HEAPF32[i49 >> 2] - d26;
12258 i42 = i5 + (i34 << 3) + 12 | 0;
12259 d39 = +d41;
12260 d40 = +(+HEAPF32[i42 >> 2] - d27);
12261 i50 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) | 0;
12262 HEAPF32[i50 >> 2] = d39;
12263 HEAPF32[i50 + 4 >> 2] = d40;
12264 d40 = +HEAPF32[i49 >> 2] - d28;
12265 d39 = +d40;
12266 d47 = +(+HEAPF32[i42 >> 2] - d29);
12267 i42 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 8 | 0;
12268 HEAPF32[i42 >> 2] = d39;
12269 HEAPF32[i42 + 4 >> 2] = d47;
12270 d47 = +HEAPF32[i36 >> 2];
12271 d39 = +HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 4 >> 2];
12272 d43 = +HEAPF32[i37 >> 2];
12273 d48 = d41 * d47 - d39 * d43;
12274 d38 = +HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 12 >> 2];
12275 d43 = d47 * d40 - d43 * d38;
12276 d43 = d32 + d48 * d17 * d48 + d43 * d18 * d43;
12277 if (d43 > 0.0) {
12278 d43 = 1.0 / d43;
12279 } else {
12280 d43 = 0.0;
12281 }
12282 HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 24 >> 2] = d43;
12283 d43 = +HEAPF32[i36 >> 2];
12284 d47 = -+HEAPF32[i37 >> 2];
12285 d48 = d41 * d47 - d43 * d39;
12286 d43 = d40 * d47 - d43 * d38;
12287 d43 = d32 + d48 * d17 * d48 + d43 * d18 * d43;
12288 if (d43 > 0.0) {
12289 d43 = 1.0 / d43;
12290 } else {
12291 d43 = 0.0;
12292 }
12293 HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 28 >> 2] = d43;
12294 i42 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 32 | 0;
12295 HEAPF32[i42 >> 2] = 0.0;
12296 d38 = +HEAPF32[i37 >> 2] * (d20 - d21 * d38 - d22 + d23 * d39) + +HEAPF32[i 36 >> 2] * (d19 + d21 * d40 - d25 - d23 * d41);
12297 if (d38 < -1.0) {
12298 HEAPF32[i42 >> 2] = -(d38 * +HEAPF32[i35 >> 2]);
12299 }
12300 i34 = i34 + 1 | 0;
12301 } while ((i34 | 0) != (i33 | 0));
12302 if ((HEAP32[i31 >> 2] | 0) == 2) {
12303 d45 = +HEAPF32[i15 + (i16 * 152 | 0) + 76 >> 2];
12304 d20 = +HEAPF32[i37 >> 2];
12305 d44 = +HEAPF32[i15 + (i16 * 152 | 0) >> 2] * d45 - +HEAPF32[i15 + (i16 * 15 2 | 0) + 4 >> 2] * d20;
12306 d19 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 8 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 12 >> 2];
12307 d47 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 36 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 40 >> 2];
12308 d20 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 44 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 48 >> 2];
12309 d45 = d30 + d24;
12310 d46 = d17 * d44;
12311 d48 = d18 * d19;
12312 d19 = d45 + d44 * d46 + d19 * d48;
12313 d18 = d45 + d47 * d17 * d47 + d20 * d18 * d20;
12314 d17 = d45 + d46 * d47 + d48 * d20;
12315 d20 = d19 * d18 - d17 * d17;
12316 if (!(d19 * d19 < d20 * 1.0e3)) {
12317 HEAP32[i31 >> 2] = 1;
12318 break;
12319 }
12320 HEAPF32[i15 + (i16 * 152 | 0) + 96 >> 2] = d19;
12321 HEAPF32[i15 + (i16 * 152 | 0) + 100 >> 2] = d17;
12322 HEAPF32[i15 + (i16 * 152 | 0) + 104 >> 2] = d17;
12323 HEAPF32[i15 + (i16 * 152 | 0) + 108 >> 2] = d18;
12324 if (d20 != 0.0) {
12325 d20 = 1.0 / d20;
12326 }
12327 d48 = -(d20 * d17);
12328 HEAPF32[i15 + (i16 * 152 | 0) + 80 >> 2] = d18 * d20;
12329 HEAPF32[i15 + (i16 * 152 | 0) + 84 >> 2] = d48;
12330 HEAPF32[i15 + (i16 * 152 | 0) + 88 >> 2] = d48;
12331 HEAPF32[i15 + (i16 * 152 | 0) + 92 >> 2] = d19 * d20;
12332 }
12333 }
12334 } while (0);
12335 i16 = i16 + 1 | 0;
12336 if ((i16 | 0) >= (HEAP32[i4 >> 2] | 0)) {
12337 i2 = 21;
12338 break;
12339 }
12340 }
12341 if ((i2 | 0) == 4) {
12342 ___assert_fail(6584, 6520, 168, 6616);
12343 } else if ((i2 | 0) == 21) {
12344 STACKTOP = i1;
12345 return;
12346 }
12347 }
12348 function __Z17b2CollidePolygonsP10b2ManifoldPK14b2PolygonShapeRK11b2TransformS3_ S6_(i5, i27, i28, i24, i14) {
12349 i5 = i5 | 0;
12350 i27 = i27 | 0;
12351 i28 = i28 | 0;
12352 i24 = i24 | 0;
12353 i14 = i14 | 0;
12354 var i1 = 0, i2 = 0, d3 = 0.0, i4 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, i 10 = 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;
12355 i1 = STACKTOP;
12356 STACKTOP = STACKTOP + 96 | 0;
12357 i17 = i1 + 92 | 0;
12358 i20 = i1 + 88 | 0;
12359 i13 = i1;
12360 i11 = i1 + 80 | 0;
12361 i12 = i1 + 56 | 0;
12362 i4 = i1 + 32 | 0;
12363 i10 = i1 + 24 | 0;
12364 i2 = i5 + 60 | 0;
12365 HEAP32[i2 >> 2] = 0;
12366 d3 = +HEAPF32[i27 + 8 >> 2] + +HEAPF32[i24 + 8 >> 2];
12367 HEAP32[i17 >> 2] = 0;
12368 d7 = +__ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i17, i 27, i28, i24, i14);
12369 if (d7 > d3) {
12370 STACKTOP = i1;
12371 return;
12372 }
12373 HEAP32[i20 >> 2] = 0;
12374 d6 = +__ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i20, i 24, i14, i27, i28);
12375 if (d6 > d3) {
12376 STACKTOP = i1;
12377 return;
12378 }
12379 if (d6 > d7 * .9800000190734863 + .0010000000474974513) {
12380 d18 = +HEAPF32[i14 >> 2];
12381 d19 = +HEAPF32[i14 + 4 >> 2];
12382 d15 = +HEAPF32[i14 + 8 >> 2];
12383 d16 = +HEAPF32[i14 + 12 >> 2];
12384 d9 = +HEAPF32[i28 >> 2];
12385 d6 = +HEAPF32[i28 + 4 >> 2];
12386 d7 = +HEAPF32[i28 + 8 >> 2];
12387 d8 = +HEAPF32[i28 + 12 >> 2];
12388 i17 = HEAP32[i20 >> 2] | 0;
12389 HEAP32[i5 + 56 >> 2] = 2;
12390 i14 = 1;
12391 i20 = i24;
12392 } else {
12393 d18 = +HEAPF32[i28 >> 2];
12394 d19 = +HEAPF32[i28 + 4 >> 2];
12395 d15 = +HEAPF32[i28 + 8 >> 2];
12396 d16 = +HEAPF32[i28 + 12 >> 2];
12397 d9 = +HEAPF32[i14 >> 2];
12398 d6 = +HEAPF32[i14 + 4 >> 2];
12399 d7 = +HEAPF32[i14 + 8 >> 2];
12400 d8 = +HEAPF32[i14 + 12 >> 2];
12401 i17 = HEAP32[i17 >> 2] | 0;
12402 HEAP32[i5 + 56 >> 2] = 1;
12403 i14 = 0;
12404 i20 = i27;
12405 i27 = i24;
12406 }
12407 i28 = HEAP32[i27 + 148 >> 2] | 0;
12408 if (!((i17 | 0) > -1)) {
12409 ___assert_fail(5640, 5688, 151, 5728);
12410 }
12411 i24 = HEAP32[i20 + 148 >> 2] | 0;
12412 if ((i24 | 0) <= (i17 | 0)) {
12413 ___assert_fail(5640, 5688, 151, 5728);
12414 }
12415 d21 = +HEAPF32[i20 + (i17 << 3) + 84 >> 2];
12416 d36 = +HEAPF32[i20 + (i17 << 3) + 88 >> 2];
12417 d22 = d16 * d21 - d15 * d36;
12418 d36 = d15 * d21 + d16 * d36;
12419 d21 = d8 * d22 + d7 * d36;
12420 d22 = d8 * d36 - d7 * d22;
12421 if ((i28 | 0) > 0) {
12422 i33 = 0;
12423 i34 = 0;
12424 d23 = 3.4028234663852886e+38;
12425 while (1) {
12426 d25 = d21 * +HEAPF32[i27 + (i33 << 3) + 84 >> 2] + d22 * +HEAPF32[i27 + (i33 << 3) + 88 >> 2];
12427 i31 = d25 < d23;
12428 i34 = i31 ? i33 : i34;
12429 i33 = i33 + 1 | 0;
12430 if ((i33 | 0) == (i28 | 0)) {
12431 break;
12432 } else {
12433 d23 = i31 ? d25 : d23;
12434 }
12435 }
12436 } else {
12437 i34 = 0;
12438 }
12439 i31 = i34 + 1 | 0;
12440 i33 = (i31 | 0) < (i28 | 0) ? i31 : 0;
12441 d35 = +HEAPF32[i27 + (i34 << 3) + 20 >> 2];
12442 d32 = +HEAPF32[i27 + (i34 << 3) + 24 >> 2];
12443 d36 = +(d9 + (d8 * d35 - d7 * d32));
12444 d32 = +(d6 + (d7 * d35 + d8 * d32));
12445 i31 = i13;
12446 HEAPF32[i31 >> 2] = d36;
12447 HEAPF32[i31 + 4 >> 2] = d32;
12448 i31 = i17 & 255;
12449 i28 = i13 + 8 | 0;
12450 HEAP8[i28] = i31;
12451 HEAP8[i28 + 1 | 0] = i34;
12452 HEAP8[i28 + 2 | 0] = 1;
12453 HEAP8[i28 + 3 | 0] = 0;
12454 d32 = +HEAPF32[i27 + (i33 << 3) + 20 >> 2];
12455 d36 = +HEAPF32[i27 + (i33 << 3) + 24 >> 2];
12456 d35 = +(d9 + (d8 * d32 - d7 * d36));
12457 d36 = +(d6 + (d7 * d32 + d8 * d36));
12458 i27 = i13 + 12 | 0;
12459 HEAPF32[i27 >> 2] = d35;
12460 HEAPF32[i27 + 4 >> 2] = d36;
12461 i27 = i13 + 20 | 0;
12462 HEAP8[i27] = i31;
12463 HEAP8[i27 + 1 | 0] = i33;
12464 HEAP8[i27 + 2 | 0] = 1;
12465 HEAP8[i27 + 3 | 0] = 0;
12466 i27 = i17 + 1 | 0;
12467 i24 = (i27 | 0) < (i24 | 0) ? i27 : 0;
12468 i34 = i20 + (i17 << 3) + 20 | 0;
12469 d26 = +HEAPF32[i34 >> 2];
12470 d25 = +HEAPF32[i34 + 4 >> 2];
12471 i34 = i20 + (i24 << 3) + 20 | 0;
12472 d30 = +HEAPF32[i34 >> 2];
12473 d29 = +HEAPF32[i34 + 4 >> 2];
12474 d32 = d30 - d26;
12475 d35 = d29 - d25;
12476 d21 = +Math_sqrt(+(d32 * d32 + d35 * d35));
12477 if (!(d21 < 1.1920928955078125e-7)) {
12478 d36 = 1.0 / d21;
12479 d32 = d32 * d36;
12480 d35 = d35 * d36;
12481 }
12482 d36 = d16 * d32 - d15 * d35;
12483 d21 = d16 * d35 + d15 * d32;
12484 HEAPF32[i11 >> 2] = d36;
12485 HEAPF32[i11 + 4 >> 2] = d21;
12486 d22 = -d36;
12487 d38 = d18 + (d16 * d26 - d15 * d25);
12488 d37 = d19 + (d15 * d26 + d16 * d25);
12489 d23 = d38 * d21 + d37 * d22;
12490 HEAPF32[i10 >> 2] = d22;
12491 HEAPF32[i10 + 4 >> 2] = -d21;
12492 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i12, i13, i10, d3 - (d38 * d36 + d37 * d21), i17) | 0) < 2) {
12493 STACKTOP = i1;
12494 return;
12495 }
12496 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i4, i12, i11, d3 + ((d18 + (d16 * d30 - d15 * d29)) * d36 + (d19 + (d15 * d30 + d16 * d29)) * d21), i24) | 0) < 2) {
12497 STACKTOP = i1;
12498 return;
12499 }
12500 d16 = +d35;
12501 d15 = +-d32;
12502 i10 = i5 + 40 | 0;
12503 HEAPF32[i10 >> 2] = d16;
12504 HEAPF32[i10 + 4 >> 2] = d15;
12505 d15 = +((d26 + d30) * .5);
12506 d16 = +((d25 + d29) * .5);
12507 i10 = i5 + 48 | 0;
12508 HEAPF32[i10 >> 2] = d15;
12509 HEAPF32[i10 + 4 >> 2] = d16;
12510 d16 = +HEAPF32[i4 >> 2];
12511 d15 = +HEAPF32[i4 + 4 >> 2];
12512 i10 = !(d21 * d16 + d15 * d22 - d23 <= d3);
12513 if (i14 << 24 >> 24 == 0) {
12514 if (i10) {
12515 i10 = 0;
12516 } else {
12517 d38 = d16 - d9;
12518 d36 = d15 - d6;
12519 d37 = +(d8 * d38 + d7 * d36);
12520 d38 = +(d8 * d36 - d7 * d38);
12521 i10 = i5;
12522 HEAPF32[i10 >> 2] = d37;
12523 HEAPF32[i10 + 4 >> 2] = d38;
12524 HEAP32[i5 + 16 >> 2] = HEAP32[i4 + 8 >> 2];
12525 i10 = 1;
12526 }
12527 d16 = +HEAPF32[i4 + 12 >> 2];
12528 d15 = +HEAPF32[i4 + 16 >> 2];
12529 if (d21 * d16 + d15 * d22 - d23 <= d3) {
12530 d38 = d16 - d9;
12531 d36 = d15 - d6;
12532 d37 = +(d8 * d38 + d7 * d36);
12533 d38 = +(d8 * d36 - d7 * d38);
12534 i34 = i5 + (i10 * 20 | 0) | 0;
12535 HEAPF32[i34 >> 2] = d37;
12536 HEAPF32[i34 + 4 >> 2] = d38;
12537 HEAP32[i5 + (i10 * 20 | 0) + 16 >> 2] = HEAP32[i4 + 20 >> 2];
12538 i10 = i10 + 1 | 0;
12539 }
12540 } else {
12541 if (i10) {
12542 i10 = 0;
12543 } else {
12544 d38 = d16 - d9;
12545 d36 = d15 - d6;
12546 d37 = +(d8 * d38 + d7 * d36);
12547 d38 = +(d8 * d36 - d7 * d38);
12548 i10 = i5;
12549 HEAPF32[i10 >> 2] = d37;
12550 HEAPF32[i10 + 4 >> 2] = d38;
12551 i10 = i5 + 16 | 0;
12552 i34 = HEAP32[i4 + 8 >> 2] | 0;
12553 HEAP32[i10 >> 2] = i34;
12554 HEAP8[i10] = i34 >>> 8;
12555 HEAP8[i10 + 1 | 0] = i34;
12556 HEAP8[i10 + 2 | 0] = i34 >>> 24;
12557 HEAP8[i10 + 3 | 0] = i34 >>> 16;
12558 i10 = 1;
12559 }
12560 d16 = +HEAPF32[i4 + 12 >> 2];
12561 d15 = +HEAPF32[i4 + 16 >> 2];
12562 if (d21 * d16 + d15 * d22 - d23 <= d3) {
12563 d38 = d16 - d9;
12564 d36 = d15 - d6;
12565 d37 = +(d8 * d38 + d7 * d36);
12566 d38 = +(d8 * d36 - d7 * d38);
12567 i34 = i5 + (i10 * 20 | 0) | 0;
12568 HEAPF32[i34 >> 2] = d37;
12569 HEAPF32[i34 + 4 >> 2] = d38;
12570 i34 = i5 + (i10 * 20 | 0) + 16 | 0;
12571 i33 = HEAP32[i4 + 20 >> 2] | 0;
12572 HEAP32[i34 >> 2] = i33;
12573 HEAP8[i34] = i33 >>> 8;
12574 HEAP8[i34 + 1 | 0] = i33;
12575 HEAP8[i34 + 2 | 0] = i33 >>> 24;
12576 HEAP8[i34 + 3 | 0] = i33 >>> 16;
12577 i10 = i10 + 1 | 0;
12578 }
12579 }
12580 HEAP32[i2 >> 2] = i10;
12581 STACKTOP = i1;
12582 return;
12583 }
12584 function __ZN8b2Island8SolveTOIERK10b2TimeStepii(i4, i11, i15, i18) {
12585 i4 = i4 | 0;
12586 i11 = i11 | 0;
12587 i15 = i15 | 0;
12588 i18 = i18 | 0;
12589 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, d1 2 = 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;
12590 i1 = STACKTOP;
12591 STACKTOP = STACKTOP + 128 | 0;
12592 i2 = i1 + 96 | 0;
12593 i10 = i1 + 52 | 0;
12594 i3 = i1;
12595 i6 = i4 + 28 | 0;
12596 i5 = HEAP32[i6 >> 2] | 0;
12597 if ((i5 | 0) <= (i15 | 0)) {
12598 ___assert_fail(5464, 5488, 386, 5520);
12599 }
12600 if ((i5 | 0) <= (i18 | 0)) {
12601 ___assert_fail(5536, 5488, 387, 5520);
12602 }
12603 if ((i5 | 0) > 0) {
12604 i9 = i4 + 8 | 0;
12605 i8 = i4 + 20 | 0;
12606 i7 = i4 + 24 | 0;
12607 i22 = 0;
12608 while (1) {
12609 i23 = HEAP32[(HEAP32[i9 >> 2] | 0) + (i22 << 2) >> 2] | 0;
12610 i5 = i23 + 44 | 0;
12611 i24 = HEAP32[i5 + 4 >> 2] | 0;
12612 i25 = (HEAP32[i8 >> 2] | 0) + (i22 * 12 | 0) | 0;
12613 HEAP32[i25 >> 2] = HEAP32[i5 >> 2];
12614 HEAP32[i25 + 4 >> 2] = i24;
12615 HEAPF32[(HEAP32[i8 >> 2] | 0) + (i22 * 12 | 0) + 8 >> 2] = +HEAPF32[i23 + 56 >> 2];
12616 i25 = i23 + 64 | 0;
12617 i24 = HEAP32[i25 + 4 >> 2] | 0;
12618 i5 = (HEAP32[i7 >> 2] | 0) + (i22 * 12 | 0) | 0;
12619 HEAP32[i5 >> 2] = HEAP32[i25 >> 2];
12620 HEAP32[i5 + 4 >> 2] = i24;
12621 i5 = HEAP32[i7 >> 2] | 0;
12622 HEAPF32[i5 + (i22 * 12 | 0) + 8 >> 2] = +HEAPF32[i23 + 72 >> 2];
12623 i22 = i22 + 1 | 0;
12624 if ((i22 | 0) >= (HEAP32[i6 >> 2] | 0)) {
12625 i22 = i5;
12626 break;
12627 }
12628 }
12629 } else {
12630 i8 = i4 + 20 | 0;
12631 i22 = HEAP32[i4 + 24 >> 2] | 0;
12632 }
12633 i5 = i4 + 12 | 0;
12634 HEAP32[i10 + 24 >> 2] = HEAP32[i5 >> 2];
12635 i7 = i4 + 36 | 0;
12636 HEAP32[i10 + 28 >> 2] = HEAP32[i7 >> 2];
12637 HEAP32[i10 + 40 >> 2] = HEAP32[i4 >> 2];
12638 HEAP32[i10 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
12639 HEAP32[i10 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
12640 HEAP32[i10 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
12641 HEAP32[i10 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
12642 HEAP32[i10 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
12643 HEAP32[i10 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
12644 HEAP32[i10 + 32 >> 2] = HEAP32[i8 >> 2];
12645 i9 = i4 + 24 | 0;
12646 HEAP32[i10 + 36 >> 2] = i22;
12647 __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i3, i10);
12648 i10 = i11 + 16 | 0;
12649 L13 : do {
12650 if ((HEAP32[i10 >> 2] | 0) > 0) {
12651 i22 = 0;
12652 do {
12653 i22 = i22 + 1 | 0;
12654 if (__ZN15b2ContactSolver27SolveTOIPositionConstraintsEii(i3, i15, i18) | 0) {
12655 break L13;
12656 }
12657 } while ((i22 | 0) < (HEAP32[i10 >> 2] | 0));
12658 }
12659 } while (0);
12660 i10 = i4 + 8 | 0;
12661 i24 = (HEAP32[i8 >> 2] | 0) + (i15 * 12 | 0) | 0;
12662 i25 = HEAP32[i24 + 4 >> 2] | 0;
12663 i23 = (HEAP32[(HEAP32[i10 >> 2] | 0) + (i15 << 2) >> 2] | 0) + 36 | 0;
12664 HEAP32[i23 >> 2] = HEAP32[i24 >> 2];
12665 HEAP32[i23 + 4 >> 2] = i25;
12666 i23 = HEAP32[i8 >> 2] | 0;
12667 i25 = HEAP32[i10 >> 2] | 0;
12668 HEAPF32[(HEAP32[i25 + (i15 << 2) >> 2] | 0) + 52 >> 2] = +HEAPF32[i23 + (i15 * 12 | 0) + 8 >> 2];
12669 i23 = i23 + (i18 * 12 | 0) | 0;
12670 i24 = HEAP32[i23 + 4 >> 2] | 0;
12671 i25 = (HEAP32[i25 + (i18 << 2) >> 2] | 0) + 36 | 0;
12672 HEAP32[i25 >> 2] = HEAP32[i23 >> 2];
12673 HEAP32[i25 + 4 >> 2] = i24;
12674 HEAPF32[(HEAP32[(HEAP32[i10 >> 2] | 0) + (i18 << 2) >> 2] | 0) + 52 >> 2] = +HE APF32[(HEAP32[i8 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2];
12675 __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i3);
12676 i18 = i11 + 12 | 0;
12677 if ((HEAP32[i18 >> 2] | 0) > 0) {
12678 i15 = 0;
12679 do {
12680 __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i3);
12681 i15 = i15 + 1 | 0;
12682 } while ((i15 | 0) < (HEAP32[i18 >> 2] | 0));
12683 }
12684 d16 = +HEAPF32[i11 >> 2];
12685 if ((HEAP32[i6 >> 2] | 0) > 0) {
12686 i15 = 0;
12687 do {
12688 i25 = HEAP32[i8 >> 2] | 0;
12689 i11 = i25 + (i15 * 12 | 0) | 0;
12690 i24 = i11;
12691 d12 = +HEAPF32[i24 >> 2];
12692 d14 = +HEAPF32[i24 + 4 >> 2];
12693 d13 = +HEAPF32[i25 + (i15 * 12 | 0) + 8 >> 2];
12694 i25 = HEAP32[i9 >> 2] | 0;
12695 i24 = i25 + (i15 * 12 | 0) | 0;
12696 d19 = +HEAPF32[i24 >> 2];
12697 d20 = +HEAPF32[i24 + 4 >> 2];
12698 d17 = +HEAPF32[i25 + (i15 * 12 | 0) + 8 >> 2];
12699 d26 = d16 * d19;
12700 d21 = d16 * d20;
12701 d21 = d26 * d26 + d21 * d21;
12702 if (d21 > 4.0) {
12703 d26 = 2.0 / +Math_sqrt(+d21);
12704 d19 = d19 * d26;
12705 d20 = d20 * d26;
12706 }
12707 d21 = d16 * d17;
12708 if (d21 * d21 > 2.4674012660980225) {
12709 if (!(d21 > 0.0)) {
12710 d21 = -d21;
12711 }
12712 d17 = d17 * (1.5707963705062866 / d21);
12713 }
12714 d21 = d12 + d16 * d19;
12715 d14 = d14 + d16 * d20;
12716 d26 = d13 + d16 * d17;
12717 d12 = +d21;
12718 d13 = +d14;
12719 i25 = i11;
12720 HEAPF32[i25 >> 2] = d12;
12721 HEAPF32[i25 + 4 >> 2] = d13;
12722 HEAPF32[(HEAP32[i8 >> 2] | 0) + (i15 * 12 | 0) + 8 >> 2] = d26;
12723 d19 = +d19;
12724 d20 = +d20;
12725 i25 = (HEAP32[i9 >> 2] | 0) + (i15 * 12 | 0) | 0;
12726 HEAPF32[i25 >> 2] = d19;
12727 HEAPF32[i25 + 4 >> 2] = d20;
12728 HEAPF32[(HEAP32[i9 >> 2] | 0) + (i15 * 12 | 0) + 8 >> 2] = d17;
12729 i25 = HEAP32[(HEAP32[i10 >> 2] | 0) + (i15 << 2) >> 2] | 0;
12730 i24 = i25 + 44 | 0;
12731 HEAPF32[i24 >> 2] = d12;
12732 HEAPF32[i24 + 4 >> 2] = d13;
12733 HEAPF32[i25 + 56 >> 2] = d26;
12734 i24 = i25 + 64 | 0;
12735 HEAPF32[i24 >> 2] = d19;
12736 HEAPF32[i24 + 4 >> 2] = d20;
12737 HEAPF32[i25 + 72 >> 2] = d17;
12738 d17 = +Math_sin(+d26);
12739 HEAPF32[i25 + 20 >> 2] = d17;
12740 d20 = +Math_cos(+d26);
12741 HEAPF32[i25 + 24 >> 2] = d20;
12742 d19 = +HEAPF32[i25 + 28 >> 2];
12743 d26 = +HEAPF32[i25 + 32 >> 2];
12744 d21 = +(d21 - (d20 * d19 - d17 * d26));
12745 d26 = +(d14 - (d17 * d19 + d20 * d26));
12746 i25 = i25 + 12 | 0;
12747 HEAPF32[i25 >> 2] = d21;
12748 HEAPF32[i25 + 4 >> 2] = d26;
12749 i15 = i15 + 1 | 0;
12750 } while ((i15 | 0) < (HEAP32[i6 >> 2] | 0));
12751 }
12752 i6 = HEAP32[i3 + 40 >> 2] | 0;
12753 i4 = i4 + 4 | 0;
12754 if ((HEAP32[i4 >> 2] | 0) == 0) {
12755 __ZN15b2ContactSolverD2Ev(i3);
12756 STACKTOP = i1;
12757 return;
12758 }
12759 if ((HEAP32[i7 >> 2] | 0) <= 0) {
12760 __ZN15b2ContactSolverD2Ev(i3);
12761 STACKTOP = i1;
12762 return;
12763 }
12764 i8 = i2 + 16 | 0;
12765 i9 = 0;
12766 do {
12767 i10 = HEAP32[(HEAP32[i5 >> 2] | 0) + (i9 << 2) >> 2] | 0;
12768 i11 = HEAP32[i6 + (i9 * 152 | 0) + 144 >> 2] | 0;
12769 HEAP32[i8 >> 2] = i11;
12770 if ((i11 | 0) > 0) {
12771 i15 = 0;
12772 do {
12773 HEAPF32[i2 + (i15 << 2) >> 2] = +HEAPF32[i6 + (i9 * 152 | 0) + (i15 * 36 | 0 ) + 16 >> 2];
12774 HEAPF32[i2 + (i15 << 2) + 8 >> 2] = +HEAPF32[i6 + (i9 * 152 | 0) + (i15 * 36 | 0) + 20 >> 2];
12775 i15 = i15 + 1 | 0;
12776 } while ((i15 | 0) != (i11 | 0));
12777 }
12778 i25 = HEAP32[i4 >> 2] | 0;
12779 FUNCTION_TABLE_viii[HEAP32[(HEAP32[i25 >> 2] | 0) + 20 >> 2] & 3](i25, i10, i2 );
12780 i9 = i9 + 1 | 0;
12781 } while ((i9 | 0) < (HEAP32[i7 >> 2] | 0));
12782 __ZN15b2ContactSolverD2Ev(i3);
12783 STACKTOP = i1;
12784 return;
12785 }
12786 function __ZN20b2SeparationFunction10InitializeEPK14b2SimplexCachePK15b2Distance ProxyRK7b2SweepS5_S8_f(i2, i11, i13, i21, i12, i24, d9) {
12787 i2 = i2 | 0;
12788 i11 = i11 | 0;
12789 i13 = i13 | 0;
12790 i21 = i21 | 0;
12791 i12 = i12 | 0;
12792 i24 = i24 | 0;
12793 d9 = +d9;
12794 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, d 22 = 0.0, i23 = 0, i25 = 0, i26 = 0, i27 = 0, d28 = 0.0, d29 = 0.0;
12795 i1 = STACKTOP;
12796 HEAP32[i2 >> 2] = i13;
12797 HEAP32[i2 + 4 >> 2] = i12;
12798 i14 = HEAP16[i11 + 4 >> 1] | 0;
12799 if (!(i14 << 16 >> 16 != 0 & (i14 & 65535) < 3)) {
12800 ___assert_fail(3744, 3560, 50, 3768);
12801 }
12802 i23 = i2 + 8 | 0;
12803 i25 = i23 + 0 | 0;
12804 i27 = i21 + 0 | 0;
12805 i26 = i25 + 36 | 0;
12806 do {
12807 HEAP32[i25 >> 2] = HEAP32[i27 >> 2];
12808 i25 = i25 + 4 | 0;
12809 i27 = i27 + 4 | 0;
12810 } while ((i25 | 0) < (i26 | 0));
12811 i21 = i2 + 44 | 0;
12812 i25 = i21 + 0 | 0;
12813 i27 = i24 + 0 | 0;
12814 i26 = i25 + 36 | 0;
12815 do {
12816 HEAP32[i25 >> 2] = HEAP32[i27 >> 2];
12817 i25 = i25 + 4 | 0;
12818 i27 = i27 + 4 | 0;
12819 } while ((i25 | 0) < (i26 | 0));
12820 d19 = 1.0 - d9;
12821 d4 = d19 * +HEAPF32[i2 + 32 >> 2] + +HEAPF32[i2 + 36 >> 2] * d9;
12822 d3 = +Math_sin(+d4);
12823 d4 = +Math_cos(+d4);
12824 d7 = +HEAPF32[i23 >> 2];
12825 d5 = +HEAPF32[i2 + 12 >> 2];
12826 d8 = d19 * +HEAPF32[i2 + 16 >> 2] + +HEAPF32[i2 + 24 >> 2] * d9 - (d4 * d7 - d3 * d5);
12827 d5 = d19 * +HEAPF32[i2 + 20 >> 2] + +HEAPF32[i2 + 28 >> 2] * d9 - (d3 * d7 + d4 * d5);
12828 d7 = d19 * +HEAPF32[i2 + 68 >> 2] + +HEAPF32[i2 + 72 >> 2] * d9;
12829 d6 = +Math_sin(+d7);
12830 d7 = +Math_cos(+d7);
12831 d20 = +HEAPF32[i21 >> 2];
12832 d22 = +HEAPF32[i2 + 48 >> 2];
12833 d10 = d19 * +HEAPF32[i2 + 52 >> 2] + +HEAPF32[i2 + 60 >> 2] * d9 - (d7 * d20 - d6 * d22);
12834 d9 = d19 * +HEAPF32[i2 + 56 >> 2] + +HEAPF32[i2 + 64 >> 2] * d9 - (d6 * d20 + d 7 * d22);
12835 if (i14 << 16 >> 16 == 1) {
12836 HEAP32[i2 + 80 >> 2] = 0;
12837 i14 = HEAPU8[i11 + 6 | 0] | 0;
12838 if ((HEAP32[i13 + 20 >> 2] | 0) <= (i14 | 0)) {
12839 ___assert_fail(3640, 3672, 103, 3704);
12840 }
12841 i27 = (HEAP32[i13 + 16 >> 2] | 0) + (i14 << 3) | 0;
12842 d15 = +HEAPF32[i27 >> 2];
12843 d16 = +HEAPF32[i27 + 4 >> 2];
12844 i11 = HEAPU8[i11 + 9 | 0] | 0;
12845 if ((HEAP32[i12 + 20 >> 2] | 0) <= (i11 | 0)) {
12846 ___assert_fail(3640, 3672, 103, 3704);
12847 }
12848 i11 = (HEAP32[i12 + 16 >> 2] | 0) + (i11 << 3) | 0;
12849 d20 = +HEAPF32[i11 >> 2];
12850 d22 = +HEAPF32[i11 + 4 >> 2];
12851 i11 = i2 + 92 | 0;
12852 d8 = d10 + (d7 * d20 - d6 * d22) - (d8 + (d4 * d15 - d3 * d16));
12853 d4 = d9 + (d6 * d20 + d7 * d22) - (d5 + (d3 * d15 + d4 * d16));
12854 d22 = +d8;
12855 d3 = +d4;
12856 i27 = i11;
12857 HEAPF32[i27 >> 2] = d22;
12858 HEAPF32[i27 + 4 >> 2] = d3;
12859 d3 = +Math_sqrt(+(d8 * d8 + d4 * d4));
12860 if (d3 < 1.1920928955078125e-7) {
12861 d22 = 0.0;
12862 STACKTOP = i1;
12863 return +d22;
12864 }
12865 d22 = 1.0 / d3;
12866 HEAPF32[i11 >> 2] = d8 * d22;
12867 HEAPF32[i2 + 96 >> 2] = d4 * d22;
12868 d22 = d3;
12869 STACKTOP = i1;
12870 return +d22;
12871 }
12872 i14 = i11 + 6 | 0;
12873 i21 = i11 + 7 | 0;
12874 i23 = i2 + 80 | 0;
12875 if ((HEAP8[i14] | 0) == (HEAP8[i21] | 0)) {
12876 HEAP32[i23 >> 2] = 2;
12877 i23 = HEAPU8[i11 + 9 | 0] | 0;
12878 i21 = HEAP32[i12 + 20 >> 2] | 0;
12879 if ((i21 | 0) <= (i23 | 0)) {
12880 ___assert_fail(3640, 3672, 103, 3704);
12881 }
12882 i12 = HEAP32[i12 + 16 >> 2] | 0;
12883 i27 = i12 + (i23 << 3) | 0;
12884 d16 = +HEAPF32[i27 >> 2];
12885 d15 = +HEAPF32[i27 + 4 >> 2];
12886 i11 = HEAPU8[i11 + 10 | 0] | 0;
12887 if ((i21 | 0) <= (i11 | 0)) {
12888 ___assert_fail(3640, 3672, 103, 3704);
12889 }
12890 i11 = i12 + (i11 << 3) | 0;
12891 d20 = +HEAPF32[i11 >> 2];
12892 d18 = +HEAPF32[i11 + 4 >> 2];
12893 i11 = i2 + 92 | 0;
12894 d22 = d20 - d16;
12895 d19 = d18 - d15;
12896 d17 = -d22;
12897 d29 = +d19;
12898 d28 = +d17;
12899 i27 = i11;
12900 HEAPF32[i27 >> 2] = d29;
12901 HEAPF32[i27 + 4 >> 2] = d28;
12902 d22 = +Math_sqrt(+(d19 * d19 + d22 * d22));
12903 if (!(d22 < 1.1920928955078125e-7)) {
12904 d29 = 1.0 / d22;
12905 d19 = d19 * d29;
12906 HEAPF32[i11 >> 2] = d19;
12907 d17 = d29 * d17;
12908 HEAPF32[i2 + 96 >> 2] = d17;
12909 }
12910 d16 = (d16 + d20) * .5;
12911 d15 = (d15 + d18) * .5;
12912 d28 = +d16;
12913 d29 = +d15;
12914 i2 = i2 + 84 | 0;
12915 HEAPF32[i2 >> 2] = d28;
12916 HEAPF32[i2 + 4 >> 2] = d29;
12917 i2 = HEAPU8[i14] | 0;
12918 if ((HEAP32[i13 + 20 >> 2] | 0) <= (i2 | 0)) {
12919 ___assert_fail(3640, 3672, 103, 3704);
12920 }
12921 i27 = (HEAP32[i13 + 16 >> 2] | 0) + (i2 << 3) | 0;
12922 d28 = +HEAPF32[i27 >> 2];
12923 d29 = +HEAPF32[i27 + 4 >> 2];
12924 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)));
12925 if (!(d3 < 0.0)) {
12926 d29 = d3;
12927 STACKTOP = i1;
12928 return +d29;
12929 }
12930 d28 = +-d19;
12931 d29 = +-d17;
12932 i27 = i11;
12933 HEAPF32[i27 >> 2] = d28;
12934 HEAPF32[i27 + 4 >> 2] = d29;
12935 d29 = -d3;
12936 STACKTOP = i1;
12937 return +d29;
12938 } else {
12939 HEAP32[i23 >> 2] = 1;
12940 i23 = HEAPU8[i14] | 0;
12941 i14 = HEAP32[i13 + 20 >> 2] | 0;
12942 if ((i14 | 0) <= (i23 | 0)) {
12943 ___assert_fail(3640, 3672, 103, 3704);
12944 }
12945 i13 = HEAP32[i13 + 16 >> 2] | 0;
12946 i27 = i13 + (i23 << 3) | 0;
12947 d16 = +HEAPF32[i27 >> 2];
12948 d15 = +HEAPF32[i27 + 4 >> 2];
12949 i21 = HEAPU8[i21] | 0;
12950 if ((i14 | 0) <= (i21 | 0)) {
12951 ___assert_fail(3640, 3672, 103, 3704);
12952 }
12953 i13 = i13 + (i21 << 3) | 0;
12954 d20 = +HEAPF32[i13 >> 2];
12955 d18 = +HEAPF32[i13 + 4 >> 2];
12956 i13 = i2 + 92 | 0;
12957 d22 = d20 - d16;
12958 d19 = d18 - d15;
12959 d17 = -d22;
12960 d28 = +d19;
12961 d29 = +d17;
12962 i27 = i13;
12963 HEAPF32[i27 >> 2] = d28;
12964 HEAPF32[i27 + 4 >> 2] = d29;
12965 d22 = +Math_sqrt(+(d19 * d19 + d22 * d22));
12966 if (!(d22 < 1.1920928955078125e-7)) {
12967 d29 = 1.0 / d22;
12968 d19 = d19 * d29;
12969 HEAPF32[i13 >> 2] = d19;
12970 d17 = d29 * d17;
12971 HEAPF32[i2 + 96 >> 2] = d17;
12972 }
12973 d16 = (d16 + d20) * .5;
12974 d15 = (d15 + d18) * .5;
12975 d28 = +d16;
12976 d29 = +d15;
12977 i2 = i2 + 84 | 0;
12978 HEAPF32[i2 >> 2] = d28;
12979 HEAPF32[i2 + 4 >> 2] = d29;
12980 i2 = HEAPU8[i11 + 9 | 0] | 0;
12981 if ((HEAP32[i12 + 20 >> 2] | 0) <= (i2 | 0)) {
12982 ___assert_fail(3640, 3672, 103, 3704);
12983 }
12984 i27 = (HEAP32[i12 + 16 >> 2] | 0) + (i2 << 3) | 0;
12985 d28 = +HEAPF32[i27 >> 2];
12986 d29 = +HEAPF32[i27 + 4 >> 2];
12987 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)));
12988 if (!(d3 < 0.0)) {
12989 d29 = d3;
12990 STACKTOP = i1;
12991 return +d29;
12992 }
12993 d28 = +-d19;
12994 d29 = +-d17;
12995 i27 = i13;
12996 HEAPF32[i27 >> 2] = d28;
12997 HEAPF32[i27 + 4 >> 2] = d29;
12998 d29 = -d3;
12999 STACKTOP = i1;
13000 return +d29;
13001 }
13002 return 0.0;
13003 }
13004 function __ZNK20b2SeparationFunction17FindMinSeparationEPiS0_f(i12, i10, i9, d5) {
13005 i12 = i12 | 0;
13006 i10 = i10 | 0;
13007 i9 = i9 | 0;
13008 d5 = +d5;
13009 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;
13010 i1 = STACKTOP;
13011 d21 = 1.0 - d5;
13012 d6 = d21 * +HEAPF32[i12 + 32 >> 2] + +HEAPF32[i12 + 36 >> 2] * d5;
13013 d7 = +Math_sin(+d6);
13014 d6 = +Math_cos(+d6);
13015 d3 = +HEAPF32[i12 + 8 >> 2];
13016 d8 = +HEAPF32[i12 + 12 >> 2];
13017 d11 = d21 * +HEAPF32[i12 + 16 >> 2] + +HEAPF32[i12 + 24 >> 2] * d5 - (d6 * d3 - d7 * d8);
13018 d8 = d21 * +HEAPF32[i12 + 20 >> 2] + +HEAPF32[i12 + 28 >> 2] * d5 - (d7 * d3 + d6 * d8);
13019 d3 = d21 * +HEAPF32[i12 + 68 >> 2] + +HEAPF32[i12 + 72 >> 2] * d5;
13020 d2 = +Math_sin(+d3);
13021 d3 = +Math_cos(+d3);
13022 d23 = +HEAPF32[i12 + 44 >> 2];
13023 d24 = +HEAPF32[i12 + 48 >> 2];
13024 d4 = d21 * +HEAPF32[i12 + 52 >> 2] + +HEAPF32[i12 + 60 >> 2] * d5 - (d3 * d23 - d2 * d24);
13025 d5 = d21 * +HEAPF32[i12 + 56 >> 2] + +HEAPF32[i12 + 64 >> 2] * d5 - (d2 * d23 + d3 * d24);
13026 i19 = HEAP32[i12 + 80 >> 2] | 0;
13027 if ((i19 | 0) == 1) {
13028 d23 = +HEAPF32[i12 + 92 >> 2];
13029 d14 = +HEAPF32[i12 + 96 >> 2];
13030 d13 = d6 * d23 - d7 * d14;
13031 d14 = d7 * d23 + d6 * d14;
13032 d23 = +HEAPF32[i12 + 84 >> 2];
13033 d24 = +HEAPF32[i12 + 88 >> 2];
13034 d11 = d11 + (d6 * d23 - d7 * d24);
13035 d6 = d8 + (d7 * d23 + d6 * d24);
13036 d7 = -d13;
13037 d24 = -d14;
13038 d8 = d3 * d7 + d2 * d24;
13039 d7 = d3 * d24 - d2 * d7;
13040 HEAP32[i10 >> 2] = -1;
13041 i25 = i12 + 4 | 0;
13042 i22 = HEAP32[i25 >> 2] | 0;
13043 i19 = HEAP32[i22 + 16 >> 2] | 0;
13044 i22 = HEAP32[i22 + 20 >> 2] | 0;
13045 if ((i22 | 0) > 1) {
13046 i10 = 0;
13047 d18 = d7 * +HEAPF32[i19 + 4 >> 2] + d8 * +HEAPF32[i19 >> 2];
13048 i12 = 1;
13049 while (1) {
13050 d17 = d8 * +HEAPF32[i19 + (i12 << 3) >> 2] + d7 * +HEAPF32[i19 + (i12 << 3) + 4 >> 2];
13051 i16 = d17 > d18;
13052 i10 = i16 ? i12 : i10;
13053 i12 = i12 + 1 | 0;
13054 if ((i12 | 0) == (i22 | 0)) {
13055 break;
13056 } else {
13057 d18 = i16 ? d17 : d18;
13058 }
13059 }
13060 HEAP32[i9 >> 2] = i10;
13061 if ((i10 | 0) > -1) {
13062 i15 = i10;
13063 } else {
13064 ___assert_fail(3640, 3672, 103, 3704);
13065 }
13066 } else {
13067 HEAP32[i9 >> 2] = 0;
13068 i15 = 0;
13069 }
13070 i9 = HEAP32[i25 >> 2] | 0;
13071 if ((HEAP32[i9 + 20 >> 2] | 0) <= (i15 | 0)) {
13072 ___assert_fail(3640, 3672, 103, 3704);
13073 }
13074 i27 = (HEAP32[i9 + 16 >> 2] | 0) + (i15 << 3) | 0;
13075 d23 = +HEAPF32[i27 >> 2];
13076 d24 = +HEAPF32[i27 + 4 >> 2];
13077 d24 = d13 * (d4 + (d3 * d23 - d2 * d24) - d11) + d14 * (d5 + (d2 * d23 + d3 * d24) - d6);
13078 STACKTOP = i1;
13079 return +d24;
13080 } else if ((i19 | 0) == 0) {
13081 d13 = +HEAPF32[i12 + 92 >> 2];
13082 d14 = +HEAPF32[i12 + 96 >> 2];
13083 d21 = d6 * d13 + d7 * d14;
13084 d24 = d6 * d14 - d7 * d13;
13085 d17 = -d13;
13086 d23 = -d14;
13087 d18 = d3 * d17 + d2 * d23;
13088 d17 = d3 * d23 - d2 * d17;
13089 i15 = HEAP32[i12 >> 2] | 0;
13090 i16 = HEAP32[i15 + 16 >> 2] | 0;
13091 i15 = i15 + 20 | 0;
13092 i19 = HEAP32[i15 >> 2] | 0;
13093 if ((i19 | 0) > 1) {
13094 i25 = 0;
13095 d23 = d24 * +HEAPF32[i16 + 4 >> 2] + d21 * +HEAPF32[i16 >> 2];
13096 i26 = 1;
13097 while (1) {
13098 d20 = d21 * +HEAPF32[i16 + (i26 << 3) >> 2] + d24 * +HEAPF32[i16 + (i26 << 3 ) + 4 >> 2];
13099 i22 = d20 > d23;
13100 i25 = i22 ? i26 : i25;
13101 i26 = i26 + 1 | 0;
13102 if ((i26 | 0) == (i19 | 0)) {
13103 break;
13104 } else {
13105 d23 = i22 ? d20 : d23;
13106 }
13107 }
13108 } else {
13109 i25 = 0;
13110 }
13111 HEAP32[i10 >> 2] = i25;
13112 i19 = HEAP32[i12 + 4 >> 2] | 0;
13113 i12 = HEAP32[i19 + 16 >> 2] | 0;
13114 i19 = i19 + 20 | 0;
13115 i25 = HEAP32[i19 >> 2] | 0;
13116 if ((i25 | 0) > 1) {
13117 i27 = 0;
13118 d20 = d17 * +HEAPF32[i12 + 4 >> 2] + d18 * +HEAPF32[i12 >> 2];
13119 i26 = 1;
13120 while (1) {
13121 d21 = d18 * +HEAPF32[i12 + (i26 << 3) >> 2] + d17 * +HEAPF32[i12 + (i26 << 3 ) + 4 >> 2];
13122 i22 = d21 > d20;
13123 i27 = i22 ? i26 : i27;
13124 i26 = i26 + 1 | 0;
13125 if ((i26 | 0) == (i25 | 0)) {
13126 break;
13127 } else {
13128 d20 = i22 ? d21 : d20;
13129 }
13130 }
13131 } else {
13132 i27 = 0;
13133 }
13134 HEAP32[i9 >> 2] = i27;
13135 i9 = HEAP32[i10 >> 2] | 0;
13136 if (!((i9 | 0) > -1)) {
13137 ___assert_fail(3640, 3672, 103, 3704);
13138 }
13139 if ((HEAP32[i15 >> 2] | 0) <= (i9 | 0)) {
13140 ___assert_fail(3640, 3672, 103, 3704);
13141 }
13142 i26 = i16 + (i9 << 3) | 0;
13143 d18 = +HEAPF32[i26 >> 2];
13144 d17 = +HEAPF32[i26 + 4 >> 2];
13145 if (!((i27 | 0) > -1)) {
13146 ___assert_fail(3640, 3672, 103, 3704);
13147 }
13148 if ((HEAP32[i19 >> 2] | 0) <= (i27 | 0)) {
13149 ___assert_fail(3640, 3672, 103, 3704);
13150 }
13151 i27 = i12 + (i27 << 3) | 0;
13152 d23 = +HEAPF32[i27 >> 2];
13153 d24 = +HEAPF32[i27 + 4 >> 2];
13154 d24 = d13 * (d4 + (d3 * d23 - d2 * d24) - (d11 + (d6 * d18 - d7 * d17))) + d14 * (d5 + (d2 * d23 + d3 * d24) - (d8 + (d7 * d18 + d6 * d17)));
13155 STACKTOP = i1;
13156 return +d24;
13157 } else if ((i19 | 0) == 2) {
13158 d23 = +HEAPF32[i12 + 92 >> 2];
13159 d13 = +HEAPF32[i12 + 96 >> 2];
13160 d14 = d3 * d23 - d2 * d13;
13161 d13 = d2 * d23 + d3 * d13;
13162 d23 = +HEAPF32[i12 + 84 >> 2];
13163 d24 = +HEAPF32[i12 + 88 >> 2];
13164 d4 = d4 + (d3 * d23 - d2 * d24);
13165 d2 = d5 + (d2 * d23 + d3 * d24);
13166 d3 = -d14;
13167 d24 = -d13;
13168 d5 = d6 * d3 + d7 * d24;
13169 d3 = d6 * d24 - d7 * d3;
13170 HEAP32[i9 >> 2] = -1;
13171 i22 = HEAP32[i12 >> 2] | 0;
13172 i15 = HEAP32[i22 + 16 >> 2] | 0;
13173 i22 = HEAP32[i22 + 20 >> 2] | 0;
13174 if ((i22 | 0) > 1) {
13175 i9 = 0;
13176 d17 = d3 * +HEAPF32[i15 + 4 >> 2] + d5 * +HEAPF32[i15 >> 2];
13177 i19 = 1;
13178 while (1) {
13179 d18 = d5 * +HEAPF32[i15 + (i19 << 3) >> 2] + d3 * +HEAPF32[i15 + (i19 << 3) + 4 >> 2];
13180 i25 = d18 > d17;
13181 i9 = i25 ? i19 : i9;
13182 i19 = i19 + 1 | 0;
13183 if ((i19 | 0) == (i22 | 0)) {
13184 break;
13185 } else {
13186 d17 = i25 ? d18 : d17;
13187 }
13188 }
13189 HEAP32[i10 >> 2] = i9;
13190 if ((i9 | 0) > -1) {
13191 i16 = i9;
13192 } else {
13193 ___assert_fail(3640, 3672, 103, 3704);
13194 }
13195 } else {
13196 HEAP32[i10 >> 2] = 0;
13197 i16 = 0;
13198 }
13199 i9 = HEAP32[i12 >> 2] | 0;
13200 if ((HEAP32[i9 + 20 >> 2] | 0) <= (i16 | 0)) {
13201 ___assert_fail(3640, 3672, 103, 3704);
13202 }
13203 i27 = (HEAP32[i9 + 16 >> 2] | 0) + (i16 << 3) | 0;
13204 d23 = +HEAPF32[i27 >> 2];
13205 d24 = +HEAPF32[i27 + 4 >> 2];
13206 d24 = d14 * (d11 + (d6 * d23 - d7 * d24) - d4) + d13 * (d8 + (d7 * d23 + d6 * d24) - d2);
13207 STACKTOP = i1;
13208 return +d24;
13209 } else {
13210 ___assert_fail(3616, 3560, 183, 3720);
13211 }
13212 return 0.0;
13213 }
13214 function __ZN13b2DynamicTree10InsertLeafEi(i3, i4) {
13215 i3 = i3 | 0;
13216 i4 = i4 | 0;
13217 var i1 = 0, i2 = 0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i9 = 0, i10 = 0, i1 1 = 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;
13218 i1 = STACKTOP;
13219 i11 = i3 + 24 | 0;
13220 HEAP32[i11 >> 2] = (HEAP32[i11 >> 2] | 0) + 1;
13221 i11 = HEAP32[i3 >> 2] | 0;
13222 if ((i11 | 0) == -1) {
13223 HEAP32[i3 >> 2] = i4;
13224 HEAP32[(HEAP32[i3 + 4 >> 2] | 0) + (i4 * 36 | 0) + 20 >> 2] = -1;
13225 STACKTOP = i1;
13226 return;
13227 }
13228 i2 = i3 + 4 | 0;
13229 i9 = HEAP32[i2 >> 2] | 0;
13230 d8 = +HEAPF32[i9 + (i4 * 36 | 0) >> 2];
13231 d7 = +HEAPF32[i9 + (i4 * 36 | 0) + 4 >> 2];
13232 d6 = +HEAPF32[i9 + (i4 * 36 | 0) + 8 >> 2];
13233 d5 = +HEAPF32[i9 + (i4 * 36 | 0) + 12 >> 2];
13234 i10 = HEAP32[i9 + (i11 * 36 | 0) + 24 >> 2] | 0;
13235 L5 : do {
13236 if (!((i10 | 0) == -1)) {
13237 do {
13238 i12 = HEAP32[i9 + (i11 * 36 | 0) + 28 >> 2] | 0;
13239 d14 = +HEAPF32[i9 + (i11 * 36 | 0) + 8 >> 2];
13240 d15 = +HEAPF32[i9 + (i11 * 36 | 0) >> 2];
13241 d17 = +HEAPF32[i9 + (i11 * 36 | 0) + 12 >> 2];
13242 d16 = +HEAPF32[i9 + (i11 * 36 | 0) + 4 >> 2];
13243 d21 = ((d14 > d6 ? d14 : d6) - (d15 < d8 ? d15 : d8) + ((d17 > d5 ? d17 : d5 ) - (d16 < d7 ? d16 : d7))) * 2.0;
13244 d13 = d21 * 2.0;
13245 d14 = (d21 - (d14 - d15 + (d17 - d16)) * 2.0) * 2.0;
13246 d21 = +HEAPF32[i9 + (i10 * 36 | 0) >> 2];
13247 d16 = d8 < d21 ? d8 : d21;
13248 d17 = +HEAPF32[i9 + (i10 * 36 | 0) + 4 >> 2];
13249 d18 = d7 < d17 ? d7 : d17;
13250 d19 = +HEAPF32[i9 + (i10 * 36 | 0) + 8 >> 2];
13251 d20 = d6 > d19 ? d6 : d19;
13252 d15 = +HEAPF32[i9 + (i10 * 36 | 0) + 12 >> 2];
13253 d22 = d5 > d15 ? d5 : d15;
13254 if ((HEAP32[i9 + (i10 * 36 | 0) + 24 >> 2] | 0) == -1) {
13255 d15 = (d20 - d16 + (d22 - d18)) * 2.0;
13256 } else {
13257 d15 = (d20 - d16 + (d22 - d18)) * 2.0 - (d19 - d21 + (d15 - d17)) * 2.0;
13258 }
13259 d15 = d14 + d15;
13260 d17 = +HEAPF32[i9 + (i12 * 36 | 0) >> 2];
13261 d18 = d8 < d17 ? d8 : d17;
13262 d23 = +HEAPF32[i9 + (i12 * 36 | 0) + 4 >> 2];
13263 d22 = d7 < d23 ? d7 : d23;
13264 d21 = +HEAPF32[i9 + (i12 * 36 | 0) + 8 >> 2];
13265 d20 = d6 > d21 ? d6 : d21;
13266 d19 = +HEAPF32[i9 + (i12 * 36 | 0) + 12 >> 2];
13267 d16 = d5 > d19 ? d5 : d19;
13268 if ((HEAP32[i9 + (i12 * 36 | 0) + 24 >> 2] | 0) == -1) {
13269 d16 = (d20 - d18 + (d16 - d22)) * 2.0;
13270 } else {
13271 d16 = (d20 - d18 + (d16 - d22)) * 2.0 - (d21 - d17 + (d19 - d23)) * 2.0;
13272 }
13273 d14 = d14 + d16;
13274 if (d13 < d15 & d13 < d14) {
13275 break L5;
13276 }
13277 i11 = d15 < d14 ? i10 : i12;
13278 i10 = HEAP32[i9 + (i11 * 36 | 0) + 24 >> 2] | 0;
13279 } while (!((i10 | 0) == -1));
13280 }
13281 } while (0);
13282 i9 = HEAP32[i9 + (i11 * 36 | 0) + 20 >> 2] | 0;
13283 i10 = __ZN13b2DynamicTree12AllocateNodeEv(i3) | 0;
13284 i12 = HEAP32[i2 >> 2] | 0;
13285 HEAP32[i12 + (i10 * 36 | 0) + 20 >> 2] = i9;
13286 HEAP32[i12 + (i10 * 36 | 0) + 16 >> 2] = 0;
13287 i12 = HEAP32[i2 >> 2] | 0;
13288 d14 = +HEAPF32[i12 + (i11 * 36 | 0) >> 2];
13289 d13 = +HEAPF32[i12 + (i11 * 36 | 0) + 4 >> 2];
13290 d8 = +(d8 < d14 ? d8 : d14);
13291 d7 = +(d7 < d13 ? d7 : d13);
13292 i24 = i12 + (i10 * 36 | 0) | 0;
13293 HEAPF32[i24 >> 2] = d8;
13294 HEAPF32[i24 + 4 >> 2] = d7;
13295 d8 = +HEAPF32[i12 + (i11 * 36 | 0) + 8 >> 2];
13296 d7 = +HEAPF32[i12 + (i11 * 36 | 0) + 12 >> 2];
13297 d6 = +(d6 > d8 ? d6 : d8);
13298 d23 = +(d5 > d7 ? d5 : d7);
13299 i12 = i12 + (i10 * 36 | 0) + 8 | 0;
13300 HEAPF32[i12 >> 2] = d6;
13301 HEAPF32[i12 + 4 >> 2] = d23;
13302 i12 = HEAP32[i2 >> 2] | 0;
13303 HEAP32[i12 + (i10 * 36 | 0) + 32 >> 2] = (HEAP32[i12 + (i11 * 36 | 0) + 32 >> 2 ] | 0) + 1;
13304 if ((i9 | 0) == -1) {
13305 HEAP32[i12 + (i10 * 36 | 0) + 24 >> 2] = i11;
13306 HEAP32[i12 + (i10 * 36 | 0) + 28 >> 2] = i4;
13307 HEAP32[i12 + (i11 * 36 | 0) + 20 >> 2] = i10;
13308 i24 = i12 + (i4 * 36 | 0) + 20 | 0;
13309 HEAP32[i24 >> 2] = i10;
13310 HEAP32[i3 >> 2] = i10;
13311 i10 = HEAP32[i24 >> 2] | 0;
13312 } else {
13313 i24 = i12 + (i9 * 36 | 0) + 24 | 0;
13314 if ((HEAP32[i24 >> 2] | 0) == (i11 | 0)) {
13315 HEAP32[i24 >> 2] = i10;
13316 } else {
13317 HEAP32[i12 + (i9 * 36 | 0) + 28 >> 2] = i10;
13318 }
13319 HEAP32[i12 + (i10 * 36 | 0) + 24 >> 2] = i11;
13320 HEAP32[i12 + (i10 * 36 | 0) + 28 >> 2] = i4;
13321 HEAP32[i12 + (i11 * 36 | 0) + 20 >> 2] = i10;
13322 HEAP32[i12 + (i4 * 36 | 0) + 20 >> 2] = i10;
13323 }
13324 if ((i10 | 0) == -1) {
13325 STACKTOP = i1;
13326 return;
13327 }
13328 while (1) {
13329 i9 = __ZN13b2DynamicTree7BalanceEi(i3, i10) | 0;
13330 i4 = HEAP32[i2 >> 2] | 0;
13331 i11 = HEAP32[i4 + (i9 * 36 | 0) + 24 >> 2] | 0;
13332 i10 = HEAP32[i4 + (i9 * 36 | 0) + 28 >> 2] | 0;
13333 if ((i11 | 0) == -1) {
13334 i2 = 20;
13335 break;
13336 }
13337 if ((i10 | 0) == -1) {
13338 i2 = 22;
13339 break;
13340 }
13341 i12 = HEAP32[i4 + (i11 * 36 | 0) + 32 >> 2] | 0;
13342 i24 = HEAP32[i4 + (i10 * 36 | 0) + 32 >> 2] | 0;
13343 HEAP32[i4 + (i9 * 36 | 0) + 32 >> 2] = ((i12 | 0) > (i24 | 0) ? i12 : i24) + 1 ;
13344 d7 = +HEAPF32[i4 + (i11 * 36 | 0) >> 2];
13345 d8 = +HEAPF32[i4 + (i10 * 36 | 0) >> 2];
13346 d5 = +HEAPF32[i4 + (i11 * 36 | 0) + 4 >> 2];
13347 d6 = +HEAPF32[i4 + (i10 * 36 | 0) + 4 >> 2];
13348 d7 = +(d7 < d8 ? d7 : d8);
13349 d5 = +(d5 < d6 ? d5 : d6);
13350 i24 = i4 + (i9 * 36 | 0) | 0;
13351 HEAPF32[i24 >> 2] = d7;
13352 HEAPF32[i24 + 4 >> 2] = d5;
13353 d5 = +HEAPF32[i4 + (i11 * 36 | 0) + 8 >> 2];
13354 d6 = +HEAPF32[i4 + (i10 * 36 | 0) + 8 >> 2];
13355 d7 = +HEAPF32[i4 + (i11 * 36 | 0) + 12 >> 2];
13356 d8 = +HEAPF32[i4 + (i10 * 36 | 0) + 12 >> 2];
13357 d5 = +(d5 > d6 ? d5 : d6);
13358 d23 = +(d7 > d8 ? d7 : d8);
13359 i10 = i4 + (i9 * 36 | 0) + 8 | 0;
13360 HEAPF32[i10 >> 2] = d5;
13361 HEAPF32[i10 + 4 >> 2] = d23;
13362 i10 = HEAP32[(HEAP32[i2 >> 2] | 0) + (i9 * 36 | 0) + 20 >> 2] | 0;
13363 if ((i10 | 0) == -1) {
13364 i2 = 24;
13365 break;
13366 }
13367 }
13368 if ((i2 | 0) == 20) {
13369 ___assert_fail(3168, 2944, 307, 3184);
13370 } else if ((i2 | 0) == 22) {
13371 ___assert_fail(3200, 2944, 308, 3184);
13372 } else if ((i2 | 0) == 24) {
13373 STACKTOP = i1;
13374 return;
13375 }
13376 }
13377 function __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i7, i5) {
13378 i7 = i7 | 0;
13379 i5 = i5 | 0;
13380 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i 12 = 0, i13 = 0, i14 = 0, d15 = 0.0, d16 = 0.0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0;
13381 i1 = STACKTOP;
13382 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
13383 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
13384 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
13385 HEAP32[i7 + 12 >> 2] = HEAP32[i5 + 12 >> 2];
13386 HEAP32[i7 + 16 >> 2] = HEAP32[i5 + 16 >> 2];
13387 HEAP32[i7 + 20 >> 2] = HEAP32[i5 + 20 >> 2];
13388 i14 = HEAP32[i5 + 40 >> 2] | 0;
13389 i9 = i7 + 32 | 0;
13390 HEAP32[i9 >> 2] = i14;
13391 i2 = HEAP32[i5 + 28 >> 2] | 0;
13392 i4 = i7 + 48 | 0;
13393 HEAP32[i4 >> 2] = i2;
13394 i3 = i7 + 36 | 0;
13395 HEAP32[i3 >> 2] = __ZN16b2StackAllocator8AllocateEi(i14, i2 * 88 | 0) | 0;
13396 i2 = i7 + 40 | 0;
13397 HEAP32[i2 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i9 >> 2] | 0, (HEAP3 2[i4 >> 2] | 0) * 152 | 0) | 0;
13398 HEAP32[i7 + 24 >> 2] = HEAP32[i5 + 32 >> 2];
13399 HEAP32[i7 + 28 >> 2] = HEAP32[i5 + 36 >> 2];
13400 i9 = HEAP32[i5 + 24 >> 2] | 0;
13401 i5 = i7 + 44 | 0;
13402 HEAP32[i5 >> 2] = i9;
13403 if ((HEAP32[i4 >> 2] | 0) <= 0) {
13404 STACKTOP = i1;
13405 return;
13406 }
13407 i6 = i7 + 20 | 0;
13408 i7 = i7 + 8 | 0;
13409 i8 = 0;
13410 while (1) {
13411 i10 = HEAP32[i9 + (i8 << 2) >> 2] | 0;
13412 i11 = HEAP32[i10 + 48 >> 2] | 0;
13413 i12 = HEAP32[i10 + 52 >> 2] | 0;
13414 i14 = HEAP32[i11 + 8 >> 2] | 0;
13415 i13 = HEAP32[i12 + 8 >> 2] | 0;
13416 i9 = HEAP32[i10 + 124 >> 2] | 0;
13417 if ((i9 | 0) <= 0) {
13418 i2 = 4;
13419 break;
13420 }
13421 d15 = +HEAPF32[(HEAP32[i12 + 12 >> 2] | 0) + 8 >> 2];
13422 d16 = +HEAPF32[(HEAP32[i11 + 12 >> 2] | 0) + 8 >> 2];
13423 i12 = HEAP32[i2 >> 2] | 0;
13424 HEAPF32[i12 + (i8 * 152 | 0) + 136 >> 2] = +HEAPF32[i10 + 136 >> 2];
13425 HEAPF32[i12 + (i8 * 152 | 0) + 140 >> 2] = +HEAPF32[i10 + 140 >> 2];
13426 i22 = i14 + 8 | 0;
13427 HEAP32[i12 + (i8 * 152 | 0) + 112 >> 2] = HEAP32[i22 >> 2];
13428 i21 = i13 + 8 | 0;
13429 HEAP32[i12 + (i8 * 152 | 0) + 116 >> 2] = HEAP32[i21 >> 2];
13430 i19 = i14 + 120 | 0;
13431 HEAPF32[i12 + (i8 * 152 | 0) + 120 >> 2] = +HEAPF32[i19 >> 2];
13432 i20 = i13 + 120 | 0;
13433 HEAPF32[i12 + (i8 * 152 | 0) + 124 >> 2] = +HEAPF32[i20 >> 2];
13434 i18 = i14 + 128 | 0;
13435 HEAPF32[i12 + (i8 * 152 | 0) + 128 >> 2] = +HEAPF32[i18 >> 2];
13436 i17 = i13 + 128 | 0;
13437 HEAPF32[i12 + (i8 * 152 | 0) + 132 >> 2] = +HEAPF32[i17 >> 2];
13438 HEAP32[i12 + (i8 * 152 | 0) + 148 >> 2] = i8;
13439 HEAP32[i12 + (i8 * 152 | 0) + 144 >> 2] = i9;
13440 i11 = i12 + (i8 * 152 | 0) + 80 | 0;
13441 HEAP32[i11 + 0 >> 2] = 0;
13442 HEAP32[i11 + 4 >> 2] = 0;
13443 HEAP32[i11 + 8 >> 2] = 0;
13444 HEAP32[i11 + 12 >> 2] = 0;
13445 HEAP32[i11 + 16 >> 2] = 0;
13446 HEAP32[i11 + 20 >> 2] = 0;
13447 HEAP32[i11 + 24 >> 2] = 0;
13448 HEAP32[i11 + 28 >> 2] = 0;
13449 i11 = HEAP32[i3 >> 2] | 0;
13450 HEAP32[i11 + (i8 * 88 | 0) + 32 >> 2] = HEAP32[i22 >> 2];
13451 HEAP32[i11 + (i8 * 88 | 0) + 36 >> 2] = HEAP32[i21 >> 2];
13452 HEAPF32[i11 + (i8 * 88 | 0) + 40 >> 2] = +HEAPF32[i19 >> 2];
13453 HEAPF32[i11 + (i8 * 88 | 0) + 44 >> 2] = +HEAPF32[i20 >> 2];
13454 i20 = i14 + 28 | 0;
13455 i14 = HEAP32[i20 + 4 >> 2] | 0;
13456 i19 = i11 + (i8 * 88 | 0) + 48 | 0;
13457 HEAP32[i19 >> 2] = HEAP32[i20 >> 2];
13458 HEAP32[i19 + 4 >> 2] = i14;
13459 i19 = i13 + 28 | 0;
13460 i14 = HEAP32[i19 + 4 >> 2] | 0;
13461 i13 = i11 + (i8 * 88 | 0) + 56 | 0;
13462 HEAP32[i13 >> 2] = HEAP32[i19 >> 2];
13463 HEAP32[i13 + 4 >> 2] = i14;
13464 HEAPF32[i11 + (i8 * 88 | 0) + 64 >> 2] = +HEAPF32[i18 >> 2];
13465 HEAPF32[i11 + (i8 * 88 | 0) + 68 >> 2] = +HEAPF32[i17 >> 2];
13466 i13 = i10 + 104 | 0;
13467 i14 = HEAP32[i13 + 4 >> 2] | 0;
13468 i17 = i11 + (i8 * 88 | 0) + 16 | 0;
13469 HEAP32[i17 >> 2] = HEAP32[i13 >> 2];
13470 HEAP32[i17 + 4 >> 2] = i14;
13471 i17 = i10 + 112 | 0;
13472 i14 = HEAP32[i17 + 4 >> 2] | 0;
13473 i13 = i11 + (i8 * 88 | 0) + 24 | 0;
13474 HEAP32[i13 >> 2] = HEAP32[i17 >> 2];
13475 HEAP32[i13 + 4 >> 2] = i14;
13476 HEAP32[i11 + (i8 * 88 | 0) + 84 >> 2] = i9;
13477 HEAPF32[i11 + (i8 * 88 | 0) + 76 >> 2] = d16;
13478 HEAPF32[i11 + (i8 * 88 | 0) + 80 >> 2] = d15;
13479 HEAP32[i11 + (i8 * 88 | 0) + 72 >> 2] = HEAP32[i10 + 120 >> 2];
13480 i13 = 0;
13481 do {
13482 i14 = i10 + (i13 * 20 | 0) + 64 | 0;
13483 if ((HEAP8[i6] | 0) == 0) {
13484 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 16 >> 2] = 0.0;
13485 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 20 >> 2] = 0.0;
13486 } else {
13487 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 16 >> 2] = +HEAPF32[i7 >> 2] * +HEAPF32[i10 + (i13 * 20 | 0) + 72 >> 2];
13488 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 20 >> 2] = +HEAPF32[i7 >> 2] * +HEAPF32[i10 + (i13 * 20 | 0) + 76 >> 2];
13489 }
13490 i20 = i12 + (i8 * 152 | 0) + (i13 * 36 | 0) | 0;
13491 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 24 >> 2] = 0.0;
13492 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 28 >> 2] = 0.0;
13493 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 32 >> 2] = 0.0;
13494 i22 = i11 + (i8 * 88 | 0) + (i13 << 3) | 0;
13495 HEAP32[i20 + 0 >> 2] = 0;
13496 HEAP32[i20 + 4 >> 2] = 0;
13497 HEAP32[i20 + 8 >> 2] = 0;
13498 HEAP32[i20 + 12 >> 2] = 0;
13499 i20 = i14;
13500 i21 = HEAP32[i20 + 4 >> 2] | 0;
13501 HEAP32[i22 >> 2] = HEAP32[i20 >> 2];
13502 HEAP32[i22 + 4 >> 2] = i21;
13503 i13 = i13 + 1 | 0;
13504 } while ((i13 | 0) != (i9 | 0));
13505 i8 = i8 + 1 | 0;
13506 if ((i8 | 0) >= (HEAP32[i4 >> 2] | 0)) {
13507 i2 = 12;
13508 break;
13509 }
13510 i9 = HEAP32[i5 >> 2] | 0;
13511 }
13512 if ((i2 | 0) == 4) {
13513 ___assert_fail(6504, 6520, 71, 6568);
13514 } else if ((i2 | 0) == 12) {
13515 STACKTOP = i1;
13516 return;
13517 }
13518 }
13519 function __Z25b2CollidePolygonAndCircleP10b2ManifoldPK14b2PolygonShapeRK11b2Tran sformPK13b2CircleShapeS6_(i1, i4, i11, i9, i10) {
13520 i1 = i1 | 0;
13521 i4 = i4 | 0;
13522 i11 = i11 | 0;
13523 i9 = i9 | 0;
13524 i10 = i10 | 0;
13525 var i2 = 0, i3 = 0, i5 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i12 = 0, d13 = 0.0, d 14 = 0.0, i15 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, i22 = 0;
13526 i3 = STACKTOP;
13527 i5 = i1 + 60 | 0;
13528 HEAP32[i5 >> 2] = 0;
13529 i2 = i9 + 12 | 0;
13530 d20 = +HEAPF32[i10 + 12 >> 2];
13531 d7 = +HEAPF32[i2 >> 2];
13532 d6 = +HEAPF32[i10 + 8 >> 2];
13533 d21 = +HEAPF32[i9 + 16 >> 2];
13534 d8 = +HEAPF32[i10 >> 2] + (d20 * d7 - d6 * d21) - +HEAPF32[i11 >> 2];
13535 d21 = d7 * d6 + d20 * d21 + +HEAPF32[i10 + 4 >> 2] - +HEAPF32[i11 + 4 >> 2];
13536 d20 = +HEAPF32[i11 + 12 >> 2];
13537 d6 = +HEAPF32[i11 + 8 >> 2];
13538 d7 = d8 * d20 + d21 * d6;
13539 d6 = d20 * d21 - d8 * d6;
13540 d8 = +HEAPF32[i4 + 8 >> 2] + +HEAPF32[i9 + 8 >> 2];
13541 i12 = HEAP32[i4 + 148 >> 2] | 0;
13542 do {
13543 if ((i12 | 0) > 0) {
13544 i10 = 0;
13545 i9 = 0;
13546 d13 = -3.4028234663852886e+38;
13547 while (1) {
13548 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];
13549 if (d14 > d8) {
13550 i10 = 19;
13551 break;
13552 }
13553 i11 = d14 > d13;
13554 d13 = i11 ? d14 : d13;
13555 i9 = i11 ? i10 : i9;
13556 i10 = i10 + 1 | 0;
13557 if ((i10 | 0) >= (i12 | 0)) {
13558 i10 = 4;
13559 break;
13560 }
13561 }
13562 if ((i10 | 0) == 4) {
13563 i22 = d13 < 1.1920928955078125e-7;
13564 break;
13565 } else if ((i10 | 0) == 19) {
13566 STACKTOP = i3;
13567 return;
13568 }
13569 } else {
13570 i9 = 0;
13571 i22 = 1;
13572 }
13573 } while (0);
13574 i15 = i9 + 1 | 0;
13575 i11 = i4 + (i9 << 3) + 20 | 0;
13576 i10 = HEAP32[i11 >> 2] | 0;
13577 i11 = HEAP32[i11 + 4 >> 2] | 0;
13578 d14 = (HEAP32[tempDoublePtr >> 2] = i10, +HEAPF32[tempDoublePtr >> 2]);
13579 d13 = (HEAP32[tempDoublePtr >> 2] = i11, +HEAPF32[tempDoublePtr >> 2]);
13580 i12 = i4 + (((i15 | 0) < (i12 | 0) ? i15 : 0) << 3) + 20 | 0;
13581 i15 = HEAP32[i12 >> 2] | 0;
13582 i12 = HEAP32[i12 + 4 >> 2] | 0;
13583 d21 = (HEAP32[tempDoublePtr >> 2] = i15, +HEAPF32[tempDoublePtr >> 2]);
13584 d18 = (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]);
13585 if (i22) {
13586 HEAP32[i5 >> 2] = 1;
13587 HEAP32[i1 + 56 >> 2] = 1;
13588 i22 = i4 + (i9 << 3) + 84 | 0;
13589 i15 = HEAP32[i22 + 4 >> 2] | 0;
13590 i12 = i1 + 40 | 0;
13591 HEAP32[i12 >> 2] = HEAP32[i22 >> 2];
13592 HEAP32[i12 + 4 >> 2] = i15;
13593 d20 = +((d14 + d21) * .5);
13594 d21 = +((d13 + d18) * .5);
13595 i12 = i1 + 48 | 0;
13596 HEAPF32[i12 >> 2] = d20;
13597 HEAPF32[i12 + 4 >> 2] = d21;
13598 i12 = i2;
13599 i15 = HEAP32[i12 + 4 >> 2] | 0;
13600 i22 = i1;
13601 HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
13602 HEAP32[i22 + 4 >> 2] = i15;
13603 HEAP32[i1 + 16 >> 2] = 0;
13604 STACKTOP = i3;
13605 return;
13606 }
13607 d16 = d7 - d14;
13608 d20 = d6 - d13;
13609 d19 = d7 - d21;
13610 d17 = d6 - d18;
13611 if (d16 * (d21 - d14) + d20 * (d18 - d13) <= 0.0) {
13612 if (d16 * d16 + d20 * d20 > d8 * d8) {
13613 STACKTOP = i3;
13614 return;
13615 }
13616 HEAP32[i5 >> 2] = 1;
13617 HEAP32[i1 + 56 >> 2] = 1;
13618 i4 = i1 + 40 | 0;
13619 d21 = +d16;
13620 d6 = +d20;
13621 i22 = i4;
13622 HEAPF32[i22 >> 2] = d21;
13623 HEAPF32[i22 + 4 >> 2] = d6;
13624 d6 = +Math_sqrt(+(d16 * d16 + d20 * d20));
13625 if (!(d6 < 1.1920928955078125e-7)) {
13626 d21 = 1.0 / d6;
13627 HEAPF32[i4 >> 2] = d16 * d21;
13628 HEAPF32[i1 + 44 >> 2] = d20 * d21;
13629 }
13630 i12 = i1 + 48 | 0;
13631 HEAP32[i12 >> 2] = i10;
13632 HEAP32[i12 + 4 >> 2] = i11;
13633 i12 = i2;
13634 i15 = HEAP32[i12 + 4 >> 2] | 0;
13635 i22 = i1;
13636 HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
13637 HEAP32[i22 + 4 >> 2] = i15;
13638 HEAP32[i1 + 16 >> 2] = 0;
13639 STACKTOP = i3;
13640 return;
13641 }
13642 if (!(d19 * (d14 - d21) + d17 * (d13 - d18) <= 0.0)) {
13643 d14 = (d14 + d21) * .5;
13644 d13 = (d13 + d18) * .5;
13645 i10 = i4 + (i9 << 3) + 84 | 0;
13646 if ((d7 - d14) * +HEAPF32[i10 >> 2] + (d6 - d13) * +HEAPF32[i4 + (i9 << 3) + 8 8 >> 2] > d8) {
13647 STACKTOP = i3;
13648 return;
13649 }
13650 HEAP32[i5 >> 2] = 1;
13651 HEAP32[i1 + 56 >> 2] = 1;
13652 i22 = i10;
13653 i15 = HEAP32[i22 + 4 >> 2] | 0;
13654 i12 = i1 + 40 | 0;
13655 HEAP32[i12 >> 2] = HEAP32[i22 >> 2];
13656 HEAP32[i12 + 4 >> 2] = i15;
13657 d20 = +d14;
13658 d21 = +d13;
13659 i12 = i1 + 48 | 0;
13660 HEAPF32[i12 >> 2] = d20;
13661 HEAPF32[i12 + 4 >> 2] = d21;
13662 i12 = i2;
13663 i15 = HEAP32[i12 + 4 >> 2] | 0;
13664 i22 = i1;
13665 HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
13666 HEAP32[i22 + 4 >> 2] = i15;
13667 HEAP32[i1 + 16 >> 2] = 0;
13668 STACKTOP = i3;
13669 return;
13670 }
13671 if (d19 * d19 + d17 * d17 > d8 * d8) {
13672 STACKTOP = i3;
13673 return;
13674 }
13675 HEAP32[i5 >> 2] = 1;
13676 HEAP32[i1 + 56 >> 2] = 1;
13677 i4 = i1 + 40 | 0;
13678 d21 = +d19;
13679 d6 = +d17;
13680 i22 = i4;
13681 HEAPF32[i22 >> 2] = d21;
13682 HEAPF32[i22 + 4 >> 2] = d6;
13683 d6 = +Math_sqrt(+(d19 * d19 + d17 * d17));
13684 if (!(d6 < 1.1920928955078125e-7)) {
13685 d21 = 1.0 / d6;
13686 HEAPF32[i4 >> 2] = d19 * d21;
13687 HEAPF32[i1 + 44 >> 2] = d17 * d21;
13688 }
13689 i22 = i1 + 48 | 0;
13690 HEAP32[i22 >> 2] = i15;
13691 HEAP32[i22 + 4 >> 2] = i12;
13692 i12 = i2;
13693 i15 = HEAP32[i12 + 4 >> 2] | 0;
13694 i22 = i1;
13695 HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
13696 HEAP32[i22 + 4 >> 2] = i15;
13697 HEAP32[i1 + 16 >> 2] = 0;
13698 STACKTOP = i3;
13699 return;
13700 }
13701 function __ZN15b2WorldManifold10InitializeEPK10b2ManifoldRK11b2TransformfS5_f(i1 , i5, i7, d4, i8, d3) {
13702 i1 = i1 | 0;
13703 i5 = i5 | 0;
13704 i7 = i7 | 0;
13705 d4 = +d4;
13706 i8 = i8 | 0;
13707 d3 = +d3;
13708 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;
13709 i2 = STACKTOP;
13710 i6 = i5 + 60 | 0;
13711 if ((HEAP32[i6 >> 2] | 0) == 0) {
13712 STACKTOP = i2;
13713 return;
13714 }
13715 i11 = HEAP32[i5 + 56 >> 2] | 0;
13716 if ((i11 | 0) == 2) {
13717 i13 = i8 + 12 | 0;
13718 d17 = +HEAPF32[i13 >> 2];
13719 d18 = +HEAPF32[i5 + 40 >> 2];
13720 i16 = i8 + 8 | 0;
13721 d19 = +HEAPF32[i16 >> 2];
13722 d15 = +HEAPF32[i5 + 44 >> 2];
13723 d14 = d17 * d18 - d19 * d15;
13724 d15 = d18 * d19 + d17 * d15;
13725 d17 = +d14;
13726 d19 = +d15;
13727 i12 = i1;
13728 HEAPF32[i12 >> 2] = d17;
13729 HEAPF32[i12 + 4 >> 2] = d19;
13730 d19 = +HEAPF32[i13 >> 2];
13731 d17 = +HEAPF32[i5 + 48 >> 2];
13732 d18 = +HEAPF32[i16 >> 2];
13733 d10 = +HEAPF32[i5 + 52 >> 2];
13734 d9 = +HEAPF32[i8 >> 2] + (d19 * d17 - d18 * d10);
13735 d10 = d17 * d18 + d19 * d10 + +HEAPF32[i8 + 4 >> 2];
13736 if ((HEAP32[i6 >> 2] | 0) > 0) {
13737 i8 = i7 + 12 | 0;
13738 i11 = i7 + 8 | 0;
13739 i12 = i7 + 4 | 0;
13740 i13 = i1 + 4 | 0;
13741 i16 = 0;
13742 do {
13743 d18 = +HEAPF32[i8 >> 2];
13744 d22 = +HEAPF32[i5 + (i16 * 20 | 0) >> 2];
13745 d21 = +HEAPF32[i11 >> 2];
13746 d17 = +HEAPF32[i5 + (i16 * 20 | 0) + 4 >> 2];
13747 d19 = +HEAPF32[i7 >> 2] + (d18 * d22 - d21 * d17);
13748 d17 = d22 * d21 + d18 * d17 + +HEAPF32[i12 >> 2];
13749 d18 = d3 - (d14 * (d19 - d9) + (d17 - d10) * d15);
13750 d19 = +((d19 - d14 * d4 + (d19 + d14 * d18)) * .5);
13751 d14 = +((d17 - d15 * d4 + (d17 + d15 * d18)) * .5);
13752 i20 = i1 + (i16 << 3) + 8 | 0;
13753 HEAPF32[i20 >> 2] = d19;
13754 HEAPF32[i20 + 4 >> 2] = d14;
13755 i16 = i16 + 1 | 0;
13756 d14 = +HEAPF32[i1 >> 2];
13757 d15 = +HEAPF32[i13 >> 2];
13758 } while ((i16 | 0) < (HEAP32[i6 >> 2] | 0));
13759 }
13760 d21 = +-d14;
13761 d22 = +-d15;
13762 i20 = i1;
13763 HEAPF32[i20 >> 2] = d21;
13764 HEAPF32[i20 + 4 >> 2] = d22;
13765 STACKTOP = i2;
13766 return;
13767 } else if ((i11 | 0) == 1) {
13768 i16 = i7 + 12 | 0;
13769 d19 = +HEAPF32[i16 >> 2];
13770 d21 = +HEAPF32[i5 + 40 >> 2];
13771 i20 = i7 + 8 | 0;
13772 d22 = +HEAPF32[i20 >> 2];
13773 d15 = +HEAPF32[i5 + 44 >> 2];
13774 d14 = d19 * d21 - d22 * d15;
13775 d15 = d21 * d22 + d19 * d15;
13776 d19 = +d14;
13777 d22 = +d15;
13778 i13 = i1;
13779 HEAPF32[i13 >> 2] = d19;
13780 HEAPF32[i13 + 4 >> 2] = d22;
13781 d22 = +HEAPF32[i16 >> 2];
13782 d19 = +HEAPF32[i5 + 48 >> 2];
13783 d21 = +HEAPF32[i20 >> 2];
13784 d10 = +HEAPF32[i5 + 52 >> 2];
13785 d9 = +HEAPF32[i7 >> 2] + (d22 * d19 - d21 * d10);
13786 d10 = d19 * d21 + d22 * d10 + +HEAPF32[i7 + 4 >> 2];
13787 if ((HEAP32[i6 >> 2] | 0) <= 0) {
13788 STACKTOP = i2;
13789 return;
13790 }
13791 i12 = i8 + 12 | 0;
13792 i11 = i8 + 8 | 0;
13793 i7 = i8 + 4 | 0;
13794 i13 = i1 + 4 | 0;
13795 i16 = 0;
13796 while (1) {
13797 d22 = +HEAPF32[i12 >> 2];
13798 d17 = +HEAPF32[i5 + (i16 * 20 | 0) >> 2];
13799 d18 = +HEAPF32[i11 >> 2];
13800 d19 = +HEAPF32[i5 + (i16 * 20 | 0) + 4 >> 2];
13801 d21 = +HEAPF32[i8 >> 2] + (d22 * d17 - d18 * d19);
13802 d19 = d17 * d18 + d22 * d19 + +HEAPF32[i7 >> 2];
13803 d22 = d4 - (d14 * (d21 - d9) + (d19 - d10) * d15);
13804 d21 = +((d21 - d14 * d3 + (d21 + d14 * d22)) * .5);
13805 d22 = +((d19 - d15 * d3 + (d19 + d15 * d22)) * .5);
13806 i20 = i1 + (i16 << 3) + 8 | 0;
13807 HEAPF32[i20 >> 2] = d21;
13808 HEAPF32[i20 + 4 >> 2] = d22;
13809 i16 = i16 + 1 | 0;
13810 if ((i16 | 0) >= (HEAP32[i6 >> 2] | 0)) {
13811 break;
13812 }
13813 d14 = +HEAPF32[i1 >> 2];
13814 d15 = +HEAPF32[i13 >> 2];
13815 }
13816 STACKTOP = i2;
13817 return;
13818 } else if ((i11 | 0) == 0) {
13819 HEAPF32[i1 >> 2] = 1.0;
13820 i6 = i1 + 4 | 0;
13821 HEAPF32[i6 >> 2] = 0.0;
13822 d21 = +HEAPF32[i7 + 12 >> 2];
13823 d22 = +HEAPF32[i5 + 48 >> 2];
13824 d19 = +HEAPF32[i7 + 8 >> 2];
13825 d10 = +HEAPF32[i5 + 52 >> 2];
13826 d9 = +HEAPF32[i7 >> 2] + (d21 * d22 - d19 * d10);
13827 d10 = d22 * d19 + d21 * d10 + +HEAPF32[i7 + 4 >> 2];
13828 d21 = +HEAPF32[i8 + 12 >> 2];
13829 d19 = +HEAPF32[i5 >> 2];
13830 d22 = +HEAPF32[i8 + 8 >> 2];
13831 d15 = +HEAPF32[i5 + 4 >> 2];
13832 d14 = +HEAPF32[i8 >> 2] + (d21 * d19 - d22 * d15);
13833 d15 = d19 * d22 + d21 * d15 + +HEAPF32[i8 + 4 >> 2];
13834 d21 = d9 - d14;
13835 d22 = d10 - d15;
13836 if (d21 * d21 + d22 * d22 > 1.4210854715202004e-14) {
13837 d19 = d14 - d9;
13838 d17 = d15 - d10;
13839 d22 = +d19;
13840 d18 = +d17;
13841 i20 = i1;
13842 HEAPF32[i20 >> 2] = d22;
13843 HEAPF32[i20 + 4 >> 2] = d18;
13844 d18 = +Math_sqrt(+(d19 * d19 + d17 * d17));
13845 if (!(d18 < 1.1920928955078125e-7)) {
13846 d22 = 1.0 / d18;
13847 d19 = d19 * d22;
13848 HEAPF32[i1 >> 2] = d19;
13849 d17 = d17 * d22;
13850 HEAPF32[i6 >> 2] = d17;
13851 }
13852 } else {
13853 d19 = 1.0;
13854 d17 = 0.0;
13855 }
13856 d21 = +((d9 + d19 * d4 + (d14 - d19 * d3)) * .5);
13857 d22 = +((d10 + d17 * d4 + (d15 - d17 * d3)) * .5);
13858 i20 = i1 + 8 | 0;
13859 HEAPF32[i20 >> 2] = d21;
13860 HEAPF32[i20 + 4 >> 2] = d22;
13861 STACKTOP = i2;
13862 return;
13863 } else {
13864 STACKTOP = i2;
13865 return;
13866 }
13867 }
13868 function _main(i3, i2) {
13869 i3 = i3 | 0;
13870 i2 = i2 | 0;
13871 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, i 20 = 0, i21 = 0, d22 = 0.0, d23 = 0.0;
13872 i1 = STACKTOP;
13873 STACKTOP = STACKTOP + 240 | 0;
13874 i5 = i1;
13875 i12 = i1 + 224 | 0;
13876 i4 = i1 + 168 | 0;
13877 i9 = i1 + 160 | 0;
13878 i8 = i1 + 152 | 0;
13879 L1 : do {
13880 if ((i3 | 0) > 1) {
13881 i14 = HEAP8[HEAP32[i2 + 4 >> 2] | 0] | 0;
13882 switch (i14 | 0) {
13883 case 49:
13884 {
13885 HEAP32[2] = 5;
13886 HEAP32[4] = 35;
13887 i15 = 35;
13888 i14 = 5;
13889 break L1;
13890 }
13891 case 50:
13892 {
13893 HEAP32[2] = 32;
13894 HEAP32[4] = 161;
13895 i15 = 161;
13896 i14 = 32;
13897 break L1;
13898 }
13899 case 51:
13900 {
13901 i13 = 5;
13902 break L1;
13903 }
13904 case 52:
13905 {
13906 HEAP32[2] = 320;
13907 HEAP32[4] = 2331;
13908 i15 = 2331;
13909 i14 = 320;
13910 break L1;
13911 }
13912 case 53:
13913 {
13914 HEAP32[2] = 640;
13915 HEAP32[4] = 5661;
13916 i15 = 5661;
13917 i14 = 640;
13918 break L1;
13919 }
13920 case 48:
13921 {
13922 i20 = 0;
13923 STACKTOP = i1;
13924 return i20 | 0;
13925 }
13926 default:
13927 {
13928 HEAP32[i5 >> 2] = i14 + -48;
13929 _printf(80, i5 | 0) | 0;
13930 i20 = -1;
13931 STACKTOP = i1;
13932 return i20 | 0;
13933 }
13934 }
13935 } else {
13936 i13 = 5;
13937 }
13938 } while (0);
13939 if ((i13 | 0) == 5) {
13940 HEAP32[2] = 64;
13941 HEAP32[4] = 333;
13942 i15 = 333;
13943 i14 = 64;
13944 }
13945 i13 = i15 + i14 | 0;
13946 HEAP32[4] = i13;
13947 HEAP32[2] = 0;
13948 HEAP32[8] = __Znaj(i13 >>> 0 > 1073741823 ? -1 : i13 << 2) | 0;
13949 HEAPF32[i12 >> 2] = 0.0;
13950 HEAPF32[i12 + 4 >> 2] = -10.0;
13951 i15 = __Znwj(103028) | 0;
13952 __ZN7b2WorldC2ERK6b2Vec2(i15, i12);
13953 HEAP32[6] = i15;
13954 __ZN7b2World16SetAllowSleepingEb(i15, 0);
13955 HEAP32[i5 + 44 >> 2] = 0;
13956 i15 = i5 + 4 | 0;
13957 i14 = i5 + 36 | 0;
13958 HEAP32[i15 + 0 >> 2] = 0;
13959 HEAP32[i15 + 4 >> 2] = 0;
13960 HEAP32[i15 + 8 >> 2] = 0;
13961 HEAP32[i15 + 12 >> 2] = 0;
13962 HEAP32[i15 + 16 >> 2] = 0;
13963 HEAP32[i15 + 20 >> 2] = 0;
13964 HEAP32[i15 + 24 >> 2] = 0;
13965 HEAP32[i15 + 28 >> 2] = 0;
13966 HEAP8[i14] = 1;
13967 HEAP8[i5 + 37 | 0] = 1;
13968 HEAP8[i5 + 38 | 0] = 0;
13969 HEAP8[i5 + 39 | 0] = 0;
13970 HEAP32[i5 >> 2] = 0;
13971 HEAP8[i5 + 40 | 0] = 1;
13972 HEAPF32[i5 + 48 >> 2] = 1.0;
13973 i14 = __ZN7b2World10CreateBodyEPK9b2BodyDef(HEAP32[6] | 0, i5) | 0;
13974 HEAP32[i4 >> 2] = 240;
13975 HEAP32[i4 + 4 >> 2] = 1;
13976 HEAPF32[i4 + 8 >> 2] = .009999999776482582;
13977 i15 = i4 + 28 | 0;
13978 HEAP32[i15 + 0 >> 2] = 0;
13979 HEAP32[i15 + 4 >> 2] = 0;
13980 HEAP32[i15 + 8 >> 2] = 0;
13981 HEAP32[i15 + 12 >> 2] = 0;
13982 HEAP16[i15 + 16 >> 1] = 0;
13983 HEAPF32[i9 >> 2] = -40.0;
13984 HEAPF32[i9 + 4 >> 2] = 0.0;
13985 HEAPF32[i8 >> 2] = 40.0;
13986 HEAPF32[i8 + 4 >> 2] = 0.0;
13987 __ZN11b2EdgeShape3SetERK6b2Vec2S2_(i4, i9, i8);
13988 __ZN6b2Body13CreateFixtureEPK7b2Shapef(i14, i4, 0.0) | 0;
13989 HEAP32[i5 >> 2] = 504;
13990 HEAP32[i5 + 4 >> 2] = 2;
13991 HEAPF32[i5 + 8 >> 2] = .009999999776482582;
13992 HEAP32[i5 + 148 >> 2] = 0;
13993 HEAPF32[i5 + 12 >> 2] = 0.0;
13994 HEAPF32[i5 + 16 >> 2] = 0.0;
13995 __ZN14b2PolygonShape8SetAsBoxEff(i5, .5, .5);
13996 i14 = i4 + 44 | 0;
13997 i15 = i4 + 4 | 0;
13998 i8 = i4 + 36 | 0;
13999 i17 = i4 + 37 | 0;
14000 i18 = i4 + 38 | 0;
14001 i19 = i4 + 39 | 0;
14002 i20 = i4 + 40 | 0;
14003 i13 = i4 + 48 | 0;
14004 i12 = i4 + 4 | 0;
14005 d11 = -7.0;
14006 d10 = .75;
14007 i9 = 0;
14008 while (1) {
14009 d7 = d11;
14010 d6 = d10;
14011 i16 = i9;
14012 while (1) {
14013 HEAP32[i14 >> 2] = 0;
14014 HEAP32[i15 + 0 >> 2] = 0;
14015 HEAP32[i15 + 4 >> 2] = 0;
14016 HEAP32[i15 + 8 >> 2] = 0;
14017 HEAP32[i15 + 12 >> 2] = 0;
14018 HEAP32[i15 + 16 >> 2] = 0;
14019 HEAP32[i15 + 20 >> 2] = 0;
14020 HEAP32[i15 + 24 >> 2] = 0;
14021 HEAP32[i15 + 28 >> 2] = 0;
14022 HEAP8[i8] = 1;
14023 HEAP8[i17] = 1;
14024 HEAP8[i18] = 0;
14025 HEAP8[i19] = 0;
14026 HEAP8[i20] = 1;
14027 HEAPF32[i13 >> 2] = 1.0;
14028 HEAP32[i4 >> 2] = 2;
14029 d23 = +d7;
14030 d22 = +d6;
14031 i21 = i12;
14032 HEAPF32[i21 >> 2] = d23;
14033 HEAPF32[i21 + 4 >> 2] = d22;
14034 i21 = __ZN7b2World10CreateBodyEPK9b2BodyDef(HEAP32[6] | 0, i4) | 0;
14035 __ZN6b2Body13CreateFixtureEPK7b2Shapef(i21, i5, 5.0) | 0;
14036 HEAP32[14] = i21;
14037 i16 = i16 + 1 | 0;
14038 if ((i16 | 0) >= 40) {
14039 break;
14040 } else {
14041 d7 = d7 + 1.125;
14042 d6 = d6 + 0.0;
14043 }
14044 }
14045 i9 = i9 + 1 | 0;
14046 if ((i9 | 0) >= 40) {
14047 break;
14048 } else {
14049 d11 = d11 + .5625;
14050 d10 = d10 + 1.0;
14051 }
14052 }
14053 if ((HEAP32[2] | 0) > 0) {
14054 i4 = 0;
14055 do {
14056 __ZN7b2World4StepEfii(HEAP32[6] | 0, .01666666753590107, 3, 3);
14057 i4 = i4 + 1 | 0;
14058 } while ((i4 | 0) < (HEAP32[2] | 0));
14059 }
14060 if ((i3 | 0) > 2) {
14061 i21 = (HEAP8[HEAP32[i2 + 8 >> 2] | 0] | 0) + -48 | 0;
14062 HEAP32[18] = i21;
14063 if ((i21 | 0) != 0) {
14064 _puts(208) | 0;
14065 _emscripten_set_main_loop(2, 60, 1);
14066 i21 = 0;
14067 STACKTOP = i1;
14068 return i21 | 0;
14069 }
14070 } else {
14071 HEAP32[18] = 0;
14072 }
14073 while (1) {
14074 __Z4iterv();
14075 if ((HEAP32[16] | 0) > (HEAP32[4] | 0)) {
14076 i2 = 0;
14077 break;
14078 }
14079 }
14080 STACKTOP = i1;
14081 return i2 | 0;
14082 }
14083 function __ZN9b2Simplex9ReadCacheEPK14b2SimplexCachePK15b2DistanceProxyRK11b2Tra nsformS5_S8_(i2, i11, i10, i4, i3, i5) {
14084 i2 = i2 | 0;
14085 i11 = i11 | 0;
14086 i10 = i10 | 0;
14087 i4 = i4 | 0;
14088 i3 = i3 | 0;
14089 i5 = i5 | 0;
14090 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;
14091 i1 = STACKTOP;
14092 i13 = HEAP16[i11 + 4 >> 1] | 0;
14093 if (!((i13 & 65535) < 4)) {
14094 ___assert_fail(2872, 2672, 102, 2896);
14095 }
14096 i12 = i13 & 65535;
14097 i6 = i2 + 108 | 0;
14098 HEAP32[i6 >> 2] = i12;
14099 L4 : do {
14100 if (!(i13 << 16 >> 16 == 0)) {
14101 i17 = i10 + 20 | 0;
14102 i21 = i10 + 16 | 0;
14103 i13 = i3 + 20 | 0;
14104 i14 = i3 + 16 | 0;
14105 i15 = i4 + 12 | 0;
14106 i16 = i4 + 8 | 0;
14107 i12 = i4 + 4 | 0;
14108 i18 = i5 + 12 | 0;
14109 i19 = i5 + 8 | 0;
14110 i20 = i5 + 4 | 0;
14111 i22 = 0;
14112 while (1) {
14113 i26 = HEAPU8[i11 + i22 + 6 | 0] | 0;
14114 HEAP32[i2 + (i22 * 36 | 0) + 28 >> 2] = i26;
14115 i23 = HEAPU8[i11 + i22 + 9 | 0] | 0;
14116 HEAP32[i2 + (i22 * 36 | 0) + 32 >> 2] = i23;
14117 if ((HEAP32[i17 >> 2] | 0) <= (i26 | 0)) {
14118 i9 = 6;
14119 break;
14120 }
14121 i26 = (HEAP32[i21 >> 2] | 0) + (i26 << 3) | 0;
14122 d25 = +HEAPF32[i26 >> 2];
14123 d24 = +HEAPF32[i26 + 4 >> 2];
14124 if ((HEAP32[i13 >> 2] | 0) <= (i23 | 0)) {
14125 i9 = 8;
14126 break;
14127 }
14128 i23 = (HEAP32[i14 >> 2] | 0) + (i23 << 3) | 0;
14129 d29 = +HEAPF32[i23 >> 2];
14130 d31 = +HEAPF32[i23 + 4 >> 2];
14131 d32 = +HEAPF32[i15 >> 2];
14132 d30 = +HEAPF32[i16 >> 2];
14133 d27 = +HEAPF32[i4 >> 2] + (d25 * d32 - d24 * d30);
14134 d28 = +d27;
14135 d30 = +(d24 * d32 + d25 * d30 + +HEAPF32[i12 >> 2]);
14136 i23 = i2 + (i22 * 36 | 0) | 0;
14137 HEAPF32[i23 >> 2] = d28;
14138 HEAPF32[i23 + 4 >> 2] = d30;
14139 d30 = +HEAPF32[i18 >> 2];
14140 d25 = +HEAPF32[i19 >> 2];
14141 d24 = +HEAPF32[i5 >> 2] + (d29 * d30 - d31 * d25);
14142 d28 = +d24;
14143 d25 = +(d31 * d30 + d29 * d25 + +HEAPF32[i20 >> 2]);
14144 i23 = i2 + (i22 * 36 | 0) + 8 | 0;
14145 HEAPF32[i23 >> 2] = d28;
14146 HEAPF32[i23 + 4 >> 2] = d25;
14147 d24 = +(d24 - d27);
14148 d25 = +(+HEAPF32[i2 + (i22 * 36 | 0) + 12 >> 2] - +HEAPF32[i2 + (i22 * 36 | 0) + 4 >> 2]);
14149 i23 = i2 + (i22 * 36 | 0) + 16 | 0;
14150 HEAPF32[i23 >> 2] = d24;
14151 HEAPF32[i23 + 4 >> 2] = d25;
14152 HEAPF32[i2 + (i22 * 36 | 0) + 24 >> 2] = 0.0;
14153 i22 = i22 + 1 | 0;
14154 i23 = HEAP32[i6 >> 2] | 0;
14155 if ((i22 | 0) >= (i23 | 0)) {
14156 i7 = i23;
14157 break L4;
14158 }
14159 }
14160 if ((i9 | 0) == 6) {
14161 ___assert_fail(2776, 2808, 103, 2840);
14162 } else if ((i9 | 0) == 8) {
14163 ___assert_fail(2776, 2808, 103, 2840);
14164 }
14165 } else {
14166 i7 = i12;
14167 }
14168 } while (0);
14169 do {
14170 if ((i7 | 0) > 1) {
14171 d24 = +HEAPF32[i11 >> 2];
14172 if ((i7 | 0) == 2) {
14173 d32 = +HEAPF32[i2 + 16 >> 2] - +HEAPF32[i2 + 52 >> 2];
14174 d8 = +HEAPF32[i2 + 20 >> 2] - +HEAPF32[i2 + 56 >> 2];
14175 d8 = +Math_sqrt(+(d32 * d32 + d8 * d8));
14176 } else if ((i7 | 0) == 3) {
14177 d8 = +HEAPF32[i2 + 16 >> 2];
14178 d32 = +HEAPF32[i2 + 20 >> 2];
14179 d8 = (+HEAPF32[i2 + 52 >> 2] - d8) * (+HEAPF32[i2 + 92 >> 2] - d32) - (+HEAP F32[i2 + 56 >> 2] - d32) * (+HEAPF32[i2 + 88 >> 2] - d8);
14180 } else {
14181 ___assert_fail(2712, 2672, 259, 2736);
14182 }
14183 if (!(d8 < d24 * .5) ? !(d24 * 2.0 < d8 | d8 < 1.1920928955078125e-7) : 0) {
14184 i9 = 18;
14185 break;
14186 }
14187 HEAP32[i6 >> 2] = 0;
14188 } else {
14189 i9 = 18;
14190 }
14191 } while (0);
14192 if ((i9 | 0) == 18 ? (i7 | 0) != 0 : 0) {
14193 STACKTOP = i1;
14194 return;
14195 }
14196 HEAP32[i2 + 28 >> 2] = 0;
14197 HEAP32[i2 + 32 >> 2] = 0;
14198 if ((HEAP32[i10 + 20 >> 2] | 0) <= 0) {
14199 ___assert_fail(2776, 2808, 103, 2840);
14200 }
14201 i26 = HEAP32[i10 + 16 >> 2] | 0;
14202 d8 = +HEAPF32[i26 >> 2];
14203 d24 = +HEAPF32[i26 + 4 >> 2];
14204 if ((HEAP32[i3 + 20 >> 2] | 0) <= 0) {
14205 ___assert_fail(2776, 2808, 103, 2840);
14206 }
14207 i26 = HEAP32[i3 + 16 >> 2] | 0;
14208 d27 = +HEAPF32[i26 >> 2];
14209 d25 = +HEAPF32[i26 + 4 >> 2];
14210 d30 = +HEAPF32[i4 + 12 >> 2];
14211 d32 = +HEAPF32[i4 + 8 >> 2];
14212 d31 = +HEAPF32[i4 >> 2] + (d8 * d30 - d24 * d32);
14213 d32 = d24 * d30 + d8 * d32 + +HEAPF32[i4 + 4 >> 2];
14214 d30 = +d31;
14215 d28 = +d32;
14216 i26 = i2;
14217 HEAPF32[i26 >> 2] = d30;
14218 HEAPF32[i26 + 4 >> 2] = d28;
14219 d28 = +HEAPF32[i5 + 12 >> 2];
14220 d30 = +HEAPF32[i5 + 8 >> 2];
14221 d29 = +HEAPF32[i5 >> 2] + (d27 * d28 - d25 * d30);
14222 d30 = d25 * d28 + d27 * d30 + +HEAPF32[i5 + 4 >> 2];
14223 d27 = +d29;
14224 d28 = +d30;
14225 i26 = i2 + 8 | 0;
14226 HEAPF32[i26 >> 2] = d27;
14227 HEAPF32[i26 + 4 >> 2] = d28;
14228 d31 = +(d29 - d31);
14229 d32 = +(d30 - d32);
14230 i26 = i2 + 16 | 0;
14231 HEAPF32[i26 >> 2] = d31;
14232 HEAPF32[i26 + 4 >> 2] = d32;
14233 HEAP32[i6 >> 2] = 1;
14234 STACKTOP = i1;
14235 return;
14236 }
14237 function __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i6, i7, i5, i 4, i1) {
14238 i6 = i6 | 0;
14239 i7 = i7 | 0;
14240 i5 = i5 | 0;
14241 i4 = i4 | 0;
14242 i1 = i1 | 0;
14243 var i2 = 0, i3 = 0, i8 = 0, i9 = 0;
14244 i2 = STACKTOP;
14245 STACKTOP = STACKTOP + 16 | 0;
14246 i3 = i2;
14247 i9 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0;
14248 i8 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0;
14249 do {
14250 if (i9) {
14251 if (i8) {
14252 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
14253 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
14254 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
14255 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14256 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14257 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14258 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14259 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14260 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14261 i8 = 1;
14262 break;
14263 }
14264 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
14265 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
14266 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
14267 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14268 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14269 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14270 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14271 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14272 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14273 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0) {
14274 HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14275 HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14276 HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14277 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14278 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14279 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14280 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14281 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14282 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14283 i8 = 2;
14284 } else {
14285 i8 = 1;
14286 }
14287 } else {
14288 if (i8) {
14289 HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14290 HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14291 HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14292 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14293 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14294 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14295 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14296 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14297 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14298 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0) {
14299 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
14300 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
14301 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
14302 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14303 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14304 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14305 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14306 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14307 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14308 i8 = 2;
14309 } else {
14310 i8 = 1;
14311 }
14312 } else {
14313 i8 = 0;
14314 }
14315 }
14316 } while (0);
14317 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i5) | 0)) {
14318 i9 = i8;
14319 STACKTOP = i2;
14320 return i9 | 0;
14321 }
14322 HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14323 HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14324 HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14325 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
14326 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
14327 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
14328 HEAP32[i4 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14329 HEAP32[i4 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14330 HEAP32[i4 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14331 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0)) {
14332 i9 = i8 + 1 | 0;
14333 STACKTOP = i2;
14334 return i9 | 0;
14335 }
14336 HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14337 HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14338 HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14339 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14340 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14341 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14342 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14343 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14344 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14345 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0)) {
14346 i9 = i8 + 2 | 0;
14347 STACKTOP = i2;
14348 return i9 | 0;
14349 }
14350 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
14351 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
14352 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
14353 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14354 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14355 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14356 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14357 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14358 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14359 i9 = i8 + 3 | 0;
14360 STACKTOP = i2;
14361 return i9 | 0;
14362 }
14363 function __ZN15b2ContactSolver27SolveTOIPositionConstraintsEii(i9, i2, i5) {
14364 i9 = i9 | 0;
14365 i2 = i2 | 0;
14366 i5 = i5 | 0;
14367 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;
14368 i1 = STACKTOP;
14369 STACKTOP = STACKTOP + 64 | 0;
14370 i8 = i1 + 40 | 0;
14371 i3 = i1 + 24 | 0;
14372 i4 = i1;
14373 i6 = i9 + 48 | 0;
14374 if ((HEAP32[i6 >> 2] | 0) <= 0) {
14375 d45 = 0.0;
14376 i37 = d45 >= -.007499999832361937;
14377 STACKTOP = i1;
14378 return i37 | 0;
14379 }
14380 i7 = i9 + 36 | 0;
14381 i14 = i9 + 24 | 0;
14382 i9 = i8 + 8 | 0;
14383 i15 = i8 + 12 | 0;
14384 i10 = i3 + 8 | 0;
14385 i11 = i3 + 12 | 0;
14386 i12 = i4 + 8 | 0;
14387 i13 = i4 + 16 | 0;
14388 i16 = 0;
14389 d34 = 0.0;
14390 do {
14391 i37 = HEAP32[i7 >> 2] | 0;
14392 i19 = i37 + (i16 * 88 | 0) | 0;
14393 i17 = HEAP32[i37 + (i16 * 88 | 0) + 32 >> 2] | 0;
14394 i18 = HEAP32[i37 + (i16 * 88 | 0) + 36 >> 2] | 0;
14395 i20 = i37 + (i16 * 88 | 0) + 48 | 0;
14396 d21 = +HEAPF32[i20 >> 2];
14397 d22 = +HEAPF32[i20 + 4 >> 2];
14398 i20 = i37 + (i16 * 88 | 0) + 56 | 0;
14399 d23 = +HEAPF32[i20 >> 2];
14400 d24 = +HEAPF32[i20 + 4 >> 2];
14401 i20 = HEAP32[i37 + (i16 * 88 | 0) + 84 >> 2] | 0;
14402 if ((i17 | 0) == (i2 | 0) | (i17 | 0) == (i5 | 0)) {
14403 d26 = +HEAPF32[i37 + (i16 * 88 | 0) + 64 >> 2];
14404 d27 = +HEAPF32[i37 + (i16 * 88 | 0) + 40 >> 2];
14405 } else {
14406 d26 = 0.0;
14407 d27 = 0.0;
14408 }
14409 d25 = +HEAPF32[i37 + (i16 * 88 | 0) + 44 >> 2];
14410 d28 = +HEAPF32[i37 + (i16 * 88 | 0) + 68 >> 2];
14411 i37 = HEAP32[i14 >> 2] | 0;
14412 i46 = i37 + (i17 * 12 | 0) | 0;
14413 d33 = +HEAPF32[i46 >> 2];
14414 d35 = +HEAPF32[i46 + 4 >> 2];
14415 d29 = +HEAPF32[i37 + (i17 * 12 | 0) + 8 >> 2];
14416 i46 = i37 + (i18 * 12 | 0) | 0;
14417 d32 = +HEAPF32[i46 >> 2];
14418 d36 = +HEAPF32[i46 + 4 >> 2];
14419 d31 = +HEAPF32[i37 + (i18 * 12 | 0) + 8 >> 2];
14420 if ((i20 | 0) > 0) {
14421 d30 = d27 + d25;
14422 i37 = 0;
14423 do {
14424 d38 = +Math_sin(+d29);
14425 HEAPF32[i9 >> 2] = d38;
14426 d44 = +Math_cos(+d29);
14427 HEAPF32[i15 >> 2] = d44;
14428 d43 = +Math_sin(+d31);
14429 HEAPF32[i10 >> 2] = d43;
14430 d41 = +Math_cos(+d31);
14431 HEAPF32[i11 >> 2] = d41;
14432 d40 = +(d33 - (d21 * d44 - d22 * d38));
14433 d38 = +(d35 - (d22 * d44 + d21 * d38));
14434 i46 = i8;
14435 HEAPF32[i46 >> 2] = d40;
14436 HEAPF32[i46 + 4 >> 2] = d38;
14437 d38 = +(d32 - (d23 * d41 - d24 * d43));
14438 d43 = +(d36 - (d24 * d41 + d23 * d43));
14439 i46 = i3;
14440 HEAPF32[i46 >> 2] = d38;
14441 HEAPF32[i46 + 4 >> 2] = d43;
14442 __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK1 1b2TransformS4_i(i4, i19, i8, i3, i37);
14443 i46 = i4;
14444 d43 = +HEAPF32[i46 >> 2];
14445 d38 = +HEAPF32[i46 + 4 >> 2];
14446 i46 = i12;
14447 d41 = +HEAPF32[i46 >> 2];
14448 d40 = +HEAPF32[i46 + 4 >> 2];
14449 d44 = +HEAPF32[i13 >> 2];
14450 d39 = d41 - d33;
14451 d42 = d40 - d35;
14452 d41 = d41 - d32;
14453 d40 = d40 - d36;
14454 d34 = d34 < d44 ? d34 : d44;
14455 d44 = (d44 + .004999999888241291) * .75;
14456 d44 = d44 < 0.0 ? d44 : 0.0;
14457 d45 = d38 * d39 - d43 * d42;
14458 d47 = d38 * d41 - d43 * d40;
14459 d45 = d47 * d28 * d47 + (d30 + d45 * d26 * d45);
14460 if (d45 > 0.0) {
14461 d44 = -(d44 < -.20000000298023224 ? -.20000000298023224 : d44) / d45;
14462 } else {
14463 d44 = 0.0;
14464 }
14465 d47 = d43 * d44;
14466 d45 = d38 * d44;
14467 d33 = d33 - d27 * d47;
14468 d35 = d35 - d27 * d45;
14469 d29 = d29 - d26 * (d39 * d45 - d42 * d47);
14470 d32 = d32 + d25 * d47;
14471 d36 = d36 + d25 * d45;
14472 d31 = d31 + d28 * (d41 * d45 - d40 * d47);
14473 i37 = i37 + 1 | 0;
14474 } while ((i37 | 0) != (i20 | 0));
14475 i37 = HEAP32[i14 >> 2] | 0;
14476 }
14477 d47 = +d33;
14478 d45 = +d35;
14479 i46 = i37 + (i17 * 12 | 0) | 0;
14480 HEAPF32[i46 >> 2] = d47;
14481 HEAPF32[i46 + 4 >> 2] = d45;
14482 i46 = HEAP32[i14 >> 2] | 0;
14483 HEAPF32[i46 + (i17 * 12 | 0) + 8 >> 2] = d29;
14484 d45 = +d32;
14485 d47 = +d36;
14486 i46 = i46 + (i18 * 12 | 0) | 0;
14487 HEAPF32[i46 >> 2] = d45;
14488 HEAPF32[i46 + 4 >> 2] = d47;
14489 HEAPF32[(HEAP32[i14 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2] = d31;
14490 i16 = i16 + 1 | 0;
14491 } while ((i16 | 0) < (HEAP32[i6 >> 2] | 0));
14492 i46 = d34 >= -.007499999832361937;
14493 STACKTOP = i1;
14494 return i46 | 0;
14495 }
14496 function __ZN15b2ContactSolver24SolvePositionConstraintsEv(i7) {
14497 i7 = i7 | 0;
14498 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i1 1 = 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, d2 7 = 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;
14499 i1 = STACKTOP;
14500 STACKTOP = STACKTOP + 64 | 0;
14501 i4 = i1 + 40 | 0;
14502 i5 = i1 + 24 | 0;
14503 i3 = i1;
14504 i2 = i7 + 48 | 0;
14505 if ((HEAP32[i2 >> 2] | 0) <= 0) {
14506 d43 = 0.0;
14507 i35 = d43 >= -.014999999664723873;
14508 STACKTOP = i1;
14509 return i35 | 0;
14510 }
14511 i6 = i7 + 36 | 0;
14512 i9 = i7 + 24 | 0;
14513 i13 = i4 + 8 | 0;
14514 i7 = i4 + 12 | 0;
14515 i8 = i5 + 8 | 0;
14516 i12 = i5 + 12 | 0;
14517 i10 = i3 + 8 | 0;
14518 i11 = i3 + 16 | 0;
14519 i35 = HEAP32[i9 >> 2] | 0;
14520 i15 = 0;
14521 d32 = 0.0;
14522 do {
14523 i21 = HEAP32[i6 >> 2] | 0;
14524 i26 = i21 + (i15 * 88 | 0) | 0;
14525 i16 = HEAP32[i21 + (i15 * 88 | 0) + 32 >> 2] | 0;
14526 i14 = HEAP32[i21 + (i15 * 88 | 0) + 36 >> 2] | 0;
14527 i44 = i21 + (i15 * 88 | 0) + 48 | 0;
14528 d22 = +HEAPF32[i44 >> 2];
14529 d23 = +HEAPF32[i44 + 4 >> 2];
14530 d25 = +HEAPF32[i21 + (i15 * 88 | 0) + 40 >> 2];
14531 d18 = +HEAPF32[i21 + (i15 * 88 | 0) + 64 >> 2];
14532 i44 = i21 + (i15 * 88 | 0) + 56 | 0;
14533 d24 = +HEAPF32[i44 >> 2];
14534 d19 = +HEAPF32[i44 + 4 >> 2];
14535 d17 = +HEAPF32[i21 + (i15 * 88 | 0) + 44 >> 2];
14536 d20 = +HEAPF32[i21 + (i15 * 88 | 0) + 68 >> 2];
14537 i21 = HEAP32[i21 + (i15 * 88 | 0) + 84 >> 2] | 0;
14538 i44 = i35 + (i16 * 12 | 0) | 0;
14539 d28 = +HEAPF32[i44 >> 2];
14540 d33 = +HEAPF32[i44 + 4 >> 2];
14541 d29 = +HEAPF32[i35 + (i16 * 12 | 0) + 8 >> 2];
14542 i44 = i35 + (i14 * 12 | 0) | 0;
14543 d30 = +HEAPF32[i44 >> 2];
14544 d34 = +HEAPF32[i44 + 4 >> 2];
14545 d31 = +HEAPF32[i35 + (i14 * 12 | 0) + 8 >> 2];
14546 if ((i21 | 0) > 0) {
14547 d27 = d25 + d17;
14548 i35 = 0;
14549 do {
14550 d41 = +Math_sin(+d29);
14551 HEAPF32[i13 >> 2] = d41;
14552 d42 = +Math_cos(+d29);
14553 HEAPF32[i7 >> 2] = d42;
14554 d39 = +Math_sin(+d31);
14555 HEAPF32[i8 >> 2] = d39;
14556 d38 = +Math_cos(+d31);
14557 HEAPF32[i12 >> 2] = d38;
14558 d40 = +(d28 - (d22 * d42 - d23 * d41));
14559 d41 = +(d33 - (d23 * d42 + d22 * d41));
14560 i44 = i4;
14561 HEAPF32[i44 >> 2] = d40;
14562 HEAPF32[i44 + 4 >> 2] = d41;
14563 d41 = +(d30 - (d24 * d38 - d19 * d39));
14564 d39 = +(d34 - (d19 * d38 + d24 * d39));
14565 i44 = i5;
14566 HEAPF32[i44 >> 2] = d41;
14567 HEAPF32[i44 + 4 >> 2] = d39;
14568 __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK1 1b2TransformS4_i(i3, i26, i4, i5, i35);
14569 i44 = i3;
14570 d39 = +HEAPF32[i44 >> 2];
14571 d41 = +HEAPF32[i44 + 4 >> 2];
14572 i44 = i10;
14573 d38 = +HEAPF32[i44 >> 2];
14574 d40 = +HEAPF32[i44 + 4 >> 2];
14575 d42 = +HEAPF32[i11 >> 2];
14576 d36 = d38 - d28;
14577 d37 = d40 - d33;
14578 d38 = d38 - d30;
14579 d40 = d40 - d34;
14580 d32 = d32 < d42 ? d32 : d42;
14581 d42 = (d42 + .004999999888241291) * .20000000298023224;
14582 d43 = d42 < 0.0 ? d42 : 0.0;
14583 d42 = d41 * d36 - d39 * d37;
14584 d45 = d41 * d38 - d39 * d40;
14585 d42 = d45 * d20 * d45 + (d27 + d42 * d18 * d42);
14586 if (d42 > 0.0) {
14587 d42 = -(d43 < -.20000000298023224 ? -.20000000298023224 : d43) / d42;
14588 } else {
14589 d42 = 0.0;
14590 }
14591 d45 = d39 * d42;
14592 d43 = d41 * d42;
14593 d28 = d28 - d25 * d45;
14594 d33 = d33 - d25 * d43;
14595 d29 = d29 - d18 * (d36 * d43 - d37 * d45);
14596 d30 = d30 + d17 * d45;
14597 d34 = d34 + d17 * d43;
14598 d31 = d31 + d20 * (d38 * d43 - d40 * d45);
14599 i35 = i35 + 1 | 0;
14600 } while ((i35 | 0) != (i21 | 0));
14601 i35 = HEAP32[i9 >> 2] | 0;
14602 }
14603 d45 = +d28;
14604 d43 = +d33;
14605 i35 = i35 + (i16 * 12 | 0) | 0;
14606 HEAPF32[i35 >> 2] = d45;
14607 HEAPF32[i35 + 4 >> 2] = d43;
14608 i35 = HEAP32[i9 >> 2] | 0;
14609 HEAPF32[i35 + (i16 * 12 | 0) + 8 >> 2] = d29;
14610 d43 = +d30;
14611 d45 = +d34;
14612 i35 = i35 + (i14 * 12 | 0) | 0;
14613 HEAPF32[i35 >> 2] = d43;
14614 HEAPF32[i35 + 4 >> 2] = d45;
14615 i35 = HEAP32[i9 >> 2] | 0;
14616 HEAPF32[i35 + (i14 * 12 | 0) + 8 >> 2] = d31;
14617 i15 = i15 + 1 | 0;
14618 } while ((i15 | 0) < (HEAP32[i2 >> 2] | 0));
14619 i44 = d32 >= -.014999999664723873;
14620 STACKTOP = i1;
14621 return i44 | 0;
14622 }
14623 function __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformP K13b2CircleShapeS6_(i1, i7, i6, i22, i5) {
14624 i1 = i1 | 0;
14625 i7 = i7 | 0;
14626 i6 = i6 | 0;
14627 i22 = i22 | 0;
14628 i5 = i5 | 0;
14629 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;
14630 i4 = STACKTOP;
14631 i2 = i1 + 60 | 0;
14632 HEAP32[i2 >> 2] = 0;
14633 i3 = i22 + 12 | 0;
14634 d9 = +HEAPF32[i5 + 12 >> 2];
14635 d23 = +HEAPF32[i3 >> 2];
14636 d17 = +HEAPF32[i5 + 8 >> 2];
14637 d18 = +HEAPF32[i22 + 16 >> 2];
14638 d21 = +HEAPF32[i5 >> 2] + (d9 * d23 - d17 * d18) - +HEAPF32[i6 >> 2];
14639 d18 = d23 * d17 + d9 * d18 + +HEAPF32[i5 + 4 >> 2] - +HEAPF32[i6 + 4 >> 2];
14640 d9 = +HEAPF32[i6 + 12 >> 2];
14641 d17 = +HEAPF32[i6 + 8 >> 2];
14642 d23 = d21 * d9 + d18 * d17;
14643 d17 = d9 * d18 - d21 * d17;
14644 i6 = i7 + 12 | 0;
14645 i5 = HEAP32[i6 >> 2] | 0;
14646 i6 = HEAP32[i6 + 4 >> 2] | 0;
14647 d21 = (HEAP32[tempDoublePtr >> 2] = i5, +HEAPF32[tempDoublePtr >> 2]);
14648 d18 = (HEAP32[tempDoublePtr >> 2] = i6, +HEAPF32[tempDoublePtr >> 2]);
14649 i15 = i7 + 20 | 0;
14650 i14 = HEAP32[i15 >> 2] | 0;
14651 i15 = HEAP32[i15 + 4 >> 2] | 0;
14652 d9 = (HEAP32[tempDoublePtr >> 2] = i14, +HEAPF32[tempDoublePtr >> 2]);
14653 d10 = (HEAP32[tempDoublePtr >> 2] = i15, +HEAPF32[tempDoublePtr >> 2]);
14654 d8 = d9 - d21;
14655 d16 = d10 - d18;
14656 d19 = d8 * (d9 - d23) + d16 * (d10 - d17);
14657 d13 = d23 - d21;
14658 d12 = d17 - d18;
14659 d20 = d13 * d8 + d12 * d16;
14660 d11 = +HEAPF32[i7 + 8 >> 2] + +HEAPF32[i22 + 8 >> 2];
14661 if (d20 <= 0.0) {
14662 if (d13 * d13 + d12 * d12 > d11 * d11) {
14663 STACKTOP = i4;
14664 return;
14665 }
14666 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) {
14667 STACKTOP = i4;
14668 return;
14669 }
14670 HEAP32[i2 >> 2] = 1;
14671 HEAP32[i1 + 56 >> 2] = 0;
14672 HEAPF32[i1 + 40 >> 2] = 0.0;
14673 HEAPF32[i1 + 44 >> 2] = 0.0;
14674 i14 = i1 + 48 | 0;
14675 HEAP32[i14 >> 2] = i5;
14676 HEAP32[i14 + 4 >> 2] = i6;
14677 i14 = i1 + 16 | 0;
14678 HEAP32[i14 >> 2] = 0;
14679 HEAP8[i14] = 0;
14680 HEAP8[i14 + 1 | 0] = 0;
14681 HEAP8[i14 + 2 | 0] = 0;
14682 HEAP8[i14 + 3 | 0] = 0;
14683 i14 = i3;
14684 i15 = HEAP32[i14 + 4 >> 2] | 0;
14685 i22 = i1;
14686 HEAP32[i22 >> 2] = HEAP32[i14 >> 2];
14687 HEAP32[i22 + 4 >> 2] = i15;
14688 STACKTOP = i4;
14689 return;
14690 }
14691 if (d19 <= 0.0) {
14692 d8 = d23 - d9;
14693 d12 = d17 - d10;
14694 if (d8 * d8 + d12 * d12 > d11 * d11) {
14695 STACKTOP = i4;
14696 return;
14697 }
14698 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) {
14699 STACKTOP = i4;
14700 return;
14701 }
14702 HEAP32[i2 >> 2] = 1;
14703 HEAP32[i1 + 56 >> 2] = 0;
14704 HEAPF32[i1 + 40 >> 2] = 0.0;
14705 HEAPF32[i1 + 44 >> 2] = 0.0;
14706 i22 = i1 + 48 | 0;
14707 HEAP32[i22 >> 2] = i14;
14708 HEAP32[i22 + 4 >> 2] = i15;
14709 i14 = i1 + 16 | 0;
14710 HEAP32[i14 >> 2] = 0;
14711 HEAP8[i14] = 1;
14712 HEAP8[i14 + 1 | 0] = 0;
14713 HEAP8[i14 + 2 | 0] = 0;
14714 HEAP8[i14 + 3 | 0] = 0;
14715 i14 = i3;
14716 i15 = HEAP32[i14 + 4 >> 2] | 0;
14717 i22 = i1;
14718 HEAP32[i22 >> 2] = HEAP32[i14 >> 2];
14719 HEAP32[i22 + 4 >> 2] = i15;
14720 STACKTOP = i4;
14721 return;
14722 }
14723 d24 = d8 * d8 + d16 * d16;
14724 if (!(d24 > 0.0)) {
14725 ___assert_fail(5560, 5576, 127, 5616);
14726 }
14727 d24 = 1.0 / d24;
14728 d23 = d23 - (d21 * d19 + d9 * d20) * d24;
14729 d24 = d17 - (d18 * d19 + d10 * d20) * d24;
14730 if (d23 * d23 + d24 * d24 > d11 * d11) {
14731 STACKTOP = i4;
14732 return;
14733 }
14734 d9 = -d16;
14735 if (d8 * d12 + d13 * d9 < 0.0) {
14736 d8 = -d8;
14737 } else {
14738 d16 = d9;
14739 }
14740 d9 = +Math_sqrt(+(d8 * d8 + d16 * d16));
14741 if (!(d9 < 1.1920928955078125e-7)) {
14742 d24 = 1.0 / d9;
14743 d16 = d16 * d24;
14744 d8 = d8 * d24;
14745 }
14746 HEAP32[i2 >> 2] = 1;
14747 HEAP32[i1 + 56 >> 2] = 1;
14748 d23 = +d16;
14749 d24 = +d8;
14750 i14 = i1 + 40 | 0;
14751 HEAPF32[i14 >> 2] = d23;
14752 HEAPF32[i14 + 4 >> 2] = d24;
14753 i14 = i1 + 48 | 0;
14754 HEAP32[i14 >> 2] = i5;
14755 HEAP32[i14 + 4 >> 2] = i6;
14756 i14 = i1 + 16 | 0;
14757 HEAP32[i14 >> 2] = 0;
14758 HEAP8[i14] = 0;
14759 HEAP8[i14 + 1 | 0] = 0;
14760 HEAP8[i14 + 2 | 0] = 1;
14761 HEAP8[i14 + 3 | 0] = 0;
14762 i14 = i3;
14763 i15 = HEAP32[i14 + 4 >> 2] | 0;
14764 i22 = i1;
14765 HEAP32[i22 >> 2] = HEAP32[i14 >> 2];
14766 HEAP32[i22 + 4 >> 2] = i15;
14767 STACKTOP = i4;
14768 return;
14769 }
14770 function __ZN6b2BodyC2EPK9b2BodyDefP7b2World(i1, i2, i5) {
14771 i1 = i1 | 0;
14772 i2 = i2 | 0;
14773 i5 = i5 | 0;
14774 var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, d13 = 0.0;
14775 i3 = STACKTOP;
14776 i9 = i2 + 4 | 0;
14777 d13 = +HEAPF32[i9 >> 2];
14778 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14779 ___assert_fail(1496, 1520, 27, 1552);
14780 }
14781 d13 = +HEAPF32[i2 + 8 >> 2];
14782 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14783 ___assert_fail(1496, 1520, 27, 1552);
14784 }
14785 i6 = i2 + 16 | 0;
14786 d13 = +HEAPF32[i6 >> 2];
14787 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14788 ___assert_fail(1560, 1520, 28, 1552);
14789 }
14790 d13 = +HEAPF32[i2 + 20 >> 2];
14791 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14792 ___assert_fail(1560, 1520, 28, 1552);
14793 }
14794 i7 = i2 + 12 | 0;
14795 d13 = +HEAPF32[i7 >> 2];
14796 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14797 ___assert_fail(1592, 1520, 29, 1552);
14798 }
14799 i8 = i2 + 24 | 0;
14800 d13 = +HEAPF32[i8 >> 2];
14801 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14802 ___assert_fail(1616, 1520, 30, 1552);
14803 }
14804 i4 = i2 + 32 | 0;
14805 d13 = +HEAPF32[i4 >> 2];
14806 if (!(d13 >= 0.0) | d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf ^ 1) {
14807 ___assert_fail(1648, 1520, 31, 1552);
14808 }
14809 i10 = i2 + 28 | 0;
14810 d13 = +HEAPF32[i10 >> 2];
14811 if (!(d13 >= 0.0) | d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf ^ 1) {
14812 ___assert_fail(1712, 1520, 32, 1552);
14813 }
14814 i11 = i1 + 4 | 0;
14815 i12 = (HEAP8[i2 + 39 | 0] | 0) == 0 ? 0 : 8;
14816 HEAP16[i11 >> 1] = i12;
14817 if ((HEAP8[i2 + 38 | 0] | 0) != 0) {
14818 i12 = (i12 & 65535 | 16) & 65535;
14819 HEAP16[i11 >> 1] = i12;
14820 }
14821 if ((HEAP8[i2 + 36 | 0] | 0) != 0) {
14822 i12 = (i12 & 65535 | 4) & 65535;
14823 HEAP16[i11 >> 1] = i12;
14824 }
14825 if ((HEAP8[i2 + 37 | 0] | 0) != 0) {
14826 i12 = (i12 & 65535 | 2) & 65535;
14827 HEAP16[i11 >> 1] = i12;
14828 }
14829 if ((HEAP8[i2 + 40 | 0] | 0) != 0) {
14830 HEAP16[i11 >> 1] = i12 & 65535 | 32;
14831 }
14832 HEAP32[i1 + 88 >> 2] = i5;
14833 i11 = i9;
14834 i12 = HEAP32[i11 >> 2] | 0;
14835 i11 = HEAP32[i11 + 4 >> 2] | 0;
14836 i9 = i1 + 12 | 0;
14837 HEAP32[i9 >> 2] = i12;
14838 HEAP32[i9 + 4 >> 2] = i11;
14839 d13 = +HEAPF32[i7 >> 2];
14840 HEAPF32[i1 + 20 >> 2] = +Math_sin(+d13);
14841 HEAPF32[i1 + 24 >> 2] = +Math_cos(+d13);
14842 HEAPF32[i1 + 28 >> 2] = 0.0;
14843 HEAPF32[i1 + 32 >> 2] = 0.0;
14844 i9 = i1 + 36 | 0;
14845 HEAP32[i9 >> 2] = i12;
14846 HEAP32[i9 + 4 >> 2] = i11;
14847 i9 = i1 + 44 | 0;
14848 HEAP32[i9 >> 2] = i12;
14849 HEAP32[i9 + 4 >> 2] = i11;
14850 HEAPF32[i1 + 52 >> 2] = +HEAPF32[i7 >> 2];
14851 HEAPF32[i1 + 56 >> 2] = +HEAPF32[i7 >> 2];
14852 HEAPF32[i1 + 60 >> 2] = 0.0;
14853 HEAP32[i1 + 108 >> 2] = 0;
14854 HEAP32[i1 + 112 >> 2] = 0;
14855 HEAP32[i1 + 92 >> 2] = 0;
14856 HEAP32[i1 + 96 >> 2] = 0;
14857 i9 = i6;
14858 i11 = HEAP32[i9 + 4 >> 2] | 0;
14859 i12 = i1 + 64 | 0;
14860 HEAP32[i12 >> 2] = HEAP32[i9 >> 2];
14861 HEAP32[i12 + 4 >> 2] = i11;
14862 HEAPF32[i1 + 72 >> 2] = +HEAPF32[i8 >> 2];
14863 HEAPF32[i1 + 132 >> 2] = +HEAPF32[i10 >> 2];
14864 HEAPF32[i1 + 136 >> 2] = +HEAPF32[i4 >> 2];
14865 HEAPF32[i1 + 140 >> 2] = +HEAPF32[i2 + 48 >> 2];
14866 HEAPF32[i1 + 76 >> 2] = 0.0;
14867 HEAPF32[i1 + 80 >> 2] = 0.0;
14868 HEAPF32[i1 + 84 >> 2] = 0.0;
14869 HEAPF32[i1 + 144 >> 2] = 0.0;
14870 i12 = HEAP32[i2 >> 2] | 0;
14871 HEAP32[i1 >> 2] = i12;
14872 i4 = i1 + 116 | 0;
14873 if ((i12 | 0) == 2) {
14874 HEAPF32[i4 >> 2] = 1.0;
14875 HEAPF32[i1 + 120 >> 2] = 1.0;
14876 i11 = i1 + 124 | 0;
14877 HEAPF32[i11 >> 2] = 0.0;
14878 i11 = i1 + 128 | 0;
14879 HEAPF32[i11 >> 2] = 0.0;
14880 i11 = i2 + 44 | 0;
14881 i11 = HEAP32[i11 >> 2] | 0;
14882 i12 = i1 + 148 | 0;
14883 HEAP32[i12 >> 2] = i11;
14884 i12 = i1 + 100 | 0;
14885 HEAP32[i12 >> 2] = 0;
14886 i12 = i1 + 104 | 0;
14887 HEAP32[i12 >> 2] = 0;
14888 STACKTOP = i3;
14889 return;
14890 } else {
14891 HEAPF32[i4 >> 2] = 0.0;
14892 HEAPF32[i1 + 120 >> 2] = 0.0;
14893 i11 = i1 + 124 | 0;
14894 HEAPF32[i11 >> 2] = 0.0;
14895 i11 = i1 + 128 | 0;
14896 HEAPF32[i11 >> 2] = 0.0;
14897 i11 = i2 + 44 | 0;
14898 i11 = HEAP32[i11 >> 2] | 0;
14899 i12 = i1 + 148 | 0;
14900 HEAP32[i12 >> 2] = i11;
14901 i12 = i1 + 100 | 0;
14902 HEAP32[i12 >> 2] = 0;
14903 i12 = i1 + 104 | 0;
14904 HEAP32[i12 >> 2] = 0;
14905 STACKTOP = i3;
14906 return;
14907 }
14908 }
14909 function __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstrai ntRK11b2TransformS4_i(i2, i1, i13, i12, i15) {
14910 i2 = i2 | 0;
14911 i1 = i1 | 0;
14912 i13 = i13 | 0;
14913 i12 = i12 | 0;
14914 i15 = i15 | 0;
14915 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;
14916 i3 = STACKTOP;
14917 if ((HEAP32[i1 + 84 >> 2] | 0) <= 0) {
14918 ___assert_fail(6752, 6520, 617, 6776);
14919 }
14920 i14 = HEAP32[i1 + 72 >> 2] | 0;
14921 if ((i14 | 0) == 1) {
14922 i19 = i13 + 12 | 0;
14923 d5 = +HEAPF32[i19 >> 2];
14924 d6 = +HEAPF32[i1 + 16 >> 2];
14925 i14 = i13 + 8 | 0;
14926 d7 = +HEAPF32[i14 >> 2];
14927 d9 = +HEAPF32[i1 + 20 >> 2];
14928 d4 = d5 * d6 - d7 * d9;
14929 d9 = d6 * d7 + d5 * d9;
14930 d5 = +d4;
14931 d7 = +d9;
14932 i20 = i2;
14933 HEAPF32[i20 >> 2] = d5;
14934 HEAPF32[i20 + 4 >> 2] = d7;
14935 d7 = +HEAPF32[i19 >> 2];
14936 d5 = +HEAPF32[i1 + 24 >> 2];
14937 d6 = +HEAPF32[i14 >> 2];
14938 d8 = +HEAPF32[i1 + 28 >> 2];
14939 d16 = +HEAPF32[i12 + 12 >> 2];
14940 d18 = +HEAPF32[i1 + (i15 << 3) >> 2];
14941 d17 = +HEAPF32[i12 + 8 >> 2];
14942 d11 = +HEAPF32[i1 + (i15 << 3) + 4 >> 2];
14943 d10 = +HEAPF32[i12 >> 2] + (d16 * d18 - d17 * d11);
14944 d11 = d18 * d17 + d16 * d11 + +HEAPF32[i12 + 4 >> 2];
14945 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];
14946 d10 = +d10;
14947 d11 = +d11;
14948 i15 = i2 + 8 | 0;
14949 HEAPF32[i15 >> 2] = d10;
14950 HEAPF32[i15 + 4 >> 2] = d11;
14951 STACKTOP = i3;
14952 return;
14953 } else if ((i14 | 0) == 2) {
14954 i19 = i12 + 12 | 0;
14955 d7 = +HEAPF32[i19 >> 2];
14956 d8 = +HEAPF32[i1 + 16 >> 2];
14957 i20 = i12 + 8 | 0;
14958 d9 = +HEAPF32[i20 >> 2];
14959 d18 = +HEAPF32[i1 + 20 >> 2];
14960 d17 = d7 * d8 - d9 * d18;
14961 d18 = d8 * d9 + d7 * d18;
14962 d7 = +d17;
14963 d9 = +d18;
14964 i14 = i2;
14965 HEAPF32[i14 >> 2] = d7;
14966 HEAPF32[i14 + 4 >> 2] = d9;
14967 d9 = +HEAPF32[i19 >> 2];
14968 d7 = +HEAPF32[i1 + 24 >> 2];
14969 d8 = +HEAPF32[i20 >> 2];
14970 d10 = +HEAPF32[i1 + 28 >> 2];
14971 d6 = +HEAPF32[i13 + 12 >> 2];
14972 d4 = +HEAPF32[i1 + (i15 << 3) >> 2];
14973 d5 = +HEAPF32[i13 + 8 >> 2];
14974 d16 = +HEAPF32[i1 + (i15 << 3) + 4 >> 2];
14975 d11 = +HEAPF32[i13 >> 2] + (d6 * d4 - d5 * d16);
14976 d16 = d4 * d5 + d6 * d16 + +HEAPF32[i13 + 4 >> 2];
14977 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];
14978 d11 = +d11;
14979 d16 = +d16;
14980 i20 = i2 + 8 | 0;
14981 HEAPF32[i20 >> 2] = d11;
14982 HEAPF32[i20 + 4 >> 2] = d16;
14983 d17 = +-d17;
14984 d18 = +-d18;
14985 i20 = i2;
14986 HEAPF32[i20 >> 2] = d17;
14987 HEAPF32[i20 + 4 >> 2] = d18;
14988 STACKTOP = i3;
14989 return;
14990 } else if ((i14 | 0) == 0) {
14991 d7 = +HEAPF32[i13 + 12 >> 2];
14992 d8 = +HEAPF32[i1 + 24 >> 2];
14993 d18 = +HEAPF32[i13 + 8 >> 2];
14994 d6 = +HEAPF32[i1 + 28 >> 2];
14995 d4 = +HEAPF32[i13 >> 2] + (d7 * d8 - d18 * d6);
14996 d6 = d8 * d18 + d7 * d6 + +HEAPF32[i13 + 4 >> 2];
14997 d7 = +HEAPF32[i12 + 12 >> 2];
14998 d18 = +HEAPF32[i1 >> 2];
14999 d8 = +HEAPF32[i12 + 8 >> 2];
15000 d9 = +HEAPF32[i1 + 4 >> 2];
15001 d5 = +HEAPF32[i12 >> 2] + (d7 * d18 - d8 * d9);
15002 d9 = d18 * d8 + d7 * d9 + +HEAPF32[i12 + 4 >> 2];
15003 d7 = d5 - d4;
15004 d8 = d9 - d6;
15005 d18 = +d7;
15006 d10 = +d8;
15007 i20 = i2;
15008 HEAPF32[i20 >> 2] = d18;
15009 HEAPF32[i20 + 4 >> 2] = d10;
15010 d10 = +Math_sqrt(+(d7 * d7 + d8 * d8));
15011 if (d10 < 1.1920928955078125e-7) {
15012 d10 = d7;
15013 d11 = d8;
15014 } else {
15015 d11 = 1.0 / d10;
15016 d10 = d7 * d11;
15017 HEAPF32[i2 >> 2] = d10;
15018 d11 = d8 * d11;
15019 HEAPF32[i2 + 4 >> 2] = d11;
15020 }
15021 d17 = +((d4 + d5) * .5);
15022 d18 = +((d6 + d9) * .5);
15023 i20 = i2 + 8 | 0;
15024 HEAPF32[i20 >> 2] = d17;
15025 HEAPF32[i20 + 4 >> 2] = d18;
15026 HEAPF32[i2 + 16 >> 2] = d7 * d10 + d8 * d11 - +HEAPF32[i1 + 76 >> 2] - +HEAPF3 2[i1 + 80 >> 2];
15027 STACKTOP = i3;
15028 return;
15029 } else {
15030 STACKTOP = i3;
15031 return;
15032 }
15033 }
15034 function __ZNSt3__118__insertion_sort_3IRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i1, i2) {
15035 i5 = i5 | 0;
15036 i1 = i1 | 0;
15037 i2 = i2 | 0;
15038 var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0;
15039 i4 = STACKTOP;
15040 STACKTOP = STACKTOP + 32 | 0;
15041 i6 = i4 + 12 | 0;
15042 i3 = i4;
15043 i7 = i5 + 24 | 0;
15044 i8 = i5 + 12 | 0;
15045 i10 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i5) | 0;
15046 i9 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i8) | 0;
15047 do {
15048 if (i10) {
15049 if (i9) {
15050 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
15051 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
15052 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
15053 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
15054 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
15055 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
15056 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15057 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15058 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15059 break;
15060 }
15061 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
15062 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
15063 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
15064 HEAP32[i5 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
15065 HEAP32[i5 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
15066 HEAP32[i5 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
15067 HEAP32[i8 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15068 HEAP32[i8 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15069 HEAP32[i8 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15070 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i8) | 0) {
15071 HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
15072 HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
15073 HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
15074 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
15075 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
15076 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
15077 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15078 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15079 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15080 }
15081 } else {
15082 if (i9) {
15083 HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
15084 HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
15085 HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
15086 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
15087 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
15088 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
15089 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15090 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15091 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15092 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i5) | 0) {
15093 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
15094 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
15095 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
15096 HEAP32[i5 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
15097 HEAP32[i5 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
15098 HEAP32[i5 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
15099 HEAP32[i8 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15100 HEAP32[i8 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15101 HEAP32[i8 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15102 }
15103 }
15104 }
15105 } while (0);
15106 i6 = i5 + 36 | 0;
15107 if ((i6 | 0) == (i1 | 0)) {
15108 STACKTOP = i4;
15109 return;
15110 }
15111 while (1) {
15112 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i7) | 0) {
15113 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15114 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15115 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15116 i8 = i6;
15117 while (1) {
15118 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
15119 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
15120 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
15121 if ((i7 | 0) == (i5 | 0)) {
15122 break;
15123 }
15124 i8 = i7 + -12 | 0;
15125 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i3, i8) | 0) {
15126 i10 = i7;
15127 i7 = i8;
15128 i8 = i10;
15129 } else {
15130 break;
15131 }
15132 }
15133 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
15134 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
15135 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
15136 }
15137 i7 = i6 + 12 | 0;
15138 if ((i7 | 0) == (i1 | 0)) {
15139 break;
15140 } else {
15141 i10 = i6;
15142 i6 = i7;
15143 i7 = i10;
15144 }
15145 }
15146 STACKTOP = i4;
15147 return;
15148 }
15149 function __ZNK20b2SeparationFunction8EvaluateEiif(i10, i12, i11, d9) {
15150 i10 = i10 | 0;
15151 i12 = i12 | 0;
15152 i11 = i11 | 0;
15153 d9 = +d9;
15154 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;
15155 i7 = STACKTOP;
15156 d14 = 1.0 - d9;
15157 d3 = d14 * +HEAPF32[i10 + 32 >> 2] + +HEAPF32[i10 + 36 >> 2] * d9;
15158 d4 = +Math_sin(+d3);
15159 d3 = +Math_cos(+d3);
15160 d5 = +HEAPF32[i10 + 8 >> 2];
15161 d6 = +HEAPF32[i10 + 12 >> 2];
15162 d2 = d14 * +HEAPF32[i10 + 16 >> 2] + +HEAPF32[i10 + 24 >> 2] * d9 - (d3 * d5 - d4 * d6);
15163 d6 = d14 * +HEAPF32[i10 + 20 >> 2] + +HEAPF32[i10 + 28 >> 2] * d9 - (d4 * d5 + d3 * d6);
15164 d5 = d14 * +HEAPF32[i10 + 68 >> 2] + +HEAPF32[i10 + 72 >> 2] * d9;
15165 d1 = +Math_sin(+d5);
15166 d5 = +Math_cos(+d5);
15167 d15 = +HEAPF32[i10 + 44 >> 2];
15168 d16 = +HEAPF32[i10 + 48 >> 2];
15169 d8 = d14 * +HEAPF32[i10 + 52 >> 2] + +HEAPF32[i10 + 60 >> 2] * d9 - (d5 * d15 - d1 * d16);
15170 d9 = d14 * +HEAPF32[i10 + 56 >> 2] + +HEAPF32[i10 + 64 >> 2] * d9 - (d1 * d15 + d5 * d16);
15171 i17 = HEAP32[i10 + 80 >> 2] | 0;
15172 if ((i17 | 0) == 0) {
15173 d14 = +HEAPF32[i10 + 92 >> 2];
15174 d13 = +HEAPF32[i10 + 96 >> 2];
15175 i17 = HEAP32[i10 >> 2] | 0;
15176 if (!((i12 | 0) > -1)) {
15177 ___assert_fail(3640, 3672, 103, 3704);
15178 }
15179 if ((HEAP32[i17 + 20 >> 2] | 0) <= (i12 | 0)) {
15180 ___assert_fail(3640, 3672, 103, 3704);
15181 }
15182 i17 = (HEAP32[i17 + 16 >> 2] | 0) + (i12 << 3) | 0;
15183 d15 = +HEAPF32[i17 >> 2];
15184 d16 = +HEAPF32[i17 + 4 >> 2];
15185 i10 = HEAP32[i10 + 4 >> 2] | 0;
15186 if (!((i11 | 0) > -1)) {
15187 ___assert_fail(3640, 3672, 103, 3704);
15188 }
15189 if ((HEAP32[i10 + 20 >> 2] | 0) <= (i11 | 0)) {
15190 ___assert_fail(3640, 3672, 103, 3704);
15191 }
15192 i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i11 << 3) | 0;
15193 d19 = +HEAPF32[i17 >> 2];
15194 d18 = +HEAPF32[i17 + 4 >> 2];
15195 d16 = d14 * (d8 + (d5 * d19 - d1 * d18) - (d2 + (d3 * d15 - d4 * d16))) + d13 * (d9 + (d1 * d19 + d5 * d18) - (d6 + (d4 * d15 + d3 * d16)));
15196 STACKTOP = i7;
15197 return +d16;
15198 } else if ((i17 | 0) == 1) {
15199 d14 = +HEAPF32[i10 + 92 >> 2];
15200 d13 = +HEAPF32[i10 + 96 >> 2];
15201 d16 = +HEAPF32[i10 + 84 >> 2];
15202 d15 = +HEAPF32[i10 + 88 >> 2];
15203 i10 = HEAP32[i10 + 4 >> 2] | 0;
15204 if (!((i11 | 0) > -1)) {
15205 ___assert_fail(3640, 3672, 103, 3704);
15206 }
15207 if ((HEAP32[i10 + 20 >> 2] | 0) <= (i11 | 0)) {
15208 ___assert_fail(3640, 3672, 103, 3704);
15209 }
15210 i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i11 << 3) | 0;
15211 d18 = +HEAPF32[i17 >> 2];
15212 d19 = +HEAPF32[i17 + 4 >> 2];
15213 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)));
15214 STACKTOP = i7;
15215 return +d19;
15216 } else if ((i17 | 0) == 2) {
15217 d16 = +HEAPF32[i10 + 92 >> 2];
15218 d15 = +HEAPF32[i10 + 96 >> 2];
15219 d14 = +HEAPF32[i10 + 84 >> 2];
15220 d13 = +HEAPF32[i10 + 88 >> 2];
15221 i10 = HEAP32[i10 >> 2] | 0;
15222 if (!((i12 | 0) > -1)) {
15223 ___assert_fail(3640, 3672, 103, 3704);
15224 }
15225 if ((HEAP32[i10 + 20 >> 2] | 0) <= (i12 | 0)) {
15226 ___assert_fail(3640, 3672, 103, 3704);
15227 }
15228 i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i12 << 3) | 0;
15229 d18 = +HEAPF32[i17 >> 2];
15230 d19 = +HEAPF32[i17 + 4 >> 2];
15231 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)));
15232 STACKTOP = i7;
15233 return +d19;
15234 } else {
15235 ___assert_fail(3616, 3560, 242, 3624);
15236 }
15237 return 0.0;
15238 }
15239 function __ZN6b2Body13ResetMassDataEv(i2) {
15240 i2 = i2 | 0;
15241 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;
15242 i3 = STACKTOP;
15243 STACKTOP = STACKTOP + 16 | 0;
15244 i10 = i3;
15245 i8 = i2 + 116 | 0;
15246 i9 = i2 + 120 | 0;
15247 i4 = i2 + 124 | 0;
15248 i5 = i2 + 128 | 0;
15249 i6 = i2 + 28 | 0;
15250 HEAPF32[i6 >> 2] = 0.0;
15251 HEAPF32[i2 + 32 >> 2] = 0.0;
15252 HEAP32[i8 + 0 >> 2] = 0;
15253 HEAP32[i8 + 4 >> 2] = 0;
15254 HEAP32[i8 + 8 >> 2] = 0;
15255 HEAP32[i8 + 12 >> 2] = 0;
15256 i11 = HEAP32[i2 >> 2] | 0;
15257 if ((i11 | 0) == 2) {
15258 i17 = 3784;
15259 d16 = +HEAPF32[i17 >> 2];
15260 d18 = +HEAPF32[i17 + 4 >> 2];
15261 i17 = HEAP32[i2 + 100 >> 2] | 0;
15262 if ((i17 | 0) != 0) {
15263 i11 = i10 + 4 | 0;
15264 i12 = i10 + 8 | 0;
15265 i13 = i10 + 12 | 0;
15266 d14 = 0.0;
15267 d15 = 0.0;
15268 do {
15269 d19 = +HEAPF32[i17 >> 2];
15270 if (!(d19 == 0.0)) {
15271 i20 = HEAP32[i17 + 12 >> 2] | 0;
15272 FUNCTION_TABLE_viid[HEAP32[(HEAP32[i20 >> 2] | 0) + 28 >> 2] & 3](i20, i10, d19);
15273 d14 = +HEAPF32[i10 >> 2];
15274 d15 = d14 + +HEAPF32[i8 >> 2];
15275 HEAPF32[i8 >> 2] = d15;
15276 d16 = d16 + d14 * +HEAPF32[i11 >> 2];
15277 d18 = d18 + d14 * +HEAPF32[i12 >> 2];
15278 d14 = +HEAPF32[i13 >> 2] + +HEAPF32[i4 >> 2];
15279 HEAPF32[i4 >> 2] = d14;
15280 }
15281 i17 = HEAP32[i17 + 4 >> 2] | 0;
15282 } while ((i17 | 0) != 0);
15283 if (d15 > 0.0) {
15284 d19 = 1.0 / d15;
15285 HEAPF32[i9 >> 2] = d19;
15286 d16 = d16 * d19;
15287 d18 = d18 * d19;
15288 } else {
15289 i7 = 11;
15290 }
15291 } else {
15292 d14 = 0.0;
15293 i7 = 11;
15294 }
15295 if ((i7 | 0) == 11) {
15296 HEAPF32[i8 >> 2] = 1.0;
15297 HEAPF32[i9 >> 2] = 1.0;
15298 d15 = 1.0;
15299 }
15300 do {
15301 if (d14 > 0.0 ? (HEAP16[i2 + 4 >> 1] & 16) == 0 : 0) {
15302 d14 = d14 - (d18 * d18 + d16 * d16) * d15;
15303 HEAPF32[i4 >> 2] = d14;
15304 if (d14 > 0.0) {
15305 d1 = 1.0 / d14;
15306 break;
15307 } else {
15308 ___assert_fail(1872, 1520, 319, 1856);
15309 }
15310 } else {
15311 i7 = 17;
15312 }
15313 } while (0);
15314 if ((i7 | 0) == 17) {
15315 HEAPF32[i4 >> 2] = 0.0;
15316 d1 = 0.0;
15317 }
15318 HEAPF32[i5 >> 2] = d1;
15319 i20 = i2 + 44 | 0;
15320 i17 = i20;
15321 d19 = +HEAPF32[i17 >> 2];
15322 d14 = +HEAPF32[i17 + 4 >> 2];
15323 d21 = +d16;
15324 d1 = +d18;
15325 i17 = i6;
15326 HEAPF32[i17 >> 2] = d21;
15327 HEAPF32[i17 + 4 >> 2] = d1;
15328 d1 = +HEAPF32[i2 + 24 >> 2];
15329 d21 = +HEAPF32[i2 + 20 >> 2];
15330 d15 = +HEAPF32[i2 + 12 >> 2] + (d1 * d16 - d21 * d18);
15331 d16 = d16 * d21 + d1 * d18 + +HEAPF32[i2 + 16 >> 2];
15332 d1 = +d15;
15333 d18 = +d16;
15334 HEAPF32[i20 >> 2] = d1;
15335 HEAPF32[i20 + 4 >> 2] = d18;
15336 i20 = i2 + 36 | 0;
15337 HEAPF32[i20 >> 2] = d1;
15338 HEAPF32[i20 + 4 >> 2] = d18;
15339 d18 = +HEAPF32[i2 + 72 >> 2];
15340 i20 = i2 + 64 | 0;
15341 HEAPF32[i20 >> 2] = +HEAPF32[i20 >> 2] - d18 * (d16 - d14);
15342 i20 = i2 + 68 | 0;
15343 HEAPF32[i20 >> 2] = d18 * (d15 - d19) + +HEAPF32[i20 >> 2];
15344 STACKTOP = i3;
15345 return;
15346 } else if ((i11 | 0) == 1 | (i11 | 0) == 0) {
15347 i17 = i2 + 12 | 0;
15348 i13 = HEAP32[i17 >> 2] | 0;
15349 i17 = HEAP32[i17 + 4 >> 2] | 0;
15350 i20 = i2 + 36 | 0;
15351 HEAP32[i20 >> 2] = i13;
15352 HEAP32[i20 + 4 >> 2] = i17;
15353 i20 = i2 + 44 | 0;
15354 HEAP32[i20 >> 2] = i13;
15355 HEAP32[i20 + 4 >> 2] = i17;
15356 HEAPF32[i2 + 52 >> 2] = +HEAPF32[i2 + 56 >> 2];
15357 STACKTOP = i3;
15358 return;
15359 } else {
15360 ___assert_fail(1824, 1520, 284, 1856);
15361 }
15362 }
15363 function __ZN9b2Contact6UpdateEP17b2ContactListener(i1, i4) {
15364 i1 = i1 | 0;
15365 i4 = i4 | 0;
15366 var i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i 12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0;
15367 i3 = STACKTOP;
15368 STACKTOP = STACKTOP + 64 | 0;
15369 i2 = i3;
15370 i10 = i1 + 64 | 0;
15371 i6 = i2 + 0 | 0;
15372 i7 = i10 + 0 | 0;
15373 i5 = i6 + 64 | 0;
15374 do {
15375 HEAP32[i6 >> 2] = HEAP32[i7 >> 2];
15376 i6 = i6 + 4 | 0;
15377 i7 = i7 + 4 | 0;
15378 } while ((i6 | 0) < (i5 | 0));
15379 i6 = i1 + 4 | 0;
15380 i11 = HEAP32[i6 >> 2] | 0;
15381 HEAP32[i6 >> 2] = i11 | 4;
15382 i11 = i11 >>> 1;
15383 i14 = HEAP32[i1 + 48 >> 2] | 0;
15384 i15 = HEAP32[i1 + 52 >> 2] | 0;
15385 i5 = (HEAP8[i15 + 38 | 0] | HEAP8[i14 + 38 | 0]) << 24 >> 24 != 0;
15386 i8 = HEAP32[i14 + 8 >> 2] | 0;
15387 i7 = HEAP32[i15 + 8 >> 2] | 0;
15388 i12 = i8 + 12 | 0;
15389 i13 = i7 + 12 | 0;
15390 if (!i5) {
15391 FUNCTION_TABLE_viiii[HEAP32[HEAP32[i1 >> 2] >> 2] & 15](i1, i10, i12, i13);
15392 i12 = i1 + 124 | 0;
15393 i10 = (HEAP32[i12 >> 2] | 0) > 0;
15394 L4 : do {
15395 if (i10) {
15396 i19 = HEAP32[i2 + 60 >> 2] | 0;
15397 if ((i19 | 0) > 0) {
15398 i18 = 0;
15399 } else {
15400 i9 = 0;
15401 while (1) {
15402 HEAPF32[i1 + (i9 * 20 | 0) + 72 >> 2] = 0.0;
15403 HEAPF32[i1 + (i9 * 20 | 0) + 76 >> 2] = 0.0;
15404 i9 = i9 + 1 | 0;
15405 if ((i9 | 0) >= (HEAP32[i12 >> 2] | 0)) {
15406 break L4;
15407 }
15408 }
15409 }
15410 do {
15411 i16 = i1 + (i18 * 20 | 0) + 72 | 0;
15412 HEAPF32[i16 >> 2] = 0.0;
15413 i15 = i1 + (i18 * 20 | 0) + 76 | 0;
15414 HEAPF32[i15 >> 2] = 0.0;
15415 i14 = HEAP32[i1 + (i18 * 20 | 0) + 80 >> 2] | 0;
15416 i17 = 0;
15417 while (1) {
15418 i13 = i17 + 1 | 0;
15419 if ((HEAP32[i2 + (i17 * 20 | 0) + 16 >> 2] | 0) == (i14 | 0)) {
15420 i9 = 7;
15421 break;
15422 }
15423 if ((i13 | 0) < (i19 | 0)) {
15424 i17 = i13;
15425 } else {
15426 break;
15427 }
15428 }
15429 if ((i9 | 0) == 7) {
15430 i9 = 0;
15431 HEAPF32[i16 >> 2] = +HEAPF32[i2 + (i17 * 20 | 0) + 8 >> 2];
15432 HEAPF32[i15 >> 2] = +HEAPF32[i2 + (i17 * 20 | 0) + 12 >> 2];
15433 }
15434 i18 = i18 + 1 | 0;
15435 } while ((i18 | 0) < (HEAP32[i12 >> 2] | 0));
15436 }
15437 } while (0);
15438 i9 = i11 & 1;
15439 if (i10 ^ (i9 | 0) != 0) {
15440 i11 = i8 + 4 | 0;
15441 i12 = HEAPU16[i11 >> 1] | 0;
15442 if ((i12 & 2 | 0) == 0) {
15443 HEAP16[i11 >> 1] = i12 | 2;
15444 HEAPF32[i8 + 144 >> 2] = 0.0;
15445 }
15446 i8 = i7 + 4 | 0;
15447 i11 = HEAPU16[i8 >> 1] | 0;
15448 if ((i11 & 2 | 0) == 0) {
15449 HEAP16[i8 >> 1] = i11 | 2;
15450 HEAPF32[i7 + 144 >> 2] = 0.0;
15451 }
15452 }
15453 } else {
15454 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;
15455 HEAP32[i1 + 124 >> 2] = 0;
15456 i9 = i11 & 1;
15457 }
15458 i7 = HEAP32[i6 >> 2] | 0;
15459 HEAP32[i6 >> 2] = i10 ? i7 | 2 : i7 & -3;
15460 i8 = (i9 | 0) == 0;
15461 i6 = i10 ^ 1;
15462 i7 = (i4 | 0) == 0;
15463 if (!(i8 ^ 1 | i6 | i7)) {
15464 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i4 >> 2] | 0) + 8 >> 2] & 15](i4, i1);
15465 }
15466 if (!(i8 | i10 | i7)) {
15467 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i4 >> 2] | 0) + 12 >> 2] & 15](i4, i1);
15468 }
15469 if (i5 | i6 | i7) {
15470 STACKTOP = i3;
15471 return;
15472 }
15473 FUNCTION_TABLE_viii[HEAP32[(HEAP32[i4 >> 2] | 0) + 16 >> 2] & 3](i4, i1, i2);
15474 STACKTOP = i3;
15475 return;
15476 }
15477 function __ZN13b2DynamicTree10RemoveLeafEi(i1, i12) {
15478 i1 = i1 | 0;
15479 i12 = i12 | 0;
15480 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;
15481 i2 = STACKTOP;
15482 if ((HEAP32[i1 >> 2] | 0) == (i12 | 0)) {
15483 HEAP32[i1 >> 2] = -1;
15484 STACKTOP = i2;
15485 return;
15486 }
15487 i3 = i1 + 4 | 0;
15488 i5 = HEAP32[i3 >> 2] | 0;
15489 i6 = HEAP32[i5 + (i12 * 36 | 0) + 20 >> 2] | 0;
15490 i4 = i5 + (i6 * 36 | 0) + 20 | 0;
15491 i7 = HEAP32[i4 >> 2] | 0;
15492 i13 = HEAP32[i5 + (i6 * 36 | 0) + 24 >> 2] | 0;
15493 if ((i13 | 0) == (i12 | 0)) {
15494 i13 = HEAP32[i5 + (i6 * 36 | 0) + 28 >> 2] | 0;
15495 }
15496 if ((i7 | 0) == -1) {
15497 HEAP32[i1 >> 2] = i13;
15498 HEAP32[i5 + (i13 * 36 | 0) + 20 >> 2] = -1;
15499 if (!((i6 | 0) > -1)) {
15500 ___assert_fail(3e3, 2944, 97, 3040);
15501 }
15502 if ((HEAP32[i1 + 12 >> 2] | 0) <= (i6 | 0)) {
15503 ___assert_fail(3e3, 2944, 97, 3040);
15504 }
15505 i3 = i1 + 8 | 0;
15506 if ((HEAP32[i3 >> 2] | 0) <= 0) {
15507 ___assert_fail(3056, 2944, 98, 3040);
15508 }
15509 i13 = i1 + 16 | 0;
15510 HEAP32[i4 >> 2] = HEAP32[i13 >> 2];
15511 HEAP32[i5 + (i6 * 36 | 0) + 32 >> 2] = -1;
15512 HEAP32[i13 >> 2] = i6;
15513 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + -1;
15514 STACKTOP = i2;
15515 return;
15516 }
15517 i12 = i5 + (i7 * 36 | 0) + 24 | 0;
15518 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
15519 HEAP32[i12 >> 2] = i13;
15520 } else {
15521 HEAP32[i5 + (i7 * 36 | 0) + 28 >> 2] = i13;
15522 }
15523 HEAP32[i5 + (i13 * 36 | 0) + 20 >> 2] = i7;
15524 if (!((i6 | 0) > -1)) {
15525 ___assert_fail(3e3, 2944, 97, 3040);
15526 }
15527 if ((HEAP32[i1 + 12 >> 2] | 0) <= (i6 | 0)) {
15528 ___assert_fail(3e3, 2944, 97, 3040);
15529 }
15530 i12 = i1 + 8 | 0;
15531 if ((HEAP32[i12 >> 2] | 0) <= 0) {
15532 ___assert_fail(3056, 2944, 98, 3040);
15533 }
15534 i13 = i1 + 16 | 0;
15535 HEAP32[i4 >> 2] = HEAP32[i13 >> 2];
15536 HEAP32[i5 + (i6 * 36 | 0) + 32 >> 2] = -1;
15537 HEAP32[i13 >> 2] = i6;
15538 HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + -1;
15539 do {
15540 i4 = __ZN13b2DynamicTree7BalanceEi(i1, i7) | 0;
15541 i7 = HEAP32[i3 >> 2] | 0;
15542 i6 = HEAP32[i7 + (i4 * 36 | 0) + 24 >> 2] | 0;
15543 i5 = HEAP32[i7 + (i4 * 36 | 0) + 28 >> 2] | 0;
15544 d10 = +HEAPF32[i7 + (i6 * 36 | 0) >> 2];
15545 d11 = +HEAPF32[i7 + (i5 * 36 | 0) >> 2];
15546 d9 = +HEAPF32[i7 + (i6 * 36 | 0) + 4 >> 2];
15547 d8 = +HEAPF32[i7 + (i5 * 36 | 0) + 4 >> 2];
15548 d10 = +(d10 < d11 ? d10 : d11);
15549 d11 = +(d9 < d8 ? d9 : d8);
15550 i13 = i7 + (i4 * 36 | 0) | 0;
15551 HEAPF32[i13 >> 2] = d10;
15552 HEAPF32[i13 + 4 >> 2] = d11;
15553 d11 = +HEAPF32[i7 + (i6 * 36 | 0) + 8 >> 2];
15554 d10 = +HEAPF32[i7 + (i5 * 36 | 0) + 8 >> 2];
15555 d9 = +HEAPF32[i7 + (i6 * 36 | 0) + 12 >> 2];
15556 d8 = +HEAPF32[i7 + (i5 * 36 | 0) + 12 >> 2];
15557 d10 = +(d11 > d10 ? d11 : d10);
15558 d11 = +(d9 > d8 ? d9 : d8);
15559 i7 = i7 + (i4 * 36 | 0) + 8 | 0;
15560 HEAPF32[i7 >> 2] = d10;
15561 HEAPF32[i7 + 4 >> 2] = d11;
15562 i7 = HEAP32[i3 >> 2] | 0;
15563 i6 = HEAP32[i7 + (i6 * 36 | 0) + 32 >> 2] | 0;
15564 i5 = HEAP32[i7 + (i5 * 36 | 0) + 32 >> 2] | 0;
15565 HEAP32[i7 + (i4 * 36 | 0) + 32 >> 2] = ((i6 | 0) > (i5 | 0) ? i6 : i5) + 1;
15566 i7 = HEAP32[i7 + (i4 * 36 | 0) + 20 >> 2] | 0;
15567 } while (!((i7 | 0) == -1));
15568 STACKTOP = i2;
15569 return;
15570 }
15571 function __ZN9b2Simplex6Solve3Ev(i7) {
15572 i7 = i7 | 0;
15573 var i1 = 0, i2 = 0, i3 = 0, d4 = 0.0, d5 = 0.0, d6 = 0.0, d8 = 0.0, d9 = 0.0, d 10 = 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;
15574 i1 = STACKTOP;
15575 i2 = i7 + 16 | 0;
15576 d17 = +HEAPF32[i2 >> 2];
15577 d15 = +HEAPF32[i2 + 4 >> 2];
15578 i2 = i7 + 36 | 0;
15579 i3 = i7 + 52 | 0;
15580 d14 = +HEAPF32[i3 >> 2];
15581 d16 = +HEAPF32[i3 + 4 >> 2];
15582 i3 = i7 + 72 | 0;
15583 i22 = i7 + 88 | 0;
15584 d18 = +HEAPF32[i22 >> 2];
15585 d11 = +HEAPF32[i22 + 4 >> 2];
15586 d20 = d14 - d17;
15587 d10 = d16 - d15;
15588 d9 = d17 * d20 + d15 * d10;
15589 d8 = d14 * d20 + d16 * d10;
15590 d4 = d18 - d17;
15591 d19 = d11 - d15;
15592 d6 = d17 * d4 + d15 * d19;
15593 d5 = d18 * d4 + d11 * d19;
15594 d21 = d18 - d14;
15595 d12 = d11 - d16;
15596 d13 = d14 * d21 + d16 * d12;
15597 d12 = d18 * d21 + d11 * d12;
15598 d4 = d20 * d19 - d10 * d4;
15599 d10 = (d14 * d11 - d16 * d18) * d4;
15600 d11 = (d15 * d18 - d17 * d11) * d4;
15601 d4 = (d17 * d16 - d15 * d14) * d4;
15602 if (!(!(d9 >= -0.0) | !(d6 >= -0.0))) {
15603 HEAPF32[i7 + 24 >> 2] = 1.0;
15604 HEAP32[i7 + 108 >> 2] = 1;
15605 STACKTOP = i1;
15606 return;
15607 }
15608 if (!(!(d9 < -0.0) | !(d8 > 0.0) | !(d4 <= 0.0))) {
15609 d21 = 1.0 / (d8 - d9);
15610 HEAPF32[i7 + 24 >> 2] = d8 * d21;
15611 HEAPF32[i7 + 60 >> 2] = -(d9 * d21);
15612 HEAP32[i7 + 108 >> 2] = 2;
15613 STACKTOP = i1;
15614 return;
15615 }
15616 if (!(!(d6 < -0.0) | !(d5 > 0.0) | !(d11 <= 0.0))) {
15617 d21 = 1.0 / (d5 - d6);
15618 HEAPF32[i7 + 24 >> 2] = d5 * d21;
15619 HEAPF32[i7 + 96 >> 2] = -(d6 * d21);
15620 HEAP32[i7 + 108 >> 2] = 2;
15621 i7 = i2 + 0 | 0;
15622 i3 = i3 + 0 | 0;
15623 i2 = i7 + 36 | 0;
15624 do {
15625 HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
15626 i7 = i7 + 4 | 0;
15627 i3 = i3 + 4 | 0;
15628 } while ((i7 | 0) < (i2 | 0));
15629 STACKTOP = i1;
15630 return;
15631 }
15632 if (!(!(d8 <= 0.0) | !(d13 >= -0.0))) {
15633 HEAPF32[i7 + 60 >> 2] = 1.0;
15634 HEAP32[i7 + 108 >> 2] = 1;
15635 i7 = i7 + 0 | 0;
15636 i3 = i2 + 0 | 0;
15637 i2 = i7 + 36 | 0;
15638 do {
15639 HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
15640 i7 = i7 + 4 | 0;
15641 i3 = i3 + 4 | 0;
15642 } while ((i7 | 0) < (i2 | 0));
15643 STACKTOP = i1;
15644 return;
15645 }
15646 if (!(!(d5 <= 0.0) | !(d12 <= 0.0))) {
15647 HEAPF32[i7 + 96 >> 2] = 1.0;
15648 HEAP32[i7 + 108 >> 2] = 1;
15649 i7 = i7 + 0 | 0;
15650 i3 = i3 + 0 | 0;
15651 i2 = i7 + 36 | 0;
15652 do {
15653 HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
15654 i7 = i7 + 4 | 0;
15655 i3 = i3 + 4 | 0;
15656 } while ((i7 | 0) < (i2 | 0));
15657 STACKTOP = i1;
15658 return;
15659 }
15660 if (!(d13 < -0.0) | !(d12 > 0.0) | !(d10 <= 0.0)) {
15661 d21 = 1.0 / (d4 + (d10 + d11));
15662 HEAPF32[i7 + 24 >> 2] = d10 * d21;
15663 HEAPF32[i7 + 60 >> 2] = d11 * d21;
15664 HEAPF32[i7 + 96 >> 2] = d4 * d21;
15665 HEAP32[i7 + 108 >> 2] = 3;
15666 STACKTOP = i1;
15667 return;
15668 } else {
15669 d21 = 1.0 / (d12 - d13);
15670 HEAPF32[i7 + 60 >> 2] = d12 * d21;
15671 HEAPF32[i7 + 96 >> 2] = -(d13 * d21);
15672 HEAP32[i7 + 108 >> 2] = 2;
15673 i7 = i7 + 0 | 0;
15674 i3 = i3 + 0 | 0;
15675 i2 = i7 + 36 | 0;
15676 do {
15677 HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
15678 i7 = i7 + 4 | 0;
15679 i3 = i3 + 4 | 0;
15680 } while ((i7 | 0) < (i2 | 0));
15681 STACKTOP = i1;
15682 return;
15683 }
15684 }
15685 function __ZN16b2ContactManager7CollideEv(i3) {
15686 i3 = i3 | 0;
15687 var i1 = 0, i2 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i1 1 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0;
15688 i2 = STACKTOP;
15689 i8 = HEAP32[i3 + 60 >> 2] | 0;
15690 if ((i8 | 0) == 0) {
15691 STACKTOP = i2;
15692 return;
15693 }
15694 i7 = i3 + 12 | 0;
15695 i6 = i3 + 4 | 0;
15696 i5 = i3 + 72 | 0;
15697 i4 = i3 + 68 | 0;
15698 L4 : while (1) {
15699 i12 = HEAP32[i8 + 48 >> 2] | 0;
15700 i10 = HEAP32[i8 + 52 >> 2] | 0;
15701 i11 = HEAP32[i8 + 56 >> 2] | 0;
15702 i9 = HEAP32[i8 + 60 >> 2] | 0;
15703 i15 = HEAP32[i12 + 8 >> 2] | 0;
15704 i13 = HEAP32[i10 + 8 >> 2] | 0;
15705 i16 = i8 + 4 | 0;
15706 do {
15707 if ((HEAP32[i16 >> 2] & 8 | 0) == 0) {
15708 i1 = 11;
15709 } else {
15710 if (!(__ZNK6b2Body13ShouldCollideEPKS_(i13, i15) | 0)) {
15711 i16 = HEAP32[i8 + 12 >> 2] | 0;
15712 __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8);
15713 i8 = i16;
15714 break;
15715 }
15716 i14 = HEAP32[i4 >> 2] | 0;
15717 if ((i14 | 0) != 0 ? !(FUNCTION_TABLE_iiii[HEAP32[(HEAP32[i14 >> 2] | 0) + 8 >> 2] & 7](i14, i12, i10) | 0) : 0) {
15718 i16 = HEAP32[i8 + 12 >> 2] | 0;
15719 __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8);
15720 i8 = i16;
15721 break;
15722 }
15723 HEAP32[i16 >> 2] = HEAP32[i16 >> 2] & -9;
15724 i1 = 11;
15725 }
15726 } while (0);
15727 do {
15728 if ((i1 | 0) == 11) {
15729 i1 = 0;
15730 if ((HEAP16[i15 + 4 >> 1] & 2) == 0) {
15731 i14 = 0;
15732 } else {
15733 i14 = (HEAP32[i15 >> 2] | 0) != 0;
15734 }
15735 if ((HEAP16[i13 + 4 >> 1] & 2) == 0) {
15736 i13 = 0;
15737 } else {
15738 i13 = (HEAP32[i13 >> 2] | 0) != 0;
15739 }
15740 if (!(i14 | i13)) {
15741 i8 = HEAP32[i8 + 12 >> 2] | 0;
15742 break;
15743 }
15744 i11 = HEAP32[(HEAP32[i12 + 24 >> 2] | 0) + (i11 * 28 | 0) + 24 >> 2] | 0;
15745 i9 = HEAP32[(HEAP32[i10 + 24 >> 2] | 0) + (i9 * 28 | 0) + 24 >> 2] | 0;
15746 if (!((i11 | 0) > -1)) {
15747 i1 = 19;
15748 break L4;
15749 }
15750 i10 = HEAP32[i7 >> 2] | 0;
15751 if ((i10 | 0) <= (i11 | 0)) {
15752 i1 = 19;
15753 break L4;
15754 }
15755 i12 = HEAP32[i6 >> 2] | 0;
15756 if (!((i9 | 0) > -1 & (i10 | 0) > (i9 | 0))) {
15757 i1 = 21;
15758 break L4;
15759 }
15760 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[i 12 + (i9 * 36 | 0) + 12 >> 2] > 0.0) {
15761 i16 = HEAP32[i8 + 12 >> 2] | 0;
15762 __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8);
15763 i8 = i16;
15764 break;
15765 } else {
15766 __ZN9b2Contact6UpdateEP17b2ContactListener(i8, HEAP32[i5 >> 2] | 0);
15767 i8 = HEAP32[i8 + 12 >> 2] | 0;
15768 break;
15769 }
15770 }
15771 } while (0);
15772 if ((i8 | 0) == 0) {
15773 i1 = 25;
15774 break;
15775 }
15776 }
15777 if ((i1 | 0) == 19) {
15778 ___assert_fail(1904, 1952, 159, 2008);
15779 } else if ((i1 | 0) == 21) {
15780 ___assert_fail(1904, 1952, 159, 2008);
15781 } else if ((i1 | 0) == 25) {
15782 STACKTOP = i2;
15783 return;
15784 }
15785 }
15786 function __ZN16b2ContactManager7AddPairEPvS0_(i1, i5, i6) {
15787 i1 = i1 | 0;
15788 i5 = i5 | 0;
15789 i6 = i6 | 0;
15790 var i2 = 0, i3 = 0, i4 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0;
15791 i2 = STACKTOP;
15792 i4 = HEAP32[i5 + 16 >> 2] | 0;
15793 i3 = HEAP32[i6 + 16 >> 2] | 0;
15794 i5 = HEAP32[i5 + 20 >> 2] | 0;
15795 i6 = HEAP32[i6 + 20 >> 2] | 0;
15796 i8 = HEAP32[i4 + 8 >> 2] | 0;
15797 i7 = HEAP32[i3 + 8 >> 2] | 0;
15798 if ((i8 | 0) == (i7 | 0)) {
15799 STACKTOP = i2;
15800 return;
15801 }
15802 i10 = HEAP32[i7 + 112 >> 2] | 0;
15803 L4 : do {
15804 if ((i10 | 0) != 0) {
15805 while (1) {
15806 if ((HEAP32[i10 >> 2] | 0) == (i8 | 0)) {
15807 i9 = HEAP32[i10 + 4 >> 2] | 0;
15808 i12 = HEAP32[i9 + 48 >> 2] | 0;
15809 i13 = HEAP32[i9 + 52 >> 2] | 0;
15810 i11 = HEAP32[i9 + 56 >> 2] | 0;
15811 i9 = HEAP32[i9 + 60 >> 2] | 0;
15812 if ((i12 | 0) == (i4 | 0) & (i13 | 0) == (i3 | 0) & (i11 | 0) == (i5 | 0) & (i9 | 0) == (i6 | 0)) {
15813 i9 = 22;
15814 break;
15815 }
15816 if ((i12 | 0) == (i3 | 0) & (i13 | 0) == (i4 | 0) & (i11 | 0) == (i6 | 0) & (i9 | 0) == (i5 | 0)) {
15817 i9 = 22;
15818 break;
15819 }
15820 }
15821 i10 = HEAP32[i10 + 12 >> 2] | 0;
15822 if ((i10 | 0) == 0) {
15823 break L4;
15824 }
15825 }
15826 if ((i9 | 0) == 22) {
15827 STACKTOP = i2;
15828 return;
15829 }
15830 }
15831 } while (0);
15832 if (!(__ZNK6b2Body13ShouldCollideEPKS_(i7, i8) | 0)) {
15833 STACKTOP = i2;
15834 return;
15835 }
15836 i7 = HEAP32[i1 + 68 >> 2] | 0;
15837 if ((i7 | 0) != 0 ? !(FUNCTION_TABLE_iiii[HEAP32[(HEAP32[i7 >> 2] | 0) + 8 >> 2 ] & 7](i7, i4, i3) | 0) : 0) {
15838 STACKTOP = i2;
15839 return;
15840 }
15841 i5 = __ZN9b2Contact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i4, i5, i3, i6, HEAP32[i1 + 76 >> 2] | 0) | 0;
15842 if ((i5 | 0) == 0) {
15843 STACKTOP = i2;
15844 return;
15845 }
15846 i4 = HEAP32[(HEAP32[i5 + 48 >> 2] | 0) + 8 >> 2] | 0;
15847 i3 = HEAP32[(HEAP32[i5 + 52 >> 2] | 0) + 8 >> 2] | 0;
15848 HEAP32[i5 + 8 >> 2] = 0;
15849 i7 = i1 + 60 | 0;
15850 HEAP32[i5 + 12 >> 2] = HEAP32[i7 >> 2];
15851 i6 = HEAP32[i7 >> 2] | 0;
15852 if ((i6 | 0) != 0) {
15853 HEAP32[i6 + 8 >> 2] = i5;
15854 }
15855 HEAP32[i7 >> 2] = i5;
15856 i8 = i5 + 16 | 0;
15857 HEAP32[i5 + 20 >> 2] = i5;
15858 HEAP32[i8 >> 2] = i3;
15859 HEAP32[i5 + 24 >> 2] = 0;
15860 i6 = i4 + 112 | 0;
15861 HEAP32[i5 + 28 >> 2] = HEAP32[i6 >> 2];
15862 i7 = HEAP32[i6 >> 2] | 0;
15863 if ((i7 | 0) != 0) {
15864 HEAP32[i7 + 8 >> 2] = i8;
15865 }
15866 HEAP32[i6 >> 2] = i8;
15867 i6 = i5 + 32 | 0;
15868 HEAP32[i5 + 36 >> 2] = i5;
15869 HEAP32[i6 >> 2] = i4;
15870 HEAP32[i5 + 40 >> 2] = 0;
15871 i7 = i3 + 112 | 0;
15872 HEAP32[i5 + 44 >> 2] = HEAP32[i7 >> 2];
15873 i5 = HEAP32[i7 >> 2] | 0;
15874 if ((i5 | 0) != 0) {
15875 HEAP32[i5 + 8 >> 2] = i6;
15876 }
15877 HEAP32[i7 >> 2] = i6;
15878 i5 = i4 + 4 | 0;
15879 i6 = HEAPU16[i5 >> 1] | 0;
15880 if ((i6 & 2 | 0) == 0) {
15881 HEAP16[i5 >> 1] = i6 | 2;
15882 HEAPF32[i4 + 144 >> 2] = 0.0;
15883 }
15884 i4 = i3 + 4 | 0;
15885 i5 = HEAPU16[i4 >> 1] | 0;
15886 if ((i5 & 2 | 0) == 0) {
15887 HEAP16[i4 >> 1] = i5 | 2;
15888 HEAPF32[i3 + 144 >> 2] = 0.0;
15889 }
15890 i13 = i1 + 64 | 0;
15891 HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + 1;
15892 STACKTOP = i2;
15893 return;
15894 }
15895 function __ZN12b2BroadPhase11UpdatePairsI16b2ContactManagerEEvPT_(i5, i2) {
15896 i5 = i5 | 0;
15897 i2 = i2 | 0;
15898 var i1 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i 12 = 0, i13 = 0, i14 = 0;
15899 i3 = STACKTOP;
15900 STACKTOP = STACKTOP + 16 | 0;
15901 i6 = i3;
15902 i1 = i5 + 52 | 0;
15903 HEAP32[i1 >> 2] = 0;
15904 i4 = i5 + 40 | 0;
15905 i12 = HEAP32[i4 >> 2] | 0;
15906 do {
15907 if ((i12 | 0) > 0) {
15908 i9 = i5 + 32 | 0;
15909 i11 = i5 + 56 | 0;
15910 i8 = i5 + 12 | 0;
15911 i10 = i5 + 4 | 0;
15912 i13 = 0;
15913 while (1) {
15914 i14 = HEAP32[(HEAP32[i9 >> 2] | 0) + (i13 << 2) >> 2] | 0;
15915 HEAP32[i11 >> 2] = i14;
15916 if (!((i14 | 0) == -1)) {
15917 if (!((i14 | 0) > -1)) {
15918 i8 = 6;
15919 break;
15920 }
15921 if ((HEAP32[i8 >> 2] | 0) <= (i14 | 0)) {
15922 i8 = 6;
15923 break;
15924 }
15925 __ZNK13b2DynamicTree5QueryI12b2BroadPhaseEEvPT_RK6b2AABB(i5, i5, (HEAP32[i1 0 >> 2] | 0) + (i14 * 36 | 0) | 0);
15926 i12 = HEAP32[i4 >> 2] | 0;
15927 }
15928 i13 = i13 + 1 | 0;
15929 if ((i13 | 0) >= (i12 | 0)) {
15930 i8 = 9;
15931 break;
15932 }
15933 }
15934 if ((i8 | 0) == 6) {
15935 ___assert_fail(1904, 1952, 159, 2008);
15936 } else if ((i8 | 0) == 9) {
15937 i7 = HEAP32[i1 >> 2] | 0;
15938 break;
15939 }
15940 } else {
15941 i7 = 0;
15942 }
15943 } while (0);
15944 HEAP32[i4 >> 2] = 0;
15945 i4 = i5 + 44 | 0;
15946 i14 = HEAP32[i4 >> 2] | 0;
15947 HEAP32[i6 >> 2] = 3;
15948 __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i14, i14 + (i7 * 12 | 0) | 0 , i6);
15949 if ((HEAP32[i1 >> 2] | 0) <= 0) {
15950 STACKTOP = i3;
15951 return;
15952 }
15953 i6 = i5 + 12 | 0;
15954 i7 = i5 + 4 | 0;
15955 i9 = 0;
15956 L18 : while (1) {
15957 i8 = HEAP32[i4 >> 2] | 0;
15958 i5 = i8 + (i9 * 12 | 0) | 0;
15959 i10 = HEAP32[i5 >> 2] | 0;
15960 if (!((i10 | 0) > -1)) {
15961 i8 = 14;
15962 break;
15963 }
15964 i12 = HEAP32[i6 >> 2] | 0;
15965 if ((i12 | 0) <= (i10 | 0)) {
15966 i8 = 14;
15967 break;
15968 }
15969 i11 = HEAP32[i7 >> 2] | 0;
15970 i8 = i8 + (i9 * 12 | 0) + 4 | 0;
15971 i13 = HEAP32[i8 >> 2] | 0;
15972 if (!((i13 | 0) > -1 & (i12 | 0) > (i13 | 0))) {
15973 i8 = 16;
15974 break;
15975 }
15976 __ZN16b2ContactManager7AddPairEPvS0_(i2, HEAP32[i11 + (i10 * 36 | 0) + 16 >> 2 ] | 0, HEAP32[i11 + (i13 * 36 | 0) + 16 >> 2] | 0);
15977 i10 = HEAP32[i1 >> 2] | 0;
15978 while (1) {
15979 i9 = i9 + 1 | 0;
15980 if ((i9 | 0) >= (i10 | 0)) {
15981 i8 = 21;
15982 break L18;
15983 }
15984 i11 = HEAP32[i4 >> 2] | 0;
15985 if ((HEAP32[i11 + (i9 * 12 | 0) >> 2] | 0) != (HEAP32[i5 >> 2] | 0)) {
15986 continue L18;
15987 }
15988 if ((HEAP32[i11 + (i9 * 12 | 0) + 4 >> 2] | 0) != (HEAP32[i8 >> 2] | 0)) {
15989 continue L18;
15990 }
15991 }
15992 }
15993 if ((i8 | 0) == 14) {
15994 ___assert_fail(1904, 1952, 153, 1992);
15995 } else if ((i8 | 0) == 16) {
15996 ___assert_fail(1904, 1952, 153, 1992);
15997 } else if ((i8 | 0) == 21) {
15998 STACKTOP = i3;
15999 return;
16000 }
16001 }
16002 function __ZNK13b2DynamicTree5QueryI12b2BroadPhaseEEvPT_RK6b2AABB(i9, i4, i7) {
16003 i9 = i9 | 0;
16004 i4 = i4 | 0;
16005 i7 = i7 | 0;
16006 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;
16007 i2 = STACKTOP;
16008 STACKTOP = STACKTOP + 1040 | 0;
16009 i3 = i2;
16010 i1 = i3 + 4 | 0;
16011 HEAP32[i3 >> 2] = i1;
16012 i5 = i3 + 1028 | 0;
16013 HEAP32[i5 >> 2] = 0;
16014 i6 = i3 + 1032 | 0;
16015 HEAP32[i6 >> 2] = 256;
16016 i14 = HEAP32[i3 >> 2] | 0;
16017 HEAP32[i14 + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i9 >> 2];
16018 i15 = HEAP32[i5 >> 2] | 0;
16019 i16 = i15 + 1 | 0;
16020 HEAP32[i5 >> 2] = i16;
16021 L1 : do {
16022 if ((i15 | 0) > -1) {
16023 i9 = i9 + 4 | 0;
16024 i11 = i7 + 4 | 0;
16025 i12 = i7 + 8 | 0;
16026 i10 = i7 + 12 | 0;
16027 while (1) {
16028 i16 = i16 + -1 | 0;
16029 HEAP32[i5 >> 2] = i16;
16030 i13 = HEAP32[i14 + (i16 << 2) >> 2] | 0;
16031 do {
16032 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) {
16033 i15 = i8 + (i13 * 36 | 0) + 24 | 0;
16034 if ((HEAP32[i15 >> 2] | 0) == -1) {
16035 if (!(__ZN12b2BroadPhase13QueryCallbackEi(i4, i13) | 0)) {
16036 break L1;
16037 }
16038 i16 = HEAP32[i5 >> 2] | 0;
16039 break;
16040 }
16041 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, H EAP32[i5 >> 2] << 2 | 0) | 0, (i14 | 0) != (i1 | 0)) : 0) {
16042 __Z6b2FreePv(i14);
16043 }
16044 i14 = HEAP32[i3 >> 2] | 0;
16045 HEAP32[i14 + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i15 >> 2];
16046 i15 = (HEAP32[i5 >> 2] | 0) + 1 | 0;
16047 HEAP32[i5 >> 2] = i15;
16048 i13 = i8 + (i13 * 36 | 0) + 28 | 0;
16049 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, H EAP32[i5 >> 2] << 2 | 0) | 0, (i14 | 0) != (i1 | 0)) : 0) {
16050 __Z6b2FreePv(i14);
16051 }
16052 HEAP32[(HEAP32[i3 >> 2] | 0) + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i13 > > 2];
16053 i16 = (HEAP32[i5 >> 2] | 0) + 1 | 0;
16054 HEAP32[i5 >> 2] = i16;
16055 }
16056 } while (0);
16057 if ((i16 | 0) <= 0) {
16058 break L1;
16059 }
16060 i14 = HEAP32[i3 >> 2] | 0;
16061 }
16062 }
16063 } while (0);
16064 i4 = HEAP32[i3 >> 2] | 0;
16065 if ((i4 | 0) == (i1 | 0)) {
16066 STACKTOP = i2;
16067 return;
16068 }
16069 __Z6b2FreePv(i4);
16070 HEAP32[i3 >> 2] = 0;
16071 STACKTOP = i2;
16072 return;
16073 }
16074 function __ZN15b2ContactSolver9WarmStartEv(i4) {
16075 i4 = i4 | 0;
16076 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, d 26 = 0.0, d27 = 0.0;
16077 i1 = STACKTOP;
16078 i2 = i4 + 48 | 0;
16079 if ((HEAP32[i2 >> 2] | 0) <= 0) {
16080 STACKTOP = i1;
16081 return;
16082 }
16083 i3 = i4 + 40 | 0;
16084 i5 = i4 + 28 | 0;
16085 i22 = HEAP32[i5 >> 2] | 0;
16086 i8 = 0;
16087 do {
16088 i9 = HEAP32[i3 >> 2] | 0;
16089 i7 = HEAP32[i9 + (i8 * 152 | 0) + 112 >> 2] | 0;
16090 i6 = HEAP32[i9 + (i8 * 152 | 0) + 116 >> 2] | 0;
16091 d10 = +HEAPF32[i9 + (i8 * 152 | 0) + 120 >> 2];
16092 d14 = +HEAPF32[i9 + (i8 * 152 | 0) + 128 >> 2];
16093 d12 = +HEAPF32[i9 + (i8 * 152 | 0) + 124 >> 2];
16094 d11 = +HEAPF32[i9 + (i8 * 152 | 0) + 132 >> 2];
16095 i13 = HEAP32[i9 + (i8 * 152 | 0) + 144 >> 2] | 0;
16096 i4 = i22 + (i7 * 12 | 0) | 0;
16097 i24 = i4;
16098 d17 = +HEAPF32[i24 >> 2];
16099 d19 = +HEAPF32[i24 + 4 >> 2];
16100 d20 = +HEAPF32[i22 + (i7 * 12 | 0) + 8 >> 2];
16101 i24 = i22 + (i6 * 12 | 0) | 0;
16102 d21 = +HEAPF32[i24 >> 2];
16103 d23 = +HEAPF32[i24 + 4 >> 2];
16104 d18 = +HEAPF32[i22 + (i6 * 12 | 0) + 8 >> 2];
16105 i22 = i9 + (i8 * 152 | 0) + 72 | 0;
16106 d15 = +HEAPF32[i22 >> 2];
16107 d16 = +HEAPF32[i22 + 4 >> 2];
16108 if ((i13 | 0) > 0) {
16109 i22 = 0;
16110 do {
16111 d27 = +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 16 >> 2];
16112 d25 = +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 20 >> 2];
16113 d26 = d15 * d27 + d16 * d25;
16114 d25 = d16 * d27 - d15 * d25;
16115 d20 = d20 - d14 * (+HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) >> 2] * d25 - +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 4 >> 2] * d26);
16116 d17 = d17 - d10 * d26;
16117 d19 = d19 - d10 * d25;
16118 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]);
16119 d21 = d21 + d12 * d26;
16120 d23 = d23 + d12 * d25;
16121 i22 = i22 + 1 | 0;
16122 } while ((i22 | 0) != (i13 | 0));
16123 }
16124 d27 = +d17;
16125 d26 = +d19;
16126 i22 = i4;
16127 HEAPF32[i22 >> 2] = d27;
16128 HEAPF32[i22 + 4 >> 2] = d26;
16129 i22 = HEAP32[i5 >> 2] | 0;
16130 HEAPF32[i22 + (i7 * 12 | 0) + 8 >> 2] = d20;
16131 d26 = +d21;
16132 d27 = +d23;
16133 i22 = i22 + (i6 * 12 | 0) | 0;
16134 HEAPF32[i22 >> 2] = d26;
16135 HEAPF32[i22 + 4 >> 2] = d27;
16136 i22 = HEAP32[i5 >> 2] | 0;
16137 HEAPF32[i22 + (i6 * 12 | 0) + 8 >> 2] = d18;
16138 i8 = i8 + 1 | 0;
16139 } while ((i8 | 0) < (HEAP32[i2 >> 2] | 0));
16140 STACKTOP = i1;
16141 return;
16142 }
16143 function __ZNK14b2PolygonShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b 2Transformi(i1, i5, i8, i7, i4) {
16144 i1 = i1 | 0;
16145 i5 = i5 | 0;
16146 i8 = i8 | 0;
16147 i7 = i7 | 0;
16148 i4 = i4 | 0;
16149 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;
16150 i4 = STACKTOP;
16151 d10 = +HEAPF32[i7 >> 2];
16152 d9 = +HEAPF32[i8 >> 2] - d10;
16153 d18 = +HEAPF32[i7 + 4 >> 2];
16154 d11 = +HEAPF32[i8 + 4 >> 2] - d18;
16155 i6 = i7 + 12 | 0;
16156 d17 = +HEAPF32[i6 >> 2];
16157 i7 = i7 + 8 | 0;
16158 d19 = +HEAPF32[i7 >> 2];
16159 d12 = d9 * d17 + d11 * d19;
16160 d9 = d17 * d11 - d9 * d19;
16161 d10 = +HEAPF32[i8 + 8 >> 2] - d10;
16162 d18 = +HEAPF32[i8 + 12 >> 2] - d18;
16163 d11 = d17 * d10 + d19 * d18 - d12;
16164 d10 = d17 * d18 - d19 * d10 - d9;
16165 i8 = i8 + 16 | 0;
16166 i14 = HEAP32[i1 + 148 >> 2] | 0;
16167 do {
16168 if ((i14 | 0) > 0) {
16169 i16 = 0;
16170 i15 = -1;
16171 d13 = 0.0;
16172 d17 = +HEAPF32[i8 >> 2];
16173 L3 : while (1) {
16174 d20 = +HEAPF32[i1 + (i16 << 3) + 84 >> 2];
16175 d19 = +HEAPF32[i1 + (i16 << 3) + 88 >> 2];
16176 d18 = (+HEAPF32[i1 + (i16 << 3) + 20 >> 2] - d12) * d20 + (+HEAPF32[i1 + (i1 6 << 3) + 24 >> 2] - d9) * d19;
16177 d19 = d11 * d20 + d10 * d19;
16178 do {
16179 if (d19 == 0.0) {
16180 if (d18 < 0.0) {
16181 i1 = 0;
16182 i14 = 18;
16183 break L3;
16184 }
16185 } else {
16186 if (d19 < 0.0 ? d18 < d13 * d19 : 0) {
16187 i15 = i16;
16188 d13 = d18 / d19;
16189 break;
16190 }
16191 if (d19 > 0.0 ? d18 < d17 * d19 : 0) {
16192 d17 = d18 / d19;
16193 }
16194 }
16195 } while (0);
16196 i16 = i16 + 1 | 0;
16197 if (d17 < d13) {
16198 i1 = 0;
16199 i14 = 18;
16200 break;
16201 }
16202 if ((i16 | 0) >= (i14 | 0)) {
16203 i14 = 13;
16204 break;
16205 }
16206 }
16207 if ((i14 | 0) == 13) {
16208 if (d13 >= 0.0) {
16209 i2 = i15;
16210 d3 = d13;
16211 break;
16212 }
16213 ___assert_fail(376, 328, 249, 424);
16214 } else if ((i14 | 0) == 18) {
16215 STACKTOP = i4;
16216 return i1 | 0;
16217 }
16218 } else {
16219 i2 = -1;
16220 d3 = 0.0;
16221 }
16222 } while (0);
16223 if (!(d3 <= +HEAPF32[i8 >> 2])) {
16224 ___assert_fail(376, 328, 249, 424);
16225 }
16226 if (!((i2 | 0) > -1)) {
16227 i16 = 0;
16228 STACKTOP = i4;
16229 return i16 | 0;
16230 }
16231 HEAPF32[i5 + 8 >> 2] = d3;
16232 d18 = +HEAPF32[i6 >> 2];
16233 d13 = +HEAPF32[i1 + (i2 << 3) + 84 >> 2];
16234 d17 = +HEAPF32[i7 >> 2];
16235 d20 = +HEAPF32[i1 + (i2 << 3) + 88 >> 2];
16236 d19 = +(d18 * d13 - d17 * d20);
16237 d20 = +(d13 * d17 + d18 * d20);
16238 i16 = i5;
16239 HEAPF32[i16 >> 2] = d19;
16240 HEAPF32[i16 + 4 >> 2] = d20;
16241 i16 = 1;
16242 STACKTOP = i4;
16243 return i16 | 0;
16244 }
16245 function __ZN7b2World4StepEfii(i1, d9, i11, i12) {
16246 i1 = i1 | 0;
16247 d9 = +d9;
16248 i11 = i11 | 0;
16249 i12 = i12 | 0;
16250 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i10 = 0, i13 = 0;
16251 i4 = STACKTOP;
16252 STACKTOP = STACKTOP + 32 | 0;
16253 i3 = i4 + 27 | 0;
16254 i5 = i4;
16255 i8 = i4 + 26 | 0;
16256 i10 = i4 + 25 | 0;
16257 i7 = i4 + 24 | 0;
16258 __ZN7b2TimerC2Ev(i3);
16259 i2 = i1 + 102868 | 0;
16260 i13 = HEAP32[i2 >> 2] | 0;
16261 if ((i13 & 1 | 0) != 0) {
16262 __ZN16b2ContactManager15FindNewContactsEv(i1 + 102872 | 0);
16263 i13 = HEAP32[i2 >> 2] & -2;
16264 HEAP32[i2 >> 2] = i13;
16265 }
16266 HEAP32[i2 >> 2] = i13 | 2;
16267 HEAPF32[i5 >> 2] = d9;
16268 HEAP32[i5 + 12 >> 2] = i11;
16269 HEAP32[i5 + 16 >> 2] = i12;
16270 if (d9 > 0.0) {
16271 HEAPF32[i5 + 4 >> 2] = 1.0 / d9;
16272 } else {
16273 HEAPF32[i5 + 4 >> 2] = 0.0;
16274 }
16275 i11 = i1 + 102988 | 0;
16276 HEAPF32[i5 + 8 >> 2] = +HEAPF32[i11 >> 2] * d9;
16277 HEAP8[i5 + 20 | 0] = HEAP8[i1 + 102992 | 0] | 0;
16278 __ZN7b2TimerC2Ev(i8);
16279 __ZN16b2ContactManager7CollideEv(i1 + 102872 | 0);
16280 HEAPF32[i1 + 103e3 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i8);
16281 if ((HEAP8[i1 + 102995 | 0] | 0) != 0 ? +HEAPF32[i5 >> 2] > 0.0 : 0) {
16282 __ZN7b2TimerC2Ev(i10);
16283 __ZN7b2World5SolveERK10b2TimeStep(i1, i5);
16284 HEAPF32[i1 + 103004 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i10);
16285 }
16286 if ((HEAP8[i1 + 102993 | 0] | 0) != 0) {
16287 d9 = +HEAPF32[i5 >> 2];
16288 if (d9 > 0.0) {
16289 __ZN7b2TimerC2Ev(i7);
16290 __ZN7b2World8SolveTOIERK10b2TimeStep(i1, i5);
16291 HEAPF32[i1 + 103024 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i7);
16292 i6 = 12;
16293 }
16294 } else {
16295 i6 = 12;
16296 }
16297 if ((i6 | 0) == 12) {
16298 d9 = +HEAPF32[i5 >> 2];
16299 }
16300 if (d9 > 0.0) {
16301 HEAPF32[i11 >> 2] = +HEAPF32[i5 + 4 >> 2];
16302 }
16303 i5 = HEAP32[i2 >> 2] | 0;
16304 if ((i5 & 4 | 0) == 0) {
16305 i13 = i5 & -3;
16306 HEAP32[i2 >> 2] = i13;
16307 d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3);
16308 i13 = i1 + 102996 | 0;
16309 HEAPF32[i13 >> 2] = d9;
16310 STACKTOP = i4;
16311 return;
16312 }
16313 i6 = HEAP32[i1 + 102952 >> 2] | 0;
16314 if ((i6 | 0) == 0) {
16315 i13 = i5 & -3;
16316 HEAP32[i2 >> 2] = i13;
16317 d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3);
16318 i13 = i1 + 102996 | 0;
16319 HEAPF32[i13 >> 2] = d9;
16320 STACKTOP = i4;
16321 return;
16322 }
16323 do {
16324 HEAPF32[i6 + 76 >> 2] = 0.0;
16325 HEAPF32[i6 + 80 >> 2] = 0.0;
16326 HEAPF32[i6 + 84 >> 2] = 0.0;
16327 i6 = HEAP32[i6 + 96 >> 2] | 0;
16328 } while ((i6 | 0) != 0);
16329 i13 = i5 & -3;
16330 HEAP32[i2 >> 2] = i13;
16331 d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3);
16332 i13 = i1 + 102996 | 0;
16333 HEAPF32[i13 >> 2] = d9;
16334 STACKTOP = i4;
16335 return;
16336 }
16337 function __ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i1, i5, i6, i3, i4) {
16338 i1 = i1 | 0;
16339 i5 = i5 | 0;
16340 i6 = i6 | 0;
16341 i3 = i3 | 0;
16342 i4 = i4 | 0;
16343 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;
16344 i2 = STACKTOP;
16345 i7 = HEAP32[i5 + 148 >> 2] | 0;
16346 d17 = +HEAPF32[i4 + 12 >> 2];
16347 d19 = +HEAPF32[i3 + 12 >> 2];
16348 d18 = +HEAPF32[i4 + 8 >> 2];
16349 d16 = +HEAPF32[i3 + 16 >> 2];
16350 d15 = +HEAPF32[i6 + 12 >> 2];
16351 d10 = +HEAPF32[i5 + 12 >> 2];
16352 d8 = +HEAPF32[i6 + 8 >> 2];
16353 d9 = +HEAPF32[i5 + 16 >> 2];
16354 d11 = +HEAPF32[i4 >> 2] + (d17 * d19 - d18 * d16) - (+HEAPF32[i6 >> 2] + (d15 * d10 - d8 * d9));
16355 d9 = d19 * d18 + d17 * d16 + +HEAPF32[i4 + 4 >> 2] - (d10 * d8 + d15 * d9 + +HE APF32[i6 + 4 >> 2]);
16356 d10 = d15 * d11 + d8 * d9;
16357 d8 = d15 * d9 - d11 * d8;
16358 if ((i7 | 0) > 0) {
16359 i14 = 0;
16360 i13 = 0;
16361 d9 = -3.4028234663852886e+38;
16362 while (1) {
16363 d11 = d10 * +HEAPF32[i5 + (i13 << 3) + 84 >> 2] + d8 * +HEAPF32[i5 + (i13 << 3) + 88 >> 2];
16364 i12 = d11 > d9;
16365 i14 = i12 ? i13 : i14;
16366 i13 = i13 + 1 | 0;
16367 if ((i13 | 0) == (i7 | 0)) {
16368 break;
16369 } else {
16370 d9 = i12 ? d11 : d9;
16371 }
16372 }
16373 } else {
16374 i14 = 0;
16375 }
16376 d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i1 4, i3, i4);
16377 i12 = ((i14 | 0) > 0 ? i14 : i7) + -1 | 0;
16378 d8 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i1 2, i3, i4);
16379 i13 = i14 + 1 | 0;
16380 i13 = (i13 | 0) < (i7 | 0) ? i13 : 0;
16381 d10 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i 13, i3, i4);
16382 if (d8 > d9 & d8 > d10) {
16383 while (1) {
16384 i13 = ((i12 | 0) > 0 ? i12 : i7) + -1 | 0;
16385 d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4);
16386 if (d9 > d8) {
16387 i12 = i13;
16388 d8 = d9;
16389 } else {
16390 break;
16391 }
16392 }
16393 HEAP32[i1 >> 2] = i12;
16394 STACKTOP = i2;
16395 return +d8;
16396 }
16397 if (d10 > d9) {
16398 i12 = i13;
16399 d8 = d10;
16400 } else {
16401 d19 = d9;
16402 HEAP32[i1 >> 2] = i14;
16403 STACKTOP = i2;
16404 return +d19;
16405 }
16406 while (1) {
16407 i13 = i12 + 1 | 0;
16408 i13 = (i13 | 0) < (i7 | 0) ? i13 : 0;
16409 d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i 13, i3, i4);
16410 if (d9 > d8) {
16411 i12 = i13;
16412 d8 = d9;
16413 } else {
16414 break;
16415 }
16416 }
16417 HEAP32[i1 >> 2] = i12;
16418 STACKTOP = i2;
16419 return +d8;
16420 }
16421 function __ZN9b2Fixture11SynchronizeEP12b2BroadPhaseRK11b2TransformS4_(i10, i8, i7, i2) {
16422 i10 = i10 | 0;
16423 i8 = i8 | 0;
16424 i7 = i7 | 0;
16425 i2 = i2 | 0;
16426 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;
16427 i9 = STACKTOP;
16428 STACKTOP = STACKTOP + 48 | 0;
16429 i5 = i9 + 24 | 0;
16430 i6 = i9 + 8 | 0;
16431 i3 = i9;
16432 i4 = i10 + 28 | 0;
16433 if ((HEAP32[i4 >> 2] | 0) <= 0) {
16434 STACKTOP = i9;
16435 return;
16436 }
16437 i1 = i10 + 24 | 0;
16438 i18 = i10 + 12 | 0;
16439 i19 = i5 + 4 | 0;
16440 i20 = i6 + 4 | 0;
16441 i13 = i5 + 8 | 0;
16442 i14 = i6 + 8 | 0;
16443 i15 = i5 + 12 | 0;
16444 i16 = i6 + 12 | 0;
16445 i11 = i2 + 4 | 0;
16446 i22 = i7 + 4 | 0;
16447 i12 = i3 + 4 | 0;
16448 i21 = 0;
16449 do {
16450 i10 = HEAP32[i1 >> 2] | 0;
16451 i27 = HEAP32[i18 >> 2] | 0;
16452 i17 = i10 + (i21 * 28 | 0) + 20 | 0;
16453 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i27 >> 2] | 0) + 24 >> 2] & 15](i27, i5, i 7, HEAP32[i17 >> 2] | 0);
16454 i27 = HEAP32[i18 >> 2] | 0;
16455 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i27 >> 2] | 0) + 24 >> 2] & 15](i27, i6, i 2, HEAP32[i17 >> 2] | 0);
16456 i17 = i10 + (i21 * 28 | 0) | 0;
16457 d25 = +HEAPF32[i5 >> 2];
16458 d26 = +HEAPF32[i6 >> 2];
16459 d24 = +HEAPF32[i19 >> 2];
16460 d23 = +HEAPF32[i20 >> 2];
16461 d25 = +(d25 < d26 ? d25 : d26);
16462 d26 = +(d24 < d23 ? d24 : d23);
16463 i27 = i17;
16464 HEAPF32[i27 >> 2] = d25;
16465 HEAPF32[i27 + 4 >> 2] = d26;
16466 d25 = +HEAPF32[i13 >> 2];
16467 d26 = +HEAPF32[i14 >> 2];
16468 d23 = +HEAPF32[i15 >> 2];
16469 d24 = +HEAPF32[i16 >> 2];
16470 d25 = +(d25 > d26 ? d25 : d26);
16471 d26 = +(d23 > d24 ? d23 : d24);
16472 i27 = i10 + (i21 * 28 | 0) + 8 | 0;
16473 HEAPF32[i27 >> 2] = d25;
16474 HEAPF32[i27 + 4 >> 2] = d26;
16475 d26 = +HEAPF32[i11 >> 2] - +HEAPF32[i22 >> 2];
16476 HEAPF32[i3 >> 2] = +HEAPF32[i2 >> 2] - +HEAPF32[i7 >> 2];
16477 HEAPF32[i12 >> 2] = d26;
16478 __ZN12b2BroadPhase9MoveProxyEiRK6b2AABBRK6b2Vec2(i8, HEAP32[i10 + (i21 * 28 | 0) + 24 >> 2] | 0, i17, i3);
16479 i21 = i21 + 1 | 0;
16480 } while ((i21 | 0) < (HEAP32[i4 >> 2] | 0));
16481 STACKTOP = i9;
16482 return;
16483 }
16484 function __ZN12b2EPCollider24ComputePolygonSeparationEv(i2, i9) {
16485 i2 = i2 | 0;
16486 i9 = i9 | 0;
16487 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 ;
16488 i15 = STACKTOP;
16489 HEAP32[i2 >> 2] = 0;
16490 i3 = i2 + 4 | 0;
16491 HEAP32[i3 >> 2] = -1;
16492 i4 = i2 + 8 | 0;
16493 HEAPF32[i4 >> 2] = -3.4028234663852886e+38;
16494 d7 = +HEAPF32[i9 + 216 >> 2];
16495 d6 = +HEAPF32[i9 + 212 >> 2];
16496 i5 = HEAP32[i9 + 128 >> 2] | 0;
16497 if ((i5 | 0) <= 0) {
16498 STACKTOP = i15;
16499 return;
16500 }
16501 d17 = +HEAPF32[i9 + 164 >> 2];
16502 d18 = +HEAPF32[i9 + 168 >> 2];
16503 d11 = +HEAPF32[i9 + 172 >> 2];
16504 d10 = +HEAPF32[i9 + 176 >> 2];
16505 d16 = +HEAPF32[i9 + 244 >> 2];
16506 i12 = i9 + 228 | 0;
16507 i13 = i9 + 232 | 0;
16508 i14 = i9 + 236 | 0;
16509 i1 = i9 + 240 | 0;
16510 d19 = -3.4028234663852886e+38;
16511 i20 = 0;
16512 while (1) {
16513 d23 = +HEAPF32[i9 + (i20 << 3) + 64 >> 2];
16514 d21 = -d23;
16515 d22 = -+HEAPF32[i9 + (i20 << 3) + 68 >> 2];
16516 d26 = +HEAPF32[i9 + (i20 << 3) >> 2];
16517 d25 = +HEAPF32[i9 + (i20 << 3) + 4 >> 2];
16518 d24 = (d26 - d17) * d21 + (d25 - d18) * d22;
16519 d25 = (d26 - d11) * d21 + (d25 - d10) * d22;
16520 d24 = d24 < d25 ? d24 : d25;
16521 if (d24 > d16) {
16522 break;
16523 }
16524 if (!(d7 * d23 + d6 * d22 >= 0.0)) {
16525 if (!((d21 - +HEAPF32[i12 >> 2]) * d6 + (d22 - +HEAPF32[i13 >> 2]) * d7 < -.0 3490658849477768) & d24 > d19) {
16526 i8 = 8;
16527 }
16528 } else {
16529 if (!((d21 - +HEAPF32[i14 >> 2]) * d6 + (d22 - +HEAPF32[i1 >> 2]) * d7 < -.03 490658849477768) & d24 > d19) {
16530 i8 = 8;
16531 }
16532 }
16533 if ((i8 | 0) == 8) {
16534 i8 = 0;
16535 HEAP32[i2 >> 2] = 2;
16536 HEAP32[i3 >> 2] = i20;
16537 HEAPF32[i4 >> 2] = d24;
16538 d19 = d24;
16539 }
16540 i20 = i20 + 1 | 0;
16541 if ((i20 | 0) >= (i5 | 0)) {
16542 i8 = 10;
16543 break;
16544 }
16545 }
16546 if ((i8 | 0) == 10) {
16547 STACKTOP = i15;
16548 return;
16549 }
16550 HEAP32[i2 >> 2] = 2;
16551 HEAP32[i3 >> 2] = i20;
16552 HEAPF32[i4 >> 2] = d24;
16553 STACKTOP = i15;
16554 return;
16555 }
16556 function __ZNK11b2EdgeShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Tr ansformi(i17, i1, i2, i18, i3) {
16557 i17 = i17 | 0;
16558 i1 = i1 | 0;
16559 i2 = i2 | 0;
16560 i18 = i18 | 0;
16561 i3 = i3 | 0;
16562 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;
16563 i3 = STACKTOP;
16564 d6 = +HEAPF32[i18 >> 2];
16565 d7 = +HEAPF32[i2 >> 2] - d6;
16566 d9 = +HEAPF32[i18 + 4 >> 2];
16567 d4 = +HEAPF32[i2 + 4 >> 2] - d9;
16568 d11 = +HEAPF32[i18 + 12 >> 2];
16569 d5 = +HEAPF32[i18 + 8 >> 2];
16570 d8 = d7 * d11 + d4 * d5;
16571 d7 = d11 * d4 - d7 * d5;
16572 d6 = +HEAPF32[i2 + 8 >> 2] - d6;
16573 d9 = +HEAPF32[i2 + 12 >> 2] - d9;
16574 d4 = d11 * d6 + d5 * d9 - d8;
16575 d6 = d11 * d9 - d5 * d6 - d7;
16576 i18 = i17 + 12 | 0;
16577 d5 = +HEAPF32[i18 >> 2];
16578 d9 = +HEAPF32[i18 + 4 >> 2];
16579 i18 = i17 + 20 | 0;
16580 d11 = +HEAPF32[i18 >> 2];
16581 d11 = d11 - d5;
16582 d12 = +HEAPF32[i18 + 4 >> 2] - d9;
16583 d15 = -d11;
16584 d10 = d11 * d11 + d12 * d12;
16585 d13 = +Math_sqrt(+d10);
16586 if (d13 < 1.1920928955078125e-7) {
16587 d13 = d12;
16588 } else {
16589 d16 = 1.0 / d13;
16590 d13 = d12 * d16;
16591 d15 = d16 * d15;
16592 }
16593 d14 = (d9 - d7) * d15 + (d5 - d8) * d13;
16594 d16 = d6 * d15 + d4 * d13;
16595 if (d16 == 0.0) {
16596 i18 = 0;
16597 STACKTOP = i3;
16598 return i18 | 0;
16599 }
16600 d16 = d14 / d16;
16601 if (d16 < 0.0) {
16602 i18 = 0;
16603 STACKTOP = i3;
16604 return i18 | 0;
16605 }
16606 if (+HEAPF32[i2 + 16 >> 2] < d16 | d10 == 0.0) {
16607 i18 = 0;
16608 STACKTOP = i3;
16609 return i18 | 0;
16610 }
16611 d12 = (d11 * (d8 + d4 * d16 - d5) + d12 * (d7 + d6 * d16 - d9)) / d10;
16612 if (d12 < 0.0 | d12 > 1.0) {
16613 i18 = 0;
16614 STACKTOP = i3;
16615 return i18 | 0;
16616 }
16617 HEAPF32[i1 + 8 >> 2] = d16;
16618 if (d14 > 0.0) {
16619 d14 = +-d13;
16620 d16 = +-d15;
16621 i18 = i1;
16622 HEAPF32[i18 >> 2] = d14;
16623 HEAPF32[i18 + 4 >> 2] = d16;
16624 i18 = 1;
16625 STACKTOP = i3;
16626 return i18 | 0;
16627 } else {
16628 d14 = +d13;
16629 d16 = +d15;
16630 i18 = i1;
16631 HEAPF32[i18 >> 2] = d14;
16632 HEAPF32[i18 + 4 >> 2] = d16;
16633 i18 = 1;
16634 STACKTOP = i3;
16635 return i18 | 0;
16636 }
16637 return 0;
16638 }
16639 function ___dynamic_cast(i7, i6, i11, i5) {
16640 i7 = i7 | 0;
16641 i6 = i6 | 0;
16642 i11 = i11 | 0;
16643 i5 = i5 | 0;
16644 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0;
16645 i1 = STACKTOP;
16646 STACKTOP = STACKTOP + 64 | 0;
16647 i2 = i1;
16648 i3 = HEAP32[i7 >> 2] | 0;
16649 i4 = i7 + (HEAP32[i3 + -8 >> 2] | 0) | 0;
16650 i3 = HEAP32[i3 + -4 >> 2] | 0;
16651 HEAP32[i2 >> 2] = i11;
16652 HEAP32[i2 + 4 >> 2] = i7;
16653 HEAP32[i2 + 8 >> 2] = i6;
16654 HEAP32[i2 + 12 >> 2] = i5;
16655 i9 = i2 + 16 | 0;
16656 i10 = i2 + 20 | 0;
16657 i6 = i2 + 24 | 0;
16658 i8 = i2 + 28 | 0;
16659 i5 = i2 + 32 | 0;
16660 i7 = i2 + 40 | 0;
16661 i12 = (i3 | 0) == (i11 | 0);
16662 i13 = i9 + 0 | 0;
16663 i11 = i13 + 36 | 0;
16664 do {
16665 HEAP32[i13 >> 2] = 0;
16666 i13 = i13 + 4 | 0;
16667 } while ((i13 | 0) < (i11 | 0));
16668 HEAP16[i9 + 36 >> 1] = 0;
16669 HEAP8[i9 + 38 | 0] = 0;
16670 if (i12) {
16671 HEAP32[i2 + 48 >> 2] = 1;
16672 FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i3 >> 2] | 0) + 20 >> 2] & 3](i3, i2, i4 , i4, 1, 0);
16673 i13 = (HEAP32[i6 >> 2] | 0) == 1 ? i4 : 0;
16674 STACKTOP = i1;
16675 return i13 | 0;
16676 }
16677 FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[i3 >> 2] | 0) + 24 >> 2] & 3](i3, i2, i4, 1, 0);
16678 i2 = HEAP32[i2 + 36 >> 2] | 0;
16679 if ((i2 | 0) == 0) {
16680 if ((HEAP32[i7 >> 2] | 0) != 1) {
16681 i13 = 0;
16682 STACKTOP = i1;
16683 return i13 | 0;
16684 }
16685 if ((HEAP32[i8 >> 2] | 0) != 1) {
16686 i13 = 0;
16687 STACKTOP = i1;
16688 return i13 | 0;
16689 }
16690 i13 = (HEAP32[i5 >> 2] | 0) == 1 ? HEAP32[i10 >> 2] | 0 : 0;
16691 STACKTOP = i1;
16692 return i13 | 0;
16693 } else if ((i2 | 0) == 1) {
16694 if ((HEAP32[i6 >> 2] | 0) != 1) {
16695 if ((HEAP32[i7 >> 2] | 0) != 0) {
16696 i13 = 0;
16697 STACKTOP = i1;
16698 return i13 | 0;
16699 }
16700 if ((HEAP32[i8 >> 2] | 0) != 1) {
16701 i13 = 0;
16702 STACKTOP = i1;
16703 return i13 | 0;
16704 }
16705 if ((HEAP32[i5 >> 2] | 0) != 1) {
16706 i13 = 0;
16707 STACKTOP = i1;
16708 return i13 | 0;
16709 }
16710 }
16711 i13 = HEAP32[i9 >> 2] | 0;
16712 STACKTOP = i1;
16713 return i13 | 0;
16714 } else {
16715 i13 = 0;
16716 STACKTOP = i1;
16717 return i13 | 0;
16718 }
16719 return 0;
16720 }
16721 function __ZNK14b2PolygonShape11ComputeMassEP10b2MassDataf(i4, i1, d2) {
16722 i4 = i4 | 0;
16723 i1 = i1 | 0;
16724 d2 = +d2;
16725 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, d 20 = 0.0, d21 = 0.0, d22 = 0.0, d23 = 0.0;
16726 i3 = STACKTOP;
16727 i5 = HEAP32[i4 + 148 >> 2] | 0;
16728 if ((i5 | 0) > 2) {
16729 d7 = 0.0;
16730 d6 = 0.0;
16731 i12 = 0;
16732 } else {
16733 ___assert_fail(432, 328, 306, 456);
16734 }
16735 do {
16736 d6 = d6 + +HEAPF32[i4 + (i12 << 3) + 20 >> 2];
16737 d7 = d7 + +HEAPF32[i4 + (i12 << 3) + 24 >> 2];
16738 i12 = i12 + 1 | 0;
16739 } while ((i12 | 0) < (i5 | 0));
16740 d11 = 1.0 / +(i5 | 0);
16741 d6 = d6 * d11;
16742 d11 = d7 * d11;
16743 i16 = i4 + 20 | 0;
16744 i19 = i4 + 24 | 0;
16745 d9 = 0.0;
16746 d10 = 0.0;
16747 d7 = 0.0;
16748 d8 = 0.0;
16749 i17 = 0;
16750 do {
16751 d18 = +HEAPF32[i4 + (i17 << 3) + 20 >> 2] - d6;
16752 d13 = +HEAPF32[i4 + (i17 << 3) + 24 >> 2] - d11;
16753 i17 = i17 + 1 | 0;
16754 i12 = (i17 | 0) < (i5 | 0);
16755 if (i12) {
16756 i14 = i4 + (i17 << 3) + 20 | 0;
16757 i15 = i4 + (i17 << 3) + 24 | 0;
16758 } else {
16759 i14 = i16;
16760 i15 = i19;
16761 }
16762 d21 = +HEAPF32[i14 >> 2] - d6;
16763 d20 = +HEAPF32[i15 >> 2] - d11;
16764 d22 = d18 * d20 - d13 * d21;
16765 d23 = d22 * .5;
16766 d8 = d8 + d23;
16767 d23 = d23 * .3333333432674408;
16768 d9 = d9 + (d18 + d21) * d23;
16769 d10 = d10 + (d13 + d20) * d23;
16770 d7 = d7 + d22 * .0833333358168602 * (d21 * d21 + (d18 * d18 + d18 * d21) + (d2 0 * d20 + (d13 * d13 + d13 * d20)));
16771 } while (i12);
16772 d13 = d8 * d2;
16773 HEAPF32[i1 >> 2] = d13;
16774 if (d8 > 1.1920928955078125e-7) {
16775 d23 = 1.0 / d8;
16776 d22 = d9 * d23;
16777 d23 = d10 * d23;
16778 d20 = d6 + d22;
16779 d21 = d11 + d23;
16780 d11 = +d20;
16781 d18 = +d21;
16782 i19 = i1 + 4 | 0;
16783 HEAPF32[i19 >> 2] = d11;
16784 HEAPF32[i19 + 4 >> 2] = d18;
16785 HEAPF32[i1 + 12 >> 2] = d7 * d2 + d13 * (d20 * d20 + d21 * d21 - (d22 * d22 + d23 * d23));
16786 STACKTOP = i3;
16787 return;
16788 } else {
16789 ___assert_fail(472, 328, 352, 456);
16790 }
16791 }
16792 function __ZN16b2ContactManager7DestroyEP9b2Contact(i1, i2) {
16793 i1 = i1 | 0;
16794 i2 = i2 | 0;
16795 var i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0;
16796 i3 = STACKTOP;
16797 i5 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 8 >> 2] | 0;
16798 i4 = HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 8 >> 2] | 0;
16799 i6 = HEAP32[i1 + 72 >> 2] | 0;
16800 if ((i6 | 0) != 0 ? (HEAP32[i2 + 4 >> 2] & 2 | 0) != 0 : 0) {
16801 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i6 >> 2] | 0) + 12 >> 2] & 15](i6, i2);
16802 }
16803 i7 = i2 + 8 | 0;
16804 i8 = HEAP32[i7 >> 2] | 0;
16805 i6 = i2 + 12 | 0;
16806 if ((i8 | 0) != 0) {
16807 HEAP32[i8 + 12 >> 2] = HEAP32[i6 >> 2];
16808 }
16809 i8 = HEAP32[i6 >> 2] | 0;
16810 if ((i8 | 0) != 0) {
16811 HEAP32[i8 + 8 >> 2] = HEAP32[i7 >> 2];
16812 }
16813 i7 = i1 + 60 | 0;
16814 if ((HEAP32[i7 >> 2] | 0) == (i2 | 0)) {
16815 HEAP32[i7 >> 2] = HEAP32[i6 >> 2];
16816 }
16817 i7 = i2 + 24 | 0;
16818 i8 = HEAP32[i7 >> 2] | 0;
16819 i6 = i2 + 28 | 0;
16820 if ((i8 | 0) != 0) {
16821 HEAP32[i8 + 12 >> 2] = HEAP32[i6 >> 2];
16822 }
16823 i8 = HEAP32[i6 >> 2] | 0;
16824 if ((i8 | 0) != 0) {
16825 HEAP32[i8 + 8 >> 2] = HEAP32[i7 >> 2];
16826 }
16827 i5 = i5 + 112 | 0;
16828 if ((i2 + 16 | 0) == (HEAP32[i5 >> 2] | 0)) {
16829 HEAP32[i5 >> 2] = HEAP32[i6 >> 2];
16830 }
16831 i6 = i2 + 40 | 0;
16832 i7 = HEAP32[i6 >> 2] | 0;
16833 i5 = i2 + 44 | 0;
16834 if ((i7 | 0) != 0) {
16835 HEAP32[i7 + 12 >> 2] = HEAP32[i5 >> 2];
16836 }
16837 i7 = HEAP32[i5 >> 2] | 0;
16838 if ((i7 | 0) != 0) {
16839 HEAP32[i7 + 8 >> 2] = HEAP32[i6 >> 2];
16840 }
16841 i4 = i4 + 112 | 0;
16842 if ((i2 + 32 | 0) != (HEAP32[i4 >> 2] | 0)) {
16843 i8 = i1 + 76 | 0;
16844 i8 = HEAP32[i8 >> 2] | 0;
16845 __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i2, i8);
16846 i8 = i1 + 64 | 0;
16847 i7 = HEAP32[i8 >> 2] | 0;
16848 i7 = i7 + -1 | 0;
16849 HEAP32[i8 >> 2] = i7;
16850 STACKTOP = i3;
16851 return;
16852 }
16853 HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
16854 i8 = i1 + 76 | 0;
16855 i8 = HEAP32[i8 >> 2] | 0;
16856 __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i2, i8);
16857 i8 = i1 + 64 | 0;
16858 i7 = HEAP32[i8 >> 2] | 0;
16859 i7 = i7 + -1 | 0;
16860 HEAP32[i8 >> 2] = i7;
16861 STACKTOP = i3;
16862 return;
16863 }
16864 function __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynam ic_cast_infoEPKvib(i6, i3, i4, i8, i7) {
16865 i6 = i6 | 0;
16866 i3 = i3 | 0;
16867 i4 = i4 | 0;
16868 i8 = i8 | 0;
16869 i7 = i7 | 0;
16870 var i1 = 0, i2 = 0, i5 = 0, i9 = 0, i10 = 0;
16871 i1 = STACKTOP;
16872 if ((i6 | 0) == (HEAP32[i3 + 8 >> 2] | 0)) {
16873 if ((HEAP32[i3 + 4 >> 2] | 0) != (i4 | 0)) {
16874 STACKTOP = i1;
16875 return;
16876 }
16877 i2 = i3 + 28 | 0;
16878 if ((HEAP32[i2 >> 2] | 0) == 1) {
16879 STACKTOP = i1;
16880 return;
16881 }
16882 HEAP32[i2 >> 2] = i8;
16883 STACKTOP = i1;
16884 return;
16885 }
16886 if ((i6 | 0) != (HEAP32[i3 >> 2] | 0)) {
16887 i9 = HEAP32[i6 + 8 >> 2] | 0;
16888 FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[i9 >> 2] | 0) + 24 >> 2] & 3](i9, i3, i4, i8, i7);
16889 STACKTOP = i1;
16890 return;
16891 }
16892 if ((HEAP32[i3 + 16 >> 2] | 0) != (i4 | 0) ? (i5 = i3 + 20 | 0, (HEAP32[i5 >> 2 ] | 0) != (i4 | 0)) : 0) {
16893 HEAP32[i3 + 32 >> 2] = i8;
16894 i8 = i3 + 44 | 0;
16895 if ((HEAP32[i8 >> 2] | 0) == 4) {
16896 STACKTOP = i1;
16897 return;
16898 }
16899 i9 = i3 + 52 | 0;
16900 HEAP8[i9] = 0;
16901 i10 = i3 + 53 | 0;
16902 HEAP8[i10] = 0;
16903 i6 = HEAP32[i6 + 8 >> 2] | 0;
16904 FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i6 >> 2] | 0) + 20 >> 2] & 3](i6, i3, i4 , i4, 1, i7);
16905 if ((HEAP8[i10] | 0) != 0) {
16906 if ((HEAP8[i9] | 0) == 0) {
16907 i6 = 1;
16908 i2 = 13;
16909 }
16910 } else {
16911 i6 = 0;
16912 i2 = 13;
16913 }
16914 do {
16915 if ((i2 | 0) == 13) {
16916 HEAP32[i5 >> 2] = i4;
16917 i10 = i3 + 40 | 0;
16918 HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + 1;
16919 if ((HEAP32[i3 + 36 >> 2] | 0) == 1 ? (HEAP32[i3 + 24 >> 2] | 0) == 2 : 0) {
16920 HEAP8[i3 + 54 | 0] = 1;
16921 if (i6) {
16922 break;
16923 }
16924 } else {
16925 i2 = 16;
16926 }
16927 if ((i2 | 0) == 16 ? i6 : 0) {
16928 break;
16929 }
16930 HEAP32[i8 >> 2] = 4;
16931 STACKTOP = i1;
16932 return;
16933 }
16934 } while (0);
16935 HEAP32[i8 >> 2] = 3;
16936 STACKTOP = i1;
16937 return;
16938 }
16939 if ((i8 | 0) != 1) {
16940 STACKTOP = i1;
16941 return;
16942 }
16943 HEAP32[i3 + 32 >> 2] = 1;
16944 STACKTOP = i1;
16945 return;
16946 }
16947 function __ZN16b2BlockAllocator8AllocateEi(i4, i2) {
16948 i4 = i4 | 0;
16949 i2 = i2 | 0;
16950 var i1 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0;
16951 i1 = STACKTOP;
16952 if ((i2 | 0) == 0) {
16953 i9 = 0;
16954 STACKTOP = i1;
16955 return i9 | 0;
16956 }
16957 if ((i2 | 0) <= 0) {
16958 ___assert_fail(1376, 1312, 104, 1392);
16959 }
16960 if ((i2 | 0) > 640) {
16961 i9 = __Z7b2Alloci(i2) | 0;
16962 STACKTOP = i1;
16963 return i9 | 0;
16964 }
16965 i9 = HEAP8[632 + i2 | 0] | 0;
16966 i5 = i9 & 255;
16967 if (!((i9 & 255) < 14)) {
16968 ___assert_fail(1408, 1312, 112, 1392);
16969 }
16970 i2 = i4 + (i5 << 2) + 12 | 0;
16971 i3 = HEAP32[i2 >> 2] | 0;
16972 if ((i3 | 0) != 0) {
16973 HEAP32[i2 >> 2] = HEAP32[i3 >> 2];
16974 i9 = i3;
16975 STACKTOP = i1;
16976 return i9 | 0;
16977 }
16978 i3 = i4 + 4 | 0;
16979 i6 = HEAP32[i3 >> 2] | 0;
16980 i7 = i4 + 8 | 0;
16981 if ((i6 | 0) == (HEAP32[i7 >> 2] | 0)) {
16982 i9 = HEAP32[i4 >> 2] | 0;
16983 i6 = i6 + 128 | 0;
16984 HEAP32[i7 >> 2] = i6;
16985 i6 = __Z7b2Alloci(i6 << 3) | 0;
16986 HEAP32[i4 >> 2] = i6;
16987 _memcpy(i6 | 0, i9 | 0, HEAP32[i3 >> 2] << 3 | 0) | 0;
16988 _memset((HEAP32[i4 >> 2] | 0) + (HEAP32[i3 >> 2] << 3) | 0, 0, 1024) | 0;
16989 __Z6b2FreePv(i9);
16990 i6 = HEAP32[i3 >> 2] | 0;
16991 }
16992 i9 = HEAP32[i4 >> 2] | 0;
16993 i7 = __Z7b2Alloci(16384) | 0;
16994 i4 = i9 + (i6 << 3) + 4 | 0;
16995 HEAP32[i4 >> 2] = i7;
16996 i5 = HEAP32[576 + (i5 << 2) >> 2] | 0;
16997 HEAP32[i9 + (i6 << 3) >> 2] = i5;
16998 i6 = 16384 / (i5 | 0) | 0;
16999 if ((Math_imul(i6, i5) | 0) >= 16385) {
17000 ___assert_fail(1448, 1312, 140, 1392);
17001 }
17002 i6 = i6 + -1 | 0;
17003 if ((i6 | 0) > 0) {
17004 i9 = 0;
17005 while (1) {
17006 i8 = i9 + 1 | 0;
17007 HEAP32[i7 + (Math_imul(i9, i5) | 0) >> 2] = i7 + (Math_imul(i8, i5) | 0);
17008 i7 = HEAP32[i4 >> 2] | 0;
17009 if ((i8 | 0) == (i6 | 0)) {
17010 break;
17011 } else {
17012 i9 = i8;
17013 }
17014 }
17015 }
17016 HEAP32[i7 + (Math_imul(i6, i5) | 0) >> 2] = 0;
17017 HEAP32[i2 >> 2] = HEAP32[HEAP32[i4 >> 2] >> 2];
17018 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1;
17019 i9 = HEAP32[i4 >> 2] | 0;
17020 STACKTOP = i1;
17021 return i9 | 0;
17022 }
17023 function __ZN9b2Contact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i4, i5, i1, i 3, i6) {
17024 i4 = i4 | 0;
17025 i5 = i5 | 0;
17026 i1 = i1 | 0;
17027 i3 = i3 | 0;
17028 i6 = i6 | 0;
17029 var i2 = 0, i7 = 0, i8 = 0, i9 = 0;
17030 i2 = STACKTOP;
17031 if ((HEAP8[4200] | 0) == 0) {
17032 HEAP32[1002] = 3;
17033 HEAP32[4012 >> 2] = 3;
17034 HEAP8[4016 | 0] = 1;
17035 HEAP32[4104 >> 2] = 4;
17036 HEAP32[4108 >> 2] = 4;
17037 HEAP8[4112 | 0] = 1;
17038 HEAP32[4032 >> 2] = 4;
17039 HEAP32[4036 >> 2] = 4;
17040 HEAP8[4040 | 0] = 0;
17041 HEAP32[4128 >> 2] = 5;
17042 HEAP32[4132 >> 2] = 5;
17043 HEAP8[4136 | 0] = 1;
17044 HEAP32[4056 >> 2] = 6;
17045 HEAP32[4060 >> 2] = 6;
17046 HEAP8[4064 | 0] = 1;
17047 HEAP32[4020 >> 2] = 6;
17048 HEAP32[4024 >> 2] = 6;
17049 HEAP8[4028 | 0] = 0;
17050 HEAP32[4080 >> 2] = 7;
17051 HEAP32[4084 >> 2] = 7;
17052 HEAP8[4088 | 0] = 1;
17053 HEAP32[4116 >> 2] = 7;
17054 HEAP32[4120 >> 2] = 7;
17055 HEAP8[4124 | 0] = 0;
17056 HEAP32[4152 >> 2] = 8;
17057 HEAP32[4156 >> 2] = 8;
17058 HEAP8[4160 | 0] = 1;
17059 HEAP32[4044 >> 2] = 8;
17060 HEAP32[4048 >> 2] = 8;
17061 HEAP8[4052 | 0] = 0;
17062 HEAP32[4176 >> 2] = 9;
17063 HEAP32[4180 >> 2] = 9;
17064 HEAP8[4184 | 0] = 1;
17065 HEAP32[4140 >> 2] = 9;
17066 HEAP32[4144 >> 2] = 9;
17067 HEAP8[4148 | 0] = 0;
17068 HEAP8[4200] = 1;
17069 }
17070 i7 = HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 4 >> 2] | 0;
17071 i8 = HEAP32[(HEAP32[i1 + 12 >> 2] | 0) + 4 >> 2] | 0;
17072 if (!(i7 >>> 0 < 4)) {
17073 ___assert_fail(4208, 4256, 80, 4344);
17074 }
17075 if (!(i8 >>> 0 < 4)) {
17076 ___assert_fail(4296, 4256, 81, 4344);
17077 }
17078 i9 = HEAP32[4008 + (i7 * 48 | 0) + (i8 * 12 | 0) >> 2] | 0;
17079 if ((i9 | 0) == 0) {
17080 i9 = 0;
17081 STACKTOP = i2;
17082 return i9 | 0;
17083 }
17084 if ((HEAP8[4008 + (i7 * 48 | 0) + (i8 * 12 | 0) + 8 | 0] | 0) == 0) {
17085 i9 = FUNCTION_TABLE_iiiiii[i9 & 15](i1, i3, i4, i5, i6) | 0;
17086 STACKTOP = i2;
17087 return i9 | 0;
17088 } else {
17089 i9 = FUNCTION_TABLE_iiiiii[i9 & 15](i4, i5, i1, i3, i6) | 0;
17090 STACKTOP = i2;
17091 return i9 | 0;
17092 }
17093 return 0;
17094 }
17095 function __ZN13b2DynamicTree9MoveProxyEiRK6b2AABBRK6b2Vec2(i1, i2, i13, i9) {
17096 i1 = i1 | 0;
17097 i2 = i2 | 0;
17098 i13 = i13 | 0;
17099 i9 = i9 | 0;
17100 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;
17101 i4 = STACKTOP;
17102 if (!((i2 | 0) > -1)) {
17103 ___assert_fail(3072, 2944, 135, 3152);
17104 }
17105 if ((HEAP32[i1 + 12 >> 2] | 0) <= (i2 | 0)) {
17106 ___assert_fail(3072, 2944, 135, 3152);
17107 }
17108 i3 = i1 + 4 | 0;
17109 i12 = HEAP32[i3 >> 2] | 0;
17110 if (!((HEAP32[i12 + (i2 * 36 | 0) + 24 >> 2] | 0) == -1)) {
17111 ___assert_fail(3120, 2944, 137, 3152);
17112 }
17113 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] <= +HE APF32[i12 + (i2 * 36 | 0) + 12 >> 2] : 0) {
17114 i13 = 0;
17115 STACKTOP = i4;
17116 return i13 | 0;
17117 }
17118 __ZN13b2DynamicTree10RemoveLeafEi(i1, i2);
17119 i12 = i13;
17120 d6 = +HEAPF32[i12 >> 2];
17121 d8 = +HEAPF32[i12 + 4 >> 2];
17122 i13 = i13 + 8 | 0;
17123 d10 = +HEAPF32[i13 >> 2];
17124 d6 = d6 + -.10000000149011612;
17125 d8 = d8 + -.10000000149011612;
17126 d10 = d10 + .10000000149011612;
17127 d5 = +HEAPF32[i13 + 4 >> 2] + .10000000149011612;
17128 d11 = +HEAPF32[i9 >> 2] * 2.0;
17129 d7 = +HEAPF32[i9 + 4 >> 2] * 2.0;
17130 if (d11 < 0.0) {
17131 d6 = d6 + d11;
17132 } else {
17133 d10 = d11 + d10;
17134 }
17135 if (d7 < 0.0) {
17136 d8 = d8 + d7;
17137 } else {
17138 d5 = d7 + d5;
17139 }
17140 i13 = HEAP32[i3 >> 2] | 0;
17141 d7 = +d6;
17142 d11 = +d8;
17143 i12 = i13 + (i2 * 36 | 0) | 0;
17144 HEAPF32[i12 >> 2] = d7;
17145 HEAPF32[i12 + 4 >> 2] = d11;
17146 d10 = +d10;
17147 d11 = +d5;
17148 i13 = i13 + (i2 * 36 | 0) + 8 | 0;
17149 HEAPF32[i13 >> 2] = d10;
17150 HEAPF32[i13 + 4 >> 2] = d11;
17151 __ZN13b2DynamicTree10InsertLeafEi(i1, i2);
17152 i13 = 1;
17153 STACKTOP = i4;
17154 return i13 | 0;
17155 }
17156 function __ZNK9b2Simplex16GetWitnessPointsEP6b2Vec2S1_(i1, i4, i5) {
17157 i1 = i1 | 0;
17158 i4 = i4 | 0;
17159 i5 = i5 | 0;
17160 var i2 = 0, i3 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i9 = 0, i10 = 0, d11 = 0.0;
17161 i2 = STACKTOP;
17162 i3 = HEAP32[i1 + 108 >> 2] | 0;
17163 if ((i3 | 0) == 2) {
17164 i9 = i1 + 24 | 0;
17165 d7 = +HEAPF32[i9 >> 2];
17166 i3 = i1 + 60 | 0;
17167 d8 = +HEAPF32[i3 >> 2];
17168 d6 = +(d7 * +HEAPF32[i1 >> 2] + d8 * +HEAPF32[i1 + 36 >> 2]);
17169 d8 = +(d7 * +HEAPF32[i1 + 4 >> 2] + d8 * +HEAPF32[i1 + 40 >> 2]);
17170 HEAPF32[i4 >> 2] = d6;
17171 HEAPF32[i4 + 4 >> 2] = d8;
17172 d8 = +HEAPF32[i9 >> 2];
17173 d6 = +HEAPF32[i3 >> 2];
17174 d7 = +(d8 * +HEAPF32[i1 + 8 >> 2] + d6 * +HEAPF32[i1 + 44 >> 2]);
17175 d6 = +(d8 * +HEAPF32[i1 + 12 >> 2] + d6 * +HEAPF32[i1 + 48 >> 2]);
17176 HEAPF32[i5 >> 2] = d7;
17177 HEAPF32[i5 + 4 >> 2] = d6;
17178 STACKTOP = i2;
17179 return;
17180 } else if ((i3 | 0) == 1) {
17181 i10 = i1;
17182 i9 = HEAP32[i10 + 4 >> 2] | 0;
17183 i3 = i4;
17184 HEAP32[i3 >> 2] = HEAP32[i10 >> 2];
17185 HEAP32[i3 + 4 >> 2] = i9;
17186 i3 = i1 + 8 | 0;
17187 i4 = HEAP32[i3 + 4 >> 2] | 0;
17188 i9 = i5;
17189 HEAP32[i9 >> 2] = HEAP32[i3 >> 2];
17190 HEAP32[i9 + 4 >> 2] = i4;
17191 STACKTOP = i2;
17192 return;
17193 } else if ((i3 | 0) == 0) {
17194 ___assert_fail(2712, 2672, 217, 2752);
17195 } else if ((i3 | 0) == 3) {
17196 d11 = +HEAPF32[i1 + 24 >> 2];
17197 d6 = +HEAPF32[i1 + 60 >> 2];
17198 d8 = +HEAPF32[i1 + 96 >> 2];
17199 d7 = +(d11 * +HEAPF32[i1 >> 2] + d6 * +HEAPF32[i1 + 36 >> 2] + d8 * +HEAPF32[i 1 + 72 >> 2]);
17200 d8 = +(d11 * +HEAPF32[i1 + 4 >> 2] + d6 * +HEAPF32[i1 + 40 >> 2] + d8 * +HEAPF 32[i1 + 76 >> 2]);
17201 i10 = i4;
17202 HEAPF32[i10 >> 2] = d7;
17203 HEAPF32[i10 + 4 >> 2] = d8;
17204 i10 = i5;
17205 HEAPF32[i10 >> 2] = d7;
17206 HEAPF32[i10 + 4 >> 2] = d8;
17207 STACKTOP = i2;
17208 return;
17209 } else {
17210 ___assert_fail(2712, 2672, 236, 2752);
17211 }
17212 }
17213 function __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i4, i3, i1) {
17214 i4 = i4 | 0;
17215 i3 = i3 | 0;
17216 i1 = i1 | 0;
17217 var i2 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0;
17218 i2 = STACKTOP;
17219 if (!((i1 | 0) > -1)) {
17220 ___assert_fail(6832, 6792, 89, 6872);
17221 }
17222 i5 = i4 + 16 | 0;
17223 if (((HEAP32[i5 >> 2] | 0) + -1 | 0) <= (i1 | 0)) {
17224 ___assert_fail(6832, 6792, 89, 6872);
17225 }
17226 HEAP32[i3 + 4 >> 2] = 1;
17227 HEAPF32[i3 + 8 >> 2] = +HEAPF32[i4 + 8 >> 2];
17228 i6 = i4 + 12 | 0;
17229 i7 = (HEAP32[i6 >> 2] | 0) + (i1 << 3) | 0;
17230 i8 = HEAP32[i7 + 4 >> 2] | 0;
17231 i9 = i3 + 12 | 0;
17232 HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
17233 HEAP32[i9 + 4 >> 2] = i8;
17234 i9 = (HEAP32[i6 >> 2] | 0) + (i1 + 1 << 3) | 0;
17235 i8 = HEAP32[i9 + 4 >> 2] | 0;
17236 i7 = i3 + 20 | 0;
17237 HEAP32[i7 >> 2] = HEAP32[i9 >> 2];
17238 HEAP32[i7 + 4 >> 2] = i8;
17239 i7 = i3 + 28 | 0;
17240 if ((i1 | 0) > 0) {
17241 i10 = (HEAP32[i6 >> 2] | 0) + (i1 + -1 << 3) | 0;
17242 i8 = HEAP32[i10 + 4 >> 2] | 0;
17243 i9 = i7;
17244 HEAP32[i9 >> 2] = HEAP32[i10 >> 2];
17245 HEAP32[i9 + 4 >> 2] = i8;
17246 HEAP8[i3 + 44 | 0] = 1;
17247 } else {
17248 i8 = i4 + 20 | 0;
17249 i9 = HEAP32[i8 + 4 >> 2] | 0;
17250 i10 = i7;
17251 HEAP32[i10 >> 2] = HEAP32[i8 >> 2];
17252 HEAP32[i10 + 4 >> 2] = i9;
17253 HEAP8[i3 + 44 | 0] = HEAP8[i4 + 36 | 0] | 0;
17254 }
17255 i7 = i3 + 36 | 0;
17256 if (((HEAP32[i5 >> 2] | 0) + -2 | 0) > (i1 | 0)) {
17257 i8 = (HEAP32[i6 >> 2] | 0) + (i1 + 2 << 3) | 0;
17258 i9 = HEAP32[i8 + 4 >> 2] | 0;
17259 i10 = i7;
17260 HEAP32[i10 >> 2] = HEAP32[i8 >> 2];
17261 HEAP32[i10 + 4 >> 2] = i9;
17262 HEAP8[i3 + 45 | 0] = 1;
17263 STACKTOP = i2;
17264 return;
17265 } else {
17266 i8 = i4 + 28 | 0;
17267 i9 = HEAP32[i8 + 4 >> 2] | 0;
17268 i10 = i7;
17269 HEAP32[i10 >> 2] = HEAP32[i8 >> 2];
17270 HEAP32[i10 + 4 >> 2] = i9;
17271 HEAP8[i3 + 45 | 0] = HEAP8[i4 + 37 | 0] | 0;
17272 STACKTOP = i2;
17273 return;
17274 }
17275 }
17276 function __ZN15b2DistanceProxy3SetEPK7b2Shapei(i3, i1, i5) {
17277 i3 = i3 | 0;
17278 i1 = i1 | 0;
17279 i5 = i5 | 0;
17280 var i2 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0;
17281 i2 = STACKTOP;
17282 i4 = HEAP32[i1 + 4 >> 2] | 0;
17283 if ((i4 | 0) == 1) {
17284 HEAP32[i3 + 16 >> 2] = i1 + 12;
17285 HEAP32[i3 + 20 >> 2] = 2;
17286 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
17287 STACKTOP = i2;
17288 return;
17289 } else if ((i4 | 0) == 3) {
17290 if (!((i5 | 0) > -1)) {
17291 ___assert_fail(2632, 2672, 53, 2704);
17292 }
17293 i4 = i1 + 16 | 0;
17294 if ((HEAP32[i4 >> 2] | 0) <= (i5 | 0)) {
17295 ___assert_fail(2632, 2672, 53, 2704);
17296 }
17297 i7 = i1 + 12 | 0;
17298 i9 = (HEAP32[i7 >> 2] | 0) + (i5 << 3) | 0;
17299 i8 = HEAP32[i9 + 4 >> 2] | 0;
17300 i6 = i3;
17301 HEAP32[i6 >> 2] = HEAP32[i9 >> 2];
17302 HEAP32[i6 + 4 >> 2] = i8;
17303 i6 = i5 + 1 | 0;
17304 i5 = i3 + 8 | 0;
17305 i7 = HEAP32[i7 >> 2] | 0;
17306 if ((i6 | 0) < (HEAP32[i4 >> 2] | 0)) {
17307 i7 = i7 + (i6 << 3) | 0;
17308 i8 = HEAP32[i7 + 4 >> 2] | 0;
17309 i9 = i5;
17310 HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
17311 HEAP32[i9 + 4 >> 2] = i8;
17312 } else {
17313 i8 = HEAP32[i7 + 4 >> 2] | 0;
17314 i9 = i5;
17315 HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
17316 HEAP32[i9 + 4 >> 2] = i8;
17317 }
17318 HEAP32[i3 + 16 >> 2] = i3;
17319 HEAP32[i3 + 20 >> 2] = 2;
17320 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
17321 STACKTOP = i2;
17322 return;
17323 } else if ((i4 | 0) == 2) {
17324 HEAP32[i3 + 16 >> 2] = i1 + 20;
17325 HEAP32[i3 + 20 >> 2] = HEAP32[i1 + 148 >> 2];
17326 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
17327 STACKTOP = i2;
17328 return;
17329 } else if ((i4 | 0) == 0) {
17330 HEAP32[i3 + 16 >> 2] = i1 + 12;
17331 HEAP32[i3 + 20 >> 2] = 1;
17332 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
17333 STACKTOP = i2;
17334 return;
17335 } else {
17336 ___assert_fail(2712, 2672, 81, 2704);
17337 }
17338 }
17339 function __ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i2, i7, i4, i5, i6) {
17340 i2 = i2 | 0;
17341 i7 = i7 | 0;
17342 i4 = i4 | 0;
17343 i5 = i5 | 0;
17344 i6 = i6 | 0;
17345 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;
17346 i12 = STACKTOP;
17347 i13 = HEAP32[i5 + 148 >> 2] | 0;
17348 if (!((i4 | 0) > -1)) {
17349 ___assert_fail(5640, 5688, 32, 5752);
17350 }
17351 if ((HEAP32[i2 + 148 >> 2] | 0) <= (i4 | 0)) {
17352 ___assert_fail(5640, 5688, 32, 5752);
17353 }
17354 d11 = +HEAPF32[i7 + 12 >> 2];
17355 d9 = +HEAPF32[i2 + (i4 << 3) + 84 >> 2];
17356 d1 = +HEAPF32[i7 + 8 >> 2];
17357 d3 = +HEAPF32[i2 + (i4 << 3) + 88 >> 2];
17358 d8 = d11 * d9 - d1 * d3;
17359 d3 = d9 * d1 + d11 * d3;
17360 d9 = +HEAPF32[i6 + 12 >> 2];
17361 d10 = +HEAPF32[i6 + 8 >> 2];
17362 d16 = d9 * d8 + d10 * d3;
17363 d14 = d9 * d3 - d8 * d10;
17364 if ((i13 | 0) > 0) {
17365 i19 = 0;
17366 i20 = 0;
17367 d15 = 3.4028234663852886e+38;
17368 while (1) {
17369 d17 = d16 * +HEAPF32[i5 + (i19 << 3) + 20 >> 2] + d14 * +HEAPF32[i5 + (i19 << 3) + 24 >> 2];
17370 i18 = d17 < d15;
17371 i20 = i18 ? i19 : i20;
17372 i19 = i19 + 1 | 0;
17373 if ((i19 | 0) == (i13 | 0)) {
17374 break;
17375 } else {
17376 d15 = i18 ? d17 : d15;
17377 }
17378 }
17379 } else {
17380 i20 = 0;
17381 }
17382 d16 = +HEAPF32[i2 + (i4 << 3) + 20 >> 2];
17383 d17 = +HEAPF32[i2 + (i4 << 3) + 24 >> 2];
17384 d14 = +HEAPF32[i5 + (i20 << 3) + 20 >> 2];
17385 d15 = +HEAPF32[i5 + (i20 << 3) + 24 >> 2];
17386 STACKTOP = i12;
17387 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])));
17388 }
17389 function __Z4iterv() {
17390 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, d7 = 0.0;
17391 i1 = STACKTOP;
17392 STACKTOP = STACKTOP + 48 | 0;
17393 i2 = i1;
17394 i3 = i1 + 32 | 0;
17395 i4 = HEAP32[16] | 0;
17396 if ((i4 | 0) >= (HEAP32[4] | 0)) {
17397 HEAP32[16] = i4 + 1;
17398 __Z7measurePl(i3, HEAP32[8] | 0);
17399 d7 = +HEAPF32[i3 + 4 >> 2];
17400 d6 = +(HEAP32[10] | 0) / 1.0e6 * 1.0e3;
17401 d5 = +(HEAP32[12] | 0) / 1.0e6 * 1.0e3;
17402 HEAPF64[tempDoublePtr >> 3] = +HEAPF32[i3 >> 2];
17403 HEAP32[i2 >> 2] = HEAP32[tempDoublePtr >> 2];
17404 HEAP32[i2 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
17405 i4 = i2 + 8 | 0;
17406 HEAPF64[tempDoublePtr >> 3] = d7;
17407 HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2];
17408 HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
17409 i4 = i2 + 16 | 0;
17410 HEAPF64[tempDoublePtr >> 3] = d6;
17411 HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2];
17412 HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
17413 i4 = i2 + 24 | 0;
17414 HEAPF64[tempDoublePtr >> 3] = d5;
17415 HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2];
17416 HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
17417 _printf(96, i2 | 0) | 0;
17418 _emscripten_run_script(152);
17419 if ((HEAP32[18] | 0) == 0) {
17420 STACKTOP = i1;
17421 return;
17422 }
17423 _emscripten_cancel_main_loop();
17424 STACKTOP = i1;
17425 return;
17426 }
17427 i3 = _clock() | 0;
17428 __ZN7b2World4StepEfii(HEAP32[6] | 0, .01666666753590107, 3, 3);
17429 i3 = (_clock() | 0) - i3 | 0;
17430 i2 = HEAP32[16] | 0;
17431 HEAP32[(HEAP32[8] | 0) + (i2 << 2) >> 2] = i3;
17432 if ((i3 | 0) < (HEAP32[10] | 0)) {
17433 HEAP32[10] = i3;
17434 }
17435 if ((i3 | 0) > (HEAP32[12] | 0)) {
17436 HEAP32[12] = i3;
17437 }
17438 HEAP32[16] = i2 + 1;
17439 STACKTOP = i1;
17440 return;
17441 }
17442 function __ZN13b2DynamicTree12AllocateNodeEv(i5) {
17443 i5 = i5 | 0;
17444 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0;
17445 i1 = STACKTOP;
17446 i2 = i5 + 16 | 0;
17447 i3 = HEAP32[i2 >> 2] | 0;
17448 if ((i3 | 0) == -1) {
17449 i4 = i5 + 8 | 0;
17450 i6 = HEAP32[i4 >> 2] | 0;
17451 i3 = i5 + 12 | 0;
17452 if ((i6 | 0) != (HEAP32[i3 >> 2] | 0)) {
17453 ___assert_fail(2912, 2944, 61, 2984);
17454 }
17455 i5 = i5 + 4 | 0;
17456 i7 = HEAP32[i5 >> 2] | 0;
17457 HEAP32[i3 >> 2] = i6 << 1;
17458 i6 = __Z7b2Alloci(i6 * 72 | 0) | 0;
17459 HEAP32[i5 >> 2] = i6;
17460 _memcpy(i6 | 0, i7 | 0, (HEAP32[i4 >> 2] | 0) * 36 | 0) | 0;
17461 __Z6b2FreePv(i7);
17462 i6 = HEAP32[i4 >> 2] | 0;
17463 i7 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
17464 i5 = HEAP32[i5 >> 2] | 0;
17465 if ((i6 | 0) < (i7 | 0)) {
17466 i7 = i6;
17467 while (1) {
17468 i6 = i7 + 1 | 0;
17469 HEAP32[i5 + (i7 * 36 | 0) + 20 >> 2] = i6;
17470 HEAP32[i5 + (i7 * 36 | 0) + 32 >> 2] = -1;
17471 i7 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
17472 if ((i6 | 0) < (i7 | 0)) {
17473 i7 = i6;
17474 } else {
17475 break;
17476 }
17477 }
17478 }
17479 HEAP32[i5 + (i7 * 36 | 0) + 20 >> 2] = -1;
17480 HEAP32[i5 + (((HEAP32[i3 >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1;
17481 i3 = HEAP32[i4 >> 2] | 0;
17482 HEAP32[i2 >> 2] = i3;
17483 } else {
17484 i4 = i5 + 8 | 0;
17485 i5 = HEAP32[i5 + 4 >> 2] | 0;
17486 }
17487 i7 = i5 + (i3 * 36 | 0) + 20 | 0;
17488 HEAP32[i2 >> 2] = HEAP32[i7 >> 2];
17489 HEAP32[i7 >> 2] = -1;
17490 HEAP32[i5 + (i3 * 36 | 0) + 24 >> 2] = -1;
17491 HEAP32[i5 + (i3 * 36 | 0) + 28 >> 2] = -1;
17492 HEAP32[i5 + (i3 * 36 | 0) + 32 >> 2] = 0;
17493 HEAP32[i5 + (i3 * 36 | 0) + 16 >> 2] = 0;
17494 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
17495 STACKTOP = i1;
17496 return i3 | 0;
17497 }
17498 function __ZN9b2Fixture6CreateEP16b2BlockAllocatorP6b2BodyPK12b2FixtureDef(i1, i 5, i4, i3) {
17499 i1 = i1 | 0;
17500 i5 = i5 | 0;
17501 i4 = i4 | 0;
17502 i3 = i3 | 0;
17503 var i2 = 0, i6 = 0, i7 = 0, d8 = 0.0;
17504 i2 = STACKTOP;
17505 HEAP32[i1 + 40 >> 2] = HEAP32[i3 + 4 >> 2];
17506 HEAPF32[i1 + 16 >> 2] = +HEAPF32[i3 + 8 >> 2];
17507 HEAPF32[i1 + 20 >> 2] = +HEAPF32[i3 + 12 >> 2];
17508 HEAP32[i1 + 8 >> 2] = i4;
17509 HEAP32[i1 + 4 >> 2] = 0;
17510 i4 = i1 + 32 | 0;
17511 i6 = i3 + 22 | 0;
17512 HEAP16[i4 + 0 >> 1] = HEAP16[i6 + 0 >> 1] | 0;
17513 HEAP16[i4 + 2 >> 1] = HEAP16[i6 + 2 >> 1] | 0;
17514 HEAP16[i4 + 4 >> 1] = HEAP16[i6 + 4 >> 1] | 0;
17515 HEAP8[i1 + 38 | 0] = HEAP8[i3 + 20 | 0] | 0;
17516 i4 = HEAP32[i3 >> 2] | 0;
17517 i4 = FUNCTION_TABLE_iii[HEAP32[(HEAP32[i4 >> 2] | 0) + 8 >> 2] & 3](i4, i5) | 0 ;
17518 HEAP32[i1 + 12 >> 2] = i4;
17519 i4 = FUNCTION_TABLE_ii[HEAP32[(HEAP32[i4 >> 2] | 0) + 12 >> 2] & 3](i4) | 0;
17520 i6 = __ZN16b2BlockAllocator8AllocateEi(i5, i4 * 28 | 0) | 0;
17521 i5 = i1 + 24 | 0;
17522 HEAP32[i5 >> 2] = i6;
17523 if ((i4 | 0) > 0) {
17524 i7 = 0;
17525 } else {
17526 i7 = i1 + 28 | 0;
17527 HEAP32[i7 >> 2] = 0;
17528 i7 = i3 + 16 | 0;
17529 d8 = +HEAPF32[i7 >> 2];
17530 HEAPF32[i1 >> 2] = d8;
17531 STACKTOP = i2;
17532 return;
17533 }
17534 do {
17535 HEAP32[i6 + (i7 * 28 | 0) + 16 >> 2] = 0;
17536 i6 = HEAP32[i5 >> 2] | 0;
17537 HEAP32[i6 + (i7 * 28 | 0) + 24 >> 2] = -1;
17538 i7 = i7 + 1 | 0;
17539 } while ((i7 | 0) != (i4 | 0));
17540 i7 = i1 + 28 | 0;
17541 HEAP32[i7 >> 2] = 0;
17542 i7 = i3 + 16 | 0;
17543 d8 = +HEAPF32[i7 >> 2];
17544 HEAPF32[i1 >> 2] = d8;
17545 STACKTOP = i2;
17546 return;
17547 }
17548 function __Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i4, i1, i5, d9, i2) {
17549 i4 = i4 | 0;
17550 i1 = i1 | 0;
17551 i5 = i5 | 0;
17552 d9 = +d9;
17553 i2 = i2 | 0;
17554 var i3 = 0, i6 = 0, d7 = 0.0, i8 = 0, i10 = 0, d11 = 0.0, d12 = 0.0, i13 = 0;
17555 i3 = STACKTOP;
17556 d12 = +HEAPF32[i5 >> 2];
17557 d11 = +HEAPF32[i5 + 4 >> 2];
17558 i5 = i1 + 4 | 0;
17559 d7 = d12 * +HEAPF32[i1 >> 2] + d11 * +HEAPF32[i5 >> 2] - d9;
17560 i6 = i1 + 12 | 0;
17561 i8 = i1 + 16 | 0;
17562 d9 = d12 * +HEAPF32[i6 >> 2] + d11 * +HEAPF32[i8 >> 2] - d9;
17563 if (!(d7 <= 0.0)) {
17564 i10 = 0;
17565 } else {
17566 HEAP32[i4 + 0 >> 2] = HEAP32[i1 + 0 >> 2];
17567 HEAP32[i4 + 4 >> 2] = HEAP32[i1 + 4 >> 2];
17568 HEAP32[i4 + 8 >> 2] = HEAP32[i1 + 8 >> 2];
17569 i10 = 1;
17570 }
17571 if (d9 <= 0.0) {
17572 i13 = i10 + 1 | 0;
17573 i10 = i4 + (i10 * 12 | 0) | 0;
17574 HEAP32[i10 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
17575 HEAP32[i10 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
17576 HEAP32[i10 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
17577 i10 = i13;
17578 }
17579 if (!(d7 * d9 < 0.0)) {
17580 i13 = i10;
17581 STACKTOP = i3;
17582 return i13 | 0;
17583 }
17584 d9 = d7 / (d7 - d9);
17585 d11 = +HEAPF32[i1 >> 2];
17586 d12 = +HEAPF32[i5 >> 2];
17587 d11 = +(d11 + d9 * (+HEAPF32[i6 >> 2] - d11));
17588 d12 = +(d12 + d9 * (+HEAPF32[i8 >> 2] - d12));
17589 i13 = i4 + (i10 * 12 | 0) | 0;
17590 HEAPF32[i13 >> 2] = d11;
17591 HEAPF32[i13 + 4 >> 2] = d12;
17592 i13 = i4 + (i10 * 12 | 0) + 8 | 0;
17593 HEAP8[i13] = i2;
17594 HEAP8[i13 + 1 | 0] = HEAP8[i1 + 9 | 0] | 0;
17595 HEAP8[i13 + 2 | 0] = 0;
17596 HEAP8[i13 + 3 | 0] = 1;
17597 i13 = i10 + 1 | 0;
17598 STACKTOP = i3;
17599 return i13 | 0;
17600 }
17601 function __Z16b2CollideCirclesP10b2ManifoldPK13b2CircleShapeRK11b2TransformS3_S6 _(i1, i7, i8, i6, i9) {
17602 i1 = i1 | 0;
17603 i7 = i7 | 0;
17604 i8 = i8 | 0;
17605 i6 = i6 | 0;
17606 i9 = i9 | 0;
17607 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;
17608 i2 = STACKTOP;
17609 i4 = i1 + 60 | 0;
17610 HEAP32[i4 >> 2] = 0;
17611 i3 = i7 + 12 | 0;
17612 d10 = +HEAPF32[i8 + 12 >> 2];
17613 d14 = +HEAPF32[i3 >> 2];
17614 d13 = +HEAPF32[i8 + 8 >> 2];
17615 d11 = +HEAPF32[i7 + 16 >> 2];
17616 i5 = i6 + 12 | 0;
17617 d16 = +HEAPF32[i9 + 12 >> 2];
17618 d18 = +HEAPF32[i5 >> 2];
17619 d17 = +HEAPF32[i9 + 8 >> 2];
17620 d15 = +HEAPF32[i6 + 16 >> 2];
17621 d12 = +HEAPF32[i9 >> 2] + (d16 * d18 - d17 * d15) - (+HEAPF32[i8 >> 2] + (d10 * d14 - d13 * d11));
17622 d11 = d18 * d17 + d16 * d15 + +HEAPF32[i9 + 4 >> 2] - (d14 * d13 + d10 * d11 + +HEAPF32[i8 + 4 >> 2]);
17623 d10 = +HEAPF32[i7 + 8 >> 2] + +HEAPF32[i6 + 8 >> 2];
17624 if (d12 * d12 + d11 * d11 > d10 * d10) {
17625 STACKTOP = i2;
17626 return;
17627 }
17628 HEAP32[i1 + 56 >> 2] = 0;
17629 i9 = i3;
17630 i8 = HEAP32[i9 + 4 >> 2] | 0;
17631 i7 = i1 + 48 | 0;
17632 HEAP32[i7 >> 2] = HEAP32[i9 >> 2];
17633 HEAP32[i7 + 4 >> 2] = i8;
17634 HEAPF32[i1 + 40 >> 2] = 0.0;
17635 HEAPF32[i1 + 44 >> 2] = 0.0;
17636 HEAP32[i4 >> 2] = 1;
17637 i7 = i5;
17638 i8 = HEAP32[i7 + 4 >> 2] | 0;
17639 i9 = i1;
17640 HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
17641 HEAP32[i9 + 4 >> 2] = i8;
17642 HEAP32[i1 + 16 >> 2] = 0;
17643 STACKTOP = i2;
17644 return;
17645 }
17646 function __ZNK14b2PolygonShape11ComputeAABBEP6b2AABBRK11b2Transformi(i1, i2, i7, i3) {
17647 i1 = i1 | 0;
17648 i2 = i2 | 0;
17649 i7 = i7 | 0;
17650 i3 = i3 | 0;
17651 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;
17652 i3 = STACKTOP;
17653 d4 = +HEAPF32[i7 + 12 >> 2];
17654 d15 = +HEAPF32[i1 + 20 >> 2];
17655 d5 = +HEAPF32[i7 + 8 >> 2];
17656 d12 = +HEAPF32[i1 + 24 >> 2];
17657 d6 = +HEAPF32[i7 >> 2];
17658 d9 = d6 + (d4 * d15 - d5 * d12);
17659 d8 = +HEAPF32[i7 + 4 >> 2];
17660 d12 = d15 * d5 + d4 * d12 + d8;
17661 i7 = HEAP32[i1 + 148 >> 2] | 0;
17662 if ((i7 | 0) > 1) {
17663 d10 = d9;
17664 d11 = d12;
17665 i13 = 1;
17666 do {
17667 d16 = +HEAPF32[i1 + (i13 << 3) + 20 >> 2];
17668 d14 = +HEAPF32[i1 + (i13 << 3) + 24 >> 2];
17669 d15 = d6 + (d4 * d16 - d5 * d14);
17670 d14 = d16 * d5 + d4 * d14 + d8;
17671 d10 = d10 < d15 ? d10 : d15;
17672 d11 = d11 < d14 ? d11 : d14;
17673 d9 = d9 > d15 ? d9 : d15;
17674 d12 = d12 > d14 ? d12 : d14;
17675 i13 = i13 + 1 | 0;
17676 } while ((i13 | 0) < (i7 | 0));
17677 } else {
17678 d11 = d12;
17679 d10 = d9;
17680 }
17681 d16 = +HEAPF32[i1 + 8 >> 2];
17682 d14 = +(d10 - d16);
17683 d15 = +(d11 - d16);
17684 i13 = i2;
17685 HEAPF32[i13 >> 2] = d14;
17686 HEAPF32[i13 + 4 >> 2] = d15;
17687 d15 = +(d9 + d16);
17688 d16 = +(d12 + d16);
17689 i13 = i2 + 8 | 0;
17690 HEAPF32[i13 >> 2] = d15;
17691 HEAPF32[i13 + 4 >> 2] = d16;
17692 STACKTOP = i3;
17693 return;
17694 }
17695 function __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynam ic_cast_infoEPKvS4_ib(i5, i1, i4, i6, i3, i7) {
17696 i5 = i5 | 0;
17697 i1 = i1 | 0;
17698 i4 = i4 | 0;
17699 i6 = i6 | 0;
17700 i3 = i3 | 0;
17701 i7 = i7 | 0;
17702 var i2 = 0;
17703 i2 = STACKTOP;
17704 if ((i5 | 0) != (HEAP32[i1 + 8 >> 2] | 0)) {
17705 i5 = HEAP32[i5 + 8 >> 2] | 0;
17706 FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i5 >> 2] | 0) + 20 >> 2] & 3](i5, i1, i4 , i6, i3, i7);
17707 STACKTOP = i2;
17708 return;
17709 }
17710 HEAP8[i1 + 53 | 0] = 1;
17711 if ((HEAP32[i1 + 4 >> 2] | 0) != (i6 | 0)) {
17712 STACKTOP = i2;
17713 return;
17714 }
17715 HEAP8[i1 + 52 | 0] = 1;
17716 i5 = i1 + 16 | 0;
17717 i6 = HEAP32[i5 >> 2] | 0;
17718 if ((i6 | 0) == 0) {
17719 HEAP32[i5 >> 2] = i4;
17720 HEAP32[i1 + 24 >> 2] = i3;
17721 HEAP32[i1 + 36 >> 2] = 1;
17722 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i3 | 0) == 1)) {
17723 STACKTOP = i2;
17724 return;
17725 }
17726 HEAP8[i1 + 54 | 0] = 1;
17727 STACKTOP = i2;
17728 return;
17729 }
17730 if ((i6 | 0) != (i4 | 0)) {
17731 i7 = i1 + 36 | 0;
17732 HEAP32[i7 >> 2] = (HEAP32[i7 >> 2] | 0) + 1;
17733 HEAP8[i1 + 54 | 0] = 1;
17734 STACKTOP = i2;
17735 return;
17736 }
17737 i4 = i1 + 24 | 0;
17738 i5 = HEAP32[i4 >> 2] | 0;
17739 if ((i5 | 0) == 2) {
17740 HEAP32[i4 >> 2] = i3;
17741 } else {
17742 i3 = i5;
17743 }
17744 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i3 | 0) == 1)) {
17745 STACKTOP = i2;
17746 return;
17747 }
17748 HEAP8[i1 + 54 | 0] = 1;
17749 STACKTOP = i2;
17750 return;
17751 }
17752 function __ZN6b2Body13CreateFixtureEPK12b2FixtureDef(i1, i5) {
17753 i1 = i1 | 0;
17754 i5 = i5 | 0;
17755 var i2 = 0, i3 = 0, i4 = 0, i6 = 0;
17756 i3 = STACKTOP;
17757 i2 = i1 + 88 | 0;
17758 i4 = HEAP32[i2 >> 2] | 0;
17759 if ((HEAP32[i4 + 102868 >> 2] & 2 | 0) != 0) {
17760 ___assert_fail(1776, 1520, 153, 1808);
17761 }
17762 i6 = __ZN16b2BlockAllocator8AllocateEi(i4, 44) | 0;
17763 if ((i6 | 0) == 0) {
17764 i6 = 0;
17765 } else {
17766 __ZN9b2FixtureC2Ev(i6);
17767 }
17768 __ZN9b2Fixture6CreateEP16b2BlockAllocatorP6b2BodyPK12b2FixtureDef(i6, i4, i1, i 5);
17769 if (!((HEAP16[i1 + 4 >> 1] & 32) == 0)) {
17770 __ZN9b2Fixture13CreateProxiesEP12b2BroadPhaseRK11b2Transform(i6, (HEAP32[i2 >> 2] | 0) + 102872 | 0, i1 + 12 | 0);
17771 }
17772 i5 = i1 + 100 | 0;
17773 HEAP32[i6 + 4 >> 2] = HEAP32[i5 >> 2];
17774 HEAP32[i5 >> 2] = i6;
17775 i5 = i1 + 104 | 0;
17776 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
17777 HEAP32[i6 + 8 >> 2] = i1;
17778 if (!(+HEAPF32[i6 >> 2] > 0.0)) {
17779 i5 = HEAP32[i2 >> 2] | 0;
17780 i5 = i5 + 102868 | 0;
17781 i4 = HEAP32[i5 >> 2] | 0;
17782 i4 = i4 | 1;
17783 HEAP32[i5 >> 2] = i4;
17784 STACKTOP = i3;
17785 return i6 | 0;
17786 }
17787 __ZN6b2Body13ResetMassDataEv(i1);
17788 i5 = HEAP32[i2 >> 2] | 0;
17789 i5 = i5 + 102868 | 0;
17790 i4 = HEAP32[i5 >> 2] | 0;
17791 i4 = i4 | 1;
17792 HEAP32[i5 >> 2] = i4;
17793 STACKTOP = i3;
17794 return i6 | 0;
17795 }
17796 function __Z13b2TestOverlapPK7b2ShapeiS1_iRK11b2TransformS4_(i6, i5, i4, i3, i2, i1) {
17797 i6 = i6 | 0;
17798 i5 = i5 | 0;
17799 i4 = i4 | 0;
17800 i3 = i3 | 0;
17801 i2 = i2 | 0;
17802 i1 = i1 | 0;
17803 var i7 = 0, i8 = 0, i9 = 0, i10 = 0;
17804 i8 = STACKTOP;
17805 STACKTOP = STACKTOP + 128 | 0;
17806 i9 = i8 + 36 | 0;
17807 i10 = i8 + 24 | 0;
17808 i7 = i8;
17809 HEAP32[i9 + 16 >> 2] = 0;
17810 HEAP32[i9 + 20 >> 2] = 0;
17811 HEAPF32[i9 + 24 >> 2] = 0.0;
17812 HEAP32[i9 + 44 >> 2] = 0;
17813 HEAP32[i9 + 48 >> 2] = 0;
17814 HEAPF32[i9 + 52 >> 2] = 0.0;
17815 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i9, i6, i5);
17816 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i9 + 28 | 0, i4, i3);
17817 i6 = i9 + 56 | 0;
17818 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
17819 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
17820 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
17821 HEAP32[i6 + 12 >> 2] = HEAP32[i2 + 12 >> 2];
17822 i6 = i9 + 72 | 0;
17823 HEAP32[i6 + 0 >> 2] = HEAP32[i1 + 0 >> 2];
17824 HEAP32[i6 + 4 >> 2] = HEAP32[i1 + 4 >> 2];
17825 HEAP32[i6 + 8 >> 2] = HEAP32[i1 + 8 >> 2];
17826 HEAP32[i6 + 12 >> 2] = HEAP32[i1 + 12 >> 2];
17827 HEAP8[i9 + 88 | 0] = 1;
17828 HEAP16[i10 + 4 >> 1] = 0;
17829 __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i7, i10, i9);
17830 STACKTOP = i8;
17831 return +HEAPF32[i7 + 16 >> 2] < 11920928955078125.0e-22 | 0;
17832 }
17833 function __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_ cast_infoEPKvS4_ib(i6, i1, i4, i5, i2, i3) {
17834 i6 = i6 | 0;
17835 i1 = i1 | 0;
17836 i4 = i4 | 0;
17837 i5 = i5 | 0;
17838 i2 = i2 | 0;
17839 i3 = i3 | 0;
17840 i3 = STACKTOP;
17841 if ((HEAP32[i1 + 8 >> 2] | 0) != (i6 | 0)) {
17842 STACKTOP = i3;
17843 return;
17844 }
17845 HEAP8[i1 + 53 | 0] = 1;
17846 if ((HEAP32[i1 + 4 >> 2] | 0) != (i5 | 0)) {
17847 STACKTOP = i3;
17848 return;
17849 }
17850 HEAP8[i1 + 52 | 0] = 1;
17851 i5 = i1 + 16 | 0;
17852 i6 = HEAP32[i5 >> 2] | 0;
17853 if ((i6 | 0) == 0) {
17854 HEAP32[i5 >> 2] = i4;
17855 HEAP32[i1 + 24 >> 2] = i2;
17856 HEAP32[i1 + 36 >> 2] = 1;
17857 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i2 | 0) == 1)) {
17858 STACKTOP = i3;
17859 return;
17860 }
17861 HEAP8[i1 + 54 | 0] = 1;
17862 STACKTOP = i3;
17863 return;
17864 }
17865 if ((i6 | 0) != (i4 | 0)) {
17866 i6 = i1 + 36 | 0;
17867 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
17868 HEAP8[i1 + 54 | 0] = 1;
17869 STACKTOP = i3;
17870 return;
17871 }
17872 i4 = i1 + 24 | 0;
17873 i5 = HEAP32[i4 >> 2] | 0;
17874 if ((i5 | 0) == 2) {
17875 HEAP32[i4 >> 2] = i2;
17876 } else {
17877 i2 = i5;
17878 }
17879 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i2 | 0) == 1)) {
17880 STACKTOP = i3;
17881 return;
17882 }
17883 HEAP8[i1 + 54 | 0] = 1;
17884 STACKTOP = i3;
17885 return;
17886 }
17887 function __ZNK11b2EdgeShape5CloneEP16b2BlockAllocator(i1, i3) {
17888 i1 = i1 | 0;
17889 i3 = i3 | 0;
17890 var i2 = 0, i4 = 0, i5 = 0, i6 = 0;
17891 i2 = STACKTOP;
17892 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 48) | 0;
17893 if ((i3 | 0) == 0) {
17894 i3 = 0;
17895 } else {
17896 HEAP32[i3 >> 2] = 240;
17897 HEAP32[i3 + 4 >> 2] = 1;
17898 HEAPF32[i3 + 8 >> 2] = .009999999776482582;
17899 i4 = i3 + 28 | 0;
17900 HEAP32[i4 + 0 >> 2] = 0;
17901 HEAP32[i4 + 4 >> 2] = 0;
17902 HEAP32[i4 + 8 >> 2] = 0;
17903 HEAP32[i4 + 12 >> 2] = 0;
17904 HEAP16[i4 + 16 >> 1] = 0;
17905 }
17906 i6 = i1 + 4 | 0;
17907 i5 = HEAP32[i6 + 4 >> 2] | 0;
17908 i4 = i3 + 4 | 0;
17909 HEAP32[i4 >> 2] = HEAP32[i6 >> 2];
17910 HEAP32[i4 + 4 >> 2] = i5;
17911 i4 = i3 + 12 | 0;
17912 i1 = i1 + 12 | 0;
17913 HEAP32[i4 + 0 >> 2] = HEAP32[i1 + 0 >> 2];
17914 HEAP32[i4 + 4 >> 2] = HEAP32[i1 + 4 >> 2];
17915 HEAP32[i4 + 8 >> 2] = HEAP32[i1 + 8 >> 2];
17916 HEAP32[i4 + 12 >> 2] = HEAP32[i1 + 12 >> 2];
17917 HEAP32[i4 + 16 >> 2] = HEAP32[i1 + 16 >> 2];
17918 HEAP32[i4 + 20 >> 2] = HEAP32[i1 + 20 >> 2];
17919 HEAP32[i4 + 24 >> 2] = HEAP32[i1 + 24 >> 2];
17920 HEAP32[i4 + 28 >> 2] = HEAP32[i1 + 28 >> 2];
17921 HEAP16[i4 + 32 >> 1] = HEAP16[i1 + 32 >> 1] | 0;
17922 STACKTOP = i2;
17923 return i3 | 0;
17924 }
17925 function __ZN7b2WorldC2ERK6b2Vec2(i1, i2) {
17926 i1 = i1 | 0;
17927 i2 = i2 | 0;
17928 var i3 = 0, i4 = 0, i5 = 0, i6 = 0;
17929 i3 = STACKTOP;
17930 __ZN16b2BlockAllocatorC2Ev(i1);
17931 __ZN16b2StackAllocatorC2Ev(i1 + 68 | 0);
17932 __ZN16b2ContactManagerC2Ev(i1 + 102872 | 0);
17933 i6 = i1 + 102968 | 0;
17934 HEAP32[i1 + 102980 >> 2] = 0;
17935 HEAP32[i1 + 102984 >> 2] = 0;
17936 i4 = i1 + 102952 | 0;
17937 i5 = i1 + 102992 | 0;
17938 HEAP32[i4 + 0 >> 2] = 0;
17939 HEAP32[i4 + 4 >> 2] = 0;
17940 HEAP32[i4 + 8 >> 2] = 0;
17941 HEAP32[i4 + 12 >> 2] = 0;
17942 HEAP8[i5] = 1;
17943 HEAP8[i1 + 102993 | 0] = 1;
17944 HEAP8[i1 + 102994 | 0] = 0;
17945 HEAP8[i1 + 102995 | 0] = 1;
17946 HEAP8[i1 + 102976 | 0] = 1;
17947 i5 = i2;
17948 i4 = HEAP32[i5 + 4 >> 2] | 0;
17949 i2 = i6;
17950 HEAP32[i2 >> 2] = HEAP32[i5 >> 2];
17951 HEAP32[i2 + 4 >> 2] = i4;
17952 HEAP32[i1 + 102868 >> 2] = 4;
17953 HEAPF32[i1 + 102988 >> 2] = 0.0;
17954 HEAP32[i1 + 102948 >> 2] = i1;
17955 i2 = i1 + 102996 | 0;
17956 HEAP32[i2 + 0 >> 2] = 0;
17957 HEAP32[i2 + 4 >> 2] = 0;
17958 HEAP32[i2 + 8 >> 2] = 0;
17959 HEAP32[i2 + 12 >> 2] = 0;
17960 HEAP32[i2 + 16 >> 2] = 0;
17961 HEAP32[i2 + 20 >> 2] = 0;
17962 HEAP32[i2 + 24 >> 2] = 0;
17963 HEAP32[i2 + 28 >> 2] = 0;
17964 STACKTOP = i3;
17965 return;
17966 }
17967 function __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_ cast_infoEPKvib(i6, i3, i4, i1, i2) {
17968 i6 = i6 | 0;
17969 i3 = i3 | 0;
17970 i4 = i4 | 0;
17971 i1 = i1 | 0;
17972 i2 = i2 | 0;
17973 var i5 = 0;
17974 i2 = STACKTOP;
17975 if ((HEAP32[i3 + 8 >> 2] | 0) == (i6 | 0)) {
17976 if ((HEAP32[i3 + 4 >> 2] | 0) != (i4 | 0)) {
17977 STACKTOP = i2;
17978 return;
17979 }
17980 i3 = i3 + 28 | 0;
17981 if ((HEAP32[i3 >> 2] | 0) == 1) {
17982 STACKTOP = i2;
17983 return;
17984 }
17985 HEAP32[i3 >> 2] = i1;
17986 STACKTOP = i2;
17987 return;
17988 }
17989 if ((HEAP32[i3 >> 2] | 0) != (i6 | 0)) {
17990 STACKTOP = i2;
17991 return;
17992 }
17993 if ((HEAP32[i3 + 16 >> 2] | 0) != (i4 | 0) ? (i5 = i3 + 20 | 0, (HEAP32[i5 >> 2 ] | 0) != (i4 | 0)) : 0) {
17994 HEAP32[i3 + 32 >> 2] = i1;
17995 HEAP32[i5 >> 2] = i4;
17996 i6 = i3 + 40 | 0;
17997 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
17998 if ((HEAP32[i3 + 36 >> 2] | 0) == 1 ? (HEAP32[i3 + 24 >> 2] | 0) == 2 : 0) {
17999 HEAP8[i3 + 54 | 0] = 1;
18000 }
18001 HEAP32[i3 + 44 >> 2] = 4;
18002 STACKTOP = i2;
18003 return;
18004 }
18005 if ((i1 | 0) != 1) {
18006 STACKTOP = i2;
18007 return;
18008 }
18009 HEAP32[i3 + 32 >> 2] = 1;
18010 STACKTOP = i2;
18011 return;
18012 }
18013 function __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i1, i2) {
18014 i1 = i1 | 0;
18015 i2 = i2 | 0;
18016 var i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0;
18017 i3 = STACKTOP;
18018 if ((HEAP8[4200] | 0) == 0) {
18019 ___assert_fail(4352, 4256, 103, 4376);
18020 }
18021 i4 = HEAP32[i1 + 48 >> 2] | 0;
18022 if ((HEAP32[i1 + 124 >> 2] | 0) > 0) {
18023 i7 = HEAP32[i4 + 8 >> 2] | 0;
18024 i6 = i7 + 4 | 0;
18025 i5 = HEAPU16[i6 >> 1] | 0;
18026 if ((i5 & 2 | 0) == 0) {
18027 HEAP16[i6 >> 1] = i5 | 2;
18028 HEAPF32[i7 + 144 >> 2] = 0.0;
18029 }
18030 i7 = HEAP32[i1 + 52 >> 2] | 0;
18031 i6 = HEAP32[i7 + 8 >> 2] | 0;
18032 i5 = i6 + 4 | 0;
18033 i8 = HEAPU16[i5 >> 1] | 0;
18034 if ((i8 & 2 | 0) == 0) {
18035 HEAP16[i5 >> 1] = i8 | 2;
18036 HEAPF32[i6 + 144 >> 2] = 0.0;
18037 }
18038 } else {
18039 i7 = HEAP32[i1 + 52 >> 2] | 0;
18040 }
18041 i4 = HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 4 >> 2] | 0;
18042 i5 = HEAP32[(HEAP32[i7 + 12 >> 2] | 0) + 4 >> 2] | 0;
18043 if ((i4 | 0) > -1 & (i5 | 0) < 4) {
18044 FUNCTION_TABLE_vii[HEAP32[4008 + (i4 * 48 | 0) + (i5 * 12 | 0) + 4 >> 2] & 15] (i1, i2);
18045 STACKTOP = i3;
18046 return;
18047 } else {
18048 ___assert_fail(4384, 4256, 114, 4376);
18049 }
18050 }
18051 function __ZN9b2Fixture13CreateProxiesEP12b2BroadPhaseRK11b2Transform(i5, i4, i1 ) {
18052 i5 = i5 | 0;
18053 i4 = i4 | 0;
18054 i1 = i1 | 0;
18055 var i2 = 0, i3 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
18056 i2 = STACKTOP;
18057 i3 = i5 + 28 | 0;
18058 if ((HEAP32[i3 >> 2] | 0) != 0) {
18059 ___assert_fail(2088, 2112, 124, 2144);
18060 }
18061 i6 = i5 + 12 | 0;
18062 i8 = HEAP32[i6 >> 2] | 0;
18063 i8 = FUNCTION_TABLE_ii[HEAP32[(HEAP32[i8 >> 2] | 0) + 12 >> 2] & 3](i8) | 0;
18064 HEAP32[i3 >> 2] = i8;
18065 if ((i8 | 0) <= 0) {
18066 STACKTOP = i2;
18067 return;
18068 }
18069 i7 = i5 + 24 | 0;
18070 i8 = 0;
18071 do {
18072 i9 = HEAP32[i7 >> 2] | 0;
18073 i10 = i9 + (i8 * 28 | 0) | 0;
18074 i11 = HEAP32[i6 >> 2] | 0;
18075 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i11 >> 2] | 0) + 24 >> 2] & 15](i11, i10, i1, i8);
18076 HEAP32[i9 + (i8 * 28 | 0) + 24 >> 2] = __ZN12b2BroadPhase11CreateProxyERK6b2AA BBPv(i4, i10, i10) | 0;
18077 HEAP32[i9 + (i8 * 28 | 0) + 16 >> 2] = i5;
18078 HEAP32[i9 + (i8 * 28 | 0) + 20 >> 2] = i8;
18079 i8 = i8 + 1 | 0;
18080 } while ((i8 | 0) < (HEAP32[i3 >> 2] | 0));
18081 STACKTOP = i2;
18082 return;
18083 }
18084 function __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoE RPv(i1, i5, i4) {
18085 i1 = i1 | 0;
18086 i5 = i5 | 0;
18087 i4 = i4 | 0;
18088 var i2 = 0, i3 = 0, i6 = 0, i7 = 0;
18089 i2 = STACKTOP;
18090 STACKTOP = STACKTOP + 64 | 0;
18091 i3 = i2;
18092 if ((i1 | 0) == (i5 | 0)) {
18093 i7 = 1;
18094 STACKTOP = i2;
18095 return i7 | 0;
18096 }
18097 if ((i5 | 0) == 0) {
18098 i7 = 0;
18099 STACKTOP = i2;
18100 return i7 | 0;
18101 }
18102 i5 = ___dynamic_cast(i5, 6952, 7008, 0) | 0;
18103 if ((i5 | 0) == 0) {
18104 i7 = 0;
18105 STACKTOP = i2;
18106 return i7 | 0;
18107 }
18108 i7 = i3 + 0 | 0;
18109 i6 = i7 + 56 | 0;
18110 do {
18111 HEAP32[i7 >> 2] = 0;
18112 i7 = i7 + 4 | 0;
18113 } while ((i7 | 0) < (i6 | 0));
18114 HEAP32[i3 >> 2] = i5;
18115 HEAP32[i3 + 8 >> 2] = i1;
18116 HEAP32[i3 + 12 >> 2] = -1;
18117 HEAP32[i3 + 48 >> 2] = 1;
18118 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i5 >> 2] | 0) + 28 >> 2] & 15](i5, i3, HEAP 32[i4 >> 2] | 0, 1);
18119 if ((HEAP32[i3 + 24 >> 2] | 0) != 1) {
18120 i7 = 0;
18121 STACKTOP = i2;
18122 return i7 | 0;
18123 }
18124 HEAP32[i4 >> 2] = HEAP32[i3 + 16 >> 2];
18125 i7 = 1;
18126 STACKTOP = i2;
18127 return i7 | 0;
18128 }
18129 function __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i1, i4, i3, i2, i5, i6) {
18130 i1 = i1 | 0;
18131 i4 = i4 | 0;
18132 i3 = i3 | 0;
18133 i2 = i2 | 0;
18134 i5 = i5 | 0;
18135 i6 = i6 | 0;
18136 var i7 = 0, i8 = 0;
18137 i7 = STACKTOP;
18138 i8 = i1 + 40 | 0;
18139 HEAP32[i8 >> 2] = i4;
18140 HEAP32[i1 + 44 >> 2] = i3;
18141 HEAP32[i1 + 48 >> 2] = i2;
18142 HEAP32[i1 + 28 >> 2] = 0;
18143 HEAP32[i1 + 36 >> 2] = 0;
18144 HEAP32[i1 + 32 >> 2] = 0;
18145 HEAP32[i1 >> 2] = i5;
18146 HEAP32[i1 + 4 >> 2] = i6;
18147 HEAP32[i1 + 8 >> 2] = __ZN16b2StackAllocator8AllocateEi(i5, i4 << 2) | 0;
18148 HEAP32[i1 + 12 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, i 3 << 2) | 0;
18149 HEAP32[i1 + 16 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, i 2 << 2) | 0;
18150 HEAP32[i1 + 24 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, ( HEAP32[i8 >> 2] | 0) * 12 | 0) | 0;
18151 HEAP32[i1 + 20 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, ( HEAP32[i8 >> 2] | 0) * 12 | 0) | 0;
18152 STACKTOP = i7;
18153 return;
18154 }
18155 function __ZNK11b2EdgeShape11ComputeAABBEP6b2AABBRK11b2Transformi(i8, i1, i10, i 2) {
18156 i8 = i8 | 0;
18157 i1 = i1 | 0;
18158 i10 = i10 | 0;
18159 i2 = i2 | 0;
18160 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;
18161 i2 = STACKTOP;
18162 d7 = +HEAPF32[i10 + 12 >> 2];
18163 d9 = +HEAPF32[i8 + 12 >> 2];
18164 d11 = +HEAPF32[i10 + 8 >> 2];
18165 d3 = +HEAPF32[i8 + 16 >> 2];
18166 d6 = +HEAPF32[i10 >> 2];
18167 d5 = d6 + (d7 * d9 - d11 * d3);
18168 d12 = +HEAPF32[i10 + 4 >> 2];
18169 d3 = d9 * d11 + d7 * d3 + d12;
18170 d9 = +HEAPF32[i8 + 20 >> 2];
18171 d4 = +HEAPF32[i8 + 24 >> 2];
18172 d6 = d6 + (d7 * d9 - d11 * d4);
18173 d4 = d12 + (d11 * d9 + d7 * d4);
18174 d7 = +HEAPF32[i8 + 8 >> 2];
18175 d9 = +((d5 < d6 ? d5 : d6) - d7);
18176 d12 = +((d3 < d4 ? d3 : d4) - d7);
18177 i10 = i1;
18178 HEAPF32[i10 >> 2] = d9;
18179 HEAPF32[i10 + 4 >> 2] = d12;
18180 d5 = +(d7 + (d5 > d6 ? d5 : d6));
18181 d12 = +(d7 + (d3 > d4 ? d3 : d4));
18182 i10 = i1 + 8 | 0;
18183 HEAPF32[i10 >> 2] = d5;
18184 HEAPF32[i10 + 4 >> 2] = d12;
18185 STACKTOP = i2;
18186 return;
18187 }
18188 function __ZNK14b2PolygonShape9TestPointERK11b2TransformRK6b2Vec2(i2, i3, i6) {
18189 i2 = i2 | 0;
18190 i3 = i3 | 0;
18191 i6 = i6 | 0;
18192 var i1 = 0, d4 = 0.0, d5 = 0.0, i7 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0;
18193 i1 = STACKTOP;
18194 d8 = +HEAPF32[i6 >> 2] - +HEAPF32[i3 >> 2];
18195 d9 = +HEAPF32[i6 + 4 >> 2] - +HEAPF32[i3 + 4 >> 2];
18196 d10 = +HEAPF32[i3 + 12 >> 2];
18197 d5 = +HEAPF32[i3 + 8 >> 2];
18198 d4 = d8 * d10 + d9 * d5;
18199 d5 = d10 * d9 - d8 * d5;
18200 i3 = HEAP32[i2 + 148 >> 2] | 0;
18201 if ((i3 | 0) > 0) {
18202 i6 = 0;
18203 } else {
18204 i7 = 1;
18205 STACKTOP = i1;
18206 return i7 | 0;
18207 }
18208 while (1) {
18209 i7 = i6 + 1 | 0;
18210 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) {
18211 i3 = 0;
18212 i2 = 4;
18213 break;
18214 }
18215 if ((i7 | 0) < (i3 | 0)) {
18216 i6 = i7;
18217 } else {
18218 i3 = 1;
18219 i2 = 4;
18220 break;
18221 }
18222 }
18223 if ((i2 | 0) == 4) {
18224 STACKTOP = i1;
18225 return i3 | 0;
18226 }
18227 return 0;
18228 }
18229 function __ZN16b2StackAllocator8AllocateEi(i4, i5) {
18230 i4 = i4 | 0;
18231 i5 = i5 | 0;
18232 var i1 = 0, i2 = 0, i3 = 0, i6 = 0, i7 = 0, i8 = 0;
18233 i2 = STACKTOP;
18234 i3 = i4 + 102796 | 0;
18235 i6 = HEAP32[i3 >> 2] | 0;
18236 if ((i6 | 0) >= 32) {
18237 ___assert_fail(3896, 3808, 38, 3936);
18238 }
18239 i1 = i4 + (i6 * 12 | 0) + 102412 | 0;
18240 HEAP32[i4 + (i6 * 12 | 0) + 102416 >> 2] = i5;
18241 i7 = i4 + 102400 | 0;
18242 i8 = HEAP32[i7 >> 2] | 0;
18243 if ((i8 + i5 | 0) > 102400) {
18244 HEAP32[i1 >> 2] = __Z7b2Alloci(i5) | 0;
18245 HEAP8[i4 + (i6 * 12 | 0) + 102420 | 0] = 1;
18246 } else {
18247 HEAP32[i1 >> 2] = i4 + i8;
18248 HEAP8[i4 + (i6 * 12 | 0) + 102420 | 0] = 0;
18249 HEAP32[i7 >> 2] = (HEAP32[i7 >> 2] | 0) + i5;
18250 }
18251 i6 = i4 + 102404 | 0;
18252 i5 = (HEAP32[i6 >> 2] | 0) + i5 | 0;
18253 HEAP32[i6 >> 2] = i5;
18254 i4 = i4 + 102408 | 0;
18255 i6 = HEAP32[i4 >> 2] | 0;
18256 HEAP32[i4 >> 2] = (i6 | 0) > (i5 | 0) ? i6 : i5;
18257 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1;
18258 STACKTOP = i2;
18259 return HEAP32[i1 >> 2] | 0;
18260 }
18261 function __ZN12b2BroadPhase13QueryCallbackEi(i5, i1) {
18262 i5 = i5 | 0;
18263 i1 = i1 | 0;
18264 var i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0;
18265 i2 = STACKTOP;
18266 i4 = i5 + 56 | 0;
18267 i7 = HEAP32[i4 >> 2] | 0;
18268 if ((i7 | 0) == (i1 | 0)) {
18269 STACKTOP = i2;
18270 return 1;
18271 }
18272 i3 = i5 + 52 | 0;
18273 i6 = HEAP32[i3 >> 2] | 0;
18274 i8 = i5 + 48 | 0;
18275 i5 = i5 + 44 | 0;
18276 if ((i6 | 0) == (HEAP32[i8 >> 2] | 0)) {
18277 i7 = HEAP32[i5 >> 2] | 0;
18278 HEAP32[i8 >> 2] = i6 << 1;
18279 i6 = __Z7b2Alloci(i6 * 24 | 0) | 0;
18280 HEAP32[i5 >> 2] = i6;
18281 _memcpy(i6 | 0, i7 | 0, (HEAP32[i3 >> 2] | 0) * 12 | 0) | 0;
18282 __Z6b2FreePv(i7);
18283 i7 = HEAP32[i4 >> 2] | 0;
18284 i6 = HEAP32[i3 >> 2] | 0;
18285 }
18286 i5 = HEAP32[i5 >> 2] | 0;
18287 HEAP32[i5 + (i6 * 12 | 0) >> 2] = (i7 | 0) > (i1 | 0) ? i1 : i7;
18288 i4 = HEAP32[i4 >> 2] | 0;
18289 HEAP32[i5 + ((HEAP32[i3 >> 2] | 0) * 12 | 0) + 4 >> 2] = (i4 | 0) < (i1 | 0) ? i1 : i4;
18290 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1;
18291 STACKTOP = i2;
18292 return 1;
18293 }
18294 function __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPN S_19__dynamic_cast_infoEPvi(i5, i4, i3, i1) {
18295 i5 = i5 | 0;
18296 i4 = i4 | 0;
18297 i3 = i3 | 0;
18298 i1 = i1 | 0;
18299 var i2 = 0, i6 = 0;
18300 i2 = STACKTOP;
18301 if ((i5 | 0) != (HEAP32[i4 + 8 >> 2] | 0)) {
18302 i6 = HEAP32[i5 + 8 >> 2] | 0;
18303 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i6 >> 2] | 0) + 28 >> 2] & 15](i6, i4, i3, i1);
18304 STACKTOP = i2;
18305 return;
18306 }
18307 i5 = i4 + 16 | 0;
18308 i6 = HEAP32[i5 >> 2] | 0;
18309 if ((i6 | 0) == 0) {
18310 HEAP32[i5 >> 2] = i3;
18311 HEAP32[i4 + 24 >> 2] = i1;
18312 HEAP32[i4 + 36 >> 2] = 1;
18313 STACKTOP = i2;
18314 return;
18315 }
18316 if ((i6 | 0) != (i3 | 0)) {
18317 i6 = i4 + 36 | 0;
18318 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
18319 HEAP32[i4 + 24 >> 2] = 2;
18320 HEAP8[i4 + 54 | 0] = 1;
18321 STACKTOP = i2;
18322 return;
18323 }
18324 i3 = i4 + 24 | 0;
18325 if ((HEAP32[i3 >> 2] | 0) != 2) {
18326 STACKTOP = i2;
18327 return;
18328 }
18329 HEAP32[i3 >> 2] = i1;
18330 STACKTOP = i2;
18331 return;
18332 }
18333 function __ZN6b2Body19SynchronizeFixturesEv(i5) {
18334 i5 = i5 | 0;
18335 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0;
18336 i1 = STACKTOP;
18337 STACKTOP = STACKTOP + 16 | 0;
18338 i3 = i1;
18339 d8 = +HEAPF32[i5 + 52 >> 2];
18340 d9 = +Math_sin(+d8);
18341 HEAPF32[i3 + 8 >> 2] = d9;
18342 d8 = +Math_cos(+d8);
18343 HEAPF32[i3 + 12 >> 2] = d8;
18344 d10 = +HEAPF32[i5 + 28 >> 2];
18345 d6 = +HEAPF32[i5 + 32 >> 2];
18346 d7 = +(+HEAPF32[i5 + 36 >> 2] - (d8 * d10 - d9 * d6));
18347 d6 = +(+HEAPF32[i5 + 40 >> 2] - (d10 * d9 + d8 * d6));
18348 i2 = i3;
18349 HEAPF32[i2 >> 2] = d7;
18350 HEAPF32[i2 + 4 >> 2] = d6;
18351 i2 = (HEAP32[i5 + 88 >> 2] | 0) + 102872 | 0;
18352 i4 = HEAP32[i5 + 100 >> 2] | 0;
18353 if ((i4 | 0) == 0) {
18354 STACKTOP = i1;
18355 return;
18356 }
18357 i5 = i5 + 12 | 0;
18358 do {
18359 __ZN9b2Fixture11SynchronizeEP12b2BroadPhaseRK11b2TransformS4_(i4, i2, i3, i5);
18360 i4 = HEAP32[i4 + 4 >> 2] | 0;
18361 } while ((i4 | 0) != 0);
18362 STACKTOP = i1;
18363 return;
18364 }
18365 function __ZN13b2DynamicTreeC2Ev(i1) {
18366 i1 = i1 | 0;
18367 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0;
18368 i4 = STACKTOP;
18369 HEAP32[i1 >> 2] = -1;
18370 i3 = i1 + 12 | 0;
18371 HEAP32[i3 >> 2] = 16;
18372 HEAP32[i1 + 8 >> 2] = 0;
18373 i6 = __Z7b2Alloci(576) | 0;
18374 i2 = i1 + 4 | 0;
18375 HEAP32[i2 >> 2] = i6;
18376 _memset(i6 | 0, 0, (HEAP32[i3 >> 2] | 0) * 36 | 0) | 0;
18377 i6 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
18378 i2 = HEAP32[i2 >> 2] | 0;
18379 if ((i6 | 0) > 0) {
18380 i6 = 0;
18381 while (1) {
18382 i5 = i6 + 1 | 0;
18383 HEAP32[i2 + (i6 * 36 | 0) + 20 >> 2] = i5;
18384 HEAP32[i2 + (i6 * 36 | 0) + 32 >> 2] = -1;
18385 i6 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
18386 if ((i5 | 0) < (i6 | 0)) {
18387 i6 = i5;
18388 } else {
18389 break;
18390 }
18391 }
18392 }
18393 HEAP32[i2 + (i6 * 36 | 0) + 20 >> 2] = -1;
18394 HEAP32[i2 + (((HEAP32[i3 >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1;
18395 HEAP32[i1 + 16 >> 2] = 0;
18396 HEAP32[i1 + 20 >> 2] = 0;
18397 HEAP32[i1 + 24 >> 2] = 0;
18398 STACKTOP = i4;
18399 return;
18400 }
18401 function __Z7measurePl(i1, i9) {
18402 i1 = i1 | 0;
18403 i9 = i9 | 0;
18404 var i2 = 0, i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, i7 = 0, d8 = 0.0, i10 = 0, d11 = 0.0;
18405 i2 = STACKTOP;
18406 i3 = HEAP32[4] | 0;
18407 i4 = STACKTOP;
18408 STACKTOP = STACKTOP + ((4 * i3 | 0) + 15 & -16) | 0;
18409 i7 = (i3 | 0) > 0;
18410 if (i7) {
18411 i10 = 0;
18412 d6 = 0.0;
18413 do {
18414 d8 = +(HEAP32[i9 + (i10 << 2) >> 2] | 0) / 1.0e6 * 1.0e3;
18415 HEAPF32[i4 + (i10 << 2) >> 2] = d8;
18416 d6 = d6 + d8;
18417 i10 = i10 + 1 | 0;
18418 } while ((i10 | 0) < (i3 | 0));
18419 d5 = +(i3 | 0);
18420 d6 = d6 / d5;
18421 HEAPF32[i1 >> 2] = d6;
18422 if (i7) {
18423 i7 = 0;
18424 d8 = 0.0;
18425 do {
18426 d11 = +HEAPF32[i4 + (i7 << 2) >> 2] - d6;
18427 d8 = d8 + d11 * d11;
18428 i7 = i7 + 1 | 0;
18429 } while ((i7 | 0) < (i3 | 0));
18430 } else {
18431 d8 = 0.0;
18432 }
18433 } else {
18434 d5 = +(i3 | 0);
18435 HEAPF32[i1 >> 2] = 0.0 / d5;
18436 d8 = 0.0;
18437 }
18438 HEAPF32[i1 + 4 >> 2] = +Math_sqrt(+(d8 / d5));
18439 STACKTOP = i2;
18440 return;
18441 }
18442 function __ZN13b2DynamicTree11CreateProxyERK6b2AABBPv(i1, i3, i2) {
18443 i1 = i1 | 0;
18444 i3 = i3 | 0;
18445 i2 = i2 | 0;
18446 var i4 = 0, i5 = 0, i6 = 0, d7 = 0.0, d8 = 0.0, i9 = 0;
18447 i5 = STACKTOP;
18448 i4 = __ZN13b2DynamicTree12AllocateNodeEv(i1) | 0;
18449 i6 = i1 + 4 | 0;
18450 d7 = +(+HEAPF32[i3 >> 2] + -.10000000149011612);
18451 d8 = +(+HEAPF32[i3 + 4 >> 2] + -.10000000149011612);
18452 i9 = (HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) | 0;
18453 HEAPF32[i9 >> 2] = d7;
18454 HEAPF32[i9 + 4 >> 2] = d8;
18455 d8 = +(+HEAPF32[i3 + 8 >> 2] + .10000000149011612);
18456 d7 = +(+HEAPF32[i3 + 12 >> 2] + .10000000149011612);
18457 i3 = (HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 8 | 0;
18458 HEAPF32[i3 >> 2] = d8;
18459 HEAPF32[i3 + 4 >> 2] = d7;
18460 HEAP32[(HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 16 >> 2] = i2;
18461 HEAP32[(HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 32 >> 2] = 0;
18462 __ZN13b2DynamicTree10InsertLeafEi(i1, i4);
18463 STACKTOP = i5;
18464 return i4 | 0;
18465 }
18466 function __ZN16b2BlockAllocatorC2Ev(i3) {
18467 i3 = i3 | 0;
18468 var i1 = 0, i2 = 0, i4 = 0, i5 = 0;
18469 i2 = STACKTOP;
18470 i4 = i3 + 8 | 0;
18471 HEAP32[i4 >> 2] = 128;
18472 HEAP32[i3 + 4 >> 2] = 0;
18473 i5 = __Z7b2Alloci(1024) | 0;
18474 HEAP32[i3 >> 2] = i5;
18475 _memset(i5 | 0, 0, HEAP32[i4 >> 2] << 3 | 0) | 0;
18476 i4 = i3 + 12 | 0;
18477 i3 = i4 + 56 | 0;
18478 do {
18479 HEAP32[i4 >> 2] = 0;
18480 i4 = i4 + 4 | 0;
18481 } while ((i4 | 0) < (i3 | 0));
18482 if ((HEAP8[1280] | 0) == 0) {
18483 i3 = 1;
18484 i4 = 0;
18485 } else {
18486 STACKTOP = i2;
18487 return;
18488 }
18489 do {
18490 if ((i4 | 0) >= 14) {
18491 i1 = 3;
18492 break;
18493 }
18494 if ((i3 | 0) > (HEAP32[576 + (i4 << 2) >> 2] | 0)) {
18495 i4 = i4 + 1 | 0;
18496 HEAP8[632 + i3 | 0] = i4;
18497 } else {
18498 HEAP8[632 + i3 | 0] = i4;
18499 }
18500 i3 = i3 + 1 | 0;
18501 } while ((i3 | 0) < 641);
18502 if ((i1 | 0) == 3) {
18503 ___assert_fail(1288, 1312, 73, 1352);
18504 }
18505 HEAP8[1280] = 1;
18506 STACKTOP = i2;
18507 return;
18508 }
18509 function __ZN24b2ChainAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_ (i2, i4, i3, i1) {
18510 i2 = i2 | 0;
18511 i4 = i4 | 0;
18512 i3 = i3 | 0;
18513 i1 = i1 | 0;
18514 var i5 = 0, i6 = 0, i7 = 0, i8 = 0;
18515 i5 = STACKTOP;
18516 STACKTOP = STACKTOP + 48 | 0;
18517 i6 = i5;
18518 i7 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0;
18519 HEAP32[i6 >> 2] = 240;
18520 HEAP32[i6 + 4 >> 2] = 1;
18521 HEAPF32[i6 + 8 >> 2] = .009999999776482582;
18522 i8 = i6 + 28 | 0;
18523 HEAP32[i8 + 0 >> 2] = 0;
18524 HEAP32[i8 + 4 >> 2] = 0;
18525 HEAP32[i8 + 8 >> 2] = 0;
18526 HEAP32[i8 + 12 >> 2] = 0;
18527 HEAP16[i8 + 16 >> 1] = 0;
18528 __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i7, i6, HEAP32[i2 + 56 >> 2] | 0);
18529 __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2Po lygonShapeS6_(i4, i6, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
18530 STACKTOP = i5;
18531 return;
18532 }
18533 function __ZN23b2ChainAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_( i2, i4, i3, i1) {
18534 i2 = i2 | 0;
18535 i4 = i4 | 0;
18536 i3 = i3 | 0;
18537 i1 = i1 | 0;
18538 var i5 = 0, i6 = 0, i7 = 0, i8 = 0;
18539 i5 = STACKTOP;
18540 STACKTOP = STACKTOP + 48 | 0;
18541 i6 = i5;
18542 i7 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0;
18543 HEAP32[i6 >> 2] = 240;
18544 HEAP32[i6 + 4 >> 2] = 1;
18545 HEAPF32[i6 + 8 >> 2] = .009999999776482582;
18546 i8 = i6 + 28 | 0;
18547 HEAP32[i8 + 0 >> 2] = 0;
18548 HEAP32[i8 + 4 >> 2] = 0;
18549 HEAP32[i8 + 8 >> 2] = 0;
18550 HEAP32[i8 + 12 >> 2] = 0;
18551 HEAP16[i8 + 16 >> 1] = 0;
18552 __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i7, i6, HEAP32[i2 + 56 >> 2] | 0);
18553 __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2Cir cleShapeS6_(i4, i6, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
18554 STACKTOP = i5;
18555 return;
18556 }
18557 function __ZN15b2ContactSolver13StoreImpulsesEv(i4) {
18558 i4 = i4 | 0;
18559 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0;
18560 i1 = STACKTOP;
18561 i2 = HEAP32[i4 + 48 >> 2] | 0;
18562 if ((i2 | 0) <= 0) {
18563 STACKTOP = i1;
18564 return;
18565 }
18566 i3 = HEAP32[i4 + 40 >> 2] | 0;
18567 i4 = HEAP32[i4 + 44 >> 2] | 0;
18568 i5 = 0;
18569 do {
18570 i6 = HEAP32[i4 + (HEAP32[i3 + (i5 * 152 | 0) + 148 >> 2] << 2) >> 2] | 0;
18571 i7 = HEAP32[i3 + (i5 * 152 | 0) + 144 >> 2] | 0;
18572 if ((i7 | 0) > 0) {
18573 i8 = 0;
18574 do {
18575 HEAPF32[i6 + (i8 * 20 | 0) + 72 >> 2] = +HEAPF32[i3 + (i5 * 152 | 0) + (i8 * 36 | 0) + 16 >> 2];
18576 HEAPF32[i6 + (i8 * 20 | 0) + 76 >> 2] = +HEAPF32[i3 + (i5 * 152 | 0) + (i8 * 36 | 0) + 20 >> 2];
18577 i8 = i8 + 1 | 0;
18578 } while ((i8 | 0) < (i7 | 0));
18579 }
18580 i5 = i5 + 1 | 0;
18581 } while ((i5 | 0) < (i2 | 0));
18582 STACKTOP = i1;
18583 return;
18584 }
18585 function __ZN16b2StackAllocator4FreeEPv(i1, i5) {
18586 i1 = i1 | 0;
18587 i5 = i5 | 0;
18588 var i2 = 0, i3 = 0, i4 = 0, i6 = 0;
18589 i3 = STACKTOP;
18590 i2 = i1 + 102796 | 0;
18591 i4 = HEAP32[i2 >> 2] | 0;
18592 if ((i4 | 0) <= 0) {
18593 ___assert_fail(3952, 3808, 63, 3976);
18594 }
18595 i6 = i4 + -1 | 0;
18596 if ((HEAP32[i1 + (i6 * 12 | 0) + 102412 >> 2] | 0) != (i5 | 0)) {
18597 ___assert_fail(3984, 3808, 65, 3976);
18598 }
18599 if ((HEAP8[i1 + (i6 * 12 | 0) + 102420 | 0] | 0) == 0) {
18600 i5 = i1 + (i6 * 12 | 0) + 102416 | 0;
18601 i6 = i1 + 102400 | 0;
18602 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) - (HEAP32[i5 >> 2] | 0);
18603 } else {
18604 __Z6b2FreePv(i5);
18605 i5 = i1 + (i6 * 12 | 0) + 102416 | 0;
18606 i4 = HEAP32[i2 >> 2] | 0;
18607 }
18608 i6 = i1 + 102404 | 0;
18609 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) - (HEAP32[i5 >> 2] | 0);
18610 HEAP32[i2 >> 2] = i4 + -1;
18611 STACKTOP = i3;
18612 return;
18613 }
18614 function __ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_1 9__dynamic_cast_infoEPvi(i5, i4, i3, i2) {
18615 i5 = i5 | 0;
18616 i4 = i4 | 0;
18617 i3 = i3 | 0;
18618 i2 = i2 | 0;
18619 var i1 = 0, i6 = 0;
18620 i1 = STACKTOP;
18621 if ((HEAP32[i4 + 8 >> 2] | 0) != (i5 | 0)) {
18622 STACKTOP = i1;
18623 return;
18624 }
18625 i5 = i4 + 16 | 0;
18626 i6 = HEAP32[i5 >> 2] | 0;
18627 if ((i6 | 0) == 0) {
18628 HEAP32[i5 >> 2] = i3;
18629 HEAP32[i4 + 24 >> 2] = i2;
18630 HEAP32[i4 + 36 >> 2] = 1;
18631 STACKTOP = i1;
18632 return;
18633 }
18634 if ((i6 | 0) != (i3 | 0)) {
18635 i6 = i4 + 36 | 0;
18636 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
18637 HEAP32[i4 + 24 >> 2] = 2;
18638 HEAP8[i4 + 54 | 0] = 1;
18639 STACKTOP = i1;
18640 return;
18641 }
18642 i3 = i4 + 24 | 0;
18643 if ((HEAP32[i3 >> 2] | 0) != 2) {
18644 STACKTOP = i1;
18645 return;
18646 }
18647 HEAP32[i3 >> 2] = i2;
18648 STACKTOP = i1;
18649 return;
18650 }
18651 function __ZN12b2BroadPhase11CreateProxyERK6b2AABBPv(i2, i4, i3) {
18652 i2 = i2 | 0;
18653 i4 = i4 | 0;
18654 i3 = i3 | 0;
18655 var i1 = 0, i5 = 0, i6 = 0, i7 = 0;
18656 i1 = STACKTOP;
18657 i3 = __ZN13b2DynamicTree11CreateProxyERK6b2AABBPv(i2, i4, i3) | 0;
18658 i4 = i2 + 28 | 0;
18659 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
18660 i4 = i2 + 40 | 0;
18661 i5 = HEAP32[i4 >> 2] | 0;
18662 i6 = i2 + 36 | 0;
18663 i2 = i2 + 32 | 0;
18664 if ((i5 | 0) == (HEAP32[i6 >> 2] | 0)) {
18665 i7 = HEAP32[i2 >> 2] | 0;
18666 HEAP32[i6 >> 2] = i5 << 1;
18667 i5 = __Z7b2Alloci(i5 << 3) | 0;
18668 HEAP32[i2 >> 2] = i5;
18669 _memcpy(i5 | 0, i7 | 0, HEAP32[i4 >> 2] << 2 | 0) | 0;
18670 __Z6b2FreePv(i7);
18671 i5 = HEAP32[i4 >> 2] | 0;
18672 }
18673 HEAP32[(HEAP32[i2 >> 2] | 0) + (i5 << 2) >> 2] = i3;
18674 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
18675 STACKTOP = i1;
18676 return i3 | 0;
18677 }
18678 function __ZN9b2ContactC2EP9b2FixtureiS1_i(i1, i4, i6, i3, i5) {
18679 i1 = i1 | 0;
18680 i4 = i4 | 0;
18681 i6 = i6 | 0;
18682 i3 = i3 | 0;
18683 i5 = i5 | 0;
18684 var i2 = 0, i7 = 0, d8 = 0.0, d9 = 0.0;
18685 i2 = STACKTOP;
18686 HEAP32[i1 >> 2] = 4440;
18687 HEAP32[i1 + 4 >> 2] = 4;
18688 HEAP32[i1 + 48 >> 2] = i4;
18689 HEAP32[i1 + 52 >> 2] = i3;
18690 HEAP32[i1 + 56 >> 2] = i6;
18691 HEAP32[i1 + 60 >> 2] = i5;
18692 HEAP32[i1 + 124 >> 2] = 0;
18693 HEAP32[i1 + 128 >> 2] = 0;
18694 i5 = i4 + 16 | 0;
18695 i6 = i1 + 8 | 0;
18696 i7 = i6 + 40 | 0;
18697 do {
18698 HEAP32[i6 >> 2] = 0;
18699 i6 = i6 + 4 | 0;
18700 } while ((i6 | 0) < (i7 | 0));
18701 HEAPF32[i1 + 136 >> 2] = +Math_sqrt(+(+HEAPF32[i5 >> 2] * +HEAPF32[i3 + 16 >> 2 ]));
18702 d8 = +HEAPF32[i4 + 20 >> 2];
18703 d9 = +HEAPF32[i3 + 20 >> 2];
18704 HEAPF32[i1 + 140 >> 2] = d8 > d9 ? d8 : d9;
18705 STACKTOP = i2;
18706 return;
18707 }
18708 function __ZN12b2BroadPhase9MoveProxyEiRK6b2AABBRK6b2Vec2(i3, i1, i5, i4) {
18709 i3 = i3 | 0;
18710 i1 = i1 | 0;
18711 i5 = i5 | 0;
18712 i4 = i4 | 0;
18713 var i2 = 0, i6 = 0, i7 = 0;
18714 i2 = STACKTOP;
18715 if (!(__ZN13b2DynamicTree9MoveProxyEiRK6b2AABBRK6b2Vec2(i3, i1, i5, i4) | 0)) {
18716 STACKTOP = i2;
18717 return;
18718 }
18719 i4 = i3 + 40 | 0;
18720 i5 = HEAP32[i4 >> 2] | 0;
18721 i6 = i3 + 36 | 0;
18722 i3 = i3 + 32 | 0;
18723 if ((i5 | 0) == (HEAP32[i6 >> 2] | 0)) {
18724 i7 = HEAP32[i3 >> 2] | 0;
18725 HEAP32[i6 >> 2] = i5 << 1;
18726 i5 = __Z7b2Alloci(i5 << 3) | 0;
18727 HEAP32[i3 >> 2] = i5;
18728 _memcpy(i5 | 0, i7 | 0, HEAP32[i4 >> 2] << 2 | 0) | 0;
18729 __Z6b2FreePv(i7);
18730 i5 = HEAP32[i4 >> 2] | 0;
18731 }
18732 HEAP32[(HEAP32[i3 >> 2] | 0) + (i5 << 2) >> 2] = i1;
18733 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
18734 STACKTOP = i2;
18735 return;
18736 }
18737 function __ZN24b2ChainAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocat or(i1, i3, i4, i5, i6) {
18738 i1 = i1 | 0;
18739 i3 = i3 | 0;
18740 i4 = i4 | 0;
18741 i5 = i5 | 0;
18742 i6 = i6 | 0;
18743 var i2 = 0;
18744 i2 = STACKTOP;
18745 i6 = __ZN16b2BlockAllocator8AllocateEi(i6, 144) | 0;
18746 if ((i6 | 0) == 0) {
18747 i6 = 0;
18748 STACKTOP = i2;
18749 return i6 | 0;
18750 }
18751 __ZN9b2ContactC2EP9b2FixtureiS1_i(i6, i1, i3, i4, i5);
18752 HEAP32[i6 >> 2] = 6032;
18753 if ((HEAP32[(HEAP32[(HEAP32[i6 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) ! = 3) {
18754 ___assert_fail(6048, 6096, 43, 6152);
18755 }
18756 if ((HEAP32[(HEAP32[(HEAP32[i6 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) = = 2) {
18757 STACKTOP = i2;
18758 return i6 | 0;
18759 } else {
18760 ___assert_fail(6184, 6096, 44, 6152);
18761 }
18762 return 0;
18763 }
18764 function __ZN23b2ChainAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocato r(i1, i3, i4, i5, i6) {
18765 i1 = i1 | 0;
18766 i3 = i3 | 0;
18767 i4 = i4 | 0;
18768 i5 = i5 | 0;
18769 i6 = i6 | 0;
18770 var i2 = 0;
18771 i2 = STACKTOP;
18772 i6 = __ZN16b2BlockAllocator8AllocateEi(i6, 144) | 0;
18773 if ((i6 | 0) == 0) {
18774 i6 = 0;
18775 STACKTOP = i2;
18776 return i6 | 0;
18777 }
18778 __ZN9b2ContactC2EP9b2FixtureiS1_i(i6, i1, i3, i4, i5);
18779 HEAP32[i6 >> 2] = 5784;
18780 if ((HEAP32[(HEAP32[(HEAP32[i6 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) ! = 3) {
18781 ___assert_fail(5800, 5848, 43, 5904);
18782 }
18783 if ((HEAP32[(HEAP32[(HEAP32[i6 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) = = 0) {
18784 STACKTOP = i2;
18785 return i6 | 0;
18786 } else {
18787 ___assert_fail(5928, 5848, 44, 5904);
18788 }
18789 return 0;
18790 }
18791 function __ZN25b2PolygonAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAlloca tor(i1, i4, i2, i5, i3) {
18792 i1 = i1 | 0;
18793 i4 = i4 | 0;
18794 i2 = i2 | 0;
18795 i5 = i5 | 0;
18796 i3 = i3 | 0;
18797 i4 = STACKTOP;
18798 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18799 if ((i3 | 0) == 0) {
18800 i5 = 0;
18801 STACKTOP = i4;
18802 return i5 | 0;
18803 }
18804 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18805 HEAP32[i3 >> 2] = 4984;
18806 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) ! = 2) {
18807 ___assert_fail(5e3, 5048, 41, 5104);
18808 }
18809 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) = = 0) {
18810 i5 = i3;
18811 STACKTOP = i4;
18812 return i5 | 0;
18813 } else {
18814 ___assert_fail(5136, 5048, 42, 5104);
18815 }
18816 return 0;
18817 }
18818 function __ZN23b2EdgeAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocato r(i1, i4, i2, i5, i3) {
18819 i1 = i1 | 0;
18820 i4 = i4 | 0;
18821 i2 = i2 | 0;
18822 i5 = i5 | 0;
18823 i3 = i3 | 0;
18824 i4 = STACKTOP;
18825 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18826 if ((i3 | 0) == 0) {
18827 i5 = 0;
18828 STACKTOP = i4;
18829 return i5 | 0;
18830 }
18831 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18832 HEAP32[i3 >> 2] = 4736;
18833 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) ! = 1) {
18834 ___assert_fail(4752, 4800, 41, 4856);
18835 }
18836 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) = = 2) {
18837 i5 = i3;
18838 STACKTOP = i4;
18839 return i5 | 0;
18840 } else {
18841 ___assert_fail(4880, 4800, 42, 4856);
18842 }
18843 return 0;
18844 }
18845 function __ZN22b2EdgeAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator (i1, i4, i2, i5, i3) {
18846 i1 = i1 | 0;
18847 i4 = i4 | 0;
18848 i2 = i2 | 0;
18849 i5 = i5 | 0;
18850 i3 = i3 | 0;
18851 i4 = STACKTOP;
18852 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18853 if ((i3 | 0) == 0) {
18854 i5 = 0;
18855 STACKTOP = i4;
18856 return i5 | 0;
18857 }
18858 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18859 HEAP32[i3 >> 2] = 4488;
18860 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) ! = 1) {
18861 ___assert_fail(4504, 4552, 41, 4608);
18862 }
18863 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) = = 0) {
18864 i5 = i3;
18865 STACKTOP = i4;
18866 return i5 | 0;
18867 } else {
18868 ___assert_fail(4632, 4552, 42, 4608);
18869 }
18870 return 0;
18871 }
18872 function __ZN14b2PolygonShape8SetAsBoxEff(i1, d3, d2) {
18873 i1 = i1 | 0;
18874 d3 = +d3;
18875 d2 = +d2;
18876 var d4 = 0.0, d5 = 0.0;
18877 HEAP32[i1 + 148 >> 2] = 4;
18878 d4 = -d3;
18879 d5 = -d2;
18880 HEAPF32[i1 + 20 >> 2] = d4;
18881 HEAPF32[i1 + 24 >> 2] = d5;
18882 HEAPF32[i1 + 28 >> 2] = d3;
18883 HEAPF32[i1 + 32 >> 2] = d5;
18884 HEAPF32[i1 + 36 >> 2] = d3;
18885 HEAPF32[i1 + 40 >> 2] = d2;
18886 HEAPF32[i1 + 44 >> 2] = d4;
18887 HEAPF32[i1 + 48 >> 2] = d2;
18888 HEAPF32[i1 + 84 >> 2] = 0.0;
18889 HEAPF32[i1 + 88 >> 2] = -1.0;
18890 HEAPF32[i1 + 92 >> 2] = 1.0;
18891 HEAPF32[i1 + 96 >> 2] = 0.0;
18892 HEAPF32[i1 + 100 >> 2] = 0.0;
18893 HEAPF32[i1 + 104 >> 2] = 1.0;
18894 HEAPF32[i1 + 108 >> 2] = -1.0;
18895 HEAPF32[i1 + 112 >> 2] = 0.0;
18896 HEAPF32[i1 + 12 >> 2] = 0.0;
18897 HEAPF32[i1 + 16 >> 2] = 0.0;
18898 return;
18899 }
18900 function __ZN16b2PolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i 4, i2, i5, i3) {
18901 i1 = i1 | 0;
18902 i4 = i4 | 0;
18903 i2 = i2 | 0;
18904 i5 = i5 | 0;
18905 i3 = i3 | 0;
18906 i4 = STACKTOP;
18907 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18908 if ((i3 | 0) == 0) {
18909 i5 = 0;
18910 STACKTOP = i4;
18911 return i5 | 0;
18912 }
18913 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18914 HEAP32[i3 >> 2] = 5240;
18915 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) ! = 2) {
18916 ___assert_fail(5256, 5304, 44, 5352);
18917 }
18918 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) = = 2) {
18919 i5 = i3;
18920 STACKTOP = i4;
18921 return i5 | 0;
18922 } else {
18923 ___assert_fail(5376, 5304, 45, 5352);
18924 }
18925 return 0;
18926 }
18927 function __ZN15b2CircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4 , i2, i5, i3) {
18928 i1 = i1 | 0;
18929 i4 = i4 | 0;
18930 i2 = i2 | 0;
18931 i5 = i5 | 0;
18932 i3 = i3 | 0;
18933 i4 = STACKTOP;
18934 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18935 if ((i3 | 0) == 0) {
18936 i5 = 0;
18937 STACKTOP = i4;
18938 return i5 | 0;
18939 }
18940 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18941 HEAP32[i3 >> 2] = 6288;
18942 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) ! = 0) {
18943 ___assert_fail(6304, 6352, 44, 6400);
18944 }
18945 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) = = 0) {
18946 i5 = i3;
18947 STACKTOP = i4;
18948 return i5 | 0;
18949 } else {
18950 ___assert_fail(6416, 6352, 45, 6400);
18951 }
18952 return 0;
18953 }
18954 function __ZN7b2World10CreateBodyEPK9b2BodyDef(i1, i4) {
18955 i1 = i1 | 0;
18956 i4 = i4 | 0;
18957 var i2 = 0, i3 = 0, i5 = 0;
18958 i2 = STACKTOP;
18959 if ((HEAP32[i1 + 102868 >> 2] & 2 | 0) != 0) {
18960 ___assert_fail(2160, 2184, 109, 2216);
18961 }
18962 i3 = __ZN16b2BlockAllocator8AllocateEi(i1, 152) | 0;
18963 if ((i3 | 0) == 0) {
18964 i3 = 0;
18965 } else {
18966 __ZN6b2BodyC2EPK9b2BodyDefP7b2World(i3, i4, i1);
18967 }
18968 HEAP32[i3 + 92 >> 2] = 0;
18969 i4 = i1 + 102952 | 0;
18970 HEAP32[i3 + 96 >> 2] = HEAP32[i4 >> 2];
18971 i5 = HEAP32[i4 >> 2] | 0;
18972 if ((i5 | 0) != 0) {
18973 HEAP32[i5 + 92 >> 2] = i3;
18974 }
18975 HEAP32[i4 >> 2] = i3;
18976 i5 = i1 + 102960 | 0;
18977 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
18978 STACKTOP = i2;
18979 return i3 | 0;
18980 }
18981 function __ZNK6b2Body13ShouldCollideEPKS_(i4, i2) {
18982 i4 = i4 | 0;
18983 i2 = i2 | 0;
18984 var i1 = 0, i3 = 0;
18985 i1 = STACKTOP;
18986 if ((HEAP32[i4 >> 2] | 0) != 2 ? (HEAP32[i2 >> 2] | 0) != 2 : 0) {
18987 i2 = 0;
18988 } else {
18989 i3 = 3;
18990 }
18991 L3 : do {
18992 if ((i3 | 0) == 3) {
18993 i3 = HEAP32[i4 + 108 >> 2] | 0;
18994 if ((i3 | 0) == 0) {
18995 i2 = 1;
18996 } else {
18997 while (1) {
18998 if ((HEAP32[i3 >> 2] | 0) == (i2 | 0) ? (HEAP8[(HEAP32[i3 + 4 >> 2] | 0) + 61 | 0] | 0) == 0 : 0) {
18999 i2 = 0;
19000 break L3;
19001 }
19002 i3 = HEAP32[i3 + 12 >> 2] | 0;
19003 if ((i3 | 0) == 0) {
19004 i2 = 1;
19005 break;
19006 }
19007 }
19008 }
19009 }
19010 } while (0);
19011 STACKTOP = i1;
19012 return i2 | 0;
19013 }
19014 function __ZNK14b2PolygonShape5CloneEP16b2BlockAllocator(i1, i3) {
19015 i1 = i1 | 0;
19016 i3 = i3 | 0;
19017 var i2 = 0, i4 = 0, i5 = 0, i6 = 0;
19018 i2 = STACKTOP;
19019 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 152) | 0;
19020 if ((i3 | 0) == 0) {
19021 i3 = 0;
19022 } else {
19023 HEAP32[i3 >> 2] = 504;
19024 HEAP32[i3 + 4 >> 2] = 2;
19025 HEAPF32[i3 + 8 >> 2] = .009999999776482582;
19026 HEAP32[i3 + 148 >> 2] = 0;
19027 HEAPF32[i3 + 12 >> 2] = 0.0;
19028 HEAPF32[i3 + 16 >> 2] = 0.0;
19029 }
19030 i6 = i1 + 4 | 0;
19031 i5 = HEAP32[i6 + 4 >> 2] | 0;
19032 i4 = i3 + 4 | 0;
19033 HEAP32[i4 >> 2] = HEAP32[i6 >> 2];
19034 HEAP32[i4 + 4 >> 2] = i5;
19035 _memcpy(i3 + 12 | 0, i1 + 12 | 0, 140) | 0;
19036 STACKTOP = i2;
19037 return i3 | 0;
19038 }
19039 function _memcpy(i3, i2, i1) {
19040 i3 = i3 | 0;
19041 i2 = i2 | 0;
19042 i1 = i1 | 0;
19043 var i4 = 0;
19044 if ((i1 | 0) >= 4096) return _emscripten_memcpy_big(i3 | 0, i2 | 0, i1 | 0) | 0 ;
19045 i4 = i3 | 0;
19046 if ((i3 & 3) == (i2 & 3)) {
19047 while (i3 & 3) {
19048 if ((i1 | 0) == 0) return i4 | 0;
19049 HEAP8[i3] = HEAP8[i2] | 0;
19050 i3 = i3 + 1 | 0;
19051 i2 = i2 + 1 | 0;
19052 i1 = i1 - 1 | 0;
19053 }
19054 while ((i1 | 0) >= 4) {
19055 HEAP32[i3 >> 2] = HEAP32[i2 >> 2];
19056 i3 = i3 + 4 | 0;
19057 i2 = i2 + 4 | 0;
19058 i1 = i1 - 4 | 0;
19059 }
19060 }
19061 while ((i1 | 0) > 0) {
19062 HEAP8[i3] = HEAP8[i2] | 0;
19063 i3 = i3 + 1 | 0;
19064 i2 = i2 + 1 | 0;
19065 i1 = i1 - 1 | 0;
19066 }
19067 return i4 | 0;
19068 }
19069 function __ZN7b2World16SetAllowSleepingEb(i2, i4) {
19070 i2 = i2 | 0;
19071 i4 = i4 | 0;
19072 var i1 = 0, i3 = 0;
19073 i1 = STACKTOP;
19074 i3 = i2 + 102976 | 0;
19075 if ((i4 & 1 | 0) == (HEAPU8[i3] | 0 | 0)) {
19076 STACKTOP = i1;
19077 return;
19078 }
19079 HEAP8[i3] = i4 & 1;
19080 if (i4) {
19081 STACKTOP = i1;
19082 return;
19083 }
19084 i2 = HEAP32[i2 + 102952 >> 2] | 0;
19085 if ((i2 | 0) == 0) {
19086 STACKTOP = i1;
19087 return;
19088 }
19089 do {
19090 i3 = i2 + 4 | 0;
19091 i4 = HEAPU16[i3 >> 1] | 0;
19092 if ((i4 & 2 | 0) == 0) {
19093 HEAP16[i3 >> 1] = i4 | 2;
19094 HEAPF32[i2 + 144 >> 2] = 0.0;
19095 }
19096 i2 = HEAP32[i2 + 96 >> 2] | 0;
19097 } while ((i2 | 0) != 0);
19098 STACKTOP = i1;
19099 return;
19100 }
19101 function __ZN16b2BlockAllocator4FreeEPvi(i3, i1, i4) {
19102 i3 = i3 | 0;
19103 i1 = i1 | 0;
19104 i4 = i4 | 0;
19105 var i2 = 0;
19106 i2 = STACKTOP;
19107 if ((i4 | 0) == 0) {
19108 STACKTOP = i2;
19109 return;
19110 }
19111 if ((i4 | 0) <= 0) {
19112 ___assert_fail(1376, 1312, 164, 1488);
19113 }
19114 if ((i4 | 0) > 640) {
19115 __Z6b2FreePv(i1);
19116 STACKTOP = i2;
19117 return;
19118 }
19119 i4 = HEAP8[632 + i4 | 0] | 0;
19120 if (!((i4 & 255) < 14)) {
19121 ___assert_fail(1408, 1312, 173, 1488);
19122 }
19123 i4 = i3 + ((i4 & 255) << 2) + 12 | 0;
19124 HEAP32[i1 >> 2] = HEAP32[i4 >> 2];
19125 HEAP32[i4 >> 2] = i1;
19126 STACKTOP = i2;
19127 return;
19128 }
19129 function __ZN15b2ContactFilter13ShouldCollideEP9b2FixtureS1_(i3, i2, i1) {
19130 i3 = i3 | 0;
19131 i2 = i2 | 0;
19132 i1 = i1 | 0;
19133 var i4 = 0;
19134 i3 = STACKTOP;
19135 i4 = HEAP16[i2 + 36 >> 1] | 0;
19136 if (!(i4 << 16 >> 16 != (HEAP16[i1 + 36 >> 1] | 0) | i4 << 16 >> 16 == 0)) {
19137 i4 = i4 << 16 >> 16 > 0;
19138 STACKTOP = i3;
19139 return i4 | 0;
19140 }
19141 if ((HEAP16[i1 + 32 >> 1] & HEAP16[i2 + 34 >> 1]) << 16 >> 16 == 0) {
19142 i4 = 0;
19143 STACKTOP = i3;
19144 return i4 | 0;
19145 }
19146 i4 = (HEAP16[i1 + 34 >> 1] & HEAP16[i2 + 32 >> 1]) << 16 >> 16 != 0;
19147 STACKTOP = i3;
19148 return i4 | 0;
19149 }
19150 function _memset(i1, i4, i3) {
19151 i1 = i1 | 0;
19152 i4 = i4 | 0;
19153 i3 = i3 | 0;
19154 var i2 = 0, i5 = 0, i6 = 0, i7 = 0;
19155 i2 = i1 + i3 | 0;
19156 if ((i3 | 0) >= 20) {
19157 i4 = i4 & 255;
19158 i7 = i1 & 3;
19159 i6 = i4 | i4 << 8 | i4 << 16 | i4 << 24;
19160 i5 = i2 & ~3;
19161 if (i7) {
19162 i7 = i1 + 4 - i7 | 0;
19163 while ((i1 | 0) < (i7 | 0)) {
19164 HEAP8[i1] = i4;
19165 i1 = i1 + 1 | 0;
19166 }
19167 }
19168 while ((i1 | 0) < (i5 | 0)) {
19169 HEAP32[i1 >> 2] = i6;
19170 i1 = i1 + 4 | 0;
19171 }
19172 }
19173 while ((i1 | 0) < (i2 | 0)) {
19174 HEAP8[i1] = i4;
19175 i1 = i1 + 1 | 0;
19176 }
19177 return i1 - i3 | 0;
19178 }
19179 function __ZN6b2Body13CreateFixtureEPK7b2Shapef(i1, i3, d2) {
19180 i1 = i1 | 0;
19181 i3 = i3 | 0;
19182 d2 = +d2;
19183 var i4 = 0, i5 = 0;
19184 i4 = STACKTOP;
19185 STACKTOP = STACKTOP + 32 | 0;
19186 i5 = i4;
19187 HEAP16[i5 + 22 >> 1] = 1;
19188 HEAP16[i5 + 24 >> 1] = -1;
19189 HEAP16[i5 + 26 >> 1] = 0;
19190 HEAP32[i5 + 4 >> 2] = 0;
19191 HEAPF32[i5 + 8 >> 2] = .20000000298023224;
19192 HEAPF32[i5 + 12 >> 2] = 0.0;
19193 HEAP8[i5 + 20 | 0] = 0;
19194 HEAP32[i5 >> 2] = i3;
19195 HEAPF32[i5 + 16 >> 2] = d2;
19196 i3 = __ZN6b2Body13CreateFixtureEPK12b2FixtureDef(i1, i5) | 0;
19197 STACKTOP = i4;
19198 return i3 | 0;
19199 }
19200 function __Znwj(i2) {
19201 i2 = i2 | 0;
19202 var i1 = 0, i3 = 0;
19203 i1 = STACKTOP;
19204 i2 = (i2 | 0) == 0 ? 1 : i2;
19205 while (1) {
19206 i3 = _malloc(i2) | 0;
19207 if ((i3 | 0) != 0) {
19208 i2 = 6;
19209 break;
19210 }
19211 i3 = HEAP32[1914] | 0;
19212 HEAP32[1914] = i3 + 0;
19213 if ((i3 | 0) == 0) {
19214 i2 = 5;
19215 break;
19216 }
19217 FUNCTION_TABLE_v[i3 & 3]();
19218 }
19219 if ((i2 | 0) == 5) {
19220 i3 = ___cxa_allocate_exception(4) | 0;
19221 HEAP32[i3 >> 2] = 7672;
19222 ___cxa_throw(i3 | 0, 7720, 30);
19223 } else if ((i2 | 0) == 6) {
19224 STACKTOP = i1;
19225 return i3 | 0;
19226 }
19227 return 0;
19228 }
19229 function __ZN8b2IslandD2Ev(i1) {
19230 i1 = i1 | 0;
19231 var i2 = 0;
19232 i2 = STACKTOP;
19233 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 20 >> 2] | 0);
19234 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 24 >> 2] | 0);
19235 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 16 >> 2] | 0);
19236 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 12 >> 2] | 0);
19237 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 8 >> 2] | 0);
19238 STACKTOP = i2;
19239 return;
19240 }
19241 function __ZN16b2BlockAllocatorD2Ev(i2) {
19242 i2 = i2 | 0;
19243 var i1 = 0, i3 = 0, i4 = 0, i5 = 0;
19244 i1 = STACKTOP;
19245 i3 = i2 + 4 | 0;
19246 i4 = HEAP32[i2 >> 2] | 0;
19247 if ((HEAP32[i3 >> 2] | 0) > 0) {
19248 i5 = 0;
19249 } else {
19250 i5 = i4;
19251 __Z6b2FreePv(i5);
19252 STACKTOP = i1;
19253 return;
19254 }
19255 do {
19256 __Z6b2FreePv(HEAP32[i4 + (i5 << 3) + 4 >> 2] | 0);
19257 i5 = i5 + 1 | 0;
19258 i4 = HEAP32[i2 >> 2] | 0;
19259 } while ((i5 | 0) < (HEAP32[i3 >> 2] | 0));
19260 __Z6b2FreePv(i4);
19261 STACKTOP = i1;
19262 return;
19263 }
19264 function copyTempDouble(i1) {
19265 i1 = i1 | 0;
19266 HEAP8[tempDoublePtr] = HEAP8[i1];
19267 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
19268 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
19269 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
19270 HEAP8[tempDoublePtr + 4 | 0] = HEAP8[i1 + 4 | 0];
19271 HEAP8[tempDoublePtr + 5 | 0] = HEAP8[i1 + 5 | 0];
19272 HEAP8[tempDoublePtr + 6 | 0] = HEAP8[i1 + 6 | 0];
19273 HEAP8[tempDoublePtr + 7 | 0] = HEAP8[i1 + 7 | 0];
19274 }
19275 function __ZNK11b2EdgeShape11ComputeMassEP10b2MassDataf(i2, i1, d3) {
19276 i2 = i2 | 0;
19277 i1 = i1 | 0;
19278 d3 = +d3;
19279 var i4 = 0, d5 = 0.0;
19280 i4 = STACKTOP;
19281 HEAPF32[i1 >> 2] = 0.0;
19282 d5 = +((+HEAPF32[i2 + 12 >> 2] + +HEAPF32[i2 + 20 >> 2]) * .5);
19283 d3 = +((+HEAPF32[i2 + 16 >> 2] + +HEAPF32[i2 + 24 >> 2]) * .5);
19284 i2 = i1 + 4 | 0;
19285 HEAPF32[i2 >> 2] = d5;
19286 HEAPF32[i2 + 4 >> 2] = d3;
19287 HEAPF32[i1 + 12 >> 2] = 0.0;
19288 STACKTOP = i4;
19289 return;
19290 }
19291 function __ZN11b2EdgeShape3SetERK6b2Vec2S2_(i1, i3, i2) {
19292 i1 = i1 | 0;
19293 i3 = i3 | 0;
19294 i2 = i2 | 0;
19295 var i4 = 0, i5 = 0;
19296 i5 = i3;
19297 i3 = HEAP32[i5 + 4 >> 2] | 0;
19298 i4 = i1 + 12 | 0;
19299 HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
19300 HEAP32[i4 + 4 >> 2] = i3;
19301 i4 = i2;
19302 i2 = HEAP32[i4 + 4 >> 2] | 0;
19303 i3 = i1 + 20 | 0;
19304 HEAP32[i3 >> 2] = HEAP32[i4 >> 2];
19305 HEAP32[i3 + 4 >> 2] = i2;
19306 HEAP8[i1 + 44 | 0] = 0;
19307 HEAP8[i1 + 45 | 0] = 0;
19308 return;
19309 }
19310 function __ZN25b2PolygonAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4 _(i2, i4, i3, i1) {
19311 i2 = i2 | 0;
19312 i4 = i4 | 0;
19313 i3 = i3 | 0;
19314 i1 = i1 | 0;
19315 var i5 = 0;
19316 i5 = STACKTOP;
19317 __Z25b2CollidePolygonAndCircleP10b2ManifoldPK14b2PolygonShapeRK11b2TransformPK1 3b2CircleShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP 32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19318 STACKTOP = i5;
19319 return;
19320 }
19321 function __ZN23b2EdgeAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_( i2, i4, i3, i1) {
19322 i2 = i2 | 0;
19323 i4 = i4 | 0;
19324 i3 = i3 | 0;
19325 i1 = i1 | 0;
19326 var i5 = 0;
19327 i5 = STACKTOP;
19328 __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2Po lygonShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[( HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19329 STACKTOP = i5;
19330 return;
19331 }
19332 function __ZN22b2EdgeAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i 2, i4, i3, i1) {
19333 i2 = i2 | 0;
19334 i4 = i4 | 0;
19335 i3 = i3 | 0;
19336 i1 = i1 | 0;
19337 var i5 = 0;
19338 i5 = STACKTOP;
19339 __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2Cir cleShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HE AP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19340 STACKTOP = i5;
19341 return;
19342 }
19343 function __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2Transform PK14b2PolygonShapeS6_(i5, i4, i3, i2, i1) {
19344 i5 = i5 | 0;
19345 i4 = i4 | 0;
19346 i3 = i3 | 0;
19347 i2 = i2 | 0;
19348 i1 = i1 | 0;
19349 var i6 = 0;
19350 i6 = STACKTOP;
19351 STACKTOP = STACKTOP + 256 | 0;
19352 __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2Pol ygonShapeS7_(i6, i5, i4, i3, i2, i1);
19353 STACKTOP = i6;
19354 return;
19355 }
19356 function __ZN16b2PolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
19357 i2 = i2 | 0;
19358 i4 = i4 | 0;
19359 i3 = i3 | 0;
19360 i1 = i1 | 0;
19361 var i5 = 0;
19362 i5 = STACKTOP;
19363 __Z17b2CollidePolygonsP10b2ManifoldPK14b2PolygonShapeRK11b2TransformS3_S6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19364 STACKTOP = i5;
19365 return;
19366 }
19367 function __ZN15b2CircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
19368 i2 = i2 | 0;
19369 i4 = i4 | 0;
19370 i3 = i3 | 0;
19371 i1 = i1 | 0;
19372 var i5 = 0;
19373 i5 = STACKTOP;
19374 __Z16b2CollideCirclesP10b2ManifoldPK13b2CircleShapeRK11b2TransformS3_S6_(i4, HE AP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19375 STACKTOP = i5;
19376 return;
19377 }
19378 function __Z14b2PairLessThanRK6b2PairS1_(i2, i5) {
19379 i2 = i2 | 0;
19380 i5 = i5 | 0;
19381 var i1 = 0, i3 = 0, i4 = 0;
19382 i1 = STACKTOP;
19383 i4 = HEAP32[i2 >> 2] | 0;
19384 i3 = HEAP32[i5 >> 2] | 0;
19385 if ((i4 | 0) >= (i3 | 0)) {
19386 if ((i4 | 0) == (i3 | 0)) {
19387 i2 = (HEAP32[i2 + 4 >> 2] | 0) < (HEAP32[i5 + 4 >> 2] | 0);
19388 } else {
19389 i2 = 0;
19390 }
19391 } else {
19392 i2 = 1;
19393 }
19394 STACKTOP = i1;
19395 return i2 | 0;
19396 }
19397 function __ZN9b2FixtureC2Ev(i1) {
19398 i1 = i1 | 0;
19399 var i2 = 0;
19400 i2 = STACKTOP;
19401 HEAP16[i1 + 32 >> 1] = 1;
19402 HEAP16[i1 + 34 >> 1] = -1;
19403 HEAP16[i1 + 36 >> 1] = 0;
19404 HEAP32[i1 + 40 >> 2] = 0;
19405 HEAP32[i1 + 24 >> 2] = 0;
19406 HEAP32[i1 + 28 >> 2] = 0;
19407 HEAP32[i1 + 0 >> 2] = 0;
19408 HEAP32[i1 + 4 >> 2] = 0;
19409 HEAP32[i1 + 8 >> 2] = 0;
19410 HEAP32[i1 + 12 >> 2] = 0;
19411 STACKTOP = i2;
19412 return;
19413 }
19414 function __ZN12b2BroadPhaseC2Ev(i1) {
19415 i1 = i1 | 0;
19416 var i2 = 0;
19417 i2 = STACKTOP;
19418 __ZN13b2DynamicTreeC2Ev(i1);
19419 HEAP32[i1 + 28 >> 2] = 0;
19420 HEAP32[i1 + 48 >> 2] = 16;
19421 HEAP32[i1 + 52 >> 2] = 0;
19422 HEAP32[i1 + 44 >> 2] = __Z7b2Alloci(192) | 0;
19423 HEAP32[i1 + 36 >> 2] = 16;
19424 HEAP32[i1 + 40 >> 2] = 0;
19425 HEAP32[i1 + 32 >> 2] = __Z7b2Alloci(64) | 0;
19426 STACKTOP = i2;
19427 return;
19428 }
19429 function __ZN16b2StackAllocatorD2Ev(i1) {
19430 i1 = i1 | 0;
19431 var i2 = 0;
19432 i2 = STACKTOP;
19433 if ((HEAP32[i1 + 102400 >> 2] | 0) != 0) {
19434 ___assert_fail(3792, 3808, 32, 3848);
19435 }
19436 if ((HEAP32[i1 + 102796 >> 2] | 0) == 0) {
19437 STACKTOP = i2;
19438 return;
19439 } else {
19440 ___assert_fail(3872, 3808, 33, 3848);
19441 }
19442 }
19443 function __ZN15b2ContactSolverD2Ev(i1) {
19444 i1 = i1 | 0;
19445 var i2 = 0, i3 = 0;
19446 i2 = STACKTOP;
19447 i3 = i1 + 32 | 0;
19448 __ZN16b2StackAllocator4FreeEPv(HEAP32[i3 >> 2] | 0, HEAP32[i1 + 40 >> 2] | 0);
19449 __ZN16b2StackAllocator4FreeEPv(HEAP32[i3 >> 2] | 0, HEAP32[i1 + 36 >> 2] | 0);
19450 STACKTOP = i2;
19451 return;
19452 }
19453 function __ZN25b2PolygonAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator( i1, i2) {
19454 i1 = i1 | 0;
19455 i2 = i2 | 0;
19456 var i3 = 0;
19457 i3 = STACKTOP;
19458 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19459 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19460 STACKTOP = i3;
19461 return;
19462 }
19463 function __ZN24b2ChainAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i 1, i2) {
19464 i1 = i1 | 0;
19465 i2 = i2 | 0;
19466 var i3 = 0;
19467 i3 = STACKTOP;
19468 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19469 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19470 STACKTOP = i3;
19471 return;
19472 }
19473 function __ZN23b2EdgeAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1 , i2) {
19474 i1 = i1 | 0;
19475 i2 = i2 | 0;
19476 var i3 = 0;
19477 i3 = STACKTOP;
19478 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19479 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19480 STACKTOP = i3;
19481 return;
19482 }
19483 function __ZN23b2ChainAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1 , i2) {
19484 i1 = i1 | 0;
19485 i2 = i2 | 0;
19486 var i3 = 0;
19487 i3 = STACKTOP;
19488 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19489 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19490 STACKTOP = i3;
19491 return;
19492 }
19493 function __ZN22b2EdgeAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19494 i1 = i1 | 0;
19495 i2 = i2 | 0;
19496 var i3 = 0;
19497 i3 = STACKTOP;
19498 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19499 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19500 STACKTOP = i3;
19501 return;
19502 }
19503 function __ZN16b2ContactManagerC2Ev(i1) {
19504 i1 = i1 | 0;
19505 var i2 = 0;
19506 i2 = STACKTOP;
19507 __ZN12b2BroadPhaseC2Ev(i1);
19508 HEAP32[i1 + 60 >> 2] = 0;
19509 HEAP32[i1 + 64 >> 2] = 0;
19510 HEAP32[i1 + 68 >> 2] = 1888;
19511 HEAP32[i1 + 72 >> 2] = 1896;
19512 HEAP32[i1 + 76 >> 2] = 0;
19513 STACKTOP = i2;
19514 return;
19515 }
19516 function __ZN16b2PolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19517 i1 = i1 | 0;
19518 i2 = i2 | 0;
19519 var i3 = 0;
19520 i3 = STACKTOP;
19521 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19522 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19523 STACKTOP = i3;
19524 return;
19525 }
19526 function __ZN15b2CircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19527 i1 = i1 | 0;
19528 i2 = i2 | 0;
19529 var i3 = 0;
19530 i3 = STACKTOP;
19531 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19532 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19533 STACKTOP = i3;
19534 return;
19535 }
19536 function dynCall_viiiiii(i7, i6, i5, i4, i3, i2, i1) {
19537 i7 = i7 | 0;
19538 i6 = i6 | 0;
19539 i5 = i5 | 0;
19540 i4 = i4 | 0;
19541 i3 = i3 | 0;
19542 i2 = i2 | 0;
19543 i1 = i1 | 0;
19544 FUNCTION_TABLE_viiiiii[i7 & 3](i6 | 0, i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0);
19545 }
19546 function copyTempFloat(i1) {
19547 i1 = i1 | 0;
19548 HEAP8[tempDoublePtr] = HEAP8[i1];
19549 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
19550 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
19551 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
19552 }
19553 function dynCall_iiiiii(i6, i5, i4, i3, i2, i1) {
19554 i6 = i6 | 0;
19555 i5 = i5 | 0;
19556 i4 = i4 | 0;
19557 i3 = i3 | 0;
19558 i2 = i2 | 0;
19559 i1 = i1 | 0;
19560 return FUNCTION_TABLE_iiiiii[i6 & 15](i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0) | 0;
19561 }
19562 function dynCall_viiiii(i6, i5, i4, i3, i2, i1) {
19563 i6 = i6 | 0;
19564 i5 = i5 | 0;
19565 i4 = i4 | 0;
19566 i3 = i3 | 0;
19567 i2 = i2 | 0;
19568 i1 = i1 | 0;
19569 FUNCTION_TABLE_viiiii[i6 & 3](i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0);
19570 }
19571 function __ZN16b2ContactManager15FindNewContactsEv(i1) {
19572 i1 = i1 | 0;
19573 var i2 = 0;
19574 i2 = STACKTOP;
19575 __ZN12b2BroadPhase11UpdatePairsI16b2ContactManagerEEvPT_(i1, i1);
19576 STACKTOP = i2;
19577 return;
19578 }
19579 function __ZN16b2StackAllocatorC2Ev(i1) {
19580 i1 = i1 | 0;
19581 HEAP32[i1 + 102400 >> 2] = 0;
19582 HEAP32[i1 + 102404 >> 2] = 0;
19583 HEAP32[i1 + 102408 >> 2] = 0;
19584 HEAP32[i1 + 102796 >> 2] = 0;
19585 return;
19586 }
19587 function dynCall_viiii(i5, i4, i3, i2, i1) {
19588 i5 = i5 | 0;
19589 i4 = i4 | 0;
19590 i3 = i3 | 0;
19591 i2 = i2 | 0;
19592 i1 = i1 | 0;
19593 FUNCTION_TABLE_viiii[i5 & 15](i4 | 0, i3 | 0, i2 | 0, i1 | 0);
19594 }
19595 function dynCall_iiii(i4, i3, i2, i1) {
19596 i4 = i4 | 0;
19597 i3 = i3 | 0;
19598 i2 = i2 | 0;
19599 i1 = i1 | 0;
19600 return FUNCTION_TABLE_iiii[i4 & 7](i3 | 0, i2 | 0, i1 | 0) | 0;
19601 }
19602 function dynCall_viii(i4, i3, i2, i1) {
19603 i4 = i4 | 0;
19604 i3 = i3 | 0;
19605 i2 = i2 | 0;
19606 i1 = i1 | 0;
19607 FUNCTION_TABLE_viii[i4 & 3](i3 | 0, i2 | 0, i1 | 0);
19608 }
19609 function __ZNSt9bad_allocD0Ev(i1) {
19610 i1 = i1 | 0;
19611 var i2 = 0;
19612 i2 = STACKTOP;
19613 __ZNSt9exceptionD2Ev(i1 | 0);
19614 __ZdlPv(i1);
19615 STACKTOP = i2;
19616 return;
19617 }
19618 function stackAlloc(i1) {
19619 i1 = i1 | 0;
19620 var i2 = 0;
19621 i2 = STACKTOP;
19622 STACKTOP = STACKTOP + i1 | 0;
19623 STACKTOP = STACKTOP + 7 & -8;
19624 return i2 | 0;
19625 }
19626 function __ZN13b2DynamicTreeD2Ev(i1) {
19627 i1 = i1 | 0;
19628 var i2 = 0;
19629 i2 = STACKTOP;
19630 __Z6b2FreePv(HEAP32[i1 + 4 >> 2] | 0);
19631 STACKTOP = i2;
19632 return;
19633 }
19634 function dynCall_viid(i4, i3, i2, d1) {
19635 i4 = i4 | 0;
19636 i3 = i3 | 0;
19637 i2 = i2 | 0;
19638 d1 = +d1;
19639 FUNCTION_TABLE_viid[i4 & 3](i3 | 0, i2 | 0, +d1);
19640 }
19641 function __ZN17b2ContactListener9PostSolveEP9b2ContactPK16b2ContactImpulse(i1, i 2, i3) {
19642 i1 = i1 | 0;
19643 i2 = i2 | 0;
19644 i3 = i3 | 0;
19645 return;
19646 }
19647 function __ZN10__cxxabiv120__si_class_type_infoD0Ev(i1) {
19648 i1 = i1 | 0;
19649 var i2 = 0;
19650 i2 = STACKTOP;
19651 __ZdlPv(i1);
19652 STACKTOP = i2;
19653 return;
19654 }
19655 function __ZN10__cxxabiv117__class_type_infoD0Ev(i1) {
19656 i1 = i1 | 0;
19657 var i2 = 0;
19658 i2 = STACKTOP;
19659 __ZdlPv(i1);
19660 STACKTOP = i2;
19661 return;
19662 }
19663 function __ZNSt9bad_allocD2Ev(i1) {
19664 i1 = i1 | 0;
19665 var i2 = 0;
19666 i2 = STACKTOP;
19667 __ZNSt9exceptionD2Ev(i1 | 0);
19668 STACKTOP = i2;
19669 return;
19670 }
19671 function dynCall_iii(i3, i2, i1) {
19672 i3 = i3 | 0;
19673 i2 = i2 | 0;
19674 i1 = i1 | 0;
19675 return FUNCTION_TABLE_iii[i3 & 3](i2 | 0, i1 | 0) | 0;
19676 }
19677 function b8(i1, i2, i3, i4, i5, i6) {
19678 i1 = i1 | 0;
19679 i2 = i2 | 0;
19680 i3 = i3 | 0;
19681 i4 = i4 | 0;
19682 i5 = i5 | 0;
19683 i6 = i6 | 0;
19684 abort(8);
19685 }
19686 function __ZN25b2PolygonAndCircleContactD0Ev(i1) {
19687 i1 = i1 | 0;
19688 var i2 = 0;
19689 i2 = STACKTOP;
19690 __ZdlPv(i1);
19691 STACKTOP = i2;
19692 return;
19693 }
19694 function __ZN17b2ContactListener8PreSolveEP9b2ContactPK10b2Manifold(i1, i2, i3) {
19695 i1 = i1 | 0;
19696 i2 = i2 | 0;
19697 i3 = i3 | 0;
19698 return;
19699 }
19700 function __ZN24b2ChainAndPolygonContactD0Ev(i1) {
19701 i1 = i1 | 0;
19702 var i2 = 0;
19703 i2 = STACKTOP;
19704 __ZdlPv(i1);
19705 STACKTOP = i2;
19706 return;
19707 }
19708 function __ZN23b2EdgeAndPolygonContactD0Ev(i1) {
19709 i1 = i1 | 0;
19710 var i2 = 0;
19711 i2 = STACKTOP;
19712 __ZdlPv(i1);
19713 STACKTOP = i2;
19714 return;
19715 }
19716 function __ZN23b2ChainAndCircleContactD0Ev(i1) {
19717 i1 = i1 | 0;
19718 var i2 = 0;
19719 i2 = STACKTOP;
19720 __ZdlPv(i1);
19721 STACKTOP = i2;
19722 return;
19723 }
19724 function __ZNK11b2EdgeShape9TestPointERK11b2TransformRK6b2Vec2(i1, i2, i3) {
19725 i1 = i1 | 0;
19726 i2 = i2 | 0;
19727 i3 = i3 | 0;
19728 return 0;
19729 }
19730 function __ZN22b2EdgeAndCircleContactD0Ev(i1) {
19731 i1 = i1 | 0;
19732 var i2 = 0;
19733 i2 = STACKTOP;
19734 __ZdlPv(i1);
19735 STACKTOP = i2;
19736 return;
19737 }
19738 function __ZdlPv(i1) {
19739 i1 = i1 | 0;
19740 var i2 = 0;
19741 i2 = STACKTOP;
19742 if ((i1 | 0) != 0) {
19743 _free(i1);
19744 }
19745 STACKTOP = i2;
19746 return;
19747 }
19748 function b10(i1, i2, i3, i4, i5) {
19749 i1 = i1 | 0;
19750 i2 = i2 | 0;
19751 i3 = i3 | 0;
19752 i4 = i4 | 0;
19753 i5 = i5 | 0;
19754 abort(10);
19755 return 0;
19756 }
19757 function _strlen(i1) {
19758 i1 = i1 | 0;
19759 var i2 = 0;
19760 i2 = i1;
19761 while (HEAP8[i2] | 0) {
19762 i2 = i2 + 1 | 0;
19763 }
19764 return i2 - i1 | 0;
19765 }
19766 function __Z7b2Alloci(i1) {
19767 i1 = i1 | 0;
19768 var i2 = 0;
19769 i2 = STACKTOP;
19770 i1 = _malloc(i1) | 0;
19771 STACKTOP = i2;
19772 return i1 | 0;
19773 }
19774 function setThrew(i1, i2) {
19775 i1 = i1 | 0;
19776 i2 = i2 | 0;
19777 if ((__THREW__ | 0) == 0) {
19778 __THREW__ = i1;
19779 threwValue = i2;
19780 }
19781 }
19782 function __ZN17b2ContactListenerD0Ev(i1) {
19783 i1 = i1 | 0;
19784 var i2 = 0;
19785 i2 = STACKTOP;
19786 __ZdlPv(i1);
19787 STACKTOP = i2;
19788 return;
19789 }
19790 function __ZN16b2PolygonContactD0Ev(i1) {
19791 i1 = i1 | 0;
19792 var i2 = 0;
19793 i2 = STACKTOP;
19794 __ZdlPv(i1);
19795 STACKTOP = i2;
19796 return;
19797 }
19798 function dynCall_vii(i3, i2, i1) {
19799 i3 = i3 | 0;
19800 i2 = i2 | 0;
19801 i1 = i1 | 0;
19802 FUNCTION_TABLE_vii[i3 & 15](i2 | 0, i1 | 0);
19803 }
19804 function __ZN15b2ContactFilterD0Ev(i1) {
19805 i1 = i1 | 0;
19806 var i2 = 0;
19807 i2 = STACKTOP;
19808 __ZdlPv(i1);
19809 STACKTOP = i2;
19810 return;
19811 }
19812 function __ZN15b2CircleContactD0Ev(i1) {
19813 i1 = i1 | 0;
19814 var i2 = 0;
19815 i2 = STACKTOP;
19816 __ZdlPv(i1);
19817 STACKTOP = i2;
19818 return;
19819 }
19820 function __ZN14b2PolygonShapeD0Ev(i1) {
19821 i1 = i1 | 0;
19822 var i2 = 0;
19823 i2 = STACKTOP;
19824 __ZdlPv(i1);
19825 STACKTOP = i2;
19826 return;
19827 }
19828 function __Znaj(i1) {
19829 i1 = i1 | 0;
19830 var i2 = 0;
19831 i2 = STACKTOP;
19832 i1 = __Znwj(i1) | 0;
19833 STACKTOP = i2;
19834 return i1 | 0;
19835 }
19836 function __ZN11b2EdgeShapeD0Ev(i1) {
19837 i1 = i1 | 0;
19838 var i2 = 0;
19839 i2 = STACKTOP;
19840 __ZdlPv(i1);
19841 STACKTOP = i2;
19842 return;
19843 }
19844 function __ZN9b2ContactD0Ev(i1) {
19845 i1 = i1 | 0;
19846 var i2 = 0;
19847 i2 = STACKTOP;
19848 __ZdlPv(i1);
19849 STACKTOP = i2;
19850 return;
19851 }
19852 function b1(i1, i2, i3, i4, i5) {
19853 i1 = i1 | 0;
19854 i2 = i2 | 0;
19855 i3 = i3 | 0;
19856 i4 = i4 | 0;
19857 i5 = i5 | 0;
19858 abort(1);
19859 }
19860 function __Z6b2FreePv(i1) {
19861 i1 = i1 | 0;
19862 var i2 = 0;
19863 i2 = STACKTOP;
19864 _free(i1);
19865 STACKTOP = i2;
19866 return;
19867 }
19868 function ___clang_call_terminate(i1) {
19869 i1 = i1 | 0;
19870 ___cxa_begin_catch(i1 | 0) | 0;
19871 __ZSt9terminatev();
19872 }
19873 function __ZN17b2ContactListener12BeginContactEP9b2Contact(i1, i2) {
19874 i1 = i1 | 0;
19875 i2 = i2 | 0;
19876 return;
19877 }
19878 function dynCall_ii(i2, i1) {
19879 i2 = i2 | 0;
19880 i1 = i1 | 0;
19881 return FUNCTION_TABLE_ii[i2 & 3](i1 | 0) | 0;
19882 }
19883 function __ZN17b2ContactListener10EndContactEP9b2Contact(i1, i2) {
19884 i1 = i1 | 0;
19885 i2 = i2 | 0;
19886 return;
19887 }
19888 function b11(i1, i2, i3, i4) {
19889 i1 = i1 | 0;
19890 i2 = i2 | 0;
19891 i3 = i3 | 0;
19892 i4 = i4 | 0;
19893 abort(11);
19894 }
19895 function dynCall_vi(i2, i1) {
19896 i2 = i2 | 0;
19897 i1 = i1 | 0;
19898 FUNCTION_TABLE_vi[i2 & 31](i1 | 0);
19899 }
19900 function b0(i1, i2, i3) {
19901 i1 = i1 | 0;
19902 i2 = i2 | 0;
19903 i3 = i3 | 0;
19904 abort(0);
19905 return 0;
19906 }
19907 function __ZNK10__cxxabiv116__shim_type_info5noop2Ev(i1) {
19908 i1 = i1 | 0;
19909 return;
19910 }
19911 function __ZNK10__cxxabiv116__shim_type_info5noop1Ev(i1) {
19912 i1 = i1 | 0;
19913 return;
19914 }
19915 function b5(i1, i2, i3) {
19916 i1 = i1 | 0;
19917 i2 = i2 | 0;
19918 i3 = i3 | 0;
19919 abort(5);
19920 }
19921 function __ZNK14b2PolygonShape13GetChildCountEv(i1) {
19922 i1 = i1 | 0;
19923 return 1;
19924 }
19925 function __ZN10__cxxabiv116__shim_type_infoD2Ev(i1) {
19926 i1 = i1 | 0;
19927 return;
19928 }
19929 function b7(i1, i2, d3) {
19930 i1 = i1 | 0;
19931 i2 = i2 | 0;
19932 d3 = +d3;
19933 abort(7);
19934 }
19935 function __ZNK11b2EdgeShape13GetChildCountEv(i1) {
19936 i1 = i1 | 0;
19937 return 1;
19938 }
19939 function __ZNK7b2Timer15GetMillisecondsEv(i1) {
19940 i1 = i1 | 0;
19941 return 0.0;
19942 }
19943 function __ZN25b2PolygonAndCircleContactD1Ev(i1) {
19944 i1 = i1 | 0;
19945 return;
19946 }
19947 function __ZN24b2ChainAndPolygonContactD1Ev(i1) {
19948 i1 = i1 | 0;
19949 return;
19950 }
19951 function b9(i1, i2) {
19952 i1 = i1 | 0;
19953 i2 = i2 | 0;
19954 abort(9);
19955 return 0;
19956 }
19957 function __ZN23b2EdgeAndPolygonContactD1Ev(i1) {
19958 i1 = i1 | 0;
19959 return;
19960 }
19961 function __ZN23b2ChainAndCircleContactD1Ev(i1) {
19962 i1 = i1 | 0;
19963 return;
19964 }
19965 function __ZN22b2EdgeAndCircleContactD1Ev(i1) {
19966 i1 = i1 | 0;
19967 return;
19968 }
19969 function dynCall_v(i1) {
19970 i1 = i1 | 0;
19971 FUNCTION_TABLE_v[i1 & 3]();
19972 }
19973 function __ZNKSt9bad_alloc4whatEv(i1) {
19974 i1 = i1 | 0;
19975 return 7688;
19976 }
19977 function ___cxa_pure_virtual__wrapper() {
19978 ___cxa_pure_virtual();
19979 }
19980 function __ZN17b2ContactListenerD1Ev(i1) {
19981 i1 = i1 | 0;
19982 return;
19983 }
19984 function __ZN16b2PolygonContactD1Ev(i1) {
19985 i1 = i1 | 0;
19986 return;
19987 }
19988 function __ZN15b2ContactFilterD1Ev(i1) {
19989 i1 = i1 | 0;
19990 return;
19991 }
19992 function __ZN15b2CircleContactD1Ev(i1) {
19993 i1 = i1 | 0;
19994 return;
19995 }
19996 function __ZN14b2PolygonShapeD1Ev(i1) {
19997 i1 = i1 | 0;
19998 return;
19999 }
20000 function b3(i1, i2) {
20001 i1 = i1 | 0;
20002 i2 = i2 | 0;
20003 abort(3);
20004 }
20005 function runPostSets() {
20006 HEAP32[1932] = __ZTISt9exception;
20007 }
20008 function __ZN11b2EdgeShapeD1Ev(i1) {
20009 i1 = i1 | 0;
20010 return;
20011 }
20012 function __ZNSt9type_infoD2Ev(i1) {
20013 i1 = i1 | 0;
20014 return;
20015 }
20016 function __ZN7b2Timer5ResetEv(i1) {
20017 i1 = i1 | 0;
20018 return;
20019 }
20020 function stackRestore(i1) {
20021 i1 = i1 | 0;
20022 STACKTOP = i1;
20023 }
20024 function setTempRet9(i1) {
20025 i1 = i1 | 0;
20026 tempRet9 = i1;
20027 }
20028 function setTempRet8(i1) {
20029 i1 = i1 | 0;
20030 tempRet8 = i1;
20031 }
20032 function setTempRet7(i1) {
20033 i1 = i1 | 0;
20034 tempRet7 = i1;
20035 }
20036 function setTempRet6(i1) {
20037 i1 = i1 | 0;
20038 tempRet6 = i1;
20039 }
20040 function setTempRet5(i1) {
20041 i1 = i1 | 0;
20042 tempRet5 = i1;
20043 }
20044 function setTempRet4(i1) {
20045 i1 = i1 | 0;
20046 tempRet4 = i1;
20047 }
20048 function setTempRet3(i1) {
20049 i1 = i1 | 0;
20050 tempRet3 = i1;
20051 }
20052 function setTempRet2(i1) {
20053 i1 = i1 | 0;
20054 tempRet2 = i1;
20055 }
20056 function setTempRet1(i1) {
20057 i1 = i1 | 0;
20058 tempRet1 = i1;
20059 }
20060 function setTempRet0(i1) {
20061 i1 = i1 | 0;
20062 tempRet0 = i1;
20063 }
20064 function __ZN9b2ContactD1Ev(i1) {
20065 i1 = i1 | 0;
20066 return;
20067 }
20068 function __ZN7b2TimerC2Ev(i1) {
20069 i1 = i1 | 0;
20070 return;
20071 }
20072 function b4(i1) {
20073 i1 = i1 | 0;
20074 abort(4);
20075 return 0;
20076 }
20077 function stackSave() {
20078 return STACKTOP | 0;
20079 }
20080 function b2(i1) {
20081 i1 = i1 | 0;
20082 abort(2);
20083 }
20084 function b6() {
20085 abort(6);
20086 }
20087
20088 // EMSCRIPTEN_END_FUNCS
20089 var FUNCTION_TABLE_iiii = [b0,__ZNK11b2EdgeShape9TestPointERK11b2TransformRK6b 2Vec2,__ZNK14b2PolygonShape9TestPointERK11b2TransformRK6b2Vec2,__ZN15b2ContactFi lter13ShouldCollideEP9b2FixtureS1_,__ZNK10__cxxabiv117__class_type_info9can_catc hEPKNS_16__shim_type_infoERPv,b0,b0,b0];
20090 var FUNCTION_TABLE_viiiii = [b1,__ZNK10__cxxabiv117__class_type_info16search_b elow_dstEPNS_19__dynamic_cast_infoEPKvib,__ZNK10__cxxabiv120__si_class_type_info 16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b1];
20091 var FUNCTION_TABLE_vi = [b2,__ZN11b2EdgeShapeD1Ev,__ZN11b2EdgeShapeD0Ev,__ZN14 b2PolygonShapeD1Ev,__ZN14b2PolygonShapeD0Ev,__ZN17b2ContactListenerD1Ev,__ZN17b2 ContactListenerD0Ev,__ZN15b2ContactFilterD1Ev,__ZN15b2ContactFilterD0Ev,__ZN9b2C ontactD1Ev,__ZN9b2ContactD0Ev,__ZN22b2EdgeAndCircleContactD1Ev,__ZN22b2EdgeAndCi rcleContactD0Ev,__ZN23b2EdgeAndPolygonContactD1Ev,__ZN23b2EdgeAndPolygonContactD 0Ev,__ZN25b2PolygonAndCircleContactD1Ev,__ZN25b2PolygonAndCircleContactD0Ev,__ZN 16b2PolygonContactD1Ev,__ZN16b2PolygonContactD0Ev,__ZN23b2ChainAndCircleContactD 1Ev,__ZN23b2ChainAndCircleContactD0Ev,__ZN24b2ChainAndPolygonContactD1Ev,__ZN24b 2ChainAndPolygonContactD0Ev,__ZN15b2CircleContactD1Ev,__ZN15b2CircleContactD0Ev, __ZN10__cxxabiv116__shim_type_infoD2Ev,__ZN10__cxxabiv117__class_type_infoD0Ev,_ _ZNK10__cxxabiv116__shim_type_info5noop1Ev,__ZNK10__cxxabiv116__shim_type_info5n oop2Ev
20092 ,__ZN10__cxxabiv120__si_class_type_infoD0Ev,__ZNSt9bad_allocD2Ev,__ZNSt9bad_al locD0Ev];
20093 var FUNCTION_TABLE_vii = [b3,__ZN17b2ContactListener12BeginContactEP9b2Contact ,__ZN17b2ContactListener10EndContactEP9b2Contact,__ZN15b2CircleContact7DestroyEP 9b2ContactP16b2BlockAllocator,__ZN25b2PolygonAndCircleContact7DestroyEP9b2Contac tP16b2BlockAllocator,__ZN16b2PolygonContact7DestroyEP9b2ContactP16b2BlockAllocat or,__ZN22b2EdgeAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN23b2E dgeAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN23b2ChainAndCirc leContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN24b2ChainAndPolygonContact7 DestroyEP9b2ContactP16b2BlockAllocator,b3,b3,b3,b3,b3,b3];
20094 var FUNCTION_TABLE_ii = [b4,__ZNK11b2EdgeShape13GetChildCountEv,__ZNK14b2Polyg onShape13GetChildCountEv,__ZNKSt9bad_alloc4whatEv];
20095 var FUNCTION_TABLE_viii = [b5,__ZN17b2ContactListener8PreSolveEP9b2ContactPK10 b2Manifold,__ZN17b2ContactListener9PostSolveEP9b2ContactPK16b2ContactImpulse,b5] ;
20096 var FUNCTION_TABLE_v = [b6,___cxa_pure_virtual__wrapper,__Z4iterv,b6];
20097 var FUNCTION_TABLE_viid = [b7,__ZNK11b2EdgeShape11ComputeMassEP10b2MassDataf,_ _ZNK14b2PolygonShape11ComputeMassEP10b2MassDataf,b7];
20098 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];
20099 var FUNCTION_TABLE_iii = [b9,__ZNK11b2EdgeShape5CloneEP16b2BlockAllocator,__ZN K14b2PolygonShape5CloneEP16b2BlockAllocator,__Z14b2PairLessThanRK6b2PairS1_];
20100 var FUNCTION_TABLE_iiiiii = [b10,__ZNK11b2EdgeShape7RayCastEP15b2RayCastOutput RK14b2RayCastInputRK11b2Transformi,__ZNK14b2PolygonShape7RayCastEP15b2RayCastOut putRK14b2RayCastInputRK11b2Transformi,__ZN15b2CircleContact6CreateEP9b2FixtureiS 1_iP16b2BlockAllocator,__ZN25b2PolygonAndCircleContact6CreateEP9b2FixtureiS1_iP1 6b2BlockAllocator,__ZN16b2PolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAlloca tor,__ZN22b2EdgeAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN 23b2EdgeAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN23b2Cha inAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN24b2ChainAndPo lygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,b10,b10,b10,b10,b10,b10] ;
20101 var FUNCTION_TABLE_viiii = [b11,__ZNK11b2EdgeShape11ComputeAABBEP6b2AABBRK11b2 Transformi,__ZNK14b2PolygonShape11ComputeAABBEP6b2AABBRK11b2Transformi,__ZN22b2E dgeAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN23b2EdgeAndPoly gonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN25b2PolygonAndCircleCont act8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN16b2PolygonContact8EvaluateEP10 b2ManifoldRK11b2TransformS4_,__ZN23b2ChainAndCircleContact8EvaluateEP10b2Manifol dRK11b2TransformS4_,__ZN24b2ChainAndPolygonContact8EvaluateEP10b2ManifoldRK11b2T ransformS4_,__ZN15b2CircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZNK 10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cas t_infoEPvi,__ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseE PNS_19__dynamic_cast_infoEPvi,b11,b11,b11,b11];
20102
20103 return { _strlen: _strlen, _free: _free, _main: _main, _memset: _memset, _mall oc: _malloc, _memcpy: _memcpy, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, setThrew: setThrew, setTempRe t0: setTempRet0, setTempRet1: setTempRet1, setTempRet2: setTempRet2, setTempRet3 : setTempRet3, setTempRet4: setTempRet4, setTempRet5: setTempRet5, setTempRet6: setTempRet6, setTempRet7: setTempRet7, setTempRet8: setTempRet8, setTempRet9: se tTempRet9, dynCall_iiii: dynCall_iiii, dynCall_viiiii: dynCall_viiiii, dynCall_v i: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_ii: dynCall_ii, dynCall_viii: d ynCall_viii, dynCall_v: dynCall_v, dynCall_viid: dynCall_viid, dynCall_viiiiii: dynCall_viiiiii, dynCall_iii: dynCall_iii, dynCall_iiiiii: dynCall_iiiiii, dynCa ll_viiii: dynCall_viiii };
20104 })
20105 // EMSCRIPTEN_END_ASM
20106 ({ "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": as mPrintFloat, "min": Math_min, "invoke_iiii": invoke_iiii, "invoke_viiiii": invok e_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": i nvoke_iiiiii, "invoke_viiii": invoke_viiii, "___cxa_throw": ___cxa_throw, "_emsc ripten_run_script": _emscripten_run_script, "_cosf": _cosf, "_send": _send, "__Z St9terminatev": __ZSt9terminatev, "__reallyNegative": __reallyNegative, "___cxa_ is_number_type": ___cxa_is_number_type, "___assert_fail": ___assert_fail, "___cx a_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, "__ZSt18 uncaught_exceptionv": __ZSt18uncaught_exceptionv, "_sysconf": _sysconf, "_clock" : _clock, "_emscripten_memcpy_big": _emscripten_memcpy_big, "_puts": _puts, "_mk port": _mkport, "_floorf": _floorf, "_sqrtf": _sqrtf, "_write": _write, "_emscri pten_set_main_loop": _emscripten_set_main_loop, "___errno_location": ___errno_lo cation, "__ZNSt9exceptionD2Ev": __ZNSt9exceptionD2Ev, "_printf": _printf, "___cx a_does_inherit": ___cxa_does_inherit, "__exit": __exit, "_fputc": _fputc, "_abor t": _abort, "_fwrite": _fwrite, "_time": _time, "_fprintf": _fprintf, "_emscript en_cancel_main_loop": _emscripten_cancel_main_loop, "__formatString": __formatSt ring, "_fputs": _fputs, "_exit": _exit, "___cxa_pure_virtual": ___cxa_pure_virtu al, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr , "ABORT": ABORT, "NaN": NaN, "Infinity": Infinity, "__ZTISt9exception": __ZTISt 9exception }, buffer);
20107 var _strlen = Module["_strlen"] = asm["_strlen"];
20108 var _free = Module["_free"] = asm["_free"];
20109 var _main = Module["_main"] = asm["_main"];
20110 var _memset = Module["_memset"] = asm["_memset"];
20111 var _malloc = Module["_malloc"] = asm["_malloc"];
20112 var _memcpy = Module["_memcpy"] = asm["_memcpy"];
20113 var runPostSets = Module["runPostSets"] = asm["runPostSets"];
20114 var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"];
20115 var dynCall_viiiii = Module["dynCall_viiiii"] = asm["dynCall_viiiii"];
20116 var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"];
20117 var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
20118 var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"];
20119 var dynCall_viii = Module["dynCall_viii"] = asm["dynCall_viii"];
20120 var dynCall_v = Module["dynCall_v"] = asm["dynCall_v"];
20121 var dynCall_viid = Module["dynCall_viid"] = asm["dynCall_viid"];
20122 var dynCall_viiiiii = Module["dynCall_viiiiii"] = asm["dynCall_viiiiii"];
20123 var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"];
20124 var dynCall_iiiiii = Module["dynCall_iiiiii"] = asm["dynCall_iiiiii"];
20125 var dynCall_viiii = Module["dynCall_viiii"] = asm["dynCall_viiii"];
20126
20127 Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) };
20128 Runtime.stackSave = function() { return asm['stackSave']() };
20129 Runtime.stackRestore = function(top) { asm['stackRestore'](top) };
20130
20131
20132 // Warning: printing of i64 values may be slightly rounded! No deep i64 math use d, so precise i64 code not included
20133 var i64Math = null;
20134
20135 // === Auto-generated postamble setup entry stuff ===
20136
20137 if (memoryInitializer) {
20138 if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
20139 var data = Module['readBinary'](memoryInitializer);
20140 HEAPU8.set(data, STATIC_BASE);
20141 } else {
20142 addRunDependency('memory initializer');
20143 Browser.asyncLoad(memoryInitializer, function(data) {
20144 HEAPU8.set(data, STATIC_BASE);
20145 removeRunDependency('memory initializer');
20146 }, function(data) {
20147 throw 'could not load memory initializer ' + memoryInitializer;
20148 });
20149 }
20150 }
20151
20152 function ExitStatus(status) {
20153 this.name = "ExitStatus";
20154 this.message = "Program terminated with exit(" + status + ")";
20155 this.status = status;
20156 };
20157 ExitStatus.prototype = new Error();
20158 ExitStatus.prototype.constructor = ExitStatus;
20159
20160 var initialStackTop;
20161 var preloadStartTime = null;
20162 var calledMain = false;
20163
20164 dependenciesFulfilled = function runCaller() {
20165 // If run has never been called, and we should call run (INVOKE_RUN is true, a nd Module.noInitialRun is not false)
20166 if (!Module['calledRun'] && shouldRunNow) run([].concat(Module["arguments"]));
20167 if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
20168 }
20169
20170 Module['callMain'] = Module.callMain = function callMain(args) {
20171 assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
20172 assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remai n to be called');
20173
20174 args = args || [];
20175
20176 ensureInitRuntime();
20177
20178 var argc = args.length+1;
20179 function pad() {
20180 for (var i = 0; i < 4-1; i++) {
20181 argv.push(0);
20182 }
20183 }
20184 var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORM AL) ];
20185 pad();
20186 for (var i = 0; i < argc-1; i = i + 1) {
20187 argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
20188 pad();
20189 }
20190 argv.push(0);
20191 argv = allocate(argv, 'i32', ALLOC_NORMAL);
20192
20193 initialStackTop = STACKTOP;
20194
20195 try {
20196
20197 var ret = Module['_main'](argc, argv, 0);
20198
20199
20200 // if we're not running an evented main loop, it's time to exit
20201 if (!Module['noExitRuntime']) {
20202 exit(ret);
20203 }
20204 }
20205 catch(e) {
20206 if (e instanceof ExitStatus) {
20207 // exit() throws this once it's done to make sure execution
20208 // has been stopped completely
20209 return;
20210 } else if (e == 'SimulateInfiniteLoop') {
20211 // running an evented main loop, don't immediately exit
20212 Module['noExitRuntime'] = true;
20213 return;
20214 } else {
20215 if (e && typeof e === 'object' && e.stack) Module.printErr('exception thro wn: ' + [e, e.stack]);
20216 throw e;
20217 }
20218 } finally {
20219 calledMain = true;
20220 }
20221 }
20222
20223
20224
20225
20226 function run(args) {
20227 args = args || Module['arguments'];
20228
20229 if (preloadStartTime === null) preloadStartTime = Date.now();
20230
20231 if (runDependencies > 0) {
20232 Module.printErr('run() called, but dependencies remain, so not running');
20233 return;
20234 }
20235
20236 preRun();
20237
20238 if (runDependencies > 0) return; // a preRun added a dependency, run will be c alled later
20239 if (Module['calledRun']) return; // run may have just been called through depe ndencies being fulfilled just in this very frame
20240
20241 function doRun() {
20242 if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening
20243 Module['calledRun'] = true;
20244
20245 ensureInitRuntime();
20246
20247 preMain();
20248
20249 if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
20250 Module.printErr('pre-main prep time: ' + (Date.now() - preloadStartTime) + ' ms');
20251 }
20252
20253 if (Module['_main'] && shouldRunNow) {
20254 Module['callMain'](args);
20255 }
20256
20257 postRun();
20258 }
20259
20260 if (Module['setStatus']) {
20261 Module['setStatus']('Running...');
20262 setTimeout(function() {
20263 setTimeout(function() {
20264 Module['setStatus']('');
20265 }, 1);
20266 if (!ABORT) doRun();
20267 }, 1);
20268 } else {
20269 doRun();
20270 }
20271 }
20272 Module['run'] = Module.run = run;
20273
20274 function exit(status) {
20275 ABORT = true;
20276 EXITSTATUS = status;
20277 STACKTOP = initialStackTop;
20278
20279 // exit the runtime
20280 exitRuntime();
20281
20282 // TODO We should handle this differently based on environment.
20283 // In the browser, the best we can do is throw an exception
20284 // to halt execution, but in node we could process.exit and
20285 // I'd imagine SM shell would have something equivalent.
20286 // This would let us set a proper exit status (which
20287 // would be great for checking test exit statuses).
20288 // https://github.com/kripken/emscripten/issues/1371
20289
20290 // throw an exception to halt the current execution
20291 throw new ExitStatus(status);
20292 }
20293 Module['exit'] = Module.exit = exit;
20294
20295 function abort(text) {
20296 if (text) {
20297 Module.print(text);
20298 Module.printErr(text);
20299 }
20300
20301 ABORT = true;
20302 EXITSTATUS = 1;
20303
20304 var extra = '\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.';
20305
20306 throw 'abort() at ' + stackTrace() + extra;
20307 }
20308 Module['abort'] = Module.abort = abort;
20309
20310 // {{PRE_RUN_ADDITIONS}}
20311
20312 if (Module['preInit']) {
20313 if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preIn it']];
20314 while (Module['preInit'].length > 0) {
20315 Module['preInit'].pop()();
20316 }
20317 }
20318
20319 // shouldRunNow refers to calling main(), not run().
20320 var shouldRunNow = true;
20321 if (Module['noInitialRun']) {
20322 shouldRunNow = false;
20323 }
20324
20325
20326 run([].concat(Module["arguments"]));
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/asm/embenchen/copy.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698