1var EXPECTED_OUTPUT = 'sizes: 100000,25906\nok.\n';
2var Module = {
3  arguments: [1],
4  print: function(x) {Module.printBuffer += x + '\n';},
5  preRun: [function() {Module.printBuffer = ''}],
6  postRun: [function() {
7    assertEquals(EXPECTED_OUTPUT, Module.printBuffer);
8  }],
9};
10// The Module object: Our interface to the outside world. We import
11// and export values on it, and do the work to get that through
12// closure compiler if necessary. There are various ways Module can be used:
13// 1. Not defined. We create it here
14// 2. A function parameter, function(Module) { ..generated code.. }
15// 3. pre-run appended it, var Module = {}; ..generated code..
16// 4. External script tag defines var Module.
17// We need to do an eval in order to handle the closure compiler
18// case, where this code here is minified but Module was defined
19// elsewhere (e.g. case 4 above). We also need to check if Module
20// already exists (e.g. case 3 above).
21// Note that if you want to run closure, and also to use Module
22// after the generated code, you will need to define   var Module = {};
23// before the code. Then that object will be used in the code, and you
24// can continue to use Module afterwards as well.
25var Module;
26if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
27
28// Sometimes an existing Module object exists with properties
29// meant to overwrite the default module functionality. Here
30// we collect those properties and reapply _after_ we configure
31// the current environment's defaults to avoid having to be so
32// defensive during initialization.
33var moduleOverrides = {};
34for (var key in Module) {
35  if (Module.hasOwnProperty(key)) {
36    moduleOverrides[key] = Module[key];
37  }
38}
39
40// The environment setup code below is customized to use Module.
41// *** Environment setup code ***
42var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
43var ENVIRONMENT_IS_WEB = typeof window === 'object';
44var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
45var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
46
47if (ENVIRONMENT_IS_NODE) {
48  // Expose functionality in the same simple way that the shells work
49  // Note that we pollute the global namespace here, otherwise we break in node
50  if (!Module['print']) Module['print'] = function print(x) {
51    process['stdout'].write(x + '\n');
52  };
53  if (!Module['printErr']) Module['printErr'] = function printErr(x) {
54    process['stderr'].write(x + '\n');
55  };
56
57  var nodeFS = require('fs');
58  var nodePath = require('path');
59
60  Module['read'] = function read(filename, binary) {
61    filename = nodePath['normalize'](filename);
62    var ret = nodeFS['readFileSync'](filename);
63    // The path is absolute if the normalized version is the same as the resolved.
64    if (!ret && filename != nodePath['resolve'](filename)) {
65      filename = path.join(__dirname, '..', 'src', filename);
66      ret = nodeFS['readFileSync'](filename);
67    }
68    if (ret && !binary) ret = ret.toString();
69    return ret;
70  };
71
72  Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) };
73
74  Module['load'] = function load(f) {
75    globalEval(read(f));
76  };
77
78  Module['arguments'] = process['argv'].slice(2);
79
80  module['exports'] = Module;
81}
82else if (ENVIRONMENT_IS_SHELL) {
83  if (!Module['print']) Module['print'] = print;
84  if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
85
86  if (typeof read != 'undefined') {
87    Module['read'] = read;
88  } else {
89    Module['read'] = function read() { throw 'no read() available (jsc?)' };
90  }
91
92  Module['readBinary'] = function readBinary(f) {
93    return read(f, 'binary');
94  };
95
96  if (typeof scriptArgs != 'undefined') {
97    Module['arguments'] = scriptArgs;
98  } else if (typeof arguments != 'undefined') {
99    Module['arguments'] = arguments;
100  }
101
102  this['Module'] = Module;
103
104  eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined"); // wipe out the SpiderMonkey shell 'gc' function, which can confuse closure (uses it as a minified name, and it is then initted to a non-falsey value unexpectedly)
105}
106else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
107  Module['read'] = function read(url) {
108    var xhr = new XMLHttpRequest();
109    xhr.open('GET', url, false);
110    xhr.send(null);
111    return xhr.responseText;
112  };
113
114  if (typeof arguments != 'undefined') {
115    Module['arguments'] = arguments;
116  }
117
118  if (typeof console !== 'undefined') {
119    if (!Module['print']) Module['print'] = function print(x) {
120      console.log(x);
121    };
122    if (!Module['printErr']) Module['printErr'] = function printErr(x) {
123      console.log(x);
124    };
125  } else {
126    // Probably a worker, and without console.log. We can do very little here...
127    var TRY_USE_DUMP = false;
128    if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
129      dump(x);
130    }) : (function(x) {
131      // self.postMessage(x); // enable this if you want stdout to be sent as messages
132    }));
133  }
134
135  if (ENVIRONMENT_IS_WEB) {
136    window['Module'] = Module;
137  } else {
138    Module['load'] = importScripts;
139  }
140}
141else {
142  // Unreachable because SHELL is dependant on the others
143  throw 'Unknown runtime environment. Where are we?';
144}
145
146function globalEval(x) {
147  eval.call(null, x);
148}
149if (!Module['load'] == 'undefined' && Module['read']) {
150  Module['load'] = function load(f) {
151    globalEval(Module['read'](f));
152  };
153}
154if (!Module['print']) {
155  Module['print'] = function(){};
156}
157if (!Module['printErr']) {
158  Module['printErr'] = Module['print'];
159}
160if (!Module['arguments']) {
161  Module['arguments'] = [];
162}
163// *** Environment setup code ***
164
165// Closure helpers
166Module.print = Module['print'];
167Module.printErr = Module['printErr'];
168
169// Callbacks
170Module['preRun'] = [];
171Module['postRun'] = [];
172
173// Merge back in the overrides
174for (var key in moduleOverrides) {
175  if (moduleOverrides.hasOwnProperty(key)) {
176    Module[key] = moduleOverrides[key];
177  }
178}
179
180
181
182// === Auto-generated preamble library stuff ===
183
184//========================================
185// Runtime code shared with compiler
186//========================================
187
188var Runtime = {
189  stackSave: function () {
190    return STACKTOP;
191  },
192  stackRestore: function (stackTop) {
193    STACKTOP = stackTop;
194  },
195  forceAlign: function (target, quantum) {
196    quantum = quantum || 4;
197    if (quantum == 1) return target;
198    if (isNumber(target) && isNumber(quantum)) {
199      return Math.ceil(target/quantum)*quantum;
200    } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
201      return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')';
202    }
203    return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
204  },
205  isNumberType: function (type) {
206    return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
207  },
208  isPointerType: function isPointerType(type) {
209  return type[type.length-1] == '*';
210},
211  isStructType: function isStructType(type) {
212  if (isPointerType(type)) return false;
213  if (isArrayType(type)) return true;
214  if (/<?\{ ?[^}]* ?\}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types
215  // See comment in isStructPointerType()
216  return type[0] == '%';
217},
218  INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
219  FLOAT_TYPES: {"float":0,"double":0},
220  or64: function (x, y) {
221    var l = (x | 0) | (y | 0);
222    var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
223    return l + h;
224  },
225  and64: function (x, y) {
226    var l = (x | 0) & (y | 0);
227    var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
228    return l + h;
229  },
230  xor64: function (x, y) {
231    var l = (x | 0) ^ (y | 0);
232    var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
233    return l + h;
234  },
235  getNativeTypeSize: function (type) {
236    switch (type) {
237      case 'i1': case 'i8': return 1;
238      case 'i16': return 2;
239      case 'i32': return 4;
240      case 'i64': return 8;
241      case 'float': return 4;
242      case 'double': return 8;
243      default: {
244        if (type[type.length-1] === '*') {
245          return Runtime.QUANTUM_SIZE; // A pointer
246        } else if (type[0] === 'i') {
247          var bits = parseInt(type.substr(1));
248          assert(bits % 8 === 0);
249          return bits/8;
250        } else {
251          return 0;
252        }
253      }
254    }
255  },
256  getNativeFieldSize: function (type) {
257    return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
258  },
259  dedup: function dedup(items, ident) {
260  var seen = {};
261  if (ident) {
262    return items.filter(function(item) {
263      if (seen[item[ident]]) return false;
264      seen[item[ident]] = true;
265      return true;
266    });
267  } else {
268    return items.filter(function(item) {
269      if (seen[item]) return false;
270      seen[item] = true;
271      return true;
272    });
273  }
274},
275  set: function set() {
276  var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
277  var ret = {};
278  for (var i = 0; i < args.length; i++) {
279    ret[args[i]] = 0;
280  }
281  return ret;
282},
283  STACK_ALIGN: 8,
284  getAlignSize: function (type, size, vararg) {
285    // we align i64s and doubles on 64-bit boundaries, unlike x86
286    if (!vararg && (type == 'i64' || type == 'double')) return 8;
287    if (!type) return Math.min(size, 8); // align structures internally to 64 bits
288    return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
289  },
290  calculateStructAlignment: function calculateStructAlignment(type) {
291    type.flatSize = 0;
292    type.alignSize = 0;
293    var diffs = [];
294    var prev = -1;
295    var index = 0;
296    type.flatIndexes = type.fields.map(function(field) {
297      index++;
298      var size, alignSize;
299      if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
300        size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
301        alignSize = Runtime.getAlignSize(field, size);
302      } else if (Runtime.isStructType(field)) {
303        if (field[1] === '0') {
304          // this is [0 x something]. When inside another structure like here, it must be at the end,
305          // and it adds no size
306          // XXX this happens in java-nbody for example... assert(index === type.fields.length, 'zero-length in the middle!');
307          size = 0;
308          if (Types.types[field]) {
309            alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
310          } else {
311            alignSize = type.alignSize || QUANTUM_SIZE;
312          }
313        } else {
314          size = Types.types[field].flatSize;
315          alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
316        }
317      } else if (field[0] == 'b') {
318        // bN, large number field, like a [N x i8]
319        size = field.substr(1)|0;
320        alignSize = 1;
321      } else if (field[0] === '<') {
322        // vector type
323        size = alignSize = Types.types[field].flatSize; // fully aligned
324      } else if (field[0] === 'i') {
325        // illegal integer field, that could not be legalized because it is an internal structure field
326        // it is ok to have such fields, if we just use them as markers of field size and nothing more complex
327        size = alignSize = parseInt(field.substr(1))/8;
328        assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field);
329      } else {
330        assert(false, 'invalid type for calculateStructAlignment');
331      }
332      if (type.packed) alignSize = 1;
333      type.alignSize = Math.max(type.alignSize, alignSize);
334      var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
335      type.flatSize = curr + size;
336      if (prev >= 0) {
337        diffs.push(curr-prev);
338      }
339      prev = curr;
340      return curr;
341    });
342    if (type.name_ && type.name_[0] === '[') {
343      // arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid
344      // allocating a potentially huge array for [999999 x i8] etc.
345      type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2;
346    }
347    type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
348    if (diffs.length == 0) {
349      type.flatFactor = type.flatSize;
350    } else if (Runtime.dedup(diffs).length == 1) {
351      type.flatFactor = diffs[0];
352    }
353    type.needsFlattening = (type.flatFactor != 1);
354    return type.flatIndexes;
355  },
356  generateStructInfo: function (struct, typeName, offset) {
357    var type, alignment;
358    if (typeName) {
359      offset = offset || 0;
360      type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName];
361      if (!type) return null;
362      if (type.fields.length != struct.length) {
363        printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
364        return null;
365      }
366      alignment = type.flatIndexes;
367    } else {
368      var type = { fields: struct.map(function(item) { return item[0] }) };
369      alignment = Runtime.calculateStructAlignment(type);
370    }
371    var ret = {
372      __size__: type.flatSize
373    };
374    if (typeName) {
375      struct.forEach(function(item, i) {
376        if (typeof item === 'string') {
377          ret[item] = alignment[i] + offset;
378        } else {
379          // embedded struct
380          var key;
381          for (var k in item) key = k;
382          ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]);
383        }
384      });
385    } else {
386      struct.forEach(function(item, i) {
387        ret[item[1]] = alignment[i];
388      });
389    }
390    return ret;
391  },
392  dynCall: function (sig, ptr, args) {
393    if (args && args.length) {
394      if (!args.splice) args = Array.prototype.slice.call(args);
395      args.splice(0, 0, ptr);
396      return Module['dynCall_' + sig].apply(null, args);
397    } else {
398      return Module['dynCall_' + sig].call(null, ptr);
399    }
400  },
401  functionPointers: [],
402  addFunction: function (func) {
403    for (var i = 0; i < Runtime.functionPointers.length; i++) {
404      if (!Runtime.functionPointers[i]) {
405        Runtime.functionPointers[i] = func;
406        return 2*(1 + i);
407      }
408    }
409    throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
410  },
411  removeFunction: function (index) {
412    Runtime.functionPointers[(index-2)/2] = null;
413  },
414  getAsmConst: function (code, numArgs) {
415    // code is a constant string on the heap, so we can cache these
416    if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
417    var func = Runtime.asmConstCache[code];
418    if (func) return func;
419    var args = [];
420    for (var i = 0; i < numArgs; i++) {
421      args.push(String.fromCharCode(36) + i); // $0, $1 etc
422    }
423    var source = Pointer_stringify(code);
424    if (source[0] === '"') {
425      // tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct
426      if (source.indexOf('"', 1) === source.length-1) {
427        source = source.substr(1, source.length-2);
428      } else {
429        // something invalid happened, e.g. EM_ASM("..code($0)..", input)
430        abort('invalid EM_ASM input |' + source + '|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)');
431      }
432    }
433    try {
434      var evalled = eval('(function(' + args.join(',') + '){ ' + source + ' })'); // new Function does not allow upvars in node
435    } catch(e) {
436      Module.printErr('error in executing inline EM_ASM code: ' + e + ' on: \n\n' + source + '\n\nwith args |' + args + '| (make sure to use the right one out of EM_ASM, EM_ASM_ARGS, etc.)');
437      throw e;
438    }
439    return Runtime.asmConstCache[code] = evalled;
440  },
441  warnOnce: function (text) {
442    if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
443    if (!Runtime.warnOnce.shown[text]) {
444      Runtime.warnOnce.shown[text] = 1;
445      Module.printErr(text);
446    }
447  },
448  funcWrappers: {},
449  getFuncWrapper: function (func, sig) {
450    assert(sig);
451    if (!Runtime.funcWrappers[func]) {
452      Runtime.funcWrappers[func] = function dynCall_wrapper() {
453        return Runtime.dynCall(sig, func, arguments);
454      };
455    }
456    return Runtime.funcWrappers[func];
457  },
458  UTF8Processor: function () {
459    var buffer = [];
460    var needed = 0;
461    this.processCChar = function (code) {
462      code = code & 0xFF;
463
464      if (buffer.length == 0) {
465        if ((code & 0x80) == 0x00) {        // 0xxxxxxx
466          return String.fromCharCode(code);
467        }
468        buffer.push(code);
469        if ((code & 0xE0) == 0xC0) {        // 110xxxxx
470          needed = 1;
471        } else if ((code & 0xF0) == 0xE0) { // 1110xxxx
472          needed = 2;
473        } else {                            // 11110xxx
474          needed = 3;
475        }
476        return '';
477      }
478
479      if (needed) {
480        buffer.push(code);
481        needed--;
482        if (needed > 0) return '';
483      }
484
485      var c1 = buffer[0];
486      var c2 = buffer[1];
487      var c3 = buffer[2];
488      var c4 = buffer[3];
489      var ret;
490      if (buffer.length == 2) {
491        ret = String.fromCharCode(((c1 & 0x1F) << 6)  | (c2 & 0x3F));
492      } else if (buffer.length == 3) {
493        ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6)  | (c3 & 0x3F));
494      } else {
495        // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
496        var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) |
497                        ((c3 & 0x3F) << 6)  | (c4 & 0x3F);
498        ret = String.fromCharCode(
499          Math.floor((codePoint - 0x10000) / 0x400) + 0xD800,
500          (codePoint - 0x10000) % 0x400 + 0xDC00);
501      }
502      buffer.length = 0;
503      return ret;
504    }
505    this.processJSString = function processJSString(string) {
506      /* TODO: use TextEncoder when present,
507        var encoder = new TextEncoder();
508        encoder['encoding'] = "utf-8";
509        var utf8Array = encoder['encode'](aMsg.data);
510      */
511      string = unescape(encodeURIComponent(string));
512      var ret = [];
513      for (var i = 0; i < string.length; i++) {
514        ret.push(string.charCodeAt(i));
515      }
516      return ret;
517    }
518  },
519  getCompilerSetting: function (name) {
520    throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work';
521  },
522  stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+7)&-8); return ret; },
523  staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; },
524  dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; },
525  alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
526  makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+4294967296)))); return ret; },
527  GLOBAL_BASE: 8,
528  QUANTUM_SIZE: 4,
529  __dummy__: 0
530}
531
532
533Module['Runtime'] = Runtime;
534
535
536
537
538
539
540
541
542
543//========================================
544// Runtime essentials
545//========================================
546
547var __THREW__ = 0; // Used in checking for thrown exceptions.
548
549var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
550var EXITSTATUS = 0;
551
552var undef = 0;
553// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
554// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
555var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
556var tempI64, tempI64b;
557var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
558
559function assert(condition, text) {
560  if (!condition) {
561    abort('Assertion failed: ' + text);
562  }
563}
564
565var globalScope = this;
566
567// C calling interface. A convenient way to call C functions (in C files, or
568// defined with extern "C").
569//
570// Note: LLVM optimizations can inline and remove functions, after which you will not be
571//       able to call them. Closure can also do so. To avoid that, add your function to
572//       the exports using something like
573//
574//         -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
575//
576// @param ident      The name of the C function (note that C++ functions will be name-mangled - use extern "C")
577// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
578//                   'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit).
579// @param argTypes   An array of the types of arguments for the function (if there are no arguments, this can be ommitted). Types are as in returnType,
580//                   except that 'array' is not possible (there is no way for us to know the length of the array)
581// @param args       An array of the arguments to the function, as native JS values (as in returnType)
582//                   Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
583// @return           The return value, as a native JS value (as in returnType)
584function ccall(ident, returnType, argTypes, args) {
585  return ccallFunc(getCFunc(ident), returnType, argTypes, args);
586}
587Module["ccall"] = ccall;
588
589// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
590function getCFunc(ident) {
591  try {
592    var func = Module['_' + ident]; // closure exported function
593    if (!func) func = eval('_' + ident); // explicit lookup
594  } catch(e) {
595  }
596  assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
597  return func;
598}
599
600// Internal function that does a C call using a function, not an identifier
601function ccallFunc(func, returnType, argTypes, args) {
602  var stack = 0;
603  function toC(value, type) {
604    if (type == 'string') {
605      if (value === null || value === undefined || value === 0) return 0; // null string
606      value = intArrayFromString(value);
607      type = 'array';
608    }
609    if (type == 'array') {
610      if (!stack) stack = Runtime.stackSave();
611      var ret = Runtime.stackAlloc(value.length);
612      writeArrayToMemory(value, ret);
613      return ret;
614    }
615    return value;
616  }
617  function fromC(value, type) {
618    if (type == 'string') {
619      return Pointer_stringify(value);
620    }
621    assert(type != 'array');
622    return value;
623  }
624  var i = 0;
625  var cArgs = args ? args.map(function(arg) {
626    return toC(arg, argTypes[i++]);
627  }) : [];
628  var ret = fromC(func.apply(null, cArgs), returnType);
629  if (stack) Runtime.stackRestore(stack);
630  return ret;
631}
632
633// Returns a native JS wrapper for a C function. This is similar to ccall, but
634// returns a function you can call repeatedly in a normal way. For example:
635//
636//   var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
637//   alert(my_function(5, 22));
638//   alert(my_function(99, 12));
639//
640function cwrap(ident, returnType, argTypes) {
641  var func = getCFunc(ident);
642  return function() {
643    return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments));
644  }
645}
646Module["cwrap"] = cwrap;
647
648// Sets a value in memory in a dynamic way at run-time. Uses the
649// type data. This is the same as makeSetValue, except that
650// makeSetValue is done at compile-time and generates the needed
651// code then, whereas this function picks the right code at
652// run-time.
653// Note that setValue and getValue only do *aligned* writes and reads!
654// Note that ccall uses JS types as for defining types, while setValue and
655// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
656function setValue(ptr, value, type, noSafe) {
657  type = type || 'i8';
658  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
659    switch(type) {
660      case 'i1': HEAP8[(ptr)]=value; break;
661      case 'i8': HEAP8[(ptr)]=value; break;
662      case 'i16': HEAP16[((ptr)>>1)]=value; break;
663      case 'i32': HEAP32[((ptr)>>2)]=value; break;
664      case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+4294967296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/(+4294967296))))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
665      case 'float': HEAPF32[((ptr)>>2)]=value; break;
666      case 'double': HEAPF64[((ptr)>>3)]=value; break;
667      default: abort('invalid type for setValue: ' + type);
668    }
669}
670Module['setValue'] = setValue;
671
672// Parallel to setValue.
673function getValue(ptr, type, noSafe) {
674  type = type || 'i8';
675  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
676    switch(type) {
677      case 'i1': return HEAP8[(ptr)];
678      case 'i8': return HEAP8[(ptr)];
679      case 'i16': return HEAP16[((ptr)>>1)];
680      case 'i32': return HEAP32[((ptr)>>2)];
681      case 'i64': return HEAP32[((ptr)>>2)];
682      case 'float': return HEAPF32[((ptr)>>2)];
683      case 'double': return HEAPF64[((ptr)>>3)];
684      default: abort('invalid type for setValue: ' + type);
685    }
686  return null;
687}
688Module['getValue'] = getValue;
689
690var ALLOC_NORMAL = 0; // Tries to use _malloc()
691var ALLOC_STACK = 1; // Lives for the duration of the current function call
692var ALLOC_STATIC = 2; // Cannot be freed
693var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
694var ALLOC_NONE = 4; // Do not allocate
695Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
696Module['ALLOC_STACK'] = ALLOC_STACK;
697Module['ALLOC_STATIC'] = ALLOC_STATIC;
698Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
699Module['ALLOC_NONE'] = ALLOC_NONE;
700
701// allocate(): This is for internal use. You can use it yourself as well, but the interface
702//             is a little tricky (see docs right below). The reason is that it is optimized
703//             for multiple syntaxes to save space in generated code. So you should
704//             normally not use allocate(), and instead allocate memory using _malloc(),
705//             initialize it with setValue(), and so forth.
706// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
707//        in *bytes* (note that this is sometimes confusing: the next parameter does not
708//        affect this!)
709// @types: Either an array of types, one for each byte (or 0 if no type at that position),
710//         or a single type which is used for the entire block. This only matters if there
711//         is initial data - if @slab is a number, then this does not matter at all and is
712//         ignored.
713// @allocator: How to allocate memory, see ALLOC_*
714function allocate(slab, types, allocator, ptr) {
715  var zeroinit, size;
716  if (typeof slab === 'number') {
717    zeroinit = true;
718    size = slab;
719  } else {
720    zeroinit = false;
721    size = slab.length;
722  }
723
724  var singleType = typeof types === 'string' ? types : null;
725
726  var ret;
727  if (allocator == ALLOC_NONE) {
728    ret = ptr;
729  } else {
730    ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
731  }
732
733  if (zeroinit) {
734    var ptr = ret, stop;
735    assert((ret & 3) == 0);
736    stop = ret + (size & ~3);
737    for (; ptr < stop; ptr += 4) {
738      HEAP32[((ptr)>>2)]=0;
739    }
740    stop = ret + size;
741    while (ptr < stop) {
742      HEAP8[((ptr++)|0)]=0;
743    }
744    return ret;
745  }
746
747  if (singleType === 'i8') {
748    if (slab.subarray || slab.slice) {
749      HEAPU8.set(slab, ret);
750    } else {
751      HEAPU8.set(new Uint8Array(slab), ret);
752    }
753    return ret;
754  }
755
756  var i = 0, type, typeSize, previousType;
757  while (i < size) {
758    var curr = slab[i];
759
760    if (typeof curr === 'function') {
761      curr = Runtime.getFunctionIndex(curr);
762    }
763
764    type = singleType || types[i];
765    if (type === 0) {
766      i++;
767      continue;
768    }
769
770    if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
771
772    setValue(ret+i, curr, type);
773
774    // no need to look up size unless type changes, so cache it
775    if (previousType !== type) {
776      typeSize = Runtime.getNativeTypeSize(type);
777      previousType = type;
778    }
779    i += typeSize;
780  }
781
782  return ret;
783}
784Module['allocate'] = allocate;
785
786function Pointer_stringify(ptr, /* optional */ length) {
787  // TODO: use TextDecoder
788  // Find the length, and check for UTF while doing so
789  var hasUtf = false;
790  var t;
791  var i = 0;
792  while (1) {
793    t = HEAPU8[(((ptr)+(i))|0)];
794    if (t >= 128) hasUtf = true;
795    else if (t == 0 && !length) break;
796    i++;
797    if (length && i == length) break;
798  }
799  if (!length) length = i;
800
801  var ret = '';
802
803  if (!hasUtf) {
804    var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
805    var curr;
806    while (length > 0) {
807      curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
808      ret = ret ? ret + curr : curr;
809      ptr += MAX_CHUNK;
810      length -= MAX_CHUNK;
811    }
812    return ret;
813  }
814
815  var utf8 = new Runtime.UTF8Processor();
816  for (i = 0; i < length; i++) {
817    t = HEAPU8[(((ptr)+(i))|0)];
818    ret += utf8.processCChar(t);
819  }
820  return ret;
821}
822Module['Pointer_stringify'] = Pointer_stringify;
823
824// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
825// a copy of that string as a Javascript String object.
826function UTF16ToString(ptr) {
827  var i = 0;
828
829  var str = '';
830  while (1) {
831    var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
832    if (codeUnit == 0)
833      return str;
834    ++i;
835    // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
836    str += String.fromCharCode(codeUnit);
837  }
838}
839Module['UTF16ToString'] = UTF16ToString;
840
841// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
842// null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP.
843function stringToUTF16(str, outPtr) {
844  for(var i = 0; i < str.length; ++i) {
845    // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
846    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
847    HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit;
848  }
849  // Null-terminate the pointer to the HEAP.
850  HEAP16[(((outPtr)+(str.length*2))>>1)]=0;
851}
852Module['stringToUTF16'] = stringToUTF16;
853
854// Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emscripten HEAP, returns
855// a copy of that string as a Javascript String object.
856function UTF32ToString(ptr) {
857  var i = 0;
858
859  var str = '';
860  while (1) {
861    var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
862    if (utf32 == 0)
863      return str;
864    ++i;
865    // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.
866    if (utf32 >= 0x10000) {
867      var ch = utf32 - 0x10000;
868      str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
869    } else {
870      str += String.fromCharCode(utf32);
871    }
872  }
873}
874Module['UTF32ToString'] = UTF32ToString;
875
876// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
877// null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP,
878// but can use less, since str.length does not return the number of characters in the string, but the number of UTF-16 code units in the string.
879function stringToUTF32(str, outPtr) {
880  var iChar = 0;
881  for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
882    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
883    var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate
884    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
885      var trailSurrogate = str.charCodeAt(++iCodeUnit);
886      codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
887    }
888    HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit;
889    ++iChar;
890  }
891  // Null-terminate the pointer to the HEAP.
892  HEAP32[(((outPtr)+(iChar*4))>>2)]=0;
893}
894Module['stringToUTF32'] = stringToUTF32;
895
896function demangle(func) {
897  var i = 3;
898  // params, etc.
899  var basicTypes = {
900    'v': 'void',
901    'b': 'bool',
902    'c': 'char',
903    's': 'short',
904    'i': 'int',
905    'l': 'long',
906    'f': 'float',
907    'd': 'double',
908    'w': 'wchar_t',
909    'a': 'signed char',
910    'h': 'unsigned char',
911    't': 'unsigned short',
912    'j': 'unsigned int',
913    'm': 'unsigned long',
914    'x': 'long long',
915    'y': 'unsigned long long',
916    'z': '...'
917  };
918  var subs = [];
919  var first = true;
920  function dump(x) {
921    //return;
922    if (x) Module.print(x);
923    Module.print(func);
924    var pre = '';
925    for (var a = 0; a < i; a++) pre += ' ';
926    Module.print (pre + '^');
927  }
928  function parseNested() {
929    i++;
930    if (func[i] === 'K') i++; // ignore const
931    var parts = [];
932    while (func[i] !== 'E') {
933      if (func[i] === 'S') { // substitution
934        i++;
935        var next = func.indexOf('_', i);
936        var num = func.substring(i, next) || 0;
937        parts.push(subs[num] || '?');
938        i = next+1;
939        continue;
940      }
941      if (func[i] === 'C') { // constructor
942        parts.push(parts[parts.length-1]);
943        i += 2;
944        continue;
945      }
946      var size = parseInt(func.substr(i));
947      var pre = size.toString().length;
948      if (!size || !pre) { i--; break; } // counter i++ below us
949      var curr = func.substr(i + pre, size);
950      parts.push(curr);
951      subs.push(curr);
952      i += pre + size;
953    }
954    i++; // skip E
955    return parts;
956  }
957  function parse(rawList, limit, allowVoid) { // main parser
958    limit = limit || Infinity;
959    var ret = '', list = [];
960    function flushList() {
961      return '(' + list.join(', ') + ')';
962    }
963    var name;
964    if (func[i] === 'N') {
965      // namespaced N-E
966      name = parseNested().join('::');
967      limit--;
968      if (limit === 0) return rawList ? [name] : name;
969    } else {
970      // not namespaced
971      if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L'
972      var size = parseInt(func.substr(i));
973      if (size) {
974        var pre = size.toString().length;
975        name = func.substr(i + pre, size);
976        i += pre + size;
977      }
978    }
979    first = false;
980    if (func[i] === 'I') {
981      i++;
982      var iList = parse(true);
983      var iRet = parse(true, 1, true);
984      ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>';
985    } else {
986      ret = name;
987    }
988    paramLoop: while (i < func.length && limit-- > 0) {
989      //dump('paramLoop');
990      var c = func[i++];
991      if (c in basicTypes) {
992        list.push(basicTypes[c]);
993      } else {
994        switch (c) {
995          case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer
996          case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference
997          case 'L': { // literal
998            i++; // skip basic type
999            var end = func.indexOf('E', i);
1000            var size = end - i;
1001            list.push(func.substr(i, size));
1002            i += size + 2; // size + 'EE'
1003            break;
1004          }
1005          case 'A': { // array
1006            var size = parseInt(func.substr(i));
1007            i += size.toString().length;
1008            if (func[i] !== '_') throw '?';
1009            i++; // skip _
1010            list.push(parse(true, 1, true)[0] + ' [' + size + ']');
1011            break;
1012          }
1013          case 'E': break paramLoop;
1014          default: ret += '?' + c; break paramLoop;
1015        }
1016      }
1017    }
1018    if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void)
1019    if (rawList) {
1020      if (ret) {
1021        list.push(ret + '?');
1022      }
1023      return list;
1024    } else {
1025      return ret + flushList();
1026    }
1027  }
1028  try {
1029    // Special-case the entry point, since its name differs from other name mangling.
1030    if (func == 'Object._main' || func == '_main') {
1031      return 'main()';
1032    }
1033    if (typeof func === 'number') func = Pointer_stringify(func);
1034    if (func[0] !== '_') return func;
1035    if (func[1] !== '_') return func; // C function
1036    if (func[2] !== 'Z') return func;
1037    switch (func[3]) {
1038      case 'n': return 'operator new()';
1039      case 'd': return 'operator delete()';
1040    }
1041    return parse();
1042  } catch(e) {
1043    return func;
1044  }
1045}
1046
1047function demangleAll(text) {
1048  return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') });
1049}
1050
1051function stackTrace() {
1052  var stack = new Error().stack;
1053  return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack trace is not available at least on IE10 and Safari 6.
1054}
1055
1056// Memory management
1057
1058var PAGE_SIZE = 4096;
1059function alignMemoryPage(x) {
1060  return (x+4095)&-4096;
1061}
1062
1063var HEAP;
1064var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
1065
1066var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
1067var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
1068var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
1069
1070function enlargeMemory() {
1071  abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.');
1072}
1073
1074var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
1075var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;
1076var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
1077
1078var totalMemory = 4096;
1079while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) {
1080  if (totalMemory < 16*1024*1024) {
1081    totalMemory *= 2;
1082  } else {
1083    totalMemory += 16*1024*1024
1084  }
1085}
1086if (totalMemory !== TOTAL_MEMORY) {
1087  Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be more reasonable');
1088  TOTAL_MEMORY = totalMemory;
1089}
1090
1091// Initialize the runtime's memory
1092// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
1093assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
1094       'JS engine does not provide full typed array support');
1095
1096var buffer = new ArrayBuffer(TOTAL_MEMORY);
1097HEAP8 = new Int8Array(buffer);
1098HEAP16 = new Int16Array(buffer);
1099HEAP32 = new Int32Array(buffer);
1100HEAPU8 = new Uint8Array(buffer);
1101HEAPU16 = new Uint16Array(buffer);
1102HEAPU32 = new Uint32Array(buffer);
1103HEAPF32 = new Float32Array(buffer);
1104HEAPF64 = new Float64Array(buffer);
1105
1106// Endianness check (note: assumes compiler arch was little-endian)
1107HEAP32[0] = 255;
1108assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system');
1109
1110Module['HEAP'] = HEAP;
1111Module['HEAP8'] = HEAP8;
1112Module['HEAP16'] = HEAP16;
1113Module['HEAP32'] = HEAP32;
1114Module['HEAPU8'] = HEAPU8;
1115Module['HEAPU16'] = HEAPU16;
1116Module['HEAPU32'] = HEAPU32;
1117Module['HEAPF32'] = HEAPF32;
1118Module['HEAPF64'] = HEAPF64;
1119
1120function callRuntimeCallbacks(callbacks) {
1121  while(callbacks.length > 0) {
1122    var callback = callbacks.shift();
1123    if (typeof callback == 'function') {
1124      callback();
1125      continue;
1126    }
1127    var func = callback.func;
1128    if (typeof func === 'number') {
1129      if (callback.arg === undefined) {
1130        Runtime.dynCall('v', func);
1131      } else {
1132        Runtime.dynCall('vi', func, [callback.arg]);
1133      }
1134    } else {
1135      func(callback.arg === undefined ? null : callback.arg);
1136    }
1137  }
1138}
1139
1140var __ATPRERUN__  = []; // functions called before the runtime is initialized
1141var __ATINIT__    = []; // functions called during startup
1142var __ATMAIN__    = []; // functions called when main() is to be run
1143var __ATEXIT__    = []; // functions called during shutdown
1144var __ATPOSTRUN__ = []; // functions called after the runtime has exited
1145
1146var runtimeInitialized = false;
1147
1148function preRun() {
1149  // compatibility - merge in anything from Module['preRun'] at this time
1150  if (Module['preRun']) {
1151    if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
1152    while (Module['preRun'].length) {
1153      addOnPreRun(Module['preRun'].shift());
1154    }
1155  }
1156  callRuntimeCallbacks(__ATPRERUN__);
1157}
1158
1159function ensureInitRuntime() {
1160  if (runtimeInitialized) return;
1161  runtimeInitialized = true;
1162  callRuntimeCallbacks(__ATINIT__);
1163}
1164
1165function preMain() {
1166  callRuntimeCallbacks(__ATMAIN__);
1167}
1168
1169function exitRuntime() {
1170  callRuntimeCallbacks(__ATEXIT__);
1171}
1172
1173function postRun() {
1174  // compatibility - merge in anything from Module['postRun'] at this time
1175  if (Module['postRun']) {
1176    if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
1177    while (Module['postRun'].length) {
1178      addOnPostRun(Module['postRun'].shift());
1179    }
1180  }
1181  callRuntimeCallbacks(__ATPOSTRUN__);
1182}
1183
1184function addOnPreRun(cb) {
1185  __ATPRERUN__.unshift(cb);
1186}
1187Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun;
1188
1189function addOnInit(cb) {
1190  __ATINIT__.unshift(cb);
1191}
1192Module['addOnInit'] = Module.addOnInit = addOnInit;
1193
1194function addOnPreMain(cb) {
1195  __ATMAIN__.unshift(cb);
1196}
1197Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain;
1198
1199function addOnExit(cb) {
1200  __ATEXIT__.unshift(cb);
1201}
1202Module['addOnExit'] = Module.addOnExit = addOnExit;
1203
1204function addOnPostRun(cb) {
1205  __ATPOSTRUN__.unshift(cb);
1206}
1207Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun;
1208
1209// Tools
1210
1211// This processes a JS string into a C-line array of numbers, 0-terminated.
1212// For LLVM-originating strings, see parser.js:parseLLVMString function
1213function intArrayFromString(stringy, dontAddNull, length /* optional */) {
1214  var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
1215  if (length) {
1216    ret.length = length;
1217  }
1218  if (!dontAddNull) {
1219    ret.push(0);
1220  }
1221  return ret;
1222}
1223Module['intArrayFromString'] = intArrayFromString;
1224
1225function intArrayToString(array) {
1226  var ret = [];
1227  for (var i = 0; i < array.length; i++) {
1228    var chr = array[i];
1229    if (chr > 0xFF) {
1230      chr &= 0xFF;
1231    }
1232    ret.push(String.fromCharCode(chr));
1233  }
1234  return ret.join('');
1235}
1236Module['intArrayToString'] = intArrayToString;
1237
1238// Write a Javascript array to somewhere in the heap
1239function writeStringToMemory(string, buffer, dontAddNull) {
1240  var array = intArrayFromString(string, dontAddNull);
1241  var i = 0;
1242  while (i < array.length) {
1243    var chr = array[i];
1244    HEAP8[(((buffer)+(i))|0)]=chr;
1245    i = i + 1;
1246  }
1247}
1248Module['writeStringToMemory'] = writeStringToMemory;
1249
1250function writeArrayToMemory(array, buffer) {
1251  for (var i = 0; i < array.length; i++) {
1252    HEAP8[(((buffer)+(i))|0)]=array[i];
1253  }
1254}
1255Module['writeArrayToMemory'] = writeArrayToMemory;
1256
1257function writeAsciiToMemory(str, buffer, dontAddNull) {
1258  for (var i = 0; i < str.length; i++) {
1259    HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i);
1260  }
1261  if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0;
1262}
1263Module['writeAsciiToMemory'] = writeAsciiToMemory;
1264
1265function unSign(value, bits, ignore) {
1266  if (value >= 0) {
1267    return value;
1268  }
1269  return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts
1270                    : Math.pow(2, bits)         + value;
1271}
1272function reSign(value, bits, ignore) {
1273  if (value <= 0) {
1274    return value;
1275  }
1276  var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
1277                        : Math.pow(2, bits-1);
1278  if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that
1279                                                       // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
1280                                                       // TODO: In i64 mode 1, resign the two parts separately and safely
1281    value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
1282  }
1283  return value;
1284}
1285
1286// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 )
1287if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
1288  var ah  = a >>> 16;
1289  var al = a & 0xffff;
1290  var bh  = b >>> 16;
1291  var bl = b & 0xffff;
1292  return (al*bl + ((ah*bl + al*bh) << 16))|0;
1293};
1294Math.imul = Math['imul'];
1295
1296
1297var Math_abs = Math.abs;
1298var Math_cos = Math.cos;
1299var Math_sin = Math.sin;
1300var Math_tan = Math.tan;
1301var Math_acos = Math.acos;
1302var Math_asin = Math.asin;
1303var Math_atan = Math.atan;
1304var Math_atan2 = Math.atan2;
1305var Math_exp = Math.exp;
1306var Math_log = Math.log;
1307var Math_sqrt = Math.sqrt;
1308var Math_ceil = Math.ceil;
1309var Math_floor = Math.floor;
1310var Math_pow = Math.pow;
1311var Math_imul = Math.imul;
1312var Math_fround = Math.fround;
1313var Math_min = Math.min;
1314
1315// A counter of dependencies for calling run(). If we need to
1316// do asynchronous work before running, increment this and
1317// decrement it. Incrementing must happen in a place like
1318// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
1319// Note that you can add dependencies in preRun, even though
1320// it happens right before run - run will be postponed until
1321// the dependencies are met.
1322var runDependencies = 0;
1323var runDependencyWatcher = null;
1324var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
1325
1326function addRunDependency(id) {
1327  runDependencies++;
1328  if (Module['monitorRunDependencies']) {
1329    Module['monitorRunDependencies'](runDependencies);
1330  }
1331}
1332Module['addRunDependency'] = addRunDependency;
1333function removeRunDependency(id) {
1334  runDependencies--;
1335  if (Module['monitorRunDependencies']) {
1336    Module['monitorRunDependencies'](runDependencies);
1337  }
1338  if (runDependencies == 0) {
1339    if (runDependencyWatcher !== null) {
1340      clearInterval(runDependencyWatcher);
1341      runDependencyWatcher = null;
1342    }
1343    if (dependenciesFulfilled) {
1344      var callback = dependenciesFulfilled;
1345      dependenciesFulfilled = null;
1346      callback(); // can add another dependenciesFulfilled
1347    }
1348  }
1349}
1350Module['removeRunDependency'] = removeRunDependency;
1351
1352Module["preloadedImages"] = {}; // maps url to image data
1353Module["preloadedAudios"] = {}; // maps url to audio data
1354
1355
1356var memoryInitializer = null;
1357
1358// === Body ===
1359
1360
1361
1362
1363
1364STATIC_BASE = 8;
1365
1366STATICTOP = STATIC_BASE + Runtime.alignMemory(14963);
1367/* global initializers */ __ATINIT__.push();
1368
1369
1370/* memory initializer */ allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,105,122,101,115,58,32,37,100,44,37,100,10,0,0,0,100,101,99,111,109,112,114,101,115,115,101,100,83,105,122,101,32,61,61,32,115,105,122,101,0,0,0,0,0,0,0,0,47,116,109,112,47,101,109,115,99,114,105,112,116,101,110,95,116,101,109,112,47,122,108,105,98,46,99,0,0,0,0,0,100,111,105,116,0,0,0,0,115,116,114,99,109,112,40,98,117,102,102,101,114,44,32,98,117,102,102,101,114,51,41,32,61,61,32,48,0,0,0,0,101,114,114,111,114,58,32,37,100,92,110,0,0,0,0,0,111,107,46,0,0,0,0,0,49,46,50,46,53,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,4,0,8,0,4,0,2,0,0,0,4,0,5,0,16,0,8,0,2,0,0,0,4,0,6,0,32,0,32,0,2,0,0,0,4,0,4,0,16,0,16,0,3,0,0,0,8,0,16,0,32,0,32,0,3,0,0,0,8,0,16,0,128,0,128,0,3,0,0,0,8,0,32,0,128,0,0,1,3,0,0,0,32,0,128,0,2,1,0,4,3,0,0,0,32,0,2,1,2,1,0,16,3,0,0,0,0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,0,16,17,18,18,19,19,20,20,20,20,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,112,4,0,0,104,9,0,0,1,1,0,0,30,1,0,0,15,0,0,0,0,0,0,0,240,8,0,0,88,10,0,0,0,0,0,0,30,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,96,11,0,0,0,0,0,0,19,0,0,0,7,0,0,0,0,0,0,0,12,0,8,0,140,0,8,0,76,0,8,0,204,0,8,0,44,0,8,0,172,0,8,0,108,0,8,0,236,0,8,0,28,0,8,0,156,0,8,0,92,0,8,0,220,0,8,0,60,0,8,0,188,0,8,0,124,0,8,0,252,0,8,0,2,0,8,0,130,0,8,0,66,0,8,0,194,0,8,0,34,0,8,0,162,0,8,0,98,0,8,0,226,0,8,0,18,0,8,0,146,0,8,0,82,0,8,0,210,0,8,0,50,0,8,0,178,0,8,0,114,0,8,0,242,0,8,0,10,0,8,0,138,0,8,0,74,0,8,0,202,0,8,0,42,0,8,0,170,0,8,0,106,0,8,0,234,0,8,0,26,0,8,0,154,0,8,0,90,0,8,0,218,0,8,0,58,0,8,0,186,0,8,0,122,0,8,0,250,0,8,0,6,0,8,0,134,0,8,0,70,0,8,0,198,0,8,0,38,0,8,0,166,0,8,0,102,0,8,0,230,0,8,0,22,0,8,0,150,0,8,0,86,0,8,0,214,0,8,0,54,0,8,0,182,0,8,0,118,0,8,0,246,0,8,0,14,0,8,0,142,0,8,0,78,0,8,0,206,0,8,0,46,0,8,0,174,0,8,0,110,0,8,0,238,0,8,0,30,0,8,0,158,0,8,0,94,0,8,0,222,0,8,0,62,0,8,0,190,0,8,0,126,0,8,0,254,0,8,0,1,0,8,0,129,0,8,0,65,0,8,0,193,0,8,0,33,0,8,0,161,0,8,0,97,0,8,0,225,0,8,0,17,0,8,0,145,0,8,0,81,0,8,0,209,0,8,0,49,0,8,0,177,0,8,0,113,0,8,0,241,0,8,0,9,0,8,0,137,0,8,0,73,0,8,0,201,0,8,0,41,0,8,0,169,0,8,0,105,0,8,0,233,0,8,0,25,0,8,0,153,0,8,0,89,0,8,0,217,0,8,0,57,0,8,0,185,0,8,0,121,0,8,0,249,0,8,0,5,0,8,0,133,0,8,0,69,0,8,0,197,0,8,0,37,0,8,0,165,0,8,0,101,0,8,0,229,0,8,0,21,0,8,0,149,0,8,0,85,0,8,0,213,0,8,0,53,0,8,0,181,0,8,0,117,0,8,0,245,0,8,0,13,0,8,0,141,0,8,0,77,0,8,0,205,0,8,0,45,0,8,0,173,0,8,0,109,0,8,0,237,0,8,0,29,0,8,0,157,0,8,0,93,0,8,0,221,0,8,0,61,0,8,0,189,0,8,0,125,0,8,0,253,0,8,0,19,0,9,0,19,1,9,0,147,0,9,0,147,1,9,0,83,0,9,0,83,1,9,0,211,0,9,0,211,1,9,0,51,0,9,0,51,1,9,0,179,0,9,0,179,1,9,0,115,0,9,0,115,1,9,0,243,0,9,0,243,1,9,0,11,0,9,0,11,1,9,0,139,0,9,0,139,1,9,0,75,0,9,0,75,1,9,0,203,0,9,0,203,1,9,0,43,0,9,0,43,1,9,0,171,0,9,0,171,1,9,0,107,0,9,0,107,1,9,0,235,0,9,0,235,1,9,0,27,0,9,0,27,1,9,0,155,0,9,0,155,1,9,0,91,0,9,0,91,1,9,0,219,0,9,0,219,1,9,0,59,0,9,0,59,1,9,0,187,0,9,0,187,1,9,0,123,0,9,0,123,1,9,0,251,0,9,0,251,1,9,0,7,0,9,0,7,1,9,0,135,0,9,0,135,1,9,0,71,0,9,0,71,1,9,0,199,0,9,0,199,1,9,0,39,0,9,0,39,1,9,0,167,0,9,0,167,1,9,0,103,0,9,0,103,1,9,0,231,0,9,0,231,1,9,0,23,0,9,0,23,1,9,0,151,0,9,0,151,1,9,0,87,0,9,0,87,1,9,0,215,0,9,0,215,1,9,0,55,0,9,0,55,1,9,0,183,0,9,0,183,1,9,0,119,0,9,0,119,1,9,0,247,0,9,0,247,1,9,0,15,0,9,0,15,1,9,0,143,0,9,0,143,1,9,0,79,0,9,0,79,1,9,0,207,0,9,0,207,1,9,0,47,0,9,0,47,1,9,0,175,0,9,0,175,1,9,0,111,0,9,0,111,1,9,0,239,0,9,0,239,1,9,0,31,0,9,0,31,1,9,0,159,0,9,0,159,1,9,0,95,0,9,0,95,1,9,0,223,0,9,0,223,1,9,0,63,0,9,0,63,1,9,0,191,0,9,0,191,1,9,0,127,0,9,0,127,1,9,0,255,0,9,0,255,1,9,0,0,0,7,0,64,0,7,0,32,0,7,0,96,0,7,0,16,0,7,0,80,0,7,0,48,0,7,0,112,0,7,0,8,0,7,0,72,0,7,0,40,0,7,0,104,0,7,0,24,0,7,0,88,0,7,0,56,0,7,0,120,0,7,0,4,0,7,0,68,0,7,0,36,0,7,0,100,0,7,0,20,0,7,0,84,0,7,0,52,0,7,0,116,0,7,0,3,0,8,0,131,0,8,0,67,0,8,0,195,0,8,0,35,0,8,0,163,0,8,0,99,0,8,0,227,0,8,0,0,0,5,0,16,0,5,0,8,0,5,0,24,0,5,0,4,0,5,0,20,0,5,0,12,0,5,0,28,0,5,0,2,0,5,0,18,0,5,0,10,0,5,0,26,0,5,0,6,0,5,0,22,0,5,0,14,0,5,0,30,0,5,0,1,0,5,0,17,0,5,0,9,0,5,0,25,0,5,0,5,0,5,0,21,0,5,0,13,0,5,0,29,0,5,0,3,0,5,0,19,0,5,0,11,0,5,0,27,0,5,0,7,0,5,0,23,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,10,0,0,0,12,0,0,0,14,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,28,0,0,0,32,0,0,0,40,0,0,0,48,0,0,0,56,0,0,0,64,0,0,0,80,0,0,0,96,0,0,0,112,0,0,0,128,0,0,0,160,0,0,0,192,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,7,0,0,0,8,0,0,0,8,0,0,0,9,0,0,0,9,0,0,0,10,0,0,0,10,0,0,0,11,0,0,0,11,0,0,0,12,0,0,0,12,0,0,0,13,0,0,0,13,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,24,0,0,0,32,0,0,0,48,0,0,0,64,0,0,0,96,0,0,0,128,0,0,0,192,0,0,0,0,1,0,0,128,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,24,0,0,0,32,0,0,0,48,0,0,0,64,0,0,0,96,0,0,16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,7,0,0,0,0,0,0,0,49,46,50,46,53,0,0,0,110,101,101,100,32,100,105,99,116,105,111,110,97,114,121,0,115,116,114,101,97,109,32,101,110,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,105,108,101,32,101,114,114,111,114,0,0,0,0,0,0,115,116,114,101,97,109,32,101,114,114,111,114,0,0,0,0,100,97,116,97,32,101,114,114,111,114,0,0,0,0,0,0,105,110,115,117,102,102,105,99,105,101,110,116,32,109,101,109,111,114,121,0,0,0,0,0,98,117,102,102,101,114,32,101,114,114,111,114,0,0,0,0,105,110,99,111,109,112,97,116,105,98,108,101,32,118,101,114,115,105,111,110,0,0,0,0,184,11,0,0,200,11,0,0,216,11,0,0,224,11,0,0,240,11,0,0,0,12,0,0,16,12,0,0,40,12,0,0,56,12,0,0,216,11,0,0,0,0,0,0,150,48,7,119,44,97,14,238,186,81,9,153,25,196,109,7,143,244,106,112,53,165,99,233,163,149,100,158,50,136,219,14,164,184,220,121,30,233,213,224,136,217,210,151,43,76,182,9,189,124,177,126,7,45,184,231,145,29,191,144,100,16,183,29,242,32,176,106,72,113,185,243,222,65,190,132,125,212,218,26,235,228,221,109,81,181,212,244,199,133,211,131,86,152,108,19,192,168,107,100,122,249,98,253,236,201,101,138,79,92,1,20,217,108,6,99,99,61,15,250,245,13,8,141,200,32,110,59,94,16,105,76,228,65,96,213,114,113,103,162,209,228,3,60,71,212,4,75,253,133,13,210,107,181,10,165,250,168,181,53,108,152,178,66,214,201,187,219,64,249,188,172,227,108,216,50,117,92,223,69,207,13,214,220,89,61,209,171,172,48,217,38,58,0,222,81,128,81,215,200,22,97,208,191,181,244,180,33,35,196,179,86,153,149,186,207,15,165,189,184,158,184,2,40,8,136,5,95,178,217,12,198,36,233,11,177,135,124,111,47,17,76,104,88,171,29,97,193,61,45,102,182,144,65,220,118,6,113,219,1,188,32,210,152,42,16,213,239,137,133,177,113,31,181,182,6,165,228,191,159,51,212,184,232,162,201,7,120,52,249,0,15,142,168,9,150,24,152,14,225,187,13,106,127,45,61,109,8,151,108,100,145,1,92,99,230,244,81,107,107,98,97,108,28,216,48,101,133,78,0,98,242,237,149,6,108,123,165,1,27,193,244,8,130,87,196,15,245,198,217,176,101,80,233,183,18,234,184,190,139,124,136,185,252,223,29,221,98,73,45,218,21,243,124,211,140,101,76,212,251,88,97,178,77,206,81,181,58,116,0,188,163,226,48,187,212,65,165,223,74,215,149,216,61,109,196,209,164,251,244,214,211,106,233,105,67,252,217,110,52,70,136,103,173,208,184,96,218,115,45,4,68,229,29,3,51,95,76,10,170,201,124,13,221,60,113,5,80,170,65,2,39,16,16,11,190,134,32,12,201,37,181,104,87,179,133,111,32,9,212,102,185,159,228,97,206,14,249,222,94,152,201,217,41,34,152,208,176,180,168,215,199,23,61,179,89,129,13,180,46,59,92,189,183,173,108,186,192,32,131,184,237,182,179,191,154,12,226,182,3,154,210,177,116,57,71,213,234,175,119,210,157,21,38,219,4,131,22,220,115,18,11,99,227,132,59,100,148,62,106,109,13,168,90,106,122,11,207,14,228,157,255,9,147,39,174,0,10,177,158,7,125,68,147,15,240,210,163,8,135,104,242,1,30,254,194,6,105,93,87,98,247,203,103,101,128,113,54,108,25,231,6,107,110,118,27,212,254,224,43,211,137,90,122,218,16,204,74,221,103,111,223,185,249,249,239,190,142,67,190,183,23,213,142,176,96,232,163,214,214,126,147,209,161,196,194,216,56,82,242,223,79,241,103,187,209,103,87,188,166,221,6,181,63,75,54,178,72,218,43,13,216,76,27,10,175,246,74,3,54,96,122,4,65,195,239,96,223,85,223,103,168,239,142,110,49,121,190,105,70,140,179,97,203,26,131,102,188,160,210,111,37,54,226,104,82,149,119,12,204,3,71,11,187,185,22,2,34,47,38,5,85,190,59,186,197,40,11,189,178,146,90,180,43,4,106,179,92,167,255,215,194,49,207,208,181,139,158,217,44,29,174,222,91,176,194,100,155,38,242,99,236,156,163,106,117,10,147,109,2,169,6,9,156,63,54,14,235,133,103,7,114,19,87,0,5,130,74,191,149,20,122,184,226,174,43,177,123,56,27,182,12,155,142,210,146,13,190,213,229,183,239,220,124,33,223,219,11,212,210,211,134,66,226,212,241,248,179,221,104,110,131,218,31,205,22,190,129,91,38,185,246,225,119,176,111,119,71,183,24,230,90,8,136,112,106,15,255,202,59,6,102,92,11,1,17,255,158,101,143,105,174,98,248,211,255,107,97,69,207,108,22,120,226,10,160,238,210,13,215,84,131,4,78,194,179,3,57,97,38,103,167,247,22,96,208,77,71,105,73,219,119,110,62,74,106,209,174,220,90,214,217,102,11,223,64,240,59,216,55,83,174,188,169,197,158,187,222,127,207,178,71,233,255,181,48,28,242,189,189,138,194,186,202,48,147,179,83,166,163,180,36,5,54,208,186,147,6,215,205,41,87,222,84,191,103,217,35,46,122,102,179,184,74,97,196,2,27,104,93,148,43,111,42,55,190,11,180,161,142,12,195,27,223,5,90,141,239,2,45,0,0,0,0,65,49,27,25,130,98,54,50,195,83,45,43,4,197,108,100,69,244,119,125,134,167,90,86,199,150,65,79,8,138,217,200,73,187,194,209,138,232,239,250,203,217,244,227,12,79,181,172,77,126,174,181,142,45,131,158,207,28,152,135,81,18,194,74,16,35,217,83,211,112,244,120,146,65,239,97,85,215,174,46,20,230,181,55,215,181,152,28,150,132,131,5,89,152,27,130,24,169,0,155,219,250,45,176,154,203,54,169,93,93,119,230,28,108,108,255,223,63,65,212,158,14,90,205,162,36,132,149,227,21,159,140,32,70,178,167,97,119,169,190,166,225,232,241,231,208,243,232,36,131,222,195,101,178,197,218,170,174,93,93,235,159,70,68,40,204,107,111,105,253,112,118,174,107,49,57,239,90,42,32,44,9,7,11,109,56,28,18,243,54,70,223,178,7,93,198,113,84,112,237,48,101,107,244,247,243,42,187,182,194,49,162,117,145,28,137,52,160,7,144,251,188,159,23,186,141,132,14,121,222,169,37,56,239,178,60,255,121,243,115,190,72,232,106,125,27,197,65,60,42,222,88,5,79,121,240,68,126,98,233,135,45,79,194,198,28,84,219,1,138,21,148,64,187,14,141,131,232,35,166,194,217,56,191,13,197,160,56,76,244,187,33,143,167,150,10,206,150,141,19,9,0,204,92,72,49,215,69,139,98,250,110,202,83,225,119,84,93,187,186,21,108,160,163,214,63,141,136,151,14,150,145,80,152,215,222,17,169,204,199,210,250,225,236,147,203,250,245,92,215,98,114,29,230,121,107,222,181,84,64,159,132,79,89,88,18,14,22,25,35,21,15,218,112,56,36,155,65,35,61,167,107,253,101,230,90,230,124,37,9,203,87,100,56,208,78,163,174,145,1,226,159,138,24,33,204,167,51,96,253,188,42,175,225,36,173,238,208,63,180,45,131,18,159,108,178,9,134,171,36,72,201,234,21,83,208,41,70,126,251,104,119,101,226,246,121,63,47,183,72,36,54,116,27,9,29,53,42,18,4,242,188,83,75,179,141,72,82,112,222,101,121,49,239,126,96,254,243,230,231,191,194,253,254,124,145,208,213,61,160,203,204,250,54,138,131,187,7,145,154,120,84,188,177,57,101,167,168,75,152,131,59,10,169,152,34,201,250,181,9,136,203,174,16,79,93,239,95,14,108,244,70,205,63,217,109,140,14,194,116,67,18,90,243,2,35,65,234,193,112,108,193,128,65,119,216,71,215,54,151,6,230,45,142,197,181,0,165,132,132,27,188,26,138,65,113,91,187,90,104,152,232,119,67,217,217,108,90,30,79,45,21,95,126,54,12,156,45,27,39,221,28,0,62,18,0,152,185,83,49,131,160,144,98,174,139,209,83,181,146,22,197,244,221,87,244,239,196,148,167,194,239,213,150,217,246,233,188,7,174,168,141,28,183,107,222,49,156,42,239,42,133,237,121,107,202,172,72,112,211,111,27,93,248,46,42,70,225,225,54,222,102,160,7,197,127,99,84,232,84,34,101,243,77,229,243,178,2,164,194,169,27,103,145,132,48,38,160,159,41,184,174,197,228,249,159,222,253,58,204,243,214,123,253,232,207,188,107,169,128,253,90,178,153,62,9,159,178,127,56,132,171,176,36,28,44,241,21,7,53,50,70,42,30,115,119,49,7,180,225,112,72,245,208,107,81,54,131,70,122,119,178,93,99,78,215,250,203,15,230,225,210,204,181,204,249,141,132,215,224,74,18,150,175,11,35,141,182,200,112,160,157,137,65,187,132,70,93,35,3,7,108,56,26,196,63,21,49,133,14,14,40,66,152,79,103,3,169,84,126,192,250,121,85,129,203,98,76,31,197,56,129,94,244,35,152,157,167,14,179,220,150,21,170,27,0,84,229,90,49,79,252,153,98,98,215,216,83,121,206,23,79,225,73,86,126,250,80,149,45,215,123,212,28,204,98,19,138,141,45,82,187,150,52,145,232,187,31,208,217,160,6,236,243,126,94,173,194,101,71,110,145,72,108,47,160,83,117,232,54,18,58,169,7,9,35,106,84,36,8,43,101,63,17,228,121,167,150,165,72,188,143,102,27,145,164,39,42,138,189,224,188,203,242,161,141,208,235,98,222,253,192,35,239,230,217,189,225,188,20,252,208,167,13,63,131,138,38,126,178,145,63,185,36,208,112,248,21,203,105,59,70,230,66,122,119,253,91,181,107,101,220,244,90,126,197,55,9,83,238,118,56,72,247,177,174,9,184,240,159,18,161,51,204,63,138,114,253,36,147,0,0,0,0,55,106,194,1,110,212,132,3,89,190,70,2,220,168,9,7,235,194,203,6,178,124,141,4,133,22,79,5,184,81,19,14,143,59,209,15,214,133,151,13,225,239,85,12,100,249,26,9,83,147,216,8,10,45,158,10,61,71,92,11,112,163,38,28,71,201,228,29,30,119,162,31,41,29,96,30,172,11,47,27,155,97,237,26,194,223,171,24,245,181,105,25,200,242,53,18,255,152,247,19,166,38,177,17,145,76,115,16,20,90,60,21,35,48,254,20,122,142,184,22,77,228,122,23,224,70,77,56,215,44,143,57,142,146,201,59,185,248,11,58,60,238,68,63,11,132,134,62,82,58,192,60,101,80,2,61,88,23,94,54,111,125,156,55,54,195,218,53,1,169,24,52,132,191,87,49,179,213,149,48,234,107,211,50,221,1,17,51,144,229,107,36,167,143,169,37,254,49,239,39,201,91,45,38,76,77,98,35,123,39,160,34,34,153,230,32,21,243,36,33,40,180,120,42,31,222,186,43,70,96,252,41,113,10,62,40,244,28,113,45,195,118,179,44,154,200,245,46,173,162,55,47,192,141,154,112,247,231,88,113,174,89,30,115,153,51,220,114,28,37,147,119,43,79,81,118,114,241,23,116,69,155,213,117,120,220,137,126,79,182,75,127,22,8,13,125,33,98,207,124,164,116,128,121,147,30,66,120,202,160,4,122,253,202,198,123,176,46,188,108,135,68,126,109,222,250,56,111,233,144,250,110,108,134,181,107,91,236,119,106,2,82,49,104,53,56,243,105,8,127,175,98,63,21,109,99,102,171,43,97,81,193,233,96,212,215,166,101,227,189,100,100,186,3,34,102,141,105,224,103,32,203,215,72,23,161,21,73,78,31,83,75,121,117,145,74,252,99,222,79,203,9,28,78,146,183,90,76,165,221,152,77,152,154,196,70,175,240,6,71,246,78,64,69,193,36,130,68,68,50,205,65,115,88,15,64,42,230,73,66,29,140,139,67,80,104,241,84,103,2,51,85,62,188,117,87,9,214,183,86,140,192,248,83,187,170,58,82,226,20,124,80,213,126,190,81,232,57,226,90,223,83,32,91,134,237,102,89,177,135,164,88,52,145,235,93,3,251,41,92,90,69,111,94,109,47,173,95,128,27,53,225,183,113,247,224,238,207,177,226,217,165,115,227,92,179,60,230,107,217,254,231,50,103,184,229,5,13,122,228,56,74,38,239,15,32,228,238,86,158,162,236,97,244,96,237,228,226,47,232,211,136,237,233,138,54,171,235,189,92,105,234,240,184,19,253,199,210,209,252,158,108,151,254,169,6,85,255,44,16,26,250,27,122,216,251,66,196,158,249,117,174,92,248,72,233,0,243,127,131,194,242,38,61,132,240,17,87,70,241,148,65,9,244,163,43,203,245,250,149,141,247,205,255,79,246,96,93,120,217,87,55,186,216,14,137,252,218,57,227,62,219,188,245,113,222,139,159,179,223,210,33,245,221,229,75,55,220,216,12,107,215,239,102,169,214,182,216,239,212,129,178,45,213,4,164,98,208,51,206,160,209,106,112,230,211,93,26,36,210,16,254,94,197,39,148,156,196,126,42,218,198,73,64,24,199,204,86,87,194,251,60,149,195,162,130,211,193,149,232,17,192,168,175,77,203,159,197,143,202,198,123,201,200,241,17,11,201,116,7,68,204,67,109,134,205,26,211,192,207,45,185,2,206,64,150,175,145,119,252,109,144,46,66,43,146,25,40,233,147,156,62,166,150,171,84,100,151,242,234,34,149,197,128,224,148,248,199,188,159,207,173,126,158,150,19,56,156,161,121,250,157,36,111,181,152,19,5,119,153,74,187,49,155,125,209,243,154,48,53,137,141,7,95,75,140,94,225,13,142,105,139,207,143,236,157,128,138,219,247,66,139,130,73,4,137,181,35,198,136,136,100,154,131,191,14,88,130,230,176,30,128,209,218,220,129,84,204,147,132,99,166,81,133,58,24,23,135,13,114,213,134,160,208,226,169,151,186,32,168,206,4,102,170,249,110,164,171,124,120,235,174,75,18,41,175,18,172,111,173,37,198,173,172,24,129,241,167,47,235,51,166,118,85,117,164,65,63,183,165,196,41,248,160,243,67,58,161,170,253,124,163,157,151,190,162,208,115,196,181,231,25,6,180,190,167,64,182,137,205,130,183,12,219,205,178,59,177,15,179,98,15,73,177,85,101,139,176,104,34,215,187,95,72,21,186,6,246,83,184,49,156,145,185,180,138,222,188,131,224,28,189,218,94,90,191,237,52,152,190,0,0,0,0,101,103,188,184,139,200,9,170,238,175,181,18,87,151,98,143,50,240,222,55,220,95,107,37,185,56,215,157,239,40,180,197,138,79,8,125,100,224,189,111,1,135,1,215,184,191,214,74,221,216,106,242,51,119,223,224,86,16,99,88,159,87,25,80,250,48,165,232,20,159,16,250,113,248,172,66,200,192,123,223,173,167,199,103,67,8,114,117,38,111,206,205,112,127,173,149,21,24,17,45,251,183,164,63,158,208,24,135,39,232,207,26,66,143,115,162,172,32,198,176,201,71,122,8,62,175,50,160,91,200,142,24,181,103,59,10,208,0,135,178,105,56,80,47,12,95,236,151,226,240,89,133,135,151,229,61,209,135,134,101,180,224,58,221,90,79,143,207,63,40,51,119,134,16,228,234,227,119,88,82,13,216,237,64,104,191,81,248,161,248,43,240,196,159,151,72,42,48,34,90,79,87,158,226,246,111,73,127,147,8,245,199,125,167,64,213,24,192,252,109,78,208,159,53,43,183,35,141,197,24,150,159,160,127,42,39,25,71,253,186,124,32,65,2,146,143,244,16,247,232,72,168,61,88,20,155,88,63,168,35,182,144,29,49,211,247,161,137,106,207,118,20,15,168,202,172,225,7,127,190,132,96,195,6,210,112,160,94,183,23,28,230,89,184,169,244,60,223,21,76,133,231,194,209,224,128,126,105,14,47,203,123,107,72,119,195,162,15,13,203,199,104,177,115,41,199,4,97,76,160,184,217,245,152,111,68,144,255,211,252,126,80,102,238,27,55,218,86,77,39,185,14,40,64,5,182,198,239,176,164,163,136,12,28,26,176,219,129,127,215,103,57,145,120,210,43,244,31,110,147,3,247,38,59,102,144,154,131,136,63,47,145,237,88,147,41,84,96,68,180,49,7,248,12,223,168,77,30,186,207,241,166,236,223,146,254,137,184,46,70,103,23,155,84,2,112,39,236,187,72,240,113,222,47,76,201,48,128,249,219,85,231,69,99,156,160,63,107,249,199,131,211,23,104,54,193,114,15,138,121,203,55,93,228,174,80,225,92,64,255,84,78,37,152,232,246,115,136,139,174,22,239,55,22,248,64,130,4,157,39,62,188,36,31,233,33,65,120,85,153,175,215,224,139,202,176,92,51,59,182,89,237,94,209,229,85,176,126,80,71,213,25,236,255,108,33,59,98,9,70,135,218,231,233,50,200,130,142,142,112,212,158,237,40,177,249,81,144,95,86,228,130,58,49,88,58,131,9,143,167,230,110,51,31,8,193,134,13,109,166,58,181,164,225,64,189,193,134,252,5,47,41,73,23,74,78,245,175,243,118,34,50,150,17,158,138,120,190,43,152,29,217,151,32,75,201,244,120,46,174,72,192,192,1,253,210,165,102,65,106,28,94,150,247,121,57,42,79,151,150,159,93,242,241,35,229,5,25,107,77,96,126,215,245,142,209,98,231,235,182,222,95,82,142,9,194,55,233,181,122,217,70,0,104,188,33,188,208,234,49,223,136,143,86,99,48,97,249,214,34,4,158,106,154,189,166,189,7,216,193,1,191,54,110,180,173,83,9,8,21,154,78,114,29,255,41,206,165,17,134,123,183,116,225,199,15,205,217,16,146,168,190,172,42,70,17,25,56,35,118,165,128,117,102,198,216,16,1,122,96,254,174,207,114,155,201,115,202,34,241,164,87,71,150,24,239,169,57,173,253,204,94,17,69,6,238,77,118,99,137,241,206,141,38,68,220,232,65,248,100,81,121,47,249,52,30,147,65,218,177,38,83,191,214,154,235,233,198,249,179,140,161,69,11,98,14,240,25,7,105,76,161,190,81,155,60,219,54,39,132,53,153,146,150,80,254,46,46,153,185,84,38,252,222,232,158,18,113,93,140,119,22,225,52,206,46,54,169,171,73,138,17,69,230,63,3,32,129,131,187,118,145,224,227,19,246,92,91,253,89,233,73,152,62,85,241,33,6,130,108,68,97,62,212,170,206,139,198,207,169,55,126,56,65,127,214,93,38,195,110,179,137,118,124,214,238,202,196,111,214,29,89,10,177,161,225,228,30,20,243,129,121,168,75,215,105,203,19,178,14,119,171,92,161,194,185,57,198,126,1,128,254,169,156,229,153,21,36,11,54,160,54,110,81,28,142,167,22,102,134,194,113,218,62,44,222,111,44,73,185,211,148,240,129,4,9,149,230,184,177,123,73,13,163,30,46,177,27,72,62,210,67,45,89,110,251,195,246,219,233,166,145,103,81,31,169,176,204,122,206,12,116,148,97,185,102,241,6,5,222,0,0,0,0,119,7,48,150,238,14,97,44,153,9,81,186,7,109,196,25,112,106,244,143,233,99,165,53,158,100,149,163,14,219,136,50,121,220,184,164,224,213,233,30,151,210,217,136,9,182,76,43,126,177,124,189,231,184,45,7,144,191,29,145,29,183,16,100,106,176,32,242,243,185,113,72,132,190,65,222,26,218,212,125,109,221,228,235,244,212,181,81,131,211,133,199,19,108,152,86,100,107,168,192,253,98,249,122,138,101,201,236,20,1,92,79,99,6,108,217,250,15,61,99,141,8,13,245,59,110,32,200,76,105,16,94,213,96,65,228,162,103,113,114,60,3,228,209,75,4,212,71,210,13,133,253,165,10,181,107,53,181,168,250,66,178,152,108,219,187,201,214,172,188,249,64,50,216,108,227,69,223,92,117,220,214,13,207,171,209,61,89,38,217,48,172,81,222,0,58,200,215,81,128,191,208,97,22,33,180,244,181,86,179,196,35,207,186,149,153,184,189,165,15,40,2,184,158,95,5,136,8,198,12,217,178,177,11,233,36,47,111,124,135,88,104,76,17,193,97,29,171,182,102,45,61,118,220,65,144,1,219,113,6,152,210,32,188,239,213,16,42,113,177,133,137,6,182,181,31,159,191,228,165,232,184,212,51,120,7,201,162,15,0,249,52,150,9,168,142,225,14,152,24,127,106,13,187,8,109,61,45,145,100,108,151,230,99,92,1,107,107,81,244,28,108,97,98,133,101,48,216,242,98,0,78,108,6,149,237,27,1,165,123,130,8,244,193,245,15,196,87,101,176,217,198,18,183,233,80,139,190,184,234,252,185,136,124,98,221,29,223,21,218,45,73,140,211,124,243,251,212,76,101,77,178,97,88,58,181,81,206,163,188,0,116,212,187,48,226,74,223,165,65,61,216,149,215,164,209,196,109,211,214,244,251,67,105,233,106,52,110,217,252,173,103,136,70,218,96,184,208,68,4,45,115,51,3,29,229,170,10,76,95,221,13,124,201,80,5,113,60,39,2,65,170,190,11,16,16,201,12,32,134,87,104,181,37,32,111,133,179,185,102,212,9,206,97,228,159,94,222,249,14,41,217,201,152,176,208,152,34,199,215,168,180,89,179,61,23,46,180,13,129,183,189,92,59,192,186,108,173,237,184,131,32,154,191,179,182,3,182,226,12,116,177,210,154,234,213,71,57,157,210,119,175,4,219,38,21,115,220,22,131,227,99,11,18,148,100,59,132,13,109,106,62,122,106,90,168,228,14,207,11,147,9,255,157,10,0,174,39,125,7,158,177,240,15,147,68,135,8,163,210,30,1,242,104,105,6,194,254,247,98,87,93,128,101,103,203,25,108,54,113,110,107,6,231,254,212,27,118,137,211,43,224,16,218,122,90,103,221,74,204,249,185,223,111,142,190,239,249,23,183,190,67,96,176,142,213,214,214,163,232,161,209,147,126,56,216,194,196,79,223,242,82,209,187,103,241,166,188,87,103,63,181,6,221,72,178,54,75,216,13,43,218,175,10,27,76,54,3,74,246,65,4,122,96,223,96,239,195,168,103,223,85,49,110,142,239,70,105,190,121,203,97,179,140,188,102,131,26,37,111,210,160,82,104,226,54,204,12,119,149,187,11,71,3,34,2,22,185,85,5,38,47,197,186,59,190,178,189,11,40,43,180,90,146,92,179,106,4,194,215,255,167,181,208,207,49,44,217,158,139,91,222,174,29,155,100,194,176,236,99,242,38,117,106,163,156,2,109,147,10,156,9,6,169,235,14,54,63,114,7,103,133,5,0,87,19,149,191,74,130,226,184,122,20,123,177,43,174,12,182,27,56,146,210,142,155,229,213,190,13,124,220,239,183,11,219,223,33,134,211,210,212,241,212,226,66,104,221,179,248,31,218,131,110,129,190,22,205,246,185,38,91,111,176,119,225,24,183,71,119,136,8,90,230,255,15,106,112,102,6,59,202,17,1,11,92,143,101,158,255,248,98,174,105,97,107,255,211,22,108,207,69,160,10,226,120,215,13,210,238,78,4,131,84,57,3,179,194,167,103,38,97,208,96,22,247,73,105,71,77,62,110,119,219,174,209,106,74,217,214,90,220,64,223,11,102,55,216,59,240,169,188,174,83,222,187,158,197,71,178,207,127,48,181,255,233,189,189,242,28,202,186,194,138,83,179,147,48,36,180,163,166,186,208,54,5,205,215,6,147,84,222,87,41,35,217,103,191,179,102,122,46,196,97,74,184,93,104,27,2,42,111,43,148,180,11,190,55,195,12,142,161,90,5,223,27,45,2,239,141,0,0,0,0,25,27,49,65,50,54,98,130,43,45,83,195,100,108,197,4,125,119,244,69,86,90,167,134,79,65,150,199,200,217,138,8,209,194,187,73,250,239,232,138,227,244,217,203,172,181,79,12,181,174,126,77,158,131,45,142,135,152,28,207,74,194,18,81,83,217,35,16,120,244,112,211,97,239,65,146,46,174,215,85,55,181,230,20,28,152,181,215,5,131,132,150,130,27,152,89,155,0,169,24,176,45,250,219,169,54,203,154,230,119,93,93,255,108,108,28,212,65,63,223,205,90,14,158,149,132,36,162,140,159,21,227,167,178,70,32,190,169,119,97,241,232,225,166,232,243,208,231,195,222,131,36,218,197,178,101,93,93,174,170,68,70,159,235,111,107,204,40,118,112,253,105,57,49,107,174,32,42,90,239,11,7,9,44,18,28,56,109,223,70,54,243,198,93,7,178,237,112,84,113,244,107,101,48,187,42,243,247,162,49,194,182,137,28,145,117,144,7,160,52,23,159,188,251,14,132,141,186,37,169,222,121,60,178,239,56,115,243,121,255,106,232,72,190,65,197,27,125,88,222,42,60,240,121,79,5,233,98,126,68,194,79,45,135,219,84,28,198,148,21,138,1,141,14,187,64,166,35,232,131,191,56,217,194,56,160,197,13,33,187,244,76,10,150,167,143,19,141,150,206,92,204,0,9,69,215,49,72,110,250,98,139,119,225,83,202,186,187,93,84,163,160,108,21,136,141,63,214,145,150,14,151,222,215,152,80,199,204,169,17,236,225,250,210,245,250,203,147,114,98,215,92,107,121,230,29,64,84,181,222,89,79,132,159,22,14,18,88,15,21,35,25,36,56,112,218,61,35,65,155,101,253,107,167,124,230,90,230,87,203,9,37,78,208,56,100,1,145,174,163,24,138,159,226,51,167,204,33,42,188,253,96,173,36,225,175,180,63,208,238,159,18,131,45,134,9,178,108,201,72,36,171,208,83,21,234,251,126,70,41,226,101,119,104,47,63,121,246,54,36,72,183,29,9,27,116,4,18,42,53,75,83,188,242,82,72,141,179,121,101,222,112,96,126,239,49,231,230,243,254,254,253,194,191,213,208,145,124,204,203,160,61,131,138,54,250,154,145,7,187,177,188,84,120,168,167,101,57,59,131,152,75,34,152,169,10,9,181,250,201,16,174,203,136,95,239,93,79,70,244,108,14,109,217,63,205,116,194,14,140,243,90,18,67,234,65,35,2,193,108,112,193,216,119,65,128,151,54,215,71,142,45,230,6,165,0,181,197,188,27,132,132,113,65,138,26,104,90,187,91,67,119,232,152,90,108,217,217,21,45,79,30,12,54,126,95,39,27,45,156,62,0,28,221,185,152,0,18,160,131,49,83,139,174,98,144,146,181,83,209,221,244,197,22,196,239,244,87,239,194,167,148,246,217,150,213,174,7,188,233,183,28,141,168,156,49,222,107,133,42,239,42,202,107,121,237,211,112,72,172,248,93,27,111,225,70,42,46,102,222,54,225,127,197,7,160,84,232,84,99,77,243,101,34,2,178,243,229,27,169,194,164,48,132,145,103,41,159,160,38,228,197,174,184,253,222,159,249,214,243,204,58,207,232,253,123,128,169,107,188,153,178,90,253,178,159,9,62,171,132,56,127,44,28,36,176,53,7,21,241,30,42,70,50,7,49,119,115,72,112,225,180,81,107,208,245,122,70,131,54,99,93,178,119,203,250,215,78,210,225,230,15,249,204,181,204,224,215,132,141,175,150,18,74,182,141,35,11,157,160,112,200,132,187,65,137,3,35,93,70,26,56,108,7,49,21,63,196,40,14,14,133,103,79,152,66,126,84,169,3,85,121,250,192,76,98,203,129,129,56,197,31,152,35,244,94,179,14,167,157,170,21,150,220,229,84,0,27,252,79,49,90,215,98,98,153,206,121,83,216,73,225,79,23,80,250,126,86,123,215,45,149,98,204,28,212,45,141,138,19,52,150,187,82,31,187,232,145,6,160,217,208,94,126,243,236,71,101,194,173,108,72,145,110,117,83,160,47,58,18,54,232,35,9,7,169,8,36,84,106,17,63,101,43,150,167,121,228,143,188,72,165,164,145,27,102,189,138,42,39,242,203,188,224,235,208,141,161,192,253,222,98,217,230,239,35,20,188,225,189,13,167,208,252,38,138,131,63,63,145,178,126,112,208,36,185,105,203,21,248,66,230,70,59,91,253,119,122,220,101,107,181,197,126,90,244,238,83,9,55,247,72,56,118,184,9,174,177,161,18,159,240,138,63,204,51,147,36,253,114,0,0,0,0,1,194,106,55,3,132,212,110,2,70,190,89,7,9,168,220,6,203,194,235,4,141,124,178,5,79,22,133,14,19,81,184,15,209,59,143,13,151,133,214,12,85,239,225,9,26,249,100,8,216,147,83,10,158,45,10,11,92,71,61,28,38,163,112,29,228,201,71,31,162,119,30,30,96,29,41,27,47,11,172,26,237,97,155,24,171,223,194,25,105,181,245,18,53,242,200,19,247,152,255,17,177,38,166,16,115,76,145,21,60,90,20,20,254,48,35,22,184,142,122,23,122,228,77,56,77,70,224,57,143,44,215,59,201,146,142,58,11,248,185,63,68,238,60,62,134,132,11,60,192,58,82,61,2,80,101,54,94,23,88,55,156,125,111,53,218,195,54,52,24,169,1,49,87,191,132,48,149,213,179,50,211,107,234,51,17,1,221,36,107,229,144,37,169,143,167,39,239,49,254,38,45,91,201,35,98,77,76,34,160,39,123,32,230,153,34,33,36,243,21,42,120,180,40,43,186,222,31,41,252,96,70,40,62,10,113,45,113,28,244,44,179,118,195,46,245,200,154,47,55,162,173,112,154,141,192,113,88,231,247,115,30,89,174,114,220,51,153,119,147,37,28,118,81,79,43,116,23,241,114,117,213,155,69,126,137,220,120,127,75,182,79,125,13,8,22,124,207,98,33,121,128,116,164,120,66,30,147,122,4,160,202,123,198,202,253,108,188,46,176,109,126,68,135,111,56,250,222,110,250,144,233,107,181,134,108,106,119,236,91,104,49,82,2,105,243,56,53,98,175,127,8,99,109,21,63,97,43,171,102,96,233,193,81,101,166,215,212,100,100,189,227,102,34,3,186,103,224,105,141,72,215,203,32,73,21,161,23,75,83,31,78,74,145,117,121,79,222,99,252,78,28,9,203,76,90,183,146,77,152,221,165,70,196,154,152,71,6,240,175,69,64,78,246,68,130,36,193,65,205,50,68,64,15,88,115,66,73,230,42,67,139,140,29,84,241,104,80,85,51,2,103,87,117,188,62,86,183,214,9,83,248,192,140,82,58,170,187,80,124,20,226,81,190,126,213,90,226,57,232,91,32,83,223,89,102,237,134,88,164,135,177,93,235,145,52,92,41,251,3,94,111,69,90,95,173,47,109,225,53,27,128,224,247,113,183,226,177,207,238,227,115,165,217,230,60,179,92,231,254,217,107,229,184,103,50,228,122,13,5,239,38,74,56,238,228,32,15,236,162,158,86,237,96,244,97,232,47,226,228,233,237,136,211,235,171,54,138,234,105,92,189,253,19,184,240,252,209,210,199,254,151,108,158,255,85,6,169,250,26,16,44,251,216,122,27,249,158,196,66,248,92,174,117,243,0,233,72,242,194,131,127,240,132,61,38,241,70,87,17,244,9,65,148,245,203,43,163,247,141,149,250,246,79,255,205,217,120,93,96,216,186,55,87,218,252,137,14,219,62,227,57,222,113,245,188,223,179,159,139,221,245,33,210,220,55,75,229,215,107,12,216,214,169,102,239,212,239,216,182,213,45,178,129,208,98,164,4,209,160,206,51,211,230,112,106,210,36,26,93,197,94,254,16,196,156,148,39,198,218,42,126,199,24,64,73,194,87,86,204,195,149,60,251,193,211,130,162,192,17,232,149,203,77,175,168,202,143,197,159,200,201,123,198,201,11,17,241,204,68,7,116,205,134,109,67,207,192,211,26,206,2,185,45,145,175,150,64,144,109,252,119,146,43,66,46,147,233,40,25,150,166,62,156,151,100,84,171,149,34,234,242,148,224,128,197,159,188,199,248,158,126,173,207,156,56,19,150,157,250,121,161,152,181,111,36,153,119,5,19,155,49,187,74,154,243,209,125,141,137,53,48,140,75,95,7,142,13,225,94,143,207,139,105,138,128,157,236,139,66,247,219,137,4,73,130,136,198,35,181,131,154,100,136,130,88,14,191,128,30,176,230,129,220,218,209,132,147,204,84,133,81,166,99,135,23,24,58,134,213,114,13,169,226,208,160,168,32,186,151,170,102,4,206,171,164,110,249], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE);
1371/* memory initializer */ allocate([174,235,120,124,175,41,18,75,173,111,172,18,172,173,198,37,167,241,129,24,166,51,235,47,164,117,85,118,165,183,63,65,160,248,41,196,161,58,67,243,163,124,253,170,162,190,151,157,181,196,115,208,180,6,25,231,182,64,167,190,183,130,205,137,178,205,219,12,179,15,177,59,177,73,15,98,176,139,101,85,187,215,34,104,186,21,72,95,184,83,246,6,185,145,156,49,188,222,138,180,189,28,224,131,191,90,94,218,190,152,52,237,0,0,0,0,184,188,103,101,170,9,200,139,18,181,175,238,143,98,151,87,55,222,240,50,37,107,95,220,157,215,56,185,197,180,40,239,125,8,79,138,111,189,224,100,215,1,135,1,74,214,191,184,242,106,216,221,224,223,119,51,88,99,16,86,80,25,87,159,232,165,48,250,250,16,159,20,66,172,248,113,223,123,192,200,103,199,167,173,117,114,8,67,205,206,111,38,149,173,127,112,45,17,24,21,63,164,183,251,135,24,208,158,26,207,232,39,162,115,143,66,176,198,32,172,8,122,71,201,160,50,175,62,24,142,200,91,10,59,103,181,178,135,0,208,47,80,56,105,151,236,95,12,133,89,240,226,61,229,151,135,101,134,135,209,221,58,224,180,207,143,79,90,119,51,40,63,234,228,16,134,82,88,119,227,64,237,216,13,248,81,191,104,240,43,248,161,72,151,159,196,90,34,48,42,226,158,87,79,127,73,111,246,199,245,8,147,213,64,167,125,109,252,192,24,53,159,208,78,141,35,183,43,159,150,24,197,39,42,127,160,186,253,71,25,2,65,32,124,16,244,143,146,168,72,232,247,155,20,88,61,35,168,63,88,49,29,144,182,137,161,247,211,20,118,207,106,172,202,168,15,190,127,7,225,6,195,96,132,94,160,112,210,230,28,23,183,244,169,184,89,76,21,223,60,209,194,231,133,105,126,128,224,123,203,47,14,195,119,72,107,203,13,15,162,115,177,104,199,97,4,199,41,217,184,160,76,68,111,152,245,252,211,255,144,238,102,80,126,86,218,55,27,14,185,39,77,182,5,64,40,164,176,239,198,28,12,136,163,129,219,176,26,57,103,215,127,43,210,120,145,147,110,31,244,59,38,247,3,131,154,144,102,145,47,63,136,41,147,88,237,180,68,96,84,12,248,7,49,30,77,168,223,166,241,207,186,254,146,223,236,70,46,184,137,84,155,23,103,236,39,112,2,113,240,72,187,201,76,47,222,219,249,128,48,99,69,231,85,107,63,160,156,211,131,199,249,193,54,104,23,121,138,15,114,228,93,55,203,92,225,80,174,78,84,255,64,246,232,152,37,174,139,136,115,22,55,239,22,4,130,64,248,188,62,39,157,33,233,31,36,153,85,120,65,139,224,215,175,51,92,176,202,237,89,182,59,85,229,209,94,71,80,126,176,255,236,25,213,98,59,33,108,218,135,70,9,200,50,233,231,112,142,142,130,40,237,158,212,144,81,249,177,130,228,86,95,58,88,49,58,167,143,9,131,31,51,110,230,13,134,193,8,181,58,166,109,189,64,225,164,5,252,134,193,23,73,41,47,175,245,78,74,50,34,118,243,138,158,17,150,152,43,190,120,32,151,217,29,120,244,201,75,192,72,174,46,210,253,1,192,106,65,102,165,247,150,94,28,79,42,57,121,93,159,150,151,229,35,241,242,77,107,25,5,245,215,126,96,231,98,209,142,95,222,182,235,194,9,142,82,122,181,233,55,104,0,70,217,208,188,33,188,136,223,49,234,48,99,86,143,34,214,249,97,154,106,158,4,7,189,166,189,191,1,193,216,173,180,110,54,21,8,9,83,29,114,78,154,165,206,41,255,183,123,134,17,15,199,225,116,146,16,217,205,42,172,190,168,56,25,17,70,128,165,118,35,216,198,102,117,96,122,1,16,114,207,174,254,202,115,201,155,87,164,241,34,239,24,150,71,253,173,57,169,69,17,94,204,118,77,238,6,206,241,137,99,220,68,38,141,100,248,65,232,249,47,121,81,65,147,30,52,83,38,177,218,235,154,214,191,179,249,198,233,11,69,161,140,25,240,14,98,161,76,105,7,60,155,81,190,132,39,54,219,150,146,153,53,46,46,254,80,38,84,185,153,158,232,222,252,140,93,113,18,52,225,22,119,169,54,46,206,17,138,73,171,3,63,230,69,187,131,129,32,227,224,145,118,91,92,246,19,73,233,89,253,241,85,62,152,108,130,6,33,212,62,97,68,198,139,206,170,126,55,169,207,214,127,65,56,110,195,38,93,124,118,137,179,196,202,238,214,89,29,214,111,225,161,177,10,243,20,30,228,75,168,121,129,19,203,105,215,171,119,14,178,185,194,161,92,1,126,198,57,156,169,254,128,36,21,153,229,54,160,54,11,142,28,81,110,134,102,22,167,62,218,113,194,44,111,222,44,148,211,185,73,9,4,129,240,177,184,230,149,163,13,73,123,27,177,46,30,67,210,62,72,251,110,89,45,233,219,246,195,81,103,145,166,204,176,169,31,116,12,206,122,102,185,97,148,222,5,6,241,16,0,17,0,18,0,0,0,8,0,7,0,9,0,6,0,10,0,5,0,11,0,4,0,12,0,3,0,13,0,2,0,14,0,1,0,15,0,0,0,105,110,99,111,114,114,101,99,116,32,104,101,97,100,101,114,32,99,104,101,99,107,0,0,117,110,107,110,111,119,110,32,99,111,109,112,114,101,115,115,105,111,110,32,109,101,116,104,111,100,0,0,0,0,0,0,105,110,118,97,108,105,100,32,119,105,110,100,111,119,32,115,105,122,101,0,0,0,0,0,117,110,107,110,111,119,110,32,104,101,97,100,101,114,32,102,108,97,103,115,32,115,101,116,0,0,0,0,0,0,0,0,104,101,97,100,101,114,32,99,114,99,32,109,105,115,109,97,116,99,104,0,0,0,0,0,105,110,118,97,108,105,100,32,98,108,111,99,107,32,116,121,112,101,0,0,0,0,0,0,105,110,118,97,108,105,100,32,115,116,111,114,101,100,32,98,108,111,99,107,32,108,101,110,103,116,104,115,0,0,0,0,116,111,111,32,109,97,110,121,32,108,101,110,103,116,104,32,111,114,32,100,105,115,116,97,110,99,101,32,115,121,109,98,111,108,115,0,0,0,0,0,105,110,118,97,108,105,100,32,99,111,100,101,32,108,101,110,103,116,104,115,32,115,101,116,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,98,105,116,32,108,101,110,103,116,104,32,114,101,112,101,97,116,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,99,111,100,101,32,45,45,32,109,105,115,115,105,110,103,32,101,110,100,45,111,102,45,98,108,111,99,107,0,0,0,0,105,110,118,97,108,105,100,32,108,105,116,101,114,97,108,47,108,101,110,103,116,104,115,32,115,101,116,0,0,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,115,32,115,101,116,0,0,0,105,110,118,97,108,105,100,32,108,105,116,101,114,97,108,47,108,101,110,103,116,104,32,99,111,100,101,0,0,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,99,111,100,101,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,116,111,111,32,102,97,114,32,98,97,99,107,0,0,0,105,110,99,111,114,114,101,99,116,32,100,97,116,97,32,99,104,101,99,107,0,0,0,0,105,110,99,111,114,114,101,99,116,32,108,101,110,103,116,104,32,99,104,101,99,107,0,0,96,7,0,0,0,8,80,0,0,8,16,0,20,8,115,0,18,7,31,0,0,8,112,0,0,8,48,0,0,9,192,0,16,7,10,0,0,8,96,0,0,8,32,0,0,9,160,0,0,8,0,0,0,8,128,0,0,8,64,0,0,9,224,0,16,7,6,0,0,8,88,0,0,8,24,0,0,9,144,0,19,7,59,0,0,8,120,0,0,8,56,0,0,9,208,0,17,7,17,0,0,8,104,0,0,8,40,0,0,9,176,0,0,8,8,0,0,8,136,0,0,8,72,0,0,9,240,0,16,7,4,0,0,8,84,0,0,8,20,0,21,8,227,0,19,7,43,0,0,8,116,0,0,8,52,0,0,9,200,0,17,7,13,0,0,8,100,0,0,8,36,0,0,9,168,0,0,8,4,0,0,8,132,0,0,8,68,0,0,9,232,0,16,7,8,0,0,8,92,0,0,8,28,0,0,9,152,0,20,7,83,0,0,8,124,0,0,8,60,0,0,9,216,0,18,7,23,0,0,8,108,0,0,8,44,0,0,9,184,0,0,8,12,0,0,8,140,0,0,8,76,0,0,9,248,0,16,7,3,0,0,8,82,0,0,8,18,0,21,8,163,0,19,7,35,0,0,8,114,0,0,8,50,0,0,9,196,0,17,7,11,0,0,8,98,0,0,8,34,0,0,9,164,0,0,8,2,0,0,8,130,0,0,8,66,0,0,9,228,0,16,7,7,0,0,8,90,0,0,8,26,0,0,9,148,0,20,7,67,0,0,8,122,0,0,8,58,0,0,9,212,0,18,7,19,0,0,8,106,0,0,8,42,0,0,9,180,0,0,8,10,0,0,8,138,0,0,8,74,0,0,9,244,0,16,7,5,0,0,8,86,0,0,8,22,0,64,8,0,0,19,7,51,0,0,8,118,0,0,8,54,0,0,9,204,0,17,7,15,0,0,8,102,0,0,8,38,0,0,9,172,0,0,8,6,0,0,8,134,0,0,8,70,0,0,9,236,0,16,7,9,0,0,8,94,0,0,8,30,0,0,9,156,0,20,7,99,0,0,8,126,0,0,8,62,0,0,9,220,0,18,7,27,0,0,8,110,0,0,8,46,0,0,9,188,0,0,8,14,0,0,8,142,0,0,8,78,0,0,9,252,0,96,7,0,0,0,8,81,0,0,8,17,0,21,8,131,0,18,7,31,0,0,8,113,0,0,8,49,0,0,9,194,0,16,7,10,0,0,8,97,0,0,8,33,0,0,9,162,0,0,8,1,0,0,8,129,0,0,8,65,0,0,9,226,0,16,7,6,0,0,8,89,0,0,8,25,0,0,9,146,0,19,7,59,0,0,8,121,0,0,8,57,0,0,9,210,0,17,7,17,0,0,8,105,0,0,8,41,0,0,9,178,0,0,8,9,0,0,8,137,0,0,8,73,0,0,9,242,0,16,7,4,0,0,8,85,0,0,8,21,0,16,8,2,1,19,7,43,0,0,8,117,0,0,8,53,0,0,9,202,0,17,7,13,0,0,8,101,0,0,8,37,0,0,9,170,0,0,8,5,0,0,8,133,0,0,8,69,0,0,9,234,0,16,7,8,0,0,8,93,0,0,8,29,0,0,9,154,0,20,7,83,0,0,8,125,0,0,8,61,0,0,9,218,0,18,7,23,0,0,8,109,0,0,8,45,0,0,9,186,0,0,8,13,0,0,8,141,0,0,8,77,0,0,9,250,0,16,7,3,0,0,8,83,0,0,8,19,0,21,8,195,0,19,7,35,0,0,8,115,0,0,8,51,0,0,9,198,0,17,7,11,0,0,8,99,0,0,8,35,0,0,9,166,0,0,8,3,0,0,8,131,0,0,8,67,0,0,9,230,0,16,7,7,0,0,8,91,0,0,8,27,0,0,9,150,0,20,7,67,0,0,8,123,0,0,8,59,0,0,9,214,0,18,7,19,0,0,8,107,0,0,8,43,0,0,9,182,0,0,8,11,0,0,8,139,0,0,8,75,0,0,9,246,0,16,7,5,0,0,8,87,0,0,8,23,0,64,8,0,0,19,7,51,0,0,8,119,0,0,8,55,0,0,9,206,0,17,7,15,0,0,8,103,0,0,8,39,0,0,9,174,0,0,8,7,0,0,8,135,0,0,8,71,0,0,9,238,0,16,7,9,0,0,8,95,0,0,8,31,0,0,9,158,0,20,7,99,0,0,8,127,0,0,8,63,0,0,9,222,0,18,7,27,0,0,8,111,0,0,8,47,0,0,9,190,0,0,8,15,0,0,8,143,0,0,8,79,0,0,9,254,0,96,7,0,0,0,8,80,0,0,8,16,0,20,8,115,0,18,7,31,0,0,8,112,0,0,8,48,0,0,9,193,0,16,7,10,0,0,8,96,0,0,8,32,0,0,9,161,0,0,8,0,0,0,8,128,0,0,8,64,0,0,9,225,0,16,7,6,0,0,8,88,0,0,8,24,0,0,9,145,0,19,7,59,0,0,8,120,0,0,8,56,0,0,9,209,0,17,7,17,0,0,8,104,0,0,8,40,0,0,9,177,0,0,8,8,0,0,8,136,0,0,8,72,0,0,9,241,0,16,7,4,0,0,8,84,0,0,8,20,0,21,8,227,0,19,7,43,0,0,8,116,0,0,8,52,0,0,9,201,0,17,7,13,0,0,8,100,0,0,8,36,0,0,9,169,0,0,8,4,0,0,8,132,0,0,8,68,0,0,9,233,0,16,7,8,0,0,8,92,0,0,8,28,0,0,9,153,0,20,7,83,0,0,8,124,0,0,8,60,0,0,9,217,0,18,7,23,0,0,8,108,0,0,8,44,0,0,9,185,0,0,8,12,0,0,8,140,0,0,8,76,0,0,9,249,0,16,7,3,0,0,8,82,0,0,8,18,0,21,8,163,0,19,7,35,0,0,8,114,0,0,8,50,0,0,9,197,0,17,7,11,0,0,8,98,0,0,8,34,0,0,9,165,0,0,8,2,0,0,8,130,0,0,8,66,0,0,9,229,0,16,7,7,0,0,8,90,0,0,8,26,0,0,9,149,0,20,7,67,0,0,8,122,0,0,8,58,0,0,9,213,0,18,7,19,0,0,8,106,0,0,8,42,0,0,9,181,0,0,8,10,0,0,8,138,0,0,8,74,0,0,9,245,0,16,7,5,0,0,8,86,0,0,8,22,0,64,8,0,0,19,7,51,0,0,8,118,0,0,8,54,0,0,9,205,0,17,7,15,0,0,8,102,0,0,8,38,0,0,9,173,0,0,8,6,0,0,8,134,0,0,8,70,0,0,9,237,0,16,7,9,0,0,8,94,0,0,8,30,0,0,9,157,0,20,7,99,0,0,8,126,0,0,8,62,0,0,9,221,0,18,7,27,0,0,8,110,0,0,8,46,0,0,9,189,0,0,8,14,0,0,8,142,0,0,8,78,0,0,9,253,0,96,7,0,0,0,8,81,0,0,8,17,0,21,8,131,0,18,7,31,0,0,8,113,0,0,8,49,0,0,9,195,0,16,7,10,0,0,8,97,0,0,8,33,0,0,9,163,0,0,8,1,0,0,8,129,0,0,8,65,0,0,9,227,0,16,7,6,0,0,8,89,0,0,8,25,0,0,9,147,0,19,7,59,0,0,8,121,0,0,8,57,0,0,9,211,0,17,7,17,0,0,8,105,0,0,8,41,0,0,9,179,0,0,8,9,0,0,8,137,0,0,8,73,0,0,9,243,0,16,7,4,0,0,8,85,0,0,8,21,0,16,8,2,1,19,7,43,0,0,8,117,0,0,8,53,0,0,9,203,0,17,7,13,0,0,8,101,0,0,8,37,0,0,9,171,0,0,8,5,0,0,8,133,0,0,8,69,0,0,9,235,0,16,7,8,0,0,8,93,0,0,8,29,0,0,9,155,0,20,7,83,0,0,8,125,0,0,8,61,0,0,9,219,0,18,7,23,0,0,8,109,0,0,8,45,0,0,9,187,0,0,8,13,0,0,8,141,0,0,8,77,0,0,9,251,0,16,7,3,0,0,8,83,0,0,8,19,0,21,8,195,0,19,7,35,0,0,8,115,0,0,8,51,0,0,9,199,0,17,7,11,0,0,8,99,0,0,8,35,0,0,9,167,0,0,8,3,0,0,8,131,0,0,8,67,0,0,9,231,0,16,7,7,0,0,8,91,0,0,8,27,0,0,9,151,0,20,7,67,0,0,8,123,0,0,8,59,0,0,9,215,0,18,7,19,0,0,8,107,0,0,8,43,0,0,9,183,0,0,8,11,0,0,8,139,0,0,8,75,0,0,9,247,0,16,7,5,0,0,8,87,0,0,8,23,0,64,8,0,0,19,7,51,0,0,8,119,0,0,8,55,0,0,9,207,0,17,7,15,0,0,8,103,0,0,8,39,0,0,9,175,0,0,8,7,0,0,8,135,0,0,8,71,0,0,9,239,0,16,7,9,0,0,8,95,0,0,8,31,0,0,9,159,0,20,7,99,0,0,8,127,0,0,8,63,0,0,9,223,0,18,7,27,0,0,8,111,0,0,8,47,0,0,9,191,0,0,8,15,0,0,8,143,0,0,8,79,0,0,9,255,0,16,5,1,0,23,5,1,1,19,5,17,0,27,5,1,16,17,5,5,0,25,5,1,4,21,5,65,0,29,5,1,64,16,5,3,0,24,5,1,2,20,5,33,0,28,5,1,32,18,5,9,0,26,5,1,8,22,5,129,0,64,5,0,0,16,5,2,0,23,5,129,1,19,5,25,0,27,5,1,24,17,5,7,0,25,5,1,6,21,5,97,0,29,5,1,96,16,5,4,0,24,5,1,3,20,5,49,0,28,5,1,48,18,5,13,0,26,5,1,12,22,5,193,0,64,5,0,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,13,0,15,0,17,0,19,0,23,0,27,0,31,0,35,0,43,0,51,0,59,0,67,0,83,0,99,0,115,0,131,0,163,0,195,0,227,0,2,1,0,0,0,0,0,0,16,0,16,0,16,0,16,0,16,0,16,0,16,0,16,0,17,0,17,0,17,0,17,0,18,0,18,0,18,0,18,0,19,0,19,0,19,0,19,0,20,0,20,0,20,0,20,0,21,0,21,0,21,0,21,0,16,0,73,0,195,0,0,0,1,0,2,0,3,0,4,0,5,0,7,0,9,0,13,0,17,0,25,0,33,0,49,0,65,0,97,0,129,0,193,0,1,1,129,1,1,2,1,3,1,4,1,6,1,8,1,12,1,16,1,24,1,32,1,48,1,64,1,96,0,0,0,0,16,0,16,0,16,0,16,0,17,0,17,0,18,0,18,0,19,0,19,0,20,0,20,0,21,0,21,0,22,0,22,0,23,0,23,0,24,0,24,0,25,0,25,0,26,0,26,0,27,0,27,0,28,0,28,0,29,0,29,0,64,0,64,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,116,111,111,32,102,97,114,32,98,97,99,107,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,99,111,100,101,0,0,0,105,110,118,97,108,105,100,32,108,105,116,101,114,97,108,47,108,101,110,103,116,104,32,99,111,100,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+10240);
1372
1373
1374
1375
1376var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
1377
1378assert(tempDoublePtr % 8 == 0);
1379
1380function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
1381
1382  HEAP8[tempDoublePtr] = HEAP8[ptr];
1383
1384  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1385
1386  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1387
1388  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1389
1390}
1391
1392function copyTempDouble(ptr) {
1393
1394  HEAP8[tempDoublePtr] = HEAP8[ptr];
1395
1396  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1397
1398  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1399
1400  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1401
1402  HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
1403
1404  HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
1405
1406  HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
1407
1408  HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
1409
1410}
1411
1412
1413
1414
1415
1416
1417  var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};
1418
1419  var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};
1420
1421
1422  var ___errno_state=0;function ___setErrNo(value) {
1423      // For convenient setting and returning of errno.
1424      HEAP32[((___errno_state)>>2)]=value;
1425      return value;
1426    }
1427
1428  var PATH={splitPath:function (filename) {
1429        var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
1430        return splitPathRe.exec(filename).slice(1);
1431      },normalizeArray:function (parts, allowAboveRoot) {
1432        // if the path tries to go above the root, `up` ends up > 0
1433        var up = 0;
1434        for (var i = parts.length - 1; i >= 0; i--) {
1435          var last = parts[i];
1436          if (last === '.') {
1437            parts.splice(i, 1);
1438          } else if (last === '..') {
1439            parts.splice(i, 1);
1440            up++;
1441          } else if (up) {
1442            parts.splice(i, 1);
1443            up--;
1444          }
1445        }
1446        // if the path is allowed to go above the root, restore leading ..s
1447        if (allowAboveRoot) {
1448          for (; up--; up) {
1449            parts.unshift('..');
1450          }
1451        }
1452        return parts;
1453      },normalize:function (path) {
1454        var isAbsolute = path.charAt(0) === '/',
1455            trailingSlash = path.substr(-1) === '/';
1456        // Normalize the path
1457        path = PATH.normalizeArray(path.split('/').filter(function(p) {
1458          return !!p;
1459        }), !isAbsolute).join('/');
1460        if (!path && !isAbsolute) {
1461          path = '.';
1462        }
1463        if (path && trailingSlash) {
1464          path += '/';
1465        }
1466        return (isAbsolute ? '/' : '') + path;
1467      },dirname:function (path) {
1468        var result = PATH.splitPath(path),
1469            root = result[0],
1470            dir = result[1];
1471        if (!root && !dir) {
1472          // No dirname whatsoever
1473          return '.';
1474        }
1475        if (dir) {
1476          // It has a dirname, strip trailing slash
1477          dir = dir.substr(0, dir.length - 1);
1478        }
1479        return root + dir;
1480      },basename:function (path) {
1481        // EMSCRIPTEN return '/'' for '/', not an empty string
1482        if (path === '/') return '/';
1483        var lastSlash = path.lastIndexOf('/');
1484        if (lastSlash === -1) return path;
1485        return path.substr(lastSlash+1);
1486      },extname:function (path) {
1487        return PATH.splitPath(path)[3];
1488      },join:function () {
1489        var paths = Array.prototype.slice.call(arguments, 0);
1490        return PATH.normalize(paths.join('/'));
1491      },join2:function (l, r) {
1492        return PATH.normalize(l + '/' + r);
1493      },resolve:function () {
1494        var resolvedPath = '',
1495          resolvedAbsolute = false;
1496        for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
1497          var path = (i >= 0) ? arguments[i] : FS.cwd();
1498          // Skip empty and invalid entries
1499          if (typeof path !== 'string') {
1500            throw new TypeError('Arguments to path.resolve must be strings');
1501          } else if (!path) {
1502            continue;
1503          }
1504          resolvedPath = path + '/' + resolvedPath;
1505          resolvedAbsolute = path.charAt(0) === '/';
1506        }
1507        // At this point the path should be resolved to a full absolute path, but
1508        // handle relative paths to be safe (might happen when process.cwd() fails)
1509        resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {
1510          return !!p;
1511        }), !resolvedAbsolute).join('/');
1512        return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
1513      },relative:function (from, to) {
1514        from = PATH.resolve(from).substr(1);
1515        to = PATH.resolve(to).substr(1);
1516        function trim(arr) {
1517          var start = 0;
1518          for (; start < arr.length; start++) {
1519            if (arr[start] !== '') break;
1520          }
1521          var end = arr.length - 1;
1522          for (; end >= 0; end--) {
1523            if (arr[end] !== '') break;
1524          }
1525          if (start > end) return [];
1526          return arr.slice(start, end - start + 1);
1527        }
1528        var fromParts = trim(from.split('/'));
1529        var toParts = trim(to.split('/'));
1530        var length = Math.min(fromParts.length, toParts.length);
1531        var samePartsLength = length;
1532        for (var i = 0; i < length; i++) {
1533          if (fromParts[i] !== toParts[i]) {
1534            samePartsLength = i;
1535            break;
1536          }
1537        }
1538        var outputParts = [];
1539        for (var i = samePartsLength; i < fromParts.length; i++) {
1540          outputParts.push('..');
1541        }
1542        outputParts = outputParts.concat(toParts.slice(samePartsLength));
1543        return outputParts.join('/');
1544      }};
1545
1546  var TTY={ttys:[],init:function () {
1547        // https://github.com/kripken/emscripten/pull/1555
1548        // if (ENVIRONMENT_IS_NODE) {
1549        //   // currently, FS.init does not distinguish if process.stdin is a file or TTY
1550        //   // device, it always assumes it's a TTY device. because of this, we're forcing
1551        //   // process.stdin to UTF8 encoding to at least make stdin reading compatible
1552        //   // with text files until FS.init can be refactored.
1553        //   process['stdin']['setEncoding']('utf8');
1554        // }
1555      },shutdown:function () {
1556        // https://github.com/kripken/emscripten/pull/1555
1557        // if (ENVIRONMENT_IS_NODE) {
1558        //   // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
1559        //   // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation
1560        //   // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?
1561        //   // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
1562        //   // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call
1563        //   process['stdin']['pause']();
1564        // }
1565      },register:function (dev, ops) {
1566        TTY.ttys[dev] = { input: [], output: [], ops: ops };
1567        FS.registerDevice(dev, TTY.stream_ops);
1568      },stream_ops:{open:function (stream) {
1569          var tty = TTY.ttys[stream.node.rdev];
1570          if (!tty) {
1571            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
1572          }
1573          stream.tty = tty;
1574          stream.seekable = false;
1575        },close:function (stream) {
1576          // flush any pending line data
1577          if (stream.tty.output.length) {
1578            stream.tty.ops.put_char(stream.tty, 10);
1579          }
1580        },read:function (stream, buffer, offset, length, pos /* ignored */) {
1581          if (!stream.tty || !stream.tty.ops.get_char) {
1582            throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1583          }
1584          var bytesRead = 0;
1585          for (var i = 0; i < length; i++) {
1586            var result;
1587            try {
1588              result = stream.tty.ops.get_char(stream.tty);
1589            } catch (e) {
1590              throw new FS.ErrnoError(ERRNO_CODES.EIO);
1591            }
1592            if (result === undefined && bytesRead === 0) {
1593              throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
1594            }
1595            if (result === null || result === undefined) break;
1596            bytesRead++;
1597            buffer[offset+i] = result;
1598          }
1599          if (bytesRead) {
1600            stream.node.timestamp = Date.now();
1601          }
1602          return bytesRead;
1603        },write:function (stream, buffer, offset, length, pos) {
1604          if (!stream.tty || !stream.tty.ops.put_char) {
1605            throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1606          }
1607          for (var i = 0; i < length; i++) {
1608            try {
1609              stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
1610            } catch (e) {
1611              throw new FS.ErrnoError(ERRNO_CODES.EIO);
1612            }
1613          }
1614          if (length) {
1615            stream.node.timestamp = Date.now();
1616          }
1617          return i;
1618        }},default_tty_ops:{get_char:function (tty) {
1619          if (!tty.input.length) {
1620            var result = null;
1621            if (ENVIRONMENT_IS_NODE) {
1622              result = process['stdin']['read']();
1623              if (!result) {
1624                if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) {
1625                  return null;  // EOF
1626                }
1627                return undefined;  // no data available
1628              }
1629            } else if (typeof window != 'undefined' &&
1630              typeof window.prompt == 'function') {
1631              // Browser.
1632              result = window.prompt('Input: ');  // returns null on cancel
1633              if (result !== null) {
1634                result += '\n';
1635              }
1636            } else if (typeof readline == 'function') {
1637              // Command line.
1638              result = readline();
1639              if (result !== null) {
1640                result += '\n';
1641              }
1642            }
1643            if (!result) {
1644              return null;
1645            }
1646            tty.input = intArrayFromString(result, true);
1647          }
1648          return tty.input.shift();
1649        },put_char:function (tty, val) {
1650          if (val === null || val === 10) {
1651            Module['print'](tty.output.join(''));
1652            tty.output = [];
1653          } else {
1654            tty.output.push(TTY.utf8.processCChar(val));
1655          }
1656        }},default_tty1_ops:{put_char:function (tty, val) {
1657          if (val === null || val === 10) {
1658            Module['printErr'](tty.output.join(''));
1659            tty.output = [];
1660          } else {
1661            tty.output.push(TTY.utf8.processCChar(val));
1662          }
1663        }}};
1664
1665  var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3,mount:function (mount) {
1666        return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
1667      },createNode:function (parent, name, mode, dev) {
1668        if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
1669          // no supported
1670          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
1671        }
1672        if (!MEMFS.ops_table) {
1673          MEMFS.ops_table = {
1674            dir: {
1675              node: {
1676                getattr: MEMFS.node_ops.getattr,
1677                setattr: MEMFS.node_ops.setattr,
1678                lookup: MEMFS.node_ops.lookup,
1679                mknod: MEMFS.node_ops.mknod,
1680                rename: MEMFS.node_ops.rename,
1681                unlink: MEMFS.node_ops.unlink,
1682                rmdir: MEMFS.node_ops.rmdir,
1683                readdir: MEMFS.node_ops.readdir,
1684                symlink: MEMFS.node_ops.symlink
1685              },
1686              stream: {
1687                llseek: MEMFS.stream_ops.llseek
1688              }
1689            },
1690            file: {
1691              node: {
1692                getattr: MEMFS.node_ops.getattr,
1693                setattr: MEMFS.node_ops.setattr
1694              },
1695              stream: {
1696                llseek: MEMFS.stream_ops.llseek,
1697                read: MEMFS.stream_ops.read,
1698                write: MEMFS.stream_ops.write,
1699                allocate: MEMFS.stream_ops.allocate,
1700                mmap: MEMFS.stream_ops.mmap
1701              }
1702            },
1703            link: {
1704              node: {
1705                getattr: MEMFS.node_ops.getattr,
1706                setattr: MEMFS.node_ops.setattr,
1707                readlink: MEMFS.node_ops.readlink
1708              },
1709              stream: {}
1710            },
1711            chrdev: {
1712              node: {
1713                getattr: MEMFS.node_ops.getattr,
1714                setattr: MEMFS.node_ops.setattr
1715              },
1716              stream: FS.chrdev_stream_ops
1717            },
1718          };
1719        }
1720        var node = FS.createNode(parent, name, mode, dev);
1721        if (FS.isDir(node.mode)) {
1722          node.node_ops = MEMFS.ops_table.dir.node;
1723          node.stream_ops = MEMFS.ops_table.dir.stream;
1724          node.contents = {};
1725        } else if (FS.isFile(node.mode)) {
1726          node.node_ops = MEMFS.ops_table.file.node;
1727          node.stream_ops = MEMFS.ops_table.file.stream;
1728          node.contents = [];
1729          node.contentMode = MEMFS.CONTENT_FLEXIBLE;
1730        } else if (FS.isLink(node.mode)) {
1731          node.node_ops = MEMFS.ops_table.link.node;
1732          node.stream_ops = MEMFS.ops_table.link.stream;
1733        } else if (FS.isChrdev(node.mode)) {
1734          node.node_ops = MEMFS.ops_table.chrdev.node;
1735          node.stream_ops = MEMFS.ops_table.chrdev.stream;
1736        }
1737        node.timestamp = Date.now();
1738        // add the new node to the parent
1739        if (parent) {
1740          parent.contents[name] = node;
1741        }
1742        return node;
1743      },ensureFlexible:function (node) {
1744        if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) {
1745          var contents = node.contents;
1746          node.contents = Array.prototype.slice.call(contents);
1747          node.contentMode = MEMFS.CONTENT_FLEXIBLE;
1748        }
1749      },node_ops:{getattr:function (node) {
1750          var attr = {};
1751          // device numbers reuse inode numbers.
1752          attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
1753          attr.ino = node.id;
1754          attr.mode = node.mode;
1755          attr.nlink = 1;
1756          attr.uid = 0;
1757          attr.gid = 0;
1758          attr.rdev = node.rdev;
1759          if (FS.isDir(node.mode)) {
1760            attr.size = 4096;
1761          } else if (FS.isFile(node.mode)) {
1762            attr.size = node.contents.length;
1763          } else if (FS.isLink(node.mode)) {
1764            attr.size = node.link.length;
1765          } else {
1766            attr.size = 0;
1767          }
1768          attr.atime = new Date(node.timestamp);
1769          attr.mtime = new Date(node.timestamp);
1770          attr.ctime = new Date(node.timestamp);
1771          // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
1772          //       but this is not required by the standard.
1773          attr.blksize = 4096;
1774          attr.blocks = Math.ceil(attr.size / attr.blksize);
1775          return attr;
1776        },setattr:function (node, attr) {
1777          if (attr.mode !== undefined) {
1778            node.mode = attr.mode;
1779          }
1780          if (attr.timestamp !== undefined) {
1781            node.timestamp = attr.timestamp;
1782          }
1783          if (attr.size !== undefined) {
1784            MEMFS.ensureFlexible(node);
1785            var contents = node.contents;
1786            if (attr.size < contents.length) contents.length = attr.size;
1787            else while (attr.size > contents.length) contents.push(0);
1788          }
1789        },lookup:function (parent, name) {
1790          throw FS.genericErrors[ERRNO_CODES.ENOENT];
1791        },mknod:function (parent, name, mode, dev) {
1792          return MEMFS.createNode(parent, name, mode, dev);
1793        },rename:function (old_node, new_dir, new_name) {
1794          // if we're overwriting a directory at new_name, make sure it's empty.
1795          if (FS.isDir(old_node.mode)) {
1796            var new_node;
1797            try {
1798              new_node = FS.lookupNode(new_dir, new_name);
1799            } catch (e) {
1800            }
1801            if (new_node) {
1802              for (var i in new_node.contents) {
1803                throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
1804              }
1805            }
1806          }
1807          // do the internal rewiring
1808          delete old_node.parent.contents[old_node.name];
1809          old_node.name = new_name;
1810          new_dir.contents[new_name] = old_node;
1811          old_node.parent = new_dir;
1812        },unlink:function (parent, name) {
1813          delete parent.contents[name];
1814        },rmdir:function (parent, name) {
1815          var node = FS.lookupNode(parent, name);
1816          for (var i in node.contents) {
1817            throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
1818          }
1819          delete parent.contents[name];
1820        },readdir:function (node) {
1821          var entries = ['.', '..']
1822          for (var key in node.contents) {
1823            if (!node.contents.hasOwnProperty(key)) {
1824              continue;
1825            }
1826            entries.push(key);
1827          }
1828          return entries;
1829        },symlink:function (parent, newname, oldpath) {
1830          var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);
1831          node.link = oldpath;
1832          return node;
1833        },readlink:function (node) {
1834          if (!FS.isLink(node.mode)) {
1835            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
1836          }
1837          return node.link;
1838        }},stream_ops:{read:function (stream, buffer, offset, length, position) {
1839          var contents = stream.node.contents;
1840          if (position >= contents.length)
1841            return 0;
1842          var size = Math.min(contents.length - position, length);
1843          assert(size >= 0);
1844          if (size > 8 && contents.subarray) { // non-trivial, and typed array
1845            buffer.set(contents.subarray(position, position + size), offset);
1846          } else
1847          {
1848            for (var i = 0; i < size; i++) {
1849              buffer[offset + i] = contents[position + i];
1850            }
1851          }
1852          return size;
1853        },write:function (stream, buffer, offset, length, position, canOwn) {
1854          var node = stream.node;
1855          node.timestamp = Date.now();
1856          var contents = node.contents;
1857          if (length && contents.length === 0 && position === 0 && buffer.subarray) {
1858            // just replace it with the new data
1859            if (canOwn && offset === 0) {
1860              node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source.
1861              node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTENT_OWNING : MEMFS.CONTENT_FIXED;
1862            } else {
1863              node.contents = new Uint8Array(buffer.subarray(offset, offset+length));
1864              node.contentMode = MEMFS.CONTENT_FIXED;
1865            }
1866            return length;
1867          }
1868          MEMFS.ensureFlexible(node);
1869          var contents = node.contents;
1870          while (contents.length < position) contents.push(0);
1871          for (var i = 0; i < length; i++) {
1872            contents[position + i] = buffer[offset + i];
1873          }
1874          return length;
1875        },llseek:function (stream, offset, whence) {
1876          var position = offset;
1877          if (whence === 1) {  // SEEK_CUR.
1878            position += stream.position;
1879          } else if (whence === 2) {  // SEEK_END.
1880            if (FS.isFile(stream.node.mode)) {
1881              position += stream.node.contents.length;
1882            }
1883          }
1884          if (position < 0) {
1885            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
1886          }
1887          stream.ungotten = [];
1888          stream.position = position;
1889          return position;
1890        },allocate:function (stream, offset, length) {
1891          MEMFS.ensureFlexible(stream.node);
1892          var contents = stream.node.contents;
1893          var limit = offset + length;
1894          while (limit > contents.length) contents.push(0);
1895        },mmap:function (stream, buffer, offset, length, position, prot, flags) {
1896          if (!FS.isFile(stream.node.mode)) {
1897            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
1898          }
1899          var ptr;
1900          var allocated;
1901          var contents = stream.node.contents;
1902          // Only make a new copy when MAP_PRIVATE is specified.
1903          if ( !(flags & 2) &&
1904                (contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
1905            // We can't emulate MAP_SHARED when the file is not backed by the buffer
1906            // we're mapping to (e.g. the HEAP buffer).
1907            allocated = false;
1908            ptr = contents.byteOffset;
1909          } else {
1910            // Try to avoid unnecessary slices.
1911            if (position > 0 || position + length < contents.length) {
1912              if (contents.subarray) {
1913                contents = contents.subarray(position, position + length);
1914              } else {
1915                contents = Array.prototype.slice.call(contents, position, position + length);
1916              }
1917            }
1918            allocated = true;
1919            ptr = _malloc(length);
1920            if (!ptr) {
1921              throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
1922            }
1923            buffer.set(contents, ptr);
1924          }
1925          return { ptr: ptr, allocated: allocated };
1926        }}};
1927
1928  var IDBFS={dbs:{},indexedDB:function () {
1929        return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
1930      },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
1931        // reuse all of the core MEMFS functionality
1932        return MEMFS.mount.apply(null, arguments);
1933      },syncfs:function (mount, populate, callback) {
1934        IDBFS.getLocalSet(mount, function(err, local) {
1935          if (err) return callback(err);
1936
1937          IDBFS.getRemoteSet(mount, function(err, remote) {
1938            if (err) return callback(err);
1939
1940            var src = populate ? remote : local;
1941            var dst = populate ? local : remote;
1942
1943            IDBFS.reconcile(src, dst, callback);
1944          });
1945        });
1946      },getDB:function (name, callback) {
1947        // check the cache first
1948        var db = IDBFS.dbs[name];
1949        if (db) {
1950          return callback(null, db);
1951        }
1952
1953        var req;
1954        try {
1955          req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
1956        } catch (e) {
1957          return callback(e);
1958        }
1959        req.onupgradeneeded = function(e) {
1960          var db = e.target.result;
1961          var transaction = e.target.transaction;
1962
1963          var fileStore;
1964
1965          if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
1966            fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
1967          } else {
1968            fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
1969          }
1970
1971          fileStore.createIndex('timestamp', 'timestamp', { unique: false });
1972        };
1973        req.onsuccess = function() {
1974          db = req.result;
1975
1976          // add to the cache
1977          IDBFS.dbs[name] = db;
1978          callback(null, db);
1979        };
1980        req.onerror = function() {
1981          callback(this.error);
1982        };
1983      },getLocalSet:function (mount, callback) {
1984        var entries = {};
1985
1986        function isRealDir(p) {
1987          return p !== '.' && p !== '..';
1988        };
1989        function toAbsolute(root) {
1990          return function(p) {
1991            return PATH.join2(root, p);
1992          }
1993        };
1994
1995        var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
1996
1997        while (check.length) {
1998          var path = check.pop();
1999          var stat;
2000
2001          try {
2002            stat = FS.stat(path);
2003          } catch (e) {
2004            return callback(e);
2005          }
2006
2007          if (FS.isDir(stat.mode)) {
2008            check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));
2009          }
2010
2011          entries[path] = { timestamp: stat.mtime };
2012        }
2013
2014        return callback(null, { type: 'local', entries: entries });
2015      },getRemoteSet:function (mount, callback) {
2016        var entries = {};
2017
2018        IDBFS.getDB(mount.mountpoint, function(err, db) {
2019          if (err) return callback(err);
2020
2021          var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
2022          transaction.onerror = function() { callback(this.error); };
2023
2024          var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2025          var index = store.index('timestamp');
2026
2027          index.openKeyCursor().onsuccess = function(event) {
2028            var cursor = event.target.result;
2029
2030            if (!cursor) {
2031              return callback(null, { type: 'remote', db: db, entries: entries });
2032            }
2033
2034            entries[cursor.primaryKey] = { timestamp: cursor.key };
2035
2036            cursor.continue();
2037          };
2038        });
2039      },loadLocalEntry:function (path, callback) {
2040        var stat, node;
2041
2042        try {
2043          var lookup = FS.lookupPath(path);
2044          node = lookup.node;
2045          stat = FS.stat(path);
2046        } catch (e) {
2047          return callback(e);
2048        }
2049
2050        if (FS.isDir(stat.mode)) {
2051          return callback(null, { timestamp: stat.mtime, mode: stat.mode });
2052        } else if (FS.isFile(stat.mode)) {
2053          return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents });
2054        } else {
2055          return callback(new Error('node type not supported'));
2056        }
2057      },storeLocalEntry:function (path, entry, callback) {
2058        try {
2059          if (FS.isDir(entry.mode)) {
2060            FS.mkdir(path, entry.mode);
2061          } else if (FS.isFile(entry.mode)) {
2062            FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true });
2063          } else {
2064            return callback(new Error('node type not supported'));
2065          }
2066
2067          FS.utime(path, entry.timestamp, entry.timestamp);
2068        } catch (e) {
2069          return callback(e);
2070        }
2071
2072        callback(null);
2073      },removeLocalEntry:function (path, callback) {
2074        try {
2075          var lookup = FS.lookupPath(path);
2076          var stat = FS.stat(path);
2077
2078          if (FS.isDir(stat.mode)) {
2079            FS.rmdir(path);
2080          } else if (FS.isFile(stat.mode)) {
2081            FS.unlink(path);
2082          }
2083        } catch (e) {
2084          return callback(e);
2085        }
2086
2087        callback(null);
2088      },loadRemoteEntry:function (store, path, callback) {
2089        var req = store.get(path);
2090        req.onsuccess = function(event) { callback(null, event.target.result); };
2091        req.onerror = function() { callback(this.error); };
2092      },storeRemoteEntry:function (store, path, entry, callback) {
2093        var req = store.put(entry, path);
2094        req.onsuccess = function() { callback(null); };
2095        req.onerror = function() { callback(this.error); };
2096      },removeRemoteEntry:function (store, path, callback) {
2097        var req = store.delete(path);
2098        req.onsuccess = function() { callback(null); };
2099        req.onerror = function() { callback(this.error); };
2100      },reconcile:function (src, dst, callback) {
2101        var total = 0;
2102
2103        var create = [];
2104        Object.keys(src.entries).forEach(function (key) {
2105          var e = src.entries[key];
2106          var e2 = dst.entries[key];
2107          if (!e2 || e.timestamp > e2.timestamp) {
2108            create.push(key);
2109            total++;
2110          }
2111        });
2112
2113        var remove = [];
2114        Object.keys(dst.entries).forEach(function (key) {
2115          var e = dst.entries[key];
2116          var e2 = src.entries[key];
2117          if (!e2) {
2118            remove.push(key);
2119            total++;
2120          }
2121        });
2122
2123        if (!total) {
2124          return callback(null);
2125        }
2126
2127        var errored = false;
2128        var completed = 0;
2129        var db = src.type === 'remote' ? src.db : dst.db;
2130        var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
2131        var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2132
2133        function done(err) {
2134          if (err) {
2135            if (!done.errored) {
2136              done.errored = true;
2137              return callback(err);
2138            }
2139            return;
2140          }
2141          if (++completed >= total) {
2142            return callback(null);
2143          }
2144        };
2145
2146        transaction.onerror = function() { done(this.error); };
2147
2148        // sort paths in ascending order so directory entries are created
2149        // before the files inside them
2150        create.sort().forEach(function (path) {
2151          if (dst.type === 'local') {
2152            IDBFS.loadRemoteEntry(store, path, function (err, entry) {
2153              if (err) return done(err);
2154              IDBFS.storeLocalEntry(path, entry, done);
2155            });
2156          } else {
2157            IDBFS.loadLocalEntry(path, function (err, entry) {
2158              if (err) return done(err);
2159              IDBFS.storeRemoteEntry(store, path, entry, done);
2160            });
2161          }
2162        });
2163
2164        // sort paths in descending order so files are deleted before their
2165        // parent directories
2166        remove.sort().reverse().forEach(function(path) {
2167          if (dst.type === 'local') {
2168            IDBFS.removeLocalEntry(path, done);
2169          } else {
2170            IDBFS.removeRemoteEntry(store, path, done);
2171          }
2172        });
2173      }};
2174
2175  var NODEFS={isWindows:false,staticInit:function () {
2176        NODEFS.isWindows = !!process.platform.match(/^win/);
2177      },mount:function (mount) {
2178        assert(ENVIRONMENT_IS_NODE);
2179        return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
2180      },createNode:function (parent, name, mode, dev) {
2181        if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
2182          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2183        }
2184        var node = FS.createNode(parent, name, mode);
2185        node.node_ops = NODEFS.node_ops;
2186        node.stream_ops = NODEFS.stream_ops;
2187        return node;
2188      },getMode:function (path) {
2189        var stat;
2190        try {
2191          stat = fs.lstatSync(path);
2192          if (NODEFS.isWindows) {
2193            // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
2194            // propagate write bits to execute bits.
2195            stat.mode = stat.mode | ((stat.mode & 146) >> 1);
2196          }
2197        } catch (e) {
2198          if (!e.code) throw e;
2199          throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2200        }
2201        return stat.mode;
2202      },realPath:function (node) {
2203        var parts = [];
2204        while (node.parent !== node) {
2205          parts.push(node.name);
2206          node = node.parent;
2207        }
2208        parts.push(node.mount.opts.root);
2209        parts.reverse();
2210        return PATH.join.apply(null, parts);
2211      },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function (flags) {
2212        if (flags in NODEFS.flagsToPermissionStringMap) {
2213          return NODEFS.flagsToPermissionStringMap[flags];
2214        } else {
2215          return flags;
2216        }
2217      },node_ops:{getattr:function (node) {
2218          var path = NODEFS.realPath(node);
2219          var stat;
2220          try {
2221            stat = fs.lstatSync(path);
2222          } catch (e) {
2223            if (!e.code) throw e;
2224            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2225          }
2226          // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
2227          // See http://support.microsoft.com/kb/140365
2228          if (NODEFS.isWindows && !stat.blksize) {
2229            stat.blksize = 4096;
2230          }
2231          if (NODEFS.isWindows && !stat.blocks) {
2232            stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
2233          }
2234          return {
2235            dev: stat.dev,
2236            ino: stat.ino,
2237            mode: stat.mode,
2238            nlink: stat.nlink,
2239            uid: stat.uid,
2240            gid: stat.gid,
2241            rdev: stat.rdev,
2242            size: stat.size,
2243            atime: stat.atime,
2244            mtime: stat.mtime,
2245            ctime: stat.ctime,
2246            blksize: stat.blksize,
2247            blocks: stat.blocks
2248          };
2249        },setattr:function (node, attr) {
2250          var path = NODEFS.realPath(node);
2251          try {
2252            if (attr.mode !== undefined) {
2253              fs.chmodSync(path, attr.mode);
2254              // update the common node structure mode as well
2255              node.mode = attr.mode;
2256            }
2257            if (attr.timestamp !== undefined) {
2258              var date = new Date(attr.timestamp);
2259              fs.utimesSync(path, date, date);
2260            }
2261            if (attr.size !== undefined) {
2262              fs.truncateSync(path, attr.size);
2263            }
2264          } catch (e) {
2265            if (!e.code) throw e;
2266            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2267          }
2268        },lookup:function (parent, name) {
2269          var path = PATH.join2(NODEFS.realPath(parent), name);
2270          var mode = NODEFS.getMode(path);
2271          return NODEFS.createNode(parent, name, mode);
2272        },mknod:function (parent, name, mode, dev) {
2273          var node = NODEFS.createNode(parent, name, mode, dev);
2274          // create the backing node for this in the fs root as well
2275          var path = NODEFS.realPath(node);
2276          try {
2277            if (FS.isDir(node.mode)) {
2278              fs.mkdirSync(path, node.mode);
2279            } else {
2280              fs.writeFileSync(path, '', { mode: node.mode });
2281            }
2282          } catch (e) {
2283            if (!e.code) throw e;
2284            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2285          }
2286          return node;
2287        },rename:function (oldNode, newDir, newName) {
2288          var oldPath = NODEFS.realPath(oldNode);
2289          var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
2290          try {
2291            fs.renameSync(oldPath, newPath);
2292          } catch (e) {
2293            if (!e.code) throw e;
2294            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2295          }
2296        },unlink:function (parent, name) {
2297          var path = PATH.join2(NODEFS.realPath(parent), name);
2298          try {
2299            fs.unlinkSync(path);
2300          } catch (e) {
2301            if (!e.code) throw e;
2302            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2303          }
2304        },rmdir:function (parent, name) {
2305          var path = PATH.join2(NODEFS.realPath(parent), name);
2306          try {
2307            fs.rmdirSync(path);
2308          } catch (e) {
2309            if (!e.code) throw e;
2310            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2311          }
2312        },readdir:function (node) {
2313          var path = NODEFS.realPath(node);
2314          try {
2315            return fs.readdirSync(path);
2316          } catch (e) {
2317            if (!e.code) throw e;
2318            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2319          }
2320        },symlink:function (parent, newName, oldPath) {
2321          var newPath = PATH.join2(NODEFS.realPath(parent), newName);
2322          try {
2323            fs.symlinkSync(oldPath, newPath);
2324          } catch (e) {
2325            if (!e.code) throw e;
2326            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2327          }
2328        },readlink:function (node) {
2329          var path = NODEFS.realPath(node);
2330          try {
2331            return fs.readlinkSync(path);
2332          } catch (e) {
2333            if (!e.code) throw e;
2334            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2335          }
2336        }},stream_ops:{open:function (stream) {
2337          var path = NODEFS.realPath(stream.node);
2338          try {
2339            if (FS.isFile(stream.node.mode)) {
2340              stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags));
2341            }
2342          } catch (e) {
2343            if (!e.code) throw e;
2344            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2345          }
2346        },close:function (stream) {
2347          try {
2348            if (FS.isFile(stream.node.mode) && stream.nfd) {
2349              fs.closeSync(stream.nfd);
2350            }
2351          } catch (e) {
2352            if (!e.code) throw e;
2353            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2354          }
2355        },read:function (stream, buffer, offset, length, position) {
2356          // FIXME this is terrible.
2357          var nbuffer = new Buffer(length);
2358          var res;
2359          try {
2360            res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
2361          } catch (e) {
2362            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2363          }
2364          if (res > 0) {
2365            for (var i = 0; i < res; i++) {
2366              buffer[offset + i] = nbuffer[i];
2367            }
2368          }
2369          return res;
2370        },write:function (stream, buffer, offset, length, position) {
2371          // FIXME this is terrible.
2372          var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
2373          var res;
2374          try {
2375            res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
2376          } catch (e) {
2377            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2378          }
2379          return res;
2380        },llseek:function (stream, offset, whence) {
2381          var position = offset;
2382          if (whence === 1) {  // SEEK_CUR.
2383            position += stream.position;
2384          } else if (whence === 2) {  // SEEK_END.
2385            if (FS.isFile(stream.node.mode)) {
2386              try {
2387                var stat = fs.fstatSync(stream.nfd);
2388                position += stat.size;
2389              } catch (e) {
2390                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2391              }
2392            }
2393          }
2394
2395          if (position < 0) {
2396            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2397          }
2398
2399          stream.position = position;
2400          return position;
2401        }}};
2402
2403  var _stdin=allocate(1, "i32*", ALLOC_STATIC);
2404
2405  var _stdout=allocate(1, "i32*", ALLOC_STATIC);
2406
2407  var _stderr=allocate(1, "i32*", ALLOC_STATIC);
2408
2409  function _fflush(stream) {
2410      // int fflush(FILE *stream);
2411      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
2412      // we don't currently perform any user-space buffering of data
2413    }var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},handleFSError:function (e) {
2414        if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
2415        return ___setErrNo(e.errno);
2416      },lookupPath:function (path, opts) {
2417        path = PATH.resolve(FS.cwd(), path);
2418        opts = opts || {};
2419
2420        var defaults = {
2421          follow_mount: true,
2422          recurse_count: 0
2423        };
2424        for (var key in defaults) {
2425          if (opts[key] === undefined) {
2426            opts[key] = defaults[key];
2427          }
2428        }
2429
2430        if (opts.recurse_count > 8) {  // max recursive lookup of 8
2431          throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2432        }
2433
2434        // split the path
2435        var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
2436          return !!p;
2437        }), false);
2438
2439        // start at the root
2440        var current = FS.root;
2441        var current_path = '/';
2442
2443        for (var i = 0; i < parts.length; i++) {
2444          var islast = (i === parts.length-1);
2445          if (islast && opts.parent) {
2446            // stop resolving
2447            break;
2448          }
2449
2450          current = FS.lookupNode(current, parts[i]);
2451          current_path = PATH.join2(current_path, parts[i]);
2452
2453          // jump to the mount's root node if this is a mountpoint
2454          if (FS.isMountpoint(current)) {
2455            if (!islast || (islast && opts.follow_mount)) {
2456              current = current.mounted.root;
2457            }
2458          }
2459
2460          // by default, lookupPath will not follow a symlink if it is the final path component.
2461          // setting opts.follow = true will override this behavior.
2462          if (!islast || opts.follow) {
2463            var count = 0;
2464            while (FS.isLink(current.mode)) {
2465              var link = FS.readlink(current_path);
2466              current_path = PATH.resolve(PATH.dirname(current_path), link);
2467
2468              var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });
2469              current = lookup.node;
2470
2471              if (count++ > 40) {  // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
2472                throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2473              }
2474            }
2475          }
2476        }
2477
2478        return { path: current_path, node: current };
2479      },getPath:function (node) {
2480        var path;
2481        while (true) {
2482          if (FS.isRoot(node)) {
2483            var mount = node.mount.mountpoint;
2484            if (!path) return mount;
2485            return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
2486          }
2487          path = path ? node.name + '/' + path : node.name;
2488          node = node.parent;
2489        }
2490      },hashName:function (parentid, name) {
2491        var hash = 0;
2492
2493
2494        for (var i = 0; i < name.length; i++) {
2495          hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
2496        }
2497        return ((parentid + hash) >>> 0) % FS.nameTable.length;
2498      },hashAddNode:function (node) {
2499        var hash = FS.hashName(node.parent.id, node.name);
2500        node.name_next = FS.nameTable[hash];
2501        FS.nameTable[hash] = node;
2502      },hashRemoveNode:function (node) {
2503        var hash = FS.hashName(node.parent.id, node.name);
2504        if (FS.nameTable[hash] === node) {
2505          FS.nameTable[hash] = node.name_next;
2506        } else {
2507          var current = FS.nameTable[hash];
2508          while (current) {
2509            if (current.name_next === node) {
2510              current.name_next = node.name_next;
2511              break;
2512            }
2513            current = current.name_next;
2514          }
2515        }
2516      },lookupNode:function (parent, name) {
2517        var err = FS.mayLookup(parent);
2518        if (err) {
2519          throw new FS.ErrnoError(err);
2520        }
2521        var hash = FS.hashName(parent.id, name);
2522        for (var node = FS.nameTable[hash]; node; node = node.name_next) {
2523          var nodeName = node.name;
2524          if (node.parent.id === parent.id && nodeName === name) {
2525            return node;
2526          }
2527        }
2528        // if we failed to find it in the cache, call into the VFS
2529        return FS.lookup(parent, name);
2530      },createNode:function (parent, name, mode, rdev) {
2531        if (!FS.FSNode) {
2532          FS.FSNode = function(parent, name, mode, rdev) {
2533            if (!parent) {
2534              parent = this;  // root node sets parent to itself
2535            }
2536            this.parent = parent;
2537            this.mount = parent.mount;
2538            this.mounted = null;
2539            this.id = FS.nextInode++;
2540            this.name = name;
2541            this.mode = mode;
2542            this.node_ops = {};
2543            this.stream_ops = {};
2544            this.rdev = rdev;
2545          };
2546
2547          FS.FSNode.prototype = {};
2548
2549          // compatibility
2550          var readMode = 292 | 73;
2551          var writeMode = 146;
2552
2553          // NOTE we must use Object.defineProperties instead of individual calls to
2554          // Object.defineProperty in order to make closure compiler happy
2555          Object.defineProperties(FS.FSNode.prototype, {
2556            read: {
2557              get: function() { return (this.mode & readMode) === readMode; },
2558              set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
2559            },
2560            write: {
2561              get: function() { return (this.mode & writeMode) === writeMode; },
2562              set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
2563            },
2564            isFolder: {
2565              get: function() { return FS.isDir(this.mode); },
2566            },
2567            isDevice: {
2568              get: function() { return FS.isChrdev(this.mode); },
2569            },
2570          });
2571        }
2572
2573        var node = new FS.FSNode(parent, name, mode, rdev);
2574
2575        FS.hashAddNode(node);
2576
2577        return node;
2578      },destroyNode:function (node) {
2579        FS.hashRemoveNode(node);
2580      },isRoot:function (node) {
2581        return node === node.parent;
2582      },isMountpoint:function (node) {
2583        return !!node.mounted;
2584      },isFile:function (mode) {
2585        return (mode & 61440) === 32768;
2586      },isDir:function (mode) {
2587        return (mode & 61440) === 16384;
2588      },isLink:function (mode) {
2589        return (mode & 61440) === 40960;
2590      },isChrdev:function (mode) {
2591        return (mode & 61440) === 8192;
2592      },isBlkdev:function (mode) {
2593        return (mode & 61440) === 24576;
2594      },isFIFO:function (mode) {
2595        return (mode & 61440) === 4096;
2596      },isSocket:function (mode) {
2597        return (mode & 49152) === 49152;
2598      },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) {
2599        var flags = FS.flagModes[str];
2600        if (typeof flags === 'undefined') {
2601          throw new Error('Unknown file open mode: ' + str);
2602        }
2603        return flags;
2604      },flagsToPermissionString:function (flag) {
2605        var accmode = flag & 2097155;
2606        var perms = ['r', 'w', 'rw'][accmode];
2607        if ((flag & 512)) {
2608          perms += 'w';
2609        }
2610        return perms;
2611      },nodePermissions:function (node, perms) {
2612        if (FS.ignorePermissions) {
2613          return 0;
2614        }
2615        // return 0 if any user, group or owner bits are set.
2616        if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
2617          return ERRNO_CODES.EACCES;
2618        } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
2619          return ERRNO_CODES.EACCES;
2620        } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
2621          return ERRNO_CODES.EACCES;
2622        }
2623        return 0;
2624      },mayLookup:function (dir) {
2625        return FS.nodePermissions(dir, 'x');
2626      },mayCreate:function (dir, name) {
2627        try {
2628          var node = FS.lookupNode(dir, name);
2629          return ERRNO_CODES.EEXIST;
2630        } catch (e) {
2631        }
2632        return FS.nodePermissions(dir, 'wx');
2633      },mayDelete:function (dir, name, isdir) {
2634        var node;
2635        try {
2636          node = FS.lookupNode(dir, name);
2637        } catch (e) {
2638          return e.errno;
2639        }
2640        var err = FS.nodePermissions(dir, 'wx');
2641        if (err) {
2642          return err;
2643        }
2644        if (isdir) {
2645          if (!FS.isDir(node.mode)) {
2646            return ERRNO_CODES.ENOTDIR;
2647          }
2648          if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
2649            return ERRNO_CODES.EBUSY;
2650          }
2651        } else {
2652          if (FS.isDir(node.mode)) {
2653            return ERRNO_CODES.EISDIR;
2654          }
2655        }
2656        return 0;
2657      },mayOpen:function (node, flags) {
2658        if (!node) {
2659          return ERRNO_CODES.ENOENT;
2660        }
2661        if (FS.isLink(node.mode)) {
2662          return ERRNO_CODES.ELOOP;
2663        } else if (FS.isDir(node.mode)) {
2664          if ((flags & 2097155) !== 0 ||  // opening for write
2665              (flags & 512)) {
2666            return ERRNO_CODES.EISDIR;
2667          }
2668        }
2669        return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
2670      },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
2671        fd_start = fd_start || 0;
2672        fd_end = fd_end || FS.MAX_OPEN_FDS;
2673        for (var fd = fd_start; fd <= fd_end; fd++) {
2674          if (!FS.streams[fd]) {
2675            return fd;
2676          }
2677        }
2678        throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
2679      },getStream:function (fd) {
2680        return FS.streams[fd];
2681      },createStream:function (stream, fd_start, fd_end) {
2682        if (!FS.FSStream) {
2683          FS.FSStream = function(){};
2684          FS.FSStream.prototype = {};
2685          // compatibility
2686          Object.defineProperties(FS.FSStream.prototype, {
2687            object: {
2688              get: function() { return this.node; },
2689              set: function(val) { this.node = val; }
2690            },
2691            isRead: {
2692              get: function() { return (this.flags & 2097155) !== 1; }
2693            },
2694            isWrite: {
2695              get: function() { return (this.flags & 2097155) !== 0; }
2696            },
2697            isAppend: {
2698              get: function() { return (this.flags & 1024); }
2699            }
2700          });
2701        }
2702        if (0) {
2703          // reuse the object
2704          stream.__proto__ = FS.FSStream.prototype;
2705        } else {
2706          var newStream = new FS.FSStream();
2707          for (var p in stream) {
2708            newStream[p] = stream[p];
2709          }
2710          stream = newStream;
2711        }
2712        var fd = FS.nextfd(fd_start, fd_end);
2713        stream.fd = fd;
2714        FS.streams[fd] = stream;
2715        return stream;
2716      },closeStream:function (fd) {
2717        FS.streams[fd] = null;
2718      },getStreamFromPtr:function (ptr) {
2719        return FS.streams[ptr - 1];
2720      },getPtrForStream:function (stream) {
2721        return stream ? stream.fd + 1 : 0;
2722      },chrdev_stream_ops:{open:function (stream) {
2723          var device = FS.getDevice(stream.node.rdev);
2724          // override node's stream ops with the device's
2725          stream.stream_ops = device.stream_ops;
2726          // forward the open call
2727          if (stream.stream_ops.open) {
2728            stream.stream_ops.open(stream);
2729          }
2730        },llseek:function () {
2731          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
2732        }},major:function (dev) {
2733        return ((dev) >> 8);
2734      },minor:function (dev) {
2735        return ((dev) & 0xff);
2736      },makedev:function (ma, mi) {
2737        return ((ma) << 8 | (mi));
2738      },registerDevice:function (dev, ops) {
2739        FS.devices[dev] = { stream_ops: ops };
2740      },getDevice:function (dev) {
2741        return FS.devices[dev];
2742      },getMounts:function (mount) {
2743        var mounts = [];
2744        var check = [mount];
2745
2746        while (check.length) {
2747          var m = check.pop();
2748
2749          mounts.push(m);
2750
2751          check.push.apply(check, m.mounts);
2752        }
2753
2754        return mounts;
2755      },syncfs:function (populate, callback) {
2756        if (typeof(populate) === 'function') {
2757          callback = populate;
2758          populate = false;
2759        }
2760
2761        var mounts = FS.getMounts(FS.root.mount);
2762        var completed = 0;
2763
2764        function done(err) {
2765          if (err) {
2766            if (!done.errored) {
2767              done.errored = true;
2768              return callback(err);
2769            }
2770            return;
2771          }
2772          if (++completed >= mounts.length) {
2773            callback(null);
2774          }
2775        };
2776
2777        // sync all mounts
2778        mounts.forEach(function (mount) {
2779          if (!mount.type.syncfs) {
2780            return done(null);
2781          }
2782          mount.type.syncfs(mount, populate, done);
2783        });
2784      },mount:function (type, opts, mountpoint) {
2785        var root = mountpoint === '/';
2786        var pseudo = !mountpoint;
2787        var node;
2788
2789        if (root && FS.root) {
2790          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2791        } else if (!root && !pseudo) {
2792          var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
2793
2794          mountpoint = lookup.path;  // use the absolute path
2795          node = lookup.node;
2796
2797          if (FS.isMountpoint(node)) {
2798            throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2799          }
2800
2801          if (!FS.isDir(node.mode)) {
2802            throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
2803          }
2804        }
2805
2806        var mount = {
2807          type: type,
2808          opts: opts,
2809          mountpoint: mountpoint,
2810          mounts: []
2811        };
2812
2813        // create a root node for the fs
2814        var mountRoot = type.mount(mount);
2815        mountRoot.mount = mount;
2816        mount.root = mountRoot;
2817
2818        if (root) {
2819          FS.root = mountRoot;
2820        } else if (node) {
2821          // set as a mountpoint
2822          node.mounted = mount;
2823
2824          // add the new mount to the current mount's children
2825          if (node.mount) {
2826            node.mount.mounts.push(mount);
2827          }
2828        }
2829
2830        return mountRoot;
2831      },unmount:function (mountpoint) {
2832        var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
2833
2834        if (!FS.isMountpoint(lookup.node)) {
2835          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2836        }
2837
2838        // destroy the nodes for this mount, and all its child mounts
2839        var node = lookup.node;
2840        var mount = node.mounted;
2841        var mounts = FS.getMounts(mount);
2842
2843        Object.keys(FS.nameTable).forEach(function (hash) {
2844          var current = FS.nameTable[hash];
2845
2846          while (current) {
2847            var next = current.name_next;
2848
2849            if (mounts.indexOf(current.mount) !== -1) {
2850              FS.destroyNode(current);
2851            }
2852
2853            current = next;
2854          }
2855        });
2856
2857        // no longer a mountpoint
2858        node.mounted = null;
2859
2860        // remove this mount from the child mounts
2861        var idx = node.mount.mounts.indexOf(mount);
2862        assert(idx !== -1);
2863        node.mount.mounts.splice(idx, 1);
2864      },lookup:function (parent, name) {
2865        return parent.node_ops.lookup(parent, name);
2866      },mknod:function (path, mode, dev) {
2867        var lookup = FS.lookupPath(path, { parent: true });
2868        var parent = lookup.node;
2869        var name = PATH.basename(path);
2870        var err = FS.mayCreate(parent, name);
2871        if (err) {
2872          throw new FS.ErrnoError(err);
2873        }
2874        if (!parent.node_ops.mknod) {
2875          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2876        }
2877        return parent.node_ops.mknod(parent, name, mode, dev);
2878      },create:function (path, mode) {
2879        mode = mode !== undefined ? mode : 438 /* 0666 */;
2880        mode &= 4095;
2881        mode |= 32768;
2882        return FS.mknod(path, mode, 0);
2883      },mkdir:function (path, mode) {
2884        mode = mode !== undefined ? mode : 511 /* 0777 */;
2885        mode &= 511 | 512;
2886        mode |= 16384;
2887        return FS.mknod(path, mode, 0);
2888      },mkdev:function (path, mode, dev) {
2889        if (typeof(dev) === 'undefined') {
2890          dev = mode;
2891          mode = 438 /* 0666 */;
2892        }
2893        mode |= 8192;
2894        return FS.mknod(path, mode, dev);
2895      },symlink:function (oldpath, newpath) {
2896        var lookup = FS.lookupPath(newpath, { parent: true });
2897        var parent = lookup.node;
2898        var newname = PATH.basename(newpath);
2899        var err = FS.mayCreate(parent, newname);
2900        if (err) {
2901          throw new FS.ErrnoError(err);
2902        }
2903        if (!parent.node_ops.symlink) {
2904          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2905        }
2906        return parent.node_ops.symlink(parent, newname, oldpath);
2907      },rename:function (old_path, new_path) {
2908        var old_dirname = PATH.dirname(old_path);
2909        var new_dirname = PATH.dirname(new_path);
2910        var old_name = PATH.basename(old_path);
2911        var new_name = PATH.basename(new_path);
2912        // parents must exist
2913        var lookup, old_dir, new_dir;
2914        try {
2915          lookup = FS.lookupPath(old_path, { parent: true });
2916          old_dir = lookup.node;
2917          lookup = FS.lookupPath(new_path, { parent: true });
2918          new_dir = lookup.node;
2919        } catch (e) {
2920          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2921        }
2922        // need to be part of the same mount
2923        if (old_dir.mount !== new_dir.mount) {
2924          throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
2925        }
2926        // source must exist
2927        var old_node = FS.lookupNode(old_dir, old_name);
2928        // old path should not be an ancestor of the new path
2929        var relative = PATH.relative(old_path, new_dirname);
2930        if (relative.charAt(0) !== '.') {
2931          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2932        }
2933        // new path should not be an ancestor of the old path
2934        relative = PATH.relative(new_path, old_dirname);
2935        if (relative.charAt(0) !== '.') {
2936          throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
2937        }
2938        // see if the new path already exists
2939        var new_node;
2940        try {
2941          new_node = FS.lookupNode(new_dir, new_name);
2942        } catch (e) {
2943          // not fatal
2944        }
2945        // early out if nothing needs to change
2946        if (old_node === new_node) {
2947          return;
2948        }
2949        // we'll need to delete the old entry
2950        var isdir = FS.isDir(old_node.mode);
2951        var err = FS.mayDelete(old_dir, old_name, isdir);
2952        if (err) {
2953          throw new FS.ErrnoError(err);
2954        }
2955        // need delete permissions if we'll be overwriting.
2956        // need create permissions if new doesn't already exist.
2957        err = new_node ?
2958          FS.mayDelete(new_dir, new_name, isdir) :
2959          FS.mayCreate(new_dir, new_name);
2960        if (err) {
2961          throw new FS.ErrnoError(err);
2962        }
2963        if (!old_dir.node_ops.rename) {
2964          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2965        }
2966        if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
2967          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2968        }
2969        // if we are going to change the parent, check write permissions
2970        if (new_dir !== old_dir) {
2971          err = FS.nodePermissions(old_dir, 'w');
2972          if (err) {
2973            throw new FS.ErrnoError(err);
2974          }
2975        }
2976        // remove the node from the lookup hash
2977        FS.hashRemoveNode(old_node);
2978        // do the underlying fs rename
2979        try {
2980          old_dir.node_ops.rename(old_node, new_dir, new_name);
2981        } catch (e) {
2982          throw e;
2983        } finally {
2984          // add the node back to the hash (in case node_ops.rename
2985          // changed its name)
2986          FS.hashAddNode(old_node);
2987        }
2988      },rmdir:function (path) {
2989        var lookup = FS.lookupPath(path, { parent: true });
2990        var parent = lookup.node;
2991        var name = PATH.basename(path);
2992        var node = FS.lookupNode(parent, name);
2993        var err = FS.mayDelete(parent, name, true);
2994        if (err) {
2995          throw new FS.ErrnoError(err);
2996        }
2997        if (!parent.node_ops.rmdir) {
2998          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2999        }
3000        if (FS.isMountpoint(node)) {
3001          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3002        }
3003        parent.node_ops.rmdir(parent, name);
3004        FS.destroyNode(node);
3005      },readdir:function (path) {
3006        var lookup = FS.lookupPath(path, { follow: true });
3007        var node = lookup.node;
3008        if (!node.node_ops.readdir) {
3009          throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3010        }
3011        return node.node_ops.readdir(node);
3012      },unlink:function (path) {
3013        var lookup = FS.lookupPath(path, { parent: true });
3014        var parent = lookup.node;
3015        var name = PATH.basename(path);
3016        var node = FS.lookupNode(parent, name);
3017        var err = FS.mayDelete(parent, name, false);
3018        if (err) {
3019          // POSIX says unlink should set EPERM, not EISDIR
3020          if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM;
3021          throw new FS.ErrnoError(err);
3022        }
3023        if (!parent.node_ops.unlink) {
3024          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3025        }
3026        if (FS.isMountpoint(node)) {
3027          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3028        }
3029        parent.node_ops.unlink(parent, name);
3030        FS.destroyNode(node);
3031      },readlink:function (path) {
3032        var lookup = FS.lookupPath(path);
3033        var link = lookup.node;
3034        if (!link.node_ops.readlink) {
3035          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3036        }
3037        return link.node_ops.readlink(link);
3038      },stat:function (path, dontFollow) {
3039        var lookup = FS.lookupPath(path, { follow: !dontFollow });
3040        var node = lookup.node;
3041        if (!node.node_ops.getattr) {
3042          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3043        }
3044        return node.node_ops.getattr(node);
3045      },lstat:function (path) {
3046        return FS.stat(path, true);
3047      },chmod:function (path, mode, dontFollow) {
3048        var node;
3049        if (typeof path === 'string') {
3050          var lookup = FS.lookupPath(path, { follow: !dontFollow });
3051          node = lookup.node;
3052        } else {
3053          node = path;
3054        }
3055        if (!node.node_ops.setattr) {
3056          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3057        }
3058        node.node_ops.setattr(node, {
3059          mode: (mode & 4095) | (node.mode & ~4095),
3060          timestamp: Date.now()
3061        });
3062      },lchmod:function (path, mode) {
3063        FS.chmod(path, mode, true);
3064      },fchmod:function (fd, mode) {
3065        var stream = FS.getStream(fd);
3066        if (!stream) {
3067          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3068        }
3069        FS.chmod(stream.node, mode);
3070      },chown:function (path, uid, gid, dontFollow) {
3071        var node;
3072        if (typeof path === 'string') {
3073          var lookup = FS.lookupPath(path, { follow: !dontFollow });
3074          node = lookup.node;
3075        } else {
3076          node = path;
3077        }
3078        if (!node.node_ops.setattr) {
3079          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3080        }
3081        node.node_ops.setattr(node, {
3082          timestamp: Date.now()
3083          // we ignore the uid / gid for now
3084        });
3085      },lchown:function (path, uid, gid) {
3086        FS.chown(path, uid, gid, true);
3087      },fchown:function (fd, uid, gid) {
3088        var stream = FS.getStream(fd);
3089        if (!stream) {
3090          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3091        }
3092        FS.chown(stream.node, uid, gid);
3093      },truncate:function (path, len) {
3094        if (len < 0) {
3095          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3096        }
3097        var node;
3098        if (typeof path === 'string') {
3099          var lookup = FS.lookupPath(path, { follow: true });
3100          node = lookup.node;
3101        } else {
3102          node = path;
3103        }
3104        if (!node.node_ops.setattr) {
3105          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3106        }
3107        if (FS.isDir(node.mode)) {
3108          throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3109        }
3110        if (!FS.isFile(node.mode)) {
3111          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3112        }
3113        var err = FS.nodePermissions(node, 'w');
3114        if (err) {
3115          throw new FS.ErrnoError(err);
3116        }
3117        node.node_ops.setattr(node, {
3118          size: len,
3119          timestamp: Date.now()
3120        });
3121      },ftruncate:function (fd, len) {
3122        var stream = FS.getStream(fd);
3123        if (!stream) {
3124          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3125        }
3126        if ((stream.flags & 2097155) === 0) {
3127          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3128        }
3129        FS.truncate(stream.node, len);
3130      },utime:function (path, atime, mtime) {
3131        var lookup = FS.lookupPath(path, { follow: true });
3132        var node = lookup.node;
3133        node.node_ops.setattr(node, {
3134          timestamp: Math.max(atime, mtime)
3135        });
3136      },open:function (path, flags, mode, fd_start, fd_end) {
3137        flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
3138        mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode;
3139        if ((flags & 64)) {
3140          mode = (mode & 4095) | 32768;
3141        } else {
3142          mode = 0;
3143        }
3144        var node;
3145        if (typeof path === 'object') {
3146          node = path;
3147        } else {
3148          path = PATH.normalize(path);
3149          try {
3150            var lookup = FS.lookupPath(path, {
3151              follow: !(flags & 131072)
3152            });
3153            node = lookup.node;
3154          } catch (e) {
3155            // ignore
3156          }
3157        }
3158        // perhaps we need to create the node
3159        if ((flags & 64)) {
3160          if (node) {
3161            // if O_CREAT and O_EXCL are set, error out if the node already exists
3162            if ((flags & 128)) {
3163              throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
3164            }
3165          } else {
3166            // node doesn't exist, try to create it
3167            node = FS.mknod(path, mode, 0);
3168          }
3169        }
3170        if (!node) {
3171          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
3172        }
3173        // can't truncate a device
3174        if (FS.isChrdev(node.mode)) {
3175          flags &= ~512;
3176        }
3177        // check permissions
3178        var err = FS.mayOpen(node, flags);
3179        if (err) {
3180          throw new FS.ErrnoError(err);
3181        }
3182        // do truncation if necessary
3183        if ((flags & 512)) {
3184          FS.truncate(node, 0);
3185        }
3186        // we've already handled these, don't pass down to the underlying vfs
3187        flags &= ~(128 | 512);
3188
3189        // register the stream with the filesystem
3190        var stream = FS.createStream({
3191          node: node,
3192          path: FS.getPath(node),  // we want the absolute path to the node
3193          flags: flags,
3194          seekable: true,
3195          position: 0,
3196          stream_ops: node.stream_ops,
3197          // used by the file family libc calls (fopen, fwrite, ferror, etc.)
3198          ungotten: [],
3199          error: false
3200        }, fd_start, fd_end);
3201        // call the new stream's open function
3202        if (stream.stream_ops.open) {
3203          stream.stream_ops.open(stream);
3204        }
3205        if (Module['logReadFiles'] && !(flags & 1)) {
3206          if (!FS.readFiles) FS.readFiles = {};
3207          if (!(path in FS.readFiles)) {
3208            FS.readFiles[path] = 1;
3209            Module['printErr']('read file: ' + path);
3210          }
3211        }
3212        return stream;
3213      },close:function (stream) {
3214        try {
3215          if (stream.stream_ops.close) {
3216            stream.stream_ops.close(stream);
3217          }
3218        } catch (e) {
3219          throw e;
3220        } finally {
3221          FS.closeStream(stream.fd);
3222        }
3223      },llseek:function (stream, offset, whence) {
3224        if (!stream.seekable || !stream.stream_ops.llseek) {
3225          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3226        }
3227        return stream.stream_ops.llseek(stream, offset, whence);
3228      },read:function (stream, buffer, offset, length, position) {
3229        if (length < 0 || position < 0) {
3230          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3231        }
3232        if ((stream.flags & 2097155) === 1) {
3233          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3234        }
3235        if (FS.isDir(stream.node.mode)) {
3236          throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3237        }
3238        if (!stream.stream_ops.read) {
3239          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3240        }
3241        var seeking = true;
3242        if (typeof position === 'undefined') {
3243          position = stream.position;
3244          seeking = false;
3245        } else if (!stream.seekable) {
3246          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3247        }
3248        var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
3249        if (!seeking) stream.position += bytesRead;
3250        return bytesRead;
3251      },write:function (stream, buffer, offset, length, position, canOwn) {
3252        if (length < 0 || position < 0) {
3253          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3254        }
3255        if ((stream.flags & 2097155) === 0) {
3256          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3257        }
3258        if (FS.isDir(stream.node.mode)) {
3259          throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3260        }
3261        if (!stream.stream_ops.write) {
3262          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3263        }
3264        var seeking = true;
3265        if (typeof position === 'undefined') {
3266          position = stream.position;
3267          seeking = false;
3268        } else if (!stream.seekable) {
3269          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3270        }
3271        if (stream.flags & 1024) {
3272          // seek to the end before writing in append mode
3273          FS.llseek(stream, 0, 2);
3274        }
3275        var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
3276        if (!seeking) stream.position += bytesWritten;
3277        return bytesWritten;
3278      },allocate:function (stream, offset, length) {
3279        if (offset < 0 || length <= 0) {
3280          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3281        }
3282        if ((stream.flags & 2097155) === 0) {
3283          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3284        }
3285        if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
3286          throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3287        }
3288        if (!stream.stream_ops.allocate) {
3289          throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
3290        }
3291        stream.stream_ops.allocate(stream, offset, length);
3292      },mmap:function (stream, buffer, offset, length, position, prot, flags) {
3293        // TODO if PROT is PROT_WRITE, make sure we have write access
3294        if ((stream.flags & 2097155) === 1) {
3295          throw new FS.ErrnoError(ERRNO_CODES.EACCES);
3296        }
3297        if (!stream.stream_ops.mmap) {
3298          throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3299        }
3300        return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
3301      },ioctl:function (stream, cmd, arg) {
3302        if (!stream.stream_ops.ioctl) {
3303          throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
3304        }
3305        return stream.stream_ops.ioctl(stream, cmd, arg);
3306      },readFile:function (path, opts) {
3307        opts = opts || {};
3308        opts.flags = opts.flags || 'r';
3309        opts.encoding = opts.encoding || 'binary';
3310        if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
3311          throw new Error('Invalid encoding type "' + opts.encoding + '"');
3312        }
3313        var ret;
3314        var stream = FS.open(path, opts.flags);
3315        var stat = FS.stat(path);
3316        var length = stat.size;
3317        var buf = new Uint8Array(length);
3318        FS.read(stream, buf, 0, length, 0);
3319        if (opts.encoding === 'utf8') {
3320          ret = '';
3321          var utf8 = new Runtime.UTF8Processor();
3322          for (var i = 0; i < length; i++) {
3323            ret += utf8.processCChar(buf[i]);
3324          }
3325        } else if (opts.encoding === 'binary') {
3326          ret = buf;
3327        }
3328        FS.close(stream);
3329        return ret;
3330      },writeFile:function (path, data, opts) {
3331        opts = opts || {};
3332        opts.flags = opts.flags || 'w';
3333        opts.encoding = opts.encoding || 'utf8';
3334        if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
3335          throw new Error('Invalid encoding type "' + opts.encoding + '"');
3336        }
3337        var stream = FS.open(path, opts.flags, opts.mode);
3338        if (opts.encoding === 'utf8') {
3339          var utf8 = new Runtime.UTF8Processor();
3340          var buf = new Uint8Array(utf8.processJSString(data));
3341          FS.write(stream, buf, 0, buf.length, 0, opts.canOwn);
3342        } else if (opts.encoding === 'binary') {
3343          FS.write(stream, data, 0, data.length, 0, opts.canOwn);
3344        }
3345        FS.close(stream);
3346      },cwd:function () {
3347        return FS.currentPath;
3348      },chdir:function (path) {
3349        var lookup = FS.lookupPath(path, { follow: true });
3350        if (!FS.isDir(lookup.node.mode)) {
3351          throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3352        }
3353        var err = FS.nodePermissions(lookup.node, 'x');
3354        if (err) {
3355          throw new FS.ErrnoError(err);
3356        }
3357        FS.currentPath = lookup.path;
3358      },createDefaultDirectories:function () {
3359        FS.mkdir('/tmp');
3360      },createDefaultDevices:function () {
3361        // create /dev
3362        FS.mkdir('/dev');
3363        // setup /dev/null
3364        FS.registerDevice(FS.makedev(1, 3), {
3365          read: function() { return 0; },
3366          write: function() { return 0; }
3367        });
3368        FS.mkdev('/dev/null', FS.makedev(1, 3));
3369        // setup /dev/tty and /dev/tty1
3370        // stderr needs to print output using Module['printErr']
3371        // so we register a second tty just for it.
3372        TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
3373        TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
3374        FS.mkdev('/dev/tty', FS.makedev(5, 0));
3375        FS.mkdev('/dev/tty1', FS.makedev(6, 0));
3376        // we're not going to emulate the actual shm device,
3377        // just create the tmp dirs that reside in it commonly
3378        FS.mkdir('/dev/shm');
3379        FS.mkdir('/dev/shm/tmp');
3380      },createStandardStreams:function () {
3381        // TODO deprecate the old functionality of a single
3382        // input / output callback and that utilizes FS.createDevice
3383        // and instead require a unique set of stream ops
3384
3385        // by default, we symlink the standard streams to the
3386        // default tty devices. however, if the standard streams
3387        // have been overwritten we create a unique device for
3388        // them instead.
3389        if (Module['stdin']) {
3390          FS.createDevice('/dev', 'stdin', Module['stdin']);
3391        } else {
3392          FS.symlink('/dev/tty', '/dev/stdin');
3393        }
3394        if (Module['stdout']) {
3395          FS.createDevice('/dev', 'stdout', null, Module['stdout']);
3396        } else {
3397          FS.symlink('/dev/tty', '/dev/stdout');
3398        }
3399        if (Module['stderr']) {
3400          FS.createDevice('/dev', 'stderr', null, Module['stderr']);
3401        } else {
3402          FS.symlink('/dev/tty1', '/dev/stderr');
3403        }
3404
3405        // open default streams for the stdin, stdout and stderr devices
3406        var stdin = FS.open('/dev/stdin', 'r');
3407        HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin);
3408        assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
3409
3410        var stdout = FS.open('/dev/stdout', 'w');
3411        HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout);
3412        assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');
3413
3414        var stderr = FS.open('/dev/stderr', 'w');
3415        HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr);
3416        assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');
3417      },ensureErrnoError:function () {
3418        if (FS.ErrnoError) return;
3419        FS.ErrnoError = function ErrnoError(errno) {
3420          this.errno = errno;
3421          for (var key in ERRNO_CODES) {
3422            if (ERRNO_CODES[key] === errno) {
3423              this.code = key;
3424              break;
3425            }
3426          }
3427          this.message = ERRNO_MESSAGES[errno];
3428        };
3429        FS.ErrnoError.prototype = new Error();
3430        FS.ErrnoError.prototype.constructor = FS.ErrnoError;
3431        // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
3432        [ERRNO_CODES.ENOENT].forEach(function(code) {
3433          FS.genericErrors[code] = new FS.ErrnoError(code);
3434          FS.genericErrors[code].stack = '<generic error, no stack>';
3435        });
3436      },staticInit:function () {
3437        FS.ensureErrnoError();
3438
3439        FS.nameTable = new Array(4096);
3440
3441        FS.mount(MEMFS, {}, '/');
3442
3443        FS.createDefaultDirectories();
3444        FS.createDefaultDevices();
3445      },init:function (input, output, error) {
3446        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)');
3447        FS.init.initialized = true;
3448
3449        FS.ensureErrnoError();
3450
3451        // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
3452        Module['stdin'] = input || Module['stdin'];
3453        Module['stdout'] = output || Module['stdout'];
3454        Module['stderr'] = error || Module['stderr'];
3455
3456        FS.createStandardStreams();
3457      },quit:function () {
3458        FS.init.initialized = false;
3459        for (var i = 0; i < FS.streams.length; i++) {
3460          var stream = FS.streams[i];
3461          if (!stream) {
3462            continue;
3463          }
3464          FS.close(stream);
3465        }
3466      },getMode:function (canRead, canWrite) {
3467        var mode = 0;
3468        if (canRead) mode |= 292 | 73;
3469        if (canWrite) mode |= 146;
3470        return mode;
3471      },joinPath:function (parts, forceRelative) {
3472        var path = PATH.join.apply(null, parts);
3473        if (forceRelative && path[0] == '/') path = path.substr(1);
3474        return path;
3475      },absolutePath:function (relative, base) {
3476        return PATH.resolve(base, relative);
3477      },standardizePath:function (path) {
3478        return PATH.normalize(path);
3479      },findObject:function (path, dontResolveLastLink) {
3480        var ret = FS.analyzePath(path, dontResolveLastLink);
3481        if (ret.exists) {
3482          return ret.object;
3483        } else {
3484          ___setErrNo(ret.error);
3485          return null;
3486        }
3487      },analyzePath:function (path, dontResolveLastLink) {
3488        // operate from within the context of the symlink's target
3489        try {
3490          var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3491          path = lookup.path;
3492        } catch (e) {
3493        }
3494        var ret = {
3495          isRoot: false, exists: false, error: 0, name: null, path: null, object: null,
3496          parentExists: false, parentPath: null, parentObject: null
3497        };
3498        try {
3499          var lookup = FS.lookupPath(path, { parent: true });
3500          ret.parentExists = true;
3501          ret.parentPath = lookup.path;
3502          ret.parentObject = lookup.node;
3503          ret.name = PATH.basename(path);
3504          lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3505          ret.exists = true;
3506          ret.path = lookup.path;
3507          ret.object = lookup.node;
3508          ret.name = lookup.node.name;
3509          ret.isRoot = lookup.path === '/';
3510        } catch (e) {
3511          ret.error = e.errno;
3512        };
3513        return ret;
3514      },createFolder:function (parent, name, canRead, canWrite) {
3515        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3516        var mode = FS.getMode(canRead, canWrite);
3517        return FS.mkdir(path, mode);
3518      },createPath:function (parent, path, canRead, canWrite) {
3519        parent = typeof parent === 'string' ? parent : FS.getPath(parent);
3520        var parts = path.split('/').reverse();
3521        while (parts.length) {
3522          var part = parts.pop();
3523          if (!part) continue;
3524          var current = PATH.join2(parent, part);
3525          try {
3526            FS.mkdir(current);
3527          } catch (e) {
3528            // ignore EEXIST
3529          }
3530          parent = current;
3531        }
3532        return current;
3533      },createFile:function (parent, name, properties, canRead, canWrite) {
3534        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3535        var mode = FS.getMode(canRead, canWrite);
3536        return FS.create(path, mode);
3537      },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
3538        var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
3539        var mode = FS.getMode(canRead, canWrite);
3540        var node = FS.create(path, mode);
3541        if (data) {
3542          if (typeof data === 'string') {
3543            var arr = new Array(data.length);
3544            for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
3545            data = arr;
3546          }
3547          // make sure we can write to the file
3548          FS.chmod(node, mode | 146);
3549          var stream = FS.open(node, 'w');
3550          FS.write(stream, data, 0, data.length, 0, canOwn);
3551          FS.close(stream);
3552          FS.chmod(node, mode);
3553        }
3554        return node;
3555      },createDevice:function (parent, name, input, output) {
3556        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3557        var mode = FS.getMode(!!input, !!output);
3558        if (!FS.createDevice.major) FS.createDevice.major = 64;
3559        var dev = FS.makedev(FS.createDevice.major++, 0);
3560        // Create a fake device that a set of stream ops to emulate
3561        // the old behavior.
3562        FS.registerDevice(dev, {
3563          open: function(stream) {
3564            stream.seekable = false;
3565          },
3566          close: function(stream) {
3567            // flush any pending line data
3568            if (output && output.buffer && output.buffer.length) {
3569              output(10);
3570            }
3571          },
3572          read: function(stream, buffer, offset, length, pos /* ignored */) {
3573            var bytesRead = 0;
3574            for (var i = 0; i < length; i++) {
3575              var result;
3576              try {
3577                result = input();
3578              } catch (e) {
3579                throw new FS.ErrnoError(ERRNO_CODES.EIO);
3580              }
3581              if (result === undefined && bytesRead === 0) {
3582                throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
3583              }
3584              if (result === null || result === undefined) break;
3585              bytesRead++;
3586              buffer[offset+i] = result;
3587            }
3588            if (bytesRead) {
3589              stream.node.timestamp = Date.now();
3590            }
3591            return bytesRead;
3592          },
3593          write: function(stream, buffer, offset, length, pos) {
3594            for (var i = 0; i < length; i++) {
3595              try {
3596                output(buffer[offset+i]);
3597              } catch (e) {
3598                throw new FS.ErrnoError(ERRNO_CODES.EIO);
3599              }
3600            }
3601            if (length) {
3602              stream.node.timestamp = Date.now();
3603            }
3604            return i;
3605          }
3606        });
3607        return FS.mkdev(path, mode, dev);
3608      },createLink:function (parent, name, target, canRead, canWrite) {
3609        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3610        return FS.symlink(target, path);
3611      },forceLoadFile:function (obj) {
3612        if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
3613        var success = true;
3614        if (typeof XMLHttpRequest !== 'undefined') {
3615          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.");
3616        } else if (Module['read']) {
3617          // Command-line.
3618          try {
3619            // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
3620            //          read() will try to parse UTF8.
3621            obj.contents = intArrayFromString(Module['read'](obj.url), true);
3622          } catch (e) {
3623            success = false;
3624          }
3625        } else {
3626          throw new Error('Cannot load without read() or XMLHttpRequest.');
3627        }
3628        if (!success) ___setErrNo(ERRNO_CODES.EIO);
3629        return success;
3630      },createLazyFile:function (parent, name, url, canRead, canWrite) {
3631        // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
3632        function LazyUint8Array() {
3633          this.lengthKnown = false;
3634          this.chunks = []; // Loaded chunks. Index is the chunk number
3635        }
3636        LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
3637          if (idx > this.length-1 || idx < 0) {
3638            return undefined;
3639          }
3640          var chunkOffset = idx % this.chunkSize;
3641          var chunkNum = Math.floor(idx / this.chunkSize);
3642          return this.getter(chunkNum)[chunkOffset];
3643        }
3644        LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
3645          this.getter = getter;
3646        }
3647        LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
3648            // Find length
3649            var xhr = new XMLHttpRequest();
3650            xhr.open('HEAD', url, false);
3651            xhr.send(null);
3652            if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3653            var datalength = Number(xhr.getResponseHeader("Content-length"));
3654            var header;
3655            var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
3656            var chunkSize = 1024*1024; // Chunk size in bytes
3657
3658            if (!hasByteServing) chunkSize = datalength;
3659
3660            // Function to get a range from the remote URL.
3661            var doXHR = (function(from, to) {
3662              if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
3663              if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
3664
3665              // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
3666              var xhr = new XMLHttpRequest();
3667              xhr.open('GET', url, false);
3668              if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
3669
3670              // Some hints to the browser that we want binary data.
3671              if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
3672              if (xhr.overrideMimeType) {
3673                xhr.overrideMimeType('text/plain; charset=x-user-defined');
3674              }
3675
3676              xhr.send(null);
3677              if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3678              if (xhr.response !== undefined) {
3679                return new Uint8Array(xhr.response || []);
3680              } else {
3681                return intArrayFromString(xhr.responseText || '', true);
3682              }
3683            });
3684            var lazyArray = this;
3685            lazyArray.setDataGetter(function(chunkNum) {
3686              var start = chunkNum * chunkSize;
3687              var end = (chunkNum+1) * chunkSize - 1; // including this byte
3688              end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
3689              if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
3690                lazyArray.chunks[chunkNum] = doXHR(start, end);
3691              }
3692              if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
3693              return lazyArray.chunks[chunkNum];
3694            });
3695
3696            this._length = datalength;
3697            this._chunkSize = chunkSize;
3698            this.lengthKnown = true;
3699        }
3700        if (typeof XMLHttpRequest !== 'undefined') {
3701          if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
3702          var lazyArray = new LazyUint8Array();
3703          Object.defineProperty(lazyArray, "length", {
3704              get: function() {
3705                  if(!this.lengthKnown) {
3706                      this.cacheLength();
3707                  }
3708                  return this._length;
3709              }
3710          });
3711          Object.defineProperty(lazyArray, "chunkSize", {
3712              get: function() {
3713                  if(!this.lengthKnown) {
3714                      this.cacheLength();
3715                  }
3716                  return this._chunkSize;
3717              }
3718          });
3719
3720          var properties = { isDevice: false, contents: lazyArray };
3721        } else {
3722          var properties = { isDevice: false, url: url };
3723        }
3724
3725        var node = FS.createFile(parent, name, properties, canRead, canWrite);
3726        // This is a total hack, but I want to get this lazy file code out of the
3727        // core of MEMFS. If we want to keep this lazy file concept I feel it should
3728        // be its own thin LAZYFS proxying calls to MEMFS.
3729        if (properties.contents) {
3730          node.contents = properties.contents;
3731        } else if (properties.url) {
3732          node.contents = null;
3733          node.url = properties.url;
3734        }
3735        // override each stream op with one that tries to force load the lazy file first
3736        var stream_ops = {};
3737        var keys = Object.keys(node.stream_ops);
3738        keys.forEach(function(key) {
3739          var fn = node.stream_ops[key];
3740          stream_ops[key] = function forceLoadLazyFile() {
3741            if (!FS.forceLoadFile(node)) {
3742              throw new FS.ErrnoError(ERRNO_CODES.EIO);
3743            }
3744            return fn.apply(null, arguments);
3745          };
3746        });
3747        // use a custom read function
3748        stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
3749          if (!FS.forceLoadFile(node)) {
3750            throw new FS.ErrnoError(ERRNO_CODES.EIO);
3751          }
3752          var contents = stream.node.contents;
3753          if (position >= contents.length)
3754            return 0;
3755          var size = Math.min(contents.length - position, length);
3756          assert(size >= 0);
3757          if (contents.slice) { // normal array
3758            for (var i = 0; i < size; i++) {
3759              buffer[offset + i] = contents[position + i];
3760            }
3761          } else {
3762            for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
3763              buffer[offset + i] = contents.get(position + i);
3764            }
3765          }
3766          return size;
3767        };
3768        node.stream_ops = stream_ops;
3769        return node;
3770      },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) {
3771        Browser.init();
3772        // TODO we should allow people to just pass in a complete filename instead
3773        // of parent and name being that we just join them anyways
3774        var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
3775        function processData(byteArray) {
3776          function finish(byteArray) {
3777            if (!dontCreateFile) {
3778              FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
3779            }
3780            if (onload) onload();
3781            removeRunDependency('cp ' + fullname);
3782          }
3783          var handled = false;
3784          Module['preloadPlugins'].forEach(function(plugin) {
3785            if (handled) return;
3786            if (plugin['canHandle'](fullname)) {
3787              plugin['handle'](byteArray, fullname, finish, function() {
3788                if (onerror) onerror();
3789                removeRunDependency('cp ' + fullname);
3790              });
3791              handled = true;
3792            }
3793          });
3794          if (!handled) finish(byteArray);
3795        }
3796        addRunDependency('cp ' + fullname);
3797        if (typeof url == 'string') {
3798          Browser.asyncLoad(url, function(byteArray) {
3799            processData(byteArray);
3800          }, onerror);
3801        } else {
3802          processData(url);
3803        }
3804      },indexedDB:function () {
3805        return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
3806      },DB_NAME:function () {
3807        return 'EM_FS_' + window.location.pathname;
3808      },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) {
3809        onload = onload || function(){};
3810        onerror = onerror || function(){};
3811        var indexedDB = FS.indexedDB();
3812        try {
3813          var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
3814        } catch (e) {
3815          return onerror(e);
3816        }
3817        openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
3818          console.log('creating db');
3819          var db = openRequest.result;
3820          db.createObjectStore(FS.DB_STORE_NAME);
3821        };
3822        openRequest.onsuccess = function openRequest_onsuccess() {
3823          var db = openRequest.result;
3824          var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
3825          var files = transaction.objectStore(FS.DB_STORE_NAME);
3826          var ok = 0, fail = 0, total = paths.length;
3827          function finish() {
3828            if (fail == 0) onload(); else onerror();
3829          }
3830          paths.forEach(function(path) {
3831            var putRequest = files.put(FS.analyzePath(path).object.contents, path);
3832            putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() };
3833            putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
3834          });
3835          transaction.onerror = onerror;
3836        };
3837        openRequest.onerror = onerror;
3838      },loadFilesFromDB:function (paths, onload, onerror) {
3839        onload = onload || function(){};
3840        onerror = onerror || function(){};
3841        var indexedDB = FS.indexedDB();
3842        try {
3843          var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
3844        } catch (e) {
3845          return onerror(e);
3846        }
3847        openRequest.onupgradeneeded = onerror; // no database to load from
3848        openRequest.onsuccess = function openRequest_onsuccess() {
3849          var db = openRequest.result;
3850          try {
3851            var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
3852          } catch(e) {
3853            onerror(e);
3854            return;
3855          }
3856          var files = transaction.objectStore(FS.DB_STORE_NAME);
3857          var ok = 0, fail = 0, total = paths.length;
3858          function finish() {
3859            if (fail == 0) onload(); else onerror();
3860          }
3861          paths.forEach(function(path) {
3862            var getRequest = files.get(path);
3863            getRequest.onsuccess = function getRequest_onsuccess() {
3864              if (FS.analyzePath(path).exists) {
3865                FS.unlink(path);
3866              }
3867              FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
3868              ok++;
3869              if (ok + fail == total) finish();
3870            };
3871            getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
3872          });
3873          transaction.onerror = onerror;
3874        };
3875        openRequest.onerror = onerror;
3876      }};
3877
3878
3879
3880
3881  function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) {
3882        return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
3883      },createSocket:function (family, type, protocol) {
3884        var streaming = type == 1;
3885        if (protocol) {
3886          assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp
3887        }
3888
3889        // create our internal socket structure
3890        var sock = {
3891          family: family,
3892          type: type,
3893          protocol: protocol,
3894          server: null,
3895          peers: {},
3896          pending: [],
3897          recv_queue: [],
3898          sock_ops: SOCKFS.websocket_sock_ops
3899        };
3900
3901        // create the filesystem node to store the socket structure
3902        var name = SOCKFS.nextname();
3903        var node = FS.createNode(SOCKFS.root, name, 49152, 0);
3904        node.sock = sock;
3905
3906        // and the wrapping stream that enables library functions such
3907        // as read and write to indirectly interact with the socket
3908        var stream = FS.createStream({
3909          path: name,
3910          node: node,
3911          flags: FS.modeStringToFlags('r+'),
3912          seekable: false,
3913          stream_ops: SOCKFS.stream_ops
3914        });
3915
3916        // map the new stream to the socket structure (sockets have a 1:1
3917        // relationship with a stream)
3918        sock.stream = stream;
3919
3920        return sock;
3921      },getSocket:function (fd) {
3922        var stream = FS.getStream(fd);
3923        if (!stream || !FS.isSocket(stream.node.mode)) {
3924          return null;
3925        }
3926        return stream.node.sock;
3927      },stream_ops:{poll:function (stream) {
3928          var sock = stream.node.sock;
3929          return sock.sock_ops.poll(sock);
3930        },ioctl:function (stream, request, varargs) {
3931          var sock = stream.node.sock;
3932          return sock.sock_ops.ioctl(sock, request, varargs);
3933        },read:function (stream, buffer, offset, length, position /* ignored */) {
3934          var sock = stream.node.sock;
3935          var msg = sock.sock_ops.recvmsg(sock, length);
3936          if (!msg) {
3937            // socket is closed
3938            return 0;
3939          }
3940          buffer.set(msg.buffer, offset);
3941          return msg.buffer.length;
3942        },write:function (stream, buffer, offset, length, position /* ignored */) {
3943          var sock = stream.node.sock;
3944          return sock.sock_ops.sendmsg(sock, buffer, offset, length);
3945        },close:function (stream) {
3946          var sock = stream.node.sock;
3947          sock.sock_ops.close(sock);
3948        }},nextname:function () {
3949        if (!SOCKFS.nextname.current) {
3950          SOCKFS.nextname.current = 0;
3951        }
3952        return 'socket[' + (SOCKFS.nextname.current++) + ']';
3953      },websocket_sock_ops:{createPeer:function (sock, addr, port) {
3954          var ws;
3955
3956          if (typeof addr === 'object') {
3957            ws = addr;
3958            addr = null;
3959            port = null;
3960          }
3961
3962          if (ws) {
3963            // for sockets that've already connected (e.g. we're the server)
3964            // we can inspect the _socket property for the address
3965            if (ws._socket) {
3966              addr = ws._socket.remoteAddress;
3967              port = ws._socket.remotePort;
3968            }
3969            // if we're just now initializing a connection to the remote,
3970            // inspect the url property
3971            else {
3972              var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);
3973              if (!result) {
3974                throw new Error('WebSocket URL must be in the format ws(s)://address:port');
3975              }
3976              addr = result[1];
3977              port = parseInt(result[2], 10);
3978            }
3979          } else {
3980            // create the actual websocket object and connect
3981            try {
3982              // runtimeConfig gets set to true if WebSocket runtime configuration is available.
3983              var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket']));
3984
3985              // The default value is 'ws://' the replace is needed because the compiler replaces "//" comments with '#'
3986              // comments without checking context, so we'd end up with ws:#, the replace swaps the "#" for "//" again.
3987              var url = 'ws:#'.replace('#', '//');
3988
3989              if (runtimeConfig) {
3990                if ('string' === typeof Module['websocket']['url']) {
3991                  url = Module['websocket']['url']; // Fetch runtime WebSocket URL config.
3992                }
3993              }
3994
3995              if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it.
3996                url = url + addr + ':' + port;
3997              }
3998
3999              // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set.
4000              var subProtocols = 'binary'; // The default value is 'binary'
4001
4002              if (runtimeConfig) {
4003                if ('string' === typeof Module['websocket']['subprotocol']) {
4004                  subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config.
4005                }
4006              }
4007
4008              // The regex trims the string (removes spaces at the beginning and end, then splits the string by
4009              // <any space>,<any space> into an Array. Whitespace removal is important for Websockify and ws.
4010              subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */);
4011
4012              // The node ws library API for specifying optional subprotocol is slightly different than the browser's.
4013              var opts = ENVIRONMENT_IS_NODE ? {'protocol': subProtocols.toString()} : subProtocols;
4014
4015              // If node we use the ws library.
4016              var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket'];
4017              ws = new WebSocket(url, opts);
4018              ws.binaryType = 'arraybuffer';
4019            } catch (e) {
4020              throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH);
4021            }
4022          }
4023
4024
4025          var peer = {
4026            addr: addr,
4027            port: port,
4028            socket: ws,
4029            dgram_send_queue: []
4030          };
4031
4032          SOCKFS.websocket_sock_ops.addPeer(sock, peer);
4033          SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer);
4034
4035          // if this is a bound dgram socket, send the port number first to allow
4036          // us to override the ephemeral port reported to us by remotePort on the
4037          // remote end.
4038          if (sock.type === 2 && typeof sock.sport !== 'undefined') {
4039            peer.dgram_send_queue.push(new Uint8Array([
4040                255, 255, 255, 255,
4041                'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0),
4042                ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff)
4043            ]));
4044          }
4045
4046          return peer;
4047        },getPeer:function (sock, addr, port) {
4048          return sock.peers[addr + ':' + port];
4049        },addPeer:function (sock, peer) {
4050          sock.peers[peer.addr + ':' + peer.port] = peer;
4051        },removePeer:function (sock, peer) {
4052          delete sock.peers[peer.addr + ':' + peer.port];
4053        },handlePeerEvents:function (sock, peer) {
4054          var first = true;
4055
4056          var handleOpen = function () {
4057            try {
4058              var queued = peer.dgram_send_queue.shift();
4059              while (queued) {
4060                peer.socket.send(queued);
4061                queued = peer.dgram_send_queue.shift();
4062              }
4063            } catch (e) {
4064              // not much we can do here in the way of proper error handling as we've already
4065              // lied and said this data was sent. shut it down.
4066              peer.socket.close();
4067            }
4068          };
4069
4070          function handleMessage(data) {
4071            assert(typeof data !== 'string' && data.byteLength !== undefined);  // must receive an ArrayBuffer
4072            data = new Uint8Array(data);  // make a typed array view on the array buffer
4073
4074
4075            // if this is the port message, override the peer's port with it
4076            var wasfirst = first;
4077            first = false;
4078            if (wasfirst &&
4079                data.length === 10 &&
4080                data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 &&
4081                data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) {
4082              // update the peer's port and it's key in the peer map
4083              var newport = ((data[8] << 8) | data[9]);
4084              SOCKFS.websocket_sock_ops.removePeer(sock, peer);
4085              peer.port = newport;
4086              SOCKFS.websocket_sock_ops.addPeer(sock, peer);
4087              return;
4088            }
4089
4090            sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data });
4091          };
4092
4093          if (ENVIRONMENT_IS_NODE) {
4094            peer.socket.on('open', handleOpen);
4095            peer.socket.on('message', function(data, flags) {
4096              if (!flags.binary) {
4097                return;
4098              }
4099              handleMessage((new Uint8Array(data)).buffer);  // copy from node Buffer -> ArrayBuffer
4100            });
4101            peer.socket.on('error', function() {
4102              // don't throw
4103            });
4104          } else {
4105            peer.socket.onopen = handleOpen;
4106            peer.socket.onmessage = function peer_socket_onmessage(event) {
4107              handleMessage(event.data);
4108            };
4109          }
4110        },poll:function (sock) {
4111          if (sock.type === 1 && sock.server) {
4112            // listen sockets should only say they're available for reading
4113            // if there are pending clients.
4114            return sock.pending.length ? (64 | 1) : 0;
4115          }
4116
4117          var mask = 0;
4118          var dest = sock.type === 1 ?  // we only care about the socket state for connection-based sockets
4119            SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) :
4120            null;
4121
4122          if (sock.recv_queue.length ||
4123              !dest ||  // connection-less sockets are always ready to read
4124              (dest && dest.socket.readyState === dest.socket.CLOSING) ||
4125              (dest && dest.socket.readyState === dest.socket.CLOSED)) {  // let recv return 0 once closed
4126            mask |= (64 | 1);
4127          }
4128
4129          if (!dest ||  // connection-less sockets are always ready to write
4130              (dest && dest.socket.readyState === dest.socket.OPEN)) {
4131            mask |= 4;
4132          }
4133
4134          if ((dest && dest.socket.readyState === dest.socket.CLOSING) ||
4135              (dest && dest.socket.readyState === dest.socket.CLOSED)) {
4136            mask |= 16;
4137          }
4138
4139          return mask;
4140        },ioctl:function (sock, request, arg) {
4141          switch (request) {
4142            case 21531:
4143              var bytes = 0;
4144              if (sock.recv_queue.length) {
4145                bytes = sock.recv_queue[0].data.length;
4146              }
4147              HEAP32[((arg)>>2)]=bytes;
4148              return 0;
4149            default:
4150              return ERRNO_CODES.EINVAL;
4151          }
4152        },close:function (sock) {
4153          // if we've spawned a listen server, close it
4154          if (sock.server) {
4155            try {
4156              sock.server.close();
4157            } catch (e) {
4158            }
4159            sock.server = null;
4160          }
4161          // close any peer connections
4162          var peers = Object.keys(sock.peers);
4163          for (var i = 0; i < peers.length; i++) {
4164            var peer = sock.peers[peers[i]];
4165            try {
4166              peer.socket.close();
4167            } catch (e) {
4168            }
4169            SOCKFS.websocket_sock_ops.removePeer(sock, peer);
4170          }
4171          return 0;
4172        },bind:function (sock, addr, port) {
4173          if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') {
4174            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);  // already bound
4175          }
4176          sock.saddr = addr;
4177          sock.sport = port || _mkport();
4178          // in order to emulate dgram sockets, we need to launch a listen server when
4179          // binding on a connection-less socket
4180          // note: this is only required on the server side
4181          if (sock.type === 2) {
4182            // close the existing server if it exists
4183            if (sock.server) {
4184              sock.server.close();
4185              sock.server = null;
4186            }
4187            // swallow error operation not supported error that occurs when binding in the
4188            // browser where this isn't supported
4189            try {
4190              sock.sock_ops.listen(sock, 0);
4191            } catch (e) {
4192              if (!(e instanceof FS.ErrnoError)) throw e;
4193              if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e;
4194            }
4195          }
4196        },connect:function (sock, addr, port) {
4197          if (sock.server) {
4198            throw new FS.ErrnoError(ERRNO_CODS.EOPNOTSUPP);
4199          }
4200
4201          // TODO autobind
4202          // if (!sock.addr && sock.type == 2) {
4203          // }
4204
4205          // early out if we're already connected / in the middle of connecting
4206          if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') {
4207            var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
4208            if (dest) {
4209              if (dest.socket.readyState === dest.socket.CONNECTING) {
4210                throw new FS.ErrnoError(ERRNO_CODES.EALREADY);
4211              } else {
4212                throw new FS.ErrnoError(ERRNO_CODES.EISCONN);
4213              }
4214            }
4215          }
4216
4217          // add the socket to our peer list and set our
4218          // destination address / port to match
4219          var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
4220          sock.daddr = peer.addr;
4221          sock.dport = peer.port;
4222
4223          // always "fail" in non-blocking mode
4224          throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS);
4225        },listen:function (sock, backlog) {
4226          if (!ENVIRONMENT_IS_NODE) {
4227            throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
4228          }
4229          if (sock.server) {
4230             throw new FS.ErrnoError(ERRNO_CODES.EINVAL);  // already listening
4231          }
4232          var WebSocketServer = require('ws').Server;
4233          var host = sock.saddr;
4234          sock.server = new WebSocketServer({
4235            host: host,
4236            port: sock.sport
4237            // TODO support backlog
4238          });
4239
4240          sock.server.on('connection', function(ws) {
4241            if (sock.type === 1) {
4242              var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol);
4243
4244              // create a peer on the new socket
4245              var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws);
4246              newsock.daddr = peer.addr;
4247              newsock.dport = peer.port;
4248
4249              // push to queue for accept to pick up
4250              sock.pending.push(newsock);
4251            } else {
4252              // create a peer on the listen socket so calling sendto
4253              // with the listen socket and an address will resolve
4254              // to the correct client
4255              SOCKFS.websocket_sock_ops.createPeer(sock, ws);
4256            }
4257          });
4258          sock.server.on('closed', function() {
4259            sock.server = null;
4260          });
4261          sock.server.on('error', function() {
4262            // don't throw
4263          });
4264        },accept:function (listensock) {
4265          if (!listensock.server) {
4266            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
4267          }
4268          var newsock = listensock.pending.shift();
4269          newsock.stream.flags = listensock.stream.flags;
4270          return newsock;
4271        },getname:function (sock, peer) {
4272          var addr, port;
4273          if (peer) {
4274            if (sock.daddr === undefined || sock.dport === undefined) {
4275              throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4276            }
4277            addr = sock.daddr;
4278            port = sock.dport;
4279          } else {
4280            // TODO saddr and sport will be set for bind()'d UDP sockets, but what
4281            // should we be returning for TCP sockets that've been connect()'d?
4282            addr = sock.saddr || 0;
4283            port = sock.sport || 0;
4284          }
4285          return { addr: addr, port: port };
4286        },sendmsg:function (sock, buffer, offset, length, addr, port) {
4287          if (sock.type === 2) {
4288            // connection-less sockets will honor the message address,
4289            // and otherwise fall back to the bound destination address
4290            if (addr === undefined || port === undefined) {
4291              addr = sock.daddr;
4292              port = sock.dport;
4293            }
4294            // if there was no address to fall back to, error out
4295            if (addr === undefined || port === undefined) {
4296              throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ);
4297            }
4298          } else {
4299            // connection-based sockets will only use the bound
4300            addr = sock.daddr;
4301            port = sock.dport;
4302          }
4303
4304          // find the peer for the destination address
4305          var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port);
4306
4307          // early out if not connected with a connection-based socket
4308          if (sock.type === 1) {
4309            if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
4310              throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4311            } else if (dest.socket.readyState === dest.socket.CONNECTING) {
4312              throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4313            }
4314          }
4315
4316          // create a copy of the incoming data to send, as the WebSocket API
4317          // doesn't work entirely with an ArrayBufferView, it'll just send
4318          // the entire underlying buffer
4319          var data;
4320          if (buffer instanceof Array || buffer instanceof ArrayBuffer) {
4321            data = buffer.slice(offset, offset + length);
4322          } else {  // ArrayBufferView
4323            data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length);
4324          }
4325
4326          // if we're emulating a connection-less dgram socket and don't have
4327          // a cached connection, queue the buffer to send upon connect and
4328          // lie, saying the data was sent now.
4329          if (sock.type === 2) {
4330            if (!dest || dest.socket.readyState !== dest.socket.OPEN) {
4331              // if we're not connected, open a new connection
4332              if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
4333                dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
4334              }
4335              dest.dgram_send_queue.push(data);
4336              return length;
4337            }
4338          }
4339
4340          try {
4341            // send the actual data
4342            dest.socket.send(data);
4343            return length;
4344          } catch (e) {
4345            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
4346          }
4347        },recvmsg:function (sock, length) {
4348          // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html
4349          if (sock.type === 1 && sock.server) {
4350            // tcp servers should not be recv()'ing on the listen socket
4351            throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4352          }
4353
4354          var queued = sock.recv_queue.shift();
4355          if (!queued) {
4356            if (sock.type === 1) {
4357              var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
4358
4359              if (!dest) {
4360                // if we have a destination address but are not connected, error out
4361                throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4362              }
4363              else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
4364                // return null if the socket has closed
4365                return null;
4366              }
4367              else {
4368                // else, our socket is in a valid state but truly has nothing available
4369                throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4370              }
4371            } else {
4372              throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4373            }
4374          }
4375
4376          // queued.data will be an ArrayBuffer if it's unadulterated, but if it's
4377          // requeued TCP data it'll be an ArrayBufferView
4378          var queuedLength = queued.data.byteLength || queued.data.length;
4379          var queuedOffset = queued.data.byteOffset || 0;
4380          var queuedBuffer = queued.data.buffer || queued.data;
4381          var bytesRead = Math.min(length, queuedLength);
4382          var res = {
4383            buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead),
4384            addr: queued.addr,
4385            port: queued.port
4386          };
4387
4388
4389          // push back any unread data for TCP connections
4390          if (sock.type === 1 && bytesRead < queuedLength) {
4391            var bytesRemaining = queuedLength - bytesRead;
4392            queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining);
4393            sock.recv_queue.unshift(queued);
4394          }
4395
4396          return res;
4397        }}};function _send(fd, buf, len, flags) {
4398      var sock = SOCKFS.getSocket(fd);
4399      if (!sock) {
4400        ___setErrNo(ERRNO_CODES.EBADF);
4401        return -1;
4402      }
4403      // TODO honor flags
4404      return _write(fd, buf, len);
4405    }
4406
4407  function _pwrite(fildes, buf, nbyte, offset) {
4408      // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
4409      // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
4410      var stream = FS.getStream(fildes);
4411      if (!stream) {
4412        ___setErrNo(ERRNO_CODES.EBADF);
4413        return -1;
4414      }
4415      try {
4416        var slab = HEAP8;
4417        return FS.write(stream, slab, buf, nbyte, offset);
4418      } catch (e) {
4419        FS.handleFSError(e);
4420        return -1;
4421      }
4422    }function _write(fildes, buf, nbyte) {
4423      // ssize_t write(int fildes, const void *buf, size_t nbyte);
4424      // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
4425      var stream = FS.getStream(fildes);
4426      if (!stream) {
4427        ___setErrNo(ERRNO_CODES.EBADF);
4428        return -1;
4429      }
4430
4431
4432      try {
4433        var slab = HEAP8;
4434        return FS.write(stream, slab, buf, nbyte);
4435      } catch (e) {
4436        FS.handleFSError(e);
4437        return -1;
4438      }
4439    }
4440
4441  function _fileno(stream) {
4442      // int fileno(FILE *stream);
4443      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html
4444      stream = FS.getStreamFromPtr(stream);
4445      if (!stream) return -1;
4446      return stream.fd;
4447    }function _fwrite(ptr, size, nitems, stream) {
4448      // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
4449      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
4450      var bytesToWrite = nitems * size;
4451      if (bytesToWrite == 0) return 0;
4452      var fd = _fileno(stream);
4453      var bytesWritten = _write(fd, ptr, bytesToWrite);
4454      if (bytesWritten == -1) {
4455        var streamObj = FS.getStreamFromPtr(stream);
4456        if (streamObj) streamObj.error = true;
4457        return 0;
4458      } else {
4459        return Math.floor(bytesWritten / size);
4460      }
4461    }
4462
4463
4464
4465  Module["_strlen"] = _strlen;
4466
4467  function __reallyNegative(x) {
4468      return x < 0 || (x === 0 && (1/x) === -Infinity);
4469    }function __formatString(format, varargs) {
4470      var textIndex = format;
4471      var argIndex = 0;
4472      function getNextArg(type) {
4473        // NOTE: Explicitly ignoring type safety. Otherwise this fails:
4474        //       int x = 4; printf("%c\n", (char)x);
4475        var ret;
4476        if (type === 'double') {
4477          ret = HEAPF64[(((varargs)+(argIndex))>>3)];
4478        } else if (type == 'i64') {
4479          ret = [HEAP32[(((varargs)+(argIndex))>>2)],
4480                 HEAP32[(((varargs)+(argIndex+4))>>2)]];
4481
4482        } else {
4483          type = 'i32'; // varargs are always i32, i64, or double
4484          ret = HEAP32[(((varargs)+(argIndex))>>2)];
4485        }
4486        argIndex += Runtime.getNativeFieldSize(type);
4487        return ret;
4488      }
4489
4490      var ret = [];
4491      var curr, next, currArg;
4492      while(1) {
4493        var startTextIndex = textIndex;
4494        curr = HEAP8[(textIndex)];
4495        if (curr === 0) break;
4496        next = HEAP8[((textIndex+1)|0)];
4497        if (curr == 37) {
4498          // Handle flags.
4499          var flagAlwaysSigned = false;
4500          var flagLeftAlign = false;
4501          var flagAlternative = false;
4502          var flagZeroPad = false;
4503          var flagPadSign = false;
4504          flagsLoop: while (1) {
4505            switch (next) {
4506              case 43:
4507                flagAlwaysSigned = true;
4508                break;
4509              case 45:
4510                flagLeftAlign = true;
4511                break;
4512              case 35:
4513                flagAlternative = true;
4514                break;
4515              case 48:
4516                if (flagZeroPad) {
4517                  break flagsLoop;
4518                } else {
4519                  flagZeroPad = true;
4520                  break;
4521                }
4522              case 32:
4523                flagPadSign = true;
4524                break;
4525              default:
4526                break flagsLoop;
4527            }
4528            textIndex++;
4529            next = HEAP8[((textIndex+1)|0)];
4530          }
4531
4532          // Handle width.
4533          var width = 0;
4534          if (next == 42) {
4535            width = getNextArg('i32');
4536            textIndex++;
4537            next = HEAP8[((textIndex+1)|0)];
4538          } else {
4539            while (next >= 48 && next <= 57) {
4540              width = width * 10 + (next - 48);
4541              textIndex++;
4542              next = HEAP8[((textIndex+1)|0)];
4543            }
4544          }
4545
4546          // Handle precision.
4547          var precisionSet = false, precision = -1;
4548          if (next == 46) {
4549            precision = 0;
4550            precisionSet = true;
4551            textIndex++;
4552            next = HEAP8[((textIndex+1)|0)];
4553            if (next == 42) {
4554              precision = getNextArg('i32');
4555              textIndex++;
4556            } else {
4557              while(1) {
4558                var precisionChr = HEAP8[((textIndex+1)|0)];
4559                if (precisionChr < 48 ||
4560                    precisionChr > 57) break;
4561                precision = precision * 10 + (precisionChr - 48);
4562                textIndex++;
4563              }
4564            }
4565            next = HEAP8[((textIndex+1)|0)];
4566          }
4567          if (precision < 0) {
4568            precision = 6; // Standard default.
4569            precisionSet = false;
4570          }
4571
4572          // Handle integer sizes. WARNING: These assume a 32-bit architecture!
4573          var argSize;
4574          switch (String.fromCharCode(next)) {
4575            case 'h':
4576              var nextNext = HEAP8[((textIndex+2)|0)];
4577              if (nextNext == 104) {
4578                textIndex++;
4579                argSize = 1; // char (actually i32 in varargs)
4580              } else {
4581                argSize = 2; // short (actually i32 in varargs)
4582              }
4583              break;
4584            case 'l':
4585              var nextNext = HEAP8[((textIndex+2)|0)];
4586              if (nextNext == 108) {
4587                textIndex++;
4588                argSize = 8; // long long
4589              } else {
4590                argSize = 4; // long
4591              }
4592              break;
4593            case 'L': // long long
4594            case 'q': // int64_t
4595            case 'j': // intmax_t
4596              argSize = 8;
4597              break;
4598            case 'z': // size_t
4599            case 't': // ptrdiff_t
4600            case 'I': // signed ptrdiff_t or unsigned size_t
4601              argSize = 4;
4602              break;
4603            default:
4604              argSize = null;
4605          }
4606          if (argSize) textIndex++;
4607          next = HEAP8[((textIndex+1)|0)];
4608
4609          // Handle type specifier.
4610          switch (String.fromCharCode(next)) {
4611            case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': {
4612              // Integer.
4613              var signed = next == 100 || next == 105;
4614              argSize = argSize || 4;
4615              var currArg = getNextArg('i' + (argSize * 8));
4616              var argText;
4617              // Flatten i64-1 [low, high] into a (slightly rounded) double
4618              if (argSize == 8) {
4619                currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117);
4620              }
4621              // Truncate to requested size.
4622              if (argSize <= 4) {
4623                var limit = Math.pow(256, argSize) - 1;
4624                currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
4625              }
4626              // Format the number.
4627              var currAbsArg = Math.abs(currArg);
4628              var prefix = '';
4629              if (next == 100 || next == 105) {
4630                argText = reSign(currArg, 8 * argSize, 1).toString(10);
4631              } else if (next == 117) {
4632                argText = unSign(currArg, 8 * argSize, 1).toString(10);
4633                currArg = Math.abs(currArg);
4634              } else if (next == 111) {
4635                argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
4636              } else if (next == 120 || next == 88) {
4637                prefix = (flagAlternative && currArg != 0) ? '0x' : '';
4638                if (currArg < 0) {
4639                  // Represent negative numbers in hex as 2's complement.
4640                  currArg = -currArg;
4641                  argText = (currAbsArg - 1).toString(16);
4642                  var buffer = [];
4643                  for (var i = 0; i < argText.length; i++) {
4644                    buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
4645                  }
4646                  argText = buffer.join('');
4647                  while (argText.length < argSize * 2) argText = 'f' + argText;
4648                } else {
4649                  argText = currAbsArg.toString(16);
4650                }
4651                if (next == 88) {
4652                  prefix = prefix.toUpperCase();
4653                  argText = argText.toUpperCase();
4654                }
4655              } else if (next == 112) {
4656                if (currAbsArg === 0) {
4657                  argText = '(nil)';
4658                } else {
4659                  prefix = '0x';
4660                  argText = currAbsArg.toString(16);
4661                }
4662              }
4663              if (precisionSet) {
4664                while (argText.length < precision) {
4665                  argText = '0' + argText;
4666                }
4667              }
4668
4669              // Add sign if needed
4670              if (currArg >= 0) {
4671                if (flagAlwaysSigned) {
4672                  prefix = '+' + prefix;
4673                } else if (flagPadSign) {
4674                  prefix = ' ' + prefix;
4675                }
4676              }
4677
4678              // Move sign to prefix so we zero-pad after the sign
4679              if (argText.charAt(0) == '-') {
4680                prefix = '-' + prefix;
4681                argText = argText.substr(1);
4682              }
4683
4684              // Add padding.
4685              while (prefix.length + argText.length < width) {
4686                if (flagLeftAlign) {
4687                  argText += ' ';
4688                } else {
4689                  if (flagZeroPad) {
4690                    argText = '0' + argText;
4691                  } else {
4692                    prefix = ' ' + prefix;
4693                  }
4694                }
4695              }
4696
4697              // Insert the result into the buffer.
4698              argText = prefix + argText;
4699              argText.split('').forEach(function(chr) {
4700                ret.push(chr.charCodeAt(0));
4701              });
4702              break;
4703            }
4704            case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
4705              // Float.
4706              var currArg = getNextArg('double');
4707              var argText;
4708              if (isNaN(currArg)) {
4709                argText = 'nan';
4710                flagZeroPad = false;
4711              } else if (!isFinite(currArg)) {
4712                argText = (currArg < 0 ? '-' : '') + 'inf';
4713                flagZeroPad = false;
4714              } else {
4715                var isGeneral = false;
4716                var effectivePrecision = Math.min(precision, 20);
4717
4718                // Convert g/G to f/F or e/E, as per:
4719                // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
4720                if (next == 103 || next == 71) {
4721                  isGeneral = true;
4722                  precision = precision || 1;
4723                  var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10);
4724                  if (precision > exponent && exponent >= -4) {
4725                    next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
4726                    precision -= exponent + 1;
4727                  } else {
4728                    next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
4729                    precision--;
4730                  }
4731                  effectivePrecision = Math.min(precision, 20);
4732                }
4733
4734                if (next == 101 || next == 69) {
4735                  argText = currArg.toExponential(effectivePrecision);
4736                  // Make sure the exponent has at least 2 digits.
4737                  if (/[eE][-+]\d$/.test(argText)) {
4738                    argText = argText.slice(0, -1) + '0' + argText.slice(-1);
4739                  }
4740                } else if (next == 102 || next == 70) {
4741                  argText = currArg.toFixed(effectivePrecision);
4742                  if (currArg === 0 && __reallyNegative(currArg)) {
4743                    argText = '-' + argText;
4744                  }
4745                }
4746
4747                var parts = argText.split('e');
4748                if (isGeneral && !flagAlternative) {
4749                  // Discard trailing zeros and periods.
4750                  while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
4751                         (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) {
4752                    parts[0] = parts[0].slice(0, -1);
4753                  }
4754                } else {
4755                  // Make sure we have a period in alternative mode.
4756                  if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
4757                  // Zero pad until required precision.
4758                  while (precision > effectivePrecision++) parts[0] += '0';
4759                }
4760                argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
4761
4762                // Capitalize 'E' if needed.
4763                if (next == 69) argText = argText.toUpperCase();
4764
4765                // Add sign.
4766                if (currArg >= 0) {
4767                  if (flagAlwaysSigned) {
4768                    argText = '+' + argText;
4769                  } else if (flagPadSign) {
4770                    argText = ' ' + argText;
4771                  }
4772                }
4773              }
4774
4775              // Add padding.
4776              while (argText.length < width) {
4777                if (flagLeftAlign) {
4778                  argText += ' ';
4779                } else {
4780                  if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
4781                    argText = argText[0] + '0' + argText.slice(1);
4782                  } else {
4783                    argText = (flagZeroPad ? '0' : ' ') + argText;
4784                  }
4785                }
4786              }
4787
4788              // Adjust case.
4789              if (next < 97) argText = argText.toUpperCase();
4790
4791              // Insert the result into the buffer.
4792              argText.split('').forEach(function(chr) {
4793                ret.push(chr.charCodeAt(0));
4794              });
4795              break;
4796            }
4797            case 's': {
4798              // String.
4799              var arg = getNextArg('i8*');
4800              var argLength = arg ? _strlen(arg) : '(null)'.length;
4801              if (precisionSet) argLength = Math.min(argLength, precision);
4802              if (!flagLeftAlign) {
4803                while (argLength < width--) {
4804                  ret.push(32);
4805                }
4806              }
4807              if (arg) {
4808                for (var i = 0; i < argLength; i++) {
4809                  ret.push(HEAPU8[((arg++)|0)]);
4810                }
4811              } else {
4812                ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true));
4813              }
4814              if (flagLeftAlign) {
4815                while (argLength < width--) {
4816                  ret.push(32);
4817                }
4818              }
4819              break;
4820            }
4821            case 'c': {
4822              // Character.
4823              if (flagLeftAlign) ret.push(getNextArg('i8'));
4824              while (--width > 0) {
4825                ret.push(32);
4826              }
4827              if (!flagLeftAlign) ret.push(getNextArg('i8'));
4828              break;
4829            }
4830            case 'n': {
4831              // Write the length written so far to the next parameter.
4832              var ptr = getNextArg('i32*');
4833              HEAP32[((ptr)>>2)]=ret.length;
4834              break;
4835            }
4836            case '%': {
4837              // Literal percent sign.
4838              ret.push(curr);
4839              break;
4840            }
4841            default: {
4842              // Unknown specifiers remain untouched.
4843              for (var i = startTextIndex; i < textIndex + 2; i++) {
4844                ret.push(HEAP8[(i)]);
4845              }
4846            }
4847          }
4848          textIndex += 2;
4849          // TODO: Support a/A (hex float) and m (last error) specifiers.
4850          // TODO: Support %1${specifier} for arg selection.
4851        } else {
4852          ret.push(curr);
4853          textIndex += 1;
4854        }
4855      }
4856      return ret;
4857    }function _fprintf(stream, format, varargs) {
4858      // int fprintf(FILE *restrict stream, const char *restrict format, ...);
4859      // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
4860      var result = __formatString(format, varargs);
4861      var stack = Runtime.stackSave();
4862      var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream);
4863      Runtime.stackRestore(stack);
4864      return ret;
4865    }function _printf(format, varargs) {
4866      // int printf(const char *restrict format, ...);
4867      // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
4868      var stdout = HEAP32[((_stdout)>>2)];
4869      return _fprintf(stdout, format, varargs);
4870    }
4871
4872
4873  function _fputs(s, stream) {
4874      // int fputs(const char *restrict s, FILE *restrict stream);
4875      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
4876      var fd = _fileno(stream);
4877      return _write(fd, s, _strlen(s));
4878    }
4879
4880  function _fputc(c, stream) {
4881      // int fputc(int c, FILE *stream);
4882      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
4883      var chr = unSign(c & 0xFF);
4884      HEAP8[((_fputc.ret)|0)]=chr;
4885      var fd = _fileno(stream);
4886      var ret = _write(fd, _fputc.ret, 1);
4887      if (ret == -1) {
4888        var streamObj = FS.getStreamFromPtr(stream);
4889        if (streamObj) streamObj.error = true;
4890        return -1;
4891      } else {
4892        return chr;
4893      }
4894    }function _puts(s) {
4895      // int puts(const char *s);
4896      // http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html
4897      // NOTE: puts() always writes an extra newline.
4898      var stdout = HEAP32[((_stdout)>>2)];
4899      var ret = _fputs(s, stdout);
4900      if (ret < 0) {
4901        return ret;
4902      } else {
4903        var newlineRet = _fputc(10, stdout);
4904        return (newlineRet < 0) ? -1 : ret + 1;
4905      }
4906    }
4907
4908  function _sysconf(name) {
4909      // long sysconf(int name);
4910      // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
4911      switch(name) {
4912        case 30: return PAGE_SIZE;
4913        case 132:
4914        case 133:
4915        case 12:
4916        case 137:
4917        case 138:
4918        case 15:
4919        case 235:
4920        case 16:
4921        case 17:
4922        case 18:
4923        case 19:
4924        case 20:
4925        case 149:
4926        case 13:
4927        case 10:
4928        case 236:
4929        case 153:
4930        case 9:
4931        case 21:
4932        case 22:
4933        case 159:
4934        case 154:
4935        case 14:
4936        case 77:
4937        case 78:
4938        case 139:
4939        case 80:
4940        case 81:
4941        case 79:
4942        case 82:
4943        case 68:
4944        case 67:
4945        case 164:
4946        case 11:
4947        case 29:
4948        case 47:
4949        case 48:
4950        case 95:
4951        case 52:
4952        case 51:
4953        case 46:
4954          return 200809;
4955        case 27:
4956        case 246:
4957        case 127:
4958        case 128:
4959        case 23:
4960        case 24:
4961        case 160:
4962        case 161:
4963        case 181:
4964        case 182:
4965        case 242:
4966        case 183:
4967        case 184:
4968        case 243:
4969        case 244:
4970        case 245:
4971        case 165:
4972        case 178:
4973        case 179:
4974        case 49:
4975        case 50:
4976        case 168:
4977        case 169:
4978        case 175:
4979        case 170:
4980        case 171:
4981        case 172:
4982        case 97:
4983        case 76:
4984        case 32:
4985        case 173:
4986        case 35:
4987          return -1;
4988        case 176:
4989        case 177:
4990        case 7:
4991        case 155:
4992        case 8:
4993        case 157:
4994        case 125:
4995        case 126:
4996        case 92:
4997        case 93:
4998        case 129:
4999        case 130:
5000        case 131:
5001        case 94:
5002        case 91:
5003          return 1;
5004        case 74:
5005        case 60:
5006        case 69:
5007        case 70:
5008        case 4:
5009          return 1024;
5010        case 31:
5011        case 42:
5012        case 72:
5013          return 32;
5014        case 87:
5015        case 26:
5016        case 33:
5017          return 2147483647;
5018        case 34:
5019        case 1:
5020          return 47839;
5021        case 38:
5022        case 36:
5023          return 99;
5024        case 43:
5025        case 37:
5026          return 2048;
5027        case 0: return 2097152;
5028        case 3: return 65536;
5029        case 28: return 32768;
5030        case 44: return 32767;
5031        case 75: return 16384;
5032        case 39: return 1000;
5033        case 89: return 700;
5034        case 71: return 256;
5035        case 40: return 255;
5036        case 2: return 100;
5037        case 180: return 64;
5038        case 25: return 20;
5039        case 5: return 16;
5040        case 6: return 6;
5041        case 73: return 4;
5042        case 84: return 1;
5043      }
5044      ___setErrNo(ERRNO_CODES.EINVAL);
5045      return -1;
5046    }
5047
5048
5049  Module["_memset"] = _memset;
5050
5051  function ___errno_location() {
5052      return ___errno_state;
5053    }
5054
5055  function _abort() {
5056      Module['abort']();
5057    }
5058
5059  var Browser={mainLoop:{scheduler:null,method:"",shouldPause:false,paused:false,queue:[],pause:function () {
5060          Browser.mainLoop.shouldPause = true;
5061        },resume:function () {
5062          if (Browser.mainLoop.paused) {
5063            Browser.mainLoop.paused = false;
5064            Browser.mainLoop.scheduler();
5065          }
5066          Browser.mainLoop.shouldPause = false;
5067        },updateStatus:function () {
5068          if (Module['setStatus']) {
5069            var message = Module['statusMessage'] || 'Please wait...';
5070            var remaining = Browser.mainLoop.remainingBlockers;
5071            var expected = Browser.mainLoop.expectedBlockers;
5072            if (remaining) {
5073              if (remaining < expected) {
5074                Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
5075              } else {
5076                Module['setStatus'](message);
5077              }
5078            } else {
5079              Module['setStatus']('');
5080            }
5081          }
5082        }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
5083        if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers
5084
5085        if (Browser.initted || ENVIRONMENT_IS_WORKER) return;
5086        Browser.initted = true;
5087
5088        try {
5089          new Blob();
5090          Browser.hasBlobConstructor = true;
5091        } catch(e) {
5092          Browser.hasBlobConstructor = false;
5093          console.log("warning: no blob constructor, cannot create blobs with mimetypes");
5094        }
5095        Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
5096        Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined;
5097        if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
5098          console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
5099          Module.noImageDecoding = true;
5100        }
5101
5102        // Support for plugins that can process preloaded files. You can add more of these to
5103        // your app by creating and appending to Module.preloadPlugins.
5104        //
5105        // Each plugin is asked if it can handle a file based on the file's name. If it can,
5106        // it is given the file's raw data. When it is done, it calls a callback with the file's
5107        // (possibly modified) data. For example, a plugin might decompress a file, or it
5108        // might create some side data structure for use later (like an Image element, etc.).
5109
5110        var imagePlugin = {};
5111        imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
5112          return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
5113        };
5114        imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {
5115          var b = null;
5116          if (Browser.hasBlobConstructor) {
5117            try {
5118              b = new Blob([byteArray], { type: Browser.getMimetype(name) });
5119              if (b.size !== byteArray.length) { // Safari bug #118630
5120                // Safari's Blob can only take an ArrayBuffer
5121                b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });
5122              }
5123            } catch(e) {
5124              Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
5125            }
5126          }
5127          if (!b) {
5128            var bb = new Browser.BlobBuilder();
5129            bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
5130            b = bb.getBlob();
5131          }
5132          var url = Browser.URLObject.createObjectURL(b);
5133          var img = new Image();
5134          img.onload = function img_onload() {
5135            assert(img.complete, 'Image ' + name + ' could not be decoded');
5136            var canvas = document.createElement('canvas');
5137            canvas.width = img.width;
5138            canvas.height = img.height;
5139            var ctx = canvas.getContext('2d');
5140            ctx.drawImage(img, 0, 0);
5141            Module["preloadedImages"][name] = canvas;
5142            Browser.URLObject.revokeObjectURL(url);
5143            if (onload) onload(byteArray);
5144          };
5145          img.onerror = function img_onerror(event) {
5146            console.log('Image ' + url + ' could not be decoded');
5147            if (onerror) onerror();
5148          };
5149          img.src = url;
5150        };
5151        Module['preloadPlugins'].push(imagePlugin);
5152
5153        var audioPlugin = {};
5154        audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
5155          return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
5156        };
5157        audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {
5158          var done = false;
5159          function finish(audio) {
5160            if (done) return;
5161            done = true;
5162            Module["preloadedAudios"][name] = audio;
5163            if (onload) onload(byteArray);
5164          }
5165          function fail() {
5166            if (done) return;
5167            done = true;
5168            Module["preloadedAudios"][name] = new Audio(); // empty shim
5169            if (onerror) onerror();
5170          }
5171          if (Browser.hasBlobConstructor) {
5172            try {
5173              var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
5174            } catch(e) {
5175              return fail();
5176            }
5177            var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
5178            var audio = new Audio();
5179            audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
5180            audio.onerror = function audio_onerror(event) {
5181              if (done) return;
5182              console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
5183              function encode64(data) {
5184                var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
5185                var PAD = '=';
5186                var ret = '';
5187                var leftchar = 0;
5188                var leftbits = 0;
5189                for (var i = 0; i < data.length; i++) {
5190                  leftchar = (leftchar << 8) | data[i];
5191                  leftbits += 8;
5192                  while (leftbits >= 6) {
5193                    var curr = (leftchar >> (leftbits-6)) & 0x3f;
5194                    leftbits -= 6;
5195                    ret += BASE[curr];
5196                  }
5197                }
5198                if (leftbits == 2) {
5199                  ret += BASE[(leftchar&3) << 4];
5200                  ret += PAD + PAD;
5201                } else if (leftbits == 4) {
5202                  ret += BASE[(leftchar&0xf) << 2];
5203                  ret += PAD;
5204                }
5205                return ret;
5206              }
5207              audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
5208              finish(audio); // we don't wait for confirmation this worked - but it's worth trying
5209            };
5210            audio.src = url;
5211            // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
5212            Browser.safeSetTimeout(function() {
5213              finish(audio); // try to use it even though it is not necessarily ready to play
5214            }, 10000);
5215          } else {
5216            return fail();
5217          }
5218        };
5219        Module['preloadPlugins'].push(audioPlugin);
5220
5221        // Canvas event setup
5222
5223        var canvas = Module['canvas'];
5224
5225        // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module
5226        // Module['forcedAspectRatio'] = 4 / 3;
5227
5228        canvas.requestPointerLock = canvas['requestPointerLock'] ||
5229                                    canvas['mozRequestPointerLock'] ||
5230                                    canvas['webkitRequestPointerLock'] ||
5231                                    canvas['msRequestPointerLock'] ||
5232                                    function(){};
5233        canvas.exitPointerLock = document['exitPointerLock'] ||
5234                                 document['mozExitPointerLock'] ||
5235                                 document['webkitExitPointerLock'] ||
5236                                 document['msExitPointerLock'] ||
5237                                 function(){}; // no-op if function does not exist
5238        canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
5239
5240        function pointerLockChange() {
5241          Browser.pointerLock = document['pointerLockElement'] === canvas ||
5242                                document['mozPointerLockElement'] === canvas ||
5243                                document['webkitPointerLockElement'] === canvas ||
5244                                document['msPointerLockElement'] === canvas;
5245        }
5246
5247        document.addEventListener('pointerlockchange', pointerLockChange, false);
5248        document.addEventListener('mozpointerlockchange', pointerLockChange, false);
5249        document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
5250        document.addEventListener('mspointerlockchange', pointerLockChange, false);
5251
5252        if (Module['elementPointerLock']) {
5253          canvas.addEventListener("click", function(ev) {
5254            if (!Browser.pointerLock && canvas.requestPointerLock) {
5255              canvas.requestPointerLock();
5256              ev.preventDefault();
5257            }
5258          }, false);
5259        }
5260      },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) {
5261        var ctx;
5262        var errorInfo = '?';
5263        function onContextCreationError(event) {
5264          errorInfo = event.statusMessage || errorInfo;
5265        }
5266        try {
5267          if (useWebGL) {
5268            var contextAttributes = {
5269              antialias: false,
5270              alpha: false
5271            };
5272
5273            if (webGLContextAttributes) {
5274              for (var attribute in webGLContextAttributes) {
5275                contextAttributes[attribute] = webGLContextAttributes[attribute];
5276              }
5277            }
5278
5279
5280            canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false);
5281            try {
5282              ['experimental-webgl', 'webgl'].some(function(webglId) {
5283                return ctx = canvas.getContext(webglId, contextAttributes);
5284              });
5285            } finally {
5286              canvas.removeEventListener('webglcontextcreationerror', onContextCreationError, false);
5287            }
5288          } else {
5289            ctx = canvas.getContext('2d');
5290          }
5291          if (!ctx) throw ':(';
5292        } catch (e) {
5293          Module.print('Could not create canvas: ' + [errorInfo, e]);
5294          return null;
5295        }
5296        if (useWebGL) {
5297          // Set the background of the WebGL canvas to black
5298          canvas.style.backgroundColor = "black";
5299
5300          // Warn on context loss
5301          canvas.addEventListener('webglcontextlost', function(event) {
5302            alert('WebGL context lost. You will need to reload the page.');
5303          }, false);
5304        }
5305        if (setInModule) {
5306          GLctx = Module.ctx = ctx;
5307          Module.useWebGL = useWebGL;
5308          Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
5309          Browser.init();
5310        }
5311        return ctx;
5312      },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) {
5313        Browser.lockPointer = lockPointer;
5314        Browser.resizeCanvas = resizeCanvas;
5315        if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
5316        if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
5317
5318        var canvas = Module['canvas'];
5319        function fullScreenChange() {
5320          Browser.isFullScreen = false;
5321          var canvasContainer = canvas.parentNode;
5322          if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
5323               document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
5324               document['fullScreenElement'] || document['fullscreenElement'] ||
5325               document['msFullScreenElement'] || document['msFullscreenElement'] ||
5326               document['webkitCurrentFullScreenElement']) === canvasContainer) {
5327            canvas.cancelFullScreen = document['cancelFullScreen'] ||
5328                                      document['mozCancelFullScreen'] ||
5329                                      document['webkitCancelFullScreen'] ||
5330                                      document['msExitFullscreen'] ||
5331                                      document['exitFullscreen'] ||
5332                                      function() {};
5333            canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
5334            if (Browser.lockPointer) canvas.requestPointerLock();
5335            Browser.isFullScreen = true;
5336            if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
5337          } else {
5338
5339            // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen
5340            canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
5341            canvasContainer.parentNode.removeChild(canvasContainer);
5342
5343            if (Browser.resizeCanvas) Browser.setWindowedCanvasSize();
5344          }
5345          if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen);
5346          Browser.updateCanvasDimensions(canvas);
5347        }
5348
5349        if (!Browser.fullScreenHandlersInstalled) {
5350          Browser.fullScreenHandlersInstalled = true;
5351          document.addEventListener('fullscreenchange', fullScreenChange, false);
5352          document.addEventListener('mozfullscreenchange', fullScreenChange, false);
5353          document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
5354          document.addEventListener('MSFullscreenChange', fullScreenChange, false);
5355        }
5356
5357        // 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
5358        var canvasContainer = document.createElement("div");
5359        canvas.parentNode.insertBefore(canvasContainer, canvas);
5360        canvasContainer.appendChild(canvas);
5361
5362        // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size)
5363        canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] ||
5364                                            canvasContainer['mozRequestFullScreen'] ||
5365                                            canvasContainer['msRequestFullscreen'] ||
5366                                           (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
5367        canvasContainer.requestFullScreen();
5368      },requestAnimationFrame:function requestAnimationFrame(func) {
5369        if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js)
5370          setTimeout(func, 1000/60);
5371        } else {
5372          if (!window.requestAnimationFrame) {
5373            window.requestAnimationFrame = window['requestAnimationFrame'] ||
5374                                           window['mozRequestAnimationFrame'] ||
5375                                           window['webkitRequestAnimationFrame'] ||
5376                                           window['msRequestAnimationFrame'] ||
5377                                           window['oRequestAnimationFrame'] ||
5378                                           window['setTimeout'];
5379          }
5380          window.requestAnimationFrame(func);
5381        }
5382      },safeCallback:function (func) {
5383        return function() {
5384          if (!ABORT) return func.apply(null, arguments);
5385        };
5386      },safeRequestAnimationFrame:function (func) {
5387        return Browser.requestAnimationFrame(function() {
5388          if (!ABORT) func();
5389        });
5390      },safeSetTimeout:function (func, timeout) {
5391        return setTimeout(function() {
5392          if (!ABORT) func();
5393        }, timeout);
5394      },safeSetInterval:function (func, timeout) {
5395        return setInterval(function() {
5396          if (!ABORT) func();
5397        }, timeout);
5398      },getMimetype:function (name) {
5399        return {
5400          'jpg': 'image/jpeg',
5401          'jpeg': 'image/jpeg',
5402          'png': 'image/png',
5403          'bmp': 'image/bmp',
5404          'ogg': 'audio/ogg',
5405          'wav': 'audio/wav',
5406          'mp3': 'audio/mpeg'
5407        }[name.substr(name.lastIndexOf('.')+1)];
5408      },getUserMedia:function (func) {
5409        if(!window.getUserMedia) {
5410          window.getUserMedia = navigator['getUserMedia'] ||
5411                                navigator['mozGetUserMedia'];
5412        }
5413        window.getUserMedia(func);
5414      },getMovementX:function (event) {
5415        return event['movementX'] ||
5416               event['mozMovementX'] ||
5417               event['webkitMovementX'] ||
5418               0;
5419      },getMovementY:function (event) {
5420        return event['movementY'] ||
5421               event['mozMovementY'] ||
5422               event['webkitMovementY'] ||
5423               0;
5424      },getMouseWheelDelta:function (event) {
5425        return Math.max(-1, Math.min(1, event.type === 'DOMMouseScroll' ? event.detail : -event.wheelDelta));
5426      },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
5427        if (Browser.pointerLock) {
5428          // When the pointer is locked, calculate the coordinates
5429          // based on the movement of the mouse.
5430          // Workaround for Firefox bug 764498
5431          if (event.type != 'mousemove' &&
5432              ('mozMovementX' in event)) {
5433            Browser.mouseMovementX = Browser.mouseMovementY = 0;
5434          } else {
5435            Browser.mouseMovementX = Browser.getMovementX(event);
5436            Browser.mouseMovementY = Browser.getMovementY(event);
5437          }
5438
5439          // check if SDL is available
5440          if (typeof SDL != "undefined") {
5441    Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
5442    Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
5443          } else {
5444    // just add the mouse delta to the current absolut mouse position
5445    // FIXME: ideally this should be clamped against the canvas size and zero
5446    Browser.mouseX += Browser.mouseMovementX;
5447    Browser.mouseY += Browser.mouseMovementY;
5448          }
5449        } else {
5450          // Otherwise, calculate the movement based on the changes
5451          // in the coordinates.
5452          var rect = Module["canvas"].getBoundingClientRect();
5453          var x, y;
5454
5455          // Neither .scrollX or .pageXOffset are defined in a spec, but
5456          // we prefer .scrollX because it is currently in a spec draft.
5457          // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
5458          var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset);
5459          var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset);
5460          if (event.type == 'touchstart' ||
5461              event.type == 'touchend' ||
5462              event.type == 'touchmove') {
5463            var t = event.touches.item(0);
5464            if (t) {
5465              x = t.pageX - (scrollX + rect.left);
5466              y = t.pageY - (scrollY + rect.top);
5467            } else {
5468              return;
5469            }
5470          } else {
5471            x = event.pageX - (scrollX + rect.left);
5472            y = event.pageY - (scrollY + rect.top);
5473          }
5474
5475          // the canvas might be CSS-scaled compared to its backbuffer;
5476          // SDL-using content will want mouse coordinates in terms
5477          // of backbuffer units.
5478          var cw = Module["canvas"].width;
5479          var ch = Module["canvas"].height;
5480          x = x * (cw / rect.width);
5481          y = y * (ch / rect.height);
5482
5483          Browser.mouseMovementX = x - Browser.mouseX;
5484          Browser.mouseMovementY = y - Browser.mouseY;
5485          Browser.mouseX = x;
5486          Browser.mouseY = y;
5487        }
5488      },xhrLoad:function (url, onload, onerror) {
5489        var xhr = new XMLHttpRequest();
5490        xhr.open('GET', url, true);
5491        xhr.responseType = 'arraybuffer';
5492        xhr.onload = function xhr_onload() {
5493          if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
5494            onload(xhr.response);
5495          } else {
5496            onerror();
5497          }
5498        };
5499        xhr.onerror = onerror;
5500        xhr.send(null);
5501      },asyncLoad:function (url, onload, onerror, noRunDep) {
5502        Browser.xhrLoad(url, function(arrayBuffer) {
5503          assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
5504          onload(new Uint8Array(arrayBuffer));
5505          if (!noRunDep) removeRunDependency('al ' + url);
5506        }, function(event) {
5507          if (onerror) {
5508            onerror();
5509          } else {
5510            throw 'Loading data file "' + url + '" failed.';
5511          }
5512        });
5513        if (!noRunDep) addRunDependency('al ' + url);
5514      },resizeListeners:[],updateResizeListeners:function () {
5515        var canvas = Module['canvas'];
5516        Browser.resizeListeners.forEach(function(listener) {
5517          listener(canvas.width, canvas.height);
5518        });
5519      },setCanvasSize:function (width, height, noUpdates) {
5520        var canvas = Module['canvas'];
5521        Browser.updateCanvasDimensions(canvas, width, height);
5522        if (!noUpdates) Browser.updateResizeListeners();
5523      },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
5524        // check if SDL is available
5525        if (typeof SDL != "undefined") {
5526    var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
5527    flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
5528    HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
5529        }
5530        Browser.updateResizeListeners();
5531      },setWindowedCanvasSize:function () {
5532        // check if SDL is available
5533        if (typeof SDL != "undefined") {
5534    var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
5535    flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
5536    HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
5537        }
5538        Browser.updateResizeListeners();
5539      },updateCanvasDimensions:function (canvas, wNative, hNative) {
5540        if (wNative && hNative) {
5541          canvas.widthNative = wNative;
5542          canvas.heightNative = hNative;
5543        } else {
5544          wNative = canvas.widthNative;
5545          hNative = canvas.heightNative;
5546        }
5547        var w = wNative;
5548        var h = hNative;
5549        if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) {
5550          if (w/h < Module['forcedAspectRatio']) {
5551            w = Math.round(h * Module['forcedAspectRatio']);
5552          } else {
5553            h = Math.round(w / Module['forcedAspectRatio']);
5554          }
5555        }
5556        if (((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
5557             document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
5558             document['fullScreenElement'] || document['fullscreenElement'] ||
5559             document['msFullScreenElement'] || document['msFullscreenElement'] ||
5560             document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) {
5561           var factor = Math.min(screen.width / w, screen.height / h);
5562           w = Math.round(w * factor);
5563           h = Math.round(h * factor);
5564        }
5565        if (Browser.resizeCanvas) {
5566          if (canvas.width  != w) canvas.width  = w;
5567          if (canvas.height != h) canvas.height = h;
5568          if (typeof canvas.style != 'undefined') {
5569            canvas.style.removeProperty( "width");
5570            canvas.style.removeProperty("height");
5571          }
5572        } else {
5573          if (canvas.width  != wNative) canvas.width  = wNative;
5574          if (canvas.height != hNative) canvas.height = hNative;
5575          if (typeof canvas.style != 'undefined') {
5576            if (w != wNative || h != hNative) {
5577              canvas.style.setProperty( "width", w + "px", "important");
5578              canvas.style.setProperty("height", h + "px", "important");
5579            } else {
5580              canvas.style.removeProperty( "width");
5581              canvas.style.removeProperty("height");
5582            }
5583          }
5584        }
5585      }};
5586
5587  function _sbrk(bytes) {
5588      // Implement a Linux-like 'memory area' for our 'process'.
5589      // Changes the size of the memory area by |bytes|; returns the
5590      // address of the previous top ('break') of the memory area
5591      // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
5592      var self = _sbrk;
5593      if (!self.called) {
5594        DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned
5595        self.called = true;
5596        assert(Runtime.dynamicAlloc);
5597        self.alloc = Runtime.dynamicAlloc;
5598        Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
5599      }
5600      var ret = DYNAMICTOP;
5601      if (bytes != 0) self.alloc(bytes);
5602      return ret;  // Previous break location.
5603    }
5604
5605  function ___assert_fail(condition, filename, line, func) {
5606      ABORT = true;
5607      throw 'Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function'] + ' at ' + stackTrace();
5608    }
5609
5610  function _time(ptr) {
5611      var ret = Math.floor(Date.now()/1000);
5612      if (ptr) {
5613        HEAP32[((ptr)>>2)]=ret;
5614      }
5615      return ret;
5616    }
5617
5618  function _llvm_bswap_i32(x) {
5619      return ((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>24);
5620    }
5621
5622
5623
5624  function _emscripten_memcpy_big(dest, src, num) {
5625      HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
5626      return dest;
5627    }
5628  Module["_memcpy"] = _memcpy;
5629FS.staticInit();__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });__ATEXIT__.push({ func: function() { FS.quit() } });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice;
5630___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
5631__ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor();
5632if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); }
5633__ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } });
5634_fputc.ret = allocate([0], "i8", ALLOC_STATIC);
5635Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
5636  Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };
5637  Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };
5638  Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() };
5639  Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() };
5640  Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() }
5641STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
5642
5643staticSealed = true; // seal the static portion of memory
5644
5645STACK_MAX = STACK_BASE + 5242880;
5646
5647DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
5648
5649assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
5650
5651
5652var Math_min = Math.min;
5653function invoke_iiii(index,a1,a2,a3) {
5654  try {
5655    return Module["dynCall_iiii"](index,a1,a2,a3);
5656  } catch(e) {
5657    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5658    asm["setThrew"](1, 0);
5659  }
5660}
5661
5662function invoke_vii(index,a1,a2) {
5663  try {
5664    Module["dynCall_vii"](index,a1,a2);
5665  } catch(e) {
5666    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5667    asm["setThrew"](1, 0);
5668  }
5669}
5670
5671function invoke_iii(index,a1,a2) {
5672  try {
5673    return Module["dynCall_iii"](index,a1,a2);
5674  } catch(e) {
5675    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5676    asm["setThrew"](1, 0);
5677  }
5678}
5679
5680function asmPrintInt(x, y) {
5681  Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
5682}
5683function asmPrintFloat(x, y) {
5684  Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
5685}
5686// EMSCRIPTEN_START_ASM
5687var asm = (function(global, env, buffer) {
5688  'use asm';
5689  var HEAP8 = new global.Int8Array(buffer);
5690  var HEAP16 = new global.Int16Array(buffer);
5691  var HEAP32 = new global.Int32Array(buffer);
5692  var HEAPU8 = new global.Uint8Array(buffer);
5693  var HEAPU16 = new global.Uint16Array(buffer);
5694  var HEAPU32 = new global.Uint32Array(buffer);
5695  var HEAPF32 = new global.Float32Array(buffer);
5696  var HEAPF64 = new global.Float64Array(buffer);
5697
5698  var STACKTOP=env.STACKTOP|0;
5699  var STACK_MAX=env.STACK_MAX|0;
5700  var tempDoublePtr=env.tempDoublePtr|0;
5701  var ABORT=env.ABORT|0;
5702
5703  var __THREW__ = 0;
5704  var threwValue = 0;
5705  var setjmpId = 0;
5706  var undef = 0;
5707  var nan = +env.NaN, inf = +env.Infinity;
5708  var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0;
5709
5710  var tempRet0 = 0;
5711  var tempRet1 = 0;
5712  var tempRet2 = 0;
5713  var tempRet3 = 0;
5714  var tempRet4 = 0;
5715  var tempRet5 = 0;
5716  var tempRet6 = 0;
5717  var tempRet7 = 0;
5718  var tempRet8 = 0;
5719  var tempRet9 = 0;
5720  var Math_floor=global.Math.floor;
5721  var Math_abs=global.Math.abs;
5722  var Math_sqrt=global.Math.sqrt;
5723  var Math_pow=global.Math.pow;
5724  var Math_cos=global.Math.cos;
5725  var Math_sin=global.Math.sin;
5726  var Math_tan=global.Math.tan;
5727  var Math_acos=global.Math.acos;
5728  var Math_asin=global.Math.asin;
5729  var Math_atan=global.Math.atan;
5730  var Math_atan2=global.Math.atan2;
5731  var Math_exp=global.Math.exp;
5732  var Math_log=global.Math.log;
5733  var Math_ceil=global.Math.ceil;
5734  var Math_imul=global.Math.imul;
5735  var abort=env.abort;
5736  var assert=env.assert;
5737  var asmPrintInt=env.asmPrintInt;
5738  var asmPrintFloat=env.asmPrintFloat;
5739  var Math_min=env.min;
5740  var invoke_iiii=env.invoke_iiii;
5741  var invoke_vii=env.invoke_vii;
5742  var invoke_iii=env.invoke_iii;
5743  var _send=env._send;
5744  var ___setErrNo=env.___setErrNo;
5745  var ___assert_fail=env.___assert_fail;
5746  var _fflush=env._fflush;
5747  var _pwrite=env._pwrite;
5748  var __reallyNegative=env.__reallyNegative;
5749  var _sbrk=env._sbrk;
5750  var ___errno_location=env.___errno_location;
5751  var _emscripten_memcpy_big=env._emscripten_memcpy_big;
5752  var _fileno=env._fileno;
5753  var _sysconf=env._sysconf;
5754  var _puts=env._puts;
5755  var _mkport=env._mkport;
5756  var _write=env._write;
5757  var _llvm_bswap_i32=env._llvm_bswap_i32;
5758  var _fputc=env._fputc;
5759  var _abort=env._abort;
5760  var _fwrite=env._fwrite;
5761  var _time=env._time;
5762  var _fprintf=env._fprintf;
5763  var __formatString=env.__formatString;
5764  var _fputs=env._fputs;
5765  var _printf=env._printf;
5766  var tempFloat = 0.0;
5767
5768// EMSCRIPTEN_START_FUNCS
5769function _inflate(i2, i3) {
5770 i2 = i2 | 0;
5771 i3 = i3 | 0;
5772 var i1 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0, i39 = 0, i40 = 0, i41 = 0, i42 = 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, i67 = 0, i68 = 0, i69 = 0, i70 = 0, i71 = 0, i72 = 0;
5773 i1 = STACKTOP;
5774 STACKTOP = STACKTOP + 16 | 0;
5775 i25 = i1;
5776 if ((i2 | 0) == 0) {
5777  i72 = -2;
5778  STACKTOP = i1;
5779  return i72 | 0;
5780 }
5781 i4 = HEAP32[i2 + 28 >> 2] | 0;
5782 if ((i4 | 0) == 0) {
5783  i72 = -2;
5784  STACKTOP = i1;
5785  return i72 | 0;
5786 }
5787 i8 = i2 + 12 | 0;
5788 i19 = HEAP32[i8 >> 2] | 0;
5789 if ((i19 | 0) == 0) {
5790  i72 = -2;
5791  STACKTOP = i1;
5792  return i72 | 0;
5793 }
5794 i62 = HEAP32[i2 >> 2] | 0;
5795 if ((i62 | 0) == 0 ? (HEAP32[i2 + 4 >> 2] | 0) != 0 : 0) {
5796  i72 = -2;
5797  STACKTOP = i1;
5798  return i72 | 0;
5799 }
5800 i68 = HEAP32[i4 >> 2] | 0;
5801 if ((i68 | 0) == 11) {
5802  HEAP32[i4 >> 2] = 12;
5803  i68 = 12;
5804  i62 = HEAP32[i2 >> 2] | 0;
5805  i19 = HEAP32[i8 >> 2] | 0;
5806 }
5807 i15 = i2 + 16 | 0;
5808 i59 = HEAP32[i15 >> 2] | 0;
5809 i16 = i2 + 4 | 0;
5810 i5 = HEAP32[i16 >> 2] | 0;
5811 i17 = i4 + 56 | 0;
5812 i6 = i4 + 60 | 0;
5813 i12 = i4 + 8 | 0;
5814 i10 = i4 + 24 | 0;
5815 i39 = i25 + 1 | 0;
5816 i11 = i4 + 16 | 0;
5817 i38 = i4 + 32 | 0;
5818 i35 = i2 + 24 | 0;
5819 i40 = i4 + 36 | 0;
5820 i41 = i4 + 20 | 0;
5821 i9 = i2 + 48 | 0;
5822 i42 = i4 + 64 | 0;
5823 i46 = i4 + 12 | 0;
5824 i47 = (i3 + -5 | 0) >>> 0 < 2;
5825 i7 = i4 + 4 | 0;
5826 i48 = i4 + 76 | 0;
5827 i49 = i4 + 84 | 0;
5828 i50 = i4 + 80 | 0;
5829 i51 = i4 + 88 | 0;
5830 i43 = (i3 | 0) == 6;
5831 i57 = i4 + 7108 | 0;
5832 i37 = i4 + 72 | 0;
5833 i58 = i4 + 7112 | 0;
5834 i54 = i4 + 68 | 0;
5835 i28 = i4 + 44 | 0;
5836 i29 = i4 + 7104 | 0;
5837 i30 = i4 + 48 | 0;
5838 i31 = i4 + 52 | 0;
5839 i18 = i4 + 40 | 0;
5840 i13 = i2 + 20 | 0;
5841 i14 = i4 + 28 | 0;
5842 i32 = i4 + 96 | 0;
5843 i33 = i4 + 100 | 0;
5844 i34 = i4 + 92 | 0;
5845 i36 = i4 + 104 | 0;
5846 i52 = i4 + 1328 | 0;
5847 i53 = i4 + 108 | 0;
5848 i27 = i4 + 112 | 0;
5849 i55 = i4 + 752 | 0;
5850 i56 = i4 + 624 | 0;
5851 i44 = i25 + 2 | 0;
5852 i45 = i25 + 3 | 0;
5853 i67 = HEAP32[i6 >> 2] | 0;
5854 i65 = i5;
5855 i64 = HEAP32[i17 >> 2] | 0;
5856 i26 = i59;
5857 i61 = 0;
5858 L17 : while (1) {
5859  L19 : do {
5860   switch (i68 | 0) {
5861   case 16:
5862    {
5863     if (i67 >>> 0 < 14) {
5864      i63 = i67;
5865      while (1) {
5866       if ((i65 | 0) == 0) {
5867        i65 = 0;
5868        break L17;
5869       }
5870       i65 = i65 + -1 | 0;
5871       i66 = i62 + 1 | 0;
5872       i64 = (HEAPU8[i62] << i63) + i64 | 0;
5873       i63 = i63 + 8 | 0;
5874       if (i63 >>> 0 < 14) {
5875        i62 = i66;
5876       } else {
5877        i62 = i66;
5878        break;
5879       }
5880      }
5881     } else {
5882      i63 = i67;
5883     }
5884     i71 = (i64 & 31) + 257 | 0;
5885     HEAP32[i32 >> 2] = i71;
5886     i72 = (i64 >>> 5 & 31) + 1 | 0;
5887     HEAP32[i33 >> 2] = i72;
5888     HEAP32[i34 >> 2] = (i64 >>> 10 & 15) + 4;
5889     i64 = i64 >>> 14;
5890     i63 = i63 + -14 | 0;
5891     if (i71 >>> 0 > 286 | i72 >>> 0 > 30) {
5892      HEAP32[i35 >> 2] = 11616;
5893      HEAP32[i4 >> 2] = 29;
5894      i66 = i26;
5895      break L19;
5896     } else {
5897      HEAP32[i36 >> 2] = 0;
5898      HEAP32[i4 >> 2] = 17;
5899      i66 = 0;
5900      i60 = 154;
5901      break L19;
5902     }
5903    }
5904   case 2:
5905    {
5906     if (i67 >>> 0 < 32) {
5907      i63 = i67;
5908      i60 = 47;
5909     } else {
5910      i60 = 49;
5911     }
5912     break;
5913    }
5914   case 23:
5915    {
5916     i66 = HEAP32[i37 >> 2] | 0;
5917     i63 = i67;
5918     i60 = 240;
5919     break;
5920    }
5921   case 18:
5922    {
5923     i63 = HEAP32[i36 >> 2] | 0;
5924     i69 = i65;
5925     i60 = 164;
5926     break;
5927    }
5928   case 1:
5929    {
5930     if (i67 >>> 0 < 16) {
5931      i63 = i67;
5932      while (1) {
5933       if ((i65 | 0) == 0) {
5934        i65 = 0;
5935        break L17;
5936       }
5937       i65 = i65 + -1 | 0;
5938       i66 = i62 + 1 | 0;
5939       i64 = (HEAPU8[i62] << i63) + i64 | 0;
5940       i63 = i63 + 8 | 0;
5941       if (i63 >>> 0 < 16) {
5942        i62 = i66;
5943       } else {
5944        i62 = i66;
5945        break;
5946       }
5947      }
5948     } else {
5949      i63 = i67;
5950     }
5951     HEAP32[i11 >> 2] = i64;
5952     if ((i64 & 255 | 0) != 8) {
5953      HEAP32[i35 >> 2] = 11448;
5954      HEAP32[i4 >> 2] = 29;
5955      i66 = i26;
5956      break L19;
5957     }
5958     if ((i64 & 57344 | 0) != 0) {
5959      HEAP32[i35 >> 2] = 11504;
5960      HEAP32[i4 >> 2] = 29;
5961      i66 = i26;
5962      break L19;
5963     }
5964     i60 = HEAP32[i38 >> 2] | 0;
5965     if ((i60 | 0) == 0) {
5966      i60 = i64;
5967     } else {
5968      HEAP32[i60 >> 2] = i64 >>> 8 & 1;
5969      i60 = HEAP32[i11 >> 2] | 0;
5970     }
5971     if ((i60 & 512 | 0) != 0) {
5972      HEAP8[i25] = i64;
5973      HEAP8[i39] = i64 >>> 8;
5974      HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 2) | 0;
5975     }
5976     HEAP32[i4 >> 2] = 2;
5977     i63 = 0;
5978     i64 = 0;
5979     i60 = 47;
5980     break;
5981    }
5982   case 8:
5983    {
5984     i63 = i67;
5985     i60 = 109;
5986     break;
5987    }
5988   case 22:
5989    {
5990     i63 = i67;
5991     i60 = 228;
5992     break;
5993    }
5994   case 24:
5995    {
5996     i63 = i67;
5997     i60 = 246;
5998     break;
5999    }
6000   case 19:
6001    {
6002     i63 = i67;
6003     i60 = 201;
6004     break;
6005    }
6006   case 20:
6007    {
6008     i63 = i67;
6009     i60 = 202;
6010     break;
6011    }
6012   case 21:
6013    {
6014     i66 = HEAP32[i37 >> 2] | 0;
6015     i63 = i67;
6016     i60 = 221;
6017     break;
6018    }
6019   case 10:
6020    {
6021     i63 = i67;
6022     i60 = 121;
6023     break;
6024    }
6025   case 11:
6026    {
6027     i63 = i67;
6028     i60 = 124;
6029     break;
6030    }
6031   case 12:
6032    {
6033     i63 = i67;
6034     i60 = 125;
6035     break;
6036    }
6037   case 5:
6038    {
6039     i63 = i67;
6040     i60 = 73;
6041     break;
6042    }
6043   case 4:
6044    {
6045     i63 = i67;
6046     i60 = 62;
6047     break;
6048    }
6049   case 0:
6050    {
6051     i66 = HEAP32[i12 >> 2] | 0;
6052     if ((i66 | 0) == 0) {
6053      HEAP32[i4 >> 2] = 12;
6054      i63 = i67;
6055      i66 = i26;
6056      break L19;
6057     }
6058     if (i67 >>> 0 < 16) {
6059      i63 = i67;
6060      while (1) {
6061       if ((i65 | 0) == 0) {
6062        i65 = 0;
6063        break L17;
6064       }
6065       i65 = i65 + -1 | 0;
6066       i67 = i62 + 1 | 0;
6067       i64 = (HEAPU8[i62] << i63) + i64 | 0;
6068       i63 = i63 + 8 | 0;
6069       if (i63 >>> 0 < 16) {
6070        i62 = i67;
6071       } else {
6072        i62 = i67;
6073        break;
6074       }
6075      }
6076     } else {
6077      i63 = i67;
6078     }
6079     if ((i66 & 2 | 0) != 0 & (i64 | 0) == 35615) {
6080      HEAP32[i10 >> 2] = _crc32(0, 0, 0) | 0;
6081      HEAP8[i25] = 31;
6082      HEAP8[i39] = -117;
6083      HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 2) | 0;
6084      HEAP32[i4 >> 2] = 1;
6085      i63 = 0;
6086      i64 = 0;
6087      i66 = i26;
6088      break L19;
6089     }
6090     HEAP32[i11 >> 2] = 0;
6091     i67 = HEAP32[i38 >> 2] | 0;
6092     if ((i67 | 0) != 0) {
6093      HEAP32[i67 + 48 >> 2] = -1;
6094      i66 = HEAP32[i12 >> 2] | 0;
6095     }
6096     if ((i66 & 1 | 0) != 0 ? ((((i64 << 8 & 65280) + (i64 >>> 8) | 0) >>> 0) % 31 | 0 | 0) == 0 : 0) {
6097      if ((i64 & 15 | 0) != 8) {
6098       HEAP32[i35 >> 2] = 11448;
6099       HEAP32[i4 >> 2] = 29;
6100       i66 = i26;
6101       break L19;
6102      }
6103      i66 = i64 >>> 4;
6104      i63 = i63 + -4 | 0;
6105      i68 = (i66 & 15) + 8 | 0;
6106      i67 = HEAP32[i40 >> 2] | 0;
6107      if ((i67 | 0) != 0) {
6108       if (i68 >>> 0 > i67 >>> 0) {
6109        HEAP32[i35 >> 2] = 11480;
6110        HEAP32[i4 >> 2] = 29;
6111        i64 = i66;
6112        i66 = i26;
6113        break L19;
6114       }
6115      } else {
6116       HEAP32[i40 >> 2] = i68;
6117      }
6118      HEAP32[i41 >> 2] = 1 << i68;
6119      i63 = _adler32(0, 0, 0) | 0;
6120      HEAP32[i10 >> 2] = i63;
6121      HEAP32[i9 >> 2] = i63;
6122      HEAP32[i4 >> 2] = i64 >>> 12 & 2 ^ 11;
6123      i63 = 0;
6124      i64 = 0;
6125      i66 = i26;
6126      break L19;
6127     }
6128     HEAP32[i35 >> 2] = 11424;
6129     HEAP32[i4 >> 2] = 29;
6130     i66 = i26;
6131     break;
6132    }
6133   case 26:
6134    {
6135     if ((HEAP32[i12 >> 2] | 0) != 0) {
6136      if (i67 >>> 0 < 32) {
6137       i63 = i67;
6138       while (1) {
6139        if ((i65 | 0) == 0) {
6140         i65 = 0;
6141         break L17;
6142        }
6143        i65 = i65 + -1 | 0;
6144        i66 = i62 + 1 | 0;
6145        i64 = (HEAPU8[i62] << i63) + i64 | 0;
6146        i63 = i63 + 8 | 0;
6147        if (i63 >>> 0 < 32) {
6148         i62 = i66;
6149        } else {
6150         i62 = i66;
6151         break;
6152        }
6153       }
6154      } else {
6155       i63 = i67;
6156      }
6157      i66 = i59 - i26 | 0;
6158      HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i66;
6159      HEAP32[i14 >> 2] = (HEAP32[i14 >> 2] | 0) + i66;
6160      if ((i59 | 0) != (i26 | 0)) {
6161       i59 = HEAP32[i10 >> 2] | 0;
6162       i67 = i19 + (0 - i66) | 0;
6163       if ((HEAP32[i11 >> 2] | 0) == 0) {
6164        i59 = _adler32(i59, i67, i66) | 0;
6165       } else {
6166        i59 = _crc32(i59, i67, i66) | 0;
6167       }
6168       HEAP32[i10 >> 2] = i59;
6169       HEAP32[i9 >> 2] = i59;
6170      }
6171      if ((HEAP32[i11 >> 2] | 0) == 0) {
6172       i59 = _llvm_bswap_i32(i64 | 0) | 0;
6173      } else {
6174       i59 = i64;
6175      }
6176      if ((i59 | 0) == (HEAP32[i10 >> 2] | 0)) {
6177       i63 = 0;
6178       i64 = 0;
6179       i59 = i26;
6180      } else {
6181       HEAP32[i35 >> 2] = 11904;
6182       HEAP32[i4 >> 2] = 29;
6183       i66 = i26;
6184       i59 = i26;
6185       break L19;
6186      }
6187     } else {
6188      i63 = i67;
6189     }
6190     HEAP32[i4 >> 2] = 27;
6191     i60 = 277;
6192     break;
6193    }
6194   case 27:
6195    {
6196     i63 = i67;
6197     i60 = 277;
6198     break;
6199    }
6200   case 28:
6201    {
6202     i63 = i67;
6203     i61 = 1;
6204     i60 = 285;
6205     break L17;
6206    }
6207   case 29:
6208    {
6209     i63 = i67;
6210     i61 = -3;
6211     break L17;
6212    }
6213   case 25:
6214    {
6215     if ((i26 | 0) == 0) {
6216      i63 = i67;
6217      i26 = 0;
6218      i60 = 285;
6219      break L17;
6220     }
6221     HEAP8[i19] = HEAP32[i42 >> 2];
6222     HEAP32[i4 >> 2] = 20;
6223     i63 = i67;
6224     i66 = i26 + -1 | 0;
6225     i19 = i19 + 1 | 0;
6226     break;
6227    }
6228   case 17:
6229    {
6230     i66 = HEAP32[i36 >> 2] | 0;
6231     if (i66 >>> 0 < (HEAP32[i34 >> 2] | 0) >>> 0) {
6232      i63 = i67;
6233      i60 = 154;
6234     } else {
6235      i60 = 158;
6236     }
6237     break;
6238    }
6239   case 13:
6240    {
6241     i63 = i67 & 7;
6242     i64 = i64 >>> i63;
6243     i63 = i67 - i63 | 0;
6244     if (i63 >>> 0 < 32) {
6245      while (1) {
6246       if ((i65 | 0) == 0) {
6247        i65 = 0;
6248        break L17;
6249       }
6250       i65 = i65 + -1 | 0;
6251       i66 = i62 + 1 | 0;
6252       i64 = (HEAPU8[i62] << i63) + i64 | 0;
6253       i63 = i63 + 8 | 0;
6254       if (i63 >>> 0 < 32) {
6255        i62 = i66;
6256       } else {
6257        i62 = i66;
6258        break;
6259       }
6260      }
6261     }
6262     i66 = i64 & 65535;
6263     if ((i66 | 0) == (i64 >>> 16 ^ 65535 | 0)) {
6264      HEAP32[i42 >> 2] = i66;
6265      HEAP32[i4 >> 2] = 14;
6266      if (i43) {
6267       i63 = 0;
6268       i64 = 0;
6269       i60 = 285;
6270       break L17;
6271      } else {
6272       i63 = 0;
6273       i64 = 0;
6274       i60 = 143;
6275       break L19;
6276      }
6277     } else {
6278      HEAP32[i35 >> 2] = 11584;
6279      HEAP32[i4 >> 2] = 29;
6280      i66 = i26;
6281      break L19;
6282     }
6283    }
6284   case 7:
6285    {
6286     i63 = i67;
6287     i60 = 96;
6288     break;
6289    }
6290   case 14:
6291    {
6292     i63 = i67;
6293     i60 = 143;
6294     break;
6295    }
6296   case 15:
6297    {
6298     i63 = i67;
6299     i60 = 144;
6300     break;
6301    }
6302   case 9:
6303    {
6304     if (i67 >>> 0 < 32) {
6305      i63 = i67;
6306      while (1) {
6307       if ((i65 | 0) == 0) {
6308        i65 = 0;
6309        break L17;
6310       }
6311       i65 = i65 + -1 | 0;
6312       i66 = i62 + 1 | 0;
6313       i64 = (HEAPU8[i62] << i63) + i64 | 0;
6314       i63 = i63 + 8 | 0;
6315       if (i63 >>> 0 < 32) {
6316        i62 = i66;
6317       } else {
6318        i62 = i66;
6319        break;
6320       }
6321      }
6322     }
6323     i63 = _llvm_bswap_i32(i64 | 0) | 0;
6324     HEAP32[i10 >> 2] = i63;
6325     HEAP32[i9 >> 2] = i63;
6326     HEAP32[i4 >> 2] = 10;
6327     i63 = 0;
6328     i64 = 0;
6329     i60 = 121;
6330     break;
6331    }
6332   case 30:
6333    {
6334     i60 = 299;
6335     break L17;
6336    }
6337   case 6:
6338    {
6339     i63 = i67;
6340     i60 = 83;
6341     break;
6342    }
6343   case 3:
6344    {
6345     if (i67 >>> 0 < 16) {
6346      i63 = i67;
6347      i66 = i62;
6348      i60 = 55;
6349     } else {
6350      i60 = 57;
6351     }
6352     break;
6353    }
6354   default:
6355    {
6356     i2 = -2;
6357     i60 = 300;
6358     break L17;
6359    }
6360   }
6361  } while (0);
6362  if ((i60 | 0) == 47) {
6363   while (1) {
6364    i60 = 0;
6365    if ((i65 | 0) == 0) {
6366     i65 = 0;
6367     break L17;
6368    }
6369    i65 = i65 + -1 | 0;
6370    i60 = i62 + 1 | 0;
6371    i64 = (HEAPU8[i62] << i63) + i64 | 0;
6372    i63 = i63 + 8 | 0;
6373    if (i63 >>> 0 < 32) {
6374     i62 = i60;
6375     i60 = 47;
6376    } else {
6377     i62 = i60;
6378     i60 = 49;
6379     break;
6380    }
6381   }
6382  } else if ((i60 | 0) == 121) {
6383   if ((HEAP32[i46 >> 2] | 0) == 0) {
6384    i60 = 122;
6385    break;
6386   }
6387   i60 = _adler32(0, 0, 0) | 0;
6388   HEAP32[i10 >> 2] = i60;
6389   HEAP32[i9 >> 2] = i60;
6390   HEAP32[i4 >> 2] = 11;
6391   i60 = 124;
6392  } else if ((i60 | 0) == 143) {
6393   HEAP32[i4 >> 2] = 15;
6394   i60 = 144;
6395  } else if ((i60 | 0) == 154) {
6396   while (1) {
6397    i60 = 0;
6398    if (i63 >>> 0 < 3) {
6399     while (1) {
6400      if ((i65 | 0) == 0) {
6401       i65 = 0;
6402       break L17;
6403      }
6404      i65 = i65 + -1 | 0;
6405      i67 = i62 + 1 | 0;
6406      i64 = (HEAPU8[i62] << i63) + i64 | 0;
6407      i63 = i63 + 8 | 0;
6408      if (i63 >>> 0 < 3) {
6409       i62 = i67;
6410      } else {
6411       i62 = i67;
6412       break;
6413      }
6414     }
6415    }
6416    HEAP32[i36 >> 2] = i66 + 1;
6417    HEAP16[i4 + (HEAPU16[11384 + (i66 << 1) >> 1] << 1) + 112 >> 1] = i64 & 7;
6418    i64 = i64 >>> 3;
6419    i63 = i63 + -3 | 0;
6420    i66 = HEAP32[i36 >> 2] | 0;
6421    if (i66 >>> 0 < (HEAP32[i34 >> 2] | 0) >>> 0) {
6422     i60 = 154;
6423    } else {
6424     i67 = i63;
6425     i60 = 158;
6426     break;
6427    }
6428   }
6429  } else if ((i60 | 0) == 277) {
6430   i60 = 0;
6431   if ((HEAP32[i12 >> 2] | 0) == 0) {
6432    i60 = 284;
6433    break;
6434   }
6435   if ((HEAP32[i11 >> 2] | 0) == 0) {
6436    i60 = 284;
6437    break;
6438   }
6439   if (i63 >>> 0 < 32) {
6440    i66 = i62;
6441    while (1) {
6442     if ((i65 | 0) == 0) {
6443      i65 = 0;
6444      i62 = i66;
6445      break L17;
6446     }
6447     i65 = i65 + -1 | 0;
6448     i62 = i66 + 1 | 0;
6449     i64 = (HEAPU8[i66] << i63) + i64 | 0;
6450     i63 = i63 + 8 | 0;
6451     if (i63 >>> 0 < 32) {
6452      i66 = i62;
6453     } else {
6454      break;
6455     }
6456    }
6457   }
6458   if ((i64 | 0) == (HEAP32[i14 >> 2] | 0)) {
6459    i63 = 0;
6460    i64 = 0;
6461    i60 = 284;
6462    break;
6463   }
6464   HEAP32[i35 >> 2] = 11928;
6465   HEAP32[i4 >> 2] = 29;
6466   i66 = i26;
6467  }
6468  do {
6469   if ((i60 | 0) == 49) {
6470    i60 = HEAP32[i38 >> 2] | 0;
6471    if ((i60 | 0) != 0) {
6472     HEAP32[i60 + 4 >> 2] = i64;
6473    }
6474    if ((HEAP32[i11 >> 2] & 512 | 0) != 0) {
6475     HEAP8[i25] = i64;
6476     HEAP8[i39] = i64 >>> 8;
6477     HEAP8[i44] = i64 >>> 16;
6478     HEAP8[i45] = i64 >>> 24;
6479     HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 4) | 0;
6480    }
6481    HEAP32[i4 >> 2] = 3;
6482    i63 = 0;
6483    i64 = 0;
6484    i66 = i62;
6485    i60 = 55;
6486   } else if ((i60 | 0) == 124) {
6487    if (i47) {
6488     i60 = 285;
6489     break L17;
6490    } else {
6491     i60 = 125;
6492    }
6493   } else if ((i60 | 0) == 144) {
6494    i60 = 0;
6495    i66 = HEAP32[i42 >> 2] | 0;
6496    if ((i66 | 0) == 0) {
6497     HEAP32[i4 >> 2] = 11;
6498     i66 = i26;
6499     break;
6500    }
6501    i66 = i66 >>> 0 > i65 >>> 0 ? i65 : i66;
6502    i67 = i66 >>> 0 > i26 >>> 0 ? i26 : i66;
6503    if ((i67 | 0) == 0) {
6504     i60 = 285;
6505     break L17;
6506    }
6507    _memcpy(i19 | 0, i62 | 0, i67 | 0) | 0;
6508    HEAP32[i42 >> 2] = (HEAP32[i42 >> 2] | 0) - i67;
6509    i65 = i65 - i67 | 0;
6510    i66 = i26 - i67 | 0;
6511    i62 = i62 + i67 | 0;
6512    i19 = i19 + i67 | 0;
6513   } else if ((i60 | 0) == 158) {
6514    i60 = 0;
6515    if (i66 >>> 0 < 19) {
6516     while (1) {
6517      i61 = i66 + 1 | 0;
6518      HEAP16[i4 + (HEAPU16[11384 + (i66 << 1) >> 1] << 1) + 112 >> 1] = 0;
6519      if ((i61 | 0) == 19) {
6520       break;
6521      } else {
6522       i66 = i61;
6523      }
6524     }
6525     HEAP32[i36 >> 2] = 19;
6526    }
6527    HEAP32[i53 >> 2] = i52;
6528    HEAP32[i48 >> 2] = i52;
6529    HEAP32[i49 >> 2] = 7;
6530    i61 = _inflate_table(0, i27, 19, i53, i49, i55) | 0;
6531    if ((i61 | 0) == 0) {
6532     HEAP32[i36 >> 2] = 0;
6533     HEAP32[i4 >> 2] = 18;
6534     i63 = 0;
6535     i69 = i65;
6536     i61 = 0;
6537     i60 = 164;
6538     break;
6539    } else {
6540     HEAP32[i35 >> 2] = 11656;
6541     HEAP32[i4 >> 2] = 29;
6542     i63 = i67;
6543     i66 = i26;
6544     break;
6545    }
6546   }
6547  } while (0);
6548  L163 : do {
6549   if ((i60 | 0) == 55) {
6550    while (1) {
6551     i60 = 0;
6552     if ((i65 | 0) == 0) {
6553      i65 = 0;
6554      i62 = i66;
6555      break L17;
6556     }
6557     i65 = i65 + -1 | 0;
6558     i62 = i66 + 1 | 0;
6559     i64 = (HEAPU8[i66] << i63) + i64 | 0;
6560     i63 = i63 + 8 | 0;
6561     if (i63 >>> 0 < 16) {
6562      i66 = i62;
6563      i60 = 55;
6564     } else {
6565      i60 = 57;
6566      break;
6567     }
6568    }
6569   } else if ((i60 | 0) == 125) {
6570    i60 = 0;
6571    if ((HEAP32[i7 >> 2] | 0) != 0) {
6572     i66 = i63 & 7;
6573     HEAP32[i4 >> 2] = 26;
6574     i63 = i63 - i66 | 0;
6575     i64 = i64 >>> i66;
6576     i66 = i26;
6577     break;
6578    }
6579    if (i63 >>> 0 < 3) {
6580     while (1) {
6581      if ((i65 | 0) == 0) {
6582       i65 = 0;
6583       break L17;
6584      }
6585      i65 = i65 + -1 | 0;
6586      i66 = i62 + 1 | 0;
6587      i64 = (HEAPU8[i62] << i63) + i64 | 0;
6588      i63 = i63 + 8 | 0;
6589      if (i63 >>> 0 < 3) {
6590       i62 = i66;
6591      } else {
6592       i62 = i66;
6593       break;
6594      }
6595     }
6596    }
6597    HEAP32[i7 >> 2] = i64 & 1;
6598    i66 = i64 >>> 1 & 3;
6599    if ((i66 | 0) == 0) {
6600     HEAP32[i4 >> 2] = 13;
6601    } else if ((i66 | 0) == 1) {
6602     HEAP32[i48 >> 2] = 11952;
6603     HEAP32[i49 >> 2] = 9;
6604     HEAP32[i50 >> 2] = 14e3;
6605     HEAP32[i51 >> 2] = 5;
6606     HEAP32[i4 >> 2] = 19;
6607     if (i43) {
6608      i60 = 133;
6609      break L17;
6610     }
6611    } else if ((i66 | 0) == 2) {
6612     HEAP32[i4 >> 2] = 16;
6613    } else if ((i66 | 0) == 3) {
6614     HEAP32[i35 >> 2] = 11560;
6615     HEAP32[i4 >> 2] = 29;
6616    }
6617    i63 = i63 + -3 | 0;
6618    i64 = i64 >>> 3;
6619    i66 = i26;
6620   } else if ((i60 | 0) == 164) {
6621    i60 = 0;
6622    i65 = HEAP32[i32 >> 2] | 0;
6623    i66 = HEAP32[i33 >> 2] | 0;
6624    do {
6625     if (i63 >>> 0 < (i66 + i65 | 0) >>> 0) {
6626      i71 = i67;
6627      L181 : while (1) {
6628       i70 = (1 << HEAP32[i49 >> 2]) + -1 | 0;
6629       i72 = i70 & i64;
6630       i68 = HEAP32[i48 >> 2] | 0;
6631       i67 = HEAPU8[i68 + (i72 << 2) + 1 | 0] | 0;
6632       if (i67 >>> 0 > i71 >>> 0) {
6633        i67 = i71;
6634        while (1) {
6635         if ((i69 | 0) == 0) {
6636          i63 = i67;
6637          i65 = 0;
6638          break L17;
6639         }
6640         i69 = i69 + -1 | 0;
6641         i71 = i62 + 1 | 0;
6642         i64 = (HEAPU8[i62] << i67) + i64 | 0;
6643         i62 = i67 + 8 | 0;
6644         i72 = i70 & i64;
6645         i67 = HEAPU8[i68 + (i72 << 2) + 1 | 0] | 0;
6646         if (i67 >>> 0 > i62 >>> 0) {
6647          i67 = i62;
6648          i62 = i71;
6649         } else {
6650          i70 = i62;
6651          i62 = i71;
6652          break;
6653         }
6654        }
6655       } else {
6656        i70 = i71;
6657       }
6658       i68 = HEAP16[i68 + (i72 << 2) + 2 >> 1] | 0;
6659       L188 : do {
6660        if ((i68 & 65535) < 16) {
6661         if (i70 >>> 0 < i67 >>> 0) {
6662          while (1) {
6663           if ((i69 | 0) == 0) {
6664            i63 = i70;
6665            i65 = 0;
6666            break L17;
6667           }
6668           i69 = i69 + -1 | 0;
6669           i65 = i62 + 1 | 0;
6670           i64 = (HEAPU8[i62] << i70) + i64 | 0;
6671           i70 = i70 + 8 | 0;
6672           if (i70 >>> 0 < i67 >>> 0) {
6673            i62 = i65;
6674           } else {
6675            i62 = i65;
6676            break;
6677           }
6678          }
6679         }
6680         HEAP32[i36 >> 2] = i63 + 1;
6681         HEAP16[i4 + (i63 << 1) + 112 >> 1] = i68;
6682         i71 = i70 - i67 | 0;
6683         i64 = i64 >>> i67;
6684        } else {
6685         if (i68 << 16 >> 16 == 16) {
6686          i68 = i67 + 2 | 0;
6687          if (i70 >>> 0 < i68 >>> 0) {
6688           i71 = i62;
6689           while (1) {
6690            if ((i69 | 0) == 0) {
6691             i63 = i70;
6692             i65 = 0;
6693             i62 = i71;
6694             break L17;
6695            }
6696            i69 = i69 + -1 | 0;
6697            i62 = i71 + 1 | 0;
6698            i64 = (HEAPU8[i71] << i70) + i64 | 0;
6699            i70 = i70 + 8 | 0;
6700            if (i70 >>> 0 < i68 >>> 0) {
6701             i71 = i62;
6702            } else {
6703             break;
6704            }
6705           }
6706          }
6707          i64 = i64 >>> i67;
6708          i67 = i70 - i67 | 0;
6709          if ((i63 | 0) == 0) {
6710           i60 = 181;
6711           break L181;
6712          }
6713          i67 = i67 + -2 | 0;
6714          i68 = (i64 & 3) + 3 | 0;
6715          i64 = i64 >>> 2;
6716          i70 = HEAP16[i4 + (i63 + -1 << 1) + 112 >> 1] | 0;
6717         } else if (i68 << 16 >> 16 == 17) {
6718          i68 = i67 + 3 | 0;
6719          if (i70 >>> 0 < i68 >>> 0) {
6720           i71 = i62;
6721           while (1) {
6722            if ((i69 | 0) == 0) {
6723             i63 = i70;
6724             i65 = 0;
6725             i62 = i71;
6726             break L17;
6727            }
6728            i69 = i69 + -1 | 0;
6729            i62 = i71 + 1 | 0;
6730            i64 = (HEAPU8[i71] << i70) + i64 | 0;
6731            i70 = i70 + 8 | 0;
6732            if (i70 >>> 0 < i68 >>> 0) {
6733             i71 = i62;
6734            } else {
6735             break;
6736            }
6737           }
6738          }
6739          i64 = i64 >>> i67;
6740          i67 = -3 - i67 + i70 | 0;
6741          i68 = (i64 & 7) + 3 | 0;
6742          i64 = i64 >>> 3;
6743          i70 = 0;
6744         } else {
6745          i68 = i67 + 7 | 0;
6746          if (i70 >>> 0 < i68 >>> 0) {
6747           i71 = i62;
6748           while (1) {
6749            if ((i69 | 0) == 0) {
6750             i63 = i70;
6751             i65 = 0;
6752             i62 = i71;
6753             break L17;
6754            }
6755            i69 = i69 + -1 | 0;
6756            i62 = i71 + 1 | 0;
6757            i64 = (HEAPU8[i71] << i70) + i64 | 0;
6758            i70 = i70 + 8 | 0;
6759            if (i70 >>> 0 < i68 >>> 0) {
6760             i71 = i62;
6761            } else {
6762             break;
6763            }
6764           }
6765          }
6766          i64 = i64 >>> i67;
6767          i67 = -7 - i67 + i70 | 0;
6768          i68 = (i64 & 127) + 11 | 0;
6769          i64 = i64 >>> 7;
6770          i70 = 0;
6771         }
6772         if ((i63 + i68 | 0) >>> 0 > (i66 + i65 | 0) >>> 0) {
6773          i60 = 190;
6774          break L181;
6775         }
6776         while (1) {
6777          i68 = i68 + -1 | 0;
6778          HEAP32[i36 >> 2] = i63 + 1;
6779          HEAP16[i4 + (i63 << 1) + 112 >> 1] = i70;
6780          if ((i68 | 0) == 0) {
6781           i71 = i67;
6782           break L188;
6783          }
6784          i63 = HEAP32[i36 >> 2] | 0;
6785         }
6786        }
6787       } while (0);
6788       i63 = HEAP32[i36 >> 2] | 0;
6789       i65 = HEAP32[i32 >> 2] | 0;
6790       i66 = HEAP32[i33 >> 2] | 0;
6791       if (!(i63 >>> 0 < (i66 + i65 | 0) >>> 0)) {
6792        i60 = 193;
6793        break;
6794       }
6795      }
6796      if ((i60 | 0) == 181) {
6797       i60 = 0;
6798       HEAP32[i35 >> 2] = 11688;
6799       HEAP32[i4 >> 2] = 29;
6800       i63 = i67;
6801       i65 = i69;
6802       i66 = i26;
6803       break L163;
6804      } else if ((i60 | 0) == 190) {
6805       i60 = 0;
6806       HEAP32[i35 >> 2] = 11688;
6807       HEAP32[i4 >> 2] = 29;
6808       i63 = i67;
6809       i65 = i69;
6810       i66 = i26;
6811       break L163;
6812      } else if ((i60 | 0) == 193) {
6813       i60 = 0;
6814       if ((HEAP32[i4 >> 2] | 0) == 29) {
6815        i63 = i71;
6816        i65 = i69;
6817        i66 = i26;
6818        break L163;
6819       } else {
6820        i63 = i71;
6821        break;
6822       }
6823      }
6824     } else {
6825      i63 = i67;
6826     }
6827    } while (0);
6828    if ((HEAP16[i56 >> 1] | 0) == 0) {
6829     HEAP32[i35 >> 2] = 11720;
6830     HEAP32[i4 >> 2] = 29;
6831     i65 = i69;
6832     i66 = i26;
6833     break;
6834    }
6835    HEAP32[i53 >> 2] = i52;
6836    HEAP32[i48 >> 2] = i52;
6837    HEAP32[i49 >> 2] = 9;
6838    i61 = _inflate_table(1, i27, i65, i53, i49, i55) | 0;
6839    if ((i61 | 0) != 0) {
6840     HEAP32[i35 >> 2] = 11760;
6841     HEAP32[i4 >> 2] = 29;
6842     i65 = i69;
6843     i66 = i26;
6844     break;
6845    }
6846    HEAP32[i50 >> 2] = HEAP32[i53 >> 2];
6847    HEAP32[i51 >> 2] = 6;
6848    i61 = _inflate_table(2, i4 + (HEAP32[i32 >> 2] << 1) + 112 | 0, HEAP32[i33 >> 2] | 0, i53, i51, i55) | 0;
6849    if ((i61 | 0) == 0) {
6850     HEAP32[i4 >> 2] = 19;
6851     if (i43) {
6852      i65 = i69;
6853      i61 = 0;
6854      i60 = 285;
6855      break L17;
6856     } else {
6857      i65 = i69;
6858      i61 = 0;
6859      i60 = 201;
6860      break;
6861     }
6862    } else {
6863     HEAP32[i35 >> 2] = 11792;
6864     HEAP32[i4 >> 2] = 29;
6865     i65 = i69;
6866     i66 = i26;
6867     break;
6868    }
6869   }
6870  } while (0);
6871  if ((i60 | 0) == 57) {
6872   i60 = HEAP32[i38 >> 2] | 0;
6873   if ((i60 | 0) != 0) {
6874    HEAP32[i60 + 8 >> 2] = i64 & 255;
6875    HEAP32[i60 + 12 >> 2] = i64 >>> 8;
6876   }
6877   if ((HEAP32[i11 >> 2] & 512 | 0) != 0) {
6878    HEAP8[i25] = i64;
6879    HEAP8[i39] = i64 >>> 8;
6880    HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 2) | 0;
6881   }
6882   HEAP32[i4 >> 2] = 4;
6883   i63 = 0;
6884   i64 = 0;
6885   i60 = 62;
6886  } else if ((i60 | 0) == 201) {
6887   HEAP32[i4 >> 2] = 20;
6888   i60 = 202;
6889  }
6890  do {
6891   if ((i60 | 0) == 62) {
6892    i60 = 0;
6893    i66 = HEAP32[i11 >> 2] | 0;
6894    if ((i66 & 1024 | 0) == 0) {
6895     i60 = HEAP32[i38 >> 2] | 0;
6896     if ((i60 | 0) != 0) {
6897      HEAP32[i60 + 16 >> 2] = 0;
6898     }
6899    } else {
6900     if (i63 >>> 0 < 16) {
6901      while (1) {
6902       if ((i65 | 0) == 0) {
6903        i65 = 0;
6904        break L17;
6905       }
6906       i65 = i65 + -1 | 0;
6907       i67 = i62 + 1 | 0;
6908       i64 = (HEAPU8[i62] << i63) + i64 | 0;
6909       i63 = i63 + 8 | 0;
6910       if (i63 >>> 0 < 16) {
6911        i62 = i67;
6912       } else {
6913        i62 = i67;
6914        break;
6915       }
6916      }
6917     }
6918     HEAP32[i42 >> 2] = i64;
6919     i60 = HEAP32[i38 >> 2] | 0;
6920     if ((i60 | 0) != 0) {
6921      HEAP32[i60 + 20 >> 2] = i64;
6922      i66 = HEAP32[i11 >> 2] | 0;
6923     }
6924     if ((i66 & 512 | 0) == 0) {
6925      i63 = 0;
6926      i64 = 0;
6927     } else {
6928      HEAP8[i25] = i64;
6929      HEAP8[i39] = i64 >>> 8;
6930      HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i25, 2) | 0;
6931      i63 = 0;
6932      i64 = 0;
6933     }
6934    }
6935    HEAP32[i4 >> 2] = 5;
6936    i60 = 73;
6937   } else if ((i60 | 0) == 202) {
6938    i60 = 0;
6939    if (i65 >>> 0 > 5 & i26 >>> 0 > 257) {
6940     HEAP32[i8 >> 2] = i19;
6941     HEAP32[i15 >> 2] = i26;
6942     HEAP32[i2 >> 2] = i62;
6943     HEAP32[i16 >> 2] = i65;
6944     HEAP32[i17 >> 2] = i64;
6945     HEAP32[i6 >> 2] = i63;
6946     _inflate_fast(i2, i59);
6947     i19 = HEAP32[i8 >> 2] | 0;
6948     i66 = HEAP32[i15 >> 2] | 0;
6949     i62 = HEAP32[i2 >> 2] | 0;
6950     i65 = HEAP32[i16 >> 2] | 0;
6951     i64 = HEAP32[i17 >> 2] | 0;
6952     i63 = HEAP32[i6 >> 2] | 0;
6953     if ((HEAP32[i4 >> 2] | 0) != 11) {
6954      break;
6955     }
6956     HEAP32[i57 >> 2] = -1;
6957     break;
6958    }
6959    HEAP32[i57 >> 2] = 0;
6960    i69 = (1 << HEAP32[i49 >> 2]) + -1 | 0;
6961    i71 = i69 & i64;
6962    i66 = HEAP32[i48 >> 2] | 0;
6963    i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
6964    i67 = i68 & 255;
6965    if (i67 >>> 0 > i63 >>> 0) {
6966     while (1) {
6967      if ((i65 | 0) == 0) {
6968       i65 = 0;
6969       break L17;
6970      }
6971      i65 = i65 + -1 | 0;
6972      i70 = i62 + 1 | 0;
6973      i64 = (HEAPU8[i62] << i63) + i64 | 0;
6974      i63 = i63 + 8 | 0;
6975      i71 = i69 & i64;
6976      i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
6977      i67 = i68 & 255;
6978      if (i67 >>> 0 > i63 >>> 0) {
6979       i62 = i70;
6980      } else {
6981       i62 = i70;
6982       break;
6983      }
6984     }
6985    }
6986    i69 = HEAP8[i66 + (i71 << 2) | 0] | 0;
6987    i70 = HEAP16[i66 + (i71 << 2) + 2 >> 1] | 0;
6988    i71 = i69 & 255;
6989    if (!(i69 << 24 >> 24 == 0)) {
6990     if ((i71 & 240 | 0) == 0) {
6991      i69 = i70 & 65535;
6992      i70 = (1 << i67 + i71) + -1 | 0;
6993      i71 = ((i64 & i70) >>> i67) + i69 | 0;
6994      i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
6995      if (((i68 & 255) + i67 | 0) >>> 0 > i63 >>> 0) {
6996       while (1) {
6997        if ((i65 | 0) == 0) {
6998         i65 = 0;
6999         break L17;
7000        }
7001        i65 = i65 + -1 | 0;
7002        i71 = i62 + 1 | 0;
7003        i64 = (HEAPU8[i62] << i63) + i64 | 0;
7004        i63 = i63 + 8 | 0;
7005        i62 = ((i64 & i70) >>> i67) + i69 | 0;
7006        i68 = HEAP8[i66 + (i62 << 2) + 1 | 0] | 0;
7007        if (((i68 & 255) + i67 | 0) >>> 0 > i63 >>> 0) {
7008         i62 = i71;
7009        } else {
7010         i69 = i62;
7011         i62 = i71;
7012         break;
7013        }
7014       }
7015      } else {
7016       i69 = i71;
7017      }
7018      i70 = HEAP16[i66 + (i69 << 2) + 2 >> 1] | 0;
7019      i69 = HEAP8[i66 + (i69 << 2) | 0] | 0;
7020      HEAP32[i57 >> 2] = i67;
7021      i66 = i67;
7022      i63 = i63 - i67 | 0;
7023      i64 = i64 >>> i67;
7024     } else {
7025      i66 = 0;
7026     }
7027    } else {
7028     i66 = 0;
7029     i69 = 0;
7030    }
7031    i72 = i68 & 255;
7032    i64 = i64 >>> i72;
7033    i63 = i63 - i72 | 0;
7034    HEAP32[i57 >> 2] = i66 + i72;
7035    HEAP32[i42 >> 2] = i70 & 65535;
7036    i66 = i69 & 255;
7037    if (i69 << 24 >> 24 == 0) {
7038     HEAP32[i4 >> 2] = 25;
7039     i66 = i26;
7040     break;
7041    }
7042    if ((i66 & 32 | 0) != 0) {
7043     HEAP32[i57 >> 2] = -1;
7044     HEAP32[i4 >> 2] = 11;
7045     i66 = i26;
7046     break;
7047    }
7048    if ((i66 & 64 | 0) == 0) {
7049     i66 = i66 & 15;
7050     HEAP32[i37 >> 2] = i66;
7051     HEAP32[i4 >> 2] = 21;
7052     i60 = 221;
7053     break;
7054    } else {
7055     HEAP32[i35 >> 2] = 11816;
7056     HEAP32[i4 >> 2] = 29;
7057     i66 = i26;
7058     break;
7059    }
7060   }
7061  } while (0);
7062  if ((i60 | 0) == 73) {
7063   i68 = HEAP32[i11 >> 2] | 0;
7064   if ((i68 & 1024 | 0) != 0) {
7065    i67 = HEAP32[i42 >> 2] | 0;
7066    i60 = i67 >>> 0 > i65 >>> 0 ? i65 : i67;
7067    if ((i60 | 0) != 0) {
7068     i66 = HEAP32[i38 >> 2] | 0;
7069     if ((i66 | 0) != 0 ? (i20 = HEAP32[i66 + 16 >> 2] | 0, (i20 | 0) != 0) : 0) {
7070      i67 = (HEAP32[i66 + 20 >> 2] | 0) - i67 | 0;
7071      i66 = HEAP32[i66 + 24 >> 2] | 0;
7072      _memcpy(i20 + i67 | 0, i62 | 0, ((i67 + i60 | 0) >>> 0 > i66 >>> 0 ? i66 - i67 | 0 : i60) | 0) | 0;
7073      i68 = HEAP32[i11 >> 2] | 0;
7074     }
7075     if ((i68 & 512 | 0) != 0) {
7076      HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i62, i60) | 0;
7077     }
7078     i67 = (HEAP32[i42 >> 2] | 0) - i60 | 0;
7079     HEAP32[i42 >> 2] = i67;
7080     i65 = i65 - i60 | 0;
7081     i62 = i62 + i60 | 0;
7082    }
7083    if ((i67 | 0) != 0) {
7084     i60 = 285;
7085     break;
7086    }
7087   }
7088   HEAP32[i42 >> 2] = 0;
7089   HEAP32[i4 >> 2] = 6;
7090   i60 = 83;
7091  } else if ((i60 | 0) == 221) {
7092   i60 = 0;
7093   if ((i66 | 0) == 0) {
7094    i60 = HEAP32[i42 >> 2] | 0;
7095   } else {
7096    if (i63 >>> 0 < i66 >>> 0) {
7097     while (1) {
7098      if ((i65 | 0) == 0) {
7099       i65 = 0;
7100       break L17;
7101      }
7102      i65 = i65 + -1 | 0;
7103      i67 = i62 + 1 | 0;
7104      i64 = (HEAPU8[i62] << i63) + i64 | 0;
7105      i63 = i63 + 8 | 0;
7106      if (i63 >>> 0 < i66 >>> 0) {
7107       i62 = i67;
7108      } else {
7109       i62 = i67;
7110       break;
7111      }
7112     }
7113    }
7114    i60 = (HEAP32[i42 >> 2] | 0) + ((1 << i66) + -1 & i64) | 0;
7115    HEAP32[i42 >> 2] = i60;
7116    HEAP32[i57 >> 2] = (HEAP32[i57 >> 2] | 0) + i66;
7117    i63 = i63 - i66 | 0;
7118    i64 = i64 >>> i66;
7119   }
7120   HEAP32[i58 >> 2] = i60;
7121   HEAP32[i4 >> 2] = 22;
7122   i60 = 228;
7123  }
7124  do {
7125   if ((i60 | 0) == 83) {
7126    if ((HEAP32[i11 >> 2] & 2048 | 0) == 0) {
7127     i60 = HEAP32[i38 >> 2] | 0;
7128     if ((i60 | 0) != 0) {
7129      HEAP32[i60 + 28 >> 2] = 0;
7130     }
7131    } else {
7132     if ((i65 | 0) == 0) {
7133      i65 = 0;
7134      i60 = 285;
7135      break L17;
7136     } else {
7137      i66 = 0;
7138     }
7139     while (1) {
7140      i60 = i66 + 1 | 0;
7141      i67 = HEAP8[i62 + i66 | 0] | 0;
7142      i66 = HEAP32[i38 >> 2] | 0;
7143      if (((i66 | 0) != 0 ? (i23 = HEAP32[i66 + 28 >> 2] | 0, (i23 | 0) != 0) : 0) ? (i21 = HEAP32[i42 >> 2] | 0, i21 >>> 0 < (HEAP32[i66 + 32 >> 2] | 0) >>> 0) : 0) {
7144       HEAP32[i42 >> 2] = i21 + 1;
7145       HEAP8[i23 + i21 | 0] = i67;
7146      }
7147      i66 = i67 << 24 >> 24 != 0;
7148      if (i66 & i60 >>> 0 < i65 >>> 0) {
7149       i66 = i60;
7150      } else {
7151       break;
7152      }
7153     }
7154     if ((HEAP32[i11 >> 2] & 512 | 0) != 0) {
7155      HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i62, i60) | 0;
7156     }
7157     i65 = i65 - i60 | 0;
7158     i62 = i62 + i60 | 0;
7159     if (i66) {
7160      i60 = 285;
7161      break L17;
7162     }
7163    }
7164    HEAP32[i42 >> 2] = 0;
7165    HEAP32[i4 >> 2] = 7;
7166    i60 = 96;
7167   } else if ((i60 | 0) == 228) {
7168    i60 = 0;
7169    i69 = (1 << HEAP32[i51 >> 2]) + -1 | 0;
7170    i71 = i69 & i64;
7171    i66 = HEAP32[i50 >> 2] | 0;
7172    i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
7173    i67 = i68 & 255;
7174    if (i67 >>> 0 > i63 >>> 0) {
7175     while (1) {
7176      if ((i65 | 0) == 0) {
7177       i65 = 0;
7178       break L17;
7179      }
7180      i65 = i65 + -1 | 0;
7181      i70 = i62 + 1 | 0;
7182      i64 = (HEAPU8[i62] << i63) + i64 | 0;
7183      i63 = i63 + 8 | 0;
7184      i71 = i69 & i64;
7185      i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
7186      i67 = i68 & 255;
7187      if (i67 >>> 0 > i63 >>> 0) {
7188       i62 = i70;
7189      } else {
7190       i62 = i70;
7191       break;
7192      }
7193     }
7194    }
7195    i69 = HEAP8[i66 + (i71 << 2) | 0] | 0;
7196    i70 = HEAP16[i66 + (i71 << 2) + 2 >> 1] | 0;
7197    i71 = i69 & 255;
7198    if ((i71 & 240 | 0) == 0) {
7199     i69 = i70 & 65535;
7200     i70 = (1 << i67 + i71) + -1 | 0;
7201     i71 = ((i64 & i70) >>> i67) + i69 | 0;
7202     i68 = HEAP8[i66 + (i71 << 2) + 1 | 0] | 0;
7203     if (((i68 & 255) + i67 | 0) >>> 0 > i63 >>> 0) {
7204      while (1) {
7205       if ((i65 | 0) == 0) {
7206        i65 = 0;
7207        break L17;
7208       }
7209       i65 = i65 + -1 | 0;
7210       i71 = i62 + 1 | 0;
7211       i64 = (HEAPU8[i62] << i63) + i64 | 0;
7212       i63 = i63 + 8 | 0;
7213       i62 = ((i64 & i70) >>> i67) + i69 | 0;
7214       i68 = HEAP8[i66 + (i62 << 2) + 1 | 0] | 0;
7215       if (((i68 & 255) + i67 | 0) >>> 0 > i63 >>> 0) {
7216        i62 = i71;
7217       } else {
7218        i69 = i62;
7219        i62 = i71;
7220        break;
7221       }
7222      }
7223     } else {
7224      i69 = i71;
7225     }
7226     i70 = HEAP16[i66 + (i69 << 2) + 2 >> 1] | 0;
7227     i69 = HEAP8[i66 + (i69 << 2) | 0] | 0;
7228     i66 = (HEAP32[i57 >> 2] | 0) + i67 | 0;
7229     HEAP32[i57 >> 2] = i66;
7230     i63 = i63 - i67 | 0;
7231     i64 = i64 >>> i67;
7232    } else {
7233     i66 = HEAP32[i57 >> 2] | 0;
7234    }
7235    i72 = i68 & 255;
7236    i64 = i64 >>> i72;
7237    i63 = i63 - i72 | 0;
7238    HEAP32[i57 >> 2] = i66 + i72;
7239    i66 = i69 & 255;
7240    if ((i66 & 64 | 0) == 0) {
7241     HEAP32[i54 >> 2] = i70 & 65535;
7242     i66 = i66 & 15;
7243     HEAP32[i37 >> 2] = i66;
7244     HEAP32[i4 >> 2] = 23;
7245     i60 = 240;
7246     break;
7247    } else {
7248     HEAP32[i35 >> 2] = 11848;
7249     HEAP32[i4 >> 2] = 29;
7250     i66 = i26;
7251     break;
7252    }
7253   }
7254  } while (0);
7255  if ((i60 | 0) == 96) {
7256   if ((HEAP32[i11 >> 2] & 4096 | 0) == 0) {
7257    i60 = HEAP32[i38 >> 2] | 0;
7258    if ((i60 | 0) != 0) {
7259     HEAP32[i60 + 36 >> 2] = 0;
7260    }
7261   } else {
7262    if ((i65 | 0) == 0) {
7263     i65 = 0;
7264     i60 = 285;
7265     break;
7266    } else {
7267     i66 = 0;
7268    }
7269    while (1) {
7270     i60 = i66 + 1 | 0;
7271     i66 = HEAP8[i62 + i66 | 0] | 0;
7272     i67 = HEAP32[i38 >> 2] | 0;
7273     if (((i67 | 0) != 0 ? (i24 = HEAP32[i67 + 36 >> 2] | 0, (i24 | 0) != 0) : 0) ? (i22 = HEAP32[i42 >> 2] | 0, i22 >>> 0 < (HEAP32[i67 + 40 >> 2] | 0) >>> 0) : 0) {
7274      HEAP32[i42 >> 2] = i22 + 1;
7275      HEAP8[i24 + i22 | 0] = i66;
7276     }
7277     i66 = i66 << 24 >> 24 != 0;
7278     if (i66 & i60 >>> 0 < i65 >>> 0) {
7279      i66 = i60;
7280     } else {
7281      break;
7282     }
7283    }
7284    if ((HEAP32[i11 >> 2] & 512 | 0) != 0) {
7285     HEAP32[i10 >> 2] = _crc32(HEAP32[i10 >> 2] | 0, i62, i60) | 0;
7286    }
7287    i65 = i65 - i60 | 0;
7288    i62 = i62 + i60 | 0;
7289    if (i66) {
7290     i60 = 285;
7291     break;
7292    }
7293   }
7294   HEAP32[i4 >> 2] = 8;
7295   i60 = 109;
7296  } else if ((i60 | 0) == 240) {
7297   i60 = 0;
7298   if ((i66 | 0) != 0) {
7299    if (i63 >>> 0 < i66 >>> 0) {
7300     i67 = i62;
7301     while (1) {
7302      if ((i65 | 0) == 0) {
7303       i65 = 0;
7304       i62 = i67;
7305       break L17;
7306      }
7307      i65 = i65 + -1 | 0;
7308      i62 = i67 + 1 | 0;
7309      i64 = (HEAPU8[i67] << i63) + i64 | 0;
7310      i63 = i63 + 8 | 0;
7311      if (i63 >>> 0 < i66 >>> 0) {
7312       i67 = i62;
7313      } else {
7314       break;
7315      }
7316     }
7317    }
7318    HEAP32[i54 >> 2] = (HEAP32[i54 >> 2] | 0) + ((1 << i66) + -1 & i64);
7319    HEAP32[i57 >> 2] = (HEAP32[i57 >> 2] | 0) + i66;
7320    i63 = i63 - i66 | 0;
7321    i64 = i64 >>> i66;
7322   }
7323   HEAP32[i4 >> 2] = 24;
7324   i60 = 246;
7325  }
7326  do {
7327   if ((i60 | 0) == 109) {
7328    i60 = 0;
7329    i66 = HEAP32[i11 >> 2] | 0;
7330    if ((i66 & 512 | 0) != 0) {
7331     if (i63 >>> 0 < 16) {
7332      i67 = i62;
7333      while (1) {
7334       if ((i65 | 0) == 0) {
7335        i65 = 0;
7336        i62 = i67;
7337        break L17;
7338       }
7339       i65 = i65 + -1 | 0;
7340       i62 = i67 + 1 | 0;
7341       i64 = (HEAPU8[i67] << i63) + i64 | 0;
7342       i63 = i63 + 8 | 0;
7343       if (i63 >>> 0 < 16) {
7344        i67 = i62;
7345       } else {
7346        break;
7347       }
7348      }
7349     }
7350     if ((i64 | 0) == (HEAP32[i10 >> 2] & 65535 | 0)) {
7351      i63 = 0;
7352      i64 = 0;
7353     } else {
7354      HEAP32[i35 >> 2] = 11536;
7355      HEAP32[i4 >> 2] = 29;
7356      i66 = i26;
7357      break;
7358     }
7359    }
7360    i67 = HEAP32[i38 >> 2] | 0;
7361    if ((i67 | 0) != 0) {
7362     HEAP32[i67 + 44 >> 2] = i66 >>> 9 & 1;
7363     HEAP32[i67 + 48 >> 2] = 1;
7364    }
7365    i66 = _crc32(0, 0, 0) | 0;
7366    HEAP32[i10 >> 2] = i66;
7367    HEAP32[i9 >> 2] = i66;
7368    HEAP32[i4 >> 2] = 11;
7369    i66 = i26;
7370   } else if ((i60 | 0) == 246) {
7371    i60 = 0;
7372    if ((i26 | 0) == 0) {
7373     i26 = 0;
7374     i60 = 285;
7375     break L17;
7376    }
7377    i67 = i59 - i26 | 0;
7378    i66 = HEAP32[i54 >> 2] | 0;
7379    if (i66 >>> 0 > i67 >>> 0) {
7380     i67 = i66 - i67 | 0;
7381     if (i67 >>> 0 > (HEAP32[i28 >> 2] | 0) >>> 0 ? (HEAP32[i29 >> 2] | 0) != 0 : 0) {
7382      HEAP32[i35 >> 2] = 11872;
7383      HEAP32[i4 >> 2] = 29;
7384      i66 = i26;
7385      break;
7386     }
7387     i68 = HEAP32[i30 >> 2] | 0;
7388     if (i67 >>> 0 > i68 >>> 0) {
7389      i68 = i67 - i68 | 0;
7390      i66 = i68;
7391      i68 = (HEAP32[i31 >> 2] | 0) + ((HEAP32[i18 >> 2] | 0) - i68) | 0;
7392     } else {
7393      i66 = i67;
7394      i68 = (HEAP32[i31 >> 2] | 0) + (i68 - i67) | 0;
7395     }
7396     i69 = HEAP32[i42 >> 2] | 0;
7397     i67 = i69;
7398     i69 = i66 >>> 0 > i69 >>> 0 ? i69 : i66;
7399    } else {
7400     i69 = HEAP32[i42 >> 2] | 0;
7401     i67 = i69;
7402     i68 = i19 + (0 - i66) | 0;
7403    }
7404    i66 = i69 >>> 0 > i26 >>> 0 ? i26 : i69;
7405    HEAP32[i42 >> 2] = i67 - i66;
7406    i67 = ~i26;
7407    i69 = ~i69;
7408    i67 = i67 >>> 0 > i69 >>> 0 ? i67 : i69;
7409    i69 = i66;
7410    i70 = i19;
7411    while (1) {
7412     HEAP8[i70] = HEAP8[i68] | 0;
7413     i69 = i69 + -1 | 0;
7414     if ((i69 | 0) == 0) {
7415      break;
7416     } else {
7417      i68 = i68 + 1 | 0;
7418      i70 = i70 + 1 | 0;
7419     }
7420    }
7421    i66 = i26 - i66 | 0;
7422    i19 = i19 + ~i67 | 0;
7423    if ((HEAP32[i42 >> 2] | 0) == 0) {
7424     HEAP32[i4 >> 2] = 20;
7425    }
7426   }
7427  } while (0);
7428  i68 = HEAP32[i4 >> 2] | 0;
7429  i67 = i63;
7430  i26 = i66;
7431 }
7432 if ((i60 | 0) == 122) {
7433  HEAP32[i8 >> 2] = i19;
7434  HEAP32[i15 >> 2] = i26;
7435  HEAP32[i2 >> 2] = i62;
7436  HEAP32[i16 >> 2] = i65;
7437  HEAP32[i17 >> 2] = i64;
7438  HEAP32[i6 >> 2] = i63;
7439  i72 = 2;
7440  STACKTOP = i1;
7441  return i72 | 0;
7442 } else if ((i60 | 0) == 133) {
7443  i63 = i63 + -3 | 0;
7444  i64 = i64 >>> 3;
7445 } else if ((i60 | 0) == 284) {
7446  HEAP32[i4 >> 2] = 28;
7447  i61 = 1;
7448 } else if ((i60 | 0) != 285) if ((i60 | 0) == 299) {
7449  i72 = -4;
7450  STACKTOP = i1;
7451  return i72 | 0;
7452 } else if ((i60 | 0) == 300) {
7453  STACKTOP = i1;
7454  return i2 | 0;
7455 }
7456 HEAP32[i8 >> 2] = i19;
7457 HEAP32[i15 >> 2] = i26;
7458 HEAP32[i2 >> 2] = i62;
7459 HEAP32[i16 >> 2] = i65;
7460 HEAP32[i17 >> 2] = i64;
7461 HEAP32[i6 >> 2] = i63;
7462 if ((HEAP32[i18 >> 2] | 0) == 0) {
7463  if ((HEAP32[i4 >> 2] | 0) >>> 0 < 26 ? (i59 | 0) != (HEAP32[i15 >> 2] | 0) : 0) {
7464   i60 = 289;
7465  }
7466 } else {
7467  i60 = 289;
7468 }
7469 if ((i60 | 0) == 289 ? (_updatewindow(i2, i59) | 0) != 0 : 0) {
7470  HEAP32[i4 >> 2] = 30;
7471  i72 = -4;
7472  STACKTOP = i1;
7473  return i72 | 0;
7474 }
7475 i16 = HEAP32[i16 >> 2] | 0;
7476 i72 = HEAP32[i15 >> 2] | 0;
7477 i15 = i59 - i72 | 0;
7478 i71 = i2 + 8 | 0;
7479 HEAP32[i71 >> 2] = i5 - i16 + (HEAP32[i71 >> 2] | 0);
7480 HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i15;
7481 HEAP32[i14 >> 2] = (HEAP32[i14 >> 2] | 0) + i15;
7482 i13 = (i59 | 0) == (i72 | 0);
7483 if (!((HEAP32[i12 >> 2] | 0) == 0 | i13)) {
7484  i12 = HEAP32[i10 >> 2] | 0;
7485  i8 = (HEAP32[i8 >> 2] | 0) + (0 - i15) | 0;
7486  if ((HEAP32[i11 >> 2] | 0) == 0) {
7487   i8 = _adler32(i12, i8, i15) | 0;
7488  } else {
7489   i8 = _crc32(i12, i8, i15) | 0;
7490  }
7491  HEAP32[i10 >> 2] = i8;
7492  HEAP32[i9 >> 2] = i8;
7493 }
7494 i4 = HEAP32[i4 >> 2] | 0;
7495 if ((i4 | 0) == 19) {
7496  i8 = 256;
7497 } else {
7498  i8 = (i4 | 0) == 14 ? 256 : 0;
7499 }
7500 HEAP32[i2 + 44 >> 2] = ((HEAP32[i7 >> 2] | 0) != 0 ? 64 : 0) + (HEAP32[i6 >> 2] | 0) + ((i4 | 0) == 11 ? 128 : 0) + i8;
7501 i72 = ((i5 | 0) == (i16 | 0) & i13 | (i3 | 0) == 4) & (i61 | 0) == 0 ? -5 : i61;
7502 STACKTOP = i1;
7503 return i72 | 0;
7504}
7505function _malloc(i12) {
7506 i12 = i12 | 0;
7507 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0;
7508 i1 = STACKTOP;
7509 do {
7510  if (i12 >>> 0 < 245) {
7511   if (i12 >>> 0 < 11) {
7512    i12 = 16;
7513   } else {
7514    i12 = i12 + 11 & -8;
7515   }
7516   i20 = i12 >>> 3;
7517   i18 = HEAP32[3618] | 0;
7518   i21 = i18 >>> i20;
7519   if ((i21 & 3 | 0) != 0) {
7520    i6 = (i21 & 1 ^ 1) + i20 | 0;
7521    i5 = i6 << 1;
7522    i3 = 14512 + (i5 << 2) | 0;
7523    i5 = 14512 + (i5 + 2 << 2) | 0;
7524    i7 = HEAP32[i5 >> 2] | 0;
7525    i2 = i7 + 8 | 0;
7526    i4 = HEAP32[i2 >> 2] | 0;
7527    do {
7528     if ((i3 | 0) != (i4 | 0)) {
7529      if (i4 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7530       _abort();
7531      }
7532      i8 = i4 + 12 | 0;
7533      if ((HEAP32[i8 >> 2] | 0) == (i7 | 0)) {
7534       HEAP32[i8 >> 2] = i3;
7535       HEAP32[i5 >> 2] = i4;
7536       break;
7537      } else {
7538       _abort();
7539      }
7540     } else {
7541      HEAP32[3618] = i18 & ~(1 << i6);
7542     }
7543    } while (0);
7544    i32 = i6 << 3;
7545    HEAP32[i7 + 4 >> 2] = i32 | 3;
7546    i32 = i7 + (i32 | 4) | 0;
7547    HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
7548    i32 = i2;
7549    STACKTOP = i1;
7550    return i32 | 0;
7551   }
7552   if (i12 >>> 0 > (HEAP32[14480 >> 2] | 0) >>> 0) {
7553    if ((i21 | 0) != 0) {
7554     i7 = 2 << i20;
7555     i7 = i21 << i20 & (i7 | 0 - i7);
7556     i7 = (i7 & 0 - i7) + -1 | 0;
7557     i2 = i7 >>> 12 & 16;
7558     i7 = i7 >>> i2;
7559     i6 = i7 >>> 5 & 8;
7560     i7 = i7 >>> i6;
7561     i5 = i7 >>> 2 & 4;
7562     i7 = i7 >>> i5;
7563     i4 = i7 >>> 1 & 2;
7564     i7 = i7 >>> i4;
7565     i3 = i7 >>> 1 & 1;
7566     i3 = (i6 | i2 | i5 | i4 | i3) + (i7 >>> i3) | 0;
7567     i7 = i3 << 1;
7568     i4 = 14512 + (i7 << 2) | 0;
7569     i7 = 14512 + (i7 + 2 << 2) | 0;
7570     i5 = HEAP32[i7 >> 2] | 0;
7571     i2 = i5 + 8 | 0;
7572     i6 = HEAP32[i2 >> 2] | 0;
7573     do {
7574      if ((i4 | 0) != (i6 | 0)) {
7575       if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7576        _abort();
7577       }
7578       i8 = i6 + 12 | 0;
7579       if ((HEAP32[i8 >> 2] | 0) == (i5 | 0)) {
7580        HEAP32[i8 >> 2] = i4;
7581        HEAP32[i7 >> 2] = i6;
7582        break;
7583       } else {
7584        _abort();
7585       }
7586      } else {
7587       HEAP32[3618] = i18 & ~(1 << i3);
7588      }
7589     } while (0);
7590     i6 = i3 << 3;
7591     i4 = i6 - i12 | 0;
7592     HEAP32[i5 + 4 >> 2] = i12 | 3;
7593     i3 = i5 + i12 | 0;
7594     HEAP32[i5 + (i12 | 4) >> 2] = i4 | 1;
7595     HEAP32[i5 + i6 >> 2] = i4;
7596     i6 = HEAP32[14480 >> 2] | 0;
7597     if ((i6 | 0) != 0) {
7598      i5 = HEAP32[14492 >> 2] | 0;
7599      i8 = i6 >>> 3;
7600      i9 = i8 << 1;
7601      i6 = 14512 + (i9 << 2) | 0;
7602      i7 = HEAP32[3618] | 0;
7603      i8 = 1 << i8;
7604      if ((i7 & i8 | 0) != 0) {
7605       i7 = 14512 + (i9 + 2 << 2) | 0;
7606       i8 = HEAP32[i7 >> 2] | 0;
7607       if (i8 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7608        _abort();
7609       } else {
7610        i28 = i7;
7611        i27 = i8;
7612       }
7613      } else {
7614       HEAP32[3618] = i7 | i8;
7615       i28 = 14512 + (i9 + 2 << 2) | 0;
7616       i27 = i6;
7617      }
7618      HEAP32[i28 >> 2] = i5;
7619      HEAP32[i27 + 12 >> 2] = i5;
7620      HEAP32[i5 + 8 >> 2] = i27;
7621      HEAP32[i5 + 12 >> 2] = i6;
7622     }
7623     HEAP32[14480 >> 2] = i4;
7624     HEAP32[14492 >> 2] = i3;
7625     i32 = i2;
7626     STACKTOP = i1;
7627     return i32 | 0;
7628    }
7629    i18 = HEAP32[14476 >> 2] | 0;
7630    if ((i18 | 0) != 0) {
7631     i2 = (i18 & 0 - i18) + -1 | 0;
7632     i31 = i2 >>> 12 & 16;
7633     i2 = i2 >>> i31;
7634     i30 = i2 >>> 5 & 8;
7635     i2 = i2 >>> i30;
7636     i32 = i2 >>> 2 & 4;
7637     i2 = i2 >>> i32;
7638     i6 = i2 >>> 1 & 2;
7639     i2 = i2 >>> i6;
7640     i3 = i2 >>> 1 & 1;
7641     i3 = HEAP32[14776 + ((i30 | i31 | i32 | i6 | i3) + (i2 >>> i3) << 2) >> 2] | 0;
7642     i2 = (HEAP32[i3 + 4 >> 2] & -8) - i12 | 0;
7643     i6 = i3;
7644     while (1) {
7645      i5 = HEAP32[i6 + 16 >> 2] | 0;
7646      if ((i5 | 0) == 0) {
7647       i5 = HEAP32[i6 + 20 >> 2] | 0;
7648       if ((i5 | 0) == 0) {
7649        break;
7650       }
7651      }
7652      i6 = (HEAP32[i5 + 4 >> 2] & -8) - i12 | 0;
7653      i4 = i6 >>> 0 < i2 >>> 0;
7654      i2 = i4 ? i6 : i2;
7655      i6 = i5;
7656      i3 = i4 ? i5 : i3;
7657     }
7658     i6 = HEAP32[14488 >> 2] | 0;
7659     if (i3 >>> 0 < i6 >>> 0) {
7660      _abort();
7661     }
7662     i4 = i3 + i12 | 0;
7663     if (!(i3 >>> 0 < i4 >>> 0)) {
7664      _abort();
7665     }
7666     i5 = HEAP32[i3 + 24 >> 2] | 0;
7667     i7 = HEAP32[i3 + 12 >> 2] | 0;
7668     do {
7669      if ((i7 | 0) == (i3 | 0)) {
7670       i8 = i3 + 20 | 0;
7671       i7 = HEAP32[i8 >> 2] | 0;
7672       if ((i7 | 0) == 0) {
7673        i8 = i3 + 16 | 0;
7674        i7 = HEAP32[i8 >> 2] | 0;
7675        if ((i7 | 0) == 0) {
7676         i26 = 0;
7677         break;
7678        }
7679       }
7680       while (1) {
7681        i10 = i7 + 20 | 0;
7682        i9 = HEAP32[i10 >> 2] | 0;
7683        if ((i9 | 0) != 0) {
7684         i7 = i9;
7685         i8 = i10;
7686         continue;
7687        }
7688        i10 = i7 + 16 | 0;
7689        i9 = HEAP32[i10 >> 2] | 0;
7690        if ((i9 | 0) == 0) {
7691         break;
7692        } else {
7693         i7 = i9;
7694         i8 = i10;
7695        }
7696       }
7697       if (i8 >>> 0 < i6 >>> 0) {
7698        _abort();
7699       } else {
7700        HEAP32[i8 >> 2] = 0;
7701        i26 = i7;
7702        break;
7703       }
7704      } else {
7705       i8 = HEAP32[i3 + 8 >> 2] | 0;
7706       if (i8 >>> 0 < i6 >>> 0) {
7707        _abort();
7708       }
7709       i6 = i8 + 12 | 0;
7710       if ((HEAP32[i6 >> 2] | 0) != (i3 | 0)) {
7711        _abort();
7712       }
7713       i9 = i7 + 8 | 0;
7714       if ((HEAP32[i9 >> 2] | 0) == (i3 | 0)) {
7715        HEAP32[i6 >> 2] = i7;
7716        HEAP32[i9 >> 2] = i8;
7717        i26 = i7;
7718        break;
7719       } else {
7720        _abort();
7721       }
7722      }
7723     } while (0);
7724     do {
7725      if ((i5 | 0) != 0) {
7726       i7 = HEAP32[i3 + 28 >> 2] | 0;
7727       i6 = 14776 + (i7 << 2) | 0;
7728       if ((i3 | 0) == (HEAP32[i6 >> 2] | 0)) {
7729        HEAP32[i6 >> 2] = i26;
7730        if ((i26 | 0) == 0) {
7731         HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i7);
7732         break;
7733        }
7734       } else {
7735        if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7736         _abort();
7737        }
7738        i6 = i5 + 16 | 0;
7739        if ((HEAP32[i6 >> 2] | 0) == (i3 | 0)) {
7740         HEAP32[i6 >> 2] = i26;
7741        } else {
7742         HEAP32[i5 + 20 >> 2] = i26;
7743        }
7744        if ((i26 | 0) == 0) {
7745         break;
7746        }
7747       }
7748       if (i26 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7749        _abort();
7750       }
7751       HEAP32[i26 + 24 >> 2] = i5;
7752       i5 = HEAP32[i3 + 16 >> 2] | 0;
7753       do {
7754        if ((i5 | 0) != 0) {
7755         if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7756          _abort();
7757         } else {
7758          HEAP32[i26 + 16 >> 2] = i5;
7759          HEAP32[i5 + 24 >> 2] = i26;
7760          break;
7761         }
7762        }
7763       } while (0);
7764       i5 = HEAP32[i3 + 20 >> 2] | 0;
7765       if ((i5 | 0) != 0) {
7766        if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7767         _abort();
7768        } else {
7769         HEAP32[i26 + 20 >> 2] = i5;
7770         HEAP32[i5 + 24 >> 2] = i26;
7771         break;
7772        }
7773       }
7774      }
7775     } while (0);
7776     if (i2 >>> 0 < 16) {
7777      i32 = i2 + i12 | 0;
7778      HEAP32[i3 + 4 >> 2] = i32 | 3;
7779      i32 = i3 + (i32 + 4) | 0;
7780      HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
7781     } else {
7782      HEAP32[i3 + 4 >> 2] = i12 | 3;
7783      HEAP32[i3 + (i12 | 4) >> 2] = i2 | 1;
7784      HEAP32[i3 + (i2 + i12) >> 2] = i2;
7785      i6 = HEAP32[14480 >> 2] | 0;
7786      if ((i6 | 0) != 0) {
7787       i5 = HEAP32[14492 >> 2] | 0;
7788       i8 = i6 >>> 3;
7789       i9 = i8 << 1;
7790       i6 = 14512 + (i9 << 2) | 0;
7791       i7 = HEAP32[3618] | 0;
7792       i8 = 1 << i8;
7793       if ((i7 & i8 | 0) != 0) {
7794        i7 = 14512 + (i9 + 2 << 2) | 0;
7795        i8 = HEAP32[i7 >> 2] | 0;
7796        if (i8 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7797         _abort();
7798        } else {
7799         i25 = i7;
7800         i24 = i8;
7801        }
7802       } else {
7803        HEAP32[3618] = i7 | i8;
7804        i25 = 14512 + (i9 + 2 << 2) | 0;
7805        i24 = i6;
7806       }
7807       HEAP32[i25 >> 2] = i5;
7808       HEAP32[i24 + 12 >> 2] = i5;
7809       HEAP32[i5 + 8 >> 2] = i24;
7810       HEAP32[i5 + 12 >> 2] = i6;
7811      }
7812      HEAP32[14480 >> 2] = i2;
7813      HEAP32[14492 >> 2] = i4;
7814     }
7815     i32 = i3 + 8 | 0;
7816     STACKTOP = i1;
7817     return i32 | 0;
7818    }
7819   }
7820  } else {
7821   if (!(i12 >>> 0 > 4294967231)) {
7822    i24 = i12 + 11 | 0;
7823    i12 = i24 & -8;
7824    i26 = HEAP32[14476 >> 2] | 0;
7825    if ((i26 | 0) != 0) {
7826     i25 = 0 - i12 | 0;
7827     i24 = i24 >>> 8;
7828     if ((i24 | 0) != 0) {
7829      if (i12 >>> 0 > 16777215) {
7830       i27 = 31;
7831      } else {
7832       i31 = (i24 + 1048320 | 0) >>> 16 & 8;
7833       i32 = i24 << i31;
7834       i30 = (i32 + 520192 | 0) >>> 16 & 4;
7835       i32 = i32 << i30;
7836       i27 = (i32 + 245760 | 0) >>> 16 & 2;
7837       i27 = 14 - (i30 | i31 | i27) + (i32 << i27 >>> 15) | 0;
7838       i27 = i12 >>> (i27 + 7 | 0) & 1 | i27 << 1;
7839      }
7840     } else {
7841      i27 = 0;
7842     }
7843     i30 = HEAP32[14776 + (i27 << 2) >> 2] | 0;
7844     L126 : do {
7845      if ((i30 | 0) == 0) {
7846       i29 = 0;
7847       i24 = 0;
7848      } else {
7849       if ((i27 | 0) == 31) {
7850        i24 = 0;
7851       } else {
7852        i24 = 25 - (i27 >>> 1) | 0;
7853       }
7854       i29 = 0;
7855       i28 = i12 << i24;
7856       i24 = 0;
7857       while (1) {
7858        i32 = HEAP32[i30 + 4 >> 2] & -8;
7859        i31 = i32 - i12 | 0;
7860        if (i31 >>> 0 < i25 >>> 0) {
7861         if ((i32 | 0) == (i12 | 0)) {
7862          i25 = i31;
7863          i29 = i30;
7864          i24 = i30;
7865          break L126;
7866         } else {
7867          i25 = i31;
7868          i24 = i30;
7869         }
7870        }
7871        i31 = HEAP32[i30 + 20 >> 2] | 0;
7872        i30 = HEAP32[i30 + (i28 >>> 31 << 2) + 16 >> 2] | 0;
7873        i29 = (i31 | 0) == 0 | (i31 | 0) == (i30 | 0) ? i29 : i31;
7874        if ((i30 | 0) == 0) {
7875         break;
7876        } else {
7877         i28 = i28 << 1;
7878        }
7879       }
7880      }
7881     } while (0);
7882     if ((i29 | 0) == 0 & (i24 | 0) == 0) {
7883      i32 = 2 << i27;
7884      i26 = i26 & (i32 | 0 - i32);
7885      if ((i26 | 0) == 0) {
7886       break;
7887      }
7888      i32 = (i26 & 0 - i26) + -1 | 0;
7889      i28 = i32 >>> 12 & 16;
7890      i32 = i32 >>> i28;
7891      i27 = i32 >>> 5 & 8;
7892      i32 = i32 >>> i27;
7893      i30 = i32 >>> 2 & 4;
7894      i32 = i32 >>> i30;
7895      i31 = i32 >>> 1 & 2;
7896      i32 = i32 >>> i31;
7897      i29 = i32 >>> 1 & 1;
7898      i29 = HEAP32[14776 + ((i27 | i28 | i30 | i31 | i29) + (i32 >>> i29) << 2) >> 2] | 0;
7899     }
7900     if ((i29 | 0) != 0) {
7901      while (1) {
7902       i27 = (HEAP32[i29 + 4 >> 2] & -8) - i12 | 0;
7903       i26 = i27 >>> 0 < i25 >>> 0;
7904       i25 = i26 ? i27 : i25;
7905       i24 = i26 ? i29 : i24;
7906       i26 = HEAP32[i29 + 16 >> 2] | 0;
7907       if ((i26 | 0) != 0) {
7908        i29 = i26;
7909        continue;
7910       }
7911       i29 = HEAP32[i29 + 20 >> 2] | 0;
7912       if ((i29 | 0) == 0) {
7913        break;
7914       }
7915      }
7916     }
7917     if ((i24 | 0) != 0 ? i25 >>> 0 < ((HEAP32[14480 >> 2] | 0) - i12 | 0) >>> 0 : 0) {
7918      i4 = HEAP32[14488 >> 2] | 0;
7919      if (i24 >>> 0 < i4 >>> 0) {
7920       _abort();
7921      }
7922      i2 = i24 + i12 | 0;
7923      if (!(i24 >>> 0 < i2 >>> 0)) {
7924       _abort();
7925      }
7926      i3 = HEAP32[i24 + 24 >> 2] | 0;
7927      i6 = HEAP32[i24 + 12 >> 2] | 0;
7928      do {
7929       if ((i6 | 0) == (i24 | 0)) {
7930        i6 = i24 + 20 | 0;
7931        i5 = HEAP32[i6 >> 2] | 0;
7932        if ((i5 | 0) == 0) {
7933         i6 = i24 + 16 | 0;
7934         i5 = HEAP32[i6 >> 2] | 0;
7935         if ((i5 | 0) == 0) {
7936          i22 = 0;
7937          break;
7938         }
7939        }
7940        while (1) {
7941         i8 = i5 + 20 | 0;
7942         i7 = HEAP32[i8 >> 2] | 0;
7943         if ((i7 | 0) != 0) {
7944          i5 = i7;
7945          i6 = i8;
7946          continue;
7947         }
7948         i7 = i5 + 16 | 0;
7949         i8 = HEAP32[i7 >> 2] | 0;
7950         if ((i8 | 0) == 0) {
7951          break;
7952         } else {
7953          i5 = i8;
7954          i6 = i7;
7955         }
7956        }
7957        if (i6 >>> 0 < i4 >>> 0) {
7958         _abort();
7959        } else {
7960         HEAP32[i6 >> 2] = 0;
7961         i22 = i5;
7962         break;
7963        }
7964       } else {
7965        i5 = HEAP32[i24 + 8 >> 2] | 0;
7966        if (i5 >>> 0 < i4 >>> 0) {
7967         _abort();
7968        }
7969        i7 = i5 + 12 | 0;
7970        if ((HEAP32[i7 >> 2] | 0) != (i24 | 0)) {
7971         _abort();
7972        }
7973        i4 = i6 + 8 | 0;
7974        if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
7975         HEAP32[i7 >> 2] = i6;
7976         HEAP32[i4 >> 2] = i5;
7977         i22 = i6;
7978         break;
7979        } else {
7980         _abort();
7981        }
7982       }
7983      } while (0);
7984      do {
7985       if ((i3 | 0) != 0) {
7986        i4 = HEAP32[i24 + 28 >> 2] | 0;
7987        i5 = 14776 + (i4 << 2) | 0;
7988        if ((i24 | 0) == (HEAP32[i5 >> 2] | 0)) {
7989         HEAP32[i5 >> 2] = i22;
7990         if ((i22 | 0) == 0) {
7991          HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i4);
7992          break;
7993         }
7994        } else {
7995         if (i3 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
7996          _abort();
7997         }
7998         i4 = i3 + 16 | 0;
7999         if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
8000          HEAP32[i4 >> 2] = i22;
8001         } else {
8002          HEAP32[i3 + 20 >> 2] = i22;
8003         }
8004         if ((i22 | 0) == 0) {
8005          break;
8006         }
8007        }
8008        if (i22 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8009         _abort();
8010        }
8011        HEAP32[i22 + 24 >> 2] = i3;
8012        i3 = HEAP32[i24 + 16 >> 2] | 0;
8013        do {
8014         if ((i3 | 0) != 0) {
8015          if (i3 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8016           _abort();
8017          } else {
8018           HEAP32[i22 + 16 >> 2] = i3;
8019           HEAP32[i3 + 24 >> 2] = i22;
8020           break;
8021          }
8022         }
8023        } while (0);
8024        i3 = HEAP32[i24 + 20 >> 2] | 0;
8025        if ((i3 | 0) != 0) {
8026         if (i3 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8027          _abort();
8028         } else {
8029          HEAP32[i22 + 20 >> 2] = i3;
8030          HEAP32[i3 + 24 >> 2] = i22;
8031          break;
8032         }
8033        }
8034       }
8035      } while (0);
8036      L204 : do {
8037       if (!(i25 >>> 0 < 16)) {
8038        HEAP32[i24 + 4 >> 2] = i12 | 3;
8039        HEAP32[i24 + (i12 | 4) >> 2] = i25 | 1;
8040        HEAP32[i24 + (i25 + i12) >> 2] = i25;
8041        i4 = i25 >>> 3;
8042        if (i25 >>> 0 < 256) {
8043         i6 = i4 << 1;
8044         i3 = 14512 + (i6 << 2) | 0;
8045         i5 = HEAP32[3618] | 0;
8046         i4 = 1 << i4;
8047         if ((i5 & i4 | 0) != 0) {
8048          i5 = 14512 + (i6 + 2 << 2) | 0;
8049          i4 = HEAP32[i5 >> 2] | 0;
8050          if (i4 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8051           _abort();
8052          } else {
8053           i21 = i5;
8054           i20 = i4;
8055          }
8056         } else {
8057          HEAP32[3618] = i5 | i4;
8058          i21 = 14512 + (i6 + 2 << 2) | 0;
8059          i20 = i3;
8060         }
8061         HEAP32[i21 >> 2] = i2;
8062         HEAP32[i20 + 12 >> 2] = i2;
8063         HEAP32[i24 + (i12 + 8) >> 2] = i20;
8064         HEAP32[i24 + (i12 + 12) >> 2] = i3;
8065         break;
8066        }
8067        i3 = i25 >>> 8;
8068        if ((i3 | 0) != 0) {
8069         if (i25 >>> 0 > 16777215) {
8070          i3 = 31;
8071         } else {
8072          i31 = (i3 + 1048320 | 0) >>> 16 & 8;
8073          i32 = i3 << i31;
8074          i30 = (i32 + 520192 | 0) >>> 16 & 4;
8075          i32 = i32 << i30;
8076          i3 = (i32 + 245760 | 0) >>> 16 & 2;
8077          i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
8078          i3 = i25 >>> (i3 + 7 | 0) & 1 | i3 << 1;
8079         }
8080        } else {
8081         i3 = 0;
8082        }
8083        i6 = 14776 + (i3 << 2) | 0;
8084        HEAP32[i24 + (i12 + 28) >> 2] = i3;
8085        HEAP32[i24 + (i12 + 20) >> 2] = 0;
8086        HEAP32[i24 + (i12 + 16) >> 2] = 0;
8087        i4 = HEAP32[14476 >> 2] | 0;
8088        i5 = 1 << i3;
8089        if ((i4 & i5 | 0) == 0) {
8090         HEAP32[14476 >> 2] = i4 | i5;
8091         HEAP32[i6 >> 2] = i2;
8092         HEAP32[i24 + (i12 + 24) >> 2] = i6;
8093         HEAP32[i24 + (i12 + 12) >> 2] = i2;
8094         HEAP32[i24 + (i12 + 8) >> 2] = i2;
8095         break;
8096        }
8097        i4 = HEAP32[i6 >> 2] | 0;
8098        if ((i3 | 0) == 31) {
8099         i3 = 0;
8100        } else {
8101         i3 = 25 - (i3 >>> 1) | 0;
8102        }
8103        L225 : do {
8104         if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i25 | 0)) {
8105          i3 = i25 << i3;
8106          while (1) {
8107           i6 = i4 + (i3 >>> 31 << 2) + 16 | 0;
8108           i5 = HEAP32[i6 >> 2] | 0;
8109           if ((i5 | 0) == 0) {
8110            break;
8111           }
8112           if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i25 | 0)) {
8113            i18 = i5;
8114            break L225;
8115           } else {
8116            i3 = i3 << 1;
8117            i4 = i5;
8118           }
8119          }
8120          if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8121           _abort();
8122          } else {
8123           HEAP32[i6 >> 2] = i2;
8124           HEAP32[i24 + (i12 + 24) >> 2] = i4;
8125           HEAP32[i24 + (i12 + 12) >> 2] = i2;
8126           HEAP32[i24 + (i12 + 8) >> 2] = i2;
8127           break L204;
8128          }
8129         } else {
8130          i18 = i4;
8131         }
8132        } while (0);
8133        i4 = i18 + 8 | 0;
8134        i3 = HEAP32[i4 >> 2] | 0;
8135        i5 = HEAP32[14488 >> 2] | 0;
8136        if (i18 >>> 0 < i5 >>> 0) {
8137         _abort();
8138        }
8139        if (i3 >>> 0 < i5 >>> 0) {
8140         _abort();
8141        } else {
8142         HEAP32[i3 + 12 >> 2] = i2;
8143         HEAP32[i4 >> 2] = i2;
8144         HEAP32[i24 + (i12 + 8) >> 2] = i3;
8145         HEAP32[i24 + (i12 + 12) >> 2] = i18;
8146         HEAP32[i24 + (i12 + 24) >> 2] = 0;
8147         break;
8148        }
8149       } else {
8150        i32 = i25 + i12 | 0;
8151        HEAP32[i24 + 4 >> 2] = i32 | 3;
8152        i32 = i24 + (i32 + 4) | 0;
8153        HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
8154       }
8155      } while (0);
8156      i32 = i24 + 8 | 0;
8157      STACKTOP = i1;
8158      return i32 | 0;
8159     }
8160    }
8161   } else {
8162    i12 = -1;
8163   }
8164  }
8165 } while (0);
8166 i18 = HEAP32[14480 >> 2] | 0;
8167 if (!(i12 >>> 0 > i18 >>> 0)) {
8168  i3 = i18 - i12 | 0;
8169  i2 = HEAP32[14492 >> 2] | 0;
8170  if (i3 >>> 0 > 15) {
8171   HEAP32[14492 >> 2] = i2 + i12;
8172   HEAP32[14480 >> 2] = i3;
8173   HEAP32[i2 + (i12 + 4) >> 2] = i3 | 1;
8174   HEAP32[i2 + i18 >> 2] = i3;
8175   HEAP32[i2 + 4 >> 2] = i12 | 3;
8176  } else {
8177   HEAP32[14480 >> 2] = 0;
8178   HEAP32[14492 >> 2] = 0;
8179   HEAP32[i2 + 4 >> 2] = i18 | 3;
8180   i32 = i2 + (i18 + 4) | 0;
8181   HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
8182  }
8183  i32 = i2 + 8 | 0;
8184  STACKTOP = i1;
8185  return i32 | 0;
8186 }
8187 i18 = HEAP32[14484 >> 2] | 0;
8188 if (i12 >>> 0 < i18 >>> 0) {
8189  i31 = i18 - i12 | 0;
8190  HEAP32[14484 >> 2] = i31;
8191  i32 = HEAP32[14496 >> 2] | 0;
8192  HEAP32[14496 >> 2] = i32 + i12;
8193  HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
8194  HEAP32[i32 + 4 >> 2] = i12 | 3;
8195  i32 = i32 + 8 | 0;
8196  STACKTOP = i1;
8197  return i32 | 0;
8198 }
8199 do {
8200  if ((HEAP32[3736] | 0) == 0) {
8201   i18 = _sysconf(30) | 0;
8202   if ((i18 + -1 & i18 | 0) == 0) {
8203    HEAP32[14952 >> 2] = i18;
8204    HEAP32[14948 >> 2] = i18;
8205    HEAP32[14956 >> 2] = -1;
8206    HEAP32[14960 >> 2] = -1;
8207    HEAP32[14964 >> 2] = 0;
8208    HEAP32[14916 >> 2] = 0;
8209    HEAP32[3736] = (_time(0) | 0) & -16 ^ 1431655768;
8210    break;
8211   } else {
8212    _abort();
8213   }
8214  }
8215 } while (0);
8216 i20 = i12 + 48 | 0;
8217 i25 = HEAP32[14952 >> 2] | 0;
8218 i21 = i12 + 47 | 0;
8219 i22 = i25 + i21 | 0;
8220 i25 = 0 - i25 | 0;
8221 i18 = i22 & i25;
8222 if (!(i18 >>> 0 > i12 >>> 0)) {
8223  i32 = 0;
8224  STACKTOP = i1;
8225  return i32 | 0;
8226 }
8227 i24 = HEAP32[14912 >> 2] | 0;
8228 if ((i24 | 0) != 0 ? (i31 = HEAP32[14904 >> 2] | 0, i32 = i31 + i18 | 0, i32 >>> 0 <= i31 >>> 0 | i32 >>> 0 > i24 >>> 0) : 0) {
8229  i32 = 0;
8230  STACKTOP = i1;
8231  return i32 | 0;
8232 }
8233 L269 : do {
8234  if ((HEAP32[14916 >> 2] & 4 | 0) == 0) {
8235   i26 = HEAP32[14496 >> 2] | 0;
8236   L271 : do {
8237    if ((i26 | 0) != 0) {
8238     i24 = 14920 | 0;
8239     while (1) {
8240      i27 = HEAP32[i24 >> 2] | 0;
8241      if (!(i27 >>> 0 > i26 >>> 0) ? (i23 = i24 + 4 | 0, (i27 + (HEAP32[i23 >> 2] | 0) | 0) >>> 0 > i26 >>> 0) : 0) {
8242       break;
8243      }
8244      i24 = HEAP32[i24 + 8 >> 2] | 0;
8245      if ((i24 | 0) == 0) {
8246       i13 = 182;
8247       break L271;
8248      }
8249     }
8250     if ((i24 | 0) != 0) {
8251      i25 = i22 - (HEAP32[14484 >> 2] | 0) & i25;
8252      if (i25 >>> 0 < 2147483647) {
8253       i13 = _sbrk(i25 | 0) | 0;
8254       i26 = (i13 | 0) == ((HEAP32[i24 >> 2] | 0) + (HEAP32[i23 >> 2] | 0) | 0);
8255       i22 = i13;
8256       i24 = i25;
8257       i23 = i26 ? i13 : -1;
8258       i25 = i26 ? i25 : 0;
8259       i13 = 191;
8260      } else {
8261       i25 = 0;
8262      }
8263     } else {
8264      i13 = 182;
8265     }
8266    } else {
8267     i13 = 182;
8268    }
8269   } while (0);
8270   do {
8271    if ((i13 | 0) == 182) {
8272     i23 = _sbrk(0) | 0;
8273     if ((i23 | 0) != (-1 | 0)) {
8274      i24 = i23;
8275      i22 = HEAP32[14948 >> 2] | 0;
8276      i25 = i22 + -1 | 0;
8277      if ((i25 & i24 | 0) == 0) {
8278       i25 = i18;
8279      } else {
8280       i25 = i18 - i24 + (i25 + i24 & 0 - i22) | 0;
8281      }
8282      i24 = HEAP32[14904 >> 2] | 0;
8283      i26 = i24 + i25 | 0;
8284      if (i25 >>> 0 > i12 >>> 0 & i25 >>> 0 < 2147483647) {
8285       i22 = HEAP32[14912 >> 2] | 0;
8286       if ((i22 | 0) != 0 ? i26 >>> 0 <= i24 >>> 0 | i26 >>> 0 > i22 >>> 0 : 0) {
8287        i25 = 0;
8288        break;
8289       }
8290       i22 = _sbrk(i25 | 0) | 0;
8291       i13 = (i22 | 0) == (i23 | 0);
8292       i24 = i25;
8293       i23 = i13 ? i23 : -1;
8294       i25 = i13 ? i25 : 0;
8295       i13 = 191;
8296      } else {
8297       i25 = 0;
8298      }
8299     } else {
8300      i25 = 0;
8301     }
8302    }
8303   } while (0);
8304   L291 : do {
8305    if ((i13 | 0) == 191) {
8306     i13 = 0 - i24 | 0;
8307     if ((i23 | 0) != (-1 | 0)) {
8308      i17 = i23;
8309      i14 = i25;
8310      i13 = 202;
8311      break L269;
8312     }
8313     do {
8314      if ((i22 | 0) != (-1 | 0) & i24 >>> 0 < 2147483647 & i24 >>> 0 < i20 >>> 0 ? (i19 = HEAP32[14952 >> 2] | 0, i19 = i21 - i24 + i19 & 0 - i19, i19 >>> 0 < 2147483647) : 0) {
8315       if ((_sbrk(i19 | 0) | 0) == (-1 | 0)) {
8316        _sbrk(i13 | 0) | 0;
8317        break L291;
8318       } else {
8319        i24 = i19 + i24 | 0;
8320        break;
8321       }
8322      }
8323     } while (0);
8324     if ((i22 | 0) != (-1 | 0)) {
8325      i17 = i22;
8326      i14 = i24;
8327      i13 = 202;
8328      break L269;
8329     }
8330    }
8331   } while (0);
8332   HEAP32[14916 >> 2] = HEAP32[14916 >> 2] | 4;
8333   i13 = 199;
8334  } else {
8335   i25 = 0;
8336   i13 = 199;
8337  }
8338 } while (0);
8339 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) {
8340  i14 = i14 ? i15 : i25;
8341  i13 = 202;
8342 }
8343 if ((i13 | 0) == 202) {
8344  i15 = (HEAP32[14904 >> 2] | 0) + i14 | 0;
8345  HEAP32[14904 >> 2] = i15;
8346  if (i15 >>> 0 > (HEAP32[14908 >> 2] | 0) >>> 0) {
8347   HEAP32[14908 >> 2] = i15;
8348  }
8349  i15 = HEAP32[14496 >> 2] | 0;
8350  L311 : do {
8351   if ((i15 | 0) != 0) {
8352    i21 = 14920 | 0;
8353    while (1) {
8354     i16 = HEAP32[i21 >> 2] | 0;
8355     i19 = i21 + 4 | 0;
8356     i20 = HEAP32[i19 >> 2] | 0;
8357     if ((i17 | 0) == (i16 + i20 | 0)) {
8358      i13 = 214;
8359      break;
8360     }
8361     i18 = HEAP32[i21 + 8 >> 2] | 0;
8362     if ((i18 | 0) == 0) {
8363      break;
8364     } else {
8365      i21 = i18;
8366     }
8367    }
8368    if (((i13 | 0) == 214 ? (HEAP32[i21 + 12 >> 2] & 8 | 0) == 0 : 0) ? i15 >>> 0 >= i16 >>> 0 & i15 >>> 0 < i17 >>> 0 : 0) {
8369     HEAP32[i19 >> 2] = i20 + i14;
8370     i2 = (HEAP32[14484 >> 2] | 0) + i14 | 0;
8371     i3 = i15 + 8 | 0;
8372     if ((i3 & 7 | 0) == 0) {
8373      i3 = 0;
8374     } else {
8375      i3 = 0 - i3 & 7;
8376     }
8377     i32 = i2 - i3 | 0;
8378     HEAP32[14496 >> 2] = i15 + i3;
8379     HEAP32[14484 >> 2] = i32;
8380     HEAP32[i15 + (i3 + 4) >> 2] = i32 | 1;
8381     HEAP32[i15 + (i2 + 4) >> 2] = 40;
8382     HEAP32[14500 >> 2] = HEAP32[14960 >> 2];
8383     break;
8384    }
8385    if (i17 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8386     HEAP32[14488 >> 2] = i17;
8387    }
8388    i19 = i17 + i14 | 0;
8389    i16 = 14920 | 0;
8390    while (1) {
8391     if ((HEAP32[i16 >> 2] | 0) == (i19 | 0)) {
8392      i13 = 224;
8393      break;
8394     }
8395     i18 = HEAP32[i16 + 8 >> 2] | 0;
8396     if ((i18 | 0) == 0) {
8397      break;
8398     } else {
8399      i16 = i18;
8400     }
8401    }
8402    if ((i13 | 0) == 224 ? (HEAP32[i16 + 12 >> 2] & 8 | 0) == 0 : 0) {
8403     HEAP32[i16 >> 2] = i17;
8404     i6 = i16 + 4 | 0;
8405     HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i14;
8406     i6 = i17 + 8 | 0;
8407     if ((i6 & 7 | 0) == 0) {
8408      i6 = 0;
8409     } else {
8410      i6 = 0 - i6 & 7;
8411     }
8412     i7 = i17 + (i14 + 8) | 0;
8413     if ((i7 & 7 | 0) == 0) {
8414      i13 = 0;
8415     } else {
8416      i13 = 0 - i7 & 7;
8417     }
8418     i15 = i17 + (i13 + i14) | 0;
8419     i8 = i6 + i12 | 0;
8420     i7 = i17 + i8 | 0;
8421     i10 = i15 - (i17 + i6) - i12 | 0;
8422     HEAP32[i17 + (i6 + 4) >> 2] = i12 | 3;
8423     L348 : do {
8424      if ((i15 | 0) != (HEAP32[14496 >> 2] | 0)) {
8425       if ((i15 | 0) == (HEAP32[14492 >> 2] | 0)) {
8426        i32 = (HEAP32[14480 >> 2] | 0) + i10 | 0;
8427        HEAP32[14480 >> 2] = i32;
8428        HEAP32[14492 >> 2] = i7;
8429        HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
8430        HEAP32[i17 + (i32 + i8) >> 2] = i32;
8431        break;
8432       }
8433       i12 = i14 + 4 | 0;
8434       i18 = HEAP32[i17 + (i12 + i13) >> 2] | 0;
8435       if ((i18 & 3 | 0) == 1) {
8436        i11 = i18 & -8;
8437        i16 = i18 >>> 3;
8438        do {
8439         if (!(i18 >>> 0 < 256)) {
8440          i9 = HEAP32[i17 + ((i13 | 24) + i14) >> 2] | 0;
8441          i19 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
8442          do {
8443           if ((i19 | 0) == (i15 | 0)) {
8444            i19 = i13 | 16;
8445            i18 = i17 + (i12 + i19) | 0;
8446            i16 = HEAP32[i18 >> 2] | 0;
8447            if ((i16 | 0) == 0) {
8448             i18 = i17 + (i19 + i14) | 0;
8449             i16 = HEAP32[i18 >> 2] | 0;
8450             if ((i16 | 0) == 0) {
8451              i5 = 0;
8452              break;
8453             }
8454            }
8455            while (1) {
8456             i20 = i16 + 20 | 0;
8457             i19 = HEAP32[i20 >> 2] | 0;
8458             if ((i19 | 0) != 0) {
8459              i16 = i19;
8460              i18 = i20;
8461              continue;
8462             }
8463             i19 = i16 + 16 | 0;
8464             i20 = HEAP32[i19 >> 2] | 0;
8465             if ((i20 | 0) == 0) {
8466              break;
8467             } else {
8468              i16 = i20;
8469              i18 = i19;
8470             }
8471            }
8472            if (i18 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8473             _abort();
8474            } else {
8475             HEAP32[i18 >> 2] = 0;
8476             i5 = i16;
8477             break;
8478            }
8479           } else {
8480            i18 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
8481            if (i18 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8482             _abort();
8483            }
8484            i16 = i18 + 12 | 0;
8485            if ((HEAP32[i16 >> 2] | 0) != (i15 | 0)) {
8486             _abort();
8487            }
8488            i20 = i19 + 8 | 0;
8489            if ((HEAP32[i20 >> 2] | 0) == (i15 | 0)) {
8490             HEAP32[i16 >> 2] = i19;
8491             HEAP32[i20 >> 2] = i18;
8492             i5 = i19;
8493             break;
8494            } else {
8495             _abort();
8496            }
8497           }
8498          } while (0);
8499          if ((i9 | 0) != 0) {
8500           i16 = HEAP32[i17 + (i14 + 28 + i13) >> 2] | 0;
8501           i18 = 14776 + (i16 << 2) | 0;
8502           if ((i15 | 0) == (HEAP32[i18 >> 2] | 0)) {
8503            HEAP32[i18 >> 2] = i5;
8504            if ((i5 | 0) == 0) {
8505             HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i16);
8506             break;
8507            }
8508           } else {
8509            if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8510             _abort();
8511            }
8512            i16 = i9 + 16 | 0;
8513            if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
8514             HEAP32[i16 >> 2] = i5;
8515            } else {
8516             HEAP32[i9 + 20 >> 2] = i5;
8517            }
8518            if ((i5 | 0) == 0) {
8519             break;
8520            }
8521           }
8522           if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8523            _abort();
8524           }
8525           HEAP32[i5 + 24 >> 2] = i9;
8526           i15 = i13 | 16;
8527           i9 = HEAP32[i17 + (i15 + i14) >> 2] | 0;
8528           do {
8529            if ((i9 | 0) != 0) {
8530             if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8531              _abort();
8532             } else {
8533              HEAP32[i5 + 16 >> 2] = i9;
8534              HEAP32[i9 + 24 >> 2] = i5;
8535              break;
8536             }
8537            }
8538           } while (0);
8539           i9 = HEAP32[i17 + (i12 + i15) >> 2] | 0;
8540           if ((i9 | 0) != 0) {
8541            if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8542             _abort();
8543            } else {
8544             HEAP32[i5 + 20 >> 2] = i9;
8545             HEAP32[i9 + 24 >> 2] = i5;
8546             break;
8547            }
8548           }
8549          }
8550         } else {
8551          i5 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
8552          i12 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
8553          i18 = 14512 + (i16 << 1 << 2) | 0;
8554          if ((i5 | 0) != (i18 | 0)) {
8555           if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8556            _abort();
8557           }
8558           if ((HEAP32[i5 + 12 >> 2] | 0) != (i15 | 0)) {
8559            _abort();
8560           }
8561          }
8562          if ((i12 | 0) == (i5 | 0)) {
8563           HEAP32[3618] = HEAP32[3618] & ~(1 << i16);
8564           break;
8565          }
8566          if ((i12 | 0) != (i18 | 0)) {
8567           if (i12 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8568            _abort();
8569           }
8570           i16 = i12 + 8 | 0;
8571           if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
8572            i9 = i16;
8573           } else {
8574            _abort();
8575           }
8576          } else {
8577           i9 = i12 + 8 | 0;
8578          }
8579          HEAP32[i5 + 12 >> 2] = i12;
8580          HEAP32[i9 >> 2] = i5;
8581         }
8582        } while (0);
8583        i15 = i17 + ((i11 | i13) + i14) | 0;
8584        i10 = i11 + i10 | 0;
8585       }
8586       i5 = i15 + 4 | 0;
8587       HEAP32[i5 >> 2] = HEAP32[i5 >> 2] & -2;
8588       HEAP32[i17 + (i8 + 4) >> 2] = i10 | 1;
8589       HEAP32[i17 + (i10 + i8) >> 2] = i10;
8590       i5 = i10 >>> 3;
8591       if (i10 >>> 0 < 256) {
8592        i10 = i5 << 1;
8593        i2 = 14512 + (i10 << 2) | 0;
8594        i9 = HEAP32[3618] | 0;
8595        i5 = 1 << i5;
8596        if ((i9 & i5 | 0) != 0) {
8597         i9 = 14512 + (i10 + 2 << 2) | 0;
8598         i5 = HEAP32[i9 >> 2] | 0;
8599         if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8600          _abort();
8601         } else {
8602          i3 = i9;
8603          i4 = i5;
8604         }
8605        } else {
8606         HEAP32[3618] = i9 | i5;
8607         i3 = 14512 + (i10 + 2 << 2) | 0;
8608         i4 = i2;
8609        }
8610        HEAP32[i3 >> 2] = i7;
8611        HEAP32[i4 + 12 >> 2] = i7;
8612        HEAP32[i17 + (i8 + 8) >> 2] = i4;
8613        HEAP32[i17 + (i8 + 12) >> 2] = i2;
8614        break;
8615       }
8616       i3 = i10 >>> 8;
8617       if ((i3 | 0) != 0) {
8618        if (i10 >>> 0 > 16777215) {
8619         i3 = 31;
8620        } else {
8621         i31 = (i3 + 1048320 | 0) >>> 16 & 8;
8622         i32 = i3 << i31;
8623         i30 = (i32 + 520192 | 0) >>> 16 & 4;
8624         i32 = i32 << i30;
8625         i3 = (i32 + 245760 | 0) >>> 16 & 2;
8626         i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
8627         i3 = i10 >>> (i3 + 7 | 0) & 1 | i3 << 1;
8628        }
8629       } else {
8630        i3 = 0;
8631       }
8632       i4 = 14776 + (i3 << 2) | 0;
8633       HEAP32[i17 + (i8 + 28) >> 2] = i3;
8634       HEAP32[i17 + (i8 + 20) >> 2] = 0;
8635       HEAP32[i17 + (i8 + 16) >> 2] = 0;
8636       i9 = HEAP32[14476 >> 2] | 0;
8637       i5 = 1 << i3;
8638       if ((i9 & i5 | 0) == 0) {
8639        HEAP32[14476 >> 2] = i9 | i5;
8640        HEAP32[i4 >> 2] = i7;
8641        HEAP32[i17 + (i8 + 24) >> 2] = i4;
8642        HEAP32[i17 + (i8 + 12) >> 2] = i7;
8643        HEAP32[i17 + (i8 + 8) >> 2] = i7;
8644        break;
8645       }
8646       i4 = HEAP32[i4 >> 2] | 0;
8647       if ((i3 | 0) == 31) {
8648        i3 = 0;
8649       } else {
8650        i3 = 25 - (i3 >>> 1) | 0;
8651       }
8652       L444 : do {
8653        if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i10 | 0)) {
8654         i3 = i10 << i3;
8655         while (1) {
8656          i5 = i4 + (i3 >>> 31 << 2) + 16 | 0;
8657          i9 = HEAP32[i5 >> 2] | 0;
8658          if ((i9 | 0) == 0) {
8659           break;
8660          }
8661          if ((HEAP32[i9 + 4 >> 2] & -8 | 0) == (i10 | 0)) {
8662           i2 = i9;
8663           break L444;
8664          } else {
8665           i3 = i3 << 1;
8666           i4 = i9;
8667          }
8668         }
8669         if (i5 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8670          _abort();
8671         } else {
8672          HEAP32[i5 >> 2] = i7;
8673          HEAP32[i17 + (i8 + 24) >> 2] = i4;
8674          HEAP32[i17 + (i8 + 12) >> 2] = i7;
8675          HEAP32[i17 + (i8 + 8) >> 2] = i7;
8676          break L348;
8677         }
8678        } else {
8679         i2 = i4;
8680        }
8681       } while (0);
8682       i4 = i2 + 8 | 0;
8683       i3 = HEAP32[i4 >> 2] | 0;
8684       i5 = HEAP32[14488 >> 2] | 0;
8685       if (i2 >>> 0 < i5 >>> 0) {
8686        _abort();
8687       }
8688       if (i3 >>> 0 < i5 >>> 0) {
8689        _abort();
8690       } else {
8691        HEAP32[i3 + 12 >> 2] = i7;
8692        HEAP32[i4 >> 2] = i7;
8693        HEAP32[i17 + (i8 + 8) >> 2] = i3;
8694        HEAP32[i17 + (i8 + 12) >> 2] = i2;
8695        HEAP32[i17 + (i8 + 24) >> 2] = 0;
8696        break;
8697       }
8698      } else {
8699       i32 = (HEAP32[14484 >> 2] | 0) + i10 | 0;
8700       HEAP32[14484 >> 2] = i32;
8701       HEAP32[14496 >> 2] = i7;
8702       HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
8703      }
8704     } while (0);
8705     i32 = i17 + (i6 | 8) | 0;
8706     STACKTOP = i1;
8707     return i32 | 0;
8708    }
8709    i3 = 14920 | 0;
8710    while (1) {
8711     i2 = HEAP32[i3 >> 2] | 0;
8712     if (!(i2 >>> 0 > i15 >>> 0) ? (i11 = HEAP32[i3 + 4 >> 2] | 0, i10 = i2 + i11 | 0, i10 >>> 0 > i15 >>> 0) : 0) {
8713      break;
8714     }
8715     i3 = HEAP32[i3 + 8 >> 2] | 0;
8716    }
8717    i3 = i2 + (i11 + -39) | 0;
8718    if ((i3 & 7 | 0) == 0) {
8719     i3 = 0;
8720    } else {
8721     i3 = 0 - i3 & 7;
8722    }
8723    i2 = i2 + (i11 + -47 + i3) | 0;
8724    i2 = i2 >>> 0 < (i15 + 16 | 0) >>> 0 ? i15 : i2;
8725    i3 = i2 + 8 | 0;
8726    i4 = i17 + 8 | 0;
8727    if ((i4 & 7 | 0) == 0) {
8728     i4 = 0;
8729    } else {
8730     i4 = 0 - i4 & 7;
8731    }
8732    i32 = i14 + -40 - i4 | 0;
8733    HEAP32[14496 >> 2] = i17 + i4;
8734    HEAP32[14484 >> 2] = i32;
8735    HEAP32[i17 + (i4 + 4) >> 2] = i32 | 1;
8736    HEAP32[i17 + (i14 + -36) >> 2] = 40;
8737    HEAP32[14500 >> 2] = HEAP32[14960 >> 2];
8738    HEAP32[i2 + 4 >> 2] = 27;
8739    HEAP32[i3 + 0 >> 2] = HEAP32[14920 >> 2];
8740    HEAP32[i3 + 4 >> 2] = HEAP32[14924 >> 2];
8741    HEAP32[i3 + 8 >> 2] = HEAP32[14928 >> 2];
8742    HEAP32[i3 + 12 >> 2] = HEAP32[14932 >> 2];
8743    HEAP32[14920 >> 2] = i17;
8744    HEAP32[14924 >> 2] = i14;
8745    HEAP32[14932 >> 2] = 0;
8746    HEAP32[14928 >> 2] = i3;
8747    i4 = i2 + 28 | 0;
8748    HEAP32[i4 >> 2] = 7;
8749    if ((i2 + 32 | 0) >>> 0 < i10 >>> 0) {
8750     while (1) {
8751      i3 = i4 + 4 | 0;
8752      HEAP32[i3 >> 2] = 7;
8753      if ((i4 + 8 | 0) >>> 0 < i10 >>> 0) {
8754       i4 = i3;
8755      } else {
8756       break;
8757      }
8758     }
8759    }
8760    if ((i2 | 0) != (i15 | 0)) {
8761     i2 = i2 - i15 | 0;
8762     i3 = i15 + (i2 + 4) | 0;
8763     HEAP32[i3 >> 2] = HEAP32[i3 >> 2] & -2;
8764     HEAP32[i15 + 4 >> 2] = i2 | 1;
8765     HEAP32[i15 + i2 >> 2] = i2;
8766     i3 = i2 >>> 3;
8767     if (i2 >>> 0 < 256) {
8768      i4 = i3 << 1;
8769      i2 = 14512 + (i4 << 2) | 0;
8770      i5 = HEAP32[3618] | 0;
8771      i3 = 1 << i3;
8772      if ((i5 & i3 | 0) != 0) {
8773       i4 = 14512 + (i4 + 2 << 2) | 0;
8774       i3 = HEAP32[i4 >> 2] | 0;
8775       if (i3 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8776        _abort();
8777       } else {
8778        i7 = i4;
8779        i8 = i3;
8780       }
8781      } else {
8782       HEAP32[3618] = i5 | i3;
8783       i7 = 14512 + (i4 + 2 << 2) | 0;
8784       i8 = i2;
8785      }
8786      HEAP32[i7 >> 2] = i15;
8787      HEAP32[i8 + 12 >> 2] = i15;
8788      HEAP32[i15 + 8 >> 2] = i8;
8789      HEAP32[i15 + 12 >> 2] = i2;
8790      break;
8791     }
8792     i3 = i2 >>> 8;
8793     if ((i3 | 0) != 0) {
8794      if (i2 >>> 0 > 16777215) {
8795       i3 = 31;
8796      } else {
8797       i31 = (i3 + 1048320 | 0) >>> 16 & 8;
8798       i32 = i3 << i31;
8799       i30 = (i32 + 520192 | 0) >>> 16 & 4;
8800       i32 = i32 << i30;
8801       i3 = (i32 + 245760 | 0) >>> 16 & 2;
8802       i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
8803       i3 = i2 >>> (i3 + 7 | 0) & 1 | i3 << 1;
8804      }
8805     } else {
8806      i3 = 0;
8807     }
8808     i7 = 14776 + (i3 << 2) | 0;
8809     HEAP32[i15 + 28 >> 2] = i3;
8810     HEAP32[i15 + 20 >> 2] = 0;
8811     HEAP32[i15 + 16 >> 2] = 0;
8812     i4 = HEAP32[14476 >> 2] | 0;
8813     i5 = 1 << i3;
8814     if ((i4 & i5 | 0) == 0) {
8815      HEAP32[14476 >> 2] = i4 | i5;
8816      HEAP32[i7 >> 2] = i15;
8817      HEAP32[i15 + 24 >> 2] = i7;
8818      HEAP32[i15 + 12 >> 2] = i15;
8819      HEAP32[i15 + 8 >> 2] = i15;
8820      break;
8821     }
8822     i4 = HEAP32[i7 >> 2] | 0;
8823     if ((i3 | 0) == 31) {
8824      i3 = 0;
8825     } else {
8826      i3 = 25 - (i3 >>> 1) | 0;
8827     }
8828     L499 : do {
8829      if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i2 | 0)) {
8830       i3 = i2 << i3;
8831       while (1) {
8832        i7 = i4 + (i3 >>> 31 << 2) + 16 | 0;
8833        i5 = HEAP32[i7 >> 2] | 0;
8834        if ((i5 | 0) == 0) {
8835         break;
8836        }
8837        if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i2 | 0)) {
8838         i6 = i5;
8839         break L499;
8840        } else {
8841         i3 = i3 << 1;
8842         i4 = i5;
8843        }
8844       }
8845       if (i7 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
8846        _abort();
8847       } else {
8848        HEAP32[i7 >> 2] = i15;
8849        HEAP32[i15 + 24 >> 2] = i4;
8850        HEAP32[i15 + 12 >> 2] = i15;
8851        HEAP32[i15 + 8 >> 2] = i15;
8852        break L311;
8853       }
8854      } else {
8855       i6 = i4;
8856      }
8857     } while (0);
8858     i4 = i6 + 8 | 0;
8859     i3 = HEAP32[i4 >> 2] | 0;
8860     i2 = HEAP32[14488 >> 2] | 0;
8861     if (i6 >>> 0 < i2 >>> 0) {
8862      _abort();
8863     }
8864     if (i3 >>> 0 < i2 >>> 0) {
8865      _abort();
8866     } else {
8867      HEAP32[i3 + 12 >> 2] = i15;
8868      HEAP32[i4 >> 2] = i15;
8869      HEAP32[i15 + 8 >> 2] = i3;
8870      HEAP32[i15 + 12 >> 2] = i6;
8871      HEAP32[i15 + 24 >> 2] = 0;
8872      break;
8873     }
8874    }
8875   } else {
8876    i32 = HEAP32[14488 >> 2] | 0;
8877    if ((i32 | 0) == 0 | i17 >>> 0 < i32 >>> 0) {
8878     HEAP32[14488 >> 2] = i17;
8879    }
8880    HEAP32[14920 >> 2] = i17;
8881    HEAP32[14924 >> 2] = i14;
8882    HEAP32[14932 >> 2] = 0;
8883    HEAP32[14508 >> 2] = HEAP32[3736];
8884    HEAP32[14504 >> 2] = -1;
8885    i2 = 0;
8886    do {
8887     i32 = i2 << 1;
8888     i31 = 14512 + (i32 << 2) | 0;
8889     HEAP32[14512 + (i32 + 3 << 2) >> 2] = i31;
8890     HEAP32[14512 + (i32 + 2 << 2) >> 2] = i31;
8891     i2 = i2 + 1 | 0;
8892    } while ((i2 | 0) != 32);
8893    i2 = i17 + 8 | 0;
8894    if ((i2 & 7 | 0) == 0) {
8895     i2 = 0;
8896    } else {
8897     i2 = 0 - i2 & 7;
8898    }
8899    i32 = i14 + -40 - i2 | 0;
8900    HEAP32[14496 >> 2] = i17 + i2;
8901    HEAP32[14484 >> 2] = i32;
8902    HEAP32[i17 + (i2 + 4) >> 2] = i32 | 1;
8903    HEAP32[i17 + (i14 + -36) >> 2] = 40;
8904    HEAP32[14500 >> 2] = HEAP32[14960 >> 2];
8905   }
8906  } while (0);
8907  i2 = HEAP32[14484 >> 2] | 0;
8908  if (i2 >>> 0 > i12 >>> 0) {
8909   i31 = i2 - i12 | 0;
8910   HEAP32[14484 >> 2] = i31;
8911   i32 = HEAP32[14496 >> 2] | 0;
8912   HEAP32[14496 >> 2] = i32 + i12;
8913   HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
8914   HEAP32[i32 + 4 >> 2] = i12 | 3;
8915   i32 = i32 + 8 | 0;
8916   STACKTOP = i1;
8917   return i32 | 0;
8918  }
8919 }
8920 HEAP32[(___errno_location() | 0) >> 2] = 12;
8921 i32 = 0;
8922 STACKTOP = i1;
8923 return i32 | 0;
8924}
8925function _deflate(i2, i10) {
8926 i2 = i2 | 0;
8927 i10 = i10 | 0;
8928 var i1 = 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, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0;
8929 i1 = STACKTOP;
8930 if ((i2 | 0) == 0) {
8931  i37 = -2;
8932  STACKTOP = i1;
8933  return i37 | 0;
8934 }
8935 i5 = i2 + 28 | 0;
8936 i7 = HEAP32[i5 >> 2] | 0;
8937 if ((i7 | 0) == 0 | i10 >>> 0 > 5) {
8938  i37 = -2;
8939  STACKTOP = i1;
8940  return i37 | 0;
8941 }
8942 i4 = i2 + 12 | 0;
8943 do {
8944  if ((HEAP32[i4 >> 2] | 0) != 0) {
8945   if ((HEAP32[i2 >> 2] | 0) == 0 ? (HEAP32[i2 + 4 >> 2] | 0) != 0 : 0) {
8946    break;
8947   }
8948   i11 = i7 + 4 | 0;
8949   i29 = HEAP32[i11 >> 2] | 0;
8950   i9 = (i10 | 0) == 4;
8951   if ((i29 | 0) != 666 | i9) {
8952    i3 = i2 + 16 | 0;
8953    if ((HEAP32[i3 >> 2] | 0) == 0) {
8954     HEAP32[i2 + 24 >> 2] = HEAP32[3180 >> 2];
8955     i37 = -5;
8956     STACKTOP = i1;
8957     return i37 | 0;
8958    }
8959    HEAP32[i7 >> 2] = i2;
8960    i8 = i7 + 40 | 0;
8961    i18 = HEAP32[i8 >> 2] | 0;
8962    HEAP32[i8 >> 2] = i10;
8963    do {
8964     if ((i29 | 0) == 42) {
8965      if ((HEAP32[i7 + 24 >> 2] | 0) != 2) {
8966       i17 = (HEAP32[i7 + 48 >> 2] << 12) + -30720 | 0;
8967       if ((HEAP32[i7 + 136 >> 2] | 0) <= 1 ? (i28 = HEAP32[i7 + 132 >> 2] | 0, (i28 | 0) >= 2) : 0) {
8968        if ((i28 | 0) < 6) {
8969         i28 = 64;
8970        } else {
8971         i28 = (i28 | 0) == 6 ? 128 : 192;
8972        }
8973       } else {
8974        i28 = 0;
8975       }
8976       i28 = i28 | i17;
8977       i17 = i7 + 108 | 0;
8978       i37 = (HEAP32[i17 >> 2] | 0) == 0 ? i28 : i28 | 32;
8979       HEAP32[i11 >> 2] = 113;
8980       i29 = i7 + 20 | 0;
8981       i30 = HEAP32[i29 >> 2] | 0;
8982       HEAP32[i29 >> 2] = i30 + 1;
8983       i28 = i7 + 8 | 0;
8984       HEAP8[(HEAP32[i28 >> 2] | 0) + i30 | 0] = i37 >>> 8;
8985       i30 = HEAP32[i29 >> 2] | 0;
8986       HEAP32[i29 >> 2] = i30 + 1;
8987       HEAP8[(HEAP32[i28 >> 2] | 0) + i30 | 0] = (i37 | ((i37 >>> 0) % 31 | 0)) ^ 31;
8988       i30 = i2 + 48 | 0;
8989       if ((HEAP32[i17 >> 2] | 0) != 0) {
8990        i37 = HEAP32[i30 >> 2] | 0;
8991        i36 = HEAP32[i29 >> 2] | 0;
8992        HEAP32[i29 >> 2] = i36 + 1;
8993        HEAP8[(HEAP32[i28 >> 2] | 0) + i36 | 0] = i37 >>> 24;
8994        i36 = HEAP32[i29 >> 2] | 0;
8995        HEAP32[i29 >> 2] = i36 + 1;
8996        HEAP8[(HEAP32[i28 >> 2] | 0) + i36 | 0] = i37 >>> 16;
8997        i36 = HEAP32[i30 >> 2] | 0;
8998        i37 = HEAP32[i29 >> 2] | 0;
8999        HEAP32[i29 >> 2] = i37 + 1;
9000        HEAP8[(HEAP32[i28 >> 2] | 0) + i37 | 0] = i36 >>> 8;
9001        i37 = HEAP32[i29 >> 2] | 0;
9002        HEAP32[i29 >> 2] = i37 + 1;
9003        HEAP8[(HEAP32[i28 >> 2] | 0) + i37 | 0] = i36;
9004       }
9005       HEAP32[i30 >> 2] = _adler32(0, 0, 0) | 0;
9006       i31 = HEAP32[i11 >> 2] | 0;
9007       i17 = 32;
9008       break;
9009      }
9010      i32 = i2 + 48 | 0;
9011      HEAP32[i32 >> 2] = _crc32(0, 0, 0) | 0;
9012      i30 = i7 + 20 | 0;
9013      i28 = HEAP32[i30 >> 2] | 0;
9014      HEAP32[i30 >> 2] = i28 + 1;
9015      i29 = i7 + 8 | 0;
9016      HEAP8[(HEAP32[i29 >> 2] | 0) + i28 | 0] = 31;
9017      i28 = HEAP32[i30 >> 2] | 0;
9018      HEAP32[i30 >> 2] = i28 + 1;
9019      HEAP8[(HEAP32[i29 >> 2] | 0) + i28 | 0] = -117;
9020      i28 = HEAP32[i30 >> 2] | 0;
9021      HEAP32[i30 >> 2] = i28 + 1;
9022      HEAP8[(HEAP32[i29 >> 2] | 0) + i28 | 0] = 8;
9023      i28 = i7 + 28 | 0;
9024      i33 = HEAP32[i28 >> 2] | 0;
9025      if ((i33 | 0) == 0) {
9026       i22 = HEAP32[i30 >> 2] | 0;
9027       HEAP32[i30 >> 2] = i22 + 1;
9028       HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9029       i22 = HEAP32[i30 >> 2] | 0;
9030       HEAP32[i30 >> 2] = i22 + 1;
9031       HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9032       i22 = HEAP32[i30 >> 2] | 0;
9033       HEAP32[i30 >> 2] = i22 + 1;
9034       HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9035       i22 = HEAP32[i30 >> 2] | 0;
9036       HEAP32[i30 >> 2] = i22 + 1;
9037       HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9038       i22 = HEAP32[i30 >> 2] | 0;
9039       HEAP32[i30 >> 2] = i22 + 1;
9040       HEAP8[(HEAP32[i29 >> 2] | 0) + i22 | 0] = 0;
9041       i22 = HEAP32[i7 + 132 >> 2] | 0;
9042       if ((i22 | 0) != 9) {
9043        if ((HEAP32[i7 + 136 >> 2] | 0) > 1) {
9044         i22 = 4;
9045        } else {
9046         i22 = (i22 | 0) < 2 ? 4 : 0;
9047        }
9048       } else {
9049        i22 = 2;
9050       }
9051       i37 = HEAP32[i30 >> 2] | 0;
9052       HEAP32[i30 >> 2] = i37 + 1;
9053       HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i22;
9054       i37 = HEAP32[i30 >> 2] | 0;
9055       HEAP32[i30 >> 2] = i37 + 1;
9056       HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = 3;
9057       HEAP32[i11 >> 2] = 113;
9058       break;
9059      }
9060      i37 = (((HEAP32[i33 + 44 >> 2] | 0) != 0 ? 2 : 0) | (HEAP32[i33 >> 2] | 0) != 0 | ((HEAP32[i33 + 16 >> 2] | 0) == 0 ? 0 : 4) | ((HEAP32[i33 + 28 >> 2] | 0) == 0 ? 0 : 8) | ((HEAP32[i33 + 36 >> 2] | 0) == 0 ? 0 : 16)) & 255;
9061      i17 = HEAP32[i30 >> 2] | 0;
9062      HEAP32[i30 >> 2] = i17 + 1;
9063      HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9064      i17 = HEAP32[(HEAP32[i28 >> 2] | 0) + 4 >> 2] & 255;
9065      i37 = HEAP32[i30 >> 2] | 0;
9066      HEAP32[i30 >> 2] = i37 + 1;
9067      HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i17;
9068      i37 = (HEAP32[(HEAP32[i28 >> 2] | 0) + 4 >> 2] | 0) >>> 8 & 255;
9069      i17 = HEAP32[i30 >> 2] | 0;
9070      HEAP32[i30 >> 2] = i17 + 1;
9071      HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9072      i17 = (HEAP32[(HEAP32[i28 >> 2] | 0) + 4 >> 2] | 0) >>> 16 & 255;
9073      i37 = HEAP32[i30 >> 2] | 0;
9074      HEAP32[i30 >> 2] = i37 + 1;
9075      HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i17;
9076      i37 = (HEAP32[(HEAP32[i28 >> 2] | 0) + 4 >> 2] | 0) >>> 24 & 255;
9077      i17 = HEAP32[i30 >> 2] | 0;
9078      HEAP32[i30 >> 2] = i17 + 1;
9079      HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9080      i17 = HEAP32[i7 + 132 >> 2] | 0;
9081      if ((i17 | 0) != 9) {
9082       if ((HEAP32[i7 + 136 >> 2] | 0) > 1) {
9083        i17 = 4;
9084       } else {
9085        i17 = (i17 | 0) < 2 ? 4 : 0;
9086       }
9087      } else {
9088       i17 = 2;
9089      }
9090      i37 = HEAP32[i30 >> 2] | 0;
9091      HEAP32[i30 >> 2] = i37 + 1;
9092      HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i17;
9093      i37 = HEAP32[(HEAP32[i28 >> 2] | 0) + 12 >> 2] & 255;
9094      i17 = HEAP32[i30 >> 2] | 0;
9095      HEAP32[i30 >> 2] = i17 + 1;
9096      HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9097      i17 = HEAP32[i28 >> 2] | 0;
9098      if ((HEAP32[i17 + 16 >> 2] | 0) != 0) {
9099       i17 = HEAP32[i17 + 20 >> 2] & 255;
9100       i37 = HEAP32[i30 >> 2] | 0;
9101       HEAP32[i30 >> 2] = i37 + 1;
9102       HEAP8[(HEAP32[i29 >> 2] | 0) + i37 | 0] = i17;
9103       i37 = (HEAP32[(HEAP32[i28 >> 2] | 0) + 20 >> 2] | 0) >>> 8 & 255;
9104       i17 = HEAP32[i30 >> 2] | 0;
9105       HEAP32[i30 >> 2] = i17 + 1;
9106       HEAP8[(HEAP32[i29 >> 2] | 0) + i17 | 0] = i37;
9107       i17 = HEAP32[i28 >> 2] | 0;
9108      }
9109      if ((HEAP32[i17 + 44 >> 2] | 0) != 0) {
9110       HEAP32[i32 >> 2] = _crc32(HEAP32[i32 >> 2] | 0, HEAP32[i29 >> 2] | 0, HEAP32[i30 >> 2] | 0) | 0;
9111      }
9112      HEAP32[i7 + 32 >> 2] = 0;
9113      HEAP32[i11 >> 2] = 69;
9114      i17 = 34;
9115     } else {
9116      i31 = i29;
9117      i17 = 32;
9118     }
9119    } while (0);
9120    if ((i17 | 0) == 32) {
9121     if ((i31 | 0) == 69) {
9122      i28 = i7 + 28 | 0;
9123      i17 = 34;
9124     } else {
9125      i17 = 55;
9126     }
9127    }
9128    do {
9129     if ((i17 | 0) == 34) {
9130      i37 = HEAP32[i28 >> 2] | 0;
9131      if ((HEAP32[i37 + 16 >> 2] | 0) == 0) {
9132       HEAP32[i11 >> 2] = 73;
9133       i17 = 57;
9134       break;
9135      }
9136      i29 = i7 + 20 | 0;
9137      i34 = HEAP32[i29 >> 2] | 0;
9138      i17 = i7 + 32 | 0;
9139      i36 = HEAP32[i17 >> 2] | 0;
9140      L55 : do {
9141       if (i36 >>> 0 < (HEAP32[i37 + 20 >> 2] & 65535) >>> 0) {
9142        i30 = i7 + 12 | 0;
9143        i32 = i2 + 48 | 0;
9144        i31 = i7 + 8 | 0;
9145        i33 = i2 + 20 | 0;
9146        i35 = i34;
9147        while (1) {
9148         if ((i35 | 0) == (HEAP32[i30 >> 2] | 0)) {
9149          if ((HEAP32[i37 + 44 >> 2] | 0) != 0 & i35 >>> 0 > i34 >>> 0) {
9150           HEAP32[i32 >> 2] = _crc32(HEAP32[i32 >> 2] | 0, (HEAP32[i31 >> 2] | 0) + i34 | 0, i35 - i34 | 0) | 0;
9151          }
9152          i34 = HEAP32[i5 >> 2] | 0;
9153          i35 = HEAP32[i34 + 20 >> 2] | 0;
9154          i36 = HEAP32[i3 >> 2] | 0;
9155          i35 = i35 >>> 0 > i36 >>> 0 ? i36 : i35;
9156          if ((i35 | 0) != 0 ? (_memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i34 + 16 >> 2] | 0, i35 | 0) | 0, HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i35, i27 = (HEAP32[i5 >> 2] | 0) + 16 | 0, HEAP32[i27 >> 2] = (HEAP32[i27 >> 2] | 0) + i35, HEAP32[i33 >> 2] = (HEAP32[i33 >> 2] | 0) + i35, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i35, i27 = HEAP32[i5 >> 2] | 0, i36 = i27 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i35, (i37 | 0) == (i35 | 0)) : 0) {
9157           HEAP32[i27 + 16 >> 2] = HEAP32[i27 + 8 >> 2];
9158          }
9159          i34 = HEAP32[i29 >> 2] | 0;
9160          if ((i34 | 0) == (HEAP32[i30 >> 2] | 0)) {
9161           break;
9162          }
9163          i37 = HEAP32[i28 >> 2] | 0;
9164          i36 = HEAP32[i17 >> 2] | 0;
9165          i35 = i34;
9166         }
9167         i36 = HEAP8[(HEAP32[i37 + 16 >> 2] | 0) + i36 | 0] | 0;
9168         HEAP32[i29 >> 2] = i35 + 1;
9169         HEAP8[(HEAP32[i31 >> 2] | 0) + i35 | 0] = i36;
9170         i36 = (HEAP32[i17 >> 2] | 0) + 1 | 0;
9171         HEAP32[i17 >> 2] = i36;
9172         i37 = HEAP32[i28 >> 2] | 0;
9173         if (!(i36 >>> 0 < (HEAP32[i37 + 20 >> 2] & 65535) >>> 0)) {
9174          break L55;
9175         }
9176         i35 = HEAP32[i29 >> 2] | 0;
9177        }
9178        i37 = HEAP32[i28 >> 2] | 0;
9179       }
9180      } while (0);
9181      if ((HEAP32[i37 + 44 >> 2] | 0) != 0 ? (i26 = HEAP32[i29 >> 2] | 0, i26 >>> 0 > i34 >>> 0) : 0) {
9182       i37 = i2 + 48 | 0;
9183       HEAP32[i37 >> 2] = _crc32(HEAP32[i37 >> 2] | 0, (HEAP32[i7 + 8 >> 2] | 0) + i34 | 0, i26 - i34 | 0) | 0;
9184       i37 = HEAP32[i28 >> 2] | 0;
9185      }
9186      if ((HEAP32[i17 >> 2] | 0) == (HEAP32[i37 + 20 >> 2] | 0)) {
9187       HEAP32[i17 >> 2] = 0;
9188       HEAP32[i11 >> 2] = 73;
9189       i17 = 57;
9190       break;
9191      } else {
9192       i31 = HEAP32[i11 >> 2] | 0;
9193       i17 = 55;
9194       break;
9195      }
9196     }
9197    } while (0);
9198    if ((i17 | 0) == 55) {
9199     if ((i31 | 0) == 73) {
9200      i37 = HEAP32[i7 + 28 >> 2] | 0;
9201      i17 = 57;
9202     } else {
9203      i17 = 76;
9204     }
9205    }
9206    do {
9207     if ((i17 | 0) == 57) {
9208      i26 = i7 + 28 | 0;
9209      if ((HEAP32[i37 + 28 >> 2] | 0) == 0) {
9210       HEAP32[i11 >> 2] = 91;
9211       i17 = 78;
9212       break;
9213      }
9214      i27 = i7 + 20 | 0;
9215      i35 = HEAP32[i27 >> 2] | 0;
9216      i32 = i7 + 12 | 0;
9217      i29 = i2 + 48 | 0;
9218      i28 = i7 + 8 | 0;
9219      i31 = i2 + 20 | 0;
9220      i30 = i7 + 32 | 0;
9221      i33 = i35;
9222      while (1) {
9223       if ((i33 | 0) == (HEAP32[i32 >> 2] | 0)) {
9224        if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) != 0 & i33 >>> 0 > i35 >>> 0) {
9225         HEAP32[i29 >> 2] = _crc32(HEAP32[i29 >> 2] | 0, (HEAP32[i28 >> 2] | 0) + i35 | 0, i33 - i35 | 0) | 0;
9226        }
9227        i33 = HEAP32[i5 >> 2] | 0;
9228        i34 = HEAP32[i33 + 20 >> 2] | 0;
9229        i35 = HEAP32[i3 >> 2] | 0;
9230        i34 = i34 >>> 0 > i35 >>> 0 ? i35 : i34;
9231        if ((i34 | 0) != 0 ? (_memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i33 + 16 >> 2] | 0, i34 | 0) | 0, HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i34, i25 = (HEAP32[i5 >> 2] | 0) + 16 | 0, HEAP32[i25 >> 2] = (HEAP32[i25 >> 2] | 0) + i34, HEAP32[i31 >> 2] = (HEAP32[i31 >> 2] | 0) + i34, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i34, i25 = HEAP32[i5 >> 2] | 0, i36 = i25 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i34, (i37 | 0) == (i34 | 0)) : 0) {
9232         HEAP32[i25 + 16 >> 2] = HEAP32[i25 + 8 >> 2];
9233        }
9234        i35 = HEAP32[i27 >> 2] | 0;
9235        if ((i35 | 0) == (HEAP32[i32 >> 2] | 0)) {
9236         i25 = 1;
9237         break;
9238        } else {
9239         i33 = i35;
9240        }
9241       }
9242       i34 = HEAP32[i30 >> 2] | 0;
9243       HEAP32[i30 >> 2] = i34 + 1;
9244       i34 = HEAP8[(HEAP32[(HEAP32[i26 >> 2] | 0) + 28 >> 2] | 0) + i34 | 0] | 0;
9245       HEAP32[i27 >> 2] = i33 + 1;
9246       HEAP8[(HEAP32[i28 >> 2] | 0) + i33 | 0] = i34;
9247       if (i34 << 24 >> 24 == 0) {
9248        i17 = 68;
9249        break;
9250       }
9251       i33 = HEAP32[i27 >> 2] | 0;
9252      }
9253      if ((i17 | 0) == 68) {
9254       i25 = i34 & 255;
9255      }
9256      if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) != 0 ? (i24 = HEAP32[i27 >> 2] | 0, i24 >>> 0 > i35 >>> 0) : 0) {
9257       HEAP32[i29 >> 2] = _crc32(HEAP32[i29 >> 2] | 0, (HEAP32[i28 >> 2] | 0) + i35 | 0, i24 - i35 | 0) | 0;
9258      }
9259      if ((i25 | 0) == 0) {
9260       HEAP32[i30 >> 2] = 0;
9261       HEAP32[i11 >> 2] = 91;
9262       i17 = 78;
9263       break;
9264      } else {
9265       i31 = HEAP32[i11 >> 2] | 0;
9266       i17 = 76;
9267       break;
9268      }
9269     }
9270    } while (0);
9271    if ((i17 | 0) == 76) {
9272     if ((i31 | 0) == 91) {
9273      i26 = i7 + 28 | 0;
9274      i17 = 78;
9275     } else {
9276      i17 = 97;
9277     }
9278    }
9279    do {
9280     if ((i17 | 0) == 78) {
9281      if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 36 >> 2] | 0) == 0) {
9282       HEAP32[i11 >> 2] = 103;
9283       i17 = 99;
9284       break;
9285      }
9286      i24 = i7 + 20 | 0;
9287      i32 = HEAP32[i24 >> 2] | 0;
9288      i29 = i7 + 12 | 0;
9289      i27 = i2 + 48 | 0;
9290      i25 = i7 + 8 | 0;
9291      i28 = i2 + 20 | 0;
9292      i30 = i7 + 32 | 0;
9293      i31 = i32;
9294      while (1) {
9295       if ((i31 | 0) == (HEAP32[i29 >> 2] | 0)) {
9296        if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) != 0 & i31 >>> 0 > i32 >>> 0) {
9297         HEAP32[i27 >> 2] = _crc32(HEAP32[i27 >> 2] | 0, (HEAP32[i25 >> 2] | 0) + i32 | 0, i31 - i32 | 0) | 0;
9298        }
9299        i31 = HEAP32[i5 >> 2] | 0;
9300        i33 = HEAP32[i31 + 20 >> 2] | 0;
9301        i32 = HEAP32[i3 >> 2] | 0;
9302        i32 = i33 >>> 0 > i32 >>> 0 ? i32 : i33;
9303        if ((i32 | 0) != 0 ? (_memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i31 + 16 >> 2] | 0, i32 | 0) | 0, HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i32, i23 = (HEAP32[i5 >> 2] | 0) + 16 | 0, HEAP32[i23 >> 2] = (HEAP32[i23 >> 2] | 0) + i32, HEAP32[i28 >> 2] = (HEAP32[i28 >> 2] | 0) + i32, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i32, i23 = HEAP32[i5 >> 2] | 0, i36 = i23 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i32, (i37 | 0) == (i32 | 0)) : 0) {
9304         HEAP32[i23 + 16 >> 2] = HEAP32[i23 + 8 >> 2];
9305        }
9306        i32 = HEAP32[i24 >> 2] | 0;
9307        if ((i32 | 0) == (HEAP32[i29 >> 2] | 0)) {
9308         i23 = 1;
9309         break;
9310        } else {
9311         i31 = i32;
9312        }
9313       }
9314       i33 = HEAP32[i30 >> 2] | 0;
9315       HEAP32[i30 >> 2] = i33 + 1;
9316       i33 = HEAP8[(HEAP32[(HEAP32[i26 >> 2] | 0) + 36 >> 2] | 0) + i33 | 0] | 0;
9317       HEAP32[i24 >> 2] = i31 + 1;
9318       HEAP8[(HEAP32[i25 >> 2] | 0) + i31 | 0] = i33;
9319       if (i33 << 24 >> 24 == 0) {
9320        i17 = 89;
9321        break;
9322       }
9323       i31 = HEAP32[i24 >> 2] | 0;
9324      }
9325      if ((i17 | 0) == 89) {
9326       i23 = i33 & 255;
9327      }
9328      if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) != 0 ? (i22 = HEAP32[i24 >> 2] | 0, i22 >>> 0 > i32 >>> 0) : 0) {
9329       HEAP32[i27 >> 2] = _crc32(HEAP32[i27 >> 2] | 0, (HEAP32[i25 >> 2] | 0) + i32 | 0, i22 - i32 | 0) | 0;
9330      }
9331      if ((i23 | 0) == 0) {
9332       HEAP32[i11 >> 2] = 103;
9333       i17 = 99;
9334       break;
9335      } else {
9336       i31 = HEAP32[i11 >> 2] | 0;
9337       i17 = 97;
9338       break;
9339      }
9340     }
9341    } while (0);
9342    if ((i17 | 0) == 97 ? (i31 | 0) == 103 : 0) {
9343     i26 = i7 + 28 | 0;
9344     i17 = 99;
9345    }
9346    do {
9347     if ((i17 | 0) == 99) {
9348      if ((HEAP32[(HEAP32[i26 >> 2] | 0) + 44 >> 2] | 0) == 0) {
9349       HEAP32[i11 >> 2] = 113;
9350       break;
9351      }
9352      i17 = i7 + 20 | 0;
9353      i22 = i7 + 12 | 0;
9354      if ((((HEAP32[i17 >> 2] | 0) + 2 | 0) >>> 0 > (HEAP32[i22 >> 2] | 0) >>> 0 ? (i20 = HEAP32[i5 >> 2] | 0, i21 = HEAP32[i20 + 20 >> 2] | 0, i23 = HEAP32[i3 >> 2] | 0, i21 = i21 >>> 0 > i23 >>> 0 ? i23 : i21, (i21 | 0) != 0) : 0) ? (_memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i20 + 16 >> 2] | 0, i21 | 0) | 0, HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i21, i19 = (HEAP32[i5 >> 2] | 0) + 16 | 0, HEAP32[i19 >> 2] = (HEAP32[i19 >> 2] | 0) + i21, i19 = i2 + 20 | 0, HEAP32[i19 >> 2] = (HEAP32[i19 >> 2] | 0) + i21, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i21, i19 = HEAP32[i5 >> 2] | 0, i36 = i19 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i21, (i37 | 0) == (i21 | 0)) : 0) {
9355       HEAP32[i19 + 16 >> 2] = HEAP32[i19 + 8 >> 2];
9356      }
9357      i19 = HEAP32[i17 >> 2] | 0;
9358      if (!((i19 + 2 | 0) >>> 0 > (HEAP32[i22 >> 2] | 0) >>> 0)) {
9359       i37 = i2 + 48 | 0;
9360       i34 = HEAP32[i37 >> 2] & 255;
9361       HEAP32[i17 >> 2] = i19 + 1;
9362       i35 = i7 + 8 | 0;
9363       HEAP8[(HEAP32[i35 >> 2] | 0) + i19 | 0] = i34;
9364       i34 = (HEAP32[i37 >> 2] | 0) >>> 8 & 255;
9365       i36 = HEAP32[i17 >> 2] | 0;
9366       HEAP32[i17 >> 2] = i36 + 1;
9367       HEAP8[(HEAP32[i35 >> 2] | 0) + i36 | 0] = i34;
9368       HEAP32[i37 >> 2] = _crc32(0, 0, 0) | 0;
9369       HEAP32[i11 >> 2] = 113;
9370      }
9371     }
9372    } while (0);
9373    i19 = i7 + 20 | 0;
9374    if ((HEAP32[i19 >> 2] | 0) == 0) {
9375     if ((HEAP32[i2 + 4 >> 2] | 0) == 0 ? (i18 | 0) >= (i10 | 0) & (i10 | 0) != 4 : 0) {
9376      HEAP32[i2 + 24 >> 2] = HEAP32[3180 >> 2];
9377      i37 = -5;
9378      STACKTOP = i1;
9379      return i37 | 0;
9380     }
9381    } else {
9382     i17 = HEAP32[i5 >> 2] | 0;
9383     i20 = HEAP32[i17 + 20 >> 2] | 0;
9384     i18 = HEAP32[i3 >> 2] | 0;
9385     i20 = i20 >>> 0 > i18 >>> 0 ? i18 : i20;
9386     if ((i20 | 0) != 0) {
9387      _memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i17 + 16 >> 2] | 0, i20 | 0) | 0;
9388      HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i20;
9389      i17 = (HEAP32[i5 >> 2] | 0) + 16 | 0;
9390      HEAP32[i17 >> 2] = (HEAP32[i17 >> 2] | 0) + i20;
9391      i17 = i2 + 20 | 0;
9392      HEAP32[i17 >> 2] = (HEAP32[i17 >> 2] | 0) + i20;
9393      HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i20;
9394      i17 = HEAP32[i5 >> 2] | 0;
9395      i36 = i17 + 20 | 0;
9396      i37 = HEAP32[i36 >> 2] | 0;
9397      HEAP32[i36 >> 2] = i37 - i20;
9398      if ((i37 | 0) == (i20 | 0)) {
9399       HEAP32[i17 + 16 >> 2] = HEAP32[i17 + 8 >> 2];
9400      }
9401      i18 = HEAP32[i3 >> 2] | 0;
9402     }
9403     if ((i18 | 0) == 0) {
9404      HEAP32[i8 >> 2] = -1;
9405      i37 = 0;
9406      STACKTOP = i1;
9407      return i37 | 0;
9408     }
9409    }
9410    i18 = (HEAP32[i11 >> 2] | 0) == 666;
9411    i17 = (HEAP32[i2 + 4 >> 2] | 0) == 0;
9412    if (i18) {
9413     if (i17) {
9414      i17 = 121;
9415     } else {
9416      HEAP32[i2 + 24 >> 2] = HEAP32[3180 >> 2];
9417      i37 = -5;
9418      STACKTOP = i1;
9419      return i37 | 0;
9420     }
9421    } else {
9422     if (i17) {
9423      i17 = 121;
9424     } else {
9425      i17 = 124;
9426     }
9427    }
9428    do {
9429     if ((i17 | 0) == 121) {
9430      if ((HEAP32[i7 + 116 >> 2] | 0) == 0) {
9431       if ((i10 | 0) != 0) {
9432        if (i18) {
9433         break;
9434        } else {
9435         i17 = 124;
9436         break;
9437        }
9438       } else {
9439        i37 = 0;
9440        STACKTOP = i1;
9441        return i37 | 0;
9442       }
9443      } else {
9444       i17 = 124;
9445      }
9446     }
9447    } while (0);
9448    do {
9449     if ((i17 | 0) == 124) {
9450      i18 = HEAP32[i7 + 136 >> 2] | 0;
9451      L185 : do {
9452       if ((i18 | 0) == 2) {
9453        i22 = i7 + 116 | 0;
9454        i18 = i7 + 96 | 0;
9455        i13 = i7 + 108 | 0;
9456        i14 = i7 + 56 | 0;
9457        i21 = i7 + 5792 | 0;
9458        i20 = i7 + 5796 | 0;
9459        i24 = i7 + 5784 | 0;
9460        i23 = i7 + 5788 | 0;
9461        i12 = i7 + 92 | 0;
9462        while (1) {
9463         if ((HEAP32[i22 >> 2] | 0) == 0 ? (_fill_window(i7), (HEAP32[i22 >> 2] | 0) == 0) : 0) {
9464          break;
9465         }
9466         HEAP32[i18 >> 2] = 0;
9467         i37 = HEAP8[(HEAP32[i14 >> 2] | 0) + (HEAP32[i13 >> 2] | 0) | 0] | 0;
9468         i26 = HEAP32[i21 >> 2] | 0;
9469         HEAP16[(HEAP32[i20 >> 2] | 0) + (i26 << 1) >> 1] = 0;
9470         HEAP32[i21 >> 2] = i26 + 1;
9471         HEAP8[(HEAP32[i24 >> 2] | 0) + i26 | 0] = i37;
9472         i37 = i7 + ((i37 & 255) << 2) + 148 | 0;
9473         HEAP16[i37 >> 1] = (HEAP16[i37 >> 1] | 0) + 1 << 16 >> 16;
9474         i37 = (HEAP32[i21 >> 2] | 0) == ((HEAP32[i23 >> 2] | 0) + -1 | 0);
9475         HEAP32[i22 >> 2] = (HEAP32[i22 >> 2] | 0) + -1;
9476         i26 = (HEAP32[i13 >> 2] | 0) + 1 | 0;
9477         HEAP32[i13 >> 2] = i26;
9478         if (!i37) {
9479          continue;
9480         }
9481         i25 = HEAP32[i12 >> 2] | 0;
9482         if ((i25 | 0) > -1) {
9483          i27 = (HEAP32[i14 >> 2] | 0) + i25 | 0;
9484         } else {
9485          i27 = 0;
9486         }
9487         __tr_flush_block(i7, i27, i26 - i25 | 0, 0);
9488         HEAP32[i12 >> 2] = HEAP32[i13 >> 2];
9489         i26 = HEAP32[i7 >> 2] | 0;
9490         i25 = i26 + 28 | 0;
9491         i27 = HEAP32[i25 >> 2] | 0;
9492         i30 = HEAP32[i27 + 20 >> 2] | 0;
9493         i28 = i26 + 16 | 0;
9494         i29 = HEAP32[i28 >> 2] | 0;
9495         i29 = i30 >>> 0 > i29 >>> 0 ? i29 : i30;
9496         if ((i29 | 0) != 0 ? (i16 = i26 + 12 | 0, _memcpy(HEAP32[i16 >> 2] | 0, HEAP32[i27 + 16 >> 2] | 0, i29 | 0) | 0, HEAP32[i16 >> 2] = (HEAP32[i16 >> 2] | 0) + i29, i16 = (HEAP32[i25 >> 2] | 0) + 16 | 0, HEAP32[i16 >> 2] = (HEAP32[i16 >> 2] | 0) + i29, i16 = i26 + 20 | 0, HEAP32[i16 >> 2] = (HEAP32[i16 >> 2] | 0) + i29, HEAP32[i28 >> 2] = (HEAP32[i28 >> 2] | 0) - i29, i16 = HEAP32[i25 >> 2] | 0, i36 = i16 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i29, (i37 | 0) == (i29 | 0)) : 0) {
9497          HEAP32[i16 + 16 >> 2] = HEAP32[i16 + 8 >> 2];
9498         }
9499         if ((HEAP32[(HEAP32[i7 >> 2] | 0) + 16 >> 2] | 0) == 0) {
9500          break L185;
9501         }
9502        }
9503        if ((i10 | 0) != 0) {
9504         i16 = HEAP32[i12 >> 2] | 0;
9505         if ((i16 | 0) > -1) {
9506          i14 = (HEAP32[i14 >> 2] | 0) + i16 | 0;
9507         } else {
9508          i14 = 0;
9509         }
9510         __tr_flush_block(i7, i14, (HEAP32[i13 >> 2] | 0) - i16 | 0, i9 & 1);
9511         HEAP32[i12 >> 2] = HEAP32[i13 >> 2];
9512         i14 = HEAP32[i7 >> 2] | 0;
9513         i13 = i14 + 28 | 0;
9514         i12 = HEAP32[i13 >> 2] | 0;
9515         i17 = HEAP32[i12 + 20 >> 2] | 0;
9516         i16 = i14 + 16 | 0;
9517         i18 = HEAP32[i16 >> 2] | 0;
9518         i17 = i17 >>> 0 > i18 >>> 0 ? i18 : i17;
9519         if ((i17 | 0) != 0 ? (i15 = i14 + 12 | 0, _memcpy(HEAP32[i15 >> 2] | 0, HEAP32[i12 + 16 >> 2] | 0, i17 | 0) | 0, HEAP32[i15 >> 2] = (HEAP32[i15 >> 2] | 0) + i17, i15 = (HEAP32[i13 >> 2] | 0) + 16 | 0, HEAP32[i15 >> 2] = (HEAP32[i15 >> 2] | 0) + i17, i15 = i14 + 20 | 0, HEAP32[i15 >> 2] = (HEAP32[i15 >> 2] | 0) + i17, HEAP32[i16 >> 2] = (HEAP32[i16 >> 2] | 0) - i17, i15 = HEAP32[i13 >> 2] | 0, i36 = i15 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i17, (i37 | 0) == (i17 | 0)) : 0) {
9520          HEAP32[i15 + 16 >> 2] = HEAP32[i15 + 8 >> 2];
9521         }
9522         if ((HEAP32[(HEAP32[i7 >> 2] | 0) + 16 >> 2] | 0) == 0) {
9523          i12 = i9 ? 2 : 0;
9524          i17 = 183;
9525          break;
9526         } else {
9527          i12 = i9 ? 3 : 1;
9528          i17 = 183;
9529          break;
9530         }
9531        }
9532       } else if ((i18 | 0) == 3) {
9533        i27 = i7 + 116 | 0;
9534        i26 = (i10 | 0) == 0;
9535        i22 = i7 + 96 | 0;
9536        i15 = i7 + 108 | 0;
9537        i20 = i7 + 5792 | 0;
9538        i24 = i7 + 5796 | 0;
9539        i23 = i7 + 5784 | 0;
9540        i21 = i7 + (HEAPU8[296] << 2) + 2440 | 0;
9541        i25 = i7 + 5788 | 0;
9542        i18 = i7 + 56 | 0;
9543        i16 = i7 + 92 | 0;
9544        while (1) {
9545         i29 = HEAP32[i27 >> 2] | 0;
9546         if (i29 >>> 0 < 258) {
9547          _fill_window(i7);
9548          i29 = HEAP32[i27 >> 2] | 0;
9549          if (i29 >>> 0 < 258 & i26) {
9550           break L185;
9551          }
9552          if ((i29 | 0) == 0) {
9553           break;
9554          }
9555          HEAP32[i22 >> 2] = 0;
9556          if (i29 >>> 0 > 2) {
9557           i17 = 151;
9558          } else {
9559           i28 = HEAP32[i15 >> 2] | 0;
9560           i17 = 166;
9561          }
9562         } else {
9563          HEAP32[i22 >> 2] = 0;
9564          i17 = 151;
9565         }
9566         if ((i17 | 0) == 151) {
9567          i17 = 0;
9568          i28 = HEAP32[i15 >> 2] | 0;
9569          if ((i28 | 0) != 0) {
9570           i31 = HEAP32[i18 >> 2] | 0;
9571           i30 = HEAP8[i31 + (i28 + -1) | 0] | 0;
9572           if ((i30 << 24 >> 24 == (HEAP8[i31 + i28 | 0] | 0) ? i30 << 24 >> 24 == (HEAP8[i31 + (i28 + 1) | 0] | 0) : 0) ? (i14 = i31 + (i28 + 2) | 0, i30 << 24 >> 24 == (HEAP8[i14] | 0)) : 0) {
9573            i31 = i31 + (i28 + 258) | 0;
9574            i32 = i14;
9575            do {
9576             i33 = i32 + 1 | 0;
9577             if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9578              i32 = i33;
9579              break;
9580             }
9581             i33 = i32 + 2 | 0;
9582             if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9583              i32 = i33;
9584              break;
9585             }
9586             i33 = i32 + 3 | 0;
9587             if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9588              i32 = i33;
9589              break;
9590             }
9591             i33 = i32 + 4 | 0;
9592             if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9593              i32 = i33;
9594              break;
9595             }
9596             i33 = i32 + 5 | 0;
9597             if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9598              i32 = i33;
9599              break;
9600             }
9601             i33 = i32 + 6 | 0;
9602             if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9603              i32 = i33;
9604              break;
9605             }
9606             i33 = i32 + 7 | 0;
9607             if (!(i30 << 24 >> 24 == (HEAP8[i33] | 0))) {
9608              i32 = i33;
9609              break;
9610             }
9611             i32 = i32 + 8 | 0;
9612            } while (i30 << 24 >> 24 == (HEAP8[i32] | 0) & i32 >>> 0 < i31 >>> 0);
9613            i30 = i32 - i31 + 258 | 0;
9614            i29 = i30 >>> 0 > i29 >>> 0 ? i29 : i30;
9615            HEAP32[i22 >> 2] = i29;
9616            if (i29 >>> 0 > 2) {
9617             i29 = i29 + 253 | 0;
9618             i28 = HEAP32[i20 >> 2] | 0;
9619             HEAP16[(HEAP32[i24 >> 2] | 0) + (i28 << 1) >> 1] = 1;
9620             HEAP32[i20 >> 2] = i28 + 1;
9621             HEAP8[(HEAP32[i23 >> 2] | 0) + i28 | 0] = i29;
9622             i29 = i7 + ((HEAPU8[808 + (i29 & 255) | 0] | 256) + 1 << 2) + 148 | 0;
9623             HEAP16[i29 >> 1] = (HEAP16[i29 >> 1] | 0) + 1 << 16 >> 16;
9624             HEAP16[i21 >> 1] = (HEAP16[i21 >> 1] | 0) + 1 << 16 >> 16;
9625             i29 = (HEAP32[i20 >> 2] | 0) == ((HEAP32[i25 >> 2] | 0) + -1 | 0) | 0;
9626             i28 = HEAP32[i22 >> 2] | 0;
9627             HEAP32[i27 >> 2] = (HEAP32[i27 >> 2] | 0) - i28;
9628             i28 = (HEAP32[i15 >> 2] | 0) + i28 | 0;
9629             HEAP32[i15 >> 2] = i28;
9630             HEAP32[i22 >> 2] = 0;
9631            } else {
9632             i17 = 166;
9633            }
9634           } else {
9635            i17 = 166;
9636           }
9637          } else {
9638           i28 = 0;
9639           i17 = 166;
9640          }
9641         }
9642         if ((i17 | 0) == 166) {
9643          i17 = 0;
9644          i29 = HEAP8[(HEAP32[i18 >> 2] | 0) + i28 | 0] | 0;
9645          i28 = HEAP32[i20 >> 2] | 0;
9646          HEAP16[(HEAP32[i24 >> 2] | 0) + (i28 << 1) >> 1] = 0;
9647          HEAP32[i20 >> 2] = i28 + 1;
9648          HEAP8[(HEAP32[i23 >> 2] | 0) + i28 | 0] = i29;
9649          i29 = i7 + ((i29 & 255) << 2) + 148 | 0;
9650          HEAP16[i29 >> 1] = (HEAP16[i29 >> 1] | 0) + 1 << 16 >> 16;
9651          i29 = (HEAP32[i20 >> 2] | 0) == ((HEAP32[i25 >> 2] | 0) + -1 | 0) | 0;
9652          HEAP32[i27 >> 2] = (HEAP32[i27 >> 2] | 0) + -1;
9653          i28 = (HEAP32[i15 >> 2] | 0) + 1 | 0;
9654          HEAP32[i15 >> 2] = i28;
9655         }
9656         if ((i29 | 0) == 0) {
9657          continue;
9658         }
9659         i29 = HEAP32[i16 >> 2] | 0;
9660         if ((i29 | 0) > -1) {
9661          i30 = (HEAP32[i18 >> 2] | 0) + i29 | 0;
9662         } else {
9663          i30 = 0;
9664         }
9665         __tr_flush_block(i7, i30, i28 - i29 | 0, 0);
9666         HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
9667         i30 = HEAP32[i7 >> 2] | 0;
9668         i28 = i30 + 28 | 0;
9669         i29 = HEAP32[i28 >> 2] | 0;
9670         i33 = HEAP32[i29 + 20 >> 2] | 0;
9671         i31 = i30 + 16 | 0;
9672         i32 = HEAP32[i31 >> 2] | 0;
9673         i32 = i33 >>> 0 > i32 >>> 0 ? i32 : i33;
9674         if ((i32 | 0) != 0 ? (i13 = i30 + 12 | 0, _memcpy(HEAP32[i13 >> 2] | 0, HEAP32[i29 + 16 >> 2] | 0, i32 | 0) | 0, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i32, i13 = (HEAP32[i28 >> 2] | 0) + 16 | 0, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i32, i13 = i30 + 20 | 0, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + i32, HEAP32[i31 >> 2] = (HEAP32[i31 >> 2] | 0) - i32, i13 = HEAP32[i28 >> 2] | 0, i36 = i13 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i32, (i37 | 0) == (i32 | 0)) : 0) {
9675          HEAP32[i13 + 16 >> 2] = HEAP32[i13 + 8 >> 2];
9676         }
9677         if ((HEAP32[(HEAP32[i7 >> 2] | 0) + 16 >> 2] | 0) == 0) {
9678          break L185;
9679         }
9680        }
9681        i13 = HEAP32[i16 >> 2] | 0;
9682        if ((i13 | 0) > -1) {
9683         i14 = (HEAP32[i18 >> 2] | 0) + i13 | 0;
9684        } else {
9685         i14 = 0;
9686        }
9687        __tr_flush_block(i7, i14, (HEAP32[i15 >> 2] | 0) - i13 | 0, i9 & 1);
9688        HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
9689        i14 = HEAP32[i7 >> 2] | 0;
9690        i16 = i14 + 28 | 0;
9691        i15 = HEAP32[i16 >> 2] | 0;
9692        i18 = HEAP32[i15 + 20 >> 2] | 0;
9693        i13 = i14 + 16 | 0;
9694        i17 = HEAP32[i13 >> 2] | 0;
9695        i17 = i18 >>> 0 > i17 >>> 0 ? i17 : i18;
9696        if ((i17 | 0) != 0 ? (i12 = i14 + 12 | 0, _memcpy(HEAP32[i12 >> 2] | 0, HEAP32[i15 + 16 >> 2] | 0, i17 | 0) | 0, HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + i17, i12 = (HEAP32[i16 >> 2] | 0) + 16 | 0, HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + i17, i12 = i14 + 20 | 0, HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + i17, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) - i17, i12 = HEAP32[i16 >> 2] | 0, i36 = i12 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i17, (i37 | 0) == (i17 | 0)) : 0) {
9697         HEAP32[i12 + 16 >> 2] = HEAP32[i12 + 8 >> 2];
9698        }
9699        if ((HEAP32[(HEAP32[i7 >> 2] | 0) + 16 >> 2] | 0) == 0) {
9700         i12 = i9 ? 2 : 0;
9701         i17 = 183;
9702         break;
9703        } else {
9704         i12 = i9 ? 3 : 1;
9705         i17 = 183;
9706         break;
9707        }
9708       } else {
9709        i12 = FUNCTION_TABLE_iii[HEAP32[184 + ((HEAP32[i7 + 132 >> 2] | 0) * 12 | 0) >> 2] & 3](i7, i10) | 0;
9710        i17 = 183;
9711       }
9712      } while (0);
9713      if ((i17 | 0) == 183) {
9714       if ((i12 & -2 | 0) == 2) {
9715        HEAP32[i11 >> 2] = 666;
9716       }
9717       if ((i12 & -3 | 0) != 0) {
9718        if ((i12 | 0) != 1) {
9719         break;
9720        }
9721        if ((i10 | 0) == 1) {
9722         __tr_align(i7);
9723        } else if (((i10 | 0) != 5 ? (__tr_stored_block(i7, 0, 0, 0), (i10 | 0) == 3) : 0) ? (i37 = HEAP32[i7 + 76 >> 2] | 0, i36 = HEAP32[i7 + 68 >> 2] | 0, HEAP16[i36 + (i37 + -1 << 1) >> 1] = 0, _memset(i36 | 0, 0, (i37 << 1) + -2 | 0) | 0, (HEAP32[i7 + 116 >> 2] | 0) == 0) : 0) {
9724         HEAP32[i7 + 108 >> 2] = 0;
9725         HEAP32[i7 + 92 >> 2] = 0;
9726        }
9727        i11 = HEAP32[i5 >> 2] | 0;
9728        i12 = HEAP32[i11 + 20 >> 2] | 0;
9729        i10 = HEAP32[i3 >> 2] | 0;
9730        i12 = i12 >>> 0 > i10 >>> 0 ? i10 : i12;
9731        if ((i12 | 0) != 0) {
9732         _memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i11 + 16 >> 2] | 0, i12 | 0) | 0;
9733         HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i12;
9734         i10 = (HEAP32[i5 >> 2] | 0) + 16 | 0;
9735         HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + i12;
9736         i10 = i2 + 20 | 0;
9737         HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + i12;
9738         HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i12;
9739         i10 = HEAP32[i5 >> 2] | 0;
9740         i36 = i10 + 20 | 0;
9741         i37 = HEAP32[i36 >> 2] | 0;
9742         HEAP32[i36 >> 2] = i37 - i12;
9743         if ((i37 | 0) == (i12 | 0)) {
9744          HEAP32[i10 + 16 >> 2] = HEAP32[i10 + 8 >> 2];
9745         }
9746         i10 = HEAP32[i3 >> 2] | 0;
9747        }
9748        if ((i10 | 0) != 0) {
9749         break;
9750        }
9751        HEAP32[i8 >> 2] = -1;
9752        i37 = 0;
9753        STACKTOP = i1;
9754        return i37 | 0;
9755       }
9756      }
9757      if ((HEAP32[i3 >> 2] | 0) != 0) {
9758       i37 = 0;
9759       STACKTOP = i1;
9760       return i37 | 0;
9761      }
9762      HEAP32[i8 >> 2] = -1;
9763      i37 = 0;
9764      STACKTOP = i1;
9765      return i37 | 0;
9766     }
9767    } while (0);
9768    if (!i9) {
9769     i37 = 0;
9770     STACKTOP = i1;
9771     return i37 | 0;
9772    }
9773    i8 = i7 + 24 | 0;
9774    i10 = HEAP32[i8 >> 2] | 0;
9775    if ((i10 | 0) < 1) {
9776     i37 = 1;
9777     STACKTOP = i1;
9778     return i37 | 0;
9779    }
9780    i11 = i2 + 48 | 0;
9781    i9 = HEAP32[i11 >> 2] | 0;
9782    if ((i10 | 0) == 2) {
9783     i34 = HEAP32[i19 >> 2] | 0;
9784     HEAP32[i19 >> 2] = i34 + 1;
9785     i36 = i7 + 8 | 0;
9786     HEAP8[(HEAP32[i36 >> 2] | 0) + i34 | 0] = i9;
9787     i34 = (HEAP32[i11 >> 2] | 0) >>> 8 & 255;
9788     i35 = HEAP32[i19 >> 2] | 0;
9789     HEAP32[i19 >> 2] = i35 + 1;
9790     HEAP8[(HEAP32[i36 >> 2] | 0) + i35 | 0] = i34;
9791     i35 = (HEAP32[i11 >> 2] | 0) >>> 16 & 255;
9792     i34 = HEAP32[i19 >> 2] | 0;
9793     HEAP32[i19 >> 2] = i34 + 1;
9794     HEAP8[(HEAP32[i36 >> 2] | 0) + i34 | 0] = i35;
9795     i34 = (HEAP32[i11 >> 2] | 0) >>> 24 & 255;
9796     i35 = HEAP32[i19 >> 2] | 0;
9797     HEAP32[i19 >> 2] = i35 + 1;
9798     HEAP8[(HEAP32[i36 >> 2] | 0) + i35 | 0] = i34;
9799     i35 = i2 + 8 | 0;
9800     i34 = HEAP32[i35 >> 2] & 255;
9801     i37 = HEAP32[i19 >> 2] | 0;
9802     HEAP32[i19 >> 2] = i37 + 1;
9803     HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i34;
9804     i37 = (HEAP32[i35 >> 2] | 0) >>> 8 & 255;
9805     i34 = HEAP32[i19 >> 2] | 0;
9806     HEAP32[i19 >> 2] = i34 + 1;
9807     HEAP8[(HEAP32[i36 >> 2] | 0) + i34 | 0] = i37;
9808     i34 = (HEAP32[i35 >> 2] | 0) >>> 16 & 255;
9809     i37 = HEAP32[i19 >> 2] | 0;
9810     HEAP32[i19 >> 2] = i37 + 1;
9811     HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i34;
9812     i35 = (HEAP32[i35 >> 2] | 0) >>> 24 & 255;
9813     i37 = HEAP32[i19 >> 2] | 0;
9814     HEAP32[i19 >> 2] = i37 + 1;
9815     HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i35;
9816    } else {
9817     i35 = HEAP32[i19 >> 2] | 0;
9818     HEAP32[i19 >> 2] = i35 + 1;
9819     i36 = i7 + 8 | 0;
9820     HEAP8[(HEAP32[i36 >> 2] | 0) + i35 | 0] = i9 >>> 24;
9821     i35 = HEAP32[i19 >> 2] | 0;
9822     HEAP32[i19 >> 2] = i35 + 1;
9823     HEAP8[(HEAP32[i36 >> 2] | 0) + i35 | 0] = i9 >>> 16;
9824     i35 = HEAP32[i11 >> 2] | 0;
9825     i37 = HEAP32[i19 >> 2] | 0;
9826     HEAP32[i19 >> 2] = i37 + 1;
9827     HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i35 >>> 8;
9828     i37 = HEAP32[i19 >> 2] | 0;
9829     HEAP32[i19 >> 2] = i37 + 1;
9830     HEAP8[(HEAP32[i36 >> 2] | 0) + i37 | 0] = i35;
9831    }
9832    i7 = HEAP32[i5 >> 2] | 0;
9833    i10 = HEAP32[i7 + 20 >> 2] | 0;
9834    i9 = HEAP32[i3 >> 2] | 0;
9835    i9 = i10 >>> 0 > i9 >>> 0 ? i9 : i10;
9836    if ((i9 | 0) != 0 ? (_memcpy(HEAP32[i4 >> 2] | 0, HEAP32[i7 + 16 >> 2] | 0, i9 | 0) | 0, HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + i9, i6 = (HEAP32[i5 >> 2] | 0) + 16 | 0, HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i9, i6 = i2 + 20 | 0, HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i9, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) - i9, i6 = HEAP32[i5 >> 2] | 0, i36 = i6 + 20 | 0, i37 = HEAP32[i36 >> 2] | 0, HEAP32[i36 >> 2] = i37 - i9, (i37 | 0) == (i9 | 0)) : 0) {
9837     HEAP32[i6 + 16 >> 2] = HEAP32[i6 + 8 >> 2];
9838    }
9839    i2 = HEAP32[i8 >> 2] | 0;
9840    if ((i2 | 0) > 0) {
9841     HEAP32[i8 >> 2] = 0 - i2;
9842    }
9843    i37 = (HEAP32[i19 >> 2] | 0) == 0 | 0;
9844    STACKTOP = i1;
9845    return i37 | 0;
9846   }
9847  }
9848 } while (0);
9849 HEAP32[i2 + 24 >> 2] = HEAP32[3168 >> 2];
9850 i37 = -2;
9851 STACKTOP = i1;
9852 return i37 | 0;
9853}
9854function _free(i7) {
9855 i7 = i7 | 0;
9856 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0;
9857 i1 = STACKTOP;
9858 if ((i7 | 0) == 0) {
9859  STACKTOP = i1;
9860  return;
9861 }
9862 i15 = i7 + -8 | 0;
9863 i16 = HEAP32[14488 >> 2] | 0;
9864 if (i15 >>> 0 < i16 >>> 0) {
9865  _abort();
9866 }
9867 i13 = HEAP32[i7 + -4 >> 2] | 0;
9868 i12 = i13 & 3;
9869 if ((i12 | 0) == 1) {
9870  _abort();
9871 }
9872 i8 = i13 & -8;
9873 i6 = i7 + (i8 + -8) | 0;
9874 do {
9875  if ((i13 & 1 | 0) == 0) {
9876   i19 = HEAP32[i15 >> 2] | 0;
9877   if ((i12 | 0) == 0) {
9878    STACKTOP = i1;
9879    return;
9880   }
9881   i15 = -8 - i19 | 0;
9882   i13 = i7 + i15 | 0;
9883   i12 = i19 + i8 | 0;
9884   if (i13 >>> 0 < i16 >>> 0) {
9885    _abort();
9886   }
9887   if ((i13 | 0) == (HEAP32[14492 >> 2] | 0)) {
9888    i2 = i7 + (i8 + -4) | 0;
9889    if ((HEAP32[i2 >> 2] & 3 | 0) != 3) {
9890     i2 = i13;
9891     i11 = i12;
9892     break;
9893    }
9894    HEAP32[14480 >> 2] = i12;
9895    HEAP32[i2 >> 2] = HEAP32[i2 >> 2] & -2;
9896    HEAP32[i7 + (i15 + 4) >> 2] = i12 | 1;
9897    HEAP32[i6 >> 2] = i12;
9898    STACKTOP = i1;
9899    return;
9900   }
9901   i18 = i19 >>> 3;
9902   if (i19 >>> 0 < 256) {
9903    i2 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
9904    i11 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
9905    i14 = 14512 + (i18 << 1 << 2) | 0;
9906    if ((i2 | 0) != (i14 | 0)) {
9907     if (i2 >>> 0 < i16 >>> 0) {
9908      _abort();
9909     }
9910     if ((HEAP32[i2 + 12 >> 2] | 0) != (i13 | 0)) {
9911      _abort();
9912     }
9913    }
9914    if ((i11 | 0) == (i2 | 0)) {
9915     HEAP32[3618] = HEAP32[3618] & ~(1 << i18);
9916     i2 = i13;
9917     i11 = i12;
9918     break;
9919    }
9920    if ((i11 | 0) != (i14 | 0)) {
9921     if (i11 >>> 0 < i16 >>> 0) {
9922      _abort();
9923     }
9924     i14 = i11 + 8 | 0;
9925     if ((HEAP32[i14 >> 2] | 0) == (i13 | 0)) {
9926      i17 = i14;
9927     } else {
9928      _abort();
9929     }
9930    } else {
9931     i17 = i11 + 8 | 0;
9932    }
9933    HEAP32[i2 + 12 >> 2] = i11;
9934    HEAP32[i17 >> 2] = i2;
9935    i2 = i13;
9936    i11 = i12;
9937    break;
9938   }
9939   i17 = HEAP32[i7 + (i15 + 24) >> 2] | 0;
9940   i18 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
9941   do {
9942    if ((i18 | 0) == (i13 | 0)) {
9943     i19 = i7 + (i15 + 20) | 0;
9944     i18 = HEAP32[i19 >> 2] | 0;
9945     if ((i18 | 0) == 0) {
9946      i19 = i7 + (i15 + 16) | 0;
9947      i18 = HEAP32[i19 >> 2] | 0;
9948      if ((i18 | 0) == 0) {
9949       i14 = 0;
9950       break;
9951      }
9952     }
9953     while (1) {
9954      i21 = i18 + 20 | 0;
9955      i20 = HEAP32[i21 >> 2] | 0;
9956      if ((i20 | 0) != 0) {
9957       i18 = i20;
9958       i19 = i21;
9959       continue;
9960      }
9961      i20 = i18 + 16 | 0;
9962      i21 = HEAP32[i20 >> 2] | 0;
9963      if ((i21 | 0) == 0) {
9964       break;
9965      } else {
9966       i18 = i21;
9967       i19 = i20;
9968      }
9969     }
9970     if (i19 >>> 0 < i16 >>> 0) {
9971      _abort();
9972     } else {
9973      HEAP32[i19 >> 2] = 0;
9974      i14 = i18;
9975      break;
9976     }
9977    } else {
9978     i19 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
9979     if (i19 >>> 0 < i16 >>> 0) {
9980      _abort();
9981     }
9982     i16 = i19 + 12 | 0;
9983     if ((HEAP32[i16 >> 2] | 0) != (i13 | 0)) {
9984      _abort();
9985     }
9986     i20 = i18 + 8 | 0;
9987     if ((HEAP32[i20 >> 2] | 0) == (i13 | 0)) {
9988      HEAP32[i16 >> 2] = i18;
9989      HEAP32[i20 >> 2] = i19;
9990      i14 = i18;
9991      break;
9992     } else {
9993      _abort();
9994     }
9995    }
9996   } while (0);
9997   if ((i17 | 0) != 0) {
9998    i18 = HEAP32[i7 + (i15 + 28) >> 2] | 0;
9999    i16 = 14776 + (i18 << 2) | 0;
10000    if ((i13 | 0) == (HEAP32[i16 >> 2] | 0)) {
10001     HEAP32[i16 >> 2] = i14;
10002     if ((i14 | 0) == 0) {
10003      HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i18);
10004      i2 = i13;
10005      i11 = i12;
10006      break;
10007     }
10008    } else {
10009     if (i17 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10010      _abort();
10011     }
10012     i16 = i17 + 16 | 0;
10013     if ((HEAP32[i16 >> 2] | 0) == (i13 | 0)) {
10014      HEAP32[i16 >> 2] = i14;
10015     } else {
10016      HEAP32[i17 + 20 >> 2] = i14;
10017     }
10018     if ((i14 | 0) == 0) {
10019      i2 = i13;
10020      i11 = i12;
10021      break;
10022     }
10023    }
10024    if (i14 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10025     _abort();
10026    }
10027    HEAP32[i14 + 24 >> 2] = i17;
10028    i16 = HEAP32[i7 + (i15 + 16) >> 2] | 0;
10029    do {
10030     if ((i16 | 0) != 0) {
10031      if (i16 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10032       _abort();
10033      } else {
10034       HEAP32[i14 + 16 >> 2] = i16;
10035       HEAP32[i16 + 24 >> 2] = i14;
10036       break;
10037      }
10038     }
10039    } while (0);
10040    i15 = HEAP32[i7 + (i15 + 20) >> 2] | 0;
10041    if ((i15 | 0) != 0) {
10042     if (i15 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10043      _abort();
10044     } else {
10045      HEAP32[i14 + 20 >> 2] = i15;
10046      HEAP32[i15 + 24 >> 2] = i14;
10047      i2 = i13;
10048      i11 = i12;
10049      break;
10050     }
10051    } else {
10052     i2 = i13;
10053     i11 = i12;
10054    }
10055   } else {
10056    i2 = i13;
10057    i11 = i12;
10058   }
10059  } else {
10060   i2 = i15;
10061   i11 = i8;
10062  }
10063 } while (0);
10064 if (!(i2 >>> 0 < i6 >>> 0)) {
10065  _abort();
10066 }
10067 i12 = i7 + (i8 + -4) | 0;
10068 i13 = HEAP32[i12 >> 2] | 0;
10069 if ((i13 & 1 | 0) == 0) {
10070  _abort();
10071 }
10072 if ((i13 & 2 | 0) == 0) {
10073  if ((i6 | 0) == (HEAP32[14496 >> 2] | 0)) {
10074   i21 = (HEAP32[14484 >> 2] | 0) + i11 | 0;
10075   HEAP32[14484 >> 2] = i21;
10076   HEAP32[14496 >> 2] = i2;
10077   HEAP32[i2 + 4 >> 2] = i21 | 1;
10078   if ((i2 | 0) != (HEAP32[14492 >> 2] | 0)) {
10079    STACKTOP = i1;
10080    return;
10081   }
10082   HEAP32[14492 >> 2] = 0;
10083   HEAP32[14480 >> 2] = 0;
10084   STACKTOP = i1;
10085   return;
10086  }
10087  if ((i6 | 0) == (HEAP32[14492 >> 2] | 0)) {
10088   i21 = (HEAP32[14480 >> 2] | 0) + i11 | 0;
10089   HEAP32[14480 >> 2] = i21;
10090   HEAP32[14492 >> 2] = i2;
10091   HEAP32[i2 + 4 >> 2] = i21 | 1;
10092   HEAP32[i2 + i21 >> 2] = i21;
10093   STACKTOP = i1;
10094   return;
10095  }
10096  i11 = (i13 & -8) + i11 | 0;
10097  i12 = i13 >>> 3;
10098  do {
10099   if (!(i13 >>> 0 < 256)) {
10100    i10 = HEAP32[i7 + (i8 + 16) >> 2] | 0;
10101    i15 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
10102    do {
10103     if ((i15 | 0) == (i6 | 0)) {
10104      i13 = i7 + (i8 + 12) | 0;
10105      i12 = HEAP32[i13 >> 2] | 0;
10106      if ((i12 | 0) == 0) {
10107       i13 = i7 + (i8 + 8) | 0;
10108       i12 = HEAP32[i13 >> 2] | 0;
10109       if ((i12 | 0) == 0) {
10110        i9 = 0;
10111        break;
10112       }
10113      }
10114      while (1) {
10115       i14 = i12 + 20 | 0;
10116       i15 = HEAP32[i14 >> 2] | 0;
10117       if ((i15 | 0) != 0) {
10118        i12 = i15;
10119        i13 = i14;
10120        continue;
10121       }
10122       i14 = i12 + 16 | 0;
10123       i15 = HEAP32[i14 >> 2] | 0;
10124       if ((i15 | 0) == 0) {
10125        break;
10126       } else {
10127        i12 = i15;
10128        i13 = i14;
10129       }
10130      }
10131      if (i13 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10132       _abort();
10133      } else {
10134       HEAP32[i13 >> 2] = 0;
10135       i9 = i12;
10136       break;
10137      }
10138     } else {
10139      i13 = HEAP32[i7 + i8 >> 2] | 0;
10140      if (i13 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10141       _abort();
10142      }
10143      i14 = i13 + 12 | 0;
10144      if ((HEAP32[i14 >> 2] | 0) != (i6 | 0)) {
10145       _abort();
10146      }
10147      i12 = i15 + 8 | 0;
10148      if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
10149       HEAP32[i14 >> 2] = i15;
10150       HEAP32[i12 >> 2] = i13;
10151       i9 = i15;
10152       break;
10153      } else {
10154       _abort();
10155      }
10156     }
10157    } while (0);
10158    if ((i10 | 0) != 0) {
10159     i12 = HEAP32[i7 + (i8 + 20) >> 2] | 0;
10160     i13 = 14776 + (i12 << 2) | 0;
10161     if ((i6 | 0) == (HEAP32[i13 >> 2] | 0)) {
10162      HEAP32[i13 >> 2] = i9;
10163      if ((i9 | 0) == 0) {
10164       HEAP32[14476 >> 2] = HEAP32[14476 >> 2] & ~(1 << i12);
10165       break;
10166      }
10167     } else {
10168      if (i10 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10169       _abort();
10170      }
10171      i12 = i10 + 16 | 0;
10172      if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
10173       HEAP32[i12 >> 2] = i9;
10174      } else {
10175       HEAP32[i10 + 20 >> 2] = i9;
10176      }
10177      if ((i9 | 0) == 0) {
10178       break;
10179      }
10180     }
10181     if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10182      _abort();
10183     }
10184     HEAP32[i9 + 24 >> 2] = i10;
10185     i6 = HEAP32[i7 + (i8 + 8) >> 2] | 0;
10186     do {
10187      if ((i6 | 0) != 0) {
10188       if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10189        _abort();
10190       } else {
10191        HEAP32[i9 + 16 >> 2] = i6;
10192        HEAP32[i6 + 24 >> 2] = i9;
10193        break;
10194       }
10195      }
10196     } while (0);
10197     i6 = HEAP32[i7 + (i8 + 12) >> 2] | 0;
10198     if ((i6 | 0) != 0) {
10199      if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10200       _abort();
10201      } else {
10202       HEAP32[i9 + 20 >> 2] = i6;
10203       HEAP32[i6 + 24 >> 2] = i9;
10204       break;
10205      }
10206     }
10207    }
10208   } else {
10209    i9 = HEAP32[i7 + i8 >> 2] | 0;
10210    i7 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
10211    i8 = 14512 + (i12 << 1 << 2) | 0;
10212    if ((i9 | 0) != (i8 | 0)) {
10213     if (i9 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10214      _abort();
10215     }
10216     if ((HEAP32[i9 + 12 >> 2] | 0) != (i6 | 0)) {
10217      _abort();
10218     }
10219    }
10220    if ((i7 | 0) == (i9 | 0)) {
10221     HEAP32[3618] = HEAP32[3618] & ~(1 << i12);
10222     break;
10223    }
10224    if ((i7 | 0) != (i8 | 0)) {
10225     if (i7 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10226      _abort();
10227     }
10228     i8 = i7 + 8 | 0;
10229     if ((HEAP32[i8 >> 2] | 0) == (i6 | 0)) {
10230      i10 = i8;
10231     } else {
10232      _abort();
10233     }
10234    } else {
10235     i10 = i7 + 8 | 0;
10236    }
10237    HEAP32[i9 + 12 >> 2] = i7;
10238    HEAP32[i10 >> 2] = i9;
10239   }
10240  } while (0);
10241  HEAP32[i2 + 4 >> 2] = i11 | 1;
10242  HEAP32[i2 + i11 >> 2] = i11;
10243  if ((i2 | 0) == (HEAP32[14492 >> 2] | 0)) {
10244   HEAP32[14480 >> 2] = i11;
10245   STACKTOP = i1;
10246   return;
10247  }
10248 } else {
10249  HEAP32[i12 >> 2] = i13 & -2;
10250  HEAP32[i2 + 4 >> 2] = i11 | 1;
10251  HEAP32[i2 + i11 >> 2] = i11;
10252 }
10253 i6 = i11 >>> 3;
10254 if (i11 >>> 0 < 256) {
10255  i7 = i6 << 1;
10256  i3 = 14512 + (i7 << 2) | 0;
10257  i8 = HEAP32[3618] | 0;
10258  i6 = 1 << i6;
10259  if ((i8 & i6 | 0) != 0) {
10260   i6 = 14512 + (i7 + 2 << 2) | 0;
10261   i7 = HEAP32[i6 >> 2] | 0;
10262   if (i7 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10263    _abort();
10264   } else {
10265    i4 = i6;
10266    i5 = i7;
10267   }
10268  } else {
10269   HEAP32[3618] = i8 | i6;
10270   i4 = 14512 + (i7 + 2 << 2) | 0;
10271   i5 = i3;
10272  }
10273  HEAP32[i4 >> 2] = i2;
10274  HEAP32[i5 + 12 >> 2] = i2;
10275  HEAP32[i2 + 8 >> 2] = i5;
10276  HEAP32[i2 + 12 >> 2] = i3;
10277  STACKTOP = i1;
10278  return;
10279 }
10280 i4 = i11 >>> 8;
10281 if ((i4 | 0) != 0) {
10282  if (i11 >>> 0 > 16777215) {
10283   i4 = 31;
10284  } else {
10285   i20 = (i4 + 1048320 | 0) >>> 16 & 8;
10286   i21 = i4 << i20;
10287   i19 = (i21 + 520192 | 0) >>> 16 & 4;
10288   i21 = i21 << i19;
10289   i4 = (i21 + 245760 | 0) >>> 16 & 2;
10290   i4 = 14 - (i19 | i20 | i4) + (i21 << i4 >>> 15) | 0;
10291   i4 = i11 >>> (i4 + 7 | 0) & 1 | i4 << 1;
10292  }
10293 } else {
10294  i4 = 0;
10295 }
10296 i5 = 14776 + (i4 << 2) | 0;
10297 HEAP32[i2 + 28 >> 2] = i4;
10298 HEAP32[i2 + 20 >> 2] = 0;
10299 HEAP32[i2 + 16 >> 2] = 0;
10300 i7 = HEAP32[14476 >> 2] | 0;
10301 i6 = 1 << i4;
10302 L199 : do {
10303  if ((i7 & i6 | 0) != 0) {
10304   i5 = HEAP32[i5 >> 2] | 0;
10305   if ((i4 | 0) == 31) {
10306    i4 = 0;
10307   } else {
10308    i4 = 25 - (i4 >>> 1) | 0;
10309   }
10310   L204 : do {
10311    if ((HEAP32[i5 + 4 >> 2] & -8 | 0) != (i11 | 0)) {
10312     i4 = i11 << i4;
10313     i7 = i5;
10314     while (1) {
10315      i6 = i7 + (i4 >>> 31 << 2) + 16 | 0;
10316      i5 = HEAP32[i6 >> 2] | 0;
10317      if ((i5 | 0) == 0) {
10318       break;
10319      }
10320      if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i11 | 0)) {
10321       i3 = i5;
10322       break L204;
10323      } else {
10324       i4 = i4 << 1;
10325       i7 = i5;
10326      }
10327     }
10328     if (i6 >>> 0 < (HEAP32[14488 >> 2] | 0) >>> 0) {
10329      _abort();
10330     } else {
10331      HEAP32[i6 >> 2] = i2;
10332      HEAP32[i2 + 24 >> 2] = i7;
10333      HEAP32[i2 + 12 >> 2] = i2;
10334      HEAP32[i2 + 8 >> 2] = i2;
10335      break L199;
10336     }
10337    } else {
10338     i3 = i5;
10339    }
10340   } while (0);
10341   i5 = i3 + 8 | 0;
10342   i4 = HEAP32[i5 >> 2] | 0;
10343   i6 = HEAP32[14488 >> 2] | 0;
10344   if (i3 >>> 0 < i6 >>> 0) {
10345    _abort();
10346   }
10347   if (i4 >>> 0 < i6 >>> 0) {
10348    _abort();
10349   } else {
10350    HEAP32[i4 + 12 >> 2] = i2;
10351    HEAP32[i5 >> 2] = i2;
10352    HEAP32[i2 + 8 >> 2] = i4;
10353    HEAP32[i2 + 12 >> 2] = i3;
10354    HEAP32[i2 + 24 >> 2] = 0;
10355    break;
10356   }
10357  } else {
10358   HEAP32[14476 >> 2] = i7 | i6;
10359   HEAP32[i5 >> 2] = i2;
10360   HEAP32[i2 + 24 >> 2] = i5;
10361   HEAP32[i2 + 12 >> 2] = i2;
10362   HEAP32[i2 + 8 >> 2] = i2;
10363  }
10364 } while (0);
10365 i21 = (HEAP32[14504 >> 2] | 0) + -1 | 0;
10366 HEAP32[14504 >> 2] = i21;
10367 if ((i21 | 0) == 0) {
10368  i2 = 14928 | 0;
10369 } else {
10370  STACKTOP = i1;
10371  return;
10372 }
10373 while (1) {
10374  i2 = HEAP32[i2 >> 2] | 0;
10375  if ((i2 | 0) == 0) {
10376   break;
10377  } else {
10378   i2 = i2 + 8 | 0;
10379  }
10380 }
10381 HEAP32[14504 >> 2] = -1;
10382 STACKTOP = i1;
10383 return;
10384}
10385function _build_tree(i4, i9) {
10386 i4 = i4 | 0;
10387 i9 = i9 | 0;
10388 var i1 = 0, i2 = 0, i3 = 0, i5 = 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, i21 = 0, i22 = 0, i23 = 0;
10389 i2 = STACKTOP;
10390 STACKTOP = STACKTOP + 32 | 0;
10391 i1 = i2;
10392 i3 = HEAP32[i9 >> 2] | 0;
10393 i7 = i9 + 8 | 0;
10394 i11 = HEAP32[i7 >> 2] | 0;
10395 i12 = HEAP32[i11 >> 2] | 0;
10396 i11 = HEAP32[i11 + 12 >> 2] | 0;
10397 i8 = i4 + 5200 | 0;
10398 HEAP32[i8 >> 2] = 0;
10399 i6 = i4 + 5204 | 0;
10400 HEAP32[i6 >> 2] = 573;
10401 if ((i11 | 0) > 0) {
10402  i5 = -1;
10403  i13 = 0;
10404  do {
10405   if ((HEAP16[i3 + (i13 << 2) >> 1] | 0) == 0) {
10406    HEAP16[i3 + (i13 << 2) + 2 >> 1] = 0;
10407   } else {
10408    i5 = (HEAP32[i8 >> 2] | 0) + 1 | 0;
10409    HEAP32[i8 >> 2] = i5;
10410    HEAP32[i4 + (i5 << 2) + 2908 >> 2] = i13;
10411    HEAP8[i4 + i13 + 5208 | 0] = 0;
10412    i5 = i13;
10413   }
10414   i13 = i13 + 1 | 0;
10415  } while ((i13 | 0) != (i11 | 0));
10416  i14 = HEAP32[i8 >> 2] | 0;
10417  if ((i14 | 0) < 2) {
10418   i10 = 3;
10419  }
10420 } else {
10421  i14 = 0;
10422  i5 = -1;
10423  i10 = 3;
10424 }
10425 if ((i10 | 0) == 3) {
10426  i10 = i4 + 5800 | 0;
10427  i13 = i4 + 5804 | 0;
10428  if ((i12 | 0) == 0) {
10429   do {
10430    i12 = (i5 | 0) < 2;
10431    i13 = i5 + 1 | 0;
10432    i5 = i12 ? i13 : i5;
10433    i23 = i12 ? i13 : 0;
10434    i14 = i14 + 1 | 0;
10435    HEAP32[i8 >> 2] = i14;
10436    HEAP32[i4 + (i14 << 2) + 2908 >> 2] = i23;
10437    HEAP16[i3 + (i23 << 2) >> 1] = 1;
10438    HEAP8[i4 + i23 + 5208 | 0] = 0;
10439    HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + -1;
10440    i14 = HEAP32[i8 >> 2] | 0;
10441   } while ((i14 | 0) < 2);
10442  } else {
10443   do {
10444    i15 = (i5 | 0) < 2;
10445    i16 = i5 + 1 | 0;
10446    i5 = i15 ? i16 : i5;
10447    i23 = i15 ? i16 : 0;
10448    i14 = i14 + 1 | 0;
10449    HEAP32[i8 >> 2] = i14;
10450    HEAP32[i4 + (i14 << 2) + 2908 >> 2] = i23;
10451    HEAP16[i3 + (i23 << 2) >> 1] = 1;
10452    HEAP8[i4 + i23 + 5208 | 0] = 0;
10453    HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + -1;
10454    HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) - (HEAPU16[i12 + (i23 << 2) + 2 >> 1] | 0);
10455    i14 = HEAP32[i8 >> 2] | 0;
10456   } while ((i14 | 0) < 2);
10457  }
10458 }
10459 i10 = i9 + 4 | 0;
10460 HEAP32[i10 >> 2] = i5;
10461 i12 = HEAP32[i8 >> 2] | 0;
10462 if ((i12 | 0) > 1) {
10463  i18 = i12;
10464  i13 = (i12 | 0) / 2 | 0;
10465  do {
10466   i12 = HEAP32[i4 + (i13 << 2) + 2908 >> 2] | 0;
10467   i14 = i4 + i12 + 5208 | 0;
10468   i17 = i13 << 1;
10469   L21 : do {
10470    if ((i17 | 0) > (i18 | 0)) {
10471     i15 = i13;
10472    } else {
10473     i16 = i3 + (i12 << 2) | 0;
10474     i15 = i13;
10475     while (1) {
10476      do {
10477       if ((i17 | 0) < (i18 | 0)) {
10478        i18 = i17 | 1;
10479        i19 = HEAP32[i4 + (i18 << 2) + 2908 >> 2] | 0;
10480        i22 = HEAP16[i3 + (i19 << 2) >> 1] | 0;
10481        i20 = HEAP32[i4 + (i17 << 2) + 2908 >> 2] | 0;
10482        i21 = HEAP16[i3 + (i20 << 2) >> 1] | 0;
10483        if (!((i22 & 65535) < (i21 & 65535))) {
10484         if (!(i22 << 16 >> 16 == i21 << 16 >> 16)) {
10485          break;
10486         }
10487         if ((HEAPU8[i4 + i19 + 5208 | 0] | 0) > (HEAPU8[i4 + i20 + 5208 | 0] | 0)) {
10488          break;
10489         }
10490        }
10491        i17 = i18;
10492       }
10493      } while (0);
10494      i19 = HEAP16[i16 >> 1] | 0;
10495      i18 = HEAP32[i4 + (i17 << 2) + 2908 >> 2] | 0;
10496      i20 = HEAP16[i3 + (i18 << 2) >> 1] | 0;
10497      if ((i19 & 65535) < (i20 & 65535)) {
10498       break L21;
10499      }
10500      if (i19 << 16 >> 16 == i20 << 16 >> 16 ? (HEAPU8[i14] | 0) <= (HEAPU8[i4 + i18 + 5208 | 0] | 0) : 0) {
10501       break L21;
10502      }
10503      HEAP32[i4 + (i15 << 2) + 2908 >> 2] = i18;
10504      i19 = i17 << 1;
10505      i18 = HEAP32[i8 >> 2] | 0;
10506      if ((i19 | 0) > (i18 | 0)) {
10507       i15 = i17;
10508       break;
10509      } else {
10510       i15 = i17;
10511       i17 = i19;
10512      }
10513     }
10514    }
10515   } while (0);
10516   HEAP32[i4 + (i15 << 2) + 2908 >> 2] = i12;
10517   i13 = i13 + -1 | 0;
10518   i18 = HEAP32[i8 >> 2] | 0;
10519  } while ((i13 | 0) > 0);
10520 } else {
10521  i18 = i12;
10522 }
10523 i12 = i4 + 2912 | 0;
10524 while (1) {
10525  i13 = HEAP32[i12 >> 2] | 0;
10526  i20 = i18 + -1 | 0;
10527  HEAP32[i8 >> 2] = i20;
10528  i14 = HEAP32[i4 + (i18 << 2) + 2908 >> 2] | 0;
10529  HEAP32[i12 >> 2] = i14;
10530  i15 = i4 + i14 + 5208 | 0;
10531  L40 : do {
10532   if ((i18 | 0) < 3) {
10533    i17 = 1;
10534   } else {
10535    i16 = i3 + (i14 << 2) | 0;
10536    i17 = 1;
10537    i18 = 2;
10538    while (1) {
10539     do {
10540      if ((i18 | 0) < (i20 | 0)) {
10541       i22 = i18 | 1;
10542       i21 = HEAP32[i4 + (i22 << 2) + 2908 >> 2] | 0;
10543       i23 = HEAP16[i3 + (i21 << 2) >> 1] | 0;
10544       i20 = HEAP32[i4 + (i18 << 2) + 2908 >> 2] | 0;
10545       i19 = HEAP16[i3 + (i20 << 2) >> 1] | 0;
10546       if (!((i23 & 65535) < (i19 & 65535))) {
10547        if (!(i23 << 16 >> 16 == i19 << 16 >> 16)) {
10548         break;
10549        }
10550        if ((HEAPU8[i4 + i21 + 5208 | 0] | 0) > (HEAPU8[i4 + i20 + 5208 | 0] | 0)) {
10551         break;
10552        }
10553       }
10554       i18 = i22;
10555      }
10556     } while (0);
10557     i21 = HEAP16[i16 >> 1] | 0;
10558     i20 = HEAP32[i4 + (i18 << 2) + 2908 >> 2] | 0;
10559     i19 = HEAP16[i3 + (i20 << 2) >> 1] | 0;
10560     if ((i21 & 65535) < (i19 & 65535)) {
10561      break L40;
10562     }
10563     if (i21 << 16 >> 16 == i19 << 16 >> 16 ? (HEAPU8[i15] | 0) <= (HEAPU8[i4 + i20 + 5208 | 0] | 0) : 0) {
10564      break L40;
10565     }
10566     HEAP32[i4 + (i17 << 2) + 2908 >> 2] = i20;
10567     i19 = i18 << 1;
10568     i20 = HEAP32[i8 >> 2] | 0;
10569     if ((i19 | 0) > (i20 | 0)) {
10570      i17 = i18;
10571      break;
10572     } else {
10573      i17 = i18;
10574      i18 = i19;
10575     }
10576    }
10577   }
10578  } while (0);
10579  HEAP32[i4 + (i17 << 2) + 2908 >> 2] = i14;
10580  i17 = HEAP32[i12 >> 2] | 0;
10581  i14 = (HEAP32[i6 >> 2] | 0) + -1 | 0;
10582  HEAP32[i6 >> 2] = i14;
10583  HEAP32[i4 + (i14 << 2) + 2908 >> 2] = i13;
10584  i14 = (HEAP32[i6 >> 2] | 0) + -1 | 0;
10585  HEAP32[i6 >> 2] = i14;
10586  HEAP32[i4 + (i14 << 2) + 2908 >> 2] = i17;
10587  i14 = i3 + (i11 << 2) | 0;
10588  HEAP16[i14 >> 1] = (HEAPU16[i3 + (i17 << 2) >> 1] | 0) + (HEAPU16[i3 + (i13 << 2) >> 1] | 0);
10589  i18 = HEAP8[i4 + i13 + 5208 | 0] | 0;
10590  i16 = HEAP8[i4 + i17 + 5208 | 0] | 0;
10591  i15 = i4 + i11 + 5208 | 0;
10592  HEAP8[i15] = (((i18 & 255) < (i16 & 255) ? i16 : i18) & 255) + 1;
10593  i19 = i11 & 65535;
10594  HEAP16[i3 + (i17 << 2) + 2 >> 1] = i19;
10595  HEAP16[i3 + (i13 << 2) + 2 >> 1] = i19;
10596  i13 = i11 + 1 | 0;
10597  HEAP32[i12 >> 2] = i11;
10598  i19 = HEAP32[i8 >> 2] | 0;
10599  L56 : do {
10600   if ((i19 | 0) < 2) {
10601    i16 = 1;
10602   } else {
10603    i16 = 1;
10604    i17 = 2;
10605    while (1) {
10606     do {
10607      if ((i17 | 0) < (i19 | 0)) {
10608       i21 = i17 | 1;
10609       i22 = HEAP32[i4 + (i21 << 2) + 2908 >> 2] | 0;
10610       i19 = HEAP16[i3 + (i22 << 2) >> 1] | 0;
10611       i18 = HEAP32[i4 + (i17 << 2) + 2908 >> 2] | 0;
10612       i20 = HEAP16[i3 + (i18 << 2) >> 1] | 0;
10613       if (!((i19 & 65535) < (i20 & 65535))) {
10614        if (!(i19 << 16 >> 16 == i20 << 16 >> 16)) {
10615         break;
10616        }
10617        if ((HEAPU8[i4 + i22 + 5208 | 0] | 0) > (HEAPU8[i4 + i18 + 5208 | 0] | 0)) {
10618         break;
10619        }
10620       }
10621       i17 = i21;
10622      }
10623     } while (0);
10624     i19 = HEAP16[i14 >> 1] | 0;
10625     i20 = HEAP32[i4 + (i17 << 2) + 2908 >> 2] | 0;
10626     i18 = HEAP16[i3 + (i20 << 2) >> 1] | 0;
10627     if ((i19 & 65535) < (i18 & 65535)) {
10628      break L56;
10629     }
10630     if (i19 << 16 >> 16 == i18 << 16 >> 16 ? (HEAPU8[i15] | 0) <= (HEAPU8[i4 + i20 + 5208 | 0] | 0) : 0) {
10631      break L56;
10632     }
10633     HEAP32[i4 + (i16 << 2) + 2908 >> 2] = i20;
10634     i18 = i17 << 1;
10635     i19 = HEAP32[i8 >> 2] | 0;
10636     if ((i18 | 0) > (i19 | 0)) {
10637      i16 = i17;
10638      break;
10639     } else {
10640      i16 = i17;
10641      i17 = i18;
10642     }
10643    }
10644   }
10645  } while (0);
10646  HEAP32[i4 + (i16 << 2) + 2908 >> 2] = i11;
10647  i18 = HEAP32[i8 >> 2] | 0;
10648  if ((i18 | 0) > 1) {
10649   i11 = i13;
10650  } else {
10651   break;
10652  }
10653 }
10654 i12 = HEAP32[i12 >> 2] | 0;
10655 i8 = (HEAP32[i6 >> 2] | 0) + -1 | 0;
10656 HEAP32[i6 >> 2] = i8;
10657 HEAP32[i4 + (i8 << 2) + 2908 >> 2] = i12;
10658 i8 = HEAP32[i9 >> 2] | 0;
10659 i9 = HEAP32[i10 >> 2] | 0;
10660 i7 = HEAP32[i7 >> 2] | 0;
10661 i12 = HEAP32[i7 >> 2] | 0;
10662 i11 = HEAP32[i7 + 4 >> 2] | 0;
10663 i10 = HEAP32[i7 + 8 >> 2] | 0;
10664 i7 = HEAP32[i7 + 16 >> 2] | 0;
10665 i13 = i4 + 2876 | 0;
10666 i14 = i13 + 32 | 0;
10667 do {
10668  HEAP16[i13 >> 1] = 0;
10669  i13 = i13 + 2 | 0;
10670 } while ((i13 | 0) < (i14 | 0));
10671 i14 = HEAP32[i6 >> 2] | 0;
10672 HEAP16[i8 + (HEAP32[i4 + (i14 << 2) + 2908 >> 2] << 2) + 2 >> 1] = 0;
10673 i14 = i14 + 1 | 0;
10674 L72 : do {
10675  if ((i14 | 0) < 573) {
10676   i6 = i4 + 5800 | 0;
10677   i13 = i4 + 5804 | 0;
10678   if ((i12 | 0) == 0) {
10679    i18 = 0;
10680    do {
10681     i12 = HEAP32[i4 + (i14 << 2) + 2908 >> 2] | 0;
10682     i13 = i8 + (i12 << 2) + 2 | 0;
10683     i15 = HEAPU16[i8 + (HEAPU16[i13 >> 1] << 2) + 2 >> 1] | 0;
10684     i16 = (i15 | 0) < (i7 | 0);
10685     i15 = i16 ? i15 + 1 | 0 : i7;
10686     i18 = (i16 & 1 ^ 1) + i18 | 0;
10687     HEAP16[i13 >> 1] = i15;
10688     if ((i12 | 0) <= (i9 | 0)) {
10689      i23 = i4 + (i15 << 1) + 2876 | 0;
10690      HEAP16[i23 >> 1] = (HEAP16[i23 >> 1] | 0) + 1 << 16 >> 16;
10691      if ((i12 | 0) < (i10 | 0)) {
10692       i13 = 0;
10693      } else {
10694       i13 = HEAP32[i11 + (i12 - i10 << 2) >> 2] | 0;
10695      }
10696      i23 = Math_imul(HEAPU16[i8 + (i12 << 2) >> 1] | 0, i13 + i15 | 0) | 0;
10697      HEAP32[i6 >> 2] = i23 + (HEAP32[i6 >> 2] | 0);
10698     }
10699     i14 = i14 + 1 | 0;
10700    } while ((i14 | 0) != 573);
10701   } else {
10702    i18 = 0;
10703    do {
10704     i15 = HEAP32[i4 + (i14 << 2) + 2908 >> 2] | 0;
10705     i16 = i8 + (i15 << 2) + 2 | 0;
10706     i17 = HEAPU16[i8 + (HEAPU16[i16 >> 1] << 2) + 2 >> 1] | 0;
10707     i19 = (i17 | 0) < (i7 | 0);
10708     i17 = i19 ? i17 + 1 | 0 : i7;
10709     i18 = (i19 & 1 ^ 1) + i18 | 0;
10710     HEAP16[i16 >> 1] = i17;
10711     if ((i15 | 0) <= (i9 | 0)) {
10712      i23 = i4 + (i17 << 1) + 2876 | 0;
10713      HEAP16[i23 >> 1] = (HEAP16[i23 >> 1] | 0) + 1 << 16 >> 16;
10714      if ((i15 | 0) < (i10 | 0)) {
10715       i16 = 0;
10716      } else {
10717       i16 = HEAP32[i11 + (i15 - i10 << 2) >> 2] | 0;
10718      }
10719      i23 = HEAPU16[i8 + (i15 << 2) >> 1] | 0;
10720      i22 = Math_imul(i23, i16 + i17 | 0) | 0;
10721      HEAP32[i6 >> 2] = i22 + (HEAP32[i6 >> 2] | 0);
10722      i23 = Math_imul((HEAPU16[i12 + (i15 << 2) + 2 >> 1] | 0) + i16 | 0, i23) | 0;
10723      HEAP32[i13 >> 2] = i23 + (HEAP32[i13 >> 2] | 0);
10724     }
10725     i14 = i14 + 1 | 0;
10726    } while ((i14 | 0) != 573);
10727   }
10728   if ((i18 | 0) != 0) {
10729    i10 = i4 + (i7 << 1) + 2876 | 0;
10730    do {
10731     i12 = i7;
10732     while (1) {
10733      i11 = i12 + -1 | 0;
10734      i13 = i4 + (i11 << 1) + 2876 | 0;
10735      i14 = HEAP16[i13 >> 1] | 0;
10736      if (i14 << 16 >> 16 == 0) {
10737       i12 = i11;
10738      } else {
10739       break;
10740      }
10741     }
10742     HEAP16[i13 >> 1] = i14 + -1 << 16 >> 16;
10743     i11 = i4 + (i12 << 1) + 2876 | 0;
10744     HEAP16[i11 >> 1] = (HEAPU16[i11 >> 1] | 0) + 2;
10745     i11 = (HEAP16[i10 >> 1] | 0) + -1 << 16 >> 16;
10746     HEAP16[i10 >> 1] = i11;
10747     i18 = i18 + -2 | 0;
10748    } while ((i18 | 0) > 0);
10749    if ((i7 | 0) != 0) {
10750     i12 = 573;
10751     while (1) {
10752      i10 = i7 & 65535;
10753      if (!(i11 << 16 >> 16 == 0)) {
10754       i11 = i11 & 65535;
10755       do {
10756        do {
10757         i12 = i12 + -1 | 0;
10758         i15 = HEAP32[i4 + (i12 << 2) + 2908 >> 2] | 0;
10759        } while ((i15 | 0) > (i9 | 0));
10760        i13 = i8 + (i15 << 2) + 2 | 0;
10761        i14 = HEAPU16[i13 >> 1] | 0;
10762        if ((i14 | 0) != (i7 | 0)) {
10763         i23 = Math_imul(HEAPU16[i8 + (i15 << 2) >> 1] | 0, i7 - i14 | 0) | 0;
10764         HEAP32[i6 >> 2] = i23 + (HEAP32[i6 >> 2] | 0);
10765         HEAP16[i13 >> 1] = i10;
10766        }
10767        i11 = i11 + -1 | 0;
10768       } while ((i11 | 0) != 0);
10769      }
10770      i7 = i7 + -1 | 0;
10771      if ((i7 | 0) == 0) {
10772       break L72;
10773      }
10774      i11 = HEAP16[i4 + (i7 << 1) + 2876 >> 1] | 0;
10775     }
10776    }
10777   }
10778  }
10779 } while (0);
10780 i7 = 1;
10781 i6 = 0;
10782 do {
10783  i6 = (HEAPU16[i4 + (i7 + -1 << 1) + 2876 >> 1] | 0) + (i6 & 65534) << 1;
10784  HEAP16[i1 + (i7 << 1) >> 1] = i6;
10785  i7 = i7 + 1 | 0;
10786 } while ((i7 | 0) != 16);
10787 if ((i5 | 0) < 0) {
10788  STACKTOP = i2;
10789  return;
10790 } else {
10791  i4 = 0;
10792 }
10793 while (1) {
10794  i23 = HEAP16[i3 + (i4 << 2) + 2 >> 1] | 0;
10795  i7 = i23 & 65535;
10796  if (!(i23 << 16 >> 16 == 0)) {
10797   i8 = i1 + (i7 << 1) | 0;
10798   i6 = HEAP16[i8 >> 1] | 0;
10799   HEAP16[i8 >> 1] = i6 + 1 << 16 >> 16;
10800   i6 = i6 & 65535;
10801   i8 = 0;
10802   while (1) {
10803    i8 = i8 | i6 & 1;
10804    i7 = i7 + -1 | 0;
10805    if ((i7 | 0) <= 0) {
10806     break;
10807    } else {
10808     i6 = i6 >>> 1;
10809     i8 = i8 << 1;
10810    }
10811   }
10812   HEAP16[i3 + (i4 << 2) >> 1] = i8;
10813  }
10814  if ((i4 | 0) == (i5 | 0)) {
10815   break;
10816  } else {
10817   i4 = i4 + 1 | 0;
10818  }
10819 }
10820 STACKTOP = i2;
10821 return;
10822}
10823function _deflate_slow(i2, i6) {
10824 i2 = i2 | 0;
10825 i6 = i6 | 0;
10826 var i1 = 0, i3 = 0, i4 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0;
10827 i1 = STACKTOP;
10828 i15 = i2 + 116 | 0;
10829 i16 = (i6 | 0) == 0;
10830 i17 = i2 + 72 | 0;
10831 i18 = i2 + 88 | 0;
10832 i5 = i2 + 108 | 0;
10833 i7 = i2 + 56 | 0;
10834 i19 = i2 + 84 | 0;
10835 i20 = i2 + 68 | 0;
10836 i22 = i2 + 52 | 0;
10837 i21 = i2 + 64 | 0;
10838 i9 = i2 + 96 | 0;
10839 i10 = i2 + 120 | 0;
10840 i11 = i2 + 112 | 0;
10841 i12 = i2 + 100 | 0;
10842 i26 = i2 + 5792 | 0;
10843 i27 = i2 + 5796 | 0;
10844 i29 = i2 + 5784 | 0;
10845 i23 = i2 + 5788 | 0;
10846 i8 = i2 + 104 | 0;
10847 i4 = i2 + 92 | 0;
10848 i24 = i2 + 128 | 0;
10849 i14 = i2 + 44 | 0;
10850 i13 = i2 + 136 | 0;
10851 L1 : while (1) {
10852  i30 = HEAP32[i15 >> 2] | 0;
10853  while (1) {
10854   if (i30 >>> 0 < 262) {
10855    _fill_window(i2);
10856    i30 = HEAP32[i15 >> 2] | 0;
10857    if (i30 >>> 0 < 262 & i16) {
10858     i2 = 0;
10859     i30 = 50;
10860     break L1;
10861    }
10862    if ((i30 | 0) == 0) {
10863     i30 = 40;
10864     break L1;
10865    }
10866    if (!(i30 >>> 0 > 2)) {
10867     HEAP32[i10 >> 2] = HEAP32[i9 >> 2];
10868     HEAP32[i12 >> 2] = HEAP32[i11 >> 2];
10869     HEAP32[i9 >> 2] = 2;
10870     i32 = 2;
10871     i30 = 16;
10872    } else {
10873     i30 = 8;
10874    }
10875   } else {
10876    i30 = 8;
10877   }
10878   do {
10879    if ((i30 | 0) == 8) {
10880     i30 = 0;
10881     i34 = HEAP32[i5 >> 2] | 0;
10882     i31 = ((HEAPU8[(HEAP32[i7 >> 2] | 0) + (i34 + 2) | 0] | 0) ^ HEAP32[i17 >> 2] << HEAP32[i18 >> 2]) & HEAP32[i19 >> 2];
10883     HEAP32[i17 >> 2] = i31;
10884     i31 = (HEAP32[i20 >> 2] | 0) + (i31 << 1) | 0;
10885     i35 = HEAP16[i31 >> 1] | 0;
10886     HEAP16[(HEAP32[i21 >> 2] | 0) + ((HEAP32[i22 >> 2] & i34) << 1) >> 1] = i35;
10887     i32 = i35 & 65535;
10888     HEAP16[i31 >> 1] = i34;
10889     i31 = HEAP32[i9 >> 2] | 0;
10890     HEAP32[i10 >> 2] = i31;
10891     HEAP32[i12 >> 2] = HEAP32[i11 >> 2];
10892     HEAP32[i9 >> 2] = 2;
10893     if (!(i35 << 16 >> 16 == 0)) {
10894      if (i31 >>> 0 < (HEAP32[i24 >> 2] | 0) >>> 0) {
10895       if (!(((HEAP32[i5 >> 2] | 0) - i32 | 0) >>> 0 > ((HEAP32[i14 >> 2] | 0) + -262 | 0) >>> 0)) {
10896        i32 = _longest_match(i2, i32) | 0;
10897        HEAP32[i9 >> 2] = i32;
10898        if (i32 >>> 0 < 6) {
10899         if ((HEAP32[i13 >> 2] | 0) != 1) {
10900          if ((i32 | 0) != 3) {
10901           i30 = 16;
10902           break;
10903          }
10904          if (!(((HEAP32[i5 >> 2] | 0) - (HEAP32[i11 >> 2] | 0) | 0) >>> 0 > 4096)) {
10905           i32 = 3;
10906           i30 = 16;
10907           break;
10908          }
10909         }
10910         HEAP32[i9 >> 2] = 2;
10911         i32 = 2;
10912         i30 = 16;
10913        } else {
10914         i30 = 16;
10915        }
10916       } else {
10917        i32 = 2;
10918        i30 = 16;
10919       }
10920      } else {
10921       i32 = 2;
10922      }
10923     } else {
10924      i32 = 2;
10925      i30 = 16;
10926     }
10927    }
10928   } while (0);
10929   if ((i30 | 0) == 16) {
10930    i31 = HEAP32[i10 >> 2] | 0;
10931   }
10932   if (!(i31 >>> 0 < 3 | i32 >>> 0 > i31 >>> 0)) {
10933    break;
10934   }
10935   if ((HEAP32[i8 >> 2] | 0) == 0) {
10936    HEAP32[i8 >> 2] = 1;
10937    HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
10938    i30 = (HEAP32[i15 >> 2] | 0) + -1 | 0;
10939    HEAP32[i15 >> 2] = i30;
10940    continue;
10941   }
10942   i35 = HEAP8[(HEAP32[i7 >> 2] | 0) + ((HEAP32[i5 >> 2] | 0) + -1) | 0] | 0;
10943   i34 = HEAP32[i26 >> 2] | 0;
10944   HEAP16[(HEAP32[i27 >> 2] | 0) + (i34 << 1) >> 1] = 0;
10945   HEAP32[i26 >> 2] = i34 + 1;
10946   HEAP8[(HEAP32[i29 >> 2] | 0) + i34 | 0] = i35;
10947   i35 = i2 + ((i35 & 255) << 2) + 148 | 0;
10948   HEAP16[i35 >> 1] = (HEAP16[i35 >> 1] | 0) + 1 << 16 >> 16;
10949   if ((HEAP32[i26 >> 2] | 0) == ((HEAP32[i23 >> 2] | 0) + -1 | 0)) {
10950    i30 = HEAP32[i4 >> 2] | 0;
10951    if ((i30 | 0) > -1) {
10952     i31 = (HEAP32[i7 >> 2] | 0) + i30 | 0;
10953    } else {
10954     i31 = 0;
10955    }
10956    __tr_flush_block(i2, i31, (HEAP32[i5 >> 2] | 0) - i30 | 0, 0);
10957    HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
10958    i33 = HEAP32[i2 >> 2] | 0;
10959    i32 = i33 + 28 | 0;
10960    i30 = HEAP32[i32 >> 2] | 0;
10961    i35 = HEAP32[i30 + 20 >> 2] | 0;
10962    i31 = i33 + 16 | 0;
10963    i34 = HEAP32[i31 >> 2] | 0;
10964    i34 = i35 >>> 0 > i34 >>> 0 ? i34 : i35;
10965    if ((i34 | 0) != 0 ? (i28 = i33 + 12 | 0, _memcpy(HEAP32[i28 >> 2] | 0, HEAP32[i30 + 16 >> 2] | 0, i34 | 0) | 0, HEAP32[i28 >> 2] = (HEAP32[i28 >> 2] | 0) + i34, i28 = (HEAP32[i32 >> 2] | 0) + 16 | 0, HEAP32[i28 >> 2] = (HEAP32[i28 >> 2] | 0) + i34, i28 = i33 + 20 | 0, HEAP32[i28 >> 2] = (HEAP32[i28 >> 2] | 0) + i34, HEAP32[i31 >> 2] = (HEAP32[i31 >> 2] | 0) - i34, i28 = HEAP32[i32 >> 2] | 0, i33 = i28 + 20 | 0, i35 = HEAP32[i33 >> 2] | 0, HEAP32[i33 >> 2] = i35 - i34, (i35 | 0) == (i34 | 0)) : 0) {
10966     HEAP32[i28 + 16 >> 2] = HEAP32[i28 + 8 >> 2];
10967    }
10968   }
10969   HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
10970   i30 = (HEAP32[i15 >> 2] | 0) + -1 | 0;
10971   HEAP32[i15 >> 2] = i30;
10972   if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
10973    i2 = 0;
10974    i30 = 50;
10975    break L1;
10976   }
10977  }
10978  i34 = HEAP32[i5 >> 2] | 0;
10979  i30 = i34 + -3 + (HEAP32[i15 >> 2] | 0) | 0;
10980  i35 = i31 + 253 | 0;
10981  i31 = i34 + 65535 - (HEAP32[i12 >> 2] | 0) | 0;
10982  i34 = HEAP32[i26 >> 2] | 0;
10983  HEAP16[(HEAP32[i27 >> 2] | 0) + (i34 << 1) >> 1] = i31;
10984  HEAP32[i26 >> 2] = i34 + 1;
10985  HEAP8[(HEAP32[i29 >> 2] | 0) + i34 | 0] = i35;
10986  i35 = i2 + ((HEAPU8[808 + (i35 & 255) | 0] | 0 | 256) + 1 << 2) + 148 | 0;
10987  HEAP16[i35 >> 1] = (HEAP16[i35 >> 1] | 0) + 1 << 16 >> 16;
10988  i31 = i31 + 65535 & 65535;
10989  if (!(i31 >>> 0 < 256)) {
10990   i31 = (i31 >>> 7) + 256 | 0;
10991  }
10992  i32 = i2 + ((HEAPU8[296 + i31 | 0] | 0) << 2) + 2440 | 0;
10993  HEAP16[i32 >> 1] = (HEAP16[i32 >> 1] | 0) + 1 << 16 >> 16;
10994  i32 = HEAP32[i26 >> 2] | 0;
10995  i31 = (HEAP32[i23 >> 2] | 0) + -1 | 0;
10996  i34 = HEAP32[i10 >> 2] | 0;
10997  HEAP32[i15 >> 2] = 1 - i34 + (HEAP32[i15 >> 2] | 0);
10998  i34 = i34 + -2 | 0;
10999  HEAP32[i10 >> 2] = i34;
11000  i33 = HEAP32[i5 >> 2] | 0;
11001  while (1) {
11002   i35 = i33 + 1 | 0;
11003   HEAP32[i5 >> 2] = i35;
11004   if (!(i35 >>> 0 > i30 >>> 0)) {
11005    i36 = ((HEAPU8[(HEAP32[i7 >> 2] | 0) + (i33 + 3) | 0] | 0) ^ HEAP32[i17 >> 2] << HEAP32[i18 >> 2]) & HEAP32[i19 >> 2];
11006    HEAP32[i17 >> 2] = i36;
11007    i36 = (HEAP32[i20 >> 2] | 0) + (i36 << 1) | 0;
11008    HEAP16[(HEAP32[i21 >> 2] | 0) + ((HEAP32[i22 >> 2] & i35) << 1) >> 1] = HEAP16[i36 >> 1] | 0;
11009    HEAP16[i36 >> 1] = i35;
11010   }
11011   i34 = i34 + -1 | 0;
11012   HEAP32[i10 >> 2] = i34;
11013   if ((i34 | 0) == 0) {
11014    break;
11015   } else {
11016    i33 = i35;
11017   }
11018  }
11019  HEAP32[i8 >> 2] = 0;
11020  HEAP32[i9 >> 2] = 2;
11021  i30 = i33 + 2 | 0;
11022  HEAP32[i5 >> 2] = i30;
11023  if ((i32 | 0) != (i31 | 0)) {
11024   continue;
11025  }
11026  i32 = HEAP32[i4 >> 2] | 0;
11027  if ((i32 | 0) > -1) {
11028   i31 = (HEAP32[i7 >> 2] | 0) + i32 | 0;
11029  } else {
11030   i31 = 0;
11031  }
11032  __tr_flush_block(i2, i31, i30 - i32 | 0, 0);
11033  HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
11034  i33 = HEAP32[i2 >> 2] | 0;
11035  i31 = i33 + 28 | 0;
11036  i32 = HEAP32[i31 >> 2] | 0;
11037  i35 = HEAP32[i32 + 20 >> 2] | 0;
11038  i30 = i33 + 16 | 0;
11039  i34 = HEAP32[i30 >> 2] | 0;
11040  i34 = i35 >>> 0 > i34 >>> 0 ? i34 : i35;
11041  if ((i34 | 0) != 0 ? (i25 = i33 + 12 | 0, _memcpy(HEAP32[i25 >> 2] | 0, HEAP32[i32 + 16 >> 2] | 0, i34 | 0) | 0, HEAP32[i25 >> 2] = (HEAP32[i25 >> 2] | 0) + i34, i25 = (HEAP32[i31 >> 2] | 0) + 16 | 0, HEAP32[i25 >> 2] = (HEAP32[i25 >> 2] | 0) + i34, i25 = i33 + 20 | 0, HEAP32[i25 >> 2] = (HEAP32[i25 >> 2] | 0) + i34, HEAP32[i30 >> 2] = (HEAP32[i30 >> 2] | 0) - i34, i25 = HEAP32[i31 >> 2] | 0, i35 = i25 + 20 | 0, i36 = HEAP32[i35 >> 2] | 0, HEAP32[i35 >> 2] = i36 - i34, (i36 | 0) == (i34 | 0)) : 0) {
11042   HEAP32[i25 + 16 >> 2] = HEAP32[i25 + 8 >> 2];
11043  }
11044  if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
11045   i2 = 0;
11046   i30 = 50;
11047   break;
11048  }
11049 }
11050 if ((i30 | 0) == 40) {
11051  if ((HEAP32[i8 >> 2] | 0) != 0) {
11052   i36 = HEAP8[(HEAP32[i7 >> 2] | 0) + ((HEAP32[i5 >> 2] | 0) + -1) | 0] | 0;
11053   i35 = HEAP32[i26 >> 2] | 0;
11054   HEAP16[(HEAP32[i27 >> 2] | 0) + (i35 << 1) >> 1] = 0;
11055   HEAP32[i26 >> 2] = i35 + 1;
11056   HEAP8[(HEAP32[i29 >> 2] | 0) + i35 | 0] = i36;
11057   i36 = i2 + ((i36 & 255) << 2) + 148 | 0;
11058   HEAP16[i36 >> 1] = (HEAP16[i36 >> 1] | 0) + 1 << 16 >> 16;
11059   HEAP32[i8 >> 2] = 0;
11060  }
11061  i8 = HEAP32[i4 >> 2] | 0;
11062  if ((i8 | 0) > -1) {
11063   i7 = (HEAP32[i7 >> 2] | 0) + i8 | 0;
11064  } else {
11065   i7 = 0;
11066  }
11067  i6 = (i6 | 0) == 4;
11068  __tr_flush_block(i2, i7, (HEAP32[i5 >> 2] | 0) - i8 | 0, i6 & 1);
11069  HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
11070  i4 = HEAP32[i2 >> 2] | 0;
11071  i7 = i4 + 28 | 0;
11072  i5 = HEAP32[i7 >> 2] | 0;
11073  i10 = HEAP32[i5 + 20 >> 2] | 0;
11074  i8 = i4 + 16 | 0;
11075  i9 = HEAP32[i8 >> 2] | 0;
11076  i9 = i10 >>> 0 > i9 >>> 0 ? i9 : i10;
11077  if ((i9 | 0) != 0 ? (i3 = i4 + 12 | 0, _memcpy(HEAP32[i3 >> 2] | 0, HEAP32[i5 + 16 >> 2] | 0, i9 | 0) | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, i3 = (HEAP32[i7 >> 2] | 0) + 16 | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, i3 = i4 + 20 | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) - i9, i3 = HEAP32[i7 >> 2] | 0, i35 = i3 + 20 | 0, i36 = HEAP32[i35 >> 2] | 0, HEAP32[i35 >> 2] = i36 - i9, (i36 | 0) == (i9 | 0)) : 0) {
11078   HEAP32[i3 + 16 >> 2] = HEAP32[i3 + 8 >> 2];
11079  }
11080  if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
11081   i36 = i6 ? 2 : 0;
11082   STACKTOP = i1;
11083   return i36 | 0;
11084  } else {
11085   i36 = i6 ? 3 : 1;
11086   STACKTOP = i1;
11087   return i36 | 0;
11088  }
11089 } else if ((i30 | 0) == 50) {
11090  STACKTOP = i1;
11091  return i2 | 0;
11092 }
11093 return 0;
11094}
11095function _inflate_fast(i7, i19) {
11096 i7 = i7 | 0;
11097 i19 = i19 | 0;
11098 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0;
11099 i1 = STACKTOP;
11100 i11 = HEAP32[i7 + 28 >> 2] | 0;
11101 i29 = HEAP32[i7 >> 2] | 0;
11102 i5 = i7 + 4 | 0;
11103 i8 = i29 + ((HEAP32[i5 >> 2] | 0) + -6) | 0;
11104 i9 = i7 + 12 | 0;
11105 i28 = HEAP32[i9 >> 2] | 0;
11106 i4 = i7 + 16 | 0;
11107 i25 = HEAP32[i4 >> 2] | 0;
11108 i6 = i28 + (i25 + -258) | 0;
11109 i17 = HEAP32[i11 + 44 >> 2] | 0;
11110 i12 = HEAP32[i11 + 48 >> 2] | 0;
11111 i18 = HEAP32[i11 + 52 >> 2] | 0;
11112 i3 = i11 + 56 | 0;
11113 i2 = i11 + 60 | 0;
11114 i16 = HEAP32[i11 + 76 >> 2] | 0;
11115 i13 = HEAP32[i11 + 80 >> 2] | 0;
11116 i14 = (1 << HEAP32[i11 + 84 >> 2]) + -1 | 0;
11117 i15 = (1 << HEAP32[i11 + 88 >> 2]) + -1 | 0;
11118 i19 = i28 + (i25 + ~i19) | 0;
11119 i25 = i11 + 7104 | 0;
11120 i20 = i18 + -1 | 0;
11121 i27 = (i12 | 0) == 0;
11122 i24 = (HEAP32[i11 + 40 >> 2] | 0) + -1 | 0;
11123 i21 = i24 + i12 | 0;
11124 i22 = i12 + -1 | 0;
11125 i23 = i19 + -1 | 0;
11126 i26 = i19 - i12 | 0;
11127 i31 = HEAP32[i2 >> 2] | 0;
11128 i30 = HEAP32[i3 >> 2] | 0;
11129 i29 = i29 + -1 | 0;
11130 i28 = i28 + -1 | 0;
11131 L1 : do {
11132  if (i31 >>> 0 < 15) {
11133   i37 = i29 + 2 | 0;
11134   i33 = i31 + 16 | 0;
11135   i30 = ((HEAPU8[i29 + 1 | 0] | 0) << i31) + i30 + ((HEAPU8[i37] | 0) << i31 + 8) | 0;
11136   i29 = i37;
11137  } else {
11138   i33 = i31;
11139  }
11140  i31 = i30 & i14;
11141  i34 = HEAP8[i16 + (i31 << 2) | 0] | 0;
11142  i32 = HEAP16[i16 + (i31 << 2) + 2 >> 1] | 0;
11143  i31 = HEAPU8[i16 + (i31 << 2) + 1 | 0] | 0;
11144  i30 = i30 >>> i31;
11145  i31 = i33 - i31 | 0;
11146  do {
11147   if (!(i34 << 24 >> 24 == 0)) {
11148    i33 = i34 & 255;
11149    while (1) {
11150     if ((i33 & 16 | 0) != 0) {
11151      break;
11152     }
11153     if ((i33 & 64 | 0) != 0) {
11154      i10 = 55;
11155      break L1;
11156     }
11157     i37 = (i30 & (1 << i33) + -1) + (i32 & 65535) | 0;
11158     i33 = HEAP8[i16 + (i37 << 2) | 0] | 0;
11159     i32 = HEAP16[i16 + (i37 << 2) + 2 >> 1] | 0;
11160     i37 = HEAPU8[i16 + (i37 << 2) + 1 | 0] | 0;
11161     i30 = i30 >>> i37;
11162     i31 = i31 - i37 | 0;
11163     if (i33 << 24 >> 24 == 0) {
11164      i10 = 6;
11165      break;
11166     } else {
11167      i33 = i33 & 255;
11168     }
11169    }
11170    if ((i10 | 0) == 6) {
11171     i32 = i32 & 255;
11172     i10 = 7;
11173     break;
11174    }
11175    i32 = i32 & 65535;
11176    i33 = i33 & 15;
11177    if ((i33 | 0) != 0) {
11178     if (i31 >>> 0 < i33 >>> 0) {
11179      i29 = i29 + 1 | 0;
11180      i35 = i31 + 8 | 0;
11181      i34 = ((HEAPU8[i29] | 0) << i31) + i30 | 0;
11182     } else {
11183      i35 = i31;
11184      i34 = i30;
11185     }
11186     i31 = i35 - i33 | 0;
11187     i30 = i34 >>> i33;
11188     i32 = (i34 & (1 << i33) + -1) + i32 | 0;
11189    }
11190    if (i31 >>> 0 < 15) {
11191     i37 = i29 + 2 | 0;
11192     i34 = i31 + 16 | 0;
11193     i30 = ((HEAPU8[i29 + 1 | 0] | 0) << i31) + i30 + ((HEAPU8[i37] | 0) << i31 + 8) | 0;
11194     i29 = i37;
11195    } else {
11196     i34 = i31;
11197    }
11198    i37 = i30 & i15;
11199    i33 = HEAP16[i13 + (i37 << 2) + 2 >> 1] | 0;
11200    i31 = HEAPU8[i13 + (i37 << 2) + 1 | 0] | 0;
11201    i30 = i30 >>> i31;
11202    i31 = i34 - i31 | 0;
11203    i34 = HEAPU8[i13 + (i37 << 2) | 0] | 0;
11204    if ((i34 & 16 | 0) == 0) {
11205     do {
11206      if ((i34 & 64 | 0) != 0) {
11207       i10 = 52;
11208       break L1;
11209      }
11210      i34 = (i30 & (1 << i34) + -1) + (i33 & 65535) | 0;
11211      i33 = HEAP16[i13 + (i34 << 2) + 2 >> 1] | 0;
11212      i37 = HEAPU8[i13 + (i34 << 2) + 1 | 0] | 0;
11213      i30 = i30 >>> i37;
11214      i31 = i31 - i37 | 0;
11215      i34 = HEAPU8[i13 + (i34 << 2) | 0] | 0;
11216     } while ((i34 & 16 | 0) == 0);
11217    }
11218    i33 = i33 & 65535;
11219    i34 = i34 & 15;
11220    if (i31 >>> 0 < i34 >>> 0) {
11221     i35 = i29 + 1 | 0;
11222     i30 = ((HEAPU8[i35] | 0) << i31) + i30 | 0;
11223     i36 = i31 + 8 | 0;
11224     if (i36 >>> 0 < i34 >>> 0) {
11225      i29 = i29 + 2 | 0;
11226      i31 = i31 + 16 | 0;
11227      i30 = ((HEAPU8[i29] | 0) << i36) + i30 | 0;
11228     } else {
11229      i31 = i36;
11230      i29 = i35;
11231     }
11232    }
11233    i33 = (i30 & (1 << i34) + -1) + i33 | 0;
11234    i30 = i30 >>> i34;
11235    i31 = i31 - i34 | 0;
11236    i35 = i28;
11237    i34 = i35 - i19 | 0;
11238    if (!(i33 >>> 0 > i34 >>> 0)) {
11239     i34 = i28 + (0 - i33) | 0;
11240     while (1) {
11241      HEAP8[i28 + 1 | 0] = HEAP8[i34 + 1 | 0] | 0;
11242      HEAP8[i28 + 2 | 0] = HEAP8[i34 + 2 | 0] | 0;
11243      i35 = i34 + 3 | 0;
11244      i33 = i28 + 3 | 0;
11245      HEAP8[i33] = HEAP8[i35] | 0;
11246      i32 = i32 + -3 | 0;
11247      if (!(i32 >>> 0 > 2)) {
11248       break;
11249      } else {
11250       i34 = i35;
11251       i28 = i33;
11252      }
11253     }
11254     if ((i32 | 0) == 0) {
11255      i28 = i33;
11256      break;
11257     }
11258     i33 = i28 + 4 | 0;
11259     HEAP8[i33] = HEAP8[i34 + 4 | 0] | 0;
11260     if (!(i32 >>> 0 > 1)) {
11261      i28 = i33;
11262      break;
11263     }
11264     i28 = i28 + 5 | 0;
11265     HEAP8[i28] = HEAP8[i34 + 5 | 0] | 0;
11266     break;
11267    }
11268    i34 = i33 - i34 | 0;
11269    if (i34 >>> 0 > i17 >>> 0 ? (HEAP32[i25 >> 2] | 0) != 0 : 0) {
11270     i10 = 22;
11271     break L1;
11272    }
11273    do {
11274     if (i27) {
11275      i36 = i18 + (i24 - i34) | 0;
11276      if (i34 >>> 0 < i32 >>> 0) {
11277       i32 = i32 - i34 | 0;
11278       i35 = i33 - i35 | 0;
11279       i37 = i28;
11280       do {
11281        i36 = i36 + 1 | 0;
11282        i37 = i37 + 1 | 0;
11283        HEAP8[i37] = HEAP8[i36] | 0;
11284        i34 = i34 + -1 | 0;
11285       } while ((i34 | 0) != 0);
11286       i33 = i28 + (i23 + i35 + (1 - i33)) | 0;
11287       i28 = i28 + (i19 + i35) | 0;
11288      } else {
11289       i33 = i36;
11290      }
11291     } else {
11292      if (!(i12 >>> 0 < i34 >>> 0)) {
11293       i36 = i18 + (i22 - i34) | 0;
11294       if (!(i34 >>> 0 < i32 >>> 0)) {
11295        i33 = i36;
11296        break;
11297       }
11298       i32 = i32 - i34 | 0;
11299       i35 = i33 - i35 | 0;
11300       i37 = i28;
11301       do {
11302        i36 = i36 + 1 | 0;
11303        i37 = i37 + 1 | 0;
11304        HEAP8[i37] = HEAP8[i36] | 0;
11305        i34 = i34 + -1 | 0;
11306       } while ((i34 | 0) != 0);
11307       i33 = i28 + (i23 + i35 + (1 - i33)) | 0;
11308       i28 = i28 + (i19 + i35) | 0;
11309       break;
11310      }
11311      i37 = i18 + (i21 - i34) | 0;
11312      i36 = i34 - i12 | 0;
11313      if (i36 >>> 0 < i32 >>> 0) {
11314       i32 = i32 - i36 | 0;
11315       i34 = i33 - i35 | 0;
11316       i35 = i28;
11317       do {
11318        i37 = i37 + 1 | 0;
11319        i35 = i35 + 1 | 0;
11320        HEAP8[i35] = HEAP8[i37] | 0;
11321        i36 = i36 + -1 | 0;
11322       } while ((i36 | 0) != 0);
11323       i35 = i28 + (i26 + i34) | 0;
11324       if (i12 >>> 0 < i32 >>> 0) {
11325        i32 = i32 - i12 | 0;
11326        i37 = i20;
11327        i36 = i12;
11328        do {
11329         i37 = i37 + 1 | 0;
11330         i35 = i35 + 1 | 0;
11331         HEAP8[i35] = HEAP8[i37] | 0;
11332         i36 = i36 + -1 | 0;
11333        } while ((i36 | 0) != 0);
11334        i33 = i28 + (i23 + i34 + (1 - i33)) | 0;
11335        i28 = i28 + (i19 + i34) | 0;
11336       } else {
11337        i33 = i20;
11338        i28 = i35;
11339       }
11340      } else {
11341       i33 = i37;
11342      }
11343     }
11344    } while (0);
11345    if (i32 >>> 0 > 2) {
11346     do {
11347      HEAP8[i28 + 1 | 0] = HEAP8[i33 + 1 | 0] | 0;
11348      HEAP8[i28 + 2 | 0] = HEAP8[i33 + 2 | 0] | 0;
11349      i33 = i33 + 3 | 0;
11350      i28 = i28 + 3 | 0;
11351      HEAP8[i28] = HEAP8[i33] | 0;
11352      i32 = i32 + -3 | 0;
11353     } while (i32 >>> 0 > 2);
11354    }
11355    if ((i32 | 0) != 0) {
11356     i34 = i28 + 1 | 0;
11357     HEAP8[i34] = HEAP8[i33 + 1 | 0] | 0;
11358     if (i32 >>> 0 > 1) {
11359      i28 = i28 + 2 | 0;
11360      HEAP8[i28] = HEAP8[i33 + 2 | 0] | 0;
11361     } else {
11362      i28 = i34;
11363     }
11364    }
11365   } else {
11366    i32 = i32 & 255;
11367    i10 = 7;
11368   }
11369  } while (0);
11370  if ((i10 | 0) == 7) {
11371   i10 = 0;
11372   i28 = i28 + 1 | 0;
11373   HEAP8[i28] = i32;
11374  }
11375 } while (i29 >>> 0 < i8 >>> 0 & i28 >>> 0 < i6 >>> 0);
11376 do {
11377  if ((i10 | 0) == 22) {
11378   HEAP32[i7 + 24 >> 2] = 14384;
11379   HEAP32[i11 >> 2] = 29;
11380  } else if ((i10 | 0) == 52) {
11381   HEAP32[i7 + 24 >> 2] = 14416;
11382   HEAP32[i11 >> 2] = 29;
11383  } else if ((i10 | 0) == 55) {
11384   if ((i33 & 32 | 0) == 0) {
11385    HEAP32[i7 + 24 >> 2] = 14440;
11386    HEAP32[i11 >> 2] = 29;
11387    break;
11388   } else {
11389    HEAP32[i11 >> 2] = 11;
11390    break;
11391   }
11392  }
11393 } while (0);
11394 i37 = i31 >>> 3;
11395 i11 = i29 + (0 - i37) | 0;
11396 i10 = i31 - (i37 << 3) | 0;
11397 i12 = (1 << i10) + -1 & i30;
11398 HEAP32[i7 >> 2] = i29 + (1 - i37);
11399 HEAP32[i9 >> 2] = i28 + 1;
11400 if (i11 >>> 0 < i8 >>> 0) {
11401  i7 = i8 - i11 | 0;
11402 } else {
11403  i7 = i8 - i11 | 0;
11404 }
11405 HEAP32[i5 >> 2] = i7 + 5;
11406 if (i28 >>> 0 < i6 >>> 0) {
11407  i37 = i6 - i28 | 0;
11408  i37 = i37 + 257 | 0;
11409  HEAP32[i4 >> 2] = i37;
11410  HEAP32[i3 >> 2] = i12;
11411  HEAP32[i2 >> 2] = i10;
11412  STACKTOP = i1;
11413  return;
11414 } else {
11415  i37 = i6 - i28 | 0;
11416  i37 = i37 + 257 | 0;
11417  HEAP32[i4 >> 2] = i37;
11418  HEAP32[i3 >> 2] = i12;
11419  HEAP32[i2 >> 2] = i10;
11420  STACKTOP = i1;
11421  return;
11422 }
11423}
11424function _send_tree(i2, i13, i12) {
11425 i2 = i2 | 0;
11426 i13 = i13 | 0;
11427 i12 = i12 | 0;
11428 var i1 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0;
11429 i11 = STACKTOP;
11430 i15 = HEAP16[i13 + 2 >> 1] | 0;
11431 i16 = i15 << 16 >> 16 == 0;
11432 i7 = i2 + 2754 | 0;
11433 i4 = i2 + 5820 | 0;
11434 i8 = i2 + 2752 | 0;
11435 i3 = i2 + 5816 | 0;
11436 i14 = i2 + 20 | 0;
11437 i10 = i2 + 8 | 0;
11438 i9 = i2 + 2758 | 0;
11439 i1 = i2 + 2756 | 0;
11440 i5 = i2 + 2750 | 0;
11441 i6 = i2 + 2748 | 0;
11442 i21 = i16 ? 138 : 7;
11443 i23 = i16 ? 3 : 4;
11444 i18 = 0;
11445 i15 = i15 & 65535;
11446 i24 = -1;
11447 L1 : while (1) {
11448  i20 = 0;
11449  while (1) {
11450   if ((i18 | 0) > (i12 | 0)) {
11451    break L1;
11452   }
11453   i18 = i18 + 1 | 0;
11454   i19 = HEAP16[i13 + (i18 << 2) + 2 >> 1] | 0;
11455   i16 = i19 & 65535;
11456   i22 = i20 + 1 | 0;
11457   i17 = (i15 | 0) == (i16 | 0);
11458   if (!((i22 | 0) < (i21 | 0) & i17)) {
11459    break;
11460   } else {
11461    i20 = i22;
11462   }
11463  }
11464  do {
11465   if ((i22 | 0) >= (i23 | 0)) {
11466    if ((i15 | 0) != 0) {
11467     if ((i15 | 0) == (i24 | 0)) {
11468      i23 = HEAP16[i3 >> 1] | 0;
11469      i21 = HEAP32[i4 >> 2] | 0;
11470      i20 = i22;
11471     } else {
11472      i22 = HEAPU16[i2 + (i15 << 2) + 2686 >> 1] | 0;
11473      i21 = HEAP32[i4 >> 2] | 0;
11474      i24 = HEAPU16[i2 + (i15 << 2) + 2684 >> 1] | 0;
11475      i25 = HEAPU16[i3 >> 1] | 0 | i24 << i21;
11476      i23 = i25 & 65535;
11477      HEAP16[i3 >> 1] = i23;
11478      if ((i21 | 0) > (16 - i22 | 0)) {
11479       i23 = HEAP32[i14 >> 2] | 0;
11480       HEAP32[i14 >> 2] = i23 + 1;
11481       HEAP8[(HEAP32[i10 >> 2] | 0) + i23 | 0] = i25;
11482       i23 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11483       i21 = HEAP32[i14 >> 2] | 0;
11484       HEAP32[i14 >> 2] = i21 + 1;
11485       HEAP8[(HEAP32[i10 >> 2] | 0) + i21 | 0] = i23;
11486       i21 = HEAP32[i4 >> 2] | 0;
11487       i23 = i24 >>> (16 - i21 | 0) & 65535;
11488       HEAP16[i3 >> 1] = i23;
11489       i21 = i22 + -16 + i21 | 0;
11490      } else {
11491       i21 = i21 + i22 | 0;
11492      }
11493      HEAP32[i4 >> 2] = i21;
11494     }
11495     i22 = HEAPU16[i5 >> 1] | 0;
11496     i24 = HEAPU16[i6 >> 1] | 0;
11497     i23 = i23 & 65535 | i24 << i21;
11498     HEAP16[i3 >> 1] = i23;
11499     if ((i21 | 0) > (16 - i22 | 0)) {
11500      i21 = HEAP32[i14 >> 2] | 0;
11501      HEAP32[i14 >> 2] = i21 + 1;
11502      HEAP8[(HEAP32[i10 >> 2] | 0) + i21 | 0] = i23;
11503      i23 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11504      i21 = HEAP32[i14 >> 2] | 0;
11505      HEAP32[i14 >> 2] = i21 + 1;
11506      HEAP8[(HEAP32[i10 >> 2] | 0) + i21 | 0] = i23;
11507      i21 = HEAP32[i4 >> 2] | 0;
11508      i23 = i24 >>> (16 - i21 | 0);
11509      HEAP16[i3 >> 1] = i23;
11510      i21 = i22 + -16 + i21 | 0;
11511     } else {
11512      i21 = i21 + i22 | 0;
11513     }
11514     HEAP32[i4 >> 2] = i21;
11515     i20 = i20 + 65533 & 65535;
11516     i22 = i23 & 65535 | i20 << i21;
11517     HEAP16[i3 >> 1] = i22;
11518     if ((i21 | 0) > 14) {
11519      i26 = HEAP32[i14 >> 2] | 0;
11520      HEAP32[i14 >> 2] = i26 + 1;
11521      HEAP8[(HEAP32[i10 >> 2] | 0) + i26 | 0] = i22;
11522      i26 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11523      i27 = HEAP32[i14 >> 2] | 0;
11524      HEAP32[i14 >> 2] = i27 + 1;
11525      HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i26;
11526      i27 = HEAP32[i4 >> 2] | 0;
11527      HEAP16[i3 >> 1] = i20 >>> (16 - i27 | 0);
11528      HEAP32[i4 >> 2] = i27 + -14;
11529      break;
11530     } else {
11531      HEAP32[i4 >> 2] = i21 + 2;
11532      break;
11533     }
11534    }
11535    if ((i22 | 0) < 11) {
11536     i24 = HEAPU16[i7 >> 1] | 0;
11537     i23 = HEAP32[i4 >> 2] | 0;
11538     i21 = HEAPU16[i8 >> 1] | 0;
11539     i22 = HEAPU16[i3 >> 1] | 0 | i21 << i23;
11540     HEAP16[i3 >> 1] = i22;
11541     if ((i23 | 0) > (16 - i24 | 0)) {
11542      i27 = HEAP32[i14 >> 2] | 0;
11543      HEAP32[i14 >> 2] = i27 + 1;
11544      HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i22;
11545      i22 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11546      i27 = HEAP32[i14 >> 2] | 0;
11547      HEAP32[i14 >> 2] = i27 + 1;
11548      HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i22;
11549      i27 = HEAP32[i4 >> 2] | 0;
11550      i22 = i21 >>> (16 - i27 | 0);
11551      HEAP16[i3 >> 1] = i22;
11552      i21 = i24 + -16 + i27 | 0;
11553     } else {
11554      i21 = i23 + i24 | 0;
11555     }
11556     HEAP32[i4 >> 2] = i21;
11557     i20 = i20 + 65534 & 65535;
11558     i22 = i22 & 65535 | i20 << i21;
11559     HEAP16[i3 >> 1] = i22;
11560     if ((i21 | 0) > 13) {
11561      i26 = HEAP32[i14 >> 2] | 0;
11562      HEAP32[i14 >> 2] = i26 + 1;
11563      HEAP8[(HEAP32[i10 >> 2] | 0) + i26 | 0] = i22;
11564      i26 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11565      i27 = HEAP32[i14 >> 2] | 0;
11566      HEAP32[i14 >> 2] = i27 + 1;
11567      HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i26;
11568      i27 = HEAP32[i4 >> 2] | 0;
11569      HEAP16[i3 >> 1] = i20 >>> (16 - i27 | 0);
11570      HEAP32[i4 >> 2] = i27 + -13;
11571      break;
11572     } else {
11573      HEAP32[i4 >> 2] = i21 + 3;
11574      break;
11575     }
11576    } else {
11577     i21 = HEAPU16[i9 >> 1] | 0;
11578     i24 = HEAP32[i4 >> 2] | 0;
11579     i23 = HEAPU16[i1 >> 1] | 0;
11580     i22 = HEAPU16[i3 >> 1] | 0 | i23 << i24;
11581     HEAP16[i3 >> 1] = i22;
11582     if ((i24 | 0) > (16 - i21 | 0)) {
11583      i27 = HEAP32[i14 >> 2] | 0;
11584      HEAP32[i14 >> 2] = i27 + 1;
11585      HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i22;
11586      i22 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11587      i27 = HEAP32[i14 >> 2] | 0;
11588      HEAP32[i14 >> 2] = i27 + 1;
11589      HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i22;
11590      i27 = HEAP32[i4 >> 2] | 0;
11591      i22 = i23 >>> (16 - i27 | 0);
11592      HEAP16[i3 >> 1] = i22;
11593      i21 = i21 + -16 + i27 | 0;
11594     } else {
11595      i21 = i24 + i21 | 0;
11596     }
11597     HEAP32[i4 >> 2] = i21;
11598     i20 = i20 + 65526 & 65535;
11599     i22 = i22 & 65535 | i20 << i21;
11600     HEAP16[i3 >> 1] = i22;
11601     if ((i21 | 0) > 9) {
11602      i26 = HEAP32[i14 >> 2] | 0;
11603      HEAP32[i14 >> 2] = i26 + 1;
11604      HEAP8[(HEAP32[i10 >> 2] | 0) + i26 | 0] = i22;
11605      i26 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11606      i27 = HEAP32[i14 >> 2] | 0;
11607      HEAP32[i14 >> 2] = i27 + 1;
11608      HEAP8[(HEAP32[i10 >> 2] | 0) + i27 | 0] = i26;
11609      i27 = HEAP32[i4 >> 2] | 0;
11610      HEAP16[i3 >> 1] = i20 >>> (16 - i27 | 0);
11611      HEAP32[i4 >> 2] = i27 + -9;
11612      break;
11613     } else {
11614      HEAP32[i4 >> 2] = i21 + 7;
11615      break;
11616     }
11617    }
11618   } else {
11619    i20 = i2 + (i15 << 2) + 2686 | 0;
11620    i21 = i2 + (i15 << 2) + 2684 | 0;
11621    i23 = HEAP32[i4 >> 2] | 0;
11622    i26 = HEAP16[i3 >> 1] | 0;
11623    do {
11624     i24 = HEAPU16[i20 >> 1] | 0;
11625     i25 = HEAPU16[i21 >> 1] | 0;
11626     i27 = i26 & 65535 | i25 << i23;
11627     i26 = i27 & 65535;
11628     HEAP16[i3 >> 1] = i26;
11629     if ((i23 | 0) > (16 - i24 | 0)) {
11630      i26 = HEAP32[i14 >> 2] | 0;
11631      HEAP32[i14 >> 2] = i26 + 1;
11632      HEAP8[(HEAP32[i10 >> 2] | 0) + i26 | 0] = i27;
11633      i26 = (HEAPU16[i3 >> 1] | 0) >>> 8 & 255;
11634      i23 = HEAP32[i14 >> 2] | 0;
11635      HEAP32[i14 >> 2] = i23 + 1;
11636      HEAP8[(HEAP32[i10 >> 2] | 0) + i23 | 0] = i26;
11637      i23 = HEAP32[i4 >> 2] | 0;
11638      i26 = i25 >>> (16 - i23 | 0) & 65535;
11639      HEAP16[i3 >> 1] = i26;
11640      i23 = i24 + -16 + i23 | 0;
11641     } else {
11642      i23 = i23 + i24 | 0;
11643     }
11644     HEAP32[i4 >> 2] = i23;
11645     i22 = i22 + -1 | 0;
11646    } while ((i22 | 0) != 0);
11647   }
11648  } while (0);
11649  if (i19 << 16 >> 16 == 0) {
11650   i24 = i15;
11651   i21 = 138;
11652   i23 = 3;
11653   i15 = i16;
11654   continue;
11655  }
11656  i24 = i15;
11657  i21 = i17 ? 6 : 7;
11658  i23 = i17 ? 3 : 4;
11659  i15 = i16;
11660 }
11661 STACKTOP = i11;
11662 return;
11663}
11664function __tr_flush_block(i2, i4, i6, i3) {
11665 i2 = i2 | 0;
11666 i4 = i4 | 0;
11667 i6 = i6 | 0;
11668 i3 = i3 | 0;
11669 var i1 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0;
11670 i1 = STACKTOP;
11671 if ((HEAP32[i2 + 132 >> 2] | 0) > 0) {
11672  i5 = (HEAP32[i2 >> 2] | 0) + 44 | 0;
11673  if ((HEAP32[i5 >> 2] | 0) == 2) {
11674   i8 = -201342849;
11675   i9 = 0;
11676   while (1) {
11677    if ((i8 & 1 | 0) != 0 ? (HEAP16[i2 + (i9 << 2) + 148 >> 1] | 0) != 0 : 0) {
11678     i8 = 0;
11679     break;
11680    }
11681    i9 = i9 + 1 | 0;
11682    if ((i9 | 0) < 32) {
11683     i8 = i8 >>> 1;
11684    } else {
11685     i7 = 6;
11686     break;
11687    }
11688   }
11689   L9 : do {
11690    if ((i7 | 0) == 6) {
11691     if (((HEAP16[i2 + 184 >> 1] | 0) == 0 ? (HEAP16[i2 + 188 >> 1] | 0) == 0 : 0) ? (HEAP16[i2 + 200 >> 1] | 0) == 0 : 0) {
11692      i8 = 32;
11693      while (1) {
11694       i7 = i8 + 1 | 0;
11695       if ((HEAP16[i2 + (i8 << 2) + 148 >> 1] | 0) != 0) {
11696        i8 = 1;
11697        break L9;
11698       }
11699       if ((i7 | 0) < 256) {
11700        i8 = i7;
11701       } else {
11702        i8 = 0;
11703        break;
11704       }
11705      }
11706     } else {
11707      i8 = 1;
11708     }
11709    }
11710   } while (0);
11711   HEAP32[i5 >> 2] = i8;
11712  }
11713  _build_tree(i2, i2 + 2840 | 0);
11714  _build_tree(i2, i2 + 2852 | 0);
11715  _scan_tree(i2, i2 + 148 | 0, HEAP32[i2 + 2844 >> 2] | 0);
11716  _scan_tree(i2, i2 + 2440 | 0, HEAP32[i2 + 2856 >> 2] | 0);
11717  _build_tree(i2, i2 + 2864 | 0);
11718  i5 = 18;
11719  while (1) {
11720   i7 = i5 + -1 | 0;
11721   if ((HEAP16[i2 + (HEAPU8[2888 + i5 | 0] << 2) + 2686 >> 1] | 0) != 0) {
11722    break;
11723   }
11724   if ((i7 | 0) > 2) {
11725    i5 = i7;
11726   } else {
11727    i5 = i7;
11728    break;
11729   }
11730  }
11731  i10 = i2 + 5800 | 0;
11732  i7 = (i5 * 3 | 0) + 17 + (HEAP32[i10 >> 2] | 0) | 0;
11733  HEAP32[i10 >> 2] = i7;
11734  i7 = (i7 + 10 | 0) >>> 3;
11735  i10 = ((HEAP32[i2 + 5804 >> 2] | 0) + 10 | 0) >>> 3;
11736  i9 = i10 >>> 0 > i7 >>> 0 ? i7 : i10;
11737 } else {
11738  i10 = i6 + 5 | 0;
11739  i5 = 0;
11740  i9 = i10;
11741 }
11742 do {
11743  if ((i6 + 4 | 0) >>> 0 > i9 >>> 0 | (i4 | 0) == 0) {
11744   i4 = i2 + 5820 | 0;
11745   i7 = HEAP32[i4 >> 2] | 0;
11746   i8 = (i7 | 0) > 13;
11747   if ((HEAP32[i2 + 136 >> 2] | 0) == 4 | (i10 | 0) == (i9 | 0)) {
11748    i9 = i3 + 2 & 65535;
11749    i6 = i2 + 5816 | 0;
11750    i5 = HEAPU16[i6 >> 1] | i9 << i7;
11751    HEAP16[i6 >> 1] = i5;
11752    if (i8) {
11753     i12 = i2 + 20 | 0;
11754     i13 = HEAP32[i12 >> 2] | 0;
11755     HEAP32[i12 >> 2] = i13 + 1;
11756     i14 = i2 + 8 | 0;
11757     HEAP8[(HEAP32[i14 >> 2] | 0) + i13 | 0] = i5;
11758     i13 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11759     i5 = HEAP32[i12 >> 2] | 0;
11760     HEAP32[i12 >> 2] = i5 + 1;
11761     HEAP8[(HEAP32[i14 >> 2] | 0) + i5 | 0] = i13;
11762     i5 = HEAP32[i4 >> 2] | 0;
11763     HEAP16[i6 >> 1] = i9 >>> (16 - i5 | 0);
11764     i5 = i5 + -13 | 0;
11765    } else {
11766     i5 = i7 + 3 | 0;
11767    }
11768    HEAP32[i4 >> 2] = i5;
11769    _compress_block(i2, 1136, 2288);
11770    break;
11771   }
11772   i10 = i3 + 4 & 65535;
11773   i6 = i2 + 5816 | 0;
11774   i9 = HEAPU16[i6 >> 1] | i10 << i7;
11775   HEAP16[i6 >> 1] = i9;
11776   if (i8) {
11777    i13 = i2 + 20 | 0;
11778    i12 = HEAP32[i13 >> 2] | 0;
11779    HEAP32[i13 >> 2] = i12 + 1;
11780    i14 = i2 + 8 | 0;
11781    HEAP8[(HEAP32[i14 >> 2] | 0) + i12 | 0] = i9;
11782    i9 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11783    i12 = HEAP32[i13 >> 2] | 0;
11784    HEAP32[i13 >> 2] = i12 + 1;
11785    HEAP8[(HEAP32[i14 >> 2] | 0) + i12 | 0] = i9;
11786    i12 = HEAP32[i4 >> 2] | 0;
11787    i9 = i10 >>> (16 - i12 | 0);
11788    HEAP16[i6 >> 1] = i9;
11789    i12 = i12 + -13 | 0;
11790   } else {
11791    i12 = i7 + 3 | 0;
11792   }
11793   HEAP32[i4 >> 2] = i12;
11794   i7 = HEAP32[i2 + 2844 >> 2] | 0;
11795   i8 = HEAP32[i2 + 2856 >> 2] | 0;
11796   i10 = i7 + 65280 & 65535;
11797   i11 = i9 & 65535 | i10 << i12;
11798   HEAP16[i6 >> 1] = i11;
11799   if ((i12 | 0) > 11) {
11800    i13 = i2 + 20 | 0;
11801    i9 = HEAP32[i13 >> 2] | 0;
11802    HEAP32[i13 >> 2] = i9 + 1;
11803    i14 = i2 + 8 | 0;
11804    HEAP8[(HEAP32[i14 >> 2] | 0) + i9 | 0] = i11;
11805    i11 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11806    i9 = HEAP32[i13 >> 2] | 0;
11807    HEAP32[i13 >> 2] = i9 + 1;
11808    HEAP8[(HEAP32[i14 >> 2] | 0) + i9 | 0] = i11;
11809    i9 = HEAP32[i4 >> 2] | 0;
11810    i11 = i10 >>> (16 - i9 | 0);
11811    HEAP16[i6 >> 1] = i11;
11812    i9 = i9 + -11 | 0;
11813   } else {
11814    i9 = i12 + 5 | 0;
11815   }
11816   HEAP32[i4 >> 2] = i9;
11817   i10 = i8 & 65535;
11818   i11 = i10 << i9 | i11 & 65535;
11819   HEAP16[i6 >> 1] = i11;
11820   if ((i9 | 0) > 11) {
11821    i13 = i2 + 20 | 0;
11822    i9 = HEAP32[i13 >> 2] | 0;
11823    HEAP32[i13 >> 2] = i9 + 1;
11824    i14 = i2 + 8 | 0;
11825    HEAP8[(HEAP32[i14 >> 2] | 0) + i9 | 0] = i11;
11826    i11 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11827    i9 = HEAP32[i13 >> 2] | 0;
11828    HEAP32[i13 >> 2] = i9 + 1;
11829    HEAP8[(HEAP32[i14 >> 2] | 0) + i9 | 0] = i11;
11830    i9 = HEAP32[i4 >> 2] | 0;
11831    i11 = i10 >>> (16 - i9 | 0);
11832    HEAP16[i6 >> 1] = i11;
11833    i9 = i9 + -11 | 0;
11834   } else {
11835    i9 = i9 + 5 | 0;
11836   }
11837   HEAP32[i4 >> 2] = i9;
11838   i10 = i5 + 65533 & 65535;
11839   i14 = i10 << i9 | i11 & 65535;
11840   HEAP16[i6 >> 1] = i14;
11841   if ((i9 | 0) > 12) {
11842    i12 = i2 + 20 | 0;
11843    i11 = HEAP32[i12 >> 2] | 0;
11844    HEAP32[i12 >> 2] = i11 + 1;
11845    i13 = i2 + 8 | 0;
11846    HEAP8[(HEAP32[i13 >> 2] | 0) + i11 | 0] = i14;
11847    i14 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11848    i11 = HEAP32[i12 >> 2] | 0;
11849    HEAP32[i12 >> 2] = i11 + 1;
11850    HEAP8[(HEAP32[i13 >> 2] | 0) + i11 | 0] = i14;
11851    i11 = HEAP32[i4 >> 2] | 0;
11852    i14 = i10 >>> (16 - i11 | 0);
11853    HEAP16[i6 >> 1] = i14;
11854    i11 = i11 + -12 | 0;
11855   } else {
11856    i11 = i9 + 4 | 0;
11857   }
11858   HEAP32[i4 >> 2] = i11;
11859   if ((i5 | 0) > -1) {
11860    i10 = i2 + 20 | 0;
11861    i9 = i2 + 8 | 0;
11862    i12 = 0;
11863    while (1) {
11864     i13 = HEAPU16[i2 + (HEAPU8[2888 + i12 | 0] << 2) + 2686 >> 1] | 0;
11865     i14 = i13 << i11 | i14 & 65535;
11866     HEAP16[i6 >> 1] = i14;
11867     if ((i11 | 0) > 13) {
11868      i11 = HEAP32[i10 >> 2] | 0;
11869      HEAP32[i10 >> 2] = i11 + 1;
11870      HEAP8[(HEAP32[i9 >> 2] | 0) + i11 | 0] = i14;
11871      i14 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
11872      i11 = HEAP32[i10 >> 2] | 0;
11873      HEAP32[i10 >> 2] = i11 + 1;
11874      HEAP8[(HEAP32[i9 >> 2] | 0) + i11 | 0] = i14;
11875      i11 = HEAP32[i4 >> 2] | 0;
11876      i14 = i13 >>> (16 - i11 | 0);
11877      HEAP16[i6 >> 1] = i14;
11878      i11 = i11 + -13 | 0;
11879     } else {
11880      i11 = i11 + 3 | 0;
11881     }
11882     HEAP32[i4 >> 2] = i11;
11883     if ((i12 | 0) == (i5 | 0)) {
11884      break;
11885     } else {
11886      i12 = i12 + 1 | 0;
11887     }
11888    }
11889   }
11890   i13 = i2 + 148 | 0;
11891   _send_tree(i2, i13, i7);
11892   i14 = i2 + 2440 | 0;
11893   _send_tree(i2, i14, i8);
11894   _compress_block(i2, i13, i14);
11895  } else {
11896   __tr_stored_block(i2, i4, i6, i3);
11897  }
11898 } while (0);
11899 _init_block(i2);
11900 if ((i3 | 0) == 0) {
11901  STACKTOP = i1;
11902  return;
11903 }
11904 i3 = i2 + 5820 | 0;
11905 i4 = HEAP32[i3 >> 2] | 0;
11906 if ((i4 | 0) <= 8) {
11907  i5 = i2 + 5816 | 0;
11908  if ((i4 | 0) > 0) {
11909   i13 = HEAP16[i5 >> 1] & 255;
11910   i12 = i2 + 20 | 0;
11911   i14 = HEAP32[i12 >> 2] | 0;
11912   HEAP32[i12 >> 2] = i14 + 1;
11913   HEAP8[(HEAP32[i2 + 8 >> 2] | 0) + i14 | 0] = i13;
11914  }
11915 } else {
11916  i5 = i2 + 5816 | 0;
11917  i14 = HEAP16[i5 >> 1] & 255;
11918  i11 = i2 + 20 | 0;
11919  i12 = HEAP32[i11 >> 2] | 0;
11920  HEAP32[i11 >> 2] = i12 + 1;
11921  i13 = i2 + 8 | 0;
11922  HEAP8[(HEAP32[i13 >> 2] | 0) + i12 | 0] = i14;
11923  i12 = (HEAPU16[i5 >> 1] | 0) >>> 8 & 255;
11924  i14 = HEAP32[i11 >> 2] | 0;
11925  HEAP32[i11 >> 2] = i14 + 1;
11926  HEAP8[(HEAP32[i13 >> 2] | 0) + i14 | 0] = i12;
11927 }
11928 HEAP16[i5 >> 1] = 0;
11929 HEAP32[i3 >> 2] = 0;
11930 STACKTOP = i1;
11931 return;
11932}
11933function _deflate_fast(i3, i6) {
11934 i3 = i3 | 0;
11935 i6 = i6 | 0;
11936 var i1 = 0, i2 = 0, i4 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0;
11937 i1 = STACKTOP;
11938 i20 = i3 + 116 | 0;
11939 i22 = (i6 | 0) == 0;
11940 i23 = i3 + 72 | 0;
11941 i24 = i3 + 88 | 0;
11942 i5 = i3 + 108 | 0;
11943 i7 = i3 + 56 | 0;
11944 i9 = i3 + 84 | 0;
11945 i10 = i3 + 68 | 0;
11946 i11 = i3 + 52 | 0;
11947 i12 = i3 + 64 | 0;
11948 i19 = i3 + 44 | 0;
11949 i21 = i3 + 96 | 0;
11950 i16 = i3 + 112 | 0;
11951 i13 = i3 + 5792 | 0;
11952 i17 = i3 + 5796 | 0;
11953 i18 = i3 + 5784 | 0;
11954 i14 = i3 + 5788 | 0;
11955 i15 = i3 + 128 | 0;
11956 i4 = i3 + 92 | 0;
11957 while (1) {
11958  if ((HEAP32[i20 >> 2] | 0) >>> 0 < 262) {
11959   _fill_window(i3);
11960   i25 = HEAP32[i20 >> 2] | 0;
11961   if (i25 >>> 0 < 262 & i22) {
11962    i2 = 0;
11963    i25 = 34;
11964    break;
11965   }
11966   if ((i25 | 0) == 0) {
11967    i25 = 26;
11968    break;
11969   }
11970   if (!(i25 >>> 0 > 2)) {
11971    i25 = 9;
11972   } else {
11973    i25 = 6;
11974   }
11975  } else {
11976   i25 = 6;
11977  }
11978  if ((i25 | 0) == 6) {
11979   i25 = 0;
11980   i26 = HEAP32[i5 >> 2] | 0;
11981   i34 = ((HEAPU8[(HEAP32[i7 >> 2] | 0) + (i26 + 2) | 0] | 0) ^ HEAP32[i23 >> 2] << HEAP32[i24 >> 2]) & HEAP32[i9 >> 2];
11982   HEAP32[i23 >> 2] = i34;
11983   i34 = (HEAP32[i10 >> 2] | 0) + (i34 << 1) | 0;
11984   i35 = HEAP16[i34 >> 1] | 0;
11985   HEAP16[(HEAP32[i12 >> 2] | 0) + ((HEAP32[i11 >> 2] & i26) << 1) >> 1] = i35;
11986   i27 = i35 & 65535;
11987   HEAP16[i34 >> 1] = i26;
11988   if (!(i35 << 16 >> 16 == 0) ? !((i26 - i27 | 0) >>> 0 > ((HEAP32[i19 >> 2] | 0) + -262 | 0) >>> 0) : 0) {
11989    i26 = _longest_match(i3, i27) | 0;
11990    HEAP32[i21 >> 2] = i26;
11991   } else {
11992    i25 = 9;
11993   }
11994  }
11995  if ((i25 | 0) == 9) {
11996   i26 = HEAP32[i21 >> 2] | 0;
11997  }
11998  do {
11999   if (i26 >>> 0 > 2) {
12000    i35 = i26 + 253 | 0;
12001    i25 = (HEAP32[i5 >> 2] | 0) - (HEAP32[i16 >> 2] | 0) | 0;
12002    i34 = HEAP32[i13 >> 2] | 0;
12003    HEAP16[(HEAP32[i17 >> 2] | 0) + (i34 << 1) >> 1] = i25;
12004    HEAP32[i13 >> 2] = i34 + 1;
12005    HEAP8[(HEAP32[i18 >> 2] | 0) + i34 | 0] = i35;
12006    i35 = i3 + ((HEAPU8[808 + (i35 & 255) | 0] | 0 | 256) + 1 << 2) + 148 | 0;
12007    HEAP16[i35 >> 1] = (HEAP16[i35 >> 1] | 0) + 1 << 16 >> 16;
12008    i25 = i25 + 65535 & 65535;
12009    if (!(i25 >>> 0 < 256)) {
12010     i25 = (i25 >>> 7) + 256 | 0;
12011    }
12012    i25 = i3 + ((HEAPU8[296 + i25 | 0] | 0) << 2) + 2440 | 0;
12013    HEAP16[i25 >> 1] = (HEAP16[i25 >> 1] | 0) + 1 << 16 >> 16;
12014    i25 = (HEAP32[i13 >> 2] | 0) == ((HEAP32[i14 >> 2] | 0) + -1 | 0) | 0;
12015    i26 = HEAP32[i21 >> 2] | 0;
12016    i35 = (HEAP32[i20 >> 2] | 0) - i26 | 0;
12017    HEAP32[i20 >> 2] = i35;
12018    if (!(i26 >>> 0 <= (HEAP32[i15 >> 2] | 0) >>> 0 & i35 >>> 0 > 2)) {
12019     i26 = (HEAP32[i5 >> 2] | 0) + i26 | 0;
12020     HEAP32[i5 >> 2] = i26;
12021     HEAP32[i21 >> 2] = 0;
12022     i34 = HEAP32[i7 >> 2] | 0;
12023     i35 = HEAPU8[i34 + i26 | 0] | 0;
12024     HEAP32[i23 >> 2] = i35;
12025     HEAP32[i23 >> 2] = ((HEAPU8[i34 + (i26 + 1) | 0] | 0) ^ i35 << HEAP32[i24 >> 2]) & HEAP32[i9 >> 2];
12026     break;
12027    }
12028    i30 = i26 + -1 | 0;
12029    HEAP32[i21 >> 2] = i30;
12030    i34 = HEAP32[i24 >> 2] | 0;
12031    i33 = HEAP32[i7 >> 2] | 0;
12032    i35 = HEAP32[i9 >> 2] | 0;
12033    i32 = HEAP32[i10 >> 2] | 0;
12034    i27 = HEAP32[i11 >> 2] | 0;
12035    i29 = HEAP32[i12 >> 2] | 0;
12036    i26 = HEAP32[i5 >> 2] | 0;
12037    i31 = HEAP32[i23 >> 2] | 0;
12038    while (1) {
12039     i28 = i26 + 1 | 0;
12040     HEAP32[i5 >> 2] = i28;
12041     i31 = ((HEAPU8[i33 + (i26 + 3) | 0] | 0) ^ i31 << i34) & i35;
12042     HEAP32[i23 >> 2] = i31;
12043     i36 = i32 + (i31 << 1) | 0;
12044     HEAP16[i29 + ((i27 & i28) << 1) >> 1] = HEAP16[i36 >> 1] | 0;
12045     HEAP16[i36 >> 1] = i28;
12046     i30 = i30 + -1 | 0;
12047     HEAP32[i21 >> 2] = i30;
12048     if ((i30 | 0) == 0) {
12049      break;
12050     } else {
12051      i26 = i28;
12052     }
12053    }
12054    i26 = i26 + 2 | 0;
12055    HEAP32[i5 >> 2] = i26;
12056   } else {
12057    i25 = HEAP8[(HEAP32[i7 >> 2] | 0) + (HEAP32[i5 >> 2] | 0) | 0] | 0;
12058    i26 = HEAP32[i13 >> 2] | 0;
12059    HEAP16[(HEAP32[i17 >> 2] | 0) + (i26 << 1) >> 1] = 0;
12060    HEAP32[i13 >> 2] = i26 + 1;
12061    HEAP8[(HEAP32[i18 >> 2] | 0) + i26 | 0] = i25;
12062    i25 = i3 + ((i25 & 255) << 2) + 148 | 0;
12063    HEAP16[i25 >> 1] = (HEAP16[i25 >> 1] | 0) + 1 << 16 >> 16;
12064    i25 = (HEAP32[i13 >> 2] | 0) == ((HEAP32[i14 >> 2] | 0) + -1 | 0) | 0;
12065    HEAP32[i20 >> 2] = (HEAP32[i20 >> 2] | 0) + -1;
12066    i26 = (HEAP32[i5 >> 2] | 0) + 1 | 0;
12067    HEAP32[i5 >> 2] = i26;
12068   }
12069  } while (0);
12070  if ((i25 | 0) == 0) {
12071   continue;
12072  }
12073  i25 = HEAP32[i4 >> 2] | 0;
12074  if ((i25 | 0) > -1) {
12075   i27 = (HEAP32[i7 >> 2] | 0) + i25 | 0;
12076  } else {
12077   i27 = 0;
12078  }
12079  __tr_flush_block(i3, i27, i26 - i25 | 0, 0);
12080  HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
12081  i27 = HEAP32[i3 >> 2] | 0;
12082  i28 = i27 + 28 | 0;
12083  i25 = HEAP32[i28 >> 2] | 0;
12084  i30 = HEAP32[i25 + 20 >> 2] | 0;
12085  i26 = i27 + 16 | 0;
12086  i29 = HEAP32[i26 >> 2] | 0;
12087  i29 = i30 >>> 0 > i29 >>> 0 ? i29 : i30;
12088  if ((i29 | 0) != 0 ? (i8 = i27 + 12 | 0, _memcpy(HEAP32[i8 >> 2] | 0, HEAP32[i25 + 16 >> 2] | 0, i29 | 0) | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i29, i8 = (HEAP32[i28 >> 2] | 0) + 16 | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i29, i8 = i27 + 20 | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i29, HEAP32[i26 >> 2] = (HEAP32[i26 >> 2] | 0) - i29, i8 = HEAP32[i28 >> 2] | 0, i35 = i8 + 20 | 0, i36 = HEAP32[i35 >> 2] | 0, HEAP32[i35 >> 2] = i36 - i29, (i36 | 0) == (i29 | 0)) : 0) {
12089   HEAP32[i8 + 16 >> 2] = HEAP32[i8 + 8 >> 2];
12090  }
12091  if ((HEAP32[(HEAP32[i3 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12092   i2 = 0;
12093   i25 = 34;
12094   break;
12095  }
12096 }
12097 if ((i25 | 0) == 26) {
12098  i8 = HEAP32[i4 >> 2] | 0;
12099  if ((i8 | 0) > -1) {
12100   i7 = (HEAP32[i7 >> 2] | 0) + i8 | 0;
12101  } else {
12102   i7 = 0;
12103  }
12104  i6 = (i6 | 0) == 4;
12105  __tr_flush_block(i3, i7, (HEAP32[i5 >> 2] | 0) - i8 | 0, i6 & 1);
12106  HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
12107  i5 = HEAP32[i3 >> 2] | 0;
12108  i7 = i5 + 28 | 0;
12109  i4 = HEAP32[i7 >> 2] | 0;
12110  i10 = HEAP32[i4 + 20 >> 2] | 0;
12111  i8 = i5 + 16 | 0;
12112  i9 = HEAP32[i8 >> 2] | 0;
12113  i9 = i10 >>> 0 > i9 >>> 0 ? i9 : i10;
12114  if ((i9 | 0) != 0 ? (i2 = i5 + 12 | 0, _memcpy(HEAP32[i2 >> 2] | 0, HEAP32[i4 + 16 >> 2] | 0, i9 | 0) | 0, HEAP32[i2 >> 2] = (HEAP32[i2 >> 2] | 0) + i9, i2 = (HEAP32[i7 >> 2] | 0) + 16 | 0, HEAP32[i2 >> 2] = (HEAP32[i2 >> 2] | 0) + i9, i2 = i5 + 20 | 0, HEAP32[i2 >> 2] = (HEAP32[i2 >> 2] | 0) + i9, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) - i9, i2 = HEAP32[i7 >> 2] | 0, i35 = i2 + 20 | 0, i36 = HEAP32[i35 >> 2] | 0, HEAP32[i35 >> 2] = i36 - i9, (i36 | 0) == (i9 | 0)) : 0) {
12115   HEAP32[i2 + 16 >> 2] = HEAP32[i2 + 8 >> 2];
12116  }
12117  if ((HEAP32[(HEAP32[i3 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12118   i36 = i6 ? 2 : 0;
12119   STACKTOP = i1;
12120   return i36 | 0;
12121  } else {
12122   i36 = i6 ? 3 : 1;
12123   STACKTOP = i1;
12124   return i36 | 0;
12125  }
12126 } else if ((i25 | 0) == 34) {
12127  STACKTOP = i1;
12128  return i2 | 0;
12129 }
12130 return 0;
12131}
12132function _inflate_table(i11, i5, i13, i2, i1, i10) {
12133 i11 = i11 | 0;
12134 i5 = i5 | 0;
12135 i13 = i13 | 0;
12136 i2 = i2 | 0;
12137 i1 = i1 | 0;
12138 i10 = i10 | 0;
12139 var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i12 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0;
12140 i3 = STACKTOP;
12141 STACKTOP = STACKTOP + 64 | 0;
12142 i7 = i3 + 32 | 0;
12143 i12 = i3;
12144 i4 = i7 + 0 | 0;
12145 i9 = i4 + 32 | 0;
12146 do {
12147  HEAP16[i4 >> 1] = 0;
12148  i4 = i4 + 2 | 0;
12149 } while ((i4 | 0) < (i9 | 0));
12150 i14 = (i13 | 0) == 0;
12151 if (!i14) {
12152  i4 = 0;
12153  do {
12154   i32 = i7 + (HEAPU16[i5 + (i4 << 1) >> 1] << 1) | 0;
12155   HEAP16[i32 >> 1] = (HEAP16[i32 >> 1] | 0) + 1 << 16 >> 16;
12156   i4 = i4 + 1 | 0;
12157  } while ((i4 | 0) != (i13 | 0));
12158 }
12159 i4 = HEAP32[i1 >> 2] | 0;
12160 i9 = 15;
12161 while (1) {
12162  i15 = i9 + -1 | 0;
12163  if ((HEAP16[i7 + (i9 << 1) >> 1] | 0) != 0) {
12164   break;
12165  }
12166  if ((i15 | 0) == 0) {
12167   i6 = 7;
12168   break;
12169  } else {
12170   i9 = i15;
12171  }
12172 }
12173 if ((i6 | 0) == 7) {
12174  i32 = HEAP32[i2 >> 2] | 0;
12175  HEAP32[i2 >> 2] = i32 + 4;
12176  HEAP8[i32] = 64;
12177  HEAP8[i32 + 1 | 0] = 1;
12178  HEAP16[i32 + 2 >> 1] = 0;
12179  i32 = HEAP32[i2 >> 2] | 0;
12180  HEAP32[i2 >> 2] = i32 + 4;
12181  HEAP8[i32] = 64;
12182  HEAP8[i32 + 1 | 0] = 1;
12183  HEAP16[i32 + 2 >> 1] = 0;
12184  HEAP32[i1 >> 2] = 1;
12185  i32 = 0;
12186  STACKTOP = i3;
12187  return i32 | 0;
12188 }
12189 i4 = i4 >>> 0 > i9 >>> 0 ? i9 : i4;
12190 L12 : do {
12191  if (i9 >>> 0 > 1) {
12192   i27 = 1;
12193   while (1) {
12194    i15 = i27 + 1 | 0;
12195    if ((HEAP16[i7 + (i27 << 1) >> 1] | 0) != 0) {
12196     break L12;
12197    }
12198    if (i15 >>> 0 < i9 >>> 0) {
12199     i27 = i15;
12200    } else {
12201     i27 = i15;
12202     break;
12203    }
12204   }
12205  } else {
12206   i27 = 1;
12207  }
12208 } while (0);
12209 i4 = i4 >>> 0 < i27 >>> 0 ? i27 : i4;
12210 i16 = 1;
12211 i15 = 1;
12212 do {
12213  i16 = (i16 << 1) - (HEAPU16[i7 + (i15 << 1) >> 1] | 0) | 0;
12214  i15 = i15 + 1 | 0;
12215  if ((i16 | 0) < 0) {
12216   i8 = -1;
12217   i6 = 56;
12218   break;
12219  }
12220 } while (i15 >>> 0 < 16);
12221 if ((i6 | 0) == 56) {
12222  STACKTOP = i3;
12223  return i8 | 0;
12224 }
12225 if ((i16 | 0) > 0 ? !((i11 | 0) != 0 & (i9 | 0) == 1) : 0) {
12226  i32 = -1;
12227  STACKTOP = i3;
12228  return i32 | 0;
12229 }
12230 HEAP16[i12 + 2 >> 1] = 0;
12231 i16 = 0;
12232 i15 = 1;
12233 do {
12234  i16 = (HEAPU16[i7 + (i15 << 1) >> 1] | 0) + (i16 & 65535) | 0;
12235  i15 = i15 + 1 | 0;
12236  HEAP16[i12 + (i15 << 1) >> 1] = i16;
12237 } while ((i15 | 0) != 15);
12238 if (!i14) {
12239  i15 = 0;
12240  do {
12241   i14 = HEAP16[i5 + (i15 << 1) >> 1] | 0;
12242   if (!(i14 << 16 >> 16 == 0)) {
12243    i31 = i12 + ((i14 & 65535) << 1) | 0;
12244    i32 = HEAP16[i31 >> 1] | 0;
12245    HEAP16[i31 >> 1] = i32 + 1 << 16 >> 16;
12246    HEAP16[i10 + ((i32 & 65535) << 1) >> 1] = i15;
12247   }
12248   i15 = i15 + 1 | 0;
12249  } while ((i15 | 0) != (i13 | 0));
12250 }
12251 if ((i11 | 0) == 1) {
12252  i14 = 1 << i4;
12253  if (i14 >>> 0 > 851) {
12254   i32 = 1;
12255   STACKTOP = i3;
12256   return i32 | 0;
12257  } else {
12258   i16 = 0;
12259   i20 = 1;
12260   i17 = 14128 + -514 | 0;
12261   i19 = 256;
12262   i18 = 14192 + -514 | 0;
12263  }
12264 } else if ((i11 | 0) != 0) {
12265  i14 = 1 << i4;
12266  i16 = (i11 | 0) == 2;
12267  if (i16 & i14 >>> 0 > 591) {
12268   i32 = 1;
12269   STACKTOP = i3;
12270   return i32 | 0;
12271  } else {
12272   i20 = 0;
12273   i17 = 14256;
12274   i19 = -1;
12275   i18 = 14320;
12276  }
12277 } else {
12278  i16 = 0;
12279  i14 = 1 << i4;
12280  i20 = 0;
12281  i17 = i10;
12282  i19 = 19;
12283  i18 = i10;
12284 }
12285 i11 = i14 + -1 | 0;
12286 i12 = i4 & 255;
12287 i22 = i4;
12288 i21 = 0;
12289 i25 = 0;
12290 i13 = -1;
12291 i15 = HEAP32[i2 >> 2] | 0;
12292 i24 = 0;
12293 L44 : while (1) {
12294  i23 = 1 << i22;
12295  while (1) {
12296   i29 = i27 - i21 | 0;
12297   i22 = i29 & 255;
12298   i28 = HEAP16[i10 + (i24 << 1) >> 1] | 0;
12299   i30 = i28 & 65535;
12300   if ((i30 | 0) >= (i19 | 0)) {
12301    if ((i30 | 0) > (i19 | 0)) {
12302     i26 = HEAP16[i18 + (i30 << 1) >> 1] & 255;
12303     i28 = HEAP16[i17 + (i30 << 1) >> 1] | 0;
12304    } else {
12305     i26 = 96;
12306     i28 = 0;
12307    }
12308   } else {
12309    i26 = 0;
12310   }
12311   i31 = 1 << i29;
12312   i30 = i25 >>> i21;
12313   i32 = i23;
12314   while (1) {
12315    i29 = i32 - i31 | 0;
12316    i33 = i29 + i30 | 0;
12317    HEAP8[i15 + (i33 << 2) | 0] = i26;
12318    HEAP8[i15 + (i33 << 2) + 1 | 0] = i22;
12319    HEAP16[i15 + (i33 << 2) + 2 >> 1] = i28;
12320    if ((i32 | 0) == (i31 | 0)) {
12321     break;
12322    } else {
12323     i32 = i29;
12324    }
12325   }
12326   i26 = 1 << i27 + -1;
12327   while (1) {
12328    if ((i26 & i25 | 0) == 0) {
12329     break;
12330    } else {
12331     i26 = i26 >>> 1;
12332    }
12333   }
12334   if ((i26 | 0) == 0) {
12335    i25 = 0;
12336   } else {
12337    i25 = (i26 + -1 & i25) + i26 | 0;
12338   }
12339   i24 = i24 + 1 | 0;
12340   i32 = i7 + (i27 << 1) | 0;
12341   i33 = (HEAP16[i32 >> 1] | 0) + -1 << 16 >> 16;
12342   HEAP16[i32 >> 1] = i33;
12343   if (i33 << 16 >> 16 == 0) {
12344    if ((i27 | 0) == (i9 | 0)) {
12345     break L44;
12346    }
12347    i27 = HEAPU16[i5 + (HEAPU16[i10 + (i24 << 1) >> 1] << 1) >> 1] | 0;
12348   }
12349   if (!(i27 >>> 0 > i4 >>> 0)) {
12350    continue;
12351   }
12352   i26 = i25 & i11;
12353   if ((i26 | 0) != (i13 | 0)) {
12354    break;
12355   }
12356  }
12357  i28 = (i21 | 0) == 0 ? i4 : i21;
12358  i23 = i15 + (i23 << 2) | 0;
12359  i31 = i27 - i28 | 0;
12360  L67 : do {
12361   if (i27 >>> 0 < i9 >>> 0) {
12362    i29 = i27;
12363    i30 = i31;
12364    i31 = 1 << i31;
12365    while (1) {
12366     i31 = i31 - (HEAPU16[i7 + (i29 << 1) >> 1] | 0) | 0;
12367     if ((i31 | 0) < 1) {
12368      break L67;
12369     }
12370     i30 = i30 + 1 | 0;
12371     i29 = i30 + i28 | 0;
12372     if (i29 >>> 0 < i9 >>> 0) {
12373      i31 = i31 << 1;
12374     } else {
12375      break;
12376     }
12377    }
12378   } else {
12379    i30 = i31;
12380   }
12381  } while (0);
12382  i29 = (1 << i30) + i14 | 0;
12383  if (i20 & i29 >>> 0 > 851 | i16 & i29 >>> 0 > 591) {
12384   i8 = 1;
12385   i6 = 56;
12386   break;
12387  }
12388  HEAP8[(HEAP32[i2 >> 2] | 0) + (i26 << 2) | 0] = i30;
12389  HEAP8[(HEAP32[i2 >> 2] | 0) + (i26 << 2) + 1 | 0] = i12;
12390  i22 = HEAP32[i2 >> 2] | 0;
12391  HEAP16[i22 + (i26 << 2) + 2 >> 1] = (i23 - i22 | 0) >>> 2;
12392  i22 = i30;
12393  i21 = i28;
12394  i13 = i26;
12395  i15 = i23;
12396  i14 = i29;
12397 }
12398 if ((i6 | 0) == 56) {
12399  STACKTOP = i3;
12400  return i8 | 0;
12401 }
12402 L77 : do {
12403  if ((i25 | 0) != 0) {
12404   do {
12405    if ((i21 | 0) != 0) {
12406     if ((i25 & i11 | 0) != (i13 | 0)) {
12407      i21 = 0;
12408      i22 = i12;
12409      i9 = i4;
12410      i15 = HEAP32[i2 >> 2] | 0;
12411     }
12412    } else {
12413     i21 = 0;
12414    }
12415    i5 = i25 >>> i21;
12416    HEAP8[i15 + (i5 << 2) | 0] = 64;
12417    HEAP8[i15 + (i5 << 2) + 1 | 0] = i22;
12418    HEAP16[i15 + (i5 << 2) + 2 >> 1] = 0;
12419    i5 = 1 << i9 + -1;
12420    while (1) {
12421     if ((i5 & i25 | 0) == 0) {
12422      break;
12423     } else {
12424      i5 = i5 >>> 1;
12425     }
12426    }
12427    if ((i5 | 0) == 0) {
12428     break L77;
12429    }
12430    i25 = (i5 + -1 & i25) + i5 | 0;
12431   } while ((i25 | 0) != 0);
12432  }
12433 } while (0);
12434 HEAP32[i2 >> 2] = (HEAP32[i2 >> 2] | 0) + (i14 << 2);
12435 HEAP32[i1 >> 2] = i4;
12436 i33 = 0;
12437 STACKTOP = i3;
12438 return i33 | 0;
12439}
12440function _compress_block(i1, i3, i7) {
12441 i1 = i1 | 0;
12442 i3 = i3 | 0;
12443 i7 = i7 | 0;
12444 var i2 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0;
12445 i2 = STACKTOP;
12446 i11 = i1 + 5792 | 0;
12447 if ((HEAP32[i11 >> 2] | 0) == 0) {
12448  i14 = HEAP32[i1 + 5820 >> 2] | 0;
12449  i17 = HEAP16[i1 + 5816 >> 1] | 0;
12450 } else {
12451  i9 = i1 + 5796 | 0;
12452  i10 = i1 + 5784 | 0;
12453  i8 = i1 + 5820 | 0;
12454  i12 = i1 + 5816 | 0;
12455  i5 = i1 + 20 | 0;
12456  i6 = i1 + 8 | 0;
12457  i14 = 0;
12458  while (1) {
12459   i20 = HEAP16[(HEAP32[i9 >> 2] | 0) + (i14 << 1) >> 1] | 0;
12460   i13 = i20 & 65535;
12461   i4 = i14 + 1 | 0;
12462   i14 = HEAPU8[(HEAP32[i10 >> 2] | 0) + i14 | 0] | 0;
12463   do {
12464    if (i20 << 16 >> 16 == 0) {
12465     i15 = HEAPU16[i3 + (i14 << 2) + 2 >> 1] | 0;
12466     i13 = HEAP32[i8 >> 2] | 0;
12467     i14 = HEAPU16[i3 + (i14 << 2) >> 1] | 0;
12468     i16 = HEAPU16[i12 >> 1] | 0 | i14 << i13;
12469     i17 = i16 & 65535;
12470     HEAP16[i12 >> 1] = i17;
12471     if ((i13 | 0) > (16 - i15 | 0)) {
12472      i17 = HEAP32[i5 >> 2] | 0;
12473      HEAP32[i5 >> 2] = i17 + 1;
12474      HEAP8[(HEAP32[i6 >> 2] | 0) + i17 | 0] = i16;
12475      i17 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12476      i20 = HEAP32[i5 >> 2] | 0;
12477      HEAP32[i5 >> 2] = i20 + 1;
12478      HEAP8[(HEAP32[i6 >> 2] | 0) + i20 | 0] = i17;
12479      i20 = HEAP32[i8 >> 2] | 0;
12480      i17 = i14 >>> (16 - i20 | 0) & 65535;
12481      HEAP16[i12 >> 1] = i17;
12482      i14 = i15 + -16 + i20 | 0;
12483      HEAP32[i8 >> 2] = i14;
12484      break;
12485     } else {
12486      i14 = i13 + i15 | 0;
12487      HEAP32[i8 >> 2] = i14;
12488      break;
12489     }
12490    } else {
12491     i15 = HEAPU8[808 + i14 | 0] | 0;
12492     i19 = (i15 | 256) + 1 | 0;
12493     i18 = HEAPU16[i3 + (i19 << 2) + 2 >> 1] | 0;
12494     i17 = HEAP32[i8 >> 2] | 0;
12495     i19 = HEAPU16[i3 + (i19 << 2) >> 1] | 0;
12496     i20 = HEAPU16[i12 >> 1] | 0 | i19 << i17;
12497     i16 = i20 & 65535;
12498     HEAP16[i12 >> 1] = i16;
12499     if ((i17 | 0) > (16 - i18 | 0)) {
12500      i16 = HEAP32[i5 >> 2] | 0;
12501      HEAP32[i5 >> 2] = i16 + 1;
12502      HEAP8[(HEAP32[i6 >> 2] | 0) + i16 | 0] = i20;
12503      i16 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12504      i20 = HEAP32[i5 >> 2] | 0;
12505      HEAP32[i5 >> 2] = i20 + 1;
12506      HEAP8[(HEAP32[i6 >> 2] | 0) + i20 | 0] = i16;
12507      i20 = HEAP32[i8 >> 2] | 0;
12508      i16 = i19 >>> (16 - i20 | 0) & 65535;
12509      HEAP16[i12 >> 1] = i16;
12510      i18 = i18 + -16 + i20 | 0;
12511     } else {
12512      i18 = i17 + i18 | 0;
12513     }
12514     HEAP32[i8 >> 2] = i18;
12515     i17 = HEAP32[2408 + (i15 << 2) >> 2] | 0;
12516     do {
12517      if ((i15 + -8 | 0) >>> 0 < 20) {
12518       i14 = i14 - (HEAP32[2528 + (i15 << 2) >> 2] | 0) & 65535;
12519       i15 = i14 << i18 | i16 & 65535;
12520       i16 = i15 & 65535;
12521       HEAP16[i12 >> 1] = i16;
12522       if ((i18 | 0) > (16 - i17 | 0)) {
12523        i16 = HEAP32[i5 >> 2] | 0;
12524        HEAP32[i5 >> 2] = i16 + 1;
12525        HEAP8[(HEAP32[i6 >> 2] | 0) + i16 | 0] = i15;
12526        i16 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12527        i20 = HEAP32[i5 >> 2] | 0;
12528        HEAP32[i5 >> 2] = i20 + 1;
12529        HEAP8[(HEAP32[i6 >> 2] | 0) + i20 | 0] = i16;
12530        i20 = HEAP32[i8 >> 2] | 0;
12531        i16 = i14 >>> (16 - i20 | 0) & 65535;
12532        HEAP16[i12 >> 1] = i16;
12533        i14 = i17 + -16 + i20 | 0;
12534        HEAP32[i8 >> 2] = i14;
12535        break;
12536       } else {
12537        i14 = i18 + i17 | 0;
12538        HEAP32[i8 >> 2] = i14;
12539        break;
12540       }
12541      } else {
12542       i14 = i18;
12543      }
12544     } while (0);
12545     i13 = i13 + -1 | 0;
12546     if (i13 >>> 0 < 256) {
12547      i15 = i13;
12548     } else {
12549      i15 = (i13 >>> 7) + 256 | 0;
12550     }
12551     i15 = HEAPU8[296 + i15 | 0] | 0;
12552     i17 = HEAPU16[i7 + (i15 << 2) + 2 >> 1] | 0;
12553     i18 = HEAPU16[i7 + (i15 << 2) >> 1] | 0;
12554     i19 = i16 & 65535 | i18 << i14;
12555     i16 = i19 & 65535;
12556     HEAP16[i12 >> 1] = i16;
12557     if ((i14 | 0) > (16 - i17 | 0)) {
12558      i20 = HEAP32[i5 >> 2] | 0;
12559      HEAP32[i5 >> 2] = i20 + 1;
12560      HEAP8[(HEAP32[i6 >> 2] | 0) + i20 | 0] = i19;
12561      i20 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12562      i14 = HEAP32[i5 >> 2] | 0;
12563      HEAP32[i5 >> 2] = i14 + 1;
12564      HEAP8[(HEAP32[i6 >> 2] | 0) + i14 | 0] = i20;
12565      i14 = HEAP32[i8 >> 2] | 0;
12566      i20 = i18 >>> (16 - i14 | 0) & 65535;
12567      HEAP16[i12 >> 1] = i20;
12568      i14 = i17 + -16 + i14 | 0;
12569      i17 = i20;
12570     } else {
12571      i14 = i14 + i17 | 0;
12572      i17 = i16;
12573     }
12574     HEAP32[i8 >> 2] = i14;
12575     i16 = HEAP32[2648 + (i15 << 2) >> 2] | 0;
12576     if ((i15 + -4 | 0) >>> 0 < 26) {
12577      i13 = i13 - (HEAP32[2768 + (i15 << 2) >> 2] | 0) & 65535;
12578      i15 = i13 << i14 | i17 & 65535;
12579      i17 = i15 & 65535;
12580      HEAP16[i12 >> 1] = i17;
12581      if ((i14 | 0) > (16 - i16 | 0)) {
12582       i17 = HEAP32[i5 >> 2] | 0;
12583       HEAP32[i5 >> 2] = i17 + 1;
12584       HEAP8[(HEAP32[i6 >> 2] | 0) + i17 | 0] = i15;
12585       i17 = (HEAPU16[i12 >> 1] | 0) >>> 8 & 255;
12586       i14 = HEAP32[i5 >> 2] | 0;
12587       HEAP32[i5 >> 2] = i14 + 1;
12588       HEAP8[(HEAP32[i6 >> 2] | 0) + i14 | 0] = i17;
12589       i14 = HEAP32[i8 >> 2] | 0;
12590       i17 = i13 >>> (16 - i14 | 0) & 65535;
12591       HEAP16[i12 >> 1] = i17;
12592       i14 = i16 + -16 + i14 | 0;
12593       HEAP32[i8 >> 2] = i14;
12594       break;
12595      } else {
12596       i14 = i14 + i16 | 0;
12597       HEAP32[i8 >> 2] = i14;
12598       break;
12599      }
12600     }
12601    }
12602   } while (0);
12603   if (i4 >>> 0 < (HEAP32[i11 >> 2] | 0) >>> 0) {
12604    i14 = i4;
12605   } else {
12606    break;
12607   }
12608  }
12609 }
12610 i5 = i3 + 1026 | 0;
12611 i6 = HEAPU16[i5 >> 1] | 0;
12612 i4 = i1 + 5820 | 0;
12613 i3 = HEAPU16[i3 + 1024 >> 1] | 0;
12614 i7 = i1 + 5816 | 0;
12615 i8 = i17 & 65535 | i3 << i14;
12616 HEAP16[i7 >> 1] = i8;
12617 if ((i14 | 0) > (16 - i6 | 0)) {
12618  i17 = i1 + 20 | 0;
12619  i18 = HEAP32[i17 >> 2] | 0;
12620  HEAP32[i17 >> 2] = i18 + 1;
12621  i20 = i1 + 8 | 0;
12622  HEAP8[(HEAP32[i20 >> 2] | 0) + i18 | 0] = i8;
12623  i18 = (HEAPU16[i7 >> 1] | 0) >>> 8 & 255;
12624  i19 = HEAP32[i17 >> 2] | 0;
12625  HEAP32[i17 >> 2] = i19 + 1;
12626  HEAP8[(HEAP32[i20 >> 2] | 0) + i19 | 0] = i18;
12627  i19 = HEAP32[i4 >> 2] | 0;
12628  HEAP16[i7 >> 1] = i3 >>> (16 - i19 | 0);
12629  i19 = i6 + -16 + i19 | 0;
12630  HEAP32[i4 >> 2] = i19;
12631  i19 = HEAP16[i5 >> 1] | 0;
12632  i19 = i19 & 65535;
12633  i20 = i1 + 5812 | 0;
12634  HEAP32[i20 >> 2] = i19;
12635  STACKTOP = i2;
12636  return;
12637 } else {
12638  i19 = i14 + i6 | 0;
12639  HEAP32[i4 >> 2] = i19;
12640  i19 = HEAP16[i5 >> 1] | 0;
12641  i19 = i19 & 65535;
12642  i20 = i1 + 5812 | 0;
12643  HEAP32[i20 >> 2] = i19;
12644  STACKTOP = i2;
12645  return;
12646 }
12647}
12648function _deflate_stored(i2, i5) {
12649 i2 = i2 | 0;
12650 i5 = i5 | 0;
12651 var i1 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0;
12652 i1 = STACKTOP;
12653 i4 = (HEAP32[i2 + 12 >> 2] | 0) + -5 | 0;
12654 i11 = i4 >>> 0 < 65535 ? i4 : 65535;
12655 i12 = i2 + 116 | 0;
12656 i4 = i2 + 108 | 0;
12657 i6 = i2 + 92 | 0;
12658 i10 = i2 + 44 | 0;
12659 i7 = i2 + 56 | 0;
12660 while (1) {
12661  i13 = HEAP32[i12 >> 2] | 0;
12662  if (i13 >>> 0 < 2) {
12663   _fill_window(i2);
12664   i13 = HEAP32[i12 >> 2] | 0;
12665   if ((i13 | i5 | 0) == 0) {
12666    i2 = 0;
12667    i8 = 28;
12668    break;
12669   }
12670   if ((i13 | 0) == 0) {
12671    i8 = 20;
12672    break;
12673   }
12674  }
12675  i13 = (HEAP32[i4 >> 2] | 0) + i13 | 0;
12676  HEAP32[i4 >> 2] = i13;
12677  HEAP32[i12 >> 2] = 0;
12678  i14 = HEAP32[i6 >> 2] | 0;
12679  i15 = i14 + i11 | 0;
12680  if (!((i13 | 0) != 0 & i13 >>> 0 < i15 >>> 0)) {
12681   HEAP32[i12 >> 2] = i13 - i15;
12682   HEAP32[i4 >> 2] = i15;
12683   if ((i14 | 0) > -1) {
12684    i13 = (HEAP32[i7 >> 2] | 0) + i14 | 0;
12685   } else {
12686    i13 = 0;
12687   }
12688   __tr_flush_block(i2, i13, i11, 0);
12689   HEAP32[i6 >> 2] = HEAP32[i4 >> 2];
12690   i16 = HEAP32[i2 >> 2] | 0;
12691   i14 = i16 + 28 | 0;
12692   i15 = HEAP32[i14 >> 2] | 0;
12693   i17 = HEAP32[i15 + 20 >> 2] | 0;
12694   i13 = i16 + 16 | 0;
12695   i18 = HEAP32[i13 >> 2] | 0;
12696   i17 = i17 >>> 0 > i18 >>> 0 ? i18 : i17;
12697   if ((i17 | 0) != 0 ? (i8 = i16 + 12 | 0, _memcpy(HEAP32[i8 >> 2] | 0, HEAP32[i15 + 16 >> 2] | 0, i17 | 0) | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i17, i8 = (HEAP32[i14 >> 2] | 0) + 16 | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i17, i8 = i16 + 20 | 0, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) + i17, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) - i17, i8 = HEAP32[i14 >> 2] | 0, i16 = i8 + 20 | 0, i18 = HEAP32[i16 >> 2] | 0, HEAP32[i16 >> 2] = i18 - i17, (i18 | 0) == (i17 | 0)) : 0) {
12698    HEAP32[i8 + 16 >> 2] = HEAP32[i8 + 8 >> 2];
12699   }
12700   if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12701    i2 = 0;
12702    i8 = 28;
12703    break;
12704   }
12705   i14 = HEAP32[i6 >> 2] | 0;
12706   i13 = HEAP32[i4 >> 2] | 0;
12707  }
12708  i13 = i13 - i14 | 0;
12709  if (i13 >>> 0 < ((HEAP32[i10 >> 2] | 0) + -262 | 0) >>> 0) {
12710   continue;
12711  }
12712  if ((i14 | 0) > -1) {
12713   i14 = (HEAP32[i7 >> 2] | 0) + i14 | 0;
12714  } else {
12715   i14 = 0;
12716  }
12717  __tr_flush_block(i2, i14, i13, 0);
12718  HEAP32[i6 >> 2] = HEAP32[i4 >> 2];
12719  i16 = HEAP32[i2 >> 2] | 0;
12720  i14 = i16 + 28 | 0;
12721  i15 = HEAP32[i14 >> 2] | 0;
12722  i17 = HEAP32[i15 + 20 >> 2] | 0;
12723  i13 = i16 + 16 | 0;
12724  i18 = HEAP32[i13 >> 2] | 0;
12725  i17 = i17 >>> 0 > i18 >>> 0 ? i18 : i17;
12726  if ((i17 | 0) != 0 ? (i9 = i16 + 12 | 0, _memcpy(HEAP32[i9 >> 2] | 0, HEAP32[i15 + 16 >> 2] | 0, i17 | 0) | 0, HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + i17, i9 = (HEAP32[i14 >> 2] | 0) + 16 | 0, HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + i17, i9 = i16 + 20 | 0, HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + i17, HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) - i17, i9 = HEAP32[i14 >> 2] | 0, i16 = i9 + 20 | 0, i18 = HEAP32[i16 >> 2] | 0, HEAP32[i16 >> 2] = i18 - i17, (i18 | 0) == (i17 | 0)) : 0) {
12727   HEAP32[i9 + 16 >> 2] = HEAP32[i9 + 8 >> 2];
12728  }
12729  if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12730   i2 = 0;
12731   i8 = 28;
12732   break;
12733  }
12734 }
12735 if ((i8 | 0) == 20) {
12736  i8 = HEAP32[i6 >> 2] | 0;
12737  if ((i8 | 0) > -1) {
12738   i7 = (HEAP32[i7 >> 2] | 0) + i8 | 0;
12739  } else {
12740   i7 = 0;
12741  }
12742  i5 = (i5 | 0) == 4;
12743  __tr_flush_block(i2, i7, (HEAP32[i4 >> 2] | 0) - i8 | 0, i5 & 1);
12744  HEAP32[i6 >> 2] = HEAP32[i4 >> 2];
12745  i4 = HEAP32[i2 >> 2] | 0;
12746  i7 = i4 + 28 | 0;
12747  i6 = HEAP32[i7 >> 2] | 0;
12748  i9 = HEAP32[i6 + 20 >> 2] | 0;
12749  i8 = i4 + 16 | 0;
12750  i10 = HEAP32[i8 >> 2] | 0;
12751  i9 = i9 >>> 0 > i10 >>> 0 ? i10 : i9;
12752  if ((i9 | 0) != 0 ? (i3 = i4 + 12 | 0, _memcpy(HEAP32[i3 >> 2] | 0, HEAP32[i6 + 16 >> 2] | 0, i9 | 0) | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, i3 = (HEAP32[i7 >> 2] | 0) + 16 | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, i3 = i4 + 20 | 0, HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + i9, HEAP32[i8 >> 2] = (HEAP32[i8 >> 2] | 0) - i9, i3 = HEAP32[i7 >> 2] | 0, i17 = i3 + 20 | 0, i18 = HEAP32[i17 >> 2] | 0, HEAP32[i17 >> 2] = i18 - i9, (i18 | 0) == (i9 | 0)) : 0) {
12753   HEAP32[i3 + 16 >> 2] = HEAP32[i3 + 8 >> 2];
12754  }
12755  if ((HEAP32[(HEAP32[i2 >> 2] | 0) + 16 >> 2] | 0) == 0) {
12756   i18 = i5 ? 2 : 0;
12757   STACKTOP = i1;
12758   return i18 | 0;
12759  } else {
12760   i18 = i5 ? 3 : 1;
12761   STACKTOP = i1;
12762   return i18 | 0;
12763  }
12764 } else if ((i8 | 0) == 28) {
12765  STACKTOP = i1;
12766  return i2 | 0;
12767 }
12768 return 0;
12769}
12770function _fill_window(i15) {
12771 i15 = i15 | 0;
12772 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0;
12773 i2 = STACKTOP;
12774 i16 = i15 + 44 | 0;
12775 i9 = HEAP32[i16 >> 2] | 0;
12776 i4 = i15 + 60 | 0;
12777 i8 = i15 + 116 | 0;
12778 i3 = i15 + 108 | 0;
12779 i5 = i9 + -262 | 0;
12780 i1 = i15 + 56 | 0;
12781 i17 = i15 + 72 | 0;
12782 i6 = i15 + 88 | 0;
12783 i7 = i15 + 84 | 0;
12784 i11 = i15 + 112 | 0;
12785 i12 = i15 + 92 | 0;
12786 i13 = i15 + 76 | 0;
12787 i14 = i15 + 68 | 0;
12788 i10 = i15 + 64 | 0;
12789 i19 = HEAP32[i8 >> 2] | 0;
12790 i21 = i9;
12791 while (1) {
12792  i20 = HEAP32[i3 >> 2] | 0;
12793  i19 = (HEAP32[i4 >> 2] | 0) - i19 - i20 | 0;
12794  if (!(i20 >>> 0 < (i5 + i21 | 0) >>> 0)) {
12795   i20 = HEAP32[i1 >> 2] | 0;
12796   _memcpy(i20 | 0, i20 + i9 | 0, i9 | 0) | 0;
12797   HEAP32[i11 >> 2] = (HEAP32[i11 >> 2] | 0) - i9;
12798   i20 = (HEAP32[i3 >> 2] | 0) - i9 | 0;
12799   HEAP32[i3 >> 2] = i20;
12800   HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) - i9;
12801   i22 = HEAP32[i13 >> 2] | 0;
12802   i21 = i22;
12803   i22 = (HEAP32[i14 >> 2] | 0) + (i22 << 1) | 0;
12804   do {
12805    i22 = i22 + -2 | 0;
12806    i23 = HEAPU16[i22 >> 1] | 0;
12807    if (i23 >>> 0 < i9 >>> 0) {
12808     i23 = 0;
12809    } else {
12810     i23 = i23 - i9 & 65535;
12811    }
12812    HEAP16[i22 >> 1] = i23;
12813    i21 = i21 + -1 | 0;
12814   } while ((i21 | 0) != 0);
12815   i22 = i9;
12816   i21 = (HEAP32[i10 >> 2] | 0) + (i9 << 1) | 0;
12817   do {
12818    i21 = i21 + -2 | 0;
12819    i23 = HEAPU16[i21 >> 1] | 0;
12820    if (i23 >>> 0 < i9 >>> 0) {
12821     i23 = 0;
12822    } else {
12823     i23 = i23 - i9 & 65535;
12824    }
12825    HEAP16[i21 >> 1] = i23;
12826    i22 = i22 + -1 | 0;
12827   } while ((i22 | 0) != 0);
12828   i19 = i19 + i9 | 0;
12829  }
12830  i21 = HEAP32[i15 >> 2] | 0;
12831  i24 = i21 + 4 | 0;
12832  i23 = HEAP32[i24 >> 2] | 0;
12833  if ((i23 | 0) == 0) {
12834   i18 = 28;
12835   break;
12836  }
12837  i22 = HEAP32[i8 >> 2] | 0;
12838  i20 = (HEAP32[i1 >> 2] | 0) + (i22 + i20) | 0;
12839  i19 = i23 >>> 0 > i19 >>> 0 ? i19 : i23;
12840  if ((i19 | 0) == 0) {
12841   i19 = 0;
12842  } else {
12843   HEAP32[i24 >> 2] = i23 - i19;
12844   i22 = HEAP32[(HEAP32[i21 + 28 >> 2] | 0) + 24 >> 2] | 0;
12845   if ((i22 | 0) == 1) {
12846    i22 = i21 + 48 | 0;
12847    HEAP32[i22 >> 2] = _adler32(HEAP32[i22 >> 2] | 0, HEAP32[i21 >> 2] | 0, i19) | 0;
12848    i22 = i21;
12849   } else if ((i22 | 0) == 2) {
12850    i22 = i21 + 48 | 0;
12851    HEAP32[i22 >> 2] = _crc32(HEAP32[i22 >> 2] | 0, HEAP32[i21 >> 2] | 0, i19) | 0;
12852    i22 = i21;
12853   } else {
12854    i22 = i21;
12855   }
12856   _memcpy(i20 | 0, HEAP32[i22 >> 2] | 0, i19 | 0) | 0;
12857   HEAP32[i22 >> 2] = (HEAP32[i22 >> 2] | 0) + i19;
12858   i22 = i21 + 8 | 0;
12859   HEAP32[i22 >> 2] = (HEAP32[i22 >> 2] | 0) + i19;
12860   i22 = HEAP32[i8 >> 2] | 0;
12861  }
12862  i19 = i22 + i19 | 0;
12863  HEAP32[i8 >> 2] = i19;
12864  if (i19 >>> 0 > 2 ? (i23 = HEAP32[i3 >> 2] | 0, i22 = HEAP32[i1 >> 2] | 0, i24 = HEAPU8[i22 + i23 | 0] | 0, HEAP32[i17 >> 2] = i24, HEAP32[i17 >> 2] = ((HEAPU8[i22 + (i23 + 1) | 0] | 0) ^ i24 << HEAP32[i6 >> 2]) & HEAP32[i7 >> 2], !(i19 >>> 0 < 262)) : 0) {
12865   break;
12866  }
12867  if ((HEAP32[(HEAP32[i15 >> 2] | 0) + 4 >> 2] | 0) == 0) {
12868   break;
12869  }
12870  i21 = HEAP32[i16 >> 2] | 0;
12871 }
12872 if ((i18 | 0) == 28) {
12873  STACKTOP = i2;
12874  return;
12875 }
12876 i5 = i15 + 5824 | 0;
12877 i6 = HEAP32[i5 >> 2] | 0;
12878 i4 = HEAP32[i4 >> 2] | 0;
12879 if (!(i6 >>> 0 < i4 >>> 0)) {
12880  STACKTOP = i2;
12881  return;
12882 }
12883 i3 = i19 + (HEAP32[i3 >> 2] | 0) | 0;
12884 if (i6 >>> 0 < i3 >>> 0) {
12885  i4 = i4 - i3 | 0;
12886  i24 = i4 >>> 0 > 258 ? 258 : i4;
12887  _memset((HEAP32[i1 >> 2] | 0) + i3 | 0, 0, i24 | 0) | 0;
12888  HEAP32[i5 >> 2] = i24 + i3;
12889  STACKTOP = i2;
12890  return;
12891 }
12892 i3 = i3 + 258 | 0;
12893 if (!(i6 >>> 0 < i3 >>> 0)) {
12894  STACKTOP = i2;
12895  return;
12896 }
12897 i3 = i3 - i6 | 0;
12898 i4 = i4 - i6 | 0;
12899 i24 = i3 >>> 0 > i4 >>> 0 ? i4 : i3;
12900 _memset((HEAP32[i1 >> 2] | 0) + i6 | 0, 0, i24 | 0) | 0;
12901 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + i24;
12902 STACKTOP = i2;
12903 return;
12904}
12905function __tr_align(i1) {
12906 i1 = i1 | 0;
12907 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0;
12908 i2 = STACKTOP;
12909 i3 = i1 + 5820 | 0;
12910 i6 = HEAP32[i3 >> 2] | 0;
12911 i4 = i1 + 5816 | 0;
12912 i7 = HEAPU16[i4 >> 1] | 0 | 2 << i6;
12913 i5 = i7 & 65535;
12914 HEAP16[i4 >> 1] = i5;
12915 if ((i6 | 0) > 13) {
12916  i8 = i1 + 20 | 0;
12917  i6 = HEAP32[i8 >> 2] | 0;
12918  HEAP32[i8 >> 2] = i6 + 1;
12919  i5 = i1 + 8 | 0;
12920  HEAP8[(HEAP32[i5 >> 2] | 0) + i6 | 0] = i7;
12921  i7 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
12922  i6 = HEAP32[i8 >> 2] | 0;
12923  HEAP32[i8 >> 2] = i6 + 1;
12924  HEAP8[(HEAP32[i5 >> 2] | 0) + i6 | 0] = i7;
12925  i6 = HEAP32[i3 >> 2] | 0;
12926  i5 = 2 >>> (16 - i6 | 0) & 65535;
12927  HEAP16[i4 >> 1] = i5;
12928  i6 = i6 + -13 | 0;
12929 } else {
12930  i6 = i6 + 3 | 0;
12931 }
12932 HEAP32[i3 >> 2] = i6;
12933 if ((i6 | 0) > 9) {
12934  i7 = i1 + 20 | 0;
12935  i6 = HEAP32[i7 >> 2] | 0;
12936  HEAP32[i7 >> 2] = i6 + 1;
12937  i8 = i1 + 8 | 0;
12938  HEAP8[(HEAP32[i8 >> 2] | 0) + i6 | 0] = i5;
12939  i5 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
12940  i6 = HEAP32[i7 >> 2] | 0;
12941  HEAP32[i7 >> 2] = i6 + 1;
12942  HEAP8[(HEAP32[i8 >> 2] | 0) + i6 | 0] = i5;
12943  HEAP16[i4 >> 1] = 0;
12944  i6 = (HEAP32[i3 >> 2] | 0) + -9 | 0;
12945  i5 = 0;
12946 } else {
12947  i6 = i6 + 7 | 0;
12948 }
12949 HEAP32[i3 >> 2] = i6;
12950 if ((i6 | 0) != 16) {
12951  if ((i6 | 0) > 7) {
12952   i6 = i1 + 20 | 0;
12953   i7 = HEAP32[i6 >> 2] | 0;
12954   HEAP32[i6 >> 2] = i7 + 1;
12955   HEAP8[(HEAP32[i1 + 8 >> 2] | 0) + i7 | 0] = i5;
12956   i7 = (HEAPU16[i4 >> 1] | 0) >>> 8;
12957   HEAP16[i4 >> 1] = i7;
12958   i6 = (HEAP32[i3 >> 2] | 0) + -8 | 0;
12959   HEAP32[i3 >> 2] = i6;
12960  } else {
12961   i7 = i5;
12962  }
12963 } else {
12964  i9 = i1 + 20 | 0;
12965  i8 = HEAP32[i9 >> 2] | 0;
12966  HEAP32[i9 >> 2] = i8 + 1;
12967  i7 = i1 + 8 | 0;
12968  HEAP8[(HEAP32[i7 >> 2] | 0) + i8 | 0] = i5;
12969  i8 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
12970  i6 = HEAP32[i9 >> 2] | 0;
12971  HEAP32[i9 >> 2] = i6 + 1;
12972  HEAP8[(HEAP32[i7 >> 2] | 0) + i6 | 0] = i8;
12973  HEAP16[i4 >> 1] = 0;
12974  HEAP32[i3 >> 2] = 0;
12975  i6 = 0;
12976  i7 = 0;
12977 }
12978 i5 = i1 + 5812 | 0;
12979 if ((11 - i6 + (HEAP32[i5 >> 2] | 0) | 0) >= 9) {
12980  HEAP32[i5 >> 2] = 7;
12981  STACKTOP = i2;
12982  return;
12983 }
12984 i7 = i7 & 65535 | 2 << i6;
12985 HEAP16[i4 >> 1] = i7;
12986 if ((i6 | 0) > 13) {
12987  i8 = i1 + 20 | 0;
12988  i6 = HEAP32[i8 >> 2] | 0;
12989  HEAP32[i8 >> 2] = i6 + 1;
12990  i9 = i1 + 8 | 0;
12991  HEAP8[(HEAP32[i9 >> 2] | 0) + i6 | 0] = i7;
12992  i7 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
12993  i6 = HEAP32[i8 >> 2] | 0;
12994  HEAP32[i8 >> 2] = i6 + 1;
12995  HEAP8[(HEAP32[i9 >> 2] | 0) + i6 | 0] = i7;
12996  i6 = HEAP32[i3 >> 2] | 0;
12997  i7 = 2 >>> (16 - i6 | 0);
12998  HEAP16[i4 >> 1] = i7;
12999  i6 = i6 + -13 | 0;
13000 } else {
13001  i6 = i6 + 3 | 0;
13002 }
13003 i7 = i7 & 255;
13004 HEAP32[i3 >> 2] = i6;
13005 if ((i6 | 0) > 9) {
13006  i8 = i1 + 20 | 0;
13007  i9 = HEAP32[i8 >> 2] | 0;
13008  HEAP32[i8 >> 2] = i9 + 1;
13009  i6 = i1 + 8 | 0;
13010  HEAP8[(HEAP32[i6 >> 2] | 0) + i9 | 0] = i7;
13011  i9 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
13012  i7 = HEAP32[i8 >> 2] | 0;
13013  HEAP32[i8 >> 2] = i7 + 1;
13014  HEAP8[(HEAP32[i6 >> 2] | 0) + i7 | 0] = i9;
13015  HEAP16[i4 >> 1] = 0;
13016  i7 = 0;
13017  i6 = (HEAP32[i3 >> 2] | 0) + -9 | 0;
13018 } else {
13019  i6 = i6 + 7 | 0;
13020 }
13021 HEAP32[i3 >> 2] = i6;
13022 if ((i6 | 0) == 16) {
13023  i6 = i1 + 20 | 0;
13024  i9 = HEAP32[i6 >> 2] | 0;
13025  HEAP32[i6 >> 2] = i9 + 1;
13026  i8 = i1 + 8 | 0;
13027  HEAP8[(HEAP32[i8 >> 2] | 0) + i9 | 0] = i7;
13028  i7 = (HEAPU16[i4 >> 1] | 0) >>> 8 & 255;
13029  i9 = HEAP32[i6 >> 2] | 0;
13030  HEAP32[i6 >> 2] = i9 + 1;
13031  HEAP8[(HEAP32[i8 >> 2] | 0) + i9 | 0] = i7;
13032  HEAP16[i4 >> 1] = 0;
13033  HEAP32[i3 >> 2] = 0;
13034  HEAP32[i5 >> 2] = 7;
13035  STACKTOP = i2;
13036  return;
13037 }
13038 if ((i6 | 0) <= 7) {
13039  HEAP32[i5 >> 2] = 7;
13040  STACKTOP = i2;
13041  return;
13042 }
13043 i8 = i1 + 20 | 0;
13044 i9 = HEAP32[i8 >> 2] | 0;
13045 HEAP32[i8 >> 2] = i9 + 1;
13046 HEAP8[(HEAP32[i1 + 8 >> 2] | 0) + i9 | 0] = i7;
13047 HEAP16[i4 >> 1] = (HEAPU16[i4 >> 1] | 0) >>> 8;
13048 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + -8;
13049 HEAP32[i5 >> 2] = 7;
13050 STACKTOP = i2;
13051 return;
13052}
13053function _adler32(i6, i4, i5) {
13054 i6 = i6 | 0;
13055 i4 = i4 | 0;
13056 i5 = i5 | 0;
13057 var i1 = 0, i2 = 0, i3 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0;
13058 i1 = STACKTOP;
13059 i3 = i6 >>> 16;
13060 i6 = i6 & 65535;
13061 if ((i5 | 0) == 1) {
13062  i2 = (HEAPU8[i4] | 0) + i6 | 0;
13063  i2 = i2 >>> 0 > 65520 ? i2 + -65521 | 0 : i2;
13064  i3 = i2 + i3 | 0;
13065  i8 = (i3 >>> 0 > 65520 ? i3 + 15 | 0 : i3) << 16 | i2;
13066  STACKTOP = i1;
13067  return i8 | 0;
13068 }
13069 if ((i4 | 0) == 0) {
13070  i8 = 1;
13071  STACKTOP = i1;
13072  return i8 | 0;
13073 }
13074 if (i5 >>> 0 < 16) {
13075  if ((i5 | 0) != 0) {
13076   while (1) {
13077    i5 = i5 + -1 | 0;
13078    i6 = (HEAPU8[i4] | 0) + i6 | 0;
13079    i3 = i6 + i3 | 0;
13080    if ((i5 | 0) == 0) {
13081     break;
13082    } else {
13083     i4 = i4 + 1 | 0;
13084    }
13085   }
13086  }
13087  i8 = ((i3 >>> 0) % 65521 | 0) << 16 | (i6 >>> 0 > 65520 ? i6 + -65521 | 0 : i6);
13088  STACKTOP = i1;
13089  return i8 | 0;
13090 }
13091 if (i5 >>> 0 > 5551) {
13092  do {
13093   i5 = i5 + -5552 | 0;
13094   i7 = i4;
13095   i8 = 347;
13096   while (1) {
13097    i23 = (HEAPU8[i7] | 0) + i6 | 0;
13098    i22 = i23 + (HEAPU8[i7 + 1 | 0] | 0) | 0;
13099    i21 = i22 + (HEAPU8[i7 + 2 | 0] | 0) | 0;
13100    i20 = i21 + (HEAPU8[i7 + 3 | 0] | 0) | 0;
13101    i19 = i20 + (HEAPU8[i7 + 4 | 0] | 0) | 0;
13102    i18 = i19 + (HEAPU8[i7 + 5 | 0] | 0) | 0;
13103    i17 = i18 + (HEAPU8[i7 + 6 | 0] | 0) | 0;
13104    i16 = i17 + (HEAPU8[i7 + 7 | 0] | 0) | 0;
13105    i15 = i16 + (HEAPU8[i7 + 8 | 0] | 0) | 0;
13106    i14 = i15 + (HEAPU8[i7 + 9 | 0] | 0) | 0;
13107    i13 = i14 + (HEAPU8[i7 + 10 | 0] | 0) | 0;
13108    i12 = i13 + (HEAPU8[i7 + 11 | 0] | 0) | 0;
13109    i11 = i12 + (HEAPU8[i7 + 12 | 0] | 0) | 0;
13110    i10 = i11 + (HEAPU8[i7 + 13 | 0] | 0) | 0;
13111    i9 = i10 + (HEAPU8[i7 + 14 | 0] | 0) | 0;
13112    i6 = i9 + (HEAPU8[i7 + 15 | 0] | 0) | 0;
13113    i3 = i23 + i3 + i22 + i21 + i20 + i19 + i18 + i17 + i16 + i15 + i14 + i13 + i12 + i11 + i10 + i9 + i6 | 0;
13114    i8 = i8 + -1 | 0;
13115    if ((i8 | 0) == 0) {
13116     break;
13117    } else {
13118     i7 = i7 + 16 | 0;
13119    }
13120   }
13121   i4 = i4 + 5552 | 0;
13122   i6 = (i6 >>> 0) % 65521 | 0;
13123   i3 = (i3 >>> 0) % 65521 | 0;
13124  } while (i5 >>> 0 > 5551);
13125  if ((i5 | 0) != 0) {
13126   if (i5 >>> 0 > 15) {
13127    i2 = 15;
13128   } else {
13129    i2 = 16;
13130   }
13131  }
13132 } else {
13133  i2 = 15;
13134 }
13135 if ((i2 | 0) == 15) {
13136  while (1) {
13137   i5 = i5 + -16 | 0;
13138   i9 = (HEAPU8[i4] | 0) + i6 | 0;
13139   i10 = i9 + (HEAPU8[i4 + 1 | 0] | 0) | 0;
13140   i11 = i10 + (HEAPU8[i4 + 2 | 0] | 0) | 0;
13141   i12 = i11 + (HEAPU8[i4 + 3 | 0] | 0) | 0;
13142   i13 = i12 + (HEAPU8[i4 + 4 | 0] | 0) | 0;
13143   i14 = i13 + (HEAPU8[i4 + 5 | 0] | 0) | 0;
13144   i15 = i14 + (HEAPU8[i4 + 6 | 0] | 0) | 0;
13145   i16 = i15 + (HEAPU8[i4 + 7 | 0] | 0) | 0;
13146   i17 = i16 + (HEAPU8[i4 + 8 | 0] | 0) | 0;
13147   i18 = i17 + (HEAPU8[i4 + 9 | 0] | 0) | 0;
13148   i19 = i18 + (HEAPU8[i4 + 10 | 0] | 0) | 0;
13149   i20 = i19 + (HEAPU8[i4 + 11 | 0] | 0) | 0;
13150   i21 = i20 + (HEAPU8[i4 + 12 | 0] | 0) | 0;
13151   i22 = i21 + (HEAPU8[i4 + 13 | 0] | 0) | 0;
13152   i23 = i22 + (HEAPU8[i4 + 14 | 0] | 0) | 0;
13153   i6 = i23 + (HEAPU8[i4 + 15 | 0] | 0) | 0;
13154   i3 = i9 + i3 + i10 + i11 + i12 + i13 + i14 + i15 + i16 + i17 + i18 + i19 + i20 + i21 + i22 + i23 + i6 | 0;
13155   i4 = i4 + 16 | 0;
13156   if (!(i5 >>> 0 > 15)) {
13157    break;
13158   } else {
13159    i2 = 15;
13160   }
13161  }
13162  if ((i5 | 0) == 0) {
13163   i2 = 17;
13164  } else {
13165   i2 = 16;
13166  }
13167 }
13168 if ((i2 | 0) == 16) {
13169  while (1) {
13170   i5 = i5 + -1 | 0;
13171   i6 = (HEAPU8[i4] | 0) + i6 | 0;
13172   i3 = i6 + i3 | 0;
13173   if ((i5 | 0) == 0) {
13174    i2 = 17;
13175    break;
13176   } else {
13177    i4 = i4 + 1 | 0;
13178    i2 = 16;
13179   }
13180  }
13181 }
13182 if ((i2 | 0) == 17) {
13183  i6 = (i6 >>> 0) % 65521 | 0;
13184  i3 = (i3 >>> 0) % 65521 | 0;
13185 }
13186 i23 = i3 << 16 | i6;
13187 STACKTOP = i1;
13188 return i23 | 0;
13189}
13190function _crc32(i4, i2, i3) {
13191 i4 = i4 | 0;
13192 i2 = i2 | 0;
13193 i3 = i3 | 0;
13194 var i1 = 0, i5 = 0;
13195 i1 = STACKTOP;
13196 if ((i2 | 0) == 0) {
13197  i5 = 0;
13198  STACKTOP = i1;
13199  return i5 | 0;
13200 }
13201 i4 = ~i4;
13202 L4 : do {
13203  if ((i3 | 0) != 0) {
13204   while (1) {
13205    if ((i2 & 3 | 0) == 0) {
13206     break;
13207    }
13208    i4 = HEAP32[3192 + (((HEAPU8[i2] | 0) ^ i4 & 255) << 2) >> 2] ^ i4 >>> 8;
13209    i3 = i3 + -1 | 0;
13210    if ((i3 | 0) == 0) {
13211     break L4;
13212    } else {
13213     i2 = i2 + 1 | 0;
13214    }
13215   }
13216   if (i3 >>> 0 > 31) {
13217    while (1) {
13218     i4 = HEAP32[i2 >> 2] ^ i4;
13219     i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 4 >> 2];
13220     i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 8 >> 2];
13221     i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 12 >> 2];
13222     i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 16 >> 2];
13223     i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 20 >> 2];
13224     i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 24 >> 2];
13225     i5 = i2 + 32 | 0;
13226     i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2] ^ HEAP32[i2 + 28 >> 2];
13227     i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2];
13228     i3 = i3 + -32 | 0;
13229     if (i3 >>> 0 > 31) {
13230      i2 = i5;
13231     } else {
13232      i2 = i5;
13233      break;
13234     }
13235    }
13236   }
13237   if (i3 >>> 0 > 3) {
13238    while (1) {
13239     i5 = i2 + 4 | 0;
13240     i4 = HEAP32[i2 >> 2] ^ i4;
13241     i4 = HEAP32[5240 + ((i4 >>> 8 & 255) << 2) >> 2] ^ HEAP32[6264 + ((i4 & 255) << 2) >> 2] ^ HEAP32[4216 + ((i4 >>> 16 & 255) << 2) >> 2] ^ HEAP32[3192 + (i4 >>> 24 << 2) >> 2];
13242     i3 = i3 + -4 | 0;
13243     if (i3 >>> 0 > 3) {
13244      i2 = i5;
13245     } else {
13246      i2 = i5;
13247      break;
13248     }
13249    }
13250   }
13251   if ((i3 | 0) != 0) {
13252    while (1) {
13253     i4 = HEAP32[3192 + (((HEAPU8[i2] | 0) ^ i4 & 255) << 2) >> 2] ^ i4 >>> 8;
13254     i3 = i3 + -1 | 0;
13255     if ((i3 | 0) == 0) {
13256      break;
13257     } else {
13258      i2 = i2 + 1 | 0;
13259     }
13260    }
13261   }
13262  }
13263 } while (0);
13264 i5 = ~i4;
13265 STACKTOP = i1;
13266 return i5 | 0;
13267}
13268function _deflateInit2_(i3, i7, i8, i10, i4, i1, i5, i6) {
13269 i3 = i3 | 0;
13270 i7 = i7 | 0;
13271 i8 = i8 | 0;
13272 i10 = i10 | 0;
13273 i4 = i4 | 0;
13274 i1 = i1 | 0;
13275 i5 = i5 | 0;
13276 i6 = i6 | 0;
13277 var i2 = 0, i9 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0;
13278 i2 = STACKTOP;
13279 if ((i5 | 0) == 0) {
13280  i12 = -6;
13281  STACKTOP = i2;
13282  return i12 | 0;
13283 }
13284 if (!((HEAP8[i5] | 0) == 49 & (i6 | 0) == 56)) {
13285  i12 = -6;
13286  STACKTOP = i2;
13287  return i12 | 0;
13288 }
13289 if ((i3 | 0) == 0) {
13290  i12 = -2;
13291  STACKTOP = i2;
13292  return i12 | 0;
13293 }
13294 i5 = i3 + 24 | 0;
13295 HEAP32[i5 >> 2] = 0;
13296 i6 = i3 + 32 | 0;
13297 i9 = HEAP32[i6 >> 2] | 0;
13298 if ((i9 | 0) == 0) {
13299  HEAP32[i6 >> 2] = 1;
13300  HEAP32[i3 + 40 >> 2] = 0;
13301  i9 = 1;
13302 }
13303 i11 = i3 + 36 | 0;
13304 if ((HEAP32[i11 >> 2] | 0) == 0) {
13305  HEAP32[i11 >> 2] = 1;
13306 }
13307 i7 = (i7 | 0) == -1 ? 6 : i7;
13308 if ((i10 | 0) < 0) {
13309  i10 = 0 - i10 | 0;
13310  i11 = 0;
13311 } else {
13312  i11 = (i10 | 0) > 15;
13313  i10 = i11 ? i10 + -16 | 0 : i10;
13314  i11 = i11 ? 2 : 1;
13315 }
13316 if (!((i4 + -1 | 0) >>> 0 < 9 & (i8 | 0) == 8)) {
13317  i12 = -2;
13318  STACKTOP = i2;
13319  return i12 | 0;
13320 }
13321 if ((i10 + -8 | 0) >>> 0 > 7 | i7 >>> 0 > 9 | i1 >>> 0 > 4) {
13322  i12 = -2;
13323  STACKTOP = i2;
13324  return i12 | 0;
13325 }
13326 i12 = (i10 | 0) == 8 ? 9 : i10;
13327 i10 = i3 + 40 | 0;
13328 i8 = FUNCTION_TABLE_iiii[i9 & 1](HEAP32[i10 >> 2] | 0, 1, 5828) | 0;
13329 if ((i8 | 0) == 0) {
13330  i12 = -4;
13331  STACKTOP = i2;
13332  return i12 | 0;
13333 }
13334 HEAP32[i3 + 28 >> 2] = i8;
13335 HEAP32[i8 >> 2] = i3;
13336 HEAP32[i8 + 24 >> 2] = i11;
13337 HEAP32[i8 + 28 >> 2] = 0;
13338 HEAP32[i8 + 48 >> 2] = i12;
13339 i14 = 1 << i12;
13340 i11 = i8 + 44 | 0;
13341 HEAP32[i11 >> 2] = i14;
13342 HEAP32[i8 + 52 >> 2] = i14 + -1;
13343 i12 = i4 + 7 | 0;
13344 HEAP32[i8 + 80 >> 2] = i12;
13345 i12 = 1 << i12;
13346 i13 = i8 + 76 | 0;
13347 HEAP32[i13 >> 2] = i12;
13348 HEAP32[i8 + 84 >> 2] = i12 + -1;
13349 HEAP32[i8 + 88 >> 2] = ((i4 + 9 | 0) >>> 0) / 3 | 0;
13350 i12 = i8 + 56 | 0;
13351 HEAP32[i12 >> 2] = FUNCTION_TABLE_iiii[HEAP32[i6 >> 2] & 1](HEAP32[i10 >> 2] | 0, i14, 2) | 0;
13352 i14 = FUNCTION_TABLE_iiii[HEAP32[i6 >> 2] & 1](HEAP32[i10 >> 2] | 0, HEAP32[i11 >> 2] | 0, 2) | 0;
13353 i9 = i8 + 64 | 0;
13354 HEAP32[i9 >> 2] = i14;
13355 _memset(i14 | 0, 0, HEAP32[i11 >> 2] << 1 | 0) | 0;
13356 i11 = i8 + 68 | 0;
13357 HEAP32[i11 >> 2] = FUNCTION_TABLE_iiii[HEAP32[i6 >> 2] & 1](HEAP32[i10 >> 2] | 0, HEAP32[i13 >> 2] | 0, 2) | 0;
13358 HEAP32[i8 + 5824 >> 2] = 0;
13359 i4 = 1 << i4 + 6;
13360 i13 = i8 + 5788 | 0;
13361 HEAP32[i13 >> 2] = i4;
13362 i4 = FUNCTION_TABLE_iiii[HEAP32[i6 >> 2] & 1](HEAP32[i10 >> 2] | 0, i4, 4) | 0;
13363 HEAP32[i8 + 8 >> 2] = i4;
13364 i6 = HEAP32[i13 >> 2] | 0;
13365 HEAP32[i8 + 12 >> 2] = i6 << 2;
13366 if (((HEAP32[i12 >> 2] | 0) != 0 ? (HEAP32[i9 >> 2] | 0) != 0 : 0) ? !((HEAP32[i11 >> 2] | 0) == 0 | (i4 | 0) == 0) : 0) {
13367  HEAP32[i8 + 5796 >> 2] = i4 + (i6 >>> 1 << 1);
13368  HEAP32[i8 + 5784 >> 2] = i4 + (i6 * 3 | 0);
13369  HEAP32[i8 + 132 >> 2] = i7;
13370  HEAP32[i8 + 136 >> 2] = i1;
13371  HEAP8[i8 + 36 | 0] = 8;
13372  i14 = _deflateReset(i3) | 0;
13373  STACKTOP = i2;
13374  return i14 | 0;
13375 }
13376 HEAP32[i8 + 4 >> 2] = 666;
13377 HEAP32[i5 >> 2] = HEAP32[3176 >> 2];
13378 _deflateEnd(i3) | 0;
13379 i14 = -4;
13380 STACKTOP = i2;
13381 return i14 | 0;
13382}
13383function _longest_match(i19, i16) {
13384 i19 = i19 | 0;
13385 i16 = i16 | 0;
13386 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i17 = 0, i18 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0;
13387 i1 = STACKTOP;
13388 i18 = HEAP32[i19 + 124 >> 2] | 0;
13389 i3 = HEAP32[i19 + 56 >> 2] | 0;
13390 i5 = HEAP32[i19 + 108 >> 2] | 0;
13391 i4 = i3 + i5 | 0;
13392 i20 = HEAP32[i19 + 120 >> 2] | 0;
13393 i10 = HEAP32[i19 + 144 >> 2] | 0;
13394 i2 = (HEAP32[i19 + 44 >> 2] | 0) + -262 | 0;
13395 i8 = i5 >>> 0 > i2 >>> 0 ? i5 - i2 | 0 : 0;
13396 i6 = HEAP32[i19 + 64 >> 2] | 0;
13397 i7 = HEAP32[i19 + 52 >> 2] | 0;
13398 i9 = i3 + (i5 + 258) | 0;
13399 i2 = HEAP32[i19 + 116 >> 2] | 0;
13400 i12 = i10 >>> 0 > i2 >>> 0 ? i2 : i10;
13401 i11 = i19 + 112 | 0;
13402 i15 = i3 + (i5 + 1) | 0;
13403 i14 = i3 + (i5 + 2) | 0;
13404 i13 = i9;
13405 i10 = i5 + 257 | 0;
13406 i17 = i20;
13407 i18 = i20 >>> 0 < (HEAP32[i19 + 140 >> 2] | 0) >>> 0 ? i18 : i18 >>> 2;
13408 i19 = HEAP8[i3 + (i20 + i5) | 0] | 0;
13409 i20 = HEAP8[i3 + (i5 + -1 + i20) | 0] | 0;
13410 while (1) {
13411  i21 = i3 + i16 | 0;
13412  if ((((HEAP8[i3 + (i16 + i17) | 0] | 0) == i19 << 24 >> 24 ? (HEAP8[i3 + (i17 + -1 + i16) | 0] | 0) == i20 << 24 >> 24 : 0) ? (HEAP8[i21] | 0) == (HEAP8[i4] | 0) : 0) ? (HEAP8[i3 + (i16 + 1) | 0] | 0) == (HEAP8[i15] | 0) : 0) {
13413   i21 = i3 + (i16 + 2) | 0;
13414   i22 = i14;
13415   do {
13416    i23 = i22 + 1 | 0;
13417    if ((HEAP8[i23] | 0) != (HEAP8[i21 + 1 | 0] | 0)) {
13418     i22 = i23;
13419     break;
13420    }
13421    i23 = i22 + 2 | 0;
13422    if ((HEAP8[i23] | 0) != (HEAP8[i21 + 2 | 0] | 0)) {
13423     i22 = i23;
13424     break;
13425    }
13426    i23 = i22 + 3 | 0;
13427    if ((HEAP8[i23] | 0) != (HEAP8[i21 + 3 | 0] | 0)) {
13428     i22 = i23;
13429     break;
13430    }
13431    i23 = i22 + 4 | 0;
13432    if ((HEAP8[i23] | 0) != (HEAP8[i21 + 4 | 0] | 0)) {
13433     i22 = i23;
13434     break;
13435    }
13436    i23 = i22 + 5 | 0;
13437    if ((HEAP8[i23] | 0) != (HEAP8[i21 + 5 | 0] | 0)) {
13438     i22 = i23;
13439     break;
13440    }
13441    i23 = i22 + 6 | 0;
13442    if ((HEAP8[i23] | 0) != (HEAP8[i21 + 6 | 0] | 0)) {
13443     i22 = i23;
13444     break;
13445    }
13446    i23 = i22 + 7 | 0;
13447    if ((HEAP8[i23] | 0) != (HEAP8[i21 + 7 | 0] | 0)) {
13448     i22 = i23;
13449     break;
13450    }
13451    i22 = i22 + 8 | 0;
13452    i21 = i21 + 8 | 0;
13453   } while ((HEAP8[i22] | 0) == (HEAP8[i21] | 0) & i22 >>> 0 < i9 >>> 0);
13454   i21 = i22 - i13 | 0;
13455   i22 = i21 + 258 | 0;
13456   if ((i22 | 0) > (i17 | 0)) {
13457    HEAP32[i11 >> 2] = i16;
13458    if ((i22 | 0) >= (i12 | 0)) {
13459     i17 = i22;
13460     i3 = 20;
13461     break;
13462    }
13463    i17 = i22;
13464    i19 = HEAP8[i3 + (i22 + i5) | 0] | 0;
13465    i20 = HEAP8[i3 + (i10 + i21) | 0] | 0;
13466   }
13467  }
13468  i16 = HEAPU16[i6 + ((i16 & i7) << 1) >> 1] | 0;
13469  if (!(i16 >>> 0 > i8 >>> 0)) {
13470   i3 = 20;
13471   break;
13472  }
13473  i18 = i18 + -1 | 0;
13474  if ((i18 | 0) == 0) {
13475   i3 = 20;
13476   break;
13477  }
13478 }
13479 if ((i3 | 0) == 20) {
13480  STACKTOP = i1;
13481  return (i17 >>> 0 > i2 >>> 0 ? i2 : i17) | 0;
13482 }
13483 return 0;
13484}
13485function __tr_stored_block(i3, i2, i5, i6) {
13486 i3 = i3 | 0;
13487 i2 = i2 | 0;
13488 i5 = i5 | 0;
13489 i6 = i6 | 0;
13490 var i1 = 0, i4 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
13491 i1 = STACKTOP;
13492 i4 = i3 + 5820 | 0;
13493 i7 = HEAP32[i4 >> 2] | 0;
13494 i9 = i6 & 65535;
13495 i6 = i3 + 5816 | 0;
13496 i8 = HEAPU16[i6 >> 1] | 0 | i9 << i7;
13497 HEAP16[i6 >> 1] = i8;
13498 if ((i7 | 0) > 13) {
13499  i11 = i3 + 20 | 0;
13500  i7 = HEAP32[i11 >> 2] | 0;
13501  HEAP32[i11 >> 2] = i7 + 1;
13502  i10 = i3 + 8 | 0;
13503  HEAP8[(HEAP32[i10 >> 2] | 0) + i7 | 0] = i8;
13504  i8 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
13505  i7 = HEAP32[i11 >> 2] | 0;
13506  HEAP32[i11 >> 2] = i7 + 1;
13507  HEAP8[(HEAP32[i10 >> 2] | 0) + i7 | 0] = i8;
13508  i7 = HEAP32[i4 >> 2] | 0;
13509  i8 = i9 >>> (16 - i7 | 0);
13510  HEAP16[i6 >> 1] = i8;
13511  i7 = i7 + -13 | 0;
13512 } else {
13513  i7 = i7 + 3 | 0;
13514 }
13515 i8 = i8 & 255;
13516 HEAP32[i4 >> 2] = i7;
13517 do {
13518  if ((i7 | 0) <= 8) {
13519   i9 = i3 + 20 | 0;
13520   if ((i7 | 0) > 0) {
13521    i7 = HEAP32[i9 >> 2] | 0;
13522    HEAP32[i9 >> 2] = i7 + 1;
13523    i11 = i3 + 8 | 0;
13524    HEAP8[(HEAP32[i11 >> 2] | 0) + i7 | 0] = i8;
13525    i7 = i9;
13526    i8 = i11;
13527    break;
13528   } else {
13529    i7 = i9;
13530    i8 = i3 + 8 | 0;
13531    break;
13532   }
13533  } else {
13534   i7 = i3 + 20 | 0;
13535   i10 = HEAP32[i7 >> 2] | 0;
13536   HEAP32[i7 >> 2] = i10 + 1;
13537   i11 = i3 + 8 | 0;
13538   HEAP8[(HEAP32[i11 >> 2] | 0) + i10 | 0] = i8;
13539   i10 = (HEAPU16[i6 >> 1] | 0) >>> 8 & 255;
13540   i8 = HEAP32[i7 >> 2] | 0;
13541   HEAP32[i7 >> 2] = i8 + 1;
13542   HEAP8[(HEAP32[i11 >> 2] | 0) + i8 | 0] = i10;
13543   i8 = i11;
13544  }
13545 } while (0);
13546 HEAP16[i6 >> 1] = 0;
13547 HEAP32[i4 >> 2] = 0;
13548 HEAP32[i3 + 5812 >> 2] = 8;
13549 i10 = HEAP32[i7 >> 2] | 0;
13550 HEAP32[i7 >> 2] = i10 + 1;
13551 HEAP8[(HEAP32[i8 >> 2] | 0) + i10 | 0] = i5;
13552 i10 = HEAP32[i7 >> 2] | 0;
13553 HEAP32[i7 >> 2] = i10 + 1;
13554 HEAP8[(HEAP32[i8 >> 2] | 0) + i10 | 0] = i5 >>> 8;
13555 i10 = i5 & 65535 ^ 65535;
13556 i11 = HEAP32[i7 >> 2] | 0;
13557 HEAP32[i7 >> 2] = i11 + 1;
13558 HEAP8[(HEAP32[i8 >> 2] | 0) + i11 | 0] = i10;
13559 i11 = HEAP32[i7 >> 2] | 0;
13560 HEAP32[i7 >> 2] = i11 + 1;
13561 HEAP8[(HEAP32[i8 >> 2] | 0) + i11 | 0] = i10 >>> 8;
13562 if ((i5 | 0) == 0) {
13563  STACKTOP = i1;
13564  return;
13565 }
13566 while (1) {
13567  i5 = i5 + -1 | 0;
13568  i10 = HEAP8[i2] | 0;
13569  i11 = HEAP32[i7 >> 2] | 0;
13570  HEAP32[i7 >> 2] = i11 + 1;
13571  HEAP8[(HEAP32[i8 >> 2] | 0) + i11 | 0] = i10;
13572  if ((i5 | 0) == 0) {
13573   break;
13574  } else {
13575   i2 = i2 + 1 | 0;
13576  }
13577 }
13578 STACKTOP = i1;
13579 return;
13580}
13581function _inflateInit_(i1, i3, i4) {
13582 i1 = i1 | 0;
13583 i3 = i3 | 0;
13584 i4 = i4 | 0;
13585 var i2 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
13586 i2 = STACKTOP;
13587 if ((i3 | 0) == 0) {
13588  i11 = -6;
13589  STACKTOP = i2;
13590  return i11 | 0;
13591 }
13592 if (!((HEAP8[i3] | 0) == 49 & (i4 | 0) == 56)) {
13593  i11 = -6;
13594  STACKTOP = i2;
13595  return i11 | 0;
13596 }
13597 if ((i1 | 0) == 0) {
13598  i11 = -2;
13599  STACKTOP = i2;
13600  return i11 | 0;
13601 }
13602 i3 = i1 + 24 | 0;
13603 HEAP32[i3 >> 2] = 0;
13604 i4 = i1 + 32 | 0;
13605 i6 = HEAP32[i4 >> 2] | 0;
13606 if ((i6 | 0) == 0) {
13607  HEAP32[i4 >> 2] = 1;
13608  HEAP32[i1 + 40 >> 2] = 0;
13609  i6 = 1;
13610 }
13611 i4 = i1 + 36 | 0;
13612 if ((HEAP32[i4 >> 2] | 0) == 0) {
13613  HEAP32[i4 >> 2] = 1;
13614 }
13615 i5 = i1 + 40 | 0;
13616 i8 = FUNCTION_TABLE_iiii[i6 & 1](HEAP32[i5 >> 2] | 0, 1, 7116) | 0;
13617 if ((i8 | 0) == 0) {
13618  i11 = -4;
13619  STACKTOP = i2;
13620  return i11 | 0;
13621 }
13622 i6 = i1 + 28 | 0;
13623 HEAP32[i6 >> 2] = i8;
13624 HEAP32[i8 + 52 >> 2] = 0;
13625 i9 = HEAP32[i6 >> 2] | 0;
13626 do {
13627  if ((i9 | 0) != 0) {
13628   i10 = i9 + 52 | 0;
13629   i11 = HEAP32[i10 >> 2] | 0;
13630   i7 = i9 + 36 | 0;
13631   if ((i11 | 0) != 0) {
13632    if ((HEAP32[i7 >> 2] | 0) == 15) {
13633     i10 = i9;
13634    } else {
13635     FUNCTION_TABLE_vii[HEAP32[i4 >> 2] & 1](HEAP32[i5 >> 2] | 0, i11);
13636     HEAP32[i10 >> 2] = 0;
13637     i10 = HEAP32[i6 >> 2] | 0;
13638    }
13639    HEAP32[i9 + 8 >> 2] = 1;
13640    HEAP32[i7 >> 2] = 15;
13641    if ((i10 | 0) == 0) {
13642     break;
13643    } else {
13644     i9 = i10;
13645    }
13646   } else {
13647    HEAP32[i9 + 8 >> 2] = 1;
13648    HEAP32[i7 >> 2] = 15;
13649   }
13650   HEAP32[i9 + 28 >> 2] = 0;
13651   HEAP32[i1 + 20 >> 2] = 0;
13652   HEAP32[i1 + 8 >> 2] = 0;
13653   HEAP32[i3 >> 2] = 0;
13654   HEAP32[i1 + 48 >> 2] = 1;
13655   HEAP32[i9 >> 2] = 0;
13656   HEAP32[i9 + 4 >> 2] = 0;
13657   HEAP32[i9 + 12 >> 2] = 0;
13658   HEAP32[i9 + 20 >> 2] = 32768;
13659   HEAP32[i9 + 32 >> 2] = 0;
13660   HEAP32[i9 + 40 >> 2] = 0;
13661   HEAP32[i9 + 44 >> 2] = 0;
13662   HEAP32[i9 + 48 >> 2] = 0;
13663   HEAP32[i9 + 56 >> 2] = 0;
13664   HEAP32[i9 + 60 >> 2] = 0;
13665   i11 = i9 + 1328 | 0;
13666   HEAP32[i9 + 108 >> 2] = i11;
13667   HEAP32[i9 + 80 >> 2] = i11;
13668   HEAP32[i9 + 76 >> 2] = i11;
13669   HEAP32[i9 + 7104 >> 2] = 1;
13670   HEAP32[i9 + 7108 >> 2] = -1;
13671   i11 = 0;
13672   STACKTOP = i2;
13673   return i11 | 0;
13674  }
13675 } while (0);
13676 FUNCTION_TABLE_vii[HEAP32[i4 >> 2] & 1](HEAP32[i5 >> 2] | 0, i8);
13677 HEAP32[i6 >> 2] = 0;
13678 i11 = -2;
13679 STACKTOP = i2;
13680 return i11 | 0;
13681}
13682function _init_block(i1) {
13683 i1 = i1 | 0;
13684 var i2 = 0, i3 = 0;
13685 i2 = STACKTOP;
13686 i3 = 0;
13687 do {
13688  HEAP16[i1 + (i3 << 2) + 148 >> 1] = 0;
13689  i3 = i3 + 1 | 0;
13690 } while ((i3 | 0) != 286);
13691 HEAP16[i1 + 2440 >> 1] = 0;
13692 HEAP16[i1 + 2444 >> 1] = 0;
13693 HEAP16[i1 + 2448 >> 1] = 0;
13694 HEAP16[i1 + 2452 >> 1] = 0;
13695 HEAP16[i1 + 2456 >> 1] = 0;
13696 HEAP16[i1 + 2460 >> 1] = 0;
13697 HEAP16[i1 + 2464 >> 1] = 0;
13698 HEAP16[i1 + 2468 >> 1] = 0;
13699 HEAP16[i1 + 2472 >> 1] = 0;
13700 HEAP16[i1 + 2476 >> 1] = 0;
13701 HEAP16[i1 + 2480 >> 1] = 0;
13702 HEAP16[i1 + 2484 >> 1] = 0;
13703 HEAP16[i1 + 2488 >> 1] = 0;
13704 HEAP16[i1 + 2492 >> 1] = 0;
13705 HEAP16[i1 + 2496 >> 1] = 0;
13706 HEAP16[i1 + 2500 >> 1] = 0;
13707 HEAP16[i1 + 2504 >> 1] = 0;
13708 HEAP16[i1 + 2508 >> 1] = 0;
13709 HEAP16[i1 + 2512 >> 1] = 0;
13710 HEAP16[i1 + 2516 >> 1] = 0;
13711 HEAP16[i1 + 2520 >> 1] = 0;
13712 HEAP16[i1 + 2524 >> 1] = 0;
13713 HEAP16[i1 + 2528 >> 1] = 0;
13714 HEAP16[i1 + 2532 >> 1] = 0;
13715 HEAP16[i1 + 2536 >> 1] = 0;
13716 HEAP16[i1 + 2540 >> 1] = 0;
13717 HEAP16[i1 + 2544 >> 1] = 0;
13718 HEAP16[i1 + 2548 >> 1] = 0;
13719 HEAP16[i1 + 2552 >> 1] = 0;
13720 HEAP16[i1 + 2556 >> 1] = 0;
13721 HEAP16[i1 + 2684 >> 1] = 0;
13722 HEAP16[i1 + 2688 >> 1] = 0;
13723 HEAP16[i1 + 2692 >> 1] = 0;
13724 HEAP16[i1 + 2696 >> 1] = 0;
13725 HEAP16[i1 + 2700 >> 1] = 0;
13726 HEAP16[i1 + 2704 >> 1] = 0;
13727 HEAP16[i1 + 2708 >> 1] = 0;
13728 HEAP16[i1 + 2712 >> 1] = 0;
13729 HEAP16[i1 + 2716 >> 1] = 0;
13730 HEAP16[i1 + 2720 >> 1] = 0;
13731 HEAP16[i1 + 2724 >> 1] = 0;
13732 HEAP16[i1 + 2728 >> 1] = 0;
13733 HEAP16[i1 + 2732 >> 1] = 0;
13734 HEAP16[i1 + 2736 >> 1] = 0;
13735 HEAP16[i1 + 2740 >> 1] = 0;
13736 HEAP16[i1 + 2744 >> 1] = 0;
13737 HEAP16[i1 + 2748 >> 1] = 0;
13738 HEAP16[i1 + 2752 >> 1] = 0;
13739 HEAP16[i1 + 2756 >> 1] = 0;
13740 HEAP16[i1 + 1172 >> 1] = 1;
13741 HEAP32[i1 + 5804 >> 2] = 0;
13742 HEAP32[i1 + 5800 >> 2] = 0;
13743 HEAP32[i1 + 5808 >> 2] = 0;
13744 HEAP32[i1 + 5792 >> 2] = 0;
13745 STACKTOP = i2;
13746 return;
13747}
13748function _deflateReset(i1) {
13749 i1 = i1 | 0;
13750 var i2 = 0, i3 = 0, i4 = 0, i5 = 0;
13751 i2 = STACKTOP;
13752 if ((i1 | 0) == 0) {
13753  i5 = -2;
13754  STACKTOP = i2;
13755  return i5 | 0;
13756 }
13757 i3 = HEAP32[i1 + 28 >> 2] | 0;
13758 if ((i3 | 0) == 0) {
13759  i5 = -2;
13760  STACKTOP = i2;
13761  return i5 | 0;
13762 }
13763 if ((HEAP32[i1 + 32 >> 2] | 0) == 0) {
13764  i5 = -2;
13765  STACKTOP = i2;
13766  return i5 | 0;
13767 }
13768 if ((HEAP32[i1 + 36 >> 2] | 0) == 0) {
13769  i5 = -2;
13770  STACKTOP = i2;
13771  return i5 | 0;
13772 }
13773 HEAP32[i1 + 20 >> 2] = 0;
13774 HEAP32[i1 + 8 >> 2] = 0;
13775 HEAP32[i1 + 24 >> 2] = 0;
13776 HEAP32[i1 + 44 >> 2] = 2;
13777 HEAP32[i3 + 20 >> 2] = 0;
13778 HEAP32[i3 + 16 >> 2] = HEAP32[i3 + 8 >> 2];
13779 i4 = i3 + 24 | 0;
13780 i5 = HEAP32[i4 >> 2] | 0;
13781 if ((i5 | 0) < 0) {
13782  i5 = 0 - i5 | 0;
13783  HEAP32[i4 >> 2] = i5;
13784 }
13785 HEAP32[i3 + 4 >> 2] = (i5 | 0) != 0 ? 42 : 113;
13786 if ((i5 | 0) == 2) {
13787  i4 = _crc32(0, 0, 0) | 0;
13788 } else {
13789  i4 = _adler32(0, 0, 0) | 0;
13790 }
13791 HEAP32[i1 + 48 >> 2] = i4;
13792 HEAP32[i3 + 40 >> 2] = 0;
13793 __tr_init(i3);
13794 HEAP32[i3 + 60 >> 2] = HEAP32[i3 + 44 >> 2] << 1;
13795 i5 = HEAP32[i3 + 76 >> 2] | 0;
13796 i4 = HEAP32[i3 + 68 >> 2] | 0;
13797 HEAP16[i4 + (i5 + -1 << 1) >> 1] = 0;
13798 _memset(i4 | 0, 0, (i5 << 1) + -2 | 0) | 0;
13799 i5 = HEAP32[i3 + 132 >> 2] | 0;
13800 HEAP32[i3 + 128 >> 2] = HEAPU16[178 + (i5 * 12 | 0) >> 1] | 0;
13801 HEAP32[i3 + 140 >> 2] = HEAPU16[176 + (i5 * 12 | 0) >> 1] | 0;
13802 HEAP32[i3 + 144 >> 2] = HEAPU16[180 + (i5 * 12 | 0) >> 1] | 0;
13803 HEAP32[i3 + 124 >> 2] = HEAPU16[182 + (i5 * 12 | 0) >> 1] | 0;
13804 HEAP32[i3 + 108 >> 2] = 0;
13805 HEAP32[i3 + 92 >> 2] = 0;
13806 HEAP32[i3 + 116 >> 2] = 0;
13807 HEAP32[i3 + 120 >> 2] = 2;
13808 HEAP32[i3 + 96 >> 2] = 2;
13809 HEAP32[i3 + 112 >> 2] = 0;
13810 HEAP32[i3 + 104 >> 2] = 0;
13811 HEAP32[i3 + 72 >> 2] = 0;
13812 i5 = 0;
13813 STACKTOP = i2;
13814 return i5 | 0;
13815}
13816function _updatewindow(i6, i4) {
13817 i6 = i6 | 0;
13818 i4 = i4 | 0;
13819 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0;
13820 i1 = STACKTOP;
13821 i2 = HEAP32[i6 + 28 >> 2] | 0;
13822 i3 = i2 + 52 | 0;
13823 i8 = HEAP32[i3 >> 2] | 0;
13824 if ((i8 | 0) == 0) {
13825  i8 = FUNCTION_TABLE_iiii[HEAP32[i6 + 32 >> 2] & 1](HEAP32[i6 + 40 >> 2] | 0, 1 << HEAP32[i2 + 36 >> 2], 1) | 0;
13826  HEAP32[i3 >> 2] = i8;
13827  if ((i8 | 0) == 0) {
13828   i10 = 1;
13829   STACKTOP = i1;
13830   return i10 | 0;
13831  }
13832 }
13833 i5 = i2 + 40 | 0;
13834 i10 = HEAP32[i5 >> 2] | 0;
13835 if ((i10 | 0) == 0) {
13836  i10 = 1 << HEAP32[i2 + 36 >> 2];
13837  HEAP32[i5 >> 2] = i10;
13838  HEAP32[i2 + 48 >> 2] = 0;
13839  HEAP32[i2 + 44 >> 2] = 0;
13840 }
13841 i4 = i4 - (HEAP32[i6 + 16 >> 2] | 0) | 0;
13842 if (!(i4 >>> 0 < i10 >>> 0)) {
13843  _memcpy(i8 | 0, (HEAP32[i6 + 12 >> 2] | 0) + (0 - i10) | 0, i10 | 0) | 0;
13844  HEAP32[i2 + 48 >> 2] = 0;
13845  HEAP32[i2 + 44 >> 2] = HEAP32[i5 >> 2];
13846  i10 = 0;
13847  STACKTOP = i1;
13848  return i10 | 0;
13849 }
13850 i7 = i2 + 48 | 0;
13851 i9 = HEAP32[i7 >> 2] | 0;
13852 i10 = i10 - i9 | 0;
13853 i10 = i10 >>> 0 > i4 >>> 0 ? i4 : i10;
13854 i6 = i6 + 12 | 0;
13855 _memcpy(i8 + i9 | 0, (HEAP32[i6 >> 2] | 0) + (0 - i4) | 0, i10 | 0) | 0;
13856 i8 = i4 - i10 | 0;
13857 if ((i4 | 0) != (i10 | 0)) {
13858  _memcpy(HEAP32[i3 >> 2] | 0, (HEAP32[i6 >> 2] | 0) + (0 - i8) | 0, i8 | 0) | 0;
13859  HEAP32[i7 >> 2] = i8;
13860  HEAP32[i2 + 44 >> 2] = HEAP32[i5 >> 2];
13861  i10 = 0;
13862  STACKTOP = i1;
13863  return i10 | 0;
13864 }
13865 i6 = (HEAP32[i7 >> 2] | 0) + i4 | 0;
13866 i3 = HEAP32[i5 >> 2] | 0;
13867 HEAP32[i7 >> 2] = (i6 | 0) == (i3 | 0) ? 0 : i6;
13868 i5 = i2 + 44 | 0;
13869 i2 = HEAP32[i5 >> 2] | 0;
13870 if (!(i2 >>> 0 < i3 >>> 0)) {
13871  i10 = 0;
13872  STACKTOP = i1;
13873  return i10 | 0;
13874 }
13875 HEAP32[i5 >> 2] = i2 + i4;
13876 i10 = 0;
13877 STACKTOP = i1;
13878 return i10 | 0;
13879}
13880function _scan_tree(i1, i5, i6) {
13881 i1 = i1 | 0;
13882 i5 = i5 | 0;
13883 i6 = i6 | 0;
13884 var i2 = 0, i3 = 0, i4 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0;
13885 i8 = STACKTOP;
13886 i10 = HEAP16[i5 + 2 >> 1] | 0;
13887 i9 = i10 << 16 >> 16 == 0;
13888 HEAP16[i5 + (i6 + 1 << 2) + 2 >> 1] = -1;
13889 i2 = i1 + 2752 | 0;
13890 i3 = i1 + 2756 | 0;
13891 i4 = i1 + 2748 | 0;
13892 i7 = i9 ? 138 : 7;
13893 i9 = i9 ? 3 : 4;
13894 i13 = 0;
13895 i11 = i10 & 65535;
13896 i12 = -1;
13897 L1 : while (1) {
13898  i14 = 0;
13899  do {
13900   if ((i13 | 0) > (i6 | 0)) {
13901    break L1;
13902   }
13903   i13 = i13 + 1 | 0;
13904   i16 = HEAP16[i5 + (i13 << 2) + 2 >> 1] | 0;
13905   i10 = i16 & 65535;
13906   i14 = i14 + 1 | 0;
13907   i15 = (i11 | 0) == (i10 | 0);
13908  } while ((i14 | 0) < (i7 | 0) & i15);
13909  do {
13910   if ((i14 | 0) >= (i9 | 0)) {
13911    if ((i11 | 0) == 0) {
13912     if ((i14 | 0) < 11) {
13913      HEAP16[i2 >> 1] = (HEAP16[i2 >> 1] | 0) + 1 << 16 >> 16;
13914      break;
13915     } else {
13916      HEAP16[i3 >> 1] = (HEAP16[i3 >> 1] | 0) + 1 << 16 >> 16;
13917      break;
13918     }
13919    } else {
13920     if ((i11 | 0) != (i12 | 0)) {
13921      i14 = i1 + (i11 << 2) + 2684 | 0;
13922      HEAP16[i14 >> 1] = (HEAP16[i14 >> 1] | 0) + 1 << 16 >> 16;
13923     }
13924     HEAP16[i4 >> 1] = (HEAP16[i4 >> 1] | 0) + 1 << 16 >> 16;
13925     break;
13926    }
13927   } else {
13928    i12 = i1 + (i11 << 2) + 2684 | 0;
13929    HEAP16[i12 >> 1] = (HEAPU16[i12 >> 1] | 0) + i14;
13930   }
13931  } while (0);
13932  if (i16 << 16 >> 16 == 0) {
13933   i12 = i11;
13934   i7 = 138;
13935   i9 = 3;
13936   i11 = i10;
13937   continue;
13938  }
13939  i12 = i11;
13940  i7 = i15 ? 6 : 7;
13941  i9 = i15 ? 3 : 4;
13942  i11 = i10;
13943 }
13944 STACKTOP = i8;
13945 return;
13946}
13947function _deflateEnd(i4) {
13948 i4 = i4 | 0;
13949 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0;
13950 i3 = STACKTOP;
13951 if ((i4 | 0) == 0) {
13952  i7 = -2;
13953  STACKTOP = i3;
13954  return i7 | 0;
13955 }
13956 i1 = i4 + 28 | 0;
13957 i6 = HEAP32[i1 >> 2] | 0;
13958 if ((i6 | 0) == 0) {
13959  i7 = -2;
13960  STACKTOP = i3;
13961  return i7 | 0;
13962 }
13963 i2 = HEAP32[i6 + 4 >> 2] | 0;
13964 switch (i2 | 0) {
13965 case 42:
13966 case 69:
13967 case 73:
13968 case 91:
13969 case 103:
13970 case 113:
13971 case 666:
13972  {
13973   break;
13974  }
13975 default:
13976  {
13977   i7 = -2;
13978   STACKTOP = i3;
13979   return i7 | 0;
13980  }
13981 }
13982 i5 = HEAP32[i6 + 8 >> 2] | 0;
13983 if ((i5 | 0) != 0) {
13984  FUNCTION_TABLE_vii[HEAP32[i4 + 36 >> 2] & 1](HEAP32[i4 + 40 >> 2] | 0, i5);
13985  i6 = HEAP32[i1 >> 2] | 0;
13986 }
13987 i5 = HEAP32[i6 + 68 >> 2] | 0;
13988 if ((i5 | 0) != 0) {
13989  FUNCTION_TABLE_vii[HEAP32[i4 + 36 >> 2] & 1](HEAP32[i4 + 40 >> 2] | 0, i5);
13990  i6 = HEAP32[i1 >> 2] | 0;
13991 }
13992 i5 = HEAP32[i6 + 64 >> 2] | 0;
13993 if ((i5 | 0) != 0) {
13994  FUNCTION_TABLE_vii[HEAP32[i4 + 36 >> 2] & 1](HEAP32[i4 + 40 >> 2] | 0, i5);
13995  i6 = HEAP32[i1 >> 2] | 0;
13996 }
13997 i7 = HEAP32[i6 + 56 >> 2] | 0;
13998 i5 = i4 + 36 | 0;
13999 if ((i7 | 0) == 0) {
14000  i4 = i4 + 40 | 0;
14001 } else {
14002  i4 = i4 + 40 | 0;
14003  FUNCTION_TABLE_vii[HEAP32[i5 >> 2] & 1](HEAP32[i4 >> 2] | 0, i7);
14004  i6 = HEAP32[i1 >> 2] | 0;
14005 }
14006 FUNCTION_TABLE_vii[HEAP32[i5 >> 2] & 1](HEAP32[i4 >> 2] | 0, i6);
14007 HEAP32[i1 >> 2] = 0;
14008 i7 = (i2 | 0) == 113 ? -3 : 0;
14009 STACKTOP = i3;
14010 return i7 | 0;
14011}
14012function _main(i4, i5) {
14013 i4 = i4 | 0;
14014 i5 = i5 | 0;
14015 var i1 = 0, i2 = 0, i3 = 0, i6 = 0;
14016 i1 = STACKTOP;
14017 STACKTOP = STACKTOP + 16 | 0;
14018 i2 = i1;
14019 L1 : do {
14020  if ((i4 | 0) > 1) {
14021   i4 = HEAP8[HEAP32[i5 + 4 >> 2] | 0] | 0;
14022   switch (i4 | 0) {
14023   case 50:
14024    {
14025     i2 = 250;
14026     break L1;
14027    }
14028   case 51:
14029    {
14030     i3 = 4;
14031     break L1;
14032    }
14033   case 52:
14034    {
14035     i2 = 2500;
14036     break L1;
14037    }
14038   case 53:
14039    {
14040     i2 = 5e3;
14041     break L1;
14042    }
14043   case 48:
14044    {
14045     i6 = 0;
14046     STACKTOP = i1;
14047     return i6 | 0;
14048    }
14049   case 49:
14050    {
14051     i2 = 60;
14052     break L1;
14053    }
14054   default:
14055    {
14056     HEAP32[i2 >> 2] = i4 + -48;
14057     _printf(144, i2 | 0) | 0;
14058     i6 = -1;
14059     STACKTOP = i1;
14060     return i6 | 0;
14061    }
14062   }
14063  } else {
14064   i3 = 4;
14065  }
14066 } while (0);
14067 if ((i3 | 0) == 4) {
14068  i2 = 500;
14069 }
14070 i3 = _malloc(1e5) | 0;
14071 i4 = 0;
14072 i6 = 0;
14073 i5 = 17;
14074 while (1) {
14075  do {
14076   if ((i6 | 0) <= 0) {
14077    if ((i4 & 7 | 0) == 0) {
14078     i6 = i4 & 31;
14079     i5 = 0;
14080     break;
14081    } else {
14082     i5 = (((Math_imul(i4, i4) | 0) >>> 0) % 6714 | 0) & 255;
14083     break;
14084    }
14085   } else {
14086    i6 = i6 + -1 | 0;
14087   }
14088  } while (0);
14089  HEAP8[i3 + i4 | 0] = i5;
14090  i4 = i4 + 1 | 0;
14091  if ((i4 | 0) == 1e5) {
14092   i4 = 0;
14093   break;
14094  }
14095 }
14096 do {
14097  _doit(i3, 1e5, i4);
14098  i4 = i4 + 1 | 0;
14099 } while ((i4 | 0) < (i2 | 0));
14100 _puts(160) | 0;
14101 i6 = 0;
14102 STACKTOP = i1;
14103 return i6 | 0;
14104}
14105function _doit(i6, i1, i7) {
14106 i6 = i6 | 0;
14107 i1 = i1 | 0;
14108 i7 = i7 | 0;
14109 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i8 = 0, i9 = 0;
14110 i5 = STACKTOP;
14111 STACKTOP = STACKTOP + 16 | 0;
14112 i4 = i5;
14113 i3 = i5 + 12 | 0;
14114 i2 = i5 + 8 | 0;
14115 i8 = _compressBound(i1) | 0;
14116 i9 = HEAP32[2] | 0;
14117 if ((i9 | 0) == 0) {
14118  i9 = _malloc(i8) | 0;
14119  HEAP32[2] = i9;
14120 }
14121 if ((HEAP32[4] | 0) == 0) {
14122  HEAP32[4] = _malloc(i1) | 0;
14123 }
14124 HEAP32[i3 >> 2] = i8;
14125 _compress(i9, i3, i6, i1) | 0;
14126 i7 = (i7 | 0) == 0;
14127 if (i7) {
14128  i9 = HEAP32[i3 >> 2] | 0;
14129  HEAP32[i4 >> 2] = i1;
14130  HEAP32[i4 + 4 >> 2] = i9;
14131  _printf(24, i4 | 0) | 0;
14132 }
14133 HEAP32[i2 >> 2] = i1;
14134 _uncompress(HEAP32[4] | 0, i2, HEAP32[2] | 0, HEAP32[i3 >> 2] | 0) | 0;
14135 if ((HEAP32[i2 >> 2] | 0) != (i1 | 0)) {
14136  ___assert_fail(40, 72, 24, 104);
14137 }
14138 if (!i7) {
14139  STACKTOP = i5;
14140  return;
14141 }
14142 if ((_strcmp(i6, HEAP32[4] | 0) | 0) == 0) {
14143  STACKTOP = i5;
14144  return;
14145 } else {
14146  ___assert_fail(112, 72, 25, 104);
14147 }
14148}
14149function _uncompress(i6, i1, i5, i7) {
14150 i6 = i6 | 0;
14151 i1 = i1 | 0;
14152 i5 = i5 | 0;
14153 i7 = i7 | 0;
14154 var i2 = 0, i3 = 0, i4 = 0;
14155 i2 = STACKTOP;
14156 STACKTOP = STACKTOP + 64 | 0;
14157 i3 = i2;
14158 HEAP32[i3 >> 2] = i5;
14159 i5 = i3 + 4 | 0;
14160 HEAP32[i5 >> 2] = i7;
14161 HEAP32[i3 + 12 >> 2] = i6;
14162 HEAP32[i3 + 16 >> 2] = HEAP32[i1 >> 2];
14163 HEAP32[i3 + 32 >> 2] = 0;
14164 HEAP32[i3 + 36 >> 2] = 0;
14165 i6 = _inflateInit_(i3, 2992, 56) | 0;
14166 if ((i6 | 0) != 0) {
14167  i7 = i6;
14168  STACKTOP = i2;
14169  return i7 | 0;
14170 }
14171 i6 = _inflate(i3, 4) | 0;
14172 if ((i6 | 0) == 1) {
14173  HEAP32[i1 >> 2] = HEAP32[i3 + 20 >> 2];
14174  i7 = _inflateEnd(i3) | 0;
14175  STACKTOP = i2;
14176  return i7 | 0;
14177 }
14178 _inflateEnd(i3) | 0;
14179 if ((i6 | 0) == 2) {
14180  i7 = -3;
14181  STACKTOP = i2;
14182  return i7 | 0;
14183 } else if ((i6 | 0) == -5) {
14184  i4 = 4;
14185 }
14186 if ((i4 | 0) == 4 ? (HEAP32[i5 >> 2] | 0) == 0 : 0) {
14187  i7 = -3;
14188  STACKTOP = i2;
14189  return i7 | 0;
14190 }
14191 i7 = i6;
14192 STACKTOP = i2;
14193 return i7 | 0;
14194}
14195function _compress(i4, i1, i6, i5) {
14196 i4 = i4 | 0;
14197 i1 = i1 | 0;
14198 i6 = i6 | 0;
14199 i5 = i5 | 0;
14200 var i2 = 0, i3 = 0;
14201 i2 = STACKTOP;
14202 STACKTOP = STACKTOP + 64 | 0;
14203 i3 = i2;
14204 HEAP32[i3 >> 2] = i6;
14205 HEAP32[i3 + 4 >> 2] = i5;
14206 HEAP32[i3 + 12 >> 2] = i4;
14207 HEAP32[i3 + 16 >> 2] = HEAP32[i1 >> 2];
14208 HEAP32[i3 + 32 >> 2] = 0;
14209 HEAP32[i3 + 36 >> 2] = 0;
14210 HEAP32[i3 + 40 >> 2] = 0;
14211 i4 = _deflateInit_(i3, -1, 168, 56) | 0;
14212 if ((i4 | 0) != 0) {
14213  i6 = i4;
14214  STACKTOP = i2;
14215  return i6 | 0;
14216 }
14217 i4 = _deflate(i3, 4) | 0;
14218 if ((i4 | 0) == 1) {
14219  HEAP32[i1 >> 2] = HEAP32[i3 + 20 >> 2];
14220  i6 = _deflateEnd(i3) | 0;
14221  STACKTOP = i2;
14222  return i6 | 0;
14223 } else {
14224  _deflateEnd(i3) | 0;
14225  i6 = (i4 | 0) == 0 ? -5 : i4;
14226  STACKTOP = i2;
14227  return i6 | 0;
14228 }
14229 return 0;
14230}
14231function _inflateEnd(i4) {
14232 i4 = i4 | 0;
14233 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0;
14234 i1 = STACKTOP;
14235 if ((i4 | 0) == 0) {
14236  i7 = -2;
14237  STACKTOP = i1;
14238  return i7 | 0;
14239 }
14240 i2 = i4 + 28 | 0;
14241 i3 = HEAP32[i2 >> 2] | 0;
14242 if ((i3 | 0) == 0) {
14243  i7 = -2;
14244  STACKTOP = i1;
14245  return i7 | 0;
14246 }
14247 i6 = i4 + 36 | 0;
14248 i5 = HEAP32[i6 >> 2] | 0;
14249 if ((i5 | 0) == 0) {
14250  i7 = -2;
14251  STACKTOP = i1;
14252  return i7 | 0;
14253 }
14254 i7 = HEAP32[i3 + 52 >> 2] | 0;
14255 i4 = i4 + 40 | 0;
14256 if ((i7 | 0) != 0) {
14257  FUNCTION_TABLE_vii[i5 & 1](HEAP32[i4 >> 2] | 0, i7);
14258  i5 = HEAP32[i6 >> 2] | 0;
14259  i3 = HEAP32[i2 >> 2] | 0;
14260 }
14261 FUNCTION_TABLE_vii[i5 & 1](HEAP32[i4 >> 2] | 0, i3);
14262 HEAP32[i2 >> 2] = 0;
14263 i7 = 0;
14264 STACKTOP = i1;
14265 return i7 | 0;
14266}
14267function _memcpy(i3, i2, i1) {
14268 i3 = i3 | 0;
14269 i2 = i2 | 0;
14270 i1 = i1 | 0;
14271 var i4 = 0;
14272 if ((i1 | 0) >= 4096) return _emscripten_memcpy_big(i3 | 0, i2 | 0, i1 | 0) | 0;
14273 i4 = i3 | 0;
14274 if ((i3 & 3) == (i2 & 3)) {
14275  while (i3 & 3) {
14276   if ((i1 | 0) == 0) return i4 | 0;
14277   HEAP8[i3] = HEAP8[i2] | 0;
14278   i3 = i3 + 1 | 0;
14279   i2 = i2 + 1 | 0;
14280   i1 = i1 - 1 | 0;
14281  }
14282  while ((i1 | 0) >= 4) {
14283   HEAP32[i3 >> 2] = HEAP32[i2 >> 2];
14284   i3 = i3 + 4 | 0;
14285   i2 = i2 + 4 | 0;
14286   i1 = i1 - 4 | 0;
14287  }
14288 }
14289 while ((i1 | 0) > 0) {
14290  HEAP8[i3] = HEAP8[i2] | 0;
14291  i3 = i3 + 1 | 0;
14292  i2 = i2 + 1 | 0;
14293  i1 = i1 - 1 | 0;
14294 }
14295 return i4 | 0;
14296}
14297function _strcmp(i4, i2) {
14298 i4 = i4 | 0;
14299 i2 = i2 | 0;
14300 var i1 = 0, i3 = 0, i5 = 0;
14301 i1 = STACKTOP;
14302 i5 = HEAP8[i4] | 0;
14303 i3 = HEAP8[i2] | 0;
14304 if (i5 << 24 >> 24 != i3 << 24 >> 24 | i5 << 24 >> 24 == 0 | i3 << 24 >> 24 == 0) {
14305  i4 = i5;
14306  i5 = i3;
14307  i4 = i4 & 255;
14308  i5 = i5 & 255;
14309  i5 = i4 - i5 | 0;
14310  STACKTOP = i1;
14311  return i5 | 0;
14312 }
14313 do {
14314  i4 = i4 + 1 | 0;
14315  i2 = i2 + 1 | 0;
14316  i5 = HEAP8[i4] | 0;
14317  i3 = HEAP8[i2] | 0;
14318 } while (!(i5 << 24 >> 24 != i3 << 24 >> 24 | i5 << 24 >> 24 == 0 | i3 << 24 >> 24 == 0));
14319 i4 = i5 & 255;
14320 i5 = i3 & 255;
14321 i5 = i4 - i5 | 0;
14322 STACKTOP = i1;
14323 return i5 | 0;
14324}
14325function _memset(i1, i4, i3) {
14326 i1 = i1 | 0;
14327 i4 = i4 | 0;
14328 i3 = i3 | 0;
14329 var i2 = 0, i5 = 0, i6 = 0, i7 = 0;
14330 i2 = i1 + i3 | 0;
14331 if ((i3 | 0) >= 20) {
14332  i4 = i4 & 255;
14333  i7 = i1 & 3;
14334  i6 = i4 | i4 << 8 | i4 << 16 | i4 << 24;
14335  i5 = i2 & ~3;
14336  if (i7) {
14337   i7 = i1 + 4 - i7 | 0;
14338   while ((i1 | 0) < (i7 | 0)) {
14339    HEAP8[i1] = i4;
14340    i1 = i1 + 1 | 0;
14341   }
14342  }
14343  while ((i1 | 0) < (i5 | 0)) {
14344   HEAP32[i1 >> 2] = i6;
14345   i1 = i1 + 4 | 0;
14346  }
14347 }
14348 while ((i1 | 0) < (i2 | 0)) {
14349  HEAP8[i1] = i4;
14350  i1 = i1 + 1 | 0;
14351 }
14352 return i1 - i3 | 0;
14353}
14354function copyTempDouble(i1) {
14355 i1 = i1 | 0;
14356 HEAP8[tempDoublePtr] = HEAP8[i1];
14357 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
14358 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
14359 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
14360 HEAP8[tempDoublePtr + 4 | 0] = HEAP8[i1 + 4 | 0];
14361 HEAP8[tempDoublePtr + 5 | 0] = HEAP8[i1 + 5 | 0];
14362 HEAP8[tempDoublePtr + 6 | 0] = HEAP8[i1 + 6 | 0];
14363 HEAP8[tempDoublePtr + 7 | 0] = HEAP8[i1 + 7 | 0];
14364}
14365function __tr_init(i1) {
14366 i1 = i1 | 0;
14367 var i2 = 0;
14368 i2 = STACKTOP;
14369 HEAP32[i1 + 2840 >> 2] = i1 + 148;
14370 HEAP32[i1 + 2848 >> 2] = 1064;
14371 HEAP32[i1 + 2852 >> 2] = i1 + 2440;
14372 HEAP32[i1 + 2860 >> 2] = 1088;
14373 HEAP32[i1 + 2864 >> 2] = i1 + 2684;
14374 HEAP32[i1 + 2872 >> 2] = 1112;
14375 HEAP16[i1 + 5816 >> 1] = 0;
14376 HEAP32[i1 + 5820 >> 2] = 0;
14377 HEAP32[i1 + 5812 >> 2] = 8;
14378 _init_block(i1);
14379 STACKTOP = i2;
14380 return;
14381}
14382function copyTempFloat(i1) {
14383 i1 = i1 | 0;
14384 HEAP8[tempDoublePtr] = HEAP8[i1];
14385 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
14386 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
14387 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
14388}
14389function _deflateInit_(i4, i3, i2, i1) {
14390 i4 = i4 | 0;
14391 i3 = i3 | 0;
14392 i2 = i2 | 0;
14393 i1 = i1 | 0;
14394 var i5 = 0;
14395 i5 = STACKTOP;
14396 i4 = _deflateInit2_(i4, i3, 8, 15, 8, 0, i2, i1) | 0;
14397 STACKTOP = i5;
14398 return i4 | 0;
14399}
14400function _zcalloc(i3, i1, i2) {
14401 i3 = i3 | 0;
14402 i1 = i1 | 0;
14403 i2 = i2 | 0;
14404 var i4 = 0;
14405 i4 = STACKTOP;
14406 i3 = _malloc(Math_imul(i2, i1) | 0) | 0;
14407 STACKTOP = i4;
14408 return i3 | 0;
14409}
14410function dynCall_iiii(i4, i3, i2, i1) {
14411 i4 = i4 | 0;
14412 i3 = i3 | 0;
14413 i2 = i2 | 0;
14414 i1 = i1 | 0;
14415 return FUNCTION_TABLE_iiii[i4 & 1](i3 | 0, i2 | 0, i1 | 0) | 0;
14416}
14417function runPostSets() {}
14418function _strlen(i1) {
14419 i1 = i1 | 0;
14420 var i2 = 0;
14421 i2 = i1;
14422 while (HEAP8[i2] | 0) {
14423  i2 = i2 + 1 | 0;
14424 }
14425 return i2 - i1 | 0;
14426}
14427function stackAlloc(i1) {
14428 i1 = i1 | 0;
14429 var i2 = 0;
14430 i2 = STACKTOP;
14431 STACKTOP = STACKTOP + i1 | 0;
14432 STACKTOP = STACKTOP + 7 & -8;
14433 return i2 | 0;
14434}
14435function dynCall_iii(i3, i2, i1) {
14436 i3 = i3 | 0;
14437 i2 = i2 | 0;
14438 i1 = i1 | 0;
14439 return FUNCTION_TABLE_iii[i3 & 3](i2 | 0, i1 | 0) | 0;
14440}
14441function setThrew(i1, i2) {
14442 i1 = i1 | 0;
14443 i2 = i2 | 0;
14444 if ((__THREW__ | 0) == 0) {
14445  __THREW__ = i1;
14446  threwValue = i2;
14447 }
14448}
14449function dynCall_vii(i3, i2, i1) {
14450 i3 = i3 | 0;
14451 i2 = i2 | 0;
14452 i1 = i1 | 0;
14453 FUNCTION_TABLE_vii[i3 & 1](i2 | 0, i1 | 0);
14454}
14455function _zcfree(i2, i1) {
14456 i2 = i2 | 0;
14457 i1 = i1 | 0;
14458 i2 = STACKTOP;
14459 _free(i1);
14460 STACKTOP = i2;
14461 return;
14462}
14463function _compressBound(i1) {
14464 i1 = i1 | 0;
14465 return i1 + 13 + (i1 >>> 12) + (i1 >>> 14) + (i1 >>> 25) | 0;
14466}
14467function b0(i1, i2, i3) {
14468 i1 = i1 | 0;
14469 i2 = i2 | 0;
14470 i3 = i3 | 0;
14471 abort(0);
14472 return 0;
14473}
14474function b2(i1, i2) {
14475 i1 = i1 | 0;
14476 i2 = i2 | 0;
14477 abort(2);
14478 return 0;
14479}
14480function b1(i1, i2) {
14481 i1 = i1 | 0;
14482 i2 = i2 | 0;
14483 abort(1);
14484}
14485function stackRestore(i1) {
14486 i1 = i1 | 0;
14487 STACKTOP = i1;
14488}
14489function setTempRet9(i1) {
14490 i1 = i1 | 0;
14491 tempRet9 = i1;
14492}
14493function setTempRet8(i1) {
14494 i1 = i1 | 0;
14495 tempRet8 = i1;
14496}
14497function setTempRet7(i1) {
14498 i1 = i1 | 0;
14499 tempRet7 = i1;
14500}
14501function setTempRet6(i1) {
14502 i1 = i1 | 0;
14503 tempRet6 = i1;
14504}
14505function setTempRet5(i1) {
14506 i1 = i1 | 0;
14507 tempRet5 = i1;
14508}
14509function setTempRet4(i1) {
14510 i1 = i1 | 0;
14511 tempRet4 = i1;
14512}
14513function setTempRet3(i1) {
14514 i1 = i1 | 0;
14515 tempRet3 = i1;
14516}
14517function setTempRet2(i1) {
14518 i1 = i1 | 0;
14519 tempRet2 = i1;
14520}
14521function setTempRet1(i1) {
14522 i1 = i1 | 0;
14523 tempRet1 = i1;
14524}
14525function setTempRet0(i1) {
14526 i1 = i1 | 0;
14527 tempRet0 = i1;
14528}
14529function stackSave() {
14530 return STACKTOP | 0;
14531}
14532
14533// EMSCRIPTEN_END_FUNCS
14534  var FUNCTION_TABLE_iiii = [b0,_zcalloc];
14535  var FUNCTION_TABLE_vii = [b1,_zcfree];
14536  var FUNCTION_TABLE_iii = [b2,_deflate_stored,_deflate_fast,_deflate_slow];
14537
14538  return { _strlen: _strlen, _free: _free, _main: _main, _memset: _memset, _malloc: _malloc, _memcpy: _memcpy, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, setThrew: setThrew, setTempRet0: setTempRet0, setTempRet1: setTempRet1, setTempRet2: setTempRet2, setTempRet3: setTempRet3, setTempRet4: setTempRet4, setTempRet5: setTempRet5, setTempRet6: setTempRet6, setTempRet7: setTempRet7, setTempRet8: setTempRet8, setTempRet9: setTempRet9, dynCall_iiii: dynCall_iiii, dynCall_vii: dynCall_vii, dynCall_iii: dynCall_iii };
14539})
14540// EMSCRIPTEN_END_ASM
14541({ "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array }, { "abort": abort, "assert": assert, "asmPrintInt": asmPrintInt, "asmPrintFloat": asmPrintFloat, "min": Math_min, "invoke_iiii": invoke_iiii, "invoke_vii": invoke_vii, "invoke_iii": invoke_iii, "_send": _send, "___setErrNo": ___setErrNo, "___assert_fail": ___assert_fail, "_fflush": _fflush, "_pwrite": _pwrite, "__reallyNegative": __reallyNegative, "_sbrk": _sbrk, "___errno_location": ___errno_location, "_emscripten_memcpy_big": _emscripten_memcpy_big, "_fileno": _fileno, "_sysconf": _sysconf, "_puts": _puts, "_mkport": _mkport, "_write": _write, "_llvm_bswap_i32": _llvm_bswap_i32, "_fputc": _fputc, "_abort": _abort, "_fwrite": _fwrite, "_time": _time, "_fprintf": _fprintf, "__formatString": __formatString, "_fputs": _fputs, "_printf": _printf, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "NaN": NaN, "Infinity": Infinity }, buffer);
14542var _strlen = Module["_strlen"] = asm["_strlen"];
14543var _free = Module["_free"] = asm["_free"];
14544var _main = Module["_main"] = asm["_main"];
14545var _memset = Module["_memset"] = asm["_memset"];
14546var _malloc = Module["_malloc"] = asm["_malloc"];
14547var _memcpy = Module["_memcpy"] = asm["_memcpy"];
14548var runPostSets = Module["runPostSets"] = asm["runPostSets"];
14549var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"];
14550var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
14551var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"];
14552
14553Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) };
14554Runtime.stackSave = function() { return asm['stackSave']() };
14555Runtime.stackRestore = function(top) { asm['stackRestore'](top) };
14556
14557
14558// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included
14559var i64Math = null;
14560
14561// === Auto-generated postamble setup entry stuff ===
14562
14563if (memoryInitializer) {
14564  if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
14565    var data = Module['readBinary'](memoryInitializer);
14566    HEAPU8.set(data, STATIC_BASE);
14567  } else {
14568    addRunDependency('memory initializer');
14569    Browser.asyncLoad(memoryInitializer, function(data) {
14570      HEAPU8.set(data, STATIC_BASE);
14571      removeRunDependency('memory initializer');
14572    }, function(data) {
14573      throw 'could not load memory initializer ' + memoryInitializer;
14574    });
14575  }
14576}
14577
14578function ExitStatus(status) {
14579  this.name = "ExitStatus";
14580  this.message = "Program terminated with exit(" + status + ")";
14581  this.status = status;
14582};
14583ExitStatus.prototype = new Error();
14584ExitStatus.prototype.constructor = ExitStatus;
14585
14586var initialStackTop;
14587var preloadStartTime = null;
14588var calledMain = false;
14589
14590dependenciesFulfilled = function runCaller() {
14591  // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
14592  if (!Module['calledRun'] && shouldRunNow) run([].concat(Module["arguments"]));
14593  if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
14594}
14595
14596Module['callMain'] = Module.callMain = function callMain(args) {
14597  assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
14598  assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called');
14599
14600  args = args || [];
14601
14602  ensureInitRuntime();
14603
14604  var argc = args.length+1;
14605  function pad() {
14606    for (var i = 0; i < 4-1; i++) {
14607      argv.push(0);
14608    }
14609  }
14610  var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL) ];
14611  pad();
14612  for (var i = 0; i < argc-1; i = i + 1) {
14613    argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
14614    pad();
14615  }
14616  argv.push(0);
14617  argv = allocate(argv, 'i32', ALLOC_NORMAL);
14618
14619  initialStackTop = STACKTOP;
14620
14621  try {
14622
14623    var ret = Module['_main'](argc, argv, 0);
14624
14625
14626    // if we're not running an evented main loop, it's time to exit
14627    if (!Module['noExitRuntime']) {
14628      exit(ret);
14629    }
14630  }
14631  catch(e) {
14632    if (e instanceof ExitStatus) {
14633      // exit() throws this once it's done to make sure execution
14634      // has been stopped completely
14635      return;
14636    } else if (e == 'SimulateInfiniteLoop') {
14637      // running an evented main loop, don't immediately exit
14638      Module['noExitRuntime'] = true;
14639      return;
14640    } else {
14641      if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]);
14642      throw e;
14643    }
14644  } finally {
14645    calledMain = true;
14646  }
14647}
14648
14649
14650
14651
14652function run(args) {
14653  args = args || Module['arguments'];
14654
14655  if (preloadStartTime === null) preloadStartTime = Date.now();
14656
14657  if (runDependencies > 0) {
14658    Module.printErr('run() called, but dependencies remain, so not running');
14659    return;
14660  }
14661
14662  preRun();
14663
14664  if (runDependencies > 0) return; // a preRun added a dependency, run will be called later
14665  if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame
14666
14667  function doRun() {
14668    if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening
14669    Module['calledRun'] = true;
14670
14671    ensureInitRuntime();
14672
14673    preMain();
14674
14675    if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
14676      Module.printErr('pre-main prep time: ' + (Date.now() - preloadStartTime) + ' ms');
14677    }
14678
14679    if (Module['_main'] && shouldRunNow) {
14680      Module['callMain'](args);
14681    }
14682
14683    postRun();
14684  }
14685
14686  if (Module['setStatus']) {
14687    Module['setStatus']('Running...');
14688    setTimeout(function() {
14689      setTimeout(function() {
14690        Module['setStatus']('');
14691      }, 1);
14692      if (!ABORT) doRun();
14693    }, 1);
14694  } else {
14695    doRun();
14696  }
14697}
14698Module['run'] = Module.run = run;
14699
14700function exit(status) {
14701  ABORT = true;
14702  EXITSTATUS = status;
14703  STACKTOP = initialStackTop;
14704
14705  // exit the runtime
14706  exitRuntime();
14707
14708  // TODO We should handle this differently based on environment.
14709  // In the browser, the best we can do is throw an exception
14710  // to halt execution, but in node we could process.exit and
14711  // I'd imagine SM shell would have something equivalent.
14712  // This would let us set a proper exit status (which
14713  // would be great for checking test exit statuses).
14714  // https://github.com/kripken/emscripten/issues/1371
14715
14716  // throw an exception to halt the current execution
14717  throw new ExitStatus(status);
14718}
14719Module['exit'] = Module.exit = exit;
14720
14721function abort(text) {
14722  if (text) {
14723    Module.print(text);
14724    Module.printErr(text);
14725  }
14726
14727  ABORT = true;
14728  EXITSTATUS = 1;
14729
14730  var extra = '\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.';
14731
14732  throw 'abort() at ' + stackTrace() + extra;
14733}
14734Module['abort'] = Module.abort = abort;
14735
14736// {{PRE_RUN_ADDITIONS}}
14737
14738if (Module['preInit']) {
14739  if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
14740  while (Module['preInit'].length > 0) {
14741    Module['preInit'].pop()();
14742  }
14743}
14744
14745// shouldRunNow refers to calling main(), not run().
14746var shouldRunNow = true;
14747if (Module['noInitialRun']) {
14748  shouldRunNow = false;
14749}
14750
14751
14752run([].concat(Module["arguments"]));
14753