Skip to content

Instantly share code, notes, and snippets.

@tilpner
Created October 12, 2016 22:01
Show Gist options
  • Save tilpner/98b559574b8e9c1b68004d0ab6f8dd75 to your computer and use it in GitHub Desktop.
Save tilpner/98b559574b8e9c1b68004d0ab6f8dd75 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
#!/usr/bin/env node
/*
vim: set ts=8 sts=2 et sw=2 tw=79:
Copyright (C) 2013
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
// A conforming SIMD.js implementation may contain the following deviations to
// normal JS numeric behavior:
// - Subnormal numbers may or may not be flushed to zero on input or output of
// any SIMD operation.
// Many of the operations in SIMD.js have semantics which correspond to scalar
// operations in JS, however there are a few differences:
// - Vector shifts don't mask the shift count.
// - Conversions from float to int32 throw on error.
// - Load and store operations throw when out of bounds.
(function(global) {
if (typeof global.SIMD === "undefined") {
// SIMD module.
global.SIMD = {};
}
if (typeof module !== "undefined") {
// For CommonJS modules
module.exports = global.SIMD;
}
var SIMD = global.SIMD;
// Buffers for bit casting and coercing lane values to those representable in
// the underlying lane type.
var _f32x4 = new Float32Array(4);
var _f64x2 = new Float64Array(_f32x4.buffer);
var _i32x4 = new Int32Array(_f32x4.buffer);
var _i16x8 = new Int16Array(_f32x4.buffer);
var _i8x16 = new Int8Array(_f32x4.buffer);
var _ui32x4 = new Uint32Array(_f32x4.buffer);
var _ui16x8 = new Uint16Array(_f32x4.buffer);
var _ui8x16 = new Uint8Array(_f32x4.buffer);
function convertValue(buffer, value) {
buffer[0] = value;
return buffer[0];
}
function convertArray(buffer, array) {
for (var i = 0; i < array.length; i++)
array[i] = convertValue(buffer, array[i]);
return array;
}
// Utility functions.
function isInt32(o) {
return (o | 0) === o;
}
function isTypedArray(o) {
return (o instanceof Int8Array) ||
(o instanceof Uint8Array) ||
(o instanceof Uint8ClampedArray) ||
(o instanceof Int16Array) ||
(o instanceof Uint16Array) ||
(o instanceof Int32Array) ||
(o instanceof Uint32Array) ||
(o instanceof Float32Array) ||
(o instanceof Float64Array);
}
function minNum(x, y) {
return x != x ? y :
y != y ? x :
Math.min(x, y);
}
function maxNum(x, y) {
return x != x ? y :
y != y ? x :
Math.max(x, y);
}
function clamp(a, min, max) {
if (a < min)
return min;
if (a > max)
return max;
return a;
}
// SIMD implementation functions
function simdCheckLaneIndex(index, lanes) {
if (!isInt32(index))
throw new TypeError('Lane index must be an int32');
if (index < 0 || index >= lanes)
throw new RangeError('Lane index must be in bounds');
}
// Global lanes array for constructing SIMD values.
var lanes = [];
function simdCreate(type) {
return type.fn.apply(type.fn, lanes);
}
function simdToString(type, a) {
a = type.fn.check(a);
var str = "SIMD." + type.name + "(";
str += type.fn.extractLane(a, 0);
for (var i = 1; i < type.lanes; i++) {
str += ", " + type.fn.extractLane(a, i);
}
return str + ")";
}
function simdToLocaleString(type, a) {
a = type.fn.check(a);
var str = "SIMD." + type.name + "(";
str += type.fn.extractLane(a, 0).toLocaleString();
for (var i = 1; i < type.lanes; i++) {
str += ", " + type.fn.extractLane(a, i).toLocaleString();
}
return str + ")";
}
function simdSplat(type, s) {
for (var i = 0; i < type.lanes; i++)
lanes[i] = s;
return simdCreate(type);
}
function simdReplaceLane(type, a, i, s) {
a = type.fn.check(a);
simdCheckLaneIndex(i, type.lanes);
for (var j = 0; j < type.lanes; j++)
lanes[j] = type.fn.extractLane(a, j);
lanes[i] = s;
return simdCreate(type);
}
function simdFrom(toType, fromType, a) {
a = fromType.fn.check(a);
for (var i = 0; i < fromType.lanes; i++) {
var v = Math.trunc(fromType.fn.extractLane(a, i));
if (toType.minVal !== undefined &&
!(toType.minVal <= v && v <= toType.maxVal)) {
throw new RangeError("Can't convert value");
}
lanes[i] = v;
}
return simdCreate(toType);
}
function simdFromBits(toType, fromType, a) {
a = fromType.fn.check(a);
var newValue = new toType.fn();
newValue.s_ = new toType.view(a.s_.buffer);
return newValue;
}
function simdSelect(type, selector, a, b) {
selector = type.boolType.fn.check(selector);
a = type.fn.check(a);
b = type.fn.check(b);
for (var i = 0; i < type.lanes; i++) {
lanes[i] = type.boolType.fn.extractLane(selector, i) ?
type.fn.extractLane(a, i) : type.fn.extractLane(b, i);
}
return simdCreate(type);
}
function simdSwizzle(type, a, indices) {
a = type.fn.check(a);
for (var i = 0; i < indices.length; i++) {
simdCheckLaneIndex(indices[i], type.lanes);
lanes[i] = type.fn.extractLane(a, indices[i]);
}
return simdCreate(type);
}
function simdShuffle(type, a, b, indices) {
a = type.fn.check(a);
b = type.fn.check(b);
for (var i = 0; i < indices.length; i++) {
simdCheckLaneIndex(indices[i], 2 * type.lanes);
lanes[i] = indices[i] < type.lanes ?
type.fn.extractLane(a, indices[i]) :
type.fn.extractLane(b, indices[i] - type.lanes);
}
return simdCreate(type);
}
function unaryNeg(a) { return -a; }
function unaryBitwiseNot(a) { return ~a; }
function unaryLogicalNot(a) { return !a; }
function simdUnaryOp(type, op, a) {
a = type.fn.check(a);
for (var i = 0; i < type.lanes; i++)
lanes[i] = op(type.fn.extractLane(a, i));
return simdCreate(type);
}
function binaryAnd(a, b) { return a & b; }
function binaryOr(a, b) { return a | b; }
function binaryXor(a, b) { return a ^ b; }
function binaryAdd(a, b) { return a + b; }
function binarySub(a, b) { return a - b; }
function binaryMul(a, b) { return a * b; }
function binaryDiv(a, b) { return a / b; }
var binaryImul;
if (typeof Math.imul !== 'undefined') {
binaryImul = Math.imul;
} else {
binaryImul = function(a, b) {
var ah = (a >>> 16) & 0xffff;
var al = a & 0xffff;
var bh = (b >>> 16) & 0xffff;
var bl = b & 0xffff;
// the shift by 0 fixes the sign on the high part
// the final |0 converts the unsigned value into a signed value
return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
};
}
function simdBinaryOp(type, op, a, b) {
a = type.fn.check(a);
b = type.fn.check(b);
for (var i = 0; i < type.lanes; i++)
lanes[i] = op(type.fn.extractLane(a, i), type.fn.extractLane(b, i));
return simdCreate(type);
}
function binaryEqual(a, b) { return a == b; }
function binaryNotEqual(a, b) { return a != b; }
function binaryLess(a, b) { return a < b; }
function binaryLessEqual(a, b) { return a <= b; }
function binaryGreater(a, b) { return a > b; }
function binaryGreaterEqual(a, b) { return a >= b; }
function simdRelationalOp(type, op, a, b) {
a = type.fn.check(a);
b = type.fn.check(b);
for (var i = 0; i < type.lanes; i++)
lanes[i] = op(type.fn.extractLane(a, i), type.fn.extractLane(b, i));
return simdCreate(type.boolType);
}
function simdAnyTrue(type, a) {
a = type.fn.check(a);
for (var i = 0; i < type.lanes; i++)
if (type.fn.extractLane(a, i)) return true;
return false;
}
function simdAllTrue(type, a) {
a = type.fn.check(a);
for (var i = 0; i < type.lanes; i++)
if (!type.fn.extractLane(a, i)) return false;
return true;
}
function binaryShiftLeft(a, bits) { return a << bits; }
function binaryShiftRightArithmetic(a, bits) { return a >> bits; }
function binaryShiftRightLogical(a, bits) { return a >>> bits; }
function simdShiftOp(type, op, a, bits) {
a = type.fn.check(a);
for (var i = 0; i < type.lanes; i++)
lanes[i] = op(type.fn.extractLane(a, i), bits);
return simdCreate(type);
}
function simdLoad(type, tarray, index, count) {
if (!isTypedArray(tarray))
throw new TypeError("The 1st argument must be a typed array.");
if (!isInt32(index))
throw new TypeError("The 2nd argument must be an Int32.");
var bpe = tarray.BYTES_PER_ELEMENT;
var bytes = count * type.laneSize;
if (index < 0 || (index * bpe + bytes) > tarray.byteLength)
throw new RangeError("The value of index is invalid.");
var newValue = type.fn();
var dst = new Uint8Array(newValue.s_.buffer);
var src = new Uint8Array(tarray.buffer, tarray.byteOffset + index * bpe, bytes);
for (var i = 0; i < bytes; i++) {
dst[i] = src[i];
}
var typeBytes = type.lanes * type.laneSize;
for (var i = bytes; i < typeBytes; i++) {
dst[i] = 0;
}
return newValue;
}
function simdStore(type, tarray, index, a, count) {
if (!isTypedArray(tarray))
throw new TypeError("The 1st argument must be a typed array.");
if (!isInt32(index))
throw new TypeError("The 2nd argument must be an Int32.");
var bpe = tarray.BYTES_PER_ELEMENT;
var bytes = count * type.laneSize;
if (index < 0 || (index * bpe + bytes) > tarray.byteLength)
throw new RangeError("The value of index is invalid.");
a = type.fn.check(a);
// The underlying buffers are copied byte by byte, to avoid float
// canonicalization.
var src = new Uint8Array(a.s_.buffer);
var dst = new Uint8Array(tarray.buffer, tarray.byteOffset + index * bpe, bytes);
for (var i = 0; i < bytes; i++) {
dst[i] = src[i];
}
return a;
}
// Constructors and extractLane functions are closely related and must be
// polyfilled together.
// Float32x4
if (typeof SIMD.Float32x4 === "undefined" ||
typeof SIMD.Float32x4.extractLane === "undefined") {
SIMD.Float32x4 = function(s0, s1, s2, s3) {
if (!(this instanceof SIMD.Float32x4)) {
return new SIMD.Float32x4(s0, s1, s2, s3);
}
this.s_ = convertArray(_f32x4, new Float32Array([s0, s1, s2, s3]));
}
SIMD.Float32x4.extractLane = function(v, i) {
v = SIMD.Float32x4.check(v);
simdCheckLaneIndex(i, 4);
return v.s_[i];
}
}
// Miscellaneous functions that aren't easily parameterized on type.
if (typeof SIMD.Float32x4.swizzle === "undefined") {
SIMD.Float32x4.swizzle = function(a, s0, s1, s2, s3) {
return simdSwizzle(float32x4, a, [s0, s1, s2, s3]);
}
}
if (typeof SIMD.Float32x4.shuffle === "undefined") {
SIMD.Float32x4.shuffle = function(a, b, s0, s1, s2, s3) {
return simdShuffle(float32x4, a, b, [s0, s1, s2, s3]);
}
}
// Int32x4
if (typeof SIMD.Int32x4 === "undefined" ||
typeof SIMD.Int32x4.extractLane === "undefined") {
SIMD.Int32x4 = function(s0, s1, s2, s3) {
if (!(this instanceof SIMD.Int32x4)) {
return new SIMD.Int32x4(s0, s1, s2, s3);
}
this.s_ = convertArray(_i32x4, new Int32Array([s0, s1, s2, s3]));
}
SIMD.Int32x4.extractLane = function(v, i) {
v = SIMD.Int32x4.check(v);
simdCheckLaneIndex(i, 4);
return v.s_[i];
}
}
if (typeof SIMD.Int32x4.swizzle === "undefined") {
SIMD.Int32x4.swizzle = function(a, s0, s1, s2, s3) {
return simdSwizzle(int32x4, a, [s0, s1, s2, s3]);
}
}
if (typeof SIMD.Int32x4.shuffle === "undefined") {
SIMD.Int32x4.shuffle = function(a, b, s0, s1, s2, s3) {
return simdShuffle(int32x4, a, b, [s0, s1, s2, s3]);
}
}
// Int16x8
if (typeof SIMD.Int16x8 === "undefined" ||
typeof SIMD.Int16x8.extractLane === "undefined") {
SIMD.Int16x8 = function(s0, s1, s2, s3, s4, s5, s6, s7) {
if (!(this instanceof SIMD.Int16x8)) {
return new SIMD.Int16x8(s0, s1, s2, s3, s4, s5, s6, s7);
}
this.s_ = convertArray(_i16x8, new Int16Array([s0, s1, s2, s3, s4, s5, s6, s7]));
}
SIMD.Int16x8.extractLane = function(v, i) {
v = SIMD.Int16x8.check(v);
simdCheckLaneIndex(i, 8);
return v.s_[i];
}
}
if (typeof SIMD.Int16x8.swizzle === "undefined") {
SIMD.Int16x8.swizzle = function(a, s0, s1, s2, s3, s4, s5, s6, s7) {
return simdSwizzle(int16x8, a, [s0, s1, s2, s3, s4, s5, s6, s7]);
}
}
if (typeof SIMD.Int16x8.shuffle === "undefined") {
SIMD.Int16x8.shuffle = function(a, b, s0, s1, s2, s3, s4, s5, s6, s7) {
return simdShuffle(int16x8, a, b, [s0, s1, s2, s3, s4, s5, s6, s7]);
}
}
// Int8x16
if (typeof SIMD.Int8x16 === "undefined" ||
typeof SIMD.Int8x16.extractLane === "undefined") {
SIMD.Int8x16 = function(s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15) {
if (!(this instanceof SIMD.Int8x16)) {
return new SIMD.Int8x16(s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15);
}
this.s_ = convertArray(_i8x16, new Int8Array([s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15]));
}
SIMD.Int8x16.extractLane = function(v, i) {
v = SIMD.Int8x16.check(v);
simdCheckLaneIndex(i, 16);
return v.s_[i];
}
}
if (typeof SIMD.Int8x16.swizzle === "undefined") {
SIMD.Int8x16.swizzle = function(a, s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15) {
return simdSwizzle(int8x16, a, [s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15]);
}
}
if (typeof SIMD.Int8x16.shuffle === "undefined") {
SIMD.Int8x16.shuffle = function(a, b, s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15) {
return simdShuffle(int8x16, a, b, [s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15]);
}
}
// Uint32x4
if (typeof SIMD.Uint32x4 === "undefined" ||
typeof SIMD.Uint32x4.extractLane === "undefined") {
SIMD.Uint32x4 = function(s0, s1, s2, s3) {
if (!(this instanceof SIMD.Uint32x4)) {
return new SIMD.Uint32x4(s0, s1, s2, s3);
}
this.s_ = convertArray(_ui32x4, new Uint32Array([s0, s1, s2, s3]));
}
SIMD.Uint32x4.extractLane = function(v, i) {
v = SIMD.Uint32x4.check(v);
simdCheckLaneIndex(i, 4);
return v.s_[i];
}
}
if (typeof SIMD.Uint32x4.swizzle === "undefined") {
SIMD.Uint32x4.swizzle = function(a, s0, s1, s2, s3) {
return simdSwizzle(uint32x4, a, [s0, s1, s2, s3]);
}
}
if (typeof SIMD.Uint32x4.shuffle === "undefined") {
SIMD.Uint32x4.shuffle = function(a, b, s0, s1, s2, s3) {
return simdShuffle(uint32x4, a, b, [s0, s1, s2, s3]);
}
}
// Uint16x8
if (typeof SIMD.Uint16x8 === "undefined" ||
typeof SIMD.Uint16x8.extractLane === "undefined") {
SIMD.Uint16x8 = function(s0, s1, s2, s3, s4, s5, s6, s7) {
if (!(this instanceof SIMD.Uint16x8)) {
return new SIMD.Uint16x8(s0, s1, s2, s3, s4, s5, s6, s7);
}
this.s_ = convertArray(_ui16x8, new Uint16Array([s0, s1, s2, s3, s4, s5, s6, s7]));
}
SIMD.Uint16x8.extractLane = function(v, i) {
v = SIMD.Uint16x8.check(v);
simdCheckLaneIndex(i, 8);
return v.s_[i];
}
}
if (typeof SIMD.Uint16x8.swizzle === "undefined") {
SIMD.Uint16x8.swizzle = function(a, s0, s1, s2, s3, s4, s5, s6, s7) {
return simdSwizzle(uint16x8, a, [s0, s1, s2, s3, s4, s5, s6, s7]);
}
}
if (typeof SIMD.Uint16x8.shuffle === "undefined") {
SIMD.Uint16x8.shuffle = function(a, b, s0, s1, s2, s3, s4, s5, s6, s7) {
return simdShuffle(uint16x8, a, b, [s0, s1, s2, s3, s4, s5, s6, s7]);
}
}
// Uint8x16
if (typeof SIMD.Uint8x16 === "undefined" ||
typeof SIMD.Uint8x16.extractLane === "undefined") {
SIMD.Uint8x16 = function(s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15) {
if (!(this instanceof SIMD.Uint8x16)) {
return new SIMD.Uint8x16(s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15);
}
this.s_ = convertArray(_ui8x16, new Uint8Array([s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15]));
}
SIMD.Uint8x16.extractLane = function(v, i) {
v = SIMD.Uint8x16.check(v);
simdCheckLaneIndex(i, 16);
return v.s_[i];
}
}
if (typeof SIMD.Uint8x16.swizzle === "undefined") {
SIMD.Uint8x16.swizzle = function(a, s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15) {
return simdSwizzle(uint8x16, a, [s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15]);
}
}
if (typeof SIMD.Uint8x16.shuffle === "undefined") {
SIMD.Uint8x16.shuffle = function(a, b, s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15) {
return simdShuffle(uint8x16, a, b, [s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15]);
}
}
// Bool32x4
if (typeof SIMD.Bool32x4 === "undefined" ||
typeof SIMD.Bool32x4.extractLane === "undefined") {
SIMD.Bool32x4 = function(s0, s1, s2, s3) {
if (!(this instanceof SIMD.Bool32x4)) {
return new SIMD.Bool32x4(s0, s1, s2, s3);
}
this.s_ = [!!s0, !!s1, !!s2, !!s3];
}
SIMD.Bool32x4.extractLane = function(v, i) {
v = SIMD.Bool32x4.check(v);
simdCheckLaneIndex(i, 4);
return v.s_[i];
}
}
// Bool16x8
if (typeof SIMD.Bool16x8 === "undefined" ||
typeof SIMD.Bool16x8.extractLane === "undefined") {
SIMD.Bool16x8 = function(s0, s1, s2, s3, s4, s5, s6, s7) {
if (!(this instanceof SIMD.Bool16x8)) {
return new SIMD.Bool16x8(s0, s1, s2, s3, s4, s5, s6, s7);
}
this.s_ = [!!s0, !!s1, !!s2, !!s3, !!s4, !!s5, !!s6, !!s7];
}
SIMD.Bool16x8.extractLane = function(v, i) {
v = SIMD.Bool16x8.check(v);
simdCheckLaneIndex(i, 8);
return v.s_[i];
}
}
// Bool8x16
if (typeof SIMD.Bool8x16 === "undefined" ||
typeof SIMD.Bool8x16.extractLane === "undefined") {
SIMD.Bool8x16 = function(s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15) {
if (!(this instanceof SIMD.Bool8x16)) {
return new SIMD.Bool8x16(s0, s1, s2, s3, s4, s5, s6, s7,
s8, s9, s10, s11, s12, s13, s14, s15);
}
this.s_ = [!!s0, !!s1, !!s2, !!s3, !!s4, !!s5, !!s6, !!s7,
!!s8, !!s9, !!s10, !!s11, !!s12, !!s13, !!s14, !!s15];
}
SIMD.Bool8x16.extractLane = function(v, i) {
v = SIMD.Bool8x16.check(v);
simdCheckLaneIndex(i, 16);
return v.s_[i];
}
}
// Type data to generate the remaining functions.
var float32x4 = {
name: "Float32x4",
fn: SIMD.Float32x4,
lanes: 4,
laneSize: 4,
buffer: _f32x4,
view: Float32Array,
mulFn: binaryMul,
fns: ["check", "splat", "replaceLane", "select",
"equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual",
"add", "sub", "mul", "div", "neg", "abs", "min", "max", "minNum", "maxNum",
"reciprocalApproximation", "reciprocalSqrtApproximation", "sqrt",
"load", "load1", "load2", "load3", "store", "store1", "store2", "store3"],
}
var int32x4 = {
name: "Int32x4",
fn: SIMD.Int32x4,
lanes: 4,
laneSize: 4,
minVal: -0x80000000,
maxVal: 0x7FFFFFFF,
buffer: _i32x4,
notFn: unaryBitwiseNot,
view: Int32Array,
mulFn: binaryImul,
fns: ["check", "splat", "replaceLane", "select",
"equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual",
"and", "or", "xor", "not",
"add", "sub", "mul", "neg",
"shiftLeftByScalar", "shiftRightByScalar",
"load", "load1", "load2", "load3", "store", "store1", "store2", "store3"],
}
var int16x8 = {
name: "Int16x8",
fn: SIMD.Int16x8,
lanes: 8,
laneSize: 2,
minVal: -0x8000,
maxVal: 0x7FFF,
buffer: _i16x8,
notFn: unaryBitwiseNot,
view: Int16Array,
mulFn: binaryMul,
fns: ["check", "splat", "replaceLane", "select",
"equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual",
"and", "or", "xor", "not",
"add", "sub", "mul", "neg",
"shiftLeftByScalar", "shiftRightByScalar",
"addSaturate", "subSaturate",
"load", "store"],
}
var int8x16 = {
name: "Int8x16",
fn: SIMD.Int8x16,
lanes: 16,
laneSize: 1,
minVal: -0x80,
maxVal: 0x7F,
buffer: _i8x16,
notFn: unaryBitwiseNot,
view: Int8Array,
mulFn: binaryMul,
fns: ["check", "splat", "replaceLane", "select",
"equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual",
"and", "or", "xor", "not",
"add", "sub", "mul", "neg",
"shiftLeftByScalar", "shiftRightByScalar",
"addSaturate", "subSaturate",
"load", "store"],
}
var uint32x4 = {
name: "Uint32x4",
fn: SIMD.Uint32x4,
lanes: 4,
laneSize: 4,
minVal: 0,
maxVal: 0xFFFFFFFF,
unsigned: true,
buffer: _ui32x4,
notFn: unaryBitwiseNot,
view: Uint32Array,
mulFn: binaryImul,
fns: ["check", "splat", "replaceLane", "select",
"equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual",
"and", "or", "xor", "not",
"add", "sub", "mul",
"shiftLeftByScalar", "shiftRightByScalar",
"load", "load1", "load2", "load3", "store", "store1", "store2", "store3"],
}
var uint16x8 = {
name: "Uint16x8",
fn: SIMD.Uint16x8,
lanes: 8,
laneSize: 2,
unsigned: true,
minVal: 0,
maxVal: 0xFFFF,
buffer: _ui16x8,
notFn: unaryBitwiseNot,
view: Uint16Array,
mulFn: binaryMul,
fns: ["check", "splat", "replaceLane", "select",
"equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual",
"and", "or", "xor", "not",
"add", "sub", "mul",
"shiftLeftByScalar", "shiftRightByScalar",
"addSaturate", "subSaturate",
"load", "store"],
}
var uint8x16 = {
name: "Uint8x16",
fn: SIMD.Uint8x16,
lanes: 16,
laneSize: 1,
unsigned: true,
minVal: 0,
maxVal: 0xFF,
buffer: _ui8x16,
notFn: unaryBitwiseNot,
view: Uint8Array,
mulFn: binaryMul,
fns: ["check", "splat", "replaceLane", "select",
"equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual",
"and", "or", "xor", "not",
"add", "sub", "mul",
"shiftLeftByScalar", "shiftRightByScalar",
"addSaturate", "subSaturate",
"load", "store"],
}
var bool32x4 = {
name: "Bool32x4",
fn: SIMD.Bool32x4,
lanes: 4,
laneSize: 4,
notFn: unaryLogicalNot,
fns: ["check", "splat", "replaceLane",
"allTrue", "anyTrue", "and", "or", "xor", "not"],
}
var bool16x8 = {
name: "Bool16x8",
fn: SIMD.Bool16x8,
lanes: 8,
laneSize: 2,
notFn: unaryLogicalNot,
fns: ["check", "splat", "replaceLane",
"allTrue", "anyTrue", "and", "or", "xor", "not"],
}
var bool8x16 = {
name: "Bool8x16",
fn: SIMD.Bool8x16,
lanes: 16,
laneSize: 1,
notFn: unaryLogicalNot,
fns: ["check", "splat", "replaceLane",
"allTrue", "anyTrue", "and", "or", "xor", "not"],
}
// Each SIMD type has a corresponding Boolean SIMD type, which is returned by
// relational ops.
float32x4.boolType = int32x4.boolType = uint32x4.boolType = bool32x4;
int16x8.boolType = uint16x8.boolType = bool16x8;
int8x16.boolType = uint8x16.boolType = bool8x16;
// SIMD from<type> types.
float32x4.from = [int32x4, uint32x4];
int32x4.from = [float32x4, uint32x4];
int16x8.from = [uint16x8];
int8x16.from = [uint8x16];
uint32x4.from = [float32x4, int32x4];
uint16x8.from = [int16x8];
uint8x16.from = [int8x16];
// SIMD from<type>Bits types.
float32x4.fromBits = [int32x4, int16x8, int8x16, uint32x4, uint16x8, uint8x16];
int32x4.fromBits = [float32x4, int16x8, int8x16, uint32x4, uint16x8, uint8x16];
int16x8.fromBits = [float32x4, int32x4, int8x16, uint32x4, uint16x8, uint8x16];
int8x16.fromBits = [float32x4, int32x4, int16x8, uint32x4, uint16x8, uint8x16];
uint32x4.fromBits = [float32x4, int32x4, int16x8, int8x16, uint16x8, uint8x16];
uint16x8.fromBits = [float32x4, int32x4, int16x8, int8x16, uint32x4, uint8x16];
uint8x16.fromBits = [float32x4, int32x4, int16x8, int8x16, uint32x4, uint16x8];
var simdTypes = [float32x4,
int32x4, int16x8, int8x16,
uint32x4, uint16x8, uint8x16,
bool32x4, bool16x8, bool8x16];
// XXX Emscripten: Enable SIMD phase 2 types for Float64x2 and Bool64x2 to enable targeting SSE2 support.
simdPhase2 = true;
// SIMD Phase2 types.
if (typeof simdPhase2 !== 'undefined') {
// Float64x2
if (typeof SIMD.Float64x2 === "undefined" ||
typeof SIMD.Float64x2.extractLane === "undefined") {
SIMD.Float64x2 = function(s0, s1) {
if (!(this instanceof SIMD.Float64x2)) {
return new SIMD.Float64x2(s0, s1);
}
this.s_ = convertArray(_f64x2, new Float64Array([s0, s1]));
}
SIMD.Float64x2.extractLane = function(v, i) {
v = SIMD.Float64x2.check(v);
simdCheckLaneIndex(i, 2);
return v.s_[i];
}
}
if (typeof SIMD.Float64x2.swizzle === "undefined") {
SIMD.Float64x2.swizzle = function(a, s0, s1) {
return simdSwizzle(float64x2, a, [s0, s1]);
}
}
if (typeof SIMD.Float64x2.shuffle === "undefined") {
SIMD.Float64x2.shuffle = function(a, b, s0, s1) {
return simdShuffle(float64x2, a, b, [s0, s1]);
}
}
// Bool64x2
if (typeof SIMD.Bool64x2 === "undefined" ||
typeof SIMD.Bool64x2.extractLane === "undefined") {
SIMD.Bool64x2 = function(s0, s1) {
if (!(this instanceof SIMD.Bool64x2)) {
return new SIMD.Bool64x2(s0, s1);
}
this.s_ = [!!s0, !!s1];
}
SIMD.Bool64x2.extractLane = function(v, i) {
v = SIMD.Bool64x2.check(v);
simdCheckLaneIndex(i, 2);
return v.s_[i];
}
}
var float64x2 = {
name: "Float64x2",
fn: SIMD.Float64x2,
lanes: 2,
laneSize: 8,
buffer: _f64x2,
view: Float64Array,
mulFn: binaryMul,
fns: ["check", "splat", "replaceLane", "select",
"equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual",
"add", "sub", "mul", "div", "neg", "abs", "min", "max", "minNum", "maxNum",
"reciprocalApproximation", "reciprocalSqrtApproximation", "sqrt",
"load", "store"],
}
// XXX Emscripten: Need these functions for intrinsics, see https://github.com/tc39/ecmascript_simd/issues/316.
float64x2.fns.push("load1");
float64x2.fns.push("store1");
// XXX Emscripten
var bool64x2 = {
name: "Bool64x2",
fn: SIMD.Bool64x2,
lanes: 2,
laneSize: 8,
notFn: unaryLogicalNot,
fns: ["check", "splat", "replaceLane",
"allTrue", "anyTrue", "and", "or", "xor", "not"],
}
float64x2.boolType = bool64x2;
float32x4.fromBits.push(float64x2);
int32x4.fromBits.push(float64x2);
int16x8.fromBits.push(float64x2);
int8x16.fromBits.push(float64x2);
uint32x4.fromBits.push(float64x2);
uint16x8.fromBits.push(float64x2);
uint8x16.fromBits.push(float64x2);
float64x2.fromBits = [float32x4, int32x4, int16x8, int8x16,
uint32x4, uint16x8, uint8x16];
/*
// XXX Emscripten: Removed to fix https://github.com/tc39/ecmascript_simd/issues/314
int32x4.fromBits = [float32x4, int16x8, int8x16, uint32x4, uint16x8, uint8x16];
int16x8.fromBits = [float32x4, int32x4, int8x16, uint32x4, uint16x8, uint8x16];
int8x16.fromBits = [float32x4, int32x4, int16x8, uint32x4, uint16x8, uint8x16];
uint32x4.fromBits = [float32x4, int32x4, int16x8, int8x16, uint16x8, uint8x16];
uint16x8.fromBits = [float32x4, int32x4, int16x8, int8x16, uint32x4, uint8x16];
uint8x16.fromBits = [float32x4, int32x4, int16x8, int8x16, uint32x4, uint16x8];
*/
simdTypes.push(float64x2);
simdTypes.push(bool64x2);
}
// SIMD prototype functions.
var prototypeFns = {
valueOf:
function(type) {
return function() {
throw new TypeError(type.name + " cannot be converted to a number");
}
},
toString:
function(type) {
return function() {
return simdToString(type, this);
}
},
toLocaleString:
function(type) {
return function() {
return simdToLocaleString(type, this);
}
},
};
// SIMD constructor functions.
var simdFns = {
check:
function(type) {
return function(a) {
if (!(a instanceof type.fn)) {
throw new TypeError("Argument is not a " + type.name + ".");
}
return a;
}
},
splat:
function(type) {
return function(s) { return simdSplat(type, s); }
},
replaceLane:
function(type) {
return function(a, i, s) { return simdReplaceLane(type, a, i, s); }
},
allTrue:
function(type) {
return function(a) { return simdAllTrue(type, a); }
},
anyTrue:
function(type) {
return function(a) { return simdAnyTrue(type, a); }
},
and:
function(type) {
return function(a, b) {
return simdBinaryOp(type, binaryAnd, a, b);
}
},
or:
function(type) {
return function(a, b) {
return simdBinaryOp(type, binaryOr, a, b);
}
},
xor:
function(type) {
return function(a, b) {
return simdBinaryOp(type, binaryXor, a, b);
}
},
not:
function(type) {
return function(a) {
return simdUnaryOp(type, type.notFn, a);
}
},
equal:
function(type) {
return function(a, b) {
return simdRelationalOp(type, binaryEqual, a, b);
}
},
notEqual:
function(type) {
return function(a, b) {
return simdRelationalOp(type, binaryNotEqual, a, b);
}
},
lessThan:
function(type) {
return function(a, b) {
return simdRelationalOp(type, binaryLess, a, b);
}
},
lessThanOrEqual:
function(type) {
return function(a, b) {
return simdRelationalOp(type, binaryLessEqual, a, b);
}
},
greaterThan:
function(type) {
return function(a, b) {
return simdRelationalOp(type, binaryGreater, a, b);
}
},
greaterThanOrEqual:
function(type) {
return function(a, b) {
return simdRelationalOp(type, binaryGreaterEqual, a, b);
}
},
add:
function(type) {
return function(a, b) {
return simdBinaryOp(type, binaryAdd, a, b);
}
},
sub:
function(type) {
return function(a, b) {
return simdBinaryOp(type, binarySub, a, b);
}
},
mul:
function(type) {
return function(a, b) {
return simdBinaryOp(type, type.mulFn, a, b);
}
},
div:
function(type) {
return function(a, b) {
return simdBinaryOp(type, binaryDiv, a, b);
}
},
neg:
function(type) {
return function(a) {
return simdUnaryOp(type, unaryNeg, a);
}
},
abs:
function(type) {
return function(a) {
return simdUnaryOp(type, Math.abs, a);
}
},
min:
function(type) {
return function(a, b) {
return simdBinaryOp(type, Math.min, a, b);
}
},
max:
function(type) {
return function(a, b) {
return simdBinaryOp(type, Math.max, a, b);
}
},
minNum:
function(type) {
return function(a, b) {
return simdBinaryOp(type, minNum, a, b);
}
},
maxNum:
function(type) {
return function(a, b) {
return simdBinaryOp(type, maxNum, a, b);
}
},
load:
function(type) {
return function(tarray, index) {
return simdLoad(type, tarray, index, type.lanes);
}
},
load1:
function(type) {
return function(tarray, index) {
return simdLoad(type, tarray, index, 1);
}
},
load2:
function(type) {
return function(tarray, index) {
return simdLoad(type, tarray, index, 2);
}
},
load3:
function(type) {
return function(tarray, index) {
return simdLoad(type, tarray, index, 3);
}
},
store:
function(type) {
return function(tarray, index, a) {
return simdStore(type, tarray, index, a, type.lanes);
}
},
store1:
function(type) {
return function(tarray, index, a) {
return simdStore(type, tarray, index, a, 1);
}
},
store2:
function(type) {
return function(tarray, index, a) {
return simdStore(type, tarray, index, a, 2);
}
},
store3:
function(type) {
return function(tarray, index, a) {
return simdStore(type, tarray, index, a, 3);
}
},
select:
function(type) {
return function(selector, a, b) {
return simdSelect(type, selector, a, b);
}
},
reciprocalApproximation:
function(type) {
return function(a) {
a = type.fn.check(a);
return type.fn.div(type.fn.splat(1.0), a);
}
},
reciprocalSqrtApproximation:
function(type) {
return function(a) {
a = type.fn.check(a);
return type.fn.reciprocalApproximation(type.fn.sqrt(a));
}
},
sqrt:
function(type) {
return function(a) {
return simdUnaryOp(type, Math.sqrt, a);
}
},
shiftLeftByScalar:
function(type) {
return function(a, bits) {
bits &= type.laneSize * 8 - 1;
return simdShiftOp(type, binaryShiftLeft, a, bits);
}
},
shiftRightByScalar:
function(type) {
if (type.unsigned) {
return function(a, bits) {
bits &= type.laneSize * 8 - 1;
return simdShiftOp(type, binaryShiftRightLogical, a, bits);
}
} else {
return function(a, bits) {
bits &= type.laneSize * 8 - 1;
return simdShiftOp(type, binaryShiftRightArithmetic, a, bits);
}
}
},
addSaturate:
function(type) {
function addSaturate(a, b) {
return clamp(a + b, type.minVal, type.maxVal);
}
return function(a, b) { return simdBinaryOp(type, addSaturate, a, b); }
},
subSaturate:
function(type) {
function subSaturate(a, b) {
return clamp(a - b, type.minVal, type.maxVal);
}
return function(a, b) { return simdBinaryOp(type, subSaturate, a, b); }
},
}
// Install functions.
simdTypes.forEach(function(type) {
// Install each prototype function on each SIMD prototype.
var simdFn = type.fn;
var proto = simdFn.prototype;
for (var name in prototypeFns) {
if (!proto.hasOwnProperty(name))
proto[name] = prototypeFns[name](type);
}
// Install regular functions.
type.fns.forEach(function(name) {
if (typeof simdFn[name] === "undefined")
simdFn[name] = simdFns[name](type);
});
// Install 'fromTIMD' functions.
if (type.from) {
type.from.forEach(function(fromType) {
var name = "from" + fromType.name;
var toType = type; // pull type into closure.
if (typeof type.fn[name] === "undefined") {
type.fn[name] =
function(a) { return simdFrom(toType, fromType, a); }
}
});
}
// Install 'fromTIMDBits' functions.
if (type.fromBits) {
type.fromBits.forEach(function(fromType) {
var name = "from" + fromType.name + "Bits";
var toType = type; // pull type into closure.
if (typeof type.fn[name] === "undefined") {
type.fn[name] =
function(a) { return simdFromBits(toType, fromType, a); }
}
});
}
});
// If we're in a browser, the global namespace is named 'window'. If we're
// in node, it's named 'global'. If we're in a web worker, it's named
// 'self'. If we're in a shell, 'this' might work.
})(typeof window !== "undefined"
? window
: (typeof process === 'object' &&
typeof require === 'function' &&
typeof global === 'object')
? global
: typeof self === 'object'
? self
: this);
// XXX Emscripten-specific below XXX
// Work around Firefox Nightly bug that Float64x2 comparison return a Int32x4 instead of a Bool64x2.
try {
if (SIMD.Int32x4.check(SIMD.Float64x2.equal(SIMD.Float64x2.splat(5.0), SIMD.Float64x2.splat(5.0)))) {
SIMD.Float64x2.prevEqual = SIMD.Float64x2.equal;
SIMD.Float64x2.equal = function(a, b) {
var int32x4 = SIMD.Float64x2.prevEqual(a, b);
return SIMD.Bool64x2(SIMD.Int32x4.extractLane(int32x4, 1) != 0, SIMD.Int32x4.extractLane(int32x4, 3) != 0);
}
console.error('Warning: Patching up SIMD.Float64x2.equal to return a Bool64x2 instead of Int32x4!');
}
} catch(e) {}
try {
if (SIMD.Int32x4.check(SIMD.Float64x2.notEqual(SIMD.Float64x2.splat(5.0), SIMD.Float64x2.splat(5.0)))) {
SIMD.Float64x2.prevNotEqual = SIMD.Float64x2.notEqual;
SIMD.Float64x2.notEqual = function(a, b) {
var int32x4 = SIMD.Float64x2.prevNotEqual(a, b);
return SIMD.Bool64x2(SIMD.Int32x4.extractLane(int32x4, 1) != 0, SIMD.Int32x4.extractLane(int32x4, 3) != 0);
}
console.error('Warning: Patching up SIMD.Float64x2.notEqual to return a Bool64x2 instead of Int32x4!');
}
} catch(e) {}
try {
if (SIMD.Int32x4.check(SIMD.Float64x2.greaterThan(SIMD.Float64x2.splat(5.0), SIMD.Float64x2.splat(5.0)))) {
SIMD.Float64x2.prevGreaterThan = SIMD.Float64x2.greaterThan;
SIMD.Float64x2.greaterThan = function(a, b) {
var int32x4 = SIMD.Float64x2.prevGreaterThan(a, b);
return SIMD.Bool64x2(SIMD.Int32x4.extractLane(int32x4, 1) != 0, SIMD.Int32x4.extractLane(int32x4, 3) != 0);
}
console.error('Warning: Patching up SIMD.Float64x2.greaterThan to return a Bool64x2 instead of Int32x4!');
}
} catch(e) {}
try {
if (SIMD.Int32x4.check(SIMD.Float64x2.greaterThanOrEqual(SIMD.Float64x2.splat(5.0), SIMD.Float64x2.splat(5.0)))) {
SIMD.Float64x2.prevGreaterThanOrEqual = SIMD.Float64x2.greaterThanOrEqual;
SIMD.Float64x2.greaterThanOrEqual = function(a, b) {
var int32x4 = SIMD.Float64x2.prevGreaterThanOrEqual(a, b);
return SIMD.Bool64x2(SIMD.Int32x4.extractLane(int32x4, 1) != 0, SIMD.Int32x4.extractLane(int32x4, 3) != 0);
}
console.error('Warning: Patching up SIMD.Float64x2.greaterThanOrEqual to return a Bool64x2 instead of Int32x4!');
}
} catch(e) {}
try {
if (SIMD.Int32x4.check(SIMD.Float64x2.lessThan(SIMD.Float64x2.splat(5.0), SIMD.Float64x2.splat(5.0)))) {
SIMD.Float64x2.prevLessThan = SIMD.Float64x2.lessThan;
SIMD.Float64x2.lessThan = function(a, b) {
var int32x4 = SIMD.Float64x2.prevLessThan(a, b);
return SIMD.Bool64x2(SIMD.Int32x4.extractLane(int32x4, 1) != 0, SIMD.Int32x4.extractLane(int32x4, 3) != 0);
}
console.error('Warning: Patching up SIMD.Float64x2.lessThan to return a Bool64x2 instead of Int32x4!');
}
} catch(e) {}
try {
if (SIMD.Int32x4.check(SIMD.Float64x2.lessThanOrEqual(SIMD.Float64x2.splat(5.0), SIMD.Float64x2.splat(5.0)))) {
SIMD.Float64x2.prevLessThanOrEqual = SIMD.Float64x2.lessThanOrEqual;
SIMD.Float64x2.lessThanOrEqual = function(a, b) {
var int32x4 = SIMD.Float64x2.prevLessThanOrEqual(a, b);
return SIMD.Bool64x2(SIMD.Int32x4.extractLane(int32x4, 1) != 0, SIMD.Int32x4.extractLane(int32x4, 3) != 0);
}
console.error('Warning: Patching up SIMD.Float64x2.lessThanOrEqual to return a Bool64x2 instead of Int32x4!');
}
} catch(e) {}
if (!SIMD.Int32x4.fromBool64x2Bits) {
SIMD.Int32x4.fromBool64x2Bits = function(bool64x2) {
var lane0 = SIMD.Bool64x2.extractLane(bool64x2, 0)?-1:0;
var lane1 = SIMD.Bool64x2.extractLane(bool64x2, 1)?-1:0;
return SIMD.Int32x4(lane0, lane0, lane1, lane1);
}
}
// The Module object: Our interface to the outside world. We import
// and export values on it, and do the work to get that through
// closure compiler if necessary. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(Module) { ..generated code.. }
// 3. pre-run appended it, var Module = {}; ..generated code..
// 4. External script tag defines var Module.
// We need to do an eval in order to handle the closure compiler
// case, where this code here is minified but Module was defined
// elsewhere (e.g. case 4 above). We also need to check if Module
// already exists (e.g. case 3 above).
// Note that if you want to run closure, and also to use Module
// after the generated code, you will need to define var Module = {};
// before the code. Then that object will be used in the code, and you
// can continue to use Module afterwards as well.
var Module;
if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
// Sometimes an existing Module object exists with properties
// meant to overwrite the default module functionality. Here
// we collect those properties and reapply _after_ we configure
// the current environment's defaults to avoid having to be so
// defensive during initialization.
var moduleOverrides = {};
for (var key in Module) {
if (Module.hasOwnProperty(key)) {
moduleOverrides[key] = Module[key];
}
}
// The environment setup code below is customized to use Module.
// *** Environment setup code ***
var ENVIRONMENT_IS_WEB = false;
var ENVIRONMENT_IS_WORKER = false;
var ENVIRONMENT_IS_NODE = false;
var ENVIRONMENT_IS_SHELL = false;
// Three configurations we can be running in:
// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)
// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)
// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)
if (Module['ENVIRONMENT']) {
if (Module['ENVIRONMENT'] === 'WEB') {
ENVIRONMENT_IS_WEB = true;
} else if (Module['ENVIRONMENT'] === 'WORKER') {
ENVIRONMENT_IS_WORKER = true;
} else if (Module['ENVIRONMENT'] === 'NODE') {
ENVIRONMENT_IS_NODE = true;
} else if (Module['ENVIRONMENT'] === 'SHELL') {
ENVIRONMENT_IS_SHELL = true;
} else {
throw new Error('The provided Module[\'ENVIRONMENT\'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.');
}
} else {
ENVIRONMENT_IS_WEB = typeof window === 'object';
ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;
ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
}
if (ENVIRONMENT_IS_NODE) {
// Expose functionality in the same simple way that the shells work
// Note that we pollute the global namespace here, otherwise we break in node
if (!Module['print']) Module['print'] = console.log;
if (!Module['printErr']) Module['printErr'] = console.warn;
var nodeFS;
var nodePath;
Module['read'] = function read(filename, binary) {
if (!nodeFS) nodeFS = require('fs');
if (!nodePath) nodePath = require('path');
filename = nodePath['normalize'](filename);
var ret = nodeFS['readFileSync'](filename);
return binary ? ret : ret.toString();
};
Module['readBinary'] = function readBinary(filename) {
var ret = Module['read'](filename, true);
if (!ret.buffer) {
ret = new Uint8Array(ret);
}
assert(ret.buffer);
return ret;
};
Module['load'] = function load(f) {
globalEval(read(f));
};
if (!Module['thisProgram']) {
if (process['argv'].length > 1) {
Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/');
} else {
Module['thisProgram'] = 'unknown-program';
}
}
Module['arguments'] = process['argv'].slice(2);
if (typeof module !== 'undefined') {
module['exports'] = Module;
}
process['on']('uncaughtException', function(ex) {
// suppress ExitStatus exceptions from showing an error
if (!(ex instanceof ExitStatus)) {
throw ex;
}
});
Module['inspect'] = function () { return '[Emscripten Module object]'; };
}
else if (ENVIRONMENT_IS_SHELL) {
if (!Module['print']) Module['print'] = print;
if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
if (typeof read != 'undefined') {
Module['read'] = read;
} else {
Module['read'] = function read() { throw 'no read() available' };
}
Module['readBinary'] = function readBinary(f) {
if (typeof readbuffer === 'function') {
return new Uint8Array(readbuffer(f));
}
var data = read(f, 'binary');
assert(typeof data === 'object');
return data;
};
if (typeof scriptArgs != 'undefined') {
Module['arguments'] = scriptArgs;
} else if (typeof arguments != 'undefined') {
Module['arguments'] = arguments;
}
}
else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
Module['read'] = function read(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.send(null);
return xhr.responseText;
};
Module['readAsync'] = function readAsync(url, onload, onerror) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function xhr_onload() {
if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
onload(xhr.response);
} else {
onerror();
}
};
xhr.onerror = onerror;
xhr.send(null);
};
if (typeof arguments != 'undefined') {
Module['arguments'] = arguments;
}
if (typeof console !== 'undefined') {
if (!Module['print']) Module['print'] = function print(x) {
console.log(x);
};
if (!Module['printErr']) Module['printErr'] = function printErr(x) {
console.warn(x);
};
} else {
// Probably a worker, and without console.log. We can do very little here...
var TRY_USE_DUMP = false;
if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
dump(x);
}) : (function(x) {
// self.postMessage(x); // enable this if you want stdout to be sent as messages
}));
}
if (ENVIRONMENT_IS_WORKER) {
Module['load'] = importScripts;
}
if (typeof Module['setWindowTitle'] === 'undefined') {
Module['setWindowTitle'] = function(title) { document.title = title };
}
}
else {
// Unreachable because SHELL is dependant on the others
throw 'Unknown runtime environment. Where are we?';
}
function globalEval(x) {
eval.call(null, x);
}
if (!Module['load'] && Module['read']) {
Module['load'] = function load(f) {
globalEval(Module['read'](f));
};
}
if (!Module['print']) {
Module['print'] = function(){};
}
if (!Module['printErr']) {
Module['printErr'] = Module['print'];
}
if (!Module['arguments']) {
Module['arguments'] = [];
}
if (!Module['thisProgram']) {
Module['thisProgram'] = './this.program';
}
// *** Environment setup code ***
// Closure helpers
Module.print = Module['print'];
Module.printErr = Module['printErr'];
// Callbacks
Module['preRun'] = [];
Module['postRun'] = [];
// Merge back in the overrides
for (var key in moduleOverrides) {
if (moduleOverrides.hasOwnProperty(key)) {
Module[key] = moduleOverrides[key];
}
}
// Free the object hierarchy contained in the overrides, this lets the GC
// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.
moduleOverrides = undefined;
// {{PREAMBLE_ADDITIONS}}
// === Preamble library stuff ===
// Documentation for the public APIs defined in this file must be updated in:
// site/source/docs/api_reference/preamble.js.rst
// A prebuilt local version of the documentation is available at:
// site/build/text/docs/api_reference/preamble.js.txt
// You can also build docs locally as HTML or other formats in site/
// An online HTML version (which may be of a different version of Emscripten)
// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
//========================================
// Runtime code shared with compiler
//========================================
var Runtime = {
setTempRet0: function (value) {
tempRet0 = value;
},
getTempRet0: function () {
return tempRet0;
},
stackSave: function () {
return STACKTOP;
},
stackRestore: function (stackTop) {
STACKTOP = stackTop;
},
getNativeTypeSize: function (type) {
switch (type) {
case 'i1': case 'i8': return 1;
case 'i16': return 2;
case 'i32': return 4;
case 'i64': return 8;
case 'float': return 4;
case 'double': return 8;
default: {
if (type[type.length-1] === '*') {
return Runtime.QUANTUM_SIZE; // A pointer
} else if (type[0] === 'i') {
var bits = parseInt(type.substr(1));
assert(bits % 8 === 0);
return bits/8;
} else {
return 0;
}
}
}
},
getNativeFieldSize: function (type) {
return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
},
STACK_ALIGN: 16,
prepVararg: function (ptr, type) {
if (type === 'double' || type === 'i64') {
// move so the load is aligned
if (ptr & 7) {
assert((ptr & 7) === 4);
ptr += 4;
}
} else {
assert((ptr & 3) === 0);
}
return ptr;
},
getAlignSize: function (type, size, vararg) {
// we align i64s and doubles on 64-bit boundaries, unlike x86
if (!vararg && (type == 'i64' || type == 'double')) return 8;
if (!type) return Math.min(size, 8); // align structures internally to 64 bits
return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
},
dynCall: function (sig, ptr, args) {
if (args && args.length) {
assert(args.length == sig.length-1);
assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\'');
return Module['dynCall_' + sig].apply(null, [ptr].concat(args));
} else {
assert(sig.length == 1);
assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\'');
return Module['dynCall_' + sig].call(null, ptr);
}
},
functionPointers: [],
addFunction: function (func) {
for (var i = 0; i < Runtime.functionPointers.length; i++) {
if (!Runtime.functionPointers[i]) {
Runtime.functionPointers[i] = func;
return 2*(1 + i);
}
}
throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
},
removeFunction: function (index) {
Runtime.functionPointers[(index-2)/2] = null;
},
warnOnce: function (text) {
if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
if (!Runtime.warnOnce.shown[text]) {
Runtime.warnOnce.shown[text] = 1;
Module.printErr(text);
}
},
funcWrappers: {},
getFuncWrapper: function (func, sig) {
assert(sig);
if (!Runtime.funcWrappers[sig]) {
Runtime.funcWrappers[sig] = {};
}
var sigCache = Runtime.funcWrappers[sig];
if (!sigCache[func]) {
// optimize away arguments usage in common cases
if (sig.length === 1) {
sigCache[func] = function dynCall_wrapper() {
return Runtime.dynCall(sig, func);
};
} else if (sig.length === 2) {
sigCache[func] = function dynCall_wrapper(arg) {
return Runtime.dynCall(sig, func, [arg]);
};
} else {
// general case
sigCache[func] = function dynCall_wrapper() {
return Runtime.dynCall(sig, func, Array.prototype.slice.call(arguments));
};
}
}
return sigCache[func];
},
getCompilerSetting: function (name) {
throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work';
},
stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+15)&-16);(assert((((STACKTOP|0) < (STACK_MAX|0))|0))|0); return ret; },
staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + (assert(!staticSealed),size))|0;STATICTOP = (((STATICTOP)+15)&-16); return ret; },
dynamicAlloc: function (size) { assert(DYNAMICTOP_PTR);var ret = HEAP32[DYNAMICTOP_PTR>>2];var end = (((ret + size + 15)|0) & -16);HEAP32[DYNAMICTOP_PTR>>2] = end;if (end >= TOTAL_MEMORY) {var success = enlargeMemory();if (!success) {HEAP32[DYNAMICTOP_PTR>>2] = ret;return 0;}}return ret;},
alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 16))*(quantum ? quantum : 16); return ret; },
makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0))); return ret; },
GLOBAL_BASE: 8,
QUANTUM_SIZE: 4,
__dummy__: 0
}
Module["Runtime"] = Runtime;
//========================================
// Runtime essentials
//========================================
var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
var EXITSTATUS = 0;
function assert(condition, text) {
if (!condition) {
abort('Assertion failed: ' + text);
}
}
var globalScope = this;
// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
function getCFunc(ident) {
var func = Module['_' + ident]; // closure exported function
if (!func) {
try { func = eval('_' + ident); } catch(e) {}
}
assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
return func;
}
var cwrap, ccall;
(function(){
var JSfuncs = {
// Helpers for cwrap -- it can't refer to Runtime directly because it might
// be renamed by closure, instead it calls JSfuncs['stackSave'].body to find
// out what the minified function name is.
'stackSave': function() {
Runtime.stackSave()
},
'stackRestore': function() {
Runtime.stackRestore()
},
// type conversion from js to c
'arrayToC' : function(arr) {
var ret = Runtime.stackAlloc(arr.length);
writeArrayToMemory(arr, ret);
return ret;
},
'stringToC' : function(str) {
var ret = 0;
if (str !== null && str !== undefined && str !== 0) { // null string
// at most 4 bytes per UTF-8 code point, +1 for the trailing '\0'
var len = (str.length << 2) + 1;
ret = Runtime.stackAlloc(len);
stringToUTF8(str, ret, len);
}
return ret;
}
};
// For fast lookup of conversion functions
var toC = {'string' : JSfuncs['stringToC'], 'array' : JSfuncs['arrayToC']};
// C calling interface.
ccall = function ccallFunc(ident, returnType, argTypes, args, opts) {
var func = getCFunc(ident);
var cArgs = [];
var stack = 0;
assert(returnType !== 'array', 'Return type should not be "array".');
if (args) {
for (var i = 0; i < args.length; i++) {
var converter = toC[argTypes[i]];
if (converter) {
if (stack === 0) stack = Runtime.stackSave();
cArgs[i] = converter(args[i]);
} else {
cArgs[i] = args[i];
}
}
}
var ret = func.apply(null, cArgs);
if ((!opts || !opts.async) && typeof EmterpreterAsync === 'object') {
assert(!EmterpreterAsync.state, 'cannot start async op with normal JS calling ccall');
}
if (opts && opts.async) assert(!returnType, 'async ccalls cannot return values');
if (returnType === 'string') ret = Pointer_stringify(ret);
if (stack !== 0) {
if (opts && opts.async) {
EmterpreterAsync.asyncFinalizers.push(function() {
Runtime.stackRestore(stack);
});
return;
}
Runtime.stackRestore(stack);
}
return ret;
}
var sourceRegex = /^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;
function parseJSFunc(jsfunc) {
// Match the body and the return value of a javascript function source
var parsed = jsfunc.toString().match(sourceRegex).slice(1);
return {arguments : parsed[0], body : parsed[1], returnValue: parsed[2]}
}
// sources of useful functions. we create this lazily as it can trigger a source decompression on this entire file
var JSsource = null;
function ensureJSsource() {
if (!JSsource) {
JSsource = {};
for (var fun in JSfuncs) {
if (JSfuncs.hasOwnProperty(fun)) {
// Elements of toCsource are arrays of three items:
// the code, and the return value
JSsource[fun] = parseJSFunc(JSfuncs[fun]);
}
}
}
}
cwrap = function cwrap(ident, returnType, argTypes) {
argTypes = argTypes || [];
var cfunc = getCFunc(ident);
// When the function takes numbers and returns a number, we can just return
// the original function
var numericArgs = argTypes.every(function(type){ return type === 'number'});
var numericRet = (returnType !== 'string');
if ( numericRet && numericArgs) {
return cfunc;
}
// Creation of the arguments list (["$1","$2",...,"$nargs"])
var argNames = argTypes.map(function(x,i){return '$'+i});
var funcstr = "(function(" + argNames.join(',') + ") {";
var nargs = argTypes.length;
if (!numericArgs) {
// Generate the code needed to convert the arguments from javascript
// values to pointers
ensureJSsource();
funcstr += 'var stack = ' + JSsource['stackSave'].body + ';';
for (var i = 0; i < nargs; i++) {
var arg = argNames[i], type = argTypes[i];
if (type === 'number') continue;
var convertCode = JSsource[type + 'ToC']; // [code, return]
funcstr += 'var ' + convertCode.arguments + ' = ' + arg + ';';
funcstr += convertCode.body + ';';
funcstr += arg + '=(' + convertCode.returnValue + ');';
}
}
// When the code is compressed, the name of cfunc is not literally 'cfunc' anymore
var cfuncname = parseJSFunc(function(){return cfunc}).returnValue;
// Call the function
funcstr += 'var ret = ' + cfuncname + '(' + argNames.join(',') + ');';
if (!numericRet) { // Return type can only by 'string' or 'number'
// Convert the result to a string
var strgfy = parseJSFunc(function(){return Pointer_stringify}).returnValue;
funcstr += 'ret = ' + strgfy + '(ret);';
}
funcstr += "if (typeof EmterpreterAsync === 'object') { assert(!EmterpreterAsync.state, 'cannot start async op with normal JS calling cwrap') }";
if (!numericArgs) {
// If we had a stack, restore it
ensureJSsource();
funcstr += JSsource['stackRestore'].body.replace('()', '(stack)') + ';';
}
funcstr += 'return ret})';
return eval(funcstr);
};
})();
Module["ccall"] = ccall;
Module["cwrap"] = cwrap;
function setValue(ptr, value, type, noSafe) {
type = type || 'i8';
if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
switch(type) {
case 'i1': HEAP8[((ptr)>>0)]=value; break;
case 'i8': HEAP8[((ptr)>>0)]=value; break;
case 'i16': HEAP16[((ptr)>>1)]=value; break;
case 'i32': HEAP32[((ptr)>>2)]=value; break;
case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
case 'float': HEAPF32[((ptr)>>2)]=value; break;
case 'double': HEAPF64[((ptr)>>3)]=value; break;
default: abort('invalid type for setValue: ' + type);
}
}
Module["setValue"] = setValue;
function getValue(ptr, type, noSafe) {
type = type || 'i8';
if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
switch(type) {
case 'i1': return HEAP8[((ptr)>>0)];
case 'i8': return HEAP8[((ptr)>>0)];
case 'i16': return HEAP16[((ptr)>>1)];
case 'i32': return HEAP32[((ptr)>>2)];
case 'i64': return HEAP32[((ptr)>>2)];
case 'float': return HEAPF32[((ptr)>>2)];
case 'double': return HEAPF64[((ptr)>>3)];
default: abort('invalid type for setValue: ' + type);
}
return null;
}
Module["getValue"] = getValue;
var ALLOC_NORMAL = 0; // Tries to use _malloc()
var ALLOC_STACK = 1; // Lives for the duration of the current function call
var ALLOC_STATIC = 2; // Cannot be freed
var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
var ALLOC_NONE = 4; // Do not allocate
Module["ALLOC_NORMAL"] = ALLOC_NORMAL;
Module["ALLOC_STACK"] = ALLOC_STACK;
Module["ALLOC_STATIC"] = ALLOC_STATIC;
Module["ALLOC_DYNAMIC"] = ALLOC_DYNAMIC;
Module["ALLOC_NONE"] = ALLOC_NONE;
// allocate(): This is for internal use. You can use it yourself as well, but the interface
// is a little tricky (see docs right below). The reason is that it is optimized
// for multiple syntaxes to save space in generated code. So you should
// normally not use allocate(), and instead allocate memory using _malloc(),
// initialize it with setValue(), and so forth.
// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
// in *bytes* (note that this is sometimes confusing: the next parameter does not
// affect this!)
// @types: Either an array of types, one for each byte (or 0 if no type at that position),
// or a single type which is used for the entire block. This only matters if there
// is initial data - if @slab is a number, then this does not matter at all and is
// ignored.
// @allocator: How to allocate memory, see ALLOC_*
function allocate(slab, types, allocator, ptr) {
var zeroinit, size;
if (typeof slab === 'number') {
zeroinit = true;
size = slab;
} else {
zeroinit = false;
size = slab.length;
}
var singleType = typeof types === 'string' ? types : null;
var ret;
if (allocator == ALLOC_NONE) {
ret = ptr;
} else {
ret = [typeof _malloc === 'function' ? _malloc : Runtime.staticAlloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
}
if (zeroinit) {
var ptr = ret, stop;
assert((ret & 3) == 0);
stop = ret + (size & ~3);
for (; ptr < stop; ptr += 4) {
HEAP32[((ptr)>>2)]=0;
}
stop = ret + size;
while (ptr < stop) {
HEAP8[((ptr++)>>0)]=0;
}
return ret;
}
if (singleType === 'i8') {
if (slab.subarray || slab.slice) {
HEAPU8.set(slab, ret);
} else {
HEAPU8.set(new Uint8Array(slab), ret);
}
return ret;
}
var i = 0, type, typeSize, previousType;
while (i < size) {
var curr = slab[i];
if (typeof curr === 'function') {
curr = Runtime.getFunctionIndex(curr);
}
type = singleType || types[i];
if (type === 0) {
i++;
continue;
}
assert(type, 'Must know what type to store in allocate!');
if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
setValue(ret+i, curr, type);
// no need to look up size unless type changes, so cache it
if (previousType !== type) {
typeSize = Runtime.getNativeTypeSize(type);
previousType = type;
}
i += typeSize;
}
return ret;
}
Module["allocate"] = allocate;
// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready
function getMemory(size) {
if (!staticSealed) return Runtime.staticAlloc(size);
if (!runtimeInitialized) return Runtime.dynamicAlloc(size);
return _malloc(size);
}
Module["getMemory"] = getMemory;
function Pointer_stringify(ptr, /* optional */ length) {
if (length === 0 || !ptr) return '';
// TODO: use TextDecoder
// Find the length, and check for UTF while doing so
var hasUtf = 0;
var t;
var i = 0;
while (1) {
assert(ptr + i < TOTAL_MEMORY);
t = HEAPU8[(((ptr)+(i))>>0)];
hasUtf |= t;
if (t == 0 && !length) break;
i++;
if (length && i == length) break;
}
if (!length) length = i;
var ret = '';
if (hasUtf < 128) {
var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
var curr;
while (length > 0) {
curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
ret = ret ? ret + curr : curr;
ptr += MAX_CHUNK;
length -= MAX_CHUNK;
}
return ret;
}
return Module['UTF8ToString'](ptr);
}
Module["Pointer_stringify"] = Pointer_stringify;
// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns
// a copy of that string as a Javascript String object.
function AsciiToString(ptr) {
var str = '';
while (1) {
var ch = HEAP8[((ptr++)>>0)];
if (!ch) return str;
str += String.fromCharCode(ch);
}
}
Module["AsciiToString"] = AsciiToString;
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.
function stringToAscii(str, outPtr) {
return writeAsciiToMemory(str, outPtr, false);
}
Module["stringToAscii"] = stringToAscii;
// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns
// a copy of that string as a Javascript String object.
var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;
function UTF8ArrayToString(u8Array, idx) {
var endPtr = idx;
// TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
// Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
while (u8Array[endPtr]) ++endPtr;
if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));
} else {
var u0, u1, u2, u3, u4, u5;
var str = '';
while (1) {
// For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
u0 = u8Array[idx++];
if (!u0) return str;
if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }
u1 = u8Array[idx++] & 63;
if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }
u2 = u8Array[idx++] & 63;
if ((u0 & 0xF0) == 0xE0) {
u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
} else {
u3 = u8Array[idx++] & 63;
if ((u0 & 0xF8) == 0xF0) {
u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;
} else {
u4 = u8Array[idx++] & 63;
if ((u0 & 0xFC) == 0xF8) {
u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;
} else {
u5 = u8Array[idx++] & 63;
u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;
}
}
}
if (u0 < 0x10000) {
str += String.fromCharCode(u0);
} else {
var ch = u0 - 0x10000;
str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
}
}
}
}
Module["UTF8ArrayToString"] = UTF8ArrayToString;
// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns
// a copy of that string as a Javascript String object.
function UTF8ToString(ptr) {
return UTF8ArrayToString(HEAPU8,ptr);
}
Module["UTF8ToString"] = UTF8ToString;
// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',
// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.
// Use the function lengthBytesUTF8() to compute the exact number of bytes (excluding null terminator) that this function will write.
// Parameters:
// str: the Javascript string to copy.
// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.
// outIdx: The starting offset in the array to begin the copying.
// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
// terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.
// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.
// Returns the number of bytes written, EXCLUDING the null terminator.
function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {
if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.
return 0;
var startIdx = outIdx;
var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.
for (var i = 0; i < str.length; ++i) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
// See http://unicode.org/faq/utf_bom.html#utf16-3
// For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
var u = str.charCodeAt(i); // possibly a lead surrogate
if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);
if (u <= 0x7F) {
if (outIdx >= endIdx) break;
outU8Array[outIdx++] = u;
} else if (u <= 0x7FF) {
if (outIdx + 1 >= endIdx) break;
outU8Array[outIdx++] = 0xC0 | (u >> 6);
outU8Array[outIdx++] = 0x80 | (u & 63);
} else if (u <= 0xFFFF) {
if (outIdx + 2 >= endIdx) break;
outU8Array[outIdx++] = 0xE0 | (u >> 12);
outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
outU8Array[outIdx++] = 0x80 | (u & 63);
} else if (u <= 0x1FFFFF) {
if (outIdx + 3 >= endIdx) break;
outU8Array[outIdx++] = 0xF0 | (u >> 18);
outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
outU8Array[outIdx++] = 0x80 | (u & 63);
} else if (u <= 0x3FFFFFF) {
if (outIdx + 4 >= endIdx) break;
outU8Array[outIdx++] = 0xF8 | (u >> 24);
outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);
outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
outU8Array[outIdx++] = 0x80 | (u & 63);
} else {
if (outIdx + 5 >= endIdx) break;
outU8Array[outIdx++] = 0xFC | (u >> 30);
outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63);
outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);
outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
outU8Array[outIdx++] = 0x80 | (u & 63);
}
}
// Null-terminate the pointer to the buffer.
outU8Array[outIdx] = 0;
return outIdx - startIdx;
}
Module["stringToUTF8Array"] = stringToUTF8Array;
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.
// Use the function lengthBytesUTF8() to compute the exact number of bytes (excluding null terminator) that this function will write.
// Returns the number of bytes written, EXCLUDING the null terminator.
function stringToUTF8(str, outPtr, maxBytesToWrite) {
assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);
}
Module["stringToUTF8"] = stringToUTF8;
// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.
function lengthBytesUTF8(str) {
var len = 0;
for (var i = 0; i < str.length; ++i) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
// See http://unicode.org/faq/utf_bom.html#utf16-3
var u = str.charCodeAt(i); // possibly a lead surrogate
if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);
if (u <= 0x7F) {
++len;
} else if (u <= 0x7FF) {
len += 2;
} else if (u <= 0xFFFF) {
len += 3;
} else if (u <= 0x1FFFFF) {
len += 4;
} else if (u <= 0x3FFFFFF) {
len += 5;
} else {
len += 6;
}
}
return len;
}
Module["lengthBytesUTF8"] = lengthBytesUTF8;
// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
// a copy of that string as a Javascript String object.
var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;
function UTF16ToString(ptr) {
assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');
var endPtr = ptr;
// TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
// Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
var idx = endPtr >> 1;
while (HEAP16[idx]) ++idx;
endPtr = idx << 1;
if (endPtr - ptr > 32 && UTF16Decoder) {
return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));
} else {
var i = 0;
var str = '';
while (1) {
var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
if (codeUnit == 0) return str;
++i;
// fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
str += String.fromCharCode(codeUnit);
}
}
}
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.
// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.
// Parameters:
// str: the Javascript string to copy.
// outPtr: Byte address in Emscripten HEAP where to write the string to.
// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.
// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.
// Returns the number of bytes written, EXCLUDING the null terminator.
function stringToUTF16(str, outPtr, maxBytesToWrite) {
assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!');
assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
// Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
if (maxBytesToWrite === undefined) {
maxBytesToWrite = 0x7FFFFFFF;
}
if (maxBytesToWrite < 2) return 0;
maxBytesToWrite -= 2; // Null terminator.
var startPtr = outPtr;
var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;
for (var i = 0; i < numCharsToWrite; ++i) {
// charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
HEAP16[((outPtr)>>1)]=codeUnit;
outPtr += 2;
}
// Null-terminate the pointer to the HEAP.
HEAP16[((outPtr)>>1)]=0;
return outPtr - startPtr;
}
// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.
function lengthBytesUTF16(str) {
return str.length*2;
}
function UTF32ToString(ptr) {
assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!');
var i = 0;
var str = '';
while (1) {
var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
if (utf32 == 0)
return str;
++i;
// 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.
// See http://unicode.org/faq/utf_bom.html#utf16-3
if (utf32 >= 0x10000) {
var ch = utf32 - 0x10000;
str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
} else {
str += String.fromCharCode(utf32);
}
}
}
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.
// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.
// Parameters:
// str: the Javascript string to copy.
// outPtr: Byte address in Emscripten HEAP where to write the string to.
// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.
// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.
// Returns the number of bytes written, EXCLUDING the null terminator.
function stringToUTF32(str, outPtr, maxBytesToWrite) {
assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!');
assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
// Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
if (maxBytesToWrite === undefined) {
maxBytesToWrite = 0x7FFFFFFF;
}
if (maxBytesToWrite < 4) return 0;
var startPtr = outPtr;
var endPtr = startPtr + maxBytesToWrite - 4;
for (var i = 0; i < str.length; ++i) {
// 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.
// See http://unicode.org/faq/utf_bom.html#utf16-3
var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
var trailSurrogate = str.charCodeAt(++i);
codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
}
HEAP32[((outPtr)>>2)]=codeUnit;
outPtr += 4;
if (outPtr + 4 > endPtr) break;
}
// Null-terminate the pointer to the HEAP.
HEAP32[((outPtr)>>2)]=0;
return outPtr - startPtr;
}
// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.
function lengthBytesUTF32(str) {
var len = 0;
for (var i = 0; i < str.length; ++i) {
// 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.
// See http://unicode.org/faq/utf_bom.html#utf16-3
var codeUnit = str.charCodeAt(i);
if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.
len += 4;
}
return len;
}
function demangle(func) {
var hasLibcxxabi = !!Module['___cxa_demangle'];
if (hasLibcxxabi) {
try {
var s = func.substr(1);
var len = lengthBytesUTF8(s)+1;
var buf = _malloc(len);
stringToUTF8(s, buf, len);
var status = _malloc(4);
var ret = Module['___cxa_demangle'](buf, 0, 0, status);
if (getValue(status, 'i32') === 0 && ret) {
return Pointer_stringify(ret);
}
// otherwise, libcxxabi failed
} catch(e) {
// ignore problems here
} finally {
if (buf) _free(buf);
if (status) _free(status);
if (ret) _free(ret);
}
// failure when using libcxxabi, don't demangle
return func;
}
Runtime.warnOnce('warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling');
return func;
}
function demangleAll(text) {
return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') });
}
function jsStackTrace() {
var err = new Error();
if (!err.stack) {
// IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,
// so try that as a special-case.
try {
throw new Error(0);
} catch(e) {
err = e;
}
if (!err.stack) {
return '(no stack trace available)';
}
}
return err.stack.toString();
}
function stackTrace() {
var js = jsStackTrace();
if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace']();
return demangleAll(js);
}
Module["stackTrace"] = stackTrace;
// Memory management
var PAGE_SIZE = 4096;
function alignMemoryPage(x) {
if (x % 4096 > 0) {
x += (4096 - (x % 4096));
}
return x;
}
var HEAP;
var buffer;
var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
function updateGlobalBuffer(buf) {
Module['buffer'] = buffer = buf;
}
function updateGlobalBufferViews() {
Module['HEAP8'] = HEAP8 = new Int8Array(buffer);
Module['HEAP16'] = HEAP16 = new Int16Array(buffer);
Module['HEAP32'] = HEAP32 = new Int32Array(buffer);
Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);
Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);
Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);
Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);
Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);
}
var STATIC_BASE, STATICTOP, staticSealed; // static area
var STACK_BASE, STACKTOP, STACK_MAX; // stack area
var DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk
STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;
staticSealed = false;
// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
function writeStackCookie() {
assert((STACK_MAX & 3) == 0);
HEAPU32[(STACK_MAX >> 2)-1] = 0x02135467;
HEAPU32[(STACK_MAX >> 2)-2] = 0x89BACDFE;
}
function checkStackCookie() {
if (HEAPU32[(STACK_MAX >> 2)-1] != 0x02135467 || HEAPU32[(STACK_MAX >> 2)-2] != 0x89BACDFE) {
abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x' + HEAPU32[(STACK_MAX >> 2)-2].toString(16) + ' ' + HEAPU32[(STACK_MAX >> 2)-1].toString(16));
}
// Also test the global address 0 for integrity. This check is not compatible with SAFE_SPLIT_MEMORY though, since that mode already tests all address 0 accesses on its own.
if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) throw 'Runtime error: The application has corrupted its heap memory area (address zero)!';
}
function abortStackOverflow(allocSize) {
abort('Stack overflow! Attempted to allocate ' + allocSize + ' bytes on the stack, but stack has only ' + (STACK_MAX - asm.stackSave() + allocSize) + ' bytes available!');
}
function abortOnCannotGrowMemory() {
abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ');
}
function enlargeMemory() {
abortOnCannotGrowMemory();
}
var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216;
var totalMemory = 64*1024;
while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) {
if (totalMemory < 16*1024*1024) {
totalMemory *= 2;
} else {
totalMemory += 16*1024*1024
}
}
if (totalMemory !== TOTAL_MEMORY) {
Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be compliant with the asm.js spec (and given that TOTAL_STACK=' + TOTAL_STACK + ')');
TOTAL_MEMORY = totalMemory;
}
// Initialize the runtime's memory
// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
'JS engine does not provide full typed array support');
// Use a provided buffer, if there is one, or else allocate a new one
if (Module['buffer']) {
buffer = Module['buffer'];
assert(buffer.byteLength === TOTAL_MEMORY, 'provided buffer should be ' + TOTAL_MEMORY + ' bytes, but it is ' + buffer.byteLength);
} else {
buffer = new ArrayBuffer(TOTAL_MEMORY);
}
updateGlobalBufferViews();
function getTotalMemory() {
return TOTAL_MEMORY;
}
// Endianness check (note: assumes compiler arch was little-endian)
HEAP32[0] = 0x63736d65; /* 'emsc' */
HEAP16[1] = 0x6373;
if (HEAPU8[2] !== 0x73 || HEAPU8[3] !== 0x63) throw 'Runtime error: expected the system to be little-endian!';
Module['HEAP'] = HEAP;
Module['buffer'] = buffer;
Module['HEAP8'] = HEAP8;
Module['HEAP16'] = HEAP16;
Module['HEAP32'] = HEAP32;
Module['HEAPU8'] = HEAPU8;
Module['HEAPU16'] = HEAPU16;
Module['HEAPU32'] = HEAPU32;
Module['HEAPF32'] = HEAPF32;
Module['HEAPF64'] = HEAPF64;
function callRuntimeCallbacks(callbacks) {
while(callbacks.length > 0) {
var callback = callbacks.shift();
if (typeof callback == 'function') {
callback();
continue;
}
var func = callback.func;
if (typeof func === 'number') {
if (callback.arg === undefined) {
Runtime.dynCall('v', func);
} else {
Runtime.dynCall('vi', func, [callback.arg]);
}
} else {
func(callback.arg === undefined ? null : callback.arg);
}
}
}
var __ATPRERUN__ = []; // functions called before the runtime is initialized
var __ATINIT__ = []; // functions called during startup
var __ATMAIN__ = []; // functions called when main() is to be run
var __ATEXIT__ = []; // functions called during shutdown
var __ATPOSTRUN__ = []; // functions called after the runtime has exited
var runtimeInitialized = false;
var runtimeExited = false;
function preRun() {
// compatibility - merge in anything from Module['preRun'] at this time
if (Module['preRun']) {
if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
while (Module['preRun'].length) {
addOnPreRun(Module['preRun'].shift());
}
}
callRuntimeCallbacks(__ATPRERUN__);
}
function ensureInitRuntime() {
checkStackCookie();
if (runtimeInitialized) return;
runtimeInitialized = true;
callRuntimeCallbacks(__ATINIT__);
}
function preMain() {
checkStackCookie();
callRuntimeCallbacks(__ATMAIN__);
}
function exitRuntime() {
checkStackCookie();
callRuntimeCallbacks(__ATEXIT__);
runtimeExited = true;
}
function postRun() {
checkStackCookie();
// compatibility - merge in anything from Module['postRun'] at this time
if (Module['postRun']) {
if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
while (Module['postRun'].length) {
addOnPostRun(Module['postRun'].shift());
}
}
callRuntimeCallbacks(__ATPOSTRUN__);
}
function addOnPreRun(cb) {
__ATPRERUN__.unshift(cb);
}
Module["addOnPreRun"] = addOnPreRun;
function addOnInit(cb) {
__ATINIT__.unshift(cb);
}
Module["addOnInit"] = addOnInit;
function addOnPreMain(cb) {
__ATMAIN__.unshift(cb);
}
Module["addOnPreMain"] = addOnPreMain;
function addOnExit(cb) {
__ATEXIT__.unshift(cb);
}
Module["addOnExit"] = addOnExit;
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb);
}
Module["addOnPostRun"] = addOnPostRun;
// Tools
function intArrayFromString(stringy, dontAddNull, length /* optional */) {
var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;
var u8array = new Array(len);
var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
if (dontAddNull) u8array.length = numBytesWritten;
return u8array;
}
Module["intArrayFromString"] = intArrayFromString;
function intArrayToString(array) {
var ret = [];
for (var i = 0; i < array.length; i++) {
var chr = array[i];
if (chr > 0xFF) {
assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');
chr &= 0xFF;
}
ret.push(String.fromCharCode(chr));
}
return ret.join('');
}
Module["intArrayToString"] = intArrayToString;
// Deprecated: This function should not be called because it is unsafe and does not provide
// a maximum length limit of how many bytes it is allowed to write. Prefer calling the
// function stringToUTF8Array() instead, which takes in a maximum length that can be used
// to be secure from out of bounds writes.
function writeStringToMemory(string, buffer, dontAddNull) {
Runtime.warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');
var lastChar, end;
if (dontAddNull) {
// stringToUTF8Array always appends null. If we don't want to do that, remember the
// character that existed at the location where the null will be placed, and restore
// that after the write (below).
end = buffer + lengthBytesUTF8(string);
lastChar = HEAP8[end];
}
stringToUTF8(string, buffer, Infinity);
if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.
}
Module["writeStringToMemory"] = writeStringToMemory;
function writeArrayToMemory(array, buffer) {
HEAP8.set(array, buffer);
}
Module["writeArrayToMemory"] = writeArrayToMemory;
function writeAsciiToMemory(str, buffer, dontAddNull) {
for (var i = 0; i < str.length; ++i) {
assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff);
HEAP8[((buffer++)>>0)]=str.charCodeAt(i);
}
// Null-terminate the pointer to the HEAP.
if (!dontAddNull) HEAP8[((buffer)>>0)]=0;
}
Module["writeAsciiToMemory"] = writeAsciiToMemory;
function unSign(value, bits, ignore) {
if (value >= 0) {
return value;
}
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
: Math.pow(2, bits) + value;
}
function reSign(value, bits, ignore) {
if (value <= 0) {
return value;
}
var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
: Math.pow(2, bits-1);
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
// but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
// TODO: In i64 mode 1, resign the two parts separately and safely
value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
}
return value;
}
// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 )
if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
var ah = a >>> 16;
var al = a & 0xffff;
var bh = b >>> 16;
var bl = b & 0xffff;
return (al*bl + ((ah*bl + al*bh) << 16))|0;
};
Math.imul = Math['imul'];
if (!Math['fround']) Math['fround'] = function(x) { return x };
if (!Math['clz32']) Math['clz32'] = function(x) {
x = x >>> 0;
for (var i = 0; i < 32; i++) {
if (x & (1 << (31 - i))) return i;
}
return 32;
};
Math.clz32 = Math['clz32']
if (!Math['trunc']) Math['trunc'] = function(x) {
return x < 0 ? Math.ceil(x) : Math.floor(x);
};
Math.trunc = Math['trunc'];
var Math_abs = Math.abs;
var Math_cos = Math.cos;
var Math_sin = Math.sin;
var Math_tan = Math.tan;
var Math_acos = Math.acos;
var Math_asin = Math.asin;
var Math_atan = Math.atan;
var Math_atan2 = Math.atan2;
var Math_exp = Math.exp;
var Math_log = Math.log;
var Math_sqrt = Math.sqrt;
var Math_ceil = Math.ceil;
var Math_floor = Math.floor;
var Math_pow = Math.pow;
var Math_imul = Math.imul;
var Math_fround = Math.fround;
var Math_min = Math.min;
var Math_clz32 = Math.clz32;
var Math_trunc = Math.trunc;
// A counter of dependencies for calling run(). If we need to
// do asynchronous work before running, increment this and
// decrement it. Incrementing must happen in a place like
// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
// Note that you can add dependencies in preRun, even though
// it happens right before run - run will be postponed until
// the dependencies are met.
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
var runDependencyTracking = {};
function getUniqueRunDependency(id) {
var orig = id;
while (1) {
if (!runDependencyTracking[id]) return id;
id = orig + Math.random();
}
return id;
}
function addRunDependency(id) {
runDependencies++;
if (Module['monitorRunDependencies']) {
Module['monitorRunDependencies'](runDependencies);
}
if (id) {
assert(!runDependencyTracking[id]);
runDependencyTracking[id] = 1;
if (runDependencyWatcher === null && typeof setInterval !== 'undefined') {
// Check for missing dependencies every few seconds
runDependencyWatcher = setInterval(function() {
if (ABORT) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
return;
}
var shown = false;
for (var dep in runDependencyTracking) {
if (!shown) {
shown = true;
Module.printErr('still waiting on run dependencies:');
}
Module.printErr('dependency: ' + dep);
}
if (shown) {
Module.printErr('(end of list)');
}
}, 10000);
}
} else {
Module.printErr('warning: run dependency added without ID');
}
}
Module["addRunDependency"] = addRunDependency;
function removeRunDependency(id) {
runDependencies--;
if (Module['monitorRunDependencies']) {
Module['monitorRunDependencies'](runDependencies);
}
if (id) {
assert(runDependencyTracking[id]);
delete runDependencyTracking[id];
} else {
Module.printErr('warning: run dependency removed without ID');
}
if (runDependencies == 0) {
if (runDependencyWatcher !== null) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
}
if (dependenciesFulfilled) {
var callback = dependenciesFulfilled;
dependenciesFulfilled = null;
callback(); // can add another dependenciesFulfilled
}
}
}
Module["removeRunDependency"] = removeRunDependency;
Module["preloadedImages"] = {}; // maps url to image data
Module["preloadedAudios"] = {}; // maps url to audio data
var memoryInitializer = null;
// === Body ===
var ASM_CONSTS = [];
STATIC_BASE = 8;
STATICTOP = STATIC_BASE + 229344;
/* global initializers */ __ATINIT__.push();
/* memory initializer */ allocate([1,0,0,0,8,0,0,0,4,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,52,0,0,0,4,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,16,0,0,0,4,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,16,0,0,0,4,0,0,0,4,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,28,0,0,0,4,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,16,0,0,0,0,0,0,0,1,0,0,0,37,0,0,0,16,0,0,0,0,0,0,0,1,0,0,0,38,0,0,0,39,0,0,0,16,0,0,0,4,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,16,0,0,0,4,0,0,0,4,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,20,0,0,0,4,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,0,0,0,0,51,0,0,0,24,0,0,0,4,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,0,0,0,0,56,0,0,0,8,0,0,0,4,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,16,0,0,0,4,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,16,0,0,0,4,0,0,0,4,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,16,0,0,0,4,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,16,0,0,0,4,0,0,0,4,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,16,0,0,0,0,0,0,0,1,0,0,0,76,0,0,0,16,0,0,0,0,0,0,0,1,0,0,0,77,0,0,0,78,0,0,0,20,0,0,0,4,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,0,0,0,0,0,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,0,0,0,32,0,0,0,4,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,91,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,0,0,20,0,0,0,4,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,0,0,0,8,0,0,0,4,0,0,0,106,0,0,0,107,0,0,0,8,0,0,0,4,0,0,0,57,0,0,0,58,0,0,0,108,0,0,0,60,0,0,0,61,0,0,0,109,0,0,0,16,0,0,0,4,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,4,0,0,0,4,0,0,0,116,0,0,0,115,0,0,0,4,0,0,0,4,0,0,0,117,0,0,0,115,0,0,0,4,0,0,0,4,0,0,0,118,0,0,0,115,0,0,0,4,0,0,0,4,0,0,0,119,0,0,0,120,0,0,0,0,0,0,0,1,0,0,0,121,0,0,0,121,0,0,0,122,0,0,0,120,0,0,0,0,0,0,0,1,0,0,0,123,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,144,2,0,0,4,0,0,0,126,0,0,0,127,0,0,0,0,0,0,0,120,0,0,0,4,0,0,0,4,0,0,0,128,0,0,0,129,0,0,0,130,0,0,0,131,0,0,0,4,0,0,0,4,0,0,0,132,0,0,0,133,0,0,0,24,0,0,0,4,0,0,0,134,0,0,0,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,0,0,0,8,0,0,0,4,0,0,0,137,0,0,0,138,0,0,0,0,0,0,0,1,0,0,0,139,0,0,0,139,0,0,0,140,0,0,0,138,0,0,0,0,0,0,0,1,0,0,0,141,0,0,0,141,0,0,0,142,0,0,0,138,0,0,0,0,0,0,0,1,0,0,0,143,0,0,0,143,0,0,0,144,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,145,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,146,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,147,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,148,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,149,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,150,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,151,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,152,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,153,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,154,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,155,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,156,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,157,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,158,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,159,0,0,0,138,0,0,0,8,0,0,0,4,0,0,0,160,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,0,0,8,0,0,0,4,0,0,0,162,0,0,0,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,0,0,8,0,0,0,4,0,0,0,164,0,0,0,165,0,0,0,48,0,0,0,4,0,0,0,166,0,0,0,167,0,0,0,168,0,0,0,169,0,0,0,170,0,0,0,138,0,0,0,4,0,0,0,4,0,0,0,171,0,0,0,172,0,0,0,8,0,0,0,4,0,0,0,173,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,174,0,0,0,175,0,0,0,176,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,177,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,178,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,179,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,180,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,181,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,182,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,183,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,184,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,185,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,186,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,187,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,188,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,189,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,190,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,191,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,192,0,0,0,172,0,0,0,4,0,0,0,4,0,0,0,193,0,0,0,194,0,0,0,4,0,0,0,4,0,0,0,195,0,0,0,196,0,0,0,24,0,0,0,4,0,0,0,197,0,0,0,198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,199,0,0,0,8,0,0,0,4,0,0,0,203,0,0,0,199,0,0,0,1,0,0,0,1,0,0,0,204,0,0,0,205,0,0,0,206,0,0,0,207,0,0,0,208,0,0,0,209,0,0,0,8,0,0,0,4,0,0,0,57,0,0,0,58,0,0,0,210,0,0,0,60,0,0,0,61,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,211,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,212,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,213,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,214,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,215,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,216,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,217,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,218,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,219,0,0,0,199,0,0,0,4,0,0,0,4,0,0,0,220,0,0,0,221,0,0,0,0,0,0,0,1,0,0,0,222,0,0,0,223,0,0,0,0,0,0,0,221,0,0,0,4,0,0,0,4,0,0,0,224,0,0,0,225,0,0,0,8,0,0,0,4,0,0,0,226,0,0,0,0,0,0,0,0,0,0,0,0,225,245,5,0,0,0,0,128,150,152,0,0,0,0,0,64,66,15,0,0,0,0,0,160,134,1,0,0,0,0,0,16,39,0,0,0,0,0,0,232,3,0,0,0,0,0,0,100,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,225,0,0,0,4,0,0,0,4,0,0,0,227,0,0,0,228,0,0,0,8,0,0,0,4,0,0,0,229,0,0,0,230,0,0,0,8,0,0,0,4,0,0,0,231,0,0,0,232,0,0,0,12,0,0,0,4,0,0,0,233,0,0,0,230,0,0,0,4,0,0,0,4,0,0,0,234,0,0,0,235,0,0,0,236,0,0,0,237,0,0,0,16,0,0,0,4,0,0,0,238,0,0,0,239,0,0,0,240,0,0,0,230,0,0,0,4,0,0,0,4,0,0,0,241,0,0,0,242,0,0,0,243,0,0,0,244,0,0,0,16,0,0,0,4,0,0,0,245,0,0,0,246,0,0,0,247,0,0,0,230,0,0,0,4,0,0,0,4,0,0,0,248,0,0,0,249,0,0,0,250,0,0,0,251,0,0,0,16,0,0,0,4,0,0,0,252,0,0,0,253,0,0,0,254,0,0,0,230,0,0,0,4,0,0,0,4,0,0,0,255,0,0,0,0,1,0,0,1,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,3,1,0,0,4,1,0,0,5,1,0,0,6,1,0,0,12,0,0,0,4,0,0,0,7,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,9,1,0,0,10,1,0,0,11,1,0,0,12,1,0,0,0,0,0,0,13,1,0,0,16,0,0,0,4,0,0,0,14,1,0,0,15,1,0,0,16,1,0,0,17,1,0,0,12,0,0,0,4,0,0,0,18,1,0,0,19,1,0,0,20,1,0,0,21,1,0,0,22,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,23,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,24,1,0,0,25,1,0,0,26,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,27,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,28,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,29,1,0,0,2,1,0,0,8,0,0,0,4,0,0,0,32,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,33,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,34,1,0,0,6,1,0,0,12,0,0,0,4,0,0,0,35,1,0,0,36,1,0,0,4,0,0,0,4,0,0,0,37,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,38,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,39,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,42,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,44,1,0,0,45,1,0,0,16,0,0,0,4,0,0,0,46,1,0,0,47,1,0,0,48,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,49,1,0,0,50,1,0,0,51,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,53,1,0,0,54,1,0,0,16,0,0,0,4,0,0,0,55,1,0,0,56,1,0,0,57,1,0,0,2,1,0,0,4,0,0,0,4,0,0,0,58,1,0,0,59,1,0,0,60,1,0,0,61,1,0,0,4,0,0,0,4,0,0,0,62,1,0,0,63,1,0,0,64,1,0,0,61,1,0,0,4,0,0,0,4,0,0,0,65,1,0,0,61,1,0,0,4,0,0,0,4,0,0,0,66,1,0,0,61,1,0,0,4,0,0,0,4,0,0,0,67,1,0,0,0,0,0,0,0,0,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,3,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,2,0,2,3,0,0,0,0,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,2,0,0,0,0,6,0,2,0,0,7,0,0,2,8,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,2,4,0,0,12,0,2,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,240,20,0,0,13,0,0,0,0,1,2,3,3,3,4,3,3,3,3,3,3,5,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,158,100,3,0,192,1,0,0,88,21,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,255,0,0,0,0,255,3,0,0,0,0,0,0,0,0,255,3,0,0,255,3,0,0,0,0,0,0,0,0,0,0,0,192,1,0,192,255,0,0,0,0,0,0,255,3,255,3,0,0,0,0,0,0,0,0,0,0,255,3,0,0,0,0,255,255,255,255,231,1,0,0,0,0,0,0,128,0,0,0,254,3,0,7,0,0,255,3,0,0,255,3,0,0,0,0,0,0,0,0,255,255,255,255,255,255,31,0,2,4,0,0,0,0,0,0,0,0,62,0,0,0,0,0,0,0,0,0,255,3,0,0,0,0,0,0,192,255,0,0,0,0,0,0,0,0,255,3,0,0,0,0,0,0,192,255,0,0,255,3,0,0,0,0,255,3,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,127,0,0,0,192,255,255,255,255,255,255,0,0,0,0,0,0,0,0,254,255,255,7,254,255,255,7,0,0,0,0,0,4,32,4,255,255,127,255,255,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,195,255,3,0,31,80,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,223,188,64,215,255,255,251,255,255,255,255,255,255,255,255,255,191,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,127,2,254,255,255,255,255,0,0,0,0,0,255,191,182,0,255,255,255,7,7,0,0,0,255,7,255,255,255,255,255,255,255,254,0,192,255,255,255,255,255,255,255,255,255,255,255,255,239,31,254,225,0,156,0,0,255,255,255,255,255,255,0,224,255,255,255,255,255,255,255,255,255,255,255,255,3,0,0,252,255,255,255,7,48,4,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,36,36,36,36,37,38,39,40,41,42,43,44,36,36,36,36,36,36,36,36,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,31,63,64,65,66,55,67,68,69,36,36,36,70,36,36,36,36,71,72,73,74,31,75,76,31,77,78,68,31,31,31,31,31,31,31,31,31,31,31,79,80,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,81,82,36,83,84,85,86,87,88,31,31,31,31,31,31,31,89,44,90,91,92,36,93,94,31,31,31,31,31,31,31,31,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,55,31,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,95,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,96,97,36,36,36,36,98,99,36,100,101,36,102,103,104,105,36,106,107,108,109,110,111,112,113,114,115,116,36,117,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,118,119,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,36,36,36,36,36,120,36,121,122,123,124,125,36,36,36,36,126,127,128,129,31,130,36,131,132,133,113,134,184,27,0,0,135,0,0,0,0,1,2,3,4,5,6,7,8,5,5,9,5,10,11,12,7,7,7,7,7,7,7,7,7,7,13,14,15,5,5,16,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,94,102,3,0,64,4,0,0,240,31,0,0,93,0,0,0,255,255,255,252,255,31,0,0,255,255,255,1,0,0,0,0,0,0,0,0,255,255,223,63,0,0,240,255,248,3,255,255,255,255,255,255,255,255,255,239,255,223,225,255,15,0,254,255,239,159,249,255,255,253,197,227,159,89,128,176,15,0,3,0,238,135,249,255,255,253,109,195,135,25,2,94,0,0,63,0,238,191,251,255,255,253,237,227,191,27,1,0,15,0,0,2,238,159,249,255,255,253,237,227,159,25,192,176,15,0,2,0,236,199,61,214,24,199,255,195,199,29,129,0,0,0,0,0,239,223,253,255,255,253,255,227,223,29,96,7,15,0,0,0,239,223,253,255,255,253,239,227,223,29,96,64,15,0,6,0,238,223,253,255,255,255,255,231,223,93,240,128,15,0,0,252,236,255,127,252,255,255,251,47,127,128,95,255,0,0,12,0,254,255,255,255,255,255,255,7,127,32,0,0,0,0,0,0,150,37,240,254,174,236,255,59,95,32,0,240,0,0,0,0,1,0,0,0,0,0,0,0,255,254,255,255,255,31,254,255,3,255,255,254,255,255,255,31,0,0,0,0,0,0,0,0,255,255,255,255,255,255,127,249,0,0,255,255,231,193,255,255,127,64,0,48,255,255,255,255,191,32,255,255,255,255,255,247,255,255,255,255,255,255,255,255,255,61,127,61,255,255,255,255,255,61,255,255,255,255,61,127,61,255,127,255,255,255,255,255,255,255,61,255,255,255,255,255,255,255,255,135,0,0,0,0,255,255,0,0,255,255,255,255,255,255,255,255,255,255,63,63,254,255,255,255,255,255,255,255,255,255,255,255,255,159,255,255,254,255,255,7,255,255,255,255,255,255,255,255,255,199,255,1,255,223,15,0,255,255,15,0,255,255,15,0,255,223,13,0,255,255,255,255,255,255,207,255,255,1,128,16,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,7,255,255,255,255,255,255,255,255,63,0,255,255,255,127,255,15,255,1,0,0,255,255,255,63,31,0,255,255,255,255,255,15,255,255,255,3,0,0,0,0,0,0,255,255,255,15,255,255,255,255,255,255,255,127,254,255,31,0,0,0,0,0,128,0,0,0,255,255,255,255,255,255,239,255,239,15,0,0,0,0,0,0,255,255,255,255,255,243,0,252,255,255,255,255,191,255,3,0,0,224,0,252,255,255,255,63,255,1,0,0,0,0,0,0,0,0,0,0,0,222,111,0,0,0,0,0,128,255,31,0,255,255,63,63,255,255,255,255,63,63,255,170,255,255,255,63,255,255,255,255,255,255,223,95,220,31,207,15,255,31,220,31,0,0,0,0,0,0,2,128,0,0,255,31,0,0,0,0,132,252,47,62,80,189,255,243,224,67,0,0,255,255,255,255,0,0,0,0,0,0,192,255,255,255,255,255,255,3,0,0,255,255,255,255,255,127,255,255,255,255,255,127,255,255,255,255,255,255,255,255,31,120,12,0,255,255,255,255,191,32,255,255,255,255,255,255,255,128,0,0,255,255,127,0,127,127,127,127,127,127,127,127,255,255,255,255,0,0,0,0,0,128,0,0,224,0,0,0,254,3,62,31,255,255,127,224,254,255,255,255,255,255,255,255,255,255,255,247,224,255,255,255,255,63,254,255,255,127,0,0,255,255,255,7,0,0,0,0,0,0,255,255,255,255,63,0,0,0,0,0,255,31,0,0,0,0,0,0,0,0,255,255,255,255,255,63,255,31,255,255,0,12,0,0,255,255,255,255,255,127,240,143,255,255,255,255,255,255,0,0,0,0,128,255,252,255,255,255,255,249,255,255,255,127,255,0,0,0,0,0,0,0,128,255,187,247,255,255,255,0,0,0,255,255,255,255,255,255,15,0,47,0,0,0,0,0,252,40,0,252,255,255,255,7,255,255,255,255,7,0,255,255,255,31,255,255,255,255,255,255,247,255,0,128,0,0,223,255,0,124,255,255,255,255,255,255,127,0,255,63,0,0,255,255,127,196,255,255,255,255,255,255,255,127,5,0,0,56,255,255,60,0,126,126,126,0,127,127,255,255,255,255,255,247,63,0,255,255,255,255,255,255,255,7,0,0,255,255,255,255,15,0,255,255,127,248,255,255,255,255,255,15,255,255,255,255,255,63,255,255,255,255,255,3,0,0,0,0,127,0,248,224,255,253,127,95,219,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,0,0,248,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,255,255,255,255,255,255,255,255,252,255,255,255,255,255,255,0,0,0,0,0,255,15,0,0,0,0,0,0,223,255,255,255,255,255,255,255,255,31,0,0,0,0,254,255,255,7,254,255,255,7,192,255,255,255,252,252,252,28,0,0,0,0,255,239,255,255,127,255,255,183,255,63,255,63,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,7,0,0,0,0,0,0,0,0,255,255,255,255,255,255,31,0,255,255,255,31,255,255,255,255,255,255,1,0,0,0,0,0,255,255,255,255,0,0,255,255,255,7,255,255,255,255,255,7,255,255,255,63,255,255,255,255,15,255,62,0,0,0,0,0,255,255,255,63,0,0,255,255,255,255,15,255,255,255,255,15,255,255,255,255,255,0,255,255,255,255,255,255,15,0,0,0,255,255,255,255,255,255,127,0,255,255,63,0,255,0,0,0,63,253,255,255,255,255,191,145,255,255,63,0,255,255,127,0,255,255,255,127,0,0,0,0,0,0,0,0,255,255,55,0,255,255,63,0,255,255,255,3,255,255,255,255,255,255,255,192,111,240,239,254,255,255,15,0,0,0,0,0,255,255,255,31,255,255,255,31,0,0,0,0,255,254,255,255,31,0,0,0,255,255,255,255,255,255,63,0,255,255,63,0,255,255,7,0,255,255,3,0,0,0,0,0,255,1,0,0,0,0,0,0,255,255,255,255,255,255,7,0,63,0,0,0,0,0,0,0,252,255,255,255,255,255,255,1,0,0,255,255,255,1,0,0,0,0,255,255,255,255,71,0,30,0,0,20,0,0,0,0,255,255,251,255,255,255,159,64,127,189,255,191,255,1,255,255,255,255,255,255,255,1,0,0,239,159,249,255,255,253,237,227,159,25,129,224,15,0,0,0,187,7,0,0,0,0,0,0,179,0,0,0,0,0,0,0,255,255,255,255,255,255,63,127,0,0,0,63,0,0,0,0,255,255,255,255,255,255,255,127,17,0,0,0,0,0,0,0,255,255,255,227,255,7,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,0,128,255,255,255,255,255,255,255,1,255,253,255,255,255,255,127,127,1,0,0,0,0,0,252,255,255,255,252,255,255,254,127,0,255,255,255,3,0,0,0,0,255,255,255,255,255,127,0,0,15,0,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,0,255,255,255,63,0,0,15,0,0,0,248,255,255,224,255,255,0,0,0,0,0,0,31,0,255,255,255,255,255,127,0,0,248,255,0,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,31,0,0,3,0,0,0,0,0,0,0,255,255,255,255,255,7,255,31,255,1,255,67,0,0,0,0,255,255,223,255,255,255,255,255,255,255,255,223,100,222,255,235,239,255,255,255,255,255,255,255,191,231,223,223,255,255,255,123,95,252,253,255,255,255,255,255,255,255,255,255,63,255,255,255,253,255,255,247,255,255,255,247,255,255,223,255,255,255,223,255,255,127,255,255,255,127,255,255,255,253,255,255,255,253,255,255,247,15,0,0,0,0,0,0,127,255,255,249,219,7,0,0,31,0,0,0,0,0,0,0,143,0,0,0,0,0,0,0,239,255,255,255,150,254,247,10,132,234,150,170,150,247,247,94,255,251,255,15,238,251,255,15,0,0,0,0,0,0,255,255,255,3,255,255,255,3,255,255,255,3,0,0,0,0,0,0,255,255,127,0,0,0,0,0,255,255,255,255,3,0,0,0,255,255,255,63,0,0,0,0,0,62,0,0,1,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,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,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,40,0,0,4], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE);
/* memory initializer */ allocate([152,123,3,0,64,0,0,0,80,121,3,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,7,0,0,0,131,0,0,0,0,0,128,0,0,0,0,69,1,0,0,8,0,0,0,4,0,0,0,70,1,0,0,71,1,0,0,72,1,0,0,69,1,0,0,4,0,0,0,4,0,0,0,73,1,0,0,74,1,0,0,75,1,0,0,69,1,0,0,4,0,0,0,4,0,0,0,76,1,0,0,69,1,0,0,4,0,0,0,4,0,0,0,77,1,0,0,152,123,3,0,0,0,0,0,231,1,3,0,2,0,0,0,233,1,3,0,1,0,0,0,152,123,3,0,0,0,0,0,223,254,2,0,1,0,0,0,3,15,0,0,0,0,0,0,0,0,0,0,31,255,2,0,26,0,0,0,57,255,2,0,16,0,0,0,17,255,2,0,14,0,0,0,18,1,0,0,52,0,3,0,12,0,0,0,64,0,3,0,19,0,0,0,117,0,3,0,7,0,0,0,223,254,2,0,1,0,0,0,116,0,3,0,1,0,0,0,223,254,2,0,1,0,0,0,152,123,3,0,0,0,0,0,80,1,3,0,22,0,0,0,102,1,3,0,20,0,0,0,122,1,3,0,10,0,0,0,223,254,2,0,1,0,0,0,166,3,3,0,81,0,0,0,28,1,0,0,166,3,3,0,81,0,0,0,201,2,0,0,152,123,3,0,0,0,0,0,173,6,3,0,14,0,0,0,158,6,3,0,15,0,0,0,137,6,3,0,21,0,0,0,120,6,3,0,17,0,0,0,73,255,2,0,1,0,0,0,105,6,3,0,15,0,0,0,73,255,2,0,1,0,0,0,90,6,3,0,15,0,0,0,73,255,2,0,1,0,0,0,152,123,3,0,0,0,0,0,199,6,3,0,9,0,0,0,208,6,3,0,8,0,0,0,152,123,3,0,0,0,0,0,234,6,3,0,1,0,0,0,219,254,2,0,2,0,0,0,12,7,3,0,31,0,0,0,74,7,3,0,15,0,0,0,12,7,3,0,31,0,0,0,43,7,3,0,31,0,0,0,235,6,3,0,32,0,0,0,11,7,3,0,1,0,0,0,152,123,3,0,0,0,0,0,11,7,3,0,1,0,0,0,119,8,3,0,12,0,0,0,131,8,3,0,1,0,0,0,131,7,3,0,18,0,0,0,82,8,3,0,26,0,0,0,56,0,0,0,108,8,3,0,11,0,0,0,131,7,3,0,18,0,0,0,82,8,3,0,26,0,0,0,57,0,0,0,152,123,3,0,0,0,0,0,233,7,3,0,1,0,0,0,152,123,3,0,0,0,0,0,66,9,3,0,1,0,0,0,66,9,3,0,1,0,0,0,215,8,3,0,1,0,0,0,152,123,3,0,0,0,0,0,62,9,3,0,4,0,0,0,233,7,3,0,1,0,0,0,215,8,3,0,1,0,0,0,152,123,3,0,0,0,0,0,44,9,3,0,5,0,0,0,255,8,3,0,2,0,0,0,49,9,3,0,13,0,0,0,215,8,3,0,1,0,0,0,152,123,3,0,0,0,0,0,23,9,3,0,4,0,0,0,27,9,3,0,17,0,0,0,215,8,3,0,1,0,0,0,152,123,3,0,0,0,0,0,250,8,3,0,5,0,0,0,255,8,3,0,2,0,0,0,12,9,3,0,11,0,0,0,255,8,3,0,2,0,0,0,11,9,3,0,1,0,0,0,215,8,3,0,1,0,0,0,152,123,3,0,0,0,0,0,250,8,3,0,5,0,0,0,255,8,3,0,2,0,0,0,1,9,3,0,10,0,0,0,152,123,3,0,0,0,0,0,216,8,3,0,34,0,0,0,152,123,3,0,0,0,0,0,201,8,3,0,11,0,0,0,212,8,3,0,3,0,0,0,215,8,3,0,1,0,0,0,152,123,3,0,0,0,0,0,112,11,3,0,14,0,0,0,126,11,3,0,14,0,0,0,24,0,0,0,112,11,3,0,14,0,0,0,126,11,3,0,14,0,0,0,25,0,0,0,191,11,3,0,17,0,0,0,36,0,0,0,22,13,3,0,110,0,0,0,192,12,3,0,86,0,0,0,158,2,0,0,185,14,3,0,105,0,0,0,192,12,3,0,86,0,0,0,131,2,0,0,192,12,3,0,86,0,0,0,140,2,0,0,192,12,3,0,86,0,0,0,149,2,0,0,139,14,3,0,46,0,0,0,97,14,3,0,42,0,0,0,192,12,3,0,86,0,0,0,47,2,0,0,138,15,3,0,108,0,0,0,192,12,3,0,86,0,0,0,120,2,0,0,0,0,0,0,255,255,16,0,0,0,0,0,9,0,0,0,11,0,0,0,255,255,16,0,192,12,3,0,86,0,0,0,36,1,0,0,192,12,3,0,86,0,0,0,105,1,0,0,243,17,3,0,57,0,0,0,192,12,3,0,86,0,0,0,117,3,0,0,192,12,3,0,86,0,0,0,129,3,0,0,192,12,3,0,86,0,0,0,34,3,0,0,192,12,3,0,86,0,0,0,36,3,0,0,76,18,3,0,87,0,0,0,67,2,0,0,78,19,3,0,83,0,0,0,104,1,0,0,78,19,3,0,83,0,0,0,108,1,0,0,143,20,3,0,82,0,0,0,65,2,0,0,143,20,3,0,82,0,0,0,23,3,0,0,143,20,3,0,82,0,0,0,45,3,0,0,143,20,3,0,82,0,0,0,157,2,0,0,143,20,3,0,82,0,0,0,177,2,0,0,40,21,3,0,81,0,0,0,79,0,0,0,165,21,3,0,48,0,0,0,40,21,3,0,81,0,0,0,102,0,0,0,121,21,3,0,37,0,0,0,158,21,3,0,7,0,0,0,254,22,3,0,32,0,0,0,212,22,3,0,42,0,0,0,2,22,3,0,87,0,0,0,181,1,0,0,155,22,3,0,44,0,0,0,199,22,3,0,11,0,0,0,210,22,3,0,2,0,0,0,2,22,3,0,87,0,0,0,170,1,0,0,89,22,3,0,66,0,0,0,2,22,3,0,87,0,0,0,146,0,0,0,176,23,3,0,91,0,0,0,157,3,0,0,176,23,3,0,91,0,0,0,13,2,0,0,176,23,3,0,91,0,0,0,63,2,0,0,65,0,0,0,97,0,0,0,66,0,0,0,98,0,0,0,67,0,0,0,99,0,0,0,68,0,0,0,100,0,0,0,69,0,0,0,101,0,0,0,70,0,0,0,102,0,0,0,71,0,0,0,103,0,0,0,72,0,0,0,104,0,0,0,73,0,0,0,105,0,0,0,74,0,0,0,106,0,0,0,75,0,0,0,107,0,0,0,75,0,0,0,42,33,0,0,76,0,0,0,108,0,0,0,77,0,0,0,109,0,0,0,78,0,0,0,110,0,0,0,79,0,0,0,111,0,0,0,80,0,0,0,112,0,0,0,81,0,0,0,113,0,0,0,82,0,0,0,114,0,0,0,83,0,0,0,115,0,0,0,83,0,0,0,127,1,0,0,84,0,0,0,116,0,0,0,85,0,0,0,117,0,0,0,86,0,0,0,118,0,0,0,87,0,0,0,119,0,0,0,88,0,0,0,120,0,0,0,89,0,0,0,121,0,0,0,90,0,0,0,122,0,0,0,97,0,0,0,65,0,0,0,98,0,0,0,66,0,0,0,99,0,0,0,67,0,0,0,100,0,0,0,68,0,0,0,101,0,0,0,69,0,0,0,102,0,0,0,70,0,0,0,103,0,0,0,71,0,0,0,104,0,0,0,72,0,0,0,105,0,0,0,73,0,0,0,106,0,0,0,74,0,0,0,107,0,0,0,75,0,0,0,107,0,0,0,42,33,0,0,108,0,0,0,76,0,0,0,109,0,0,0,77,0,0,0,110,0,0,0,78,0,0,0,111,0,0,0,79,0,0,0,112,0,0,0,80,0,0,0,113,0,0,0,81,0,0,0,114,0,0,0,82,0,0,0,115,0,0,0,83,0,0,0,115,0,0,0,127,1,0,0,116,0,0,0,84,0,0,0,117,0,0,0,85,0,0,0,118,0,0,0,86,0,0,0,119,0,0,0,87,0,0,0,120,0,0,0,88,0,0,0,121,0,0,0,89,0,0,0,122,0,0,0,90,0,0,0,181,0,0,0,156,3,0,0,181,0,0,0,188,3,0,0,192,0,0,0,224,0,0,0,193,0,0,0,225,0,0,0,194,0,0,0,226,0,0,0,195,0,0,0,227,0,0,0,196,0,0,0,228,0,0,0,197,0,0,0,229,0,0,0,197,0,0,0,43,33,0,0,198,0,0,0,230,0,0,0,199,0,0,0,231,0,0,0,200,0,0,0,232,0,0,0,201,0,0,0,233,0,0,0,202,0,0,0,234,0,0,0,203,0,0,0,235,0,0,0,204,0,0,0,236,0,0,0,205,0,0,0,237,0,0,0,206,0,0,0,238,0,0,0,207,0,0,0,239,0,0,0,208,0,0,0,240,0,0,0,209,0,0,0,241,0,0,0,210,0,0,0,242,0,0,0,211,0,0,0,243,0,0,0,212,0,0,0,244,0,0,0,213,0,0,0,245,0,0,0,214,0,0,0,246,0,0,0,216,0,0,0,248,0,0,0,217,0,0,0,249,0,0,0,218,0,0,0,250,0,0,0,219,0,0,0,251,0,0,0,220,0,0,0,252,0,0,0,221,0,0,0,253,0,0,0,222,0,0,0,254,0,0,0,223,0,0,0,158,30,0,0,224,0,0,0,192,0,0,0,225,0,0,0,193,0,0,0,226,0,0,0,194,0,0,0,227,0,0,0,195,0,0,0,228,0,0,0,196,0,0,0,229,0,0,0,197,0,0,0,229,0,0,0,43,33,0,0,230,0,0,0,198,0,0,0,231,0,0,0,199,0,0,0,232,0,0,0,200,0,0,0,233,0,0,0,201,0,0,0,234,0,0,0,202,0,0,0,235,0,0,0,203,0,0,0,236,0,0,0,204,0,0,0,237,0,0,0,205,0,0,0,238,0,0,0,206,0,0,0,239,0,0,0,207,0,0,0,240,0,0,0,208,0,0,0,241,0,0,0,209,0,0,0,242,0,0,0,210,0,0,0,243,0,0,0,211,0,0,0,244,0,0,0,212,0,0,0,245,0,0,0,213,0,0,0,246,0,0,0,214,0,0,0,248,0,0,0,216,0,0,0,249,0,0,0,217,0,0,0,250,0,0,0,218,0,0,0,251,0,0,0,219,0,0,0,252,0,0,0,220,0,0,0,253,0,0,0,221,0,0,0,254,0,0,0,222,0,0,0,255,0,0,0,120,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,2,1,0,0,3,1,0,0,3,1,0,0,2,1,0,0,4,1,0,0,5,1,0,0,5,1,0,0,4,1,0,0,6,1,0,0,7,1,0,0,7,1,0,0,6,1,0,0,8,1,0,0,9,1,0,0,9,1,0,0,8,1,0,0,10,1,0,0,11,1,0,0,11,1,0,0,10,1,0,0,12,1,0,0,13,1,0,0,13,1,0,0,12,1,0,0,14,1,0,0,15,1,0,0,15,1,0,0,14,1,0,0,16,1,0,0,17,1,0,0,17,1,0,0,16,1,0,0,18,1,0,0,19,1,0,0,19,1,0,0,18,1,0,0,20,1,0,0,21,1,0,0,21,1,0,0,20,1,0,0,22,1,0,0,23,1,0,0,23,1,0,0,22,1,0,0,24,1,0,0,25,1,0,0,25,1,0,0,24,1,0,0,26,1,0,0,27,1,0,0,27,1,0,0,26,1,0,0,28,1,0,0,29,1,0,0,29,1,0,0,28,1,0,0,30,1,0,0,31,1,0,0,31,1,0,0,30,1,0,0,32,1,0,0,33,1,0,0,33,1,0,0,32,1,0,0,34,1,0,0,35,1,0,0,35,1,0,0,34,1,0,0,36,1,0,0,37,1,0,0,37,1,0,0,36,1,0,0,38,1,0,0,39,1,0,0,39,1,0,0,38,1,0,0,40,1,0,0,41,1,0,0,41,1,0,0,40,1,0,0,42,1,0,0,43,1,0,0,43,1,0,0,42,1,0,0,44,1,0,0,45,1,0,0,45,1,0,0,44,1,0,0,46,1,0,0,47,1,0,0,47,1,0,0,46,1,0,0,50,1,0,0,51,1,0,0,51,1,0,0,50,1,0,0,52,1,0,0,53,1,0,0,53,1,0,0,52,1,0,0,54,1,0,0,55,1,0,0,55,1,0,0,54,1,0,0,57,1,0,0,58,1,0,0,58,1,0,0,57,1,0,0,59,1,0,0,60,1,0,0,60,1,0,0,59,1,0,0,61,1,0,0,62,1,0,0,62,1,0,0,61,1,0,0,63,1,0,0,64,1,0,0,64,1,0,0,63,1,0,0,65,1,0,0,66,1,0,0,66,1,0,0,65,1,0,0,67,1,0,0,68,1,0,0,68,1,0,0,67,1,0,0,69,1,0,0,70,1,0,0,70,1,0,0,69,1,0,0,71,1,0,0,72,1,0,0,72,1,0,0,71,1,0,0,74,1,0,0,75,1,0,0,75,1,0,0,74,1,0,0,76,1,0,0,77,1,0,0,77,1,0,0,76,1,0,0,78,1,0,0,79,1,0,0,79,1,0,0,78,1,0,0,80,1,0,0,81,1,0,0,81,1,0,0,80,1,0,0,82,1,0,0,83,1,0,0,83,1,0,0,82,1,0,0,84,1,0,0,85,1,0,0,85,1,0,0,84,1,0,0,86,1,0,0,87,1,0,0,87,1,0,0,86,1,0,0,88,1,0,0,89,1,0,0,89,1,0,0,88,1,0,0,90,1,0,0,91,1,0,0,91,1,0,0,90,1,0,0,92,1,0,0,93,1,0,0,93,1,0,0,92,1,0,0,94,1,0,0,95,1,0,0,95,1,0,0,94,1,0,0,96,1,0,0,97,1,0,0,97,1,0,0,96,1,0,0,98,1,0,0,99,1,0,0,99,1,0,0,98,1,0,0,100,1,0,0,101,1,0,0,101,1,0,0,100,1,0,0,102,1,0,0,103,1,0,0,103,1,0,0,102,1,0,0,104,1,0,0,105,1,0,0,105,1,0,0,104,1,0,0,106,1,0,0,107,1,0,0,107,1,0,0,106,1,0,0,108,1,0,0,109,1,0,0,109,1,0,0,108,1,0,0,110,1,0,0,111,1,0,0,111,1,0,0,110,1,0,0,112,1,0,0,113,1,0,0,113,1,0,0,112,1,0,0,114,1,0,0,115,1,0,0,115,1,0,0,114,1,0,0,116,1,0,0,117,1,0,0,117,1,0,0,116,1,0,0,118,1,0,0,119,1,0,0,119,1,0,0,118,1,0,0,120,1,0,0,255,0,0,0,121,1,0,0,122,1,0,0,122,1,0,0,121,1,0,0,123,1,0,0,124,1,0,0,124,1,0,0,123,1,0,0,125,1,0,0,126,1,0,0,126,1,0,0,125,1,0,0,127,1,0,0,83,0,0,0,127,1,0,0,115,0,0,0,128,1,0,0,67,2,0,0,129,1,0,0,83,2,0,0,130,1,0,0,131,1,0,0,131,1,0,0,130,1,0,0,132,1,0,0,133,1,0,0,133,1,0,0,132,1,0,0,134,1,0,0,84,2,0,0,135,1,0,0,136,1,0,0,136,1,0,0,135,1,0,0,137,1,0,0,86,2,0,0,138,1,0,0,87,2,0,0,139,1,0,0,140,1,0,0,140,1,0,0,139,1,0,0,142,1,0,0,221,1,0,0,143,1,0,0,89,2,0,0,144,1,0,0,91,2,0,0,145,1,0,0,146,1,0,0,146,1,0,0,145,1,0,0,147,1,0,0,96,2,0,0,148,1,0,0,99,2,0,0,149,1,0,0,246,1,0,0,150,1,0,0,105,2,0,0,151,1,0,0,104,2,0,0,152,1,0,0,153,1,0,0,153,1,0,0,152,1,0,0,154,1,0,0,61,2,0,0,156,1,0,0,111,2,0,0,157,1,0,0,114,2,0,0,158,1,0,0,32,2,0,0,159,1,0,0,117,2,0,0,160,1,0,0,161,1,0,0,161,1,0,0,160,1,0,0,162,1,0,0,163,1,0,0,163,1,0,0,162,1,0,0,164,1,0,0,165,1,0,0,165,1,0,0,164,1,0,0,166,1,0,0,128,2,0,0,167,1,0,0,168,1,0,0,168,1,0,0,167,1,0,0,169,1,0,0,131,2,0,0,172,1,0,0,173,1,0,0,173,1,0,0,172,1,0,0,174,1,0,0,136,2,0,0,175,1,0,0,176,1,0,0,176,1,0,0,175,1,0,0,177,1,0,0,138,2,0,0,178,1,0,0,139,2,0,0,179,1,0,0,180,1,0,0,180,1,0,0,179,1,0,0,181,1,0,0,182,1,0,0,182,1,0,0,181,1,0,0,183,1,0,0,146,2,0,0,184,1,0,0,185,1,0,0,185,1,0,0,184,1,0,0,188,1,0,0,189,1,0,0,189,1,0,0,188,1,0,0,191,1,0,0,247,1,0,0,196,1,0,0,197,1,0,0,196,1,0,0,198,1,0,0,197,1,0,0,196,1,0,0,197,1,0,0,198,1,0,0,198,1,0,0,196,1,0,0,198,1,0,0,197,1,0,0,199,1,0,0,200,1,0,0,199,1,0,0,201,1,0,0,200,1,0,0,199,1,0,0,200,1,0,0,201,1,0,0,201,1,0,0,199,1,0,0,201,1,0,0,200,1,0,0,202,1,0,0,203,1,0,0,202,1,0,0,204,1,0,0,203,1,0,0,202,1,0,0,203,1,0,0,204,1,0,0,204,1,0,0,202,1,0,0,204,1,0,0,203,1,0,0,205,1,0,0,206,1,0,0,206,1,0,0,205,1,0,0,207,1,0,0,208,1,0,0,208,1,0,0,207,1,0,0,209,1,0,0,210,1,0,0,210,1,0,0,209,1,0,0,211,1,0,0,212,1,0,0,212,1,0,0,211,1,0,0,213,1,0,0,214,1,0,0,214,1,0,0,213,1,0,0,215,1,0,0,216,1,0,0,216,1,0,0,215,1,0,0,217,1,0,0,218,1,0,0,218,1,0,0,217,1,0,0,219,1,0,0,220,1,0,0,220,1,0,0,219,1,0,0,221,1,0,0,142,1,0,0,222,1,0,0,223,1,0,0,223,1,0,0,222,1,0,0,224,1,0,0,225,1,0,0,225,1,0,0,224,1,0,0,226,1,0,0,227,1,0,0,227,1,0,0,226,1,0,0,228,1,0,0,229,1,0,0,229,1,0,0,228,1,0,0,230,1,0,0,231,1,0,0,231,1,0,0,230,1,0,0,232,1,0,0,233,1,0,0,233,1,0,0,232,1,0,0,234,1,0,0,235,1,0,0,235,1,0,0,234,1,0,0,236,1,0,0,237,1,0,0,237,1,0,0,236,1,0,0,238,1,0,0,239,1,0,0,239,1,0,0,238,1,0,0,241,1,0,0,242,1,0,0,241,1,0,0,243,1,0,0,242,1,0,0,241,1,0,0,242,1,0,0,243,1,0,0,243,1,0,0,241,1,0,0,243,1,0,0,242,1,0,0,244,1,0,0,245,1,0,0,245,1,0,0,244,1,0,0,246,1,0,0,149,1,0,0,247,1,0,0,191,1,0,0,248,1,0,0,249,1,0,0,249,1,0,0,248,1,0,0,250,1,0,0,251,1,0,0,251,1,0,0,250,1,0,0,252,1,0,0,253,1,0,0,253,1,0,0,252,1,0,0,254,1,0,0,255,1,0,0,255,1,0,0,254,1,0,0,0,2,0,0,1,2,0,0,1,2,0,0,0,2,0,0,2,2,0,0,3,2,0,0,3,2,0,0,2,2,0,0,4,2,0,0,5,2,0,0,5,2,0,0,4,2,0,0,6,2,0,0,7,2,0,0,7,2,0,0,6,2,0,0,8,2,0,0,9,2,0,0,9,2,0,0,8,2,0,0,10,2,0,0,11,2,0,0,11,2,0,0,10,2,0,0,12,2,0,0,13,2,0,0,13,2,0,0,12,2,0,0,14,2,0,0,15,2,0,0,15,2,0,0,14,2,0,0,16,2,0,0,17,2,0,0,17,2,0,0,16,2,0,0,18,2,0,0,19,2,0,0,19,2,0,0,18,2,0,0,20,2,0,0,21,2,0,0,21,2,0,0,20,2,0,0,22,2,0,0,23,2,0,0,23,2,0,0,22,2,0,0,24,2,0,0,25,2,0,0,25,2,0,0,24,2,0,0,26,2,0,0,27,2,0,0,27,2,0,0,26,2,0,0,28,2,0,0,29,2,0,0,29,2,0,0,28,2,0,0,30,2,0,0,31,2,0,0,31,2,0,0,30,2,0,0,32,2,0,0,158,1,0,0,34,2,0,0,35,2,0,0,35,2,0,0,34,2,0,0,36,2,0,0,37,2,0,0,37,2,0,0,36,2,0,0,38,2,0,0,39,2,0,0,39,2,0,0,38,2,0,0,40,2,0,0,41,2,0,0,41,2,0,0,40,2,0,0,42,2,0,0,43,2,0,0,43,2,0,0,42,2,0,0,44,2,0,0,45,2,0,0,45,2,0,0,44,2,0,0,46,2,0,0,47,2,0,0,47,2,0,0,46,2,0,0,48,2,0,0,49,2,0,0,49,2,0,0,48,2,0,0,50,2,0,0,51,2,0,0,51,2,0,0,50,2,0,0,58,2,0,0,101,44,0,0,59,2,0,0,60,2,0,0,60,2,0,0,59,2,0,0,61,2,0,0,154,1,0,0,62,2,0,0,102,44,0,0,63,2,0,0,126,44,0,0,64,2,0,0,127,44,0,0,65,2,0,0,66,2,0,0,66,2,0,0,65,2,0,0,67,2,0,0,128,1,0,0,68,2,0,0,137,2,0,0,69,2,0,0,140,2,0,0,70,2,0,0,71,2,0,0,71,2,0,0,70,2,0,0,72,2,0,0,73,2,0,0,73,2,0,0,72,2,0,0,74,2,0,0,75,2,0,0,75,2,0,0,74,2,0,0,76,2,0,0,77,2,0,0,77,2,0,0,76,2,0,0,78,2,0,0,79,2,0,0,79,2,0,0,78,2,0,0,80,2,0,0,111,44,0,0,81,2,0,0,109,44,0,0,82,2,0,0,112,44,0,0,83,2,0,0,129,1,0,0,84,2,0,0,134,1,0,0,86,2,0,0,137,1,0,0,87,2,0,0,138,1,0,0,89,2,0,0,143,1,0,0,91,2,0,0,144,1,0,0,92,2,0,0,171,167,0,0,96,2,0,0,147,1,0,0,97,2,0,0,172,167,0,0,99,2,0,0,148,1,0,0,101,2,0,0,141,167,0,0,102,2,0,0,170,167,0,0,104,2,0,0,151,1,0,0,105,2,0,0,150,1,0,0,107,2,0,0,98,44,0,0,108,2,0,0,173,167,0,0,111,2,0,0,156,1,0,0,113,2,0,0,110,44,0,0,114,2,0,0,157,1,0,0,117,2,0,0,159,1,0,0,125,2,0,0,100,44,0,0,128,2,0,0,166,1,0,0,131,2,0,0,169,1,0,0,135,2,0,0,177,167,0,0,136,2,0,0,174,1,0,0,137,2,0,0,68,2,0,0,138,2,0,0,177,1,0,0,139,2,0,0,178,1,0,0,140,2,0,0,69,2,0,0,146,2,0,0,183,1,0,0,157,2,0,0,178,167,0,0,158,2,0,0,176,167,0,0,69,3,0,0,153,3,0,0,69,3,0,0,185,3,0,0,69,3,0,0,190,31,0,0,112,3,0,0,113,3,0,0,113,3,0,0,112,3,0,0,114,3,0,0,115,3,0,0,115,3,0,0,114,3,0,0,118,3,0,0,119,3,0,0,119,3,0,0,118,3,0,0,123,3,0,0,253,3,0,0,124,3,0,0,254,3,0,0,125,3,0,0,255,3,0,0,127,3,0,0,243,3,0,0,134,3,0,0,172,3,0,0,136,3,0,0,173,3,0,0,137,3,0,0,174,3,0,0,138,3,0,0,175,3,0,0,140,3,0,0,204,3,0,0,142,3,0,0,205,3,0,0,143,3,0,0,206,3,0,0,145,3,0,0,177,3,0,0,146,3,0,0,178,3,0,0,146,3,0,0,208,3,0,0,147,3,0,0,179,3,0,0,148,3,0,0,180,3,0,0,149,3,0,0,181,3,0,0,149,3,0,0,245,3,0,0,150,3,0,0,182,3,0,0,151,3,0,0,183,3,0,0,152,3,0,0,184,3,0,0,152,3,0,0,209,3,0,0,152,3,0,0,244,3,0,0,153,3,0,0,69,3,0,0,153,3,0,0,185,3,0,0,153,3,0,0,190,31,0,0,154,3,0,0,186,3,0,0,154,3,0,0,240,3,0,0,155,3,0,0,187,3,0,0,156,3,0,0,181,0,0,0,156,3,0,0,188,3,0,0,157,3,0,0,189,3,0,0,158,3,0,0,190,3,0,0,159,3,0,0,191,3,0,0,160,3,0,0,192,3,0,0,160,3,0,0,214,3,0,0,161,3,0,0,193,3,0,0,161,3,0,0,241,3,0,0,163,3,0,0,194,3,0,0,163,3,0,0,195,3,0,0,164,3,0,0,196,3,0,0,165,3,0,0,197,3,0,0,166,3,0,0,198,3,0,0,166,3,0,0,213,3,0,0,167,3,0,0,199,3,0,0,168,3,0,0,200,3,0,0,169,3,0,0,201,3,0,0,169,3,0,0,38,33,0,0,170,3,0,0,202,3,0,0,171,3,0,0,203,3,0,0,172,3,0,0,134,3,0,0,173,3,0,0,136,3,0,0,174,3,0,0,137,3,0,0,175,3,0,0,138,3,0,0,177,3,0,0,145,3,0,0,178,3,0,0,146,3,0,0,178,3,0,0,208,3,0,0,179,3,0,0,147,3,0,0,180,3,0,0,148,3,0,0,181,3,0,0,149,3,0,0,181,3,0,0,245,3,0,0,182,3,0,0,150,3,0,0,183,3,0,0,151,3,0,0,184,3,0,0,152,3,0,0,184,3,0,0,209,3,0,0,184,3,0,0,244,3,0,0,185,3,0,0,69,3,0,0,185,3,0,0,153,3,0,0,185,3,0,0,190,31,0,0,186,3,0,0,154,3,0,0,186,3,0,0,240,3,0,0,187,3,0,0,155,3,0,0,188,3,0,0,181,0,0,0,188,3,0,0,156,3,0,0,189,3,0,0,157,3,0,0,190,3,0,0,158,3,0,0,191,3,0,0,159,3,0,0,192,3,0,0,160,3,0,0,192,3,0,0,214,3,0,0,193,3,0,0,161,3,0,0,193,3,0,0,241,3,0,0,194,3,0,0,163,3,0,0,194,3,0,0,195,3,0,0,195,3,0,0,163,3,0,0,195,3,0,0,194,3,0,0,196,3,0,0,164,3,0,0,197,3,0,0,165,3,0,0,198,3,0,0,166,3,0,0,198,3,0,0,213,3,0,0,199,3,0,0,167,3,0,0,200,3,0,0,168,3,0,0,201,3,0,0,169,3,0,0,201,3,0,0,38,33,0,0,202,3,0,0,170,3,0,0,203,3,0,0,171,3,0,0,204,3,0,0,140,3,0,0,205,3,0,0,142,3,0,0,206,3,0,0,143,3,0,0,207,3,0,0,215,3,0,0,208,3,0,0,146,3,0,0,208,3,0,0,178,3,0,0,209,3,0,0,152,3,0,0,209,3,0,0,184,3,0,0,209,3,0,0,244,3,0,0,213,3,0,0,166,3,0,0,213,3,0,0,198,3,0,0,214,3,0,0,160,3,0,0,214,3,0,0,192,3,0,0,215,3,0,0,207,3,0,0,216,3,0,0,217,3,0,0,217,3,0,0,216,3,0,0,218,3,0,0,219,3,0,0,219,3,0,0,218,3,0,0,220,3,0,0,221,3,0,0,221,3,0,0,220,3,0,0,222,3,0,0,223,3,0,0,223,3,0,0,222,3,0,0,224,3,0,0,225,3,0,0,225,3,0,0,224,3,0,0,226,3,0,0,227,3,0,0,227,3,0,0,226,3,0,0,228,3,0,0,229,3,0,0,229,3,0,0,228,3,0,0,230,3,0,0,231,3,0,0,231,3,0,0,230,3,0,0,232,3,0,0,233,3,0,0,233,3,0,0,232,3,0,0,234,3,0,0,235,3,0,0,235,3,0,0,234,3,0,0,236,3,0,0,237,3,0,0,237,3,0,0,236,3,0,0,238,3,0,0,239,3,0,0,239,3,0,0,238,3,0,0,240,3,0,0,154,3,0,0,240,3,0,0,186,3,0,0,241,3,0,0,161,3,0,0,241,3,0,0,193,3,0,0,242,3,0,0,249,3,0,0,243,3,0,0,127,3,0,0,244,3,0,0,152,3,0,0,244,3,0,0,184,3,0,0,244,3,0,0,209,3,0,0,245,3,0,0,149,3,0,0,245,3,0,0,181,3,0,0,247,3,0,0,248,3,0,0,248,3,0,0,247,3,0,0,249,3,0,0,242,3,0,0,250,3,0,0,251,3,0,0,251,3,0,0,250,3,0,0,253,3,0,0,123,3,0,0,254,3,0,0,124,3,0,0,255,3,0,0,125,3,0,0,0,4,0,0,80,4,0,0,1,4,0,0,81,4,0,0,2,4,0,0,82,4,0,0,3,4,0,0,83,4,0,0,4,4,0,0,84,4,0,0,5,4,0,0,85,4,0,0,6,4,0,0,86,4,0,0,7,4,0,0,87,4,0,0,8,4,0,0,88,4,0,0,9,4,0,0,89,4,0,0,10,4,0,0,90,4,0,0,11,4,0,0,91,4,0,0,12,4,0,0,92,4,0,0,13,4,0,0,93,4,0,0,14,4,0,0,94,4,0,0,15,4,0,0,95,4,0,0,16,4,0,0,48,4,0,0,17,4,0,0,49,4,0,0,18,4,0,0,50,4,0,0,19,4,0,0,51,4,0,0,20,4,0,0,52,4,0,0,21,4,0,0,53,4,0,0,22,4,0,0,54,4,0,0,23,4,0,0,55,4,0,0,24,4,0,0,56,4,0,0,25,4,0,0,57,4,0,0,26,4,0,0,58,4,0,0,27,4,0,0,59,4,0,0,28,4,0,0,60,4,0,0,29,4,0,0,61,4,0,0,30,4,0,0,62,4,0,0,31,4,0,0,63,4,0,0,32,4,0,0,64,4,0,0,33,4,0,0,65,4,0,0,34,4,0,0,66,4,0,0,35,4,0,0,67,4,0,0,36,4,0,0,68,4,0,0,37,4,0,0,69,4,0,0,38,4,0,0,70,4,0,0,39,4,0,0,71,4,0,0,40,4,0,0,72,4,0,0,41,4,0,0,73,4,0,0,42,4,0,0,74,4,0,0,43,4,0,0,75,4,0,0,44,4,0,0,76,4,0,0,45,4,0,0,77,4,0,0,46,4,0,0,78,4,0,0,47,4,0,0,79,4,0,0,48,4,0,0,16,4,0,0,49,4,0,0,17,4,0,0,50,4,0,0,18,4,0,0,51,4,0,0,19,4,0,0,52,4,0,0,20,4,0,0,53,4,0,0,21,4,0,0,54,4,0,0,22,4,0,0,55,4,0,0,23,4,0,0,56,4,0,0,24,4,0,0,57,4,0,0,25,4,0,0,58,4,0,0,26,4,0,0,59,4,0,0,27,4,0,0,60,4,0,0,28,4,0,0,61,4,0,0,29,4,0,0,62,4,0,0,30,4,0,0,63,4,0,0,31,4,0,0,64,4,0,0,32,4,0,0,65,4,0,0,33,4,0,0,66,4,0,0,34,4,0,0,67,4,0,0,35,4,0,0,68,4,0,0,36,4,0,0,69,4,0,0,37,4,0,0,70,4,0,0,38,4,0,0,71,4,0,0,39,4,0,0,72,4,0,0,40,4,0,0,73,4,0,0,41,4,0,0,74,4,0,0,42,4,0,0,75,4,0,0,43,4,0,0,76,4,0,0,44,4,0,0,77,4,0,0,45,4,0,0,78,4,0,0,46,4,0,0,79,4,0,0,47,4,0,0,80,4,0,0,0,4,0,0,81,4,0,0,1,4,0,0,82,4,0,0,2,4,0,0,83,4,0,0,3,4,0,0,84,4,0,0,4,4,0,0,85,4,0,0,5,4,0,0,86,4,0,0,6,4,0,0,87,4,0,0,7,4,0,0,88,4,0,0,8,4,0,0,89,4,0,0,9,4,0,0,90,4,0,0,10,4,0,0,91,4,0,0,11,4,0,0,92,4,0,0,12,4,0,0,93,4,0,0,13,4,0,0,94,4,0,0,14,4,0,0,95,4,0,0,15,4,0,0,96,4,0,0,97,4,0,0,97,4,0,0,96,4,0,0,98,4,0,0,99,4,0,0,99,4,0,0,98,4,0,0,100,4,0,0,101,4,0,0,101,4,0,0,100,4,0,0,102,4,0,0,103,4,0,0,103,4,0,0,102,4,0,0,104,4,0,0,105,4,0,0,105,4,0,0,104,4,0,0,106,4,0,0,107,4,0,0,107,4,0,0,106,4,0,0,108,4,0,0,109,4,0,0,109,4,0,0,108,4,0,0,110,4,0,0,111,4,0,0,111,4,0,0,110,4,0,0,112,4,0,0,113,4,0,0,113,4,0,0,112,4,0,0,114,4,0,0,115,4,0,0,115,4,0,0,114,4,0,0,116,4,0,0,117,4,0,0,117,4,0,0,116,4,0,0,118,4,0,0,119,4,0,0,119,4,0,0,118,4,0,0,120,4,0,0,121,4,0,0,121,4,0,0,120,4,0,0,122,4,0,0,123,4,0,0,123,4,0,0,122,4,0,0,124,4,0,0,125,4,0,0,125,4,0,0,124,4,0,0,126,4,0,0,127,4,0,0,127,4,0,0,126,4,0,0,128,4,0,0,129,4,0,0,129,4,0,0,128,4,0,0,138,4,0,0,139,4,0,0,139,4,0,0,138,4,0,0,140,4,0,0,141,4,0,0,141,4,0,0,140,4,0,0,142,4,0,0,143,4,0,0,143,4,0,0,142,4,0,0,144,4,0,0,145,4,0,0,145,4,0,0,144,4,0,0,146,4,0,0,147,4,0,0,147,4,0,0,146,4,0,0,148,4,0,0,149,4,0,0,149,4,0,0,148,4,0,0,150,4,0,0,151,4,0,0,151,4,0,0,150,4,0,0,152,4,0,0,153,4,0,0,153,4,0,0,152,4,0,0,154,4,0,0,155,4,0,0,155,4,0,0,154,4,0,0,156,4,0,0,157,4,0,0,157,4,0,0,156,4,0,0,158,4,0,0,159,4,0,0,159,4,0,0,158,4,0,0,160,4,0,0,161,4,0,0,161,4,0,0,160,4,0,0,162,4,0,0,163,4,0,0,163,4,0,0,162,4,0,0,164,4,0,0,165,4,0,0,165,4,0,0,164,4,0,0,166,4,0,0,167,4,0,0,167,4,0,0,166,4,0,0,168,4,0,0,169,4,0,0,169,4,0,0,168,4,0,0,170,4,0,0,171,4,0,0,171,4,0,0,170,4,0,0,172,4,0,0,173,4,0,0,173,4,0,0,172,4,0,0,174,4,0,0,175,4,0,0,175,4,0,0,174,4,0,0,176,4,0,0,177,4,0,0,177,4,0,0,176,4,0,0,178,4,0,0,179,4,0,0,179,4,0,0,178,4,0,0,180,4,0,0,181,4,0,0,181,4,0,0,180,4,0,0,182,4,0,0,183,4,0,0,183,4,0,0,182,4,0,0,184,4,0,0,185,4,0,0,185,4,0,0,184,4,0,0,186,4,0,0,187,4,0,0,187,4,0,0,186,4,0,0,188,4,0,0,189,4,0,0,189,4,0,0,188,4,0,0,190,4,0,0,191,4,0,0,191,4,0,0,190,4,0,0,192,4,0,0,207,4,0,0,193,4,0,0,194,4,0,0,194,4,0,0,193,4,0,0,195,4,0,0,196,4,0,0,196,4,0,0,195,4,0,0,197,4,0,0,198,4,0,0,198,4,0,0,197,4,0,0,199,4,0,0,200,4,0,0,200,4,0,0,199,4,0,0,201,4,0,0,202,4,0,0,202,4,0,0,201,4,0,0,203,4,0,0,204,4,0,0,204,4,0,0,203,4,0,0,205,4,0,0,206,4,0,0,206,4,0,0,205,4,0,0,207,4,0,0,192,4,0,0,208,4,0,0,209,4,0,0,209,4,0,0,208,4,0,0,210,4,0,0,211,4,0,0,211,4,0,0,210,4,0,0,212,4,0,0,213,4,0,0,213,4,0,0,212,4,0,0,214,4,0,0,215,4,0,0,215,4,0,0,214,4,0,0,216,4,0,0,217,4,0,0,217,4,0,0,216,4,0,0,218,4,0,0,219,4,0,0,219,4,0,0,218,4,0,0,220,4,0,0,221,4,0,0,221,4,0,0,220,4,0,0,222,4,0,0,223,4,0,0,223,4,0,0,222,4,0,0,224,4,0,0,225,4,0,0,225,4,0,0,224,4,0,0,226,4,0,0,227,4,0,0,227,4,0,0,226,4,0,0,228,4,0,0,229,4,0,0,229,4,0,0,228,4,0,0,230,4,0,0,231,4,0,0,231,4,0,0,230,4,0,0,232,4,0,0,233,4,0,0,233,4,0,0,232,4,0,0,234,4,0,0,235,4,0,0,235,4,0,0,234,4,0,0,236,4,0,0,237,4,0,0,237,4,0,0,236,4,0,0,238,4,0,0,239,4,0,0,239,4,0,0,238,4,0,0,240,4,0,0,241,4,0,0,241,4,0,0,240,4,0,0,242,4,0,0,243,4,0,0,243,4,0,0,242,4,0,0,244,4,0,0,245,4,0,0,245,4,0,0,244,4,0,0,246,4,0,0,247,4,0,0,247,4,0,0,246,4,0,0,248,4,0,0,249,4,0,0,249,4,0,0,248,4,0,0,250,4,0,0,251,4,0,0,251,4,0,0,250,4,0,0,252,4,0,0,253,4,0,0,253,4,0,0,252,4,0,0,254,4,0,0,255,4,0,0,255,4,0,0,254,4,0,0,0,5,0,0,1,5,0,0,1,5,0,0,0,5,0,0,2,5,0,0,3,5,0,0,3,5,0,0,2,5,0,0,4,5,0,0,5,5,0,0,5,5,0,0,4,5,0,0,6,5,0,0,7,5,0,0,7,5,0,0,6,5,0,0,8,5,0,0,9,5,0,0,9,5,0,0,8,5,0,0,10,5,0,0,11,5,0,0,11,5,0,0,10,5,0,0,12,5,0,0,13,5,0,0,13,5,0,0,12,5,0,0,14,5,0,0,15,5,0,0,15,5,0,0,14,5,0,0,16,5,0,0,17,5,0,0,17,5,0,0,16,5,0,0,18,5,0,0,19,5,0,0,19,5,0,0,18,5,0,0,20,5,0,0,21,5,0,0,21,5,0,0,20,5,0,0,22,5,0,0,23,5,0,0,23,5,0,0,22,5,0,0,24,5,0,0,25,5,0,0,25,5,0,0,24,5,0,0,26,5,0,0,27,5,0,0,27,5,0,0,26,5,0,0,28,5,0,0,29,5,0,0,29,5,0,0,28,5,0,0,30,5,0,0,31,5,0,0,31,5,0,0,30,5,0,0,32,5,0,0,33,5,0,0,33,5,0,0,32,5,0,0,34,5,0,0,35,5,0,0,35,5,0,0,34,5,0,0,36,5,0,0,37,5,0,0,37,5,0,0,36,5,0,0,38,5,0,0,39,5,0,0,39,5,0,0,38,5,0,0,40,5,0,0,41,5,0,0,41,5,0,0,40,5,0,0,42,5,0,0,43,5,0,0,43,5,0,0,42,5,0,0,44,5,0,0,45,5,0,0,45,5,0,0,44,5,0,0,46,5,0,0,47,5,0,0,47,5,0,0,46,5,0,0,49,5,0,0,97,5,0,0,50,5,0,0,98,5,0,0,51,5,0,0,99,5,0,0,52,5,0,0,100,5,0,0,53,5,0,0,101,5,0,0,54,5,0,0,102,5,0,0,55,5,0,0,103,5,0,0,56,5,0,0,104,5,0,0,57,5,0,0,105,5,0,0,58,5,0,0,106,5,0,0,59,5,0,0,107,5,0,0,60,5,0,0,108,5,0,0,61,5,0,0,109,5,0,0,62,5,0,0,110,5,0,0,63,5,0,0,111,5,0,0,64,5,0,0,112,5,0,0,65,5,0,0,113,5,0,0,66,5,0,0,114,5,0,0,67,5,0,0,115,5,0,0,68,5,0,0,116,5,0,0,69,5,0,0,117,5,0,0,70,5,0,0,118,5,0,0,71,5,0,0,119,5,0,0,72,5,0,0,120,5,0,0,73,5,0,0,121,5,0,0,74,5,0,0,122,5,0,0,75,5,0,0,123,5,0,0,76,5,0,0,124,5,0,0,77,5,0,0,125,5,0,0,78,5,0,0,126,5,0,0,79,5,0,0,127,5,0,0,80,5,0,0,128,5,0,0,81,5,0,0,129,5,0,0,82,5,0,0,130,5,0,0,83,5,0,0,131,5,0,0,84,5,0,0,132,5,0,0,85,5,0,0,133,5,0,0,86,5,0,0,134,5,0,0,97,5,0,0,49,5,0,0,98,5,0,0,50,5,0,0,99,5,0,0,51,5,0,0,100,5,0,0,52,5,0,0,101,5,0,0,53,5,0,0,102,5,0,0,54,5,0,0,103,5,0,0,55,5,0,0,104,5,0,0,56,5,0,0,105,5,0,0,57,5,0,0,106,5,0,0,58,5,0,0,107,5,0,0,59,5,0,0,108,5,0,0,60,5,0,0,109,5,0,0,61,5,0,0,110,5,0,0,62,5,0,0,111,5,0,0,63,5,0,0,112,5,0,0,64,5,0,0,113,5,0,0,65,5,0,0,114,5,0,0,66,5,0,0,115,5,0,0,67,5,0,0,116,5,0,0,68,5,0,0,117,5,0,0,69,5,0,0,118,5,0,0,70,5,0,0,119,5,0,0,71,5,0,0,120,5,0,0,72,5,0,0,121,5,0,0,73,5,0,0,122,5,0,0,74,5,0,0,123,5,0,0,75,5,0,0,124,5,0,0,76,5,0,0,125,5,0,0,77,5,0,0,126,5,0,0,78,5,0,0,127,5,0,0,79,5,0,0,128,5,0,0,80,5,0,0,129,5,0,0,81,5,0,0,130,5,0,0,82,5,0,0,131,5,0,0,83,5,0,0,132,5,0,0,84,5,0,0,133,5,0,0,85,5,0,0,134,5,0,0,86,5,0,0,160,16,0,0,0,45,0,0,161,16,0,0,1,45,0,0,162,16,0,0,2,45,0,0,163,16,0,0,3,45,0,0,164,16,0,0,4,45,0,0,165,16,0,0,5,45,0,0,166,16,0,0,6,45,0,0,167,16,0,0,7,45,0,0,168,16,0,0,8,45,0,0,169,16,0,0,9,45,0,0,170,16,0,0,10,45,0,0,171,16,0,0,11,45,0,0,172,16,0,0,12,45,0,0,173,16,0,0,13,45,0,0,174,16,0,0,14,45,0,0,175,16,0,0,15,45,0,0,176,16,0,0,16,45,0,0,177,16,0,0,17,45,0,0,178,16,0,0,18,45,0,0,179,16,0,0,19,45,0,0,180,16,0,0,20,45,0,0,181,16,0,0,21,45,0,0,182,16,0,0,22,45,0,0,183,16,0,0,23,45,0,0,184,16,0,0,24,45,0,0,185,16,0,0,25,45,0,0,186,16,0,0,26,45,0,0,187,16,0,0,27,45,0,0,188,16,0,0,28,45,0,0,189,16,0,0,29,45,0,0,190,16,0,0,30,45,0,0,191,16,0,0,31,45,0,0,192,16,0,0,32,45,0,0,193,16,0,0,33,45,0,0,194,16,0,0,34,45,0,0,195,16,0,0,35,45,0,0,196,16,0,0,36,45,0,0,197,16,0,0,37,45,0,0,199,16,0,0,39,45,0,0,205,16,0,0,45,45,0,0,160,19,0,0,112,171,0,0,161,19,0,0,113,171,0,0,162,19,0,0,114,171,0,0,163,19,0,0,115,171,0,0,164,19,0,0,116,171,0,0,165,19,0,0,117,171,0,0,166,19,0,0,118,171,0,0,167,19,0,0,119,171,0,0,168,19,0,0,120,171,0,0,169,19,0,0,121,171,0,0,170,19,0,0,122,171,0,0,171,19,0,0,123,171,0,0,172,19,0,0,124,171,0,0,173,19,0,0,125,171,0,0,174,19,0,0,126,171,0,0,175,19,0,0,127,171,0,0,176,19,0,0,128,171,0,0,177,19,0,0,129,171,0,0,178,19,0,0,130,171,0,0,179,19,0,0,131,171,0,0,180,19,0,0,132,171,0,0,181,19,0,0,133,171,0,0,182,19,0,0,134,171,0,0,183,19,0,0,135,171,0,0,184,19,0,0,136,171,0,0,185,19,0,0,137,171,0,0,186,19,0,0,138,171,0,0,187,19,0,0,139,171,0,0,188,19,0,0,140,171,0,0,189,19,0,0,141,171,0,0,190,19,0,0,142,171,0,0,191,19,0,0,143,171,0,0,192,19,0,0,144,171,0,0,193,19,0,0,145,171,0,0,194,19,0,0,146,171,0,0,195,19,0,0,147,171,0,0,196,19,0,0,148,171,0,0,197,19,0,0,149,171,0,0,198,19,0,0,150,171,0,0,199,19,0,0,151,171,0,0,200,19,0,0,152,171,0,0,201,19,0,0,153,171,0,0,202,19,0,0,154,171,0,0,203,19,0,0,155,171,0,0,204,19,0,0,156,171,0,0,205,19,0,0,157,171,0,0,206,19,0,0,158,171,0,0,207,19,0,0,159,171,0,0,208,19], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+10424);
/* memory initializer */ allocate([160,171,0,0,209,19,0,0,161,171,0,0,210,19,0,0,162,171,0,0,211,19,0,0,163,171,0,0,212,19,0,0,164,171,0,0,213,19,0,0,165,171,0,0,214,19,0,0,166,171,0,0,215,19,0,0,167,171,0,0,216,19,0,0,168,171,0,0,217,19,0,0,169,171,0,0,218,19,0,0,170,171,0,0,219,19,0,0,171,171,0,0,220,19,0,0,172,171,0,0,221,19,0,0,173,171,0,0,222,19,0,0,174,171,0,0,223,19,0,0,175,171,0,0,224,19,0,0,176,171,0,0,225,19,0,0,177,171,0,0,226,19,0,0,178,171,0,0,227,19,0,0,179,171,0,0,228,19,0,0,180,171,0,0,229,19,0,0,181,171,0,0,230,19,0,0,182,171,0,0,231,19,0,0,183,171,0,0,232,19,0,0,184,171,0,0,233,19,0,0,185,171,0,0,234,19,0,0,186,171,0,0,235,19,0,0,187,171,0,0,236,19,0,0,188,171,0,0,237,19,0,0,189,171,0,0,238,19,0,0,190,171,0,0,239,19,0,0,191,171,0,0,240,19,0,0,248,19,0,0,241,19,0,0,249,19,0,0,242,19,0,0,250,19,0,0,243,19,0,0,251,19,0,0,244,19,0,0,252,19,0,0,245,19,0,0,253,19,0,0,248,19,0,0,240,19,0,0,249,19,0,0,241,19,0,0,250,19,0,0,242,19,0,0,251,19,0,0,243,19,0,0,252,19,0,0,244,19,0,0,253,19,0,0,245,19,0,0,121,29,0,0,125,167,0,0,125,29,0,0,99,44,0,0,0,30,0,0,1,30,0,0,1,30,0,0,0,30,0,0,2,30,0,0,3,30,0,0,3,30,0,0,2,30,0,0,4,30,0,0,5,30,0,0,5,30,0,0,4,30,0,0,6,30,0,0,7,30,0,0,7,30,0,0,6,30,0,0,8,30,0,0,9,30,0,0,9,30,0,0,8,30,0,0,10,30,0,0,11,30,0,0,11,30,0,0,10,30,0,0,12,30,0,0,13,30,0,0,13,30,0,0,12,30,0,0,14,30,0,0,15,30,0,0,15,30,0,0,14,30,0,0,16,30,0,0,17,30,0,0,17,30,0,0,16,30,0,0,18,30,0,0,19,30,0,0,19,30,0,0,18,30,0,0,20,30,0,0,21,30,0,0,21,30,0,0,20,30,0,0,22,30,0,0,23,30,0,0,23,30,0,0,22,30,0,0,24,30,0,0,25,30,0,0,25,30,0,0,24,30,0,0,26,30,0,0,27,30,0,0,27,30,0,0,26,30,0,0,28,30,0,0,29,30,0,0,29,30,0,0,28,30,0,0,30,30,0,0,31,30,0,0,31,30,0,0,30,30,0,0,32,30,0,0,33,30,0,0,33,30,0,0,32,30,0,0,34,30,0,0,35,30,0,0,35,30,0,0,34,30,0,0,36,30,0,0,37,30,0,0,37,30,0,0,36,30,0,0,38,30,0,0,39,30,0,0,39,30,0,0,38,30,0,0,40,30,0,0,41,30,0,0,41,30,0,0,40,30,0,0,42,30,0,0,43,30,0,0,43,30,0,0,42,30,0,0,44,30,0,0,45,30,0,0,45,30,0,0,44,30,0,0,46,30,0,0,47,30,0,0,47,30,0,0,46,30,0,0,48,30,0,0,49,30,0,0,49,30,0,0,48,30,0,0,50,30,0,0,51,30,0,0,51,30,0,0,50,30,0,0,52,30,0,0,53,30,0,0,53,30,0,0,52,30,0,0,54,30,0,0,55,30,0,0,55,30,0,0,54,30,0,0,56,30,0,0,57,30,0,0,57,30,0,0,56,30,0,0,58,30,0,0,59,30,0,0,59,30,0,0,58,30,0,0,60,30,0,0,61,30,0,0,61,30,0,0,60,30,0,0,62,30,0,0,63,30,0,0,63,30,0,0,62,30,0,0,64,30,0,0,65,30,0,0,65,30,0,0,64,30,0,0,66,30,0,0,67,30,0,0,67,30,0,0,66,30,0,0,68,30,0,0,69,30,0,0,69,30,0,0,68,30,0,0,70,30,0,0,71,30,0,0,71,30,0,0,70,30,0,0,72,30,0,0,73,30,0,0,73,30,0,0,72,30,0,0,74,30,0,0,75,30,0,0,75,30,0,0,74,30,0,0,76,30,0,0,77,30,0,0,77,30,0,0,76,30,0,0,78,30,0,0,79,30,0,0,79,30,0,0,78,30,0,0,80,30,0,0,81,30,0,0,81,30,0,0,80,30,0,0,82,30,0,0,83,30,0,0,83,30,0,0,82,30,0,0,84,30,0,0,85,30,0,0,85,30,0,0,84,30,0,0,86,30,0,0,87,30,0,0,87,30,0,0,86,30,0,0,88,30,0,0,89,30,0,0,89,30,0,0,88,30,0,0,90,30,0,0,91,30,0,0,91,30,0,0,90,30,0,0,92,30,0,0,93,30,0,0,93,30,0,0,92,30,0,0,94,30,0,0,95,30,0,0,95,30,0,0,94,30,0,0,96,30,0,0,97,30,0,0,96,30,0,0,155,30,0,0,97,30,0,0,96,30,0,0,97,30,0,0,155,30,0,0,98,30,0,0,99,30,0,0,99,30,0,0,98,30,0,0,100,30,0,0,101,30,0,0,101,30,0,0,100,30,0,0,102,30,0,0,103,30,0,0,103,30,0,0,102,30,0,0,104,30,0,0,105,30,0,0,105,30,0,0,104,30,0,0,106,30,0,0,107,30,0,0,107,30,0,0,106,30,0,0,108,30,0,0,109,30,0,0,109,30,0,0,108,30,0,0,110,30,0,0,111,30,0,0,111,30,0,0,110,30,0,0,112,30,0,0,113,30,0,0,113,30,0,0,112,30,0,0,114,30,0,0,115,30,0,0,115,30,0,0,114,30,0,0,116,30,0,0,117,30,0,0,117,30,0,0,116,30,0,0,118,30,0,0,119,30,0,0,119,30,0,0,118,30,0,0,120,30,0,0,121,30,0,0,121,30,0,0,120,30,0,0,122,30,0,0,123,30,0,0,123,30,0,0,122,30,0,0,124,30,0,0,125,30,0,0,125,30,0,0,124,30,0,0,126,30,0,0,127,30,0,0,127,30,0,0,126,30,0,0,128,30,0,0,129,30,0,0,129,30,0,0,128,30,0,0,130,30,0,0,131,30,0,0,131,30,0,0,130,30,0,0,132,30,0,0,133,30,0,0,133,30,0,0,132,30,0,0,134,30,0,0,135,30,0,0,135,30,0,0,134,30,0,0,136,30,0,0,137,30,0,0,137,30,0,0,136,30,0,0,138,30,0,0,139,30,0,0,139,30,0,0,138,30,0,0,140,30,0,0,141,30,0,0,141,30,0,0,140,30,0,0,142,30,0,0,143,30,0,0,143,30,0,0,142,30,0,0,144,30,0,0,145,30,0,0,145,30,0,0,144,30,0,0,146,30,0,0,147,30,0,0,147,30,0,0,146,30,0,0,148,30,0,0,149,30,0,0,149,30,0,0,148,30,0,0,155,30,0,0,96,30,0,0,155,30,0,0,97,30,0,0,158,30,0,0,223,0,0,0,160,30,0,0,161,30,0,0,161,30,0,0,160,30,0,0,162,30,0,0,163,30,0,0,163,30,0,0,162,30,0,0,164,30,0,0,165,30,0,0,165,30,0,0,164,30,0,0,166,30,0,0,167,30,0,0,167,30,0,0,166,30,0,0,168,30,0,0,169,30,0,0,169,30,0,0,168,30,0,0,170,30,0,0,171,30,0,0,171,30,0,0,170,30,0,0,172,30,0,0,173,30,0,0,173,30,0,0,172,30,0,0,174,30,0,0,175,30,0,0,175,30,0,0,174,30,0,0,176,30,0,0,177,30,0,0,177,30,0,0,176,30,0,0,178,30,0,0,179,30,0,0,179,30,0,0,178,30,0,0,180,30,0,0,181,30,0,0,181,30,0,0,180,30,0,0,182,30,0,0,183,30,0,0,183,30,0,0,182,30,0,0,184,30,0,0,185,30,0,0,185,30,0,0,184,30,0,0,186,30,0,0,187,30,0,0,187,30,0,0,186,30,0,0,188,30,0,0,189,30,0,0,189,30,0,0,188,30,0,0,190,30,0,0,191,30,0,0,191,30,0,0,190,30,0,0,192,30,0,0,193,30,0,0,193,30,0,0,192,30,0,0,194,30,0,0,195,30,0,0,195,30,0,0,194,30,0,0,196,30,0,0,197,30,0,0,197,30,0,0,196,30,0,0,198,30,0,0,199,30,0,0,199,30,0,0,198,30,0,0,200,30,0,0,201,30,0,0,201,30,0,0,200,30,0,0,202,30,0,0,203,30,0,0,203,30,0,0,202,30,0,0,204,30,0,0,205,30,0,0,205,30,0,0,204,30,0,0,206,30,0,0,207,30,0,0,207,30,0,0,206,30,0,0,208,30,0,0,209,30,0,0,209,30,0,0,208,30,0,0,210,30,0,0,211,30,0,0,211,30,0,0,210,30,0,0,212,30,0,0,213,30,0,0,213,30,0,0,212,30,0,0,214,30,0,0,215,30,0,0,215,30,0,0,214,30,0,0,216,30,0,0,217,30,0,0,217,30,0,0,216,30,0,0,218,30,0,0,219,30,0,0,219,30,0,0,218,30,0,0,220,30,0,0,221,30,0,0,221,30,0,0,220,30,0,0,222,30,0,0,223,30,0,0,223,30,0,0,222,30,0,0,224,30,0,0,225,30,0,0,225,30,0,0,224,30,0,0,226,30,0,0,227,30,0,0,227,30,0,0,226,30,0,0,228,30,0,0,229,30,0,0,229,30,0,0,228,30,0,0,230,30,0,0,231,30,0,0,231,30,0,0,230,30,0,0,232,30,0,0,233,30,0,0,233,30,0,0,232,30,0,0,234,30,0,0,235,30,0,0,235,30,0,0,234,30,0,0,236,30,0,0,237,30,0,0,237,30,0,0,236,30,0,0,238,30,0,0,239,30,0,0,239,30,0,0,238,30,0,0,240,30,0,0,241,30,0,0,241,30,0,0,240,30,0,0,242,30,0,0,243,30,0,0,243,30,0,0,242,30,0,0,244,30,0,0,245,30,0,0,245,30,0,0,244,30,0,0,246,30,0,0,247,30,0,0,247,30,0,0,246,30,0,0,248,30,0,0,249,30,0,0,249,30,0,0,248,30,0,0,250,30,0,0,251,30,0,0,251,30,0,0,250,30,0,0,252,30,0,0,253,30,0,0,253,30,0,0,252,30,0,0,254,30,0,0,255,30,0,0,255,30,0,0,254,30,0,0,0,31,0,0,8,31,0,0,1,31,0,0,9,31,0,0,2,31,0,0,10,31,0,0,3,31,0,0,11,31,0,0,4,31,0,0,12,31,0,0,5,31,0,0,13,31,0,0,6,31,0,0,14,31,0,0,7,31,0,0,15,31,0,0,8,31,0,0,0,31,0,0,9,31,0,0,1,31,0,0,10,31,0,0,2,31,0,0,11,31,0,0,3,31,0,0,12,31,0,0,4,31,0,0,13,31,0,0,5,31,0,0,14,31,0,0,6,31,0,0,15,31,0,0,7,31,0,0,16,31,0,0,24,31,0,0,17,31,0,0,25,31,0,0,18,31,0,0,26,31,0,0,19,31,0,0,27,31,0,0,20,31,0,0,28,31,0,0,21,31,0,0,29,31,0,0,24,31,0,0,16,31,0,0,25,31,0,0,17,31,0,0,26,31,0,0,18,31,0,0,27,31,0,0,19,31,0,0,28,31,0,0,20,31,0,0,29,31,0,0,21,31,0,0,32,31,0,0,40,31,0,0,33,31,0,0,41,31,0,0,34,31,0,0,42,31,0,0,35,31,0,0,43,31,0,0,36,31,0,0,44,31,0,0,37,31,0,0,45,31,0,0,38,31,0,0,46,31,0,0,39,31,0,0,47,31,0,0,40,31,0,0,32,31,0,0,41,31,0,0,33,31,0,0,42,31,0,0,34,31,0,0,43,31,0,0,35,31,0,0,44,31,0,0,36,31,0,0,45,31,0,0,37,31,0,0,46,31,0,0,38,31,0,0,47,31,0,0,39,31,0,0,48,31,0,0,56,31,0,0,49,31,0,0,57,31,0,0,50,31,0,0,58,31,0,0,51,31,0,0,59,31,0,0,52,31,0,0,60,31,0,0,53,31,0,0,61,31,0,0,54,31,0,0,62,31,0,0,55,31,0,0,63,31,0,0,56,31,0,0,48,31,0,0,57,31,0,0,49,31,0,0,58,31,0,0,50,31,0,0,59,31,0,0,51,31,0,0,60,31,0,0,52,31,0,0,61,31,0,0,53,31,0,0,62,31,0,0,54,31,0,0,63,31,0,0,55,31,0,0,64,31,0,0,72,31,0,0,65,31,0,0,73,31,0,0,66,31,0,0,74,31,0,0,67,31,0,0,75,31,0,0,68,31,0,0,76,31,0,0,69,31,0,0,77,31,0,0,72,31,0,0,64,31,0,0,73,31,0,0,65,31,0,0,74,31,0,0,66,31,0,0,75,31,0,0,67,31,0,0,76,31,0,0,68,31,0,0,77,31,0,0,69,31,0,0,81,31,0,0,89,31,0,0,83,31,0,0,91,31,0,0,85,31,0,0,93,31,0,0,87,31,0,0,95,31,0,0,89,31,0,0,81,31,0,0,91,31,0,0,83,31,0,0,93,31,0,0,85,31,0,0,95,31,0,0,87,31,0,0,96,31,0,0,104,31,0,0,97,31,0,0,105,31,0,0,98,31,0,0,106,31,0,0,99,31,0,0,107,31,0,0,100,31,0,0,108,31,0,0,101,31,0,0,109,31,0,0,102,31,0,0,110,31,0,0,103,31,0,0,111,31,0,0,104,31,0,0,96,31,0,0,105,31,0,0,97,31,0,0,106,31,0,0,98,31,0,0,107,31,0,0,99,31,0,0,108,31,0,0,100,31,0,0,109,31,0,0,101,31,0,0,110,31,0,0,102,31,0,0,111,31,0,0,103,31,0,0,112,31,0,0,186,31,0,0,113,31,0,0,187,31,0,0,114,31,0,0,200,31,0,0,115,31,0,0,201,31,0,0,116,31,0,0,202,31,0,0,117,31,0,0,203,31,0,0,118,31,0,0,218,31,0,0,119,31,0,0,219,31,0,0,120,31,0,0,248,31,0,0,121,31,0,0,249,31,0,0,122,31,0,0,234,31,0,0,123,31,0,0,235,31,0,0,124,31,0,0,250,31,0,0,125,31,0,0,251,31,0,0,128,31,0,0,136,31,0,0,129,31,0,0,137,31,0,0,130,31,0,0,138,31,0,0,131,31,0,0,139,31,0,0,132,31,0,0,140,31,0,0,133,31,0,0,141,31,0,0,134,31,0,0,142,31,0,0,135,31,0,0,143,31,0,0,136,31,0,0,128,31,0,0,137,31,0,0,129,31,0,0,138,31,0,0,130,31,0,0,139,31,0,0,131,31,0,0,140,31,0,0,132,31,0,0,141,31,0,0,133,31,0,0,142,31,0,0,134,31,0,0,143,31,0,0,135,31,0,0,144,31,0,0,152,31,0,0,145,31,0,0,153,31,0,0,146,31,0,0,154,31,0,0,147,31,0,0,155,31,0,0,148,31,0,0,156,31,0,0,149,31,0,0,157,31,0,0,150,31,0,0,158,31,0,0,151,31,0,0,159,31,0,0,152,31,0,0,144,31,0,0,153,31,0,0,145,31,0,0,154,31,0,0,146,31,0,0,155,31,0,0,147,31,0,0,156,31,0,0,148,31,0,0,157,31,0,0,149,31,0,0,158,31,0,0,150,31,0,0,159,31,0,0,151,31,0,0,160,31,0,0,168,31,0,0,161,31,0,0,169,31,0,0,162,31,0,0,170,31,0,0,163,31,0,0,171,31,0,0,164,31,0,0,172,31,0,0,165,31,0,0,173,31,0,0,166,31,0,0,174,31,0,0,167,31,0,0,175,31,0,0,168,31,0,0,160,31,0,0,169,31,0,0,161,31,0,0,170,31,0,0,162,31,0,0,171,31,0,0,163,31,0,0,172,31,0,0,164,31,0,0,173,31,0,0,165,31,0,0,174,31,0,0,166,31,0,0,175,31,0,0,167,31,0,0,176,31,0,0,184,31,0,0,177,31,0,0,185,31,0,0,179,31,0,0,188,31,0,0,184,31,0,0,176,31,0,0,185,31,0,0,177,31,0,0,186,31,0,0,112,31,0,0,187,31,0,0,113,31,0,0,188,31,0,0,179,31,0,0,190,31,0,0,69,3,0,0,190,31,0,0,153,3,0,0,190,31,0,0,185,3,0,0,195,31,0,0,204,31,0,0,200,31,0,0,114,31,0,0,201,31,0,0,115,31,0,0,202,31,0,0,116,31,0,0,203,31,0,0,117,31,0,0,204,31,0,0,195,31,0,0,208,31,0,0,216,31,0,0,209,31,0,0,217,31,0,0,216,31,0,0,208,31,0,0,217,31,0,0,209,31,0,0,218,31,0,0,118,31,0,0,219,31,0,0,119,31,0,0,224,31,0,0,232,31,0,0,225,31,0,0,233,31,0,0,229,31,0,0,236,31,0,0,232,31,0,0,224,31,0,0,233,31,0,0,225,31,0,0,234,31,0,0,122,31,0,0,235,31,0,0,123,31,0,0,236,31,0,0,229,31,0,0,243,31,0,0,252,31,0,0,248,31,0,0,120,31,0,0,249,31,0,0,121,31,0,0,250,31,0,0,124,31,0,0,251,31,0,0,125,31,0,0,252,31,0,0,243,31,0,0,38,33,0,0,169,3,0,0,38,33,0,0,201,3,0,0,42,33,0,0,75,0,0,0,42,33,0,0,107,0,0,0,43,33,0,0,197,0,0,0,43,33,0,0,229,0,0,0,50,33,0,0,78,33,0,0,78,33,0,0,50,33,0,0,96,33,0,0,112,33,0,0,97,33,0,0,113,33,0,0,98,33,0,0,114,33,0,0,99,33,0,0,115,33,0,0,100,33,0,0,116,33,0,0,101,33,0,0,117,33,0,0,102,33,0,0,118,33,0,0,103,33,0,0,119,33,0,0,104,33,0,0,120,33,0,0,105,33,0,0,121,33,0,0,106,33,0,0,122,33,0,0,107,33,0,0,123,33,0,0,108,33,0,0,124,33,0,0,109,33,0,0,125,33,0,0,110,33,0,0,126,33,0,0,111,33,0,0,127,33,0,0,112,33,0,0,96,33,0,0,113,33,0,0,97,33,0,0,114,33,0,0,98,33,0,0,115,33,0,0,99,33,0,0,116,33,0,0,100,33,0,0,117,33,0,0,101,33,0,0,118,33,0,0,102,33,0,0,119,33,0,0,103,33,0,0,120,33,0,0,104,33,0,0,121,33,0,0,105,33,0,0,122,33,0,0,106,33,0,0,123,33,0,0,107,33,0,0,124,33,0,0,108,33,0,0,125,33,0,0,109,33,0,0,126,33,0,0,110,33,0,0,127,33,0,0,111,33,0,0,131,33,0,0,132,33,0,0,132,33,0,0,131,33,0,0,182,36,0,0,208,36,0,0,183,36,0,0,209,36,0,0,184,36,0,0,210,36,0,0,185,36,0,0,211,36,0,0,186,36,0,0,212,36,0,0,187,36,0,0,213,36,0,0,188,36,0,0,214,36,0,0,189,36,0,0,215,36,0,0,190,36,0,0,216,36,0,0,191,36,0,0,217,36,0,0,192,36,0,0,218,36,0,0,193,36,0,0,219,36,0,0,194,36,0,0,220,36,0,0,195,36,0,0,221,36,0,0,196,36,0,0,222,36,0,0,197,36,0,0,223,36,0,0,198,36,0,0,224,36,0,0,199,36,0,0,225,36,0,0,200,36,0,0,226,36,0,0,201,36,0,0,227,36,0,0,202,36,0,0,228,36,0,0,203,36,0,0,229,36,0,0,204,36,0,0,230,36,0,0,205,36,0,0,231,36,0,0,206,36,0,0,232,36,0,0,207,36,0,0,233,36,0,0,208,36,0,0,182,36,0,0,209,36,0,0,183,36,0,0,210,36,0,0,184,36,0,0,211,36,0,0,185,36,0,0,212,36,0,0,186,36,0,0,213,36,0,0,187,36,0,0,214,36,0,0,188,36,0,0,215,36,0,0,189,36,0,0,216,36,0,0,190,36,0,0,217,36,0,0,191,36,0,0,218,36,0,0,192,36,0,0,219,36,0,0,193,36,0,0,220,36,0,0,194,36,0,0,221,36,0,0,195,36,0,0,222,36,0,0,196,36,0,0,223,36,0,0,197,36,0,0,224,36,0,0,198,36,0,0,225,36,0,0,199,36,0,0,226,36,0,0,200,36,0,0,227,36,0,0,201,36,0,0,228,36,0,0,202,36,0,0,229,36,0,0,203,36,0,0,230,36,0,0,204,36,0,0,231,36,0,0,205,36,0,0,232,36,0,0,206,36,0,0,233,36,0,0,207,36,0,0,0,44,0,0,48,44,0,0,1,44,0,0,49,44,0,0,2,44,0,0,50,44,0,0,3,44,0,0,51,44,0,0,4,44,0,0,52,44,0,0,5,44,0,0,53,44,0,0,6,44,0,0,54,44,0,0,7,44,0,0,55,44,0,0,8,44,0,0,56,44,0,0,9,44,0,0,57,44,0,0,10,44,0,0,58,44,0,0,11,44,0,0,59,44,0,0,12,44,0,0,60,44,0,0,13,44,0,0,61,44,0,0,14,44,0,0,62,44,0,0,15,44,0,0,63,44,0,0,16,44,0,0,64,44,0,0,17,44,0,0,65,44,0,0,18,44,0,0,66,44,0,0,19,44,0,0,67,44,0,0,20,44,0,0,68,44,0,0,21,44,0,0,69,44,0,0,22,44,0,0,70,44,0,0,23,44,0,0,71,44,0,0,24,44,0,0,72,44,0,0,25,44,0,0,73,44,0,0,26,44,0,0,74,44,0,0,27,44,0,0,75,44,0,0,28,44,0,0,76,44,0,0,29,44,0,0,77,44,0,0,30,44,0,0,78,44,0,0,31,44,0,0,79,44,0,0,32,44,0,0,80,44,0,0,33,44,0,0,81,44,0,0,34,44,0,0,82,44,0,0,35,44,0,0,83,44,0,0,36,44,0,0,84,44,0,0,37,44,0,0,85,44,0,0,38,44,0,0,86,44,0,0,39,44,0,0,87,44,0,0,40,44,0,0,88,44,0,0,41,44,0,0,89,44,0,0,42,44,0,0,90,44,0,0,43,44,0,0,91,44,0,0,44,44,0,0,92,44,0,0,45,44,0,0,93,44,0,0,46,44,0,0,94,44,0,0,48,44,0,0,0,44,0,0,49,44,0,0,1,44,0,0,50,44,0,0,2,44,0,0,51,44,0,0,3,44,0,0,52,44,0,0,4,44,0,0,53,44,0,0,5,44,0,0,54,44,0,0,6,44,0,0,55,44,0,0,7,44,0,0,56,44,0,0,8,44,0,0,57,44,0,0,9,44,0,0,58,44,0,0,10,44,0,0,59,44,0,0,11,44,0,0,60,44,0,0,12,44,0,0,61,44,0,0,13,44,0,0,62,44,0,0,14,44,0,0,63,44,0,0,15,44,0,0,64,44,0,0,16,44,0,0,65,44,0,0,17,44,0,0,66,44,0,0,18,44,0,0,67,44,0,0,19,44,0,0,68,44,0,0,20,44,0,0,69,44,0,0,21,44,0,0,70,44,0,0,22,44,0,0,71,44,0,0,23,44,0,0,72,44,0,0,24,44,0,0,73,44,0,0,25,44,0,0,74,44,0,0,26,44,0,0,75,44,0,0,27,44,0,0,76,44,0,0,28,44,0,0,77,44,0,0,29,44,0,0,78,44,0,0,30,44,0,0,79,44,0,0,31,44,0,0,80,44,0,0,32,44,0,0,81,44,0,0,33,44,0,0,82,44,0,0,34,44,0,0,83,44,0,0,35,44,0,0,84,44,0,0,36,44,0,0,85,44,0,0,37,44,0,0,86,44,0,0,38,44,0,0,87,44,0,0,39,44,0,0,88,44,0,0,40,44,0,0,89,44,0,0,41,44,0,0,90,44,0,0,42,44,0,0,91,44,0,0,43,44,0,0,92,44,0,0,44,44,0,0,93,44,0,0,45,44,0,0,94,44,0,0,46,44,0,0,96,44,0,0,97,44,0,0,97,44,0,0,96,44,0,0,98,44,0,0,107,2,0,0,99,44,0,0,125,29,0,0,100,44,0,0,125,2,0,0,101,44,0,0,58,2,0,0,102,44,0,0,62,2,0,0,103,44,0,0,104,44,0,0,104,44,0,0,103,44,0,0,105,44,0,0,106,44,0,0,106,44,0,0,105,44,0,0,107,44,0,0,108,44,0,0,108,44,0,0,107,44,0,0,109,44,0,0,81,2,0,0,110,44,0,0,113,2,0,0,111,44,0,0,80,2,0,0,112,44,0,0,82,2,0,0,114,44,0,0,115,44,0,0,115,44,0,0,114,44,0,0,117,44,0,0,118,44,0,0,118,44,0,0,117,44,0,0,126,44,0,0,63,2,0,0,127,44,0,0,64,2,0,0,128,44,0,0,129,44,0,0,129,44,0,0,128,44,0,0,130,44,0,0,131,44,0,0,131,44,0,0,130,44,0,0,132,44,0,0,133,44,0,0,133,44,0,0,132,44,0,0,134,44,0,0,135,44,0,0,135,44,0,0,134,44,0,0,136,44,0,0,137,44,0,0,137,44,0,0,136,44,0,0,138,44,0,0,139,44,0,0,139,44,0,0,138,44,0,0,140,44,0,0,141,44,0,0,141,44,0,0,140,44,0,0,142,44,0,0,143,44,0,0,143,44,0,0,142,44,0,0,144,44,0,0,145,44,0,0,145,44,0,0,144,44,0,0,146,44,0,0,147,44,0,0,147,44,0,0,146,44,0,0,148,44,0,0,149,44,0,0,149,44,0,0,148,44,0,0,150,44,0,0,151,44,0,0,151,44,0,0,150,44,0,0,152,44,0,0,153,44,0,0,153,44,0,0,152,44,0,0,154,44,0,0,155,44,0,0,155,44,0,0,154,44,0,0,156,44,0,0,157,44,0,0,157,44,0,0,156,44,0,0,158,44,0,0,159,44,0,0,159,44,0,0,158,44,0,0,160,44,0,0,161,44,0,0,161,44,0,0,160,44,0,0,162,44,0,0,163,44,0,0,163,44,0,0,162,44,0,0,164,44,0,0,165,44,0,0,165,44,0,0,164,44,0,0,166,44,0,0,167,44,0,0,167,44,0,0,166,44,0,0,168,44,0,0,169,44,0,0,169,44,0,0,168,44,0,0,170,44,0,0,171,44,0,0,171,44,0,0,170,44,0,0,172,44,0,0,173,44,0,0,173,44,0,0,172,44,0,0,174,44,0,0,175,44,0,0,175,44,0,0,174,44,0,0,176,44,0,0,177,44,0,0,177,44,0,0,176,44,0,0,178,44,0,0,179,44,0,0,179,44,0,0,178,44,0,0,180,44,0,0,181,44,0,0,181,44,0,0,180,44,0,0,182,44,0,0,183,44,0,0,183,44,0,0,182,44,0,0,184,44,0,0,185,44,0,0,185,44,0,0,184,44,0,0,186,44,0,0,187,44,0,0,187,44,0,0,186,44,0,0,188,44,0,0,189,44,0,0,189,44,0,0,188,44,0,0,190,44,0,0,191,44,0,0,191,44,0,0,190,44,0,0,192,44,0,0,193,44,0,0,193,44,0,0,192,44,0,0,194,44,0,0,195,44,0,0,195,44,0,0,194,44,0,0,196,44,0,0,197,44,0,0,197,44,0,0,196,44,0,0,198,44,0,0,199,44,0,0,199,44,0,0,198,44,0,0,200,44,0,0,201,44,0,0,201,44,0,0,200,44,0,0,202,44,0,0,203,44,0,0,203,44,0,0,202,44,0,0,204,44,0,0,205,44,0,0,205,44,0,0,204,44,0,0,206,44,0,0,207,44,0,0,207,44,0,0,206,44,0,0,208,44,0,0,209,44,0,0,209,44,0,0,208,44,0,0,210,44,0,0,211,44,0,0,211,44,0,0,210,44,0,0,212,44,0,0,213,44,0,0,213,44,0,0,212,44,0,0,214,44,0,0,215,44,0,0,215,44,0,0,214,44,0,0,216,44,0,0,217,44,0,0,217,44,0,0,216,44,0,0,218,44,0,0,219,44,0,0,219,44,0,0,218,44,0,0,220,44,0,0,221,44,0,0,221,44,0,0,220,44,0,0,222,44,0,0,223,44,0,0,223,44,0,0,222,44,0,0,224,44,0,0,225,44,0,0,225,44,0,0,224,44,0,0,226,44,0,0,227,44,0,0,227,44,0,0,226,44,0,0,235,44,0,0,236,44,0,0,236,44,0,0,235,44,0,0,237,44,0,0,238,44,0,0,238,44,0,0,237,44,0,0,242,44,0,0,243,44,0,0,243,44,0,0,242,44,0,0,0,45,0,0,160,16,0,0,1,45,0,0,161,16,0,0,2,45,0,0,162,16,0,0,3,45,0,0,163,16,0,0,4,45,0,0,164,16,0,0,5,45,0,0,165,16,0,0,6,45,0,0,166,16,0,0,7,45,0,0,167,16,0,0,8,45,0,0,168,16,0,0,9,45,0,0,169,16,0,0,10,45,0,0,170,16,0,0,11,45,0,0,171,16,0,0,12,45,0,0,172,16,0,0,13,45,0,0,173,16,0,0,14,45,0,0,174,16,0,0,15,45,0,0,175,16,0,0,16,45,0,0,176,16,0,0,17,45,0,0,177,16,0,0,18,45,0,0,178,16,0,0,19,45,0,0,179,16,0,0,20,45,0,0,180,16,0,0,21,45,0,0,181,16,0,0,22,45,0,0,182,16,0,0,23,45,0,0,183,16,0,0,24,45,0,0,184,16,0,0,25,45,0,0,185,16,0,0,26,45,0,0,186,16,0,0,27,45,0,0,187,16,0,0,28,45,0,0,188,16,0,0,29,45,0,0,189,16,0,0,30,45,0,0,190,16,0,0,31,45,0,0,191,16,0,0,32,45,0,0,192,16,0,0,33,45,0,0,193,16,0,0,34,45,0,0,194,16,0,0,35,45,0,0,195,16,0,0,36,45,0,0,196,16,0,0,37,45,0,0,197,16,0,0,39,45,0,0,199,16,0,0,45,45,0,0,205,16,0,0,64,166,0,0,65,166,0,0,65,166,0,0,64,166,0,0,66,166,0,0,67,166,0,0,67,166,0,0,66,166,0,0,68,166,0,0,69,166,0,0,69,166,0,0,68,166,0,0,70,166,0,0,71,166,0,0,71,166,0,0,70,166,0,0,72,166,0,0,73,166,0,0,73,166,0,0,72,166,0,0,74,166,0,0,75,166,0,0,75,166,0,0,74,166,0,0,76,166,0,0,77,166,0,0,77,166,0,0,76,166,0,0,78,166,0,0,79,166,0,0,79,166,0,0,78,166,0,0,80,166,0,0,81,166,0,0,81,166,0,0,80,166,0,0,82,166,0,0,83,166,0,0,83,166,0,0,82,166,0,0,84,166,0,0,85,166,0,0,85,166,0,0,84,166,0,0,86,166,0,0,87,166,0,0,87,166,0,0,86,166,0,0,88,166,0,0,89,166,0,0,89,166,0,0,88,166,0,0,90,166,0,0,91,166,0,0,91,166,0,0,90,166,0,0,92,166,0,0,93,166,0,0,93,166,0,0,92,166,0,0,94,166,0,0,95,166,0,0,95,166,0,0,94,166,0,0,96,166,0,0,97,166,0,0,97,166,0,0,96,166,0,0,98,166,0,0,99,166,0,0,99,166,0,0,98,166,0,0,100,166,0,0,101,166,0,0,101,166,0,0,100,166,0,0,102,166,0,0,103,166,0,0,103,166,0,0,102,166,0,0,104,166,0,0,105,166,0,0,105,166,0,0,104,166,0,0,106,166,0,0,107,166,0,0,107,166,0,0,106,166,0,0,108,166,0,0,109,166,0,0,109,166,0,0,108,166,0,0,128,166,0,0,129,166,0,0,129,166,0,0,128,166,0,0,130,166,0,0,131,166,0,0,131,166,0,0,130,166,0,0,132,166,0,0,133,166,0,0,133,166,0,0,132,166,0,0,134,166,0,0,135,166,0,0,135,166,0,0,134,166,0,0,136,166,0,0,137,166,0,0,137,166,0,0,136,166,0,0,138,166,0,0,139,166,0,0,139,166,0,0,138,166,0,0,140,166,0,0,141,166,0,0,141,166,0,0,140,166,0,0,142,166,0,0,143,166,0,0,143,166,0,0,142,166,0,0,144,166,0,0,145,166,0,0,145,166,0,0,144,166,0,0,146,166,0,0,147,166,0,0,147,166,0,0,146,166,0,0,148,166,0,0,149,166,0,0,149,166,0,0,148,166,0,0,150,166,0,0,151,166,0,0,151,166,0,0,150,166,0,0,152,166,0,0,153,166,0,0,153,166,0,0,152,166,0,0,154,166,0,0,155,166,0,0,155,166,0,0,154,166,0,0,34,167,0,0,35,167,0,0,35,167,0,0,34,167,0,0,36,167,0,0,37,167,0,0,37,167,0,0,36,167,0,0,38,167,0,0,39,167,0,0,39,167,0,0,38,167,0,0,40,167,0,0,41,167,0,0,41,167,0,0,40,167,0,0,42,167,0,0,43,167,0,0,43,167,0,0,42,167,0,0,44,167,0,0,45,167,0,0,45,167,0,0,44,167,0,0,46,167,0,0,47,167,0,0,47,167,0,0,46,167,0,0,50,167,0,0,51,167,0,0,51,167,0,0,50,167,0,0,52,167,0,0,53,167,0,0,53,167,0,0,52,167,0,0,54,167,0,0,55,167,0,0,55,167,0,0,54,167,0,0,56,167,0,0,57,167,0,0,57,167,0,0,56,167,0,0,58,167,0,0,59,167,0,0,59,167,0,0,58,167,0,0,60,167,0,0,61,167,0,0,61,167,0,0,60,167,0,0,62,167,0,0,63,167,0,0,63,167,0,0,62,167,0,0,64,167,0,0,65,167,0,0,65,167,0,0,64,167,0,0,66,167,0,0,67,167,0,0,67,167,0,0,66,167,0,0,68,167,0,0,69,167,0,0,69,167,0,0,68,167,0,0,70,167,0,0,71,167,0,0,71,167,0,0,70,167,0,0,72,167,0,0,73,167,0,0,73,167,0,0,72,167,0,0,74,167,0,0,75,167,0,0,75,167,0,0,74,167,0,0,76,167,0,0,77,167,0,0,77,167,0,0,76,167,0,0,78,167,0,0,79,167,0,0,79,167,0,0,78,167,0,0,80,167,0,0,81,167,0,0,81,167,0,0,80,167,0,0,82,167,0,0,83,167,0,0,83,167,0,0,82,167,0,0,84,167,0,0,85,167,0,0,85,167,0,0,84,167,0,0,86,167,0,0,87,167,0,0,87,167,0,0,86,167,0,0,88,167,0,0,89,167,0,0,89,167,0,0,88,167,0,0,90,167,0,0,91,167,0,0,91,167,0,0,90,167,0,0,92,167,0,0,93,167,0,0,93,167,0,0,92,167,0,0,94,167,0,0,95,167,0,0,95,167,0,0,94,167,0,0,96,167,0,0,97,167,0,0,97,167,0,0,96,167,0,0,98,167,0,0,99,167,0,0,99,167,0,0,98,167,0,0,100,167,0,0,101,167,0,0,101,167,0,0,100,167,0,0,102,167,0,0,103,167,0,0,103,167,0,0,102,167,0,0,104,167,0,0,105,167,0,0,105,167,0,0,104,167,0,0,106,167,0,0,107,167,0,0,107,167,0,0,106,167,0,0,108,167,0,0,109,167,0,0,109,167,0,0,108,167,0,0,110,167,0,0,111,167,0,0,111,167,0,0,110,167,0,0,121,167,0,0,122,167,0,0,122,167,0,0,121,167,0,0,123,167,0,0,124,167,0,0,124,167,0,0,123,167,0,0,125,167,0,0,121,29,0,0,126,167,0,0,127,167,0,0,127,167,0,0,126,167,0,0,128,167,0,0,129,167,0,0,129,167,0,0,128,167,0,0,130,167,0,0,131,167,0,0,131,167,0,0,130,167,0,0,132,167,0,0,133,167,0,0,133,167,0,0,132,167,0,0,134,167,0,0,135,167,0,0,135,167,0,0,134,167,0,0,139,167,0,0,140,167,0,0,140,167,0,0,139,167,0,0,141,167,0,0,101,2,0,0,144,167,0,0,145,167,0,0,145,167,0,0,144,167,0,0,146,167,0,0,147,167,0,0,147,167,0,0,146,167,0,0,150,167,0,0,151,167,0,0,151,167,0,0,150,167,0,0,152,167,0,0,153,167,0,0,153,167,0,0,152,167,0,0,154,167,0,0,155,167,0,0,155,167,0,0,154,167,0,0,156,167,0,0,157,167,0,0,157,167,0,0,156,167,0,0,158,167,0,0,159,167,0,0,159,167,0,0,158,167,0,0,160,167,0,0,161,167,0,0,161,167,0,0,160,167,0,0,162,167,0,0,163,167,0,0,163,167,0,0,162,167,0,0,164,167,0,0,165,167,0,0,165,167,0,0,164,167,0,0,166,167,0,0,167,167,0,0,167,167,0,0,166,167,0,0,168,167,0,0,169,167,0,0,169,167,0,0,168,167,0,0,170,167,0,0,102,2,0,0,171,167,0,0,92,2,0,0,172,167,0,0,97,2,0,0,173,167,0,0,108,2,0,0,176,167,0,0,158,2,0,0,177,167,0,0,135,2,0,0,178,167,0,0,157,2,0,0,179,167,0,0,83,171,0,0,180,167,0,0,181,167,0,0,181,167,0,0,180,167,0,0,182,167,0,0,183,167,0,0,183,167,0,0,182,167,0,0,83,171,0,0,179,167,0,0,112,171,0,0,160,19,0,0,113,171,0,0,161,19,0,0,114,171,0,0,162,19,0,0,115,171,0,0,163,19,0,0,116,171,0,0,164,19,0,0,117,171,0,0,165,19,0,0,118,171,0,0,166,19,0,0,119,171,0,0,167,19,0,0,120,171,0,0,168,19,0,0,121,171,0,0,169,19,0,0,122,171,0,0,170,19,0,0,123,171,0,0,171,19,0,0,124,171,0,0,172,19,0,0,125,171,0,0,173,19,0,0,126,171,0,0,174,19,0,0,127,171,0,0,175,19,0,0,128,171,0,0,176,19,0,0,129,171,0,0,177,19,0,0,130,171,0,0,178,19,0,0,131,171,0,0,179,19,0,0,132,171,0,0,180,19,0,0,133,171,0,0,181,19,0,0,134,171,0,0,182,19,0,0,135,171,0,0,183,19,0,0,136,171,0,0,184,19,0,0,137,171,0,0,185,19,0,0,138,171,0,0,186,19,0,0,139,171,0,0,187,19,0,0,140,171,0,0,188,19,0,0,141,171,0,0,189,19,0,0,142,171,0,0,190,19,0,0,143,171,0,0,191,19,0,0,144,171,0,0,192,19,0,0,145,171,0,0,193,19,0,0,146,171,0,0,194,19,0,0,147,171,0,0,195,19,0,0,148,171,0,0,196,19,0,0,149,171,0,0,197,19,0,0,150,171,0,0,198,19,0,0,151,171,0,0,199,19,0,0,152,171,0,0,200,19,0,0,153,171,0,0,201,19,0,0,154,171,0,0,202,19,0,0,155,171,0,0,203,19,0,0,156,171,0,0,204,19,0,0,157,171,0,0,205,19,0,0,158,171,0,0,206,19,0,0,159,171,0,0,207,19,0,0,160,171,0,0,208,19,0,0,161,171,0,0,209,19,0,0,162,171,0,0,210,19,0,0,163,171,0,0,211,19,0,0,164,171,0,0,212,19,0,0,165,171,0,0,213,19,0,0,166,171,0,0,214,19,0,0,167,171,0,0,215,19,0,0,168,171,0,0,216,19,0,0,169,171,0,0,217,19,0,0,170,171,0,0,218,19,0,0,171,171,0,0,219,19,0,0,172,171,0,0,220,19,0,0,173,171,0,0,221,19,0,0,174,171,0,0,222,19,0,0,175,171,0,0,223,19,0,0,176,171,0,0,224,19,0,0,177,171,0,0,225,19,0,0,178,171,0,0,226,19,0,0,179,171,0,0,227,19,0,0,180,171,0,0,228,19,0,0,181,171,0,0,229,19,0,0,182,171,0,0,230,19,0,0,183,171,0,0,231,19,0,0,184,171,0,0,232,19,0,0,185,171,0,0,233,19,0,0,186,171,0,0,234,19,0,0,187,171,0,0,235,19,0,0,188,171,0,0,236,19,0,0,189,171,0,0,237,19,0,0,190,171,0,0,238,19,0,0,191,171,0,0,239,19,0,0,33,255,0,0,65,255,0,0,34,255,0,0,66,255,0,0,35,255,0,0,67,255,0,0,36,255,0,0,68,255,0,0,37,255,0,0,69,255,0,0,38,255,0,0,70,255,0,0,39,255,0,0,71,255,0,0,40,255,0,0,72,255,0,0,41,255,0,0,73,255,0,0,42,255,0,0,74,255,0,0,43,255,0,0,75,255,0,0,44,255,0,0,76,255,0,0,45,255,0,0,77,255,0,0,46,255,0,0,78,255,0,0,47,255,0,0,79,255,0,0,48,255,0,0,80,255,0,0,49,255,0,0,81,255,0,0,50,255,0,0,82,255,0,0,51,255,0,0,83,255,0,0,52,255,0,0,84,255,0,0,53,255,0,0,85,255,0,0,54,255,0,0,86,255,0,0,55,255,0,0,87,255,0,0,56,255,0,0,88,255,0,0,57,255,0,0,89,255,0,0,58,255,0,0,90,255,0,0,65,255,0,0,33,255,0,0,66,255,0,0,34,255,0,0,67,255,0,0,35,255,0,0,68,255,0,0,36,255,0,0,69,255,0,0,37,255,0,0,70,255,0,0,38,255,0,0,71,255,0,0,39,255,0,0,72,255,0,0,40,255,0,0,73,255,0,0,41,255,0,0,74,255,0,0,42,255,0,0,75,255,0,0,43,255,0,0,76,255,0,0,44,255,0,0,77,255,0,0,45,255,0,0,78,255,0,0,46,255,0,0,79,255,0,0,47,255,0,0,80,255,0,0,48,255,0,0,81,255,0,0,49,255,0,0,82,255,0,0,50,255,0,0,83,255,0,0,51,255,0,0,84,255,0,0,52,255,0,0,85,255,0,0,53,255,0,0,86,255,0,0,54,255,0,0,87,255,0,0,55,255,0,0,88,255,0,0,56,255,0,0,89,255,0,0,57,255,0,0,90,255,0,0,58,255,0,0,0,4,1,0,40,4,1,0,1,4,1,0,41,4,1,0,2,4,1,0,42,4,1,0,3,4,1,0,43,4,1,0,4,4,1,0,44,4,1,0,5,4,1,0,45,4,1,0,6,4,1,0,46,4,1,0,7,4,1,0,47,4,1,0,8,4,1,0,48,4,1,0,9,4,1,0,49,4,1,0,10,4,1,0,50,4,1,0,11,4,1,0,51,4,1,0,12,4,1,0,52,4,1,0,13,4,1,0,53,4,1,0,14,4,1,0,54,4,1,0,15,4,1,0,55,4,1,0,16,4,1,0,56,4,1,0,17,4,1,0,57,4,1,0,18,4,1,0,58,4,1,0,19,4,1,0,59,4,1,0,20,4,1,0,60,4,1,0,21,4,1,0,61,4,1,0,22,4,1,0,62,4,1,0,23,4,1,0,63,4,1,0,24,4,1,0,64,4,1,0,25,4,1,0,65,4,1,0,26,4,1,0,66,4,1,0,27,4,1,0,67,4,1,0,28,4,1,0,68,4,1,0,29,4,1,0,69,4,1,0,30,4,1,0,70,4,1,0,31,4,1,0,71,4,1,0,32,4,1,0,72,4,1,0,33,4,1,0,73,4,1,0,34,4,1,0,74,4,1,0,35,4,1,0,75,4,1,0,36,4,1,0,76,4,1,0,37,4,1,0,77,4,1,0,38,4,1,0,78,4,1,0,39,4,1,0,79,4,1,0,40,4,1,0,0,4,1,0,41,4,1,0,1,4,1,0,42,4,1,0,2,4,1,0,43,4,1,0,3,4,1,0,44,4,1,0,4,4,1,0,45,4,1,0,5,4,1,0,46,4,1,0,6,4,1,0,47,4,1,0,7,4,1,0,48,4,1,0,8,4,1,0,49,4,1,0,9,4,1,0,50,4,1,0,10,4,1,0,51,4,1,0,11,4,1,0,52,4,1,0,12,4,1,0,53,4,1,0,13,4,1,0,54,4,1,0,14,4,1,0,55,4,1,0,15,4,1,0,56,4,1,0,16,4,1,0,57,4,1,0,17,4,1,0,58,4,1,0,18,4,1,0,59,4,1,0,19,4,1,0,60,4,1,0,20,4,1,0,61,4,1,0,21,4,1,0,62,4,1,0,22,4,1,0,63,4,1,0,23,4,1,0,64,4,1,0,24,4,1,0,65,4,1,0,25,4,1,0,66,4,1,0,26,4,1,0,67,4,1,0,27,4,1,0,68,4,1,0,28,4,1,0,69,4,1,0,29,4,1,0,70,4,1,0,30,4,1,0,71,4,1,0,31,4,1,0,72,4,1,0,32,4,1,0,73,4,1,0,33,4,1,0,74,4,1,0,34,4,1,0,75,4,1,0,35,4,1,0,76,4,1,0,36,4,1,0,77,4,1,0,37,4,1,0,78,4,1,0,38,4,1,0,79,4,1,0,39,4,1,0,128,12,1,0,192,12,1,0,129,12,1,0,193,12,1,0,130,12,1,0,194,12,1,0,131,12,1,0,195,12,1,0,132,12,1,0,196,12,1,0,133,12,1,0,197,12,1,0,134,12,1,0,198,12,1,0,135,12,1,0,199,12,1,0,136,12,1,0,200,12,1,0,137,12,1,0,201,12,1,0,138,12,1,0,202,12,1,0,139,12,1,0,203,12,1,0,140,12,1,0,204,12,1,0,141,12,1,0,205,12,1,0,142,12,1], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+20664);
/* memory initializer */ allocate([206,12,1,0,143,12,1,0,207,12,1,0,144,12,1,0,208,12,1,0,145,12,1,0,209,12,1,0,146,12,1,0,210,12,1,0,147,12,1,0,211,12,1,0,148,12,1,0,212,12,1,0,149,12,1,0,213,12,1,0,150,12,1,0,214,12,1,0,151,12,1,0,215,12,1,0,152,12,1,0,216,12,1,0,153,12,1,0,217,12,1,0,154,12,1,0,218,12,1,0,155,12,1,0,219,12,1,0,156,12,1,0,220,12,1,0,157,12,1,0,221,12,1,0,158,12,1,0,222,12,1,0,159,12,1,0,223,12,1,0,160,12,1,0,224,12,1,0,161,12,1,0,225,12,1,0,162,12,1,0,226,12,1,0,163,12,1,0,227,12,1,0,164,12,1,0,228,12,1,0,165,12,1,0,229,12,1,0,166,12,1,0,230,12,1,0,167,12,1,0,231,12,1,0,168,12,1,0,232,12,1,0,169,12,1,0,233,12,1,0,170,12,1,0,234,12,1,0,171,12,1,0,235,12,1,0,172,12,1,0,236,12,1,0,173,12,1,0,237,12,1,0,174,12,1,0,238,12,1,0,175,12,1,0,239,12,1,0,176,12,1,0,240,12,1,0,177,12,1,0,241,12,1,0,178,12,1,0,242,12,1,0,192,12,1,0,128,12,1,0,193,12,1,0,129,12,1,0,194,12,1,0,130,12,1,0,195,12,1,0,131,12,1,0,196,12,1,0,132,12,1,0,197,12,1,0,133,12,1,0,198,12,1,0,134,12,1,0,199,12,1,0,135,12,1,0,200,12,1,0,136,12,1,0,201,12,1,0,137,12,1,0,202,12,1,0,138,12,1,0,203,12,1,0,139,12,1,0,204,12,1,0,140,12,1,0,205,12,1,0,141,12,1,0,206,12,1,0,142,12,1,0,207,12,1,0,143,12,1,0,208,12,1,0,144,12,1,0,209,12,1,0,145,12,1,0,210,12,1,0,146,12,1,0,211,12,1,0,147,12,1,0,212,12,1,0,148,12,1,0,213,12,1,0,149,12,1,0,214,12,1,0,150,12,1,0,215,12,1,0,151,12,1,0,216,12,1,0,152,12,1,0,217,12,1,0,153,12,1,0,218,12,1,0,154,12,1,0,219,12,1,0,155,12,1,0,220,12,1,0,156,12,1,0,221,12,1,0,157,12,1,0,222,12,1,0,158,12,1,0,223,12,1,0,159,12,1,0,224,12,1,0,160,12,1,0,225,12,1,0,161,12,1,0,226,12,1,0,162,12,1,0,227,12,1,0,163,12,1,0,228,12,1,0,164,12,1,0,229,12,1,0,165,12,1,0,230,12,1,0,166,12,1,0,231,12,1,0,167,12,1,0,232,12,1,0,168,12,1,0,233,12,1,0,169,12,1,0,234,12,1,0,170,12,1,0,235,12,1,0,171,12,1,0,236,12,1,0,172,12,1,0,237,12,1,0,173,12,1,0,238,12,1,0,174,12,1,0,239,12,1,0,175,12,1,0,240,12,1,0,176,12,1,0,241,12,1,0,177,12,1,0,242,12,1,0,178,12,1,0,160,24,1,0,192,24,1,0,161,24,1,0,193,24,1,0,162,24,1,0,194,24,1,0,163,24,1,0,195,24,1,0,164,24,1,0,196,24,1,0,165,24,1,0,197,24,1,0,166,24,1,0,198,24,1,0,167,24,1,0,199,24,1,0,168,24,1,0,200,24,1,0,169,24,1,0,201,24,1,0,170,24,1,0,202,24,1,0,171,24,1,0,203,24,1,0,172,24,1,0,204,24,1,0,173,24,1,0,205,24,1,0,174,24,1,0,206,24,1,0,175,24,1,0,207,24,1,0,176,24,1,0,208,24,1,0,177,24,1,0,209,24,1,0,178,24,1,0,210,24,1,0,179,24,1,0,211,24,1,0,180,24,1,0,212,24,1,0,181,24,1,0,213,24,1,0,182,24,1,0,214,24,1,0,183,24,1,0,215,24,1,0,184,24,1,0,216,24,1,0,185,24,1,0,217,24,1,0,186,24,1,0,218,24,1,0,187,24,1,0,219,24,1,0,188,24,1,0,220,24,1,0,189,24,1,0,221,24,1,0,190,24,1,0,222,24,1,0,191,24,1,0,223,24,1,0,192,24,1,0,160,24,1,0,193,24,1,0,161,24,1,0,194,24,1,0,162,24,1,0,195,24,1,0,163,24,1,0,196,24,1,0,164,24,1,0,197,24,1,0,165,24,1,0,198,24,1,0,166,24,1,0,199,24,1,0,167,24,1,0,200,24,1,0,168,24,1,0,201,24,1,0,169,24,1,0,202,24,1,0,170,24,1,0,203,24,1,0,171,24,1,0,204,24,1,0,172,24,1,0,205,24,1,0,173,24,1,0,206,24,1,0,174,24,1,0,207,24,1,0,175,24,1,0,208,24,1,0,176,24,1,0,209,24,1,0,177,24,1,0,210,24,1,0,178,24,1,0,211,24,1,0,179,24,1,0,212,24,1,0,180,24,1,0,213,24,1,0,181,24,1,0,214,24,1,0,182,24,1,0,215,24,1,0,183,24,1,0,216,24,1,0,184,24,1,0,217,24,1,0,185,24,1,0,218,24,1,0,186,24,1,0,219,24,1,0,187,24,1,0,220,24,1,0,188,24,1,0,221,24,1,0,189,24,1,0,222,24,1,0,190,24,1,0,223,24,1,0,191,24,1,0,141,24,3,0,5,0,0,0,92,126,0,0,3,0,0,0,146,24,3,0,5,0,0,0,116,126,0,0,2,0,0,0,151,24,3,0,5,0,0,0,132,126,0,0,1,0,0,0,156,24,3,0,5,0,0,0,140,126,0,0,2,0,0,0,161,24,3,0,5,0,0,0,156,126,0,0,2,0,0,0,166,24,3,0,5,0,0,0,172,126,0,0,1,0,0,0,171,24,3,0,5,0,0,0,180,126,0,0,1,0,0,0,176,24,3,0,5,0,0,0,188,126,0,0,1,0,0,0,181,24,3,0,5,0,0,0,196,126,0,0,1,0,0,0,186,24,3,0,5,0,0,0,204,126,0,0,4,0,0,0,191,24,3,0,5,0,0,0,236,126,0,0,6,0,0,0,196,24,3,0,5,0,0,0,28,127,0,0,1,0,0,0,201,24,3,0,4,0,0,0,36,127,0,0,4,0,0,0,205,24,3,0,6,0,0,0,68,127,0,0,3,0,0,0,48,0,0,0,57,0,0,0,65,0,0,0,90,0,0,0,97,0,0,0,122,0,0,0,65,0,0,0,90,0,0,0,97,0,0,0,122,0,0,0,0,0,0,0,127,0,0,0,32,0,0,0,32,0,0,0,9,0,0,0,9,0,0,0,0,0,0,0,31,0,0,0,127,0,0,0,127,0,0,0,48,0,0,0,57,0,0,0,33,0,0,0,126,0,0,0,97,0,0,0,122,0,0,0,32,0,0,0,126,0,0,0,33,0,0,0,47,0,0,0,58,0,0,0,64,0,0,0,91,0,0,0,96,0,0,0,123,0,0,0,126,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,32,0,0,0,32,0,0,0,65,0,0,0,90,0,0,0,48,0,0,0,57,0,0,0,65,0,0,0,90,0,0,0,95,0,0,0,95,0,0,0,97,0,0,0,122,0,0,0,48,0,0,0,57,0,0,0,65,0,0,0,70,0,0,0,97,0,0,0,102,0,0,0,5,25,3,0,4,0,0,0,232,160,0,0,3,0,0,0,9,25,3,0,10,0,0,0,0,161,0,0,105,2,0,0,19,25,3,0,21,0,0,0,72,180,0,0,1,0,0,0,40,25,3,0,6,0,0,0,80,180,0,0,54,0,0,0,46,25,3,0,8,0,0,0,0,182,0,0,6,0,0,0,54,25,3,0,7,0,0,0,48,182,0,0,2,0,0,0,61,25,3,0,8,0,0,0,64,182,0,0,2,0,0,0,69,25,3,0,5,0,0,0,80,182,0,0,2,0,0,0,74,25,3,0,9,0,0,0,96,182,0,0,2,0,0,0,83,25,3,0,5,0,0,0,112,182,0,0,2,0,0,0,88,25,3,0,7,0,0,0,128,182,0,0,14,0,0,0,95,25,3,0,8,0,0,0,240,182,0,0,3,0,0,0,103,25,3,0,6,0,0,0,8,183,0,0,3,0,0,0,109,25,3,0,7,0,0,0,32,183,0,0,1,0,0,0,116,25,3,0,8,0,0,0,40,183,0,0,2,0,0,0,124,25,3,0,5,0,0,0,56,183,0,0,1,0,0,0,129,25,3,0,1,0,0,0,64,183,0,0,105,2,0,0,130,25,3,0,19,0,0,0,136,202,0,0,2,0,0,0,149,25,3,0,6,0,0,0,152,202,0,0,1,0,0,0,155,25,3,0,18,0,0,0,160,202,0,0,2,0,0,0,173,25,3,0,2,0,0,0,176,202,0,0,2,0,0,0,175,25,3,0,2,0,0,0,192,202,0,0,17,0,0,0,177,25,3,0,6,0,0,0,72,203,0,0,2,0,0,0,183,25,3,0,4,0,0,0,88,203,0,0,4,0,0,0,187,25,3,0,8,0,0,0,120,203,0,0,3,0,0,0,195,25,3,0,2,0,0,0,144,203,0,0,101,2,0,0,197,25,3,0,2,0,0,0,184,222,0,0,3,0,0,0,199,25,3,0,6,0,0,0,208,222,0,0,161,0,0,0,205,25,3,0,6,0,0,0,216,227,0,0,3,0,0,0,211,25,3,0,9,0,0,0,240,227,0,0,4,0,0,0,220,25,3,0,7,0,0,0,16,228,0,0,6,0,0,0,227,25,3,0,8,0,0,0,64,228,0,0,7,0,0,0,235,25,3,0,28,0,0,0,120,228,0,0,17,0,0,0,7,26,3,0,7,0,0,0,0,229,0,0,1,0,0,0,14,26,3,0,10,0,0,0,8,229,0,0,4,0,0,0,24,26,3,0,8,0,0,0,40,229,0,0,5,0,0,0,32,26,3,0,20,0,0,0,80,229,0,0,1,0,0,0,52,26,3,0,7,0,0,0,88,229,0,0,1,0,0,0,59,26,3,0,8,0,0,0,96,229,0,0,32,0,0,0,67,26,3,0,8,0,0,0,96,230,0,0,8,0,0,0,75,26,3,0,10,0,0,0,160,230,0,0,2,0,0,0,85,26,3,0,6,0,0,0,176,230,0,0,1,0,0,0,91,26,3,0,7,0,0,0,184,230,0,0,15,0,0,0,98,26,3,0,15,0,0,0,48,231,0,0,27,1,0,0,113,26,3,0,5,0,0,0,8,240,0,0,36,0,0,0,118,26,3,0,8,0,0,0,40,241,0,0,14,0,0,0,126,26,3,0,8,0,0,0,152,241,0,0,16,0,0,0,134,26,3,0,3,0,0,0,24,242,0,0,16,0,0,0,137,26,3,0,6,0,0,0,152,242,0,0,14,0,0,0,143,26,3,0,7,0,0,0,8,243,0,0,1,0,0,0,150,26,3,0,6,0,0,0,16,243,0,0,3,0,0,0,156,26,3,0,6,0,0,0,40,243,0,0,9,0,0,0,162,26,3,0,8,0,0,0,112,243,0,0,4,0,0,0,170,26,3,0,16,0,0,0,144,243,0,0,2,0,0,0,186,26,3,0,9,0,0,0,160,243,0,0,27,0,0,0,195,26,3,0,21,0,0,0,120,244,0,0,2,0,0,0,216,26,3,0,22,0,0,0,136,244,0,0,2,0,0,0,238,26,3,0,8,0,0,0,152,244,0,0,3,0,0,0,246,26,3,0,12,0,0,0,176,244,0,0,1,0,0,0,2,27,3,0,6,0,0,0,184,244,0,0,1,0,0,0,8,27,3,0,7,0,0,0,192,244,0,0,14,0,0,0,15,27,3,0,8,0,0,0,48,245,0,0,8,0,0,0,23,27,3,0,8,0,0,0,112,245,0,0,2,0,0,0,31,27,3,0,10,0,0,0,128,245,0,0,8,0,0,0,41,27,3,0,5,0,0,0,192,245,0,0,4,0,0,0,46,27,3,0,6,0,0,0,224,245,0,0,2,0,0,0,52,27,3,0,9,0,0,0,240,245,0,0,2,0,0,0,61,27,3,0,1,0,0,0,0,246,0,0,42,2,0,0,62,27,3,0,2,0,0,0,80,7,1,0,122,0,0,0,64,27,3,0,3,0,0,0,32,11,1,0,18,0,0,0,67,27,3,0,5,0,0,0,176,11,1,0,31,0,0,0,72,27,3,0,6,0,0,0,168,12,1,0,3,0,0,0,78,27,3,0,5,0,0,0,192,12,1,0,5,0,0,0,83,27,3,0,8,0,0,0,232,12,1,0,3,0,0,0,91,27,3,0,8,0,0,0,0,13,1,0,7,0,0,0,99,27,3,0,4,0,0,0,56,13,1,0,1,0,0,0,103,27,3,0,2,0,0,0,64,13,1,0,118,2,0,0,105,27,3,0,2,0,0,0,240,32,1,0,56,0,0,0,107,27,3,0,2,0,0,0,176,34,1,0,177,1,0,0,109,27,3,0,9,0,0,0,56,48,1,0,125,2,0,0,118,27,3,0,2,0,0,0,32,68,1,0,10,0,0,0,120,27,3,0,2,0,0,0,112,68,1,0,113,2,0,0,122,27,3,0,6,0,0,0,248,87,1,0,1,0,0,0,128,27,3,0,6,0,0,0,0,88,1,0,2,0,0,0,134,27,3,0,1,0,0,0,16,88,1,0,236,0,0,0,135,27,3,0,8,0,0,0,112,95,1,0,1,0,0,0,143,27,3,0,9,0,0,0,120,95,1,0,11,0,0,0,152,27,3,0,7,0,0,0,208,95,1,0,2,0,0,0,159,27,3,0,10,0,0,0,224,95,1,0,2,0,0,0,169,27,3,0,2,0,0,0,240,95,1,0,147,0,0,0,171,27,3,0,2,0,0,0,136,100,1,0,5,0,0,0,173,27,3,0,12,0,0,0,176,100,1,0,3,0,0,0,185,27,3,0,13,0,0,0,200,100,1,0,2,0,0,0,198,27,3,0,16,0,0,0,216,100,1,0,3,0,0,0,214,27,3,0,20,0,0,0,240,100,1,0,1,0,0,0,234,27,3,0,4,0,0,0,248,100,1,0,3,0,0,0,238,27,3,0,2,0,0,0,16,101,1,0,10,1,0,0,240,27,3,0,4,0,0,0,96,109,1,0,2,0,0,0,244,27,3,0,9,0,0,0,112,109,1,0,6,0,0,0,253,27,3,0,3,0,0,0,160,109,1,0,3,0,0,0,0,28,3,0,7,0,0,0,184,109,1,0,5,0,0,0,7,28,3,0,7,0,0,0,224,109,1,0,3,0,0,0,14,28,3,0,1,0,0,0,248,109,1,0,63,0,0,0,15,28,3,0,9,0,0,0,240,111,1,0,2,0,0,0,24,28,3,0,2,0,0,0,124,138,0,0,51,0,0,0,26,28,3,0,11,0,0,0,0,112,1,0,4,0,0,0,37,28,3,0,3,0,0,0,32,112,1,0,1,0,0,0,40,28,3,0,2,0,0,0,40,112,1,0,12,0,0,0,42,28,3,0,2,0,0,0,136,112,1,0,58,0,0,0,44,28,3,0,23,0,0,0,88,114,1,0,18,0,0,0,67,28,3,0,5,0,0,0,232,114,1,0,1,0,0,0,72,28,3,0,8,0,0,0,240,114,1,0,1,0,0,0,80,28,3,0,13,0,0,0,248,114,1,0,3,0,0,0,93,28,3,0,10,0,0,0,16,115,1,0,1,0,0,0,103,28,3,0,17,0,0,0,24,115,1,0,1,0,0,0,120,28,3,0,10,0,0,0,32,115,1,0,1,0,0,0,130,28,3,0,11,0,0,0,40,115,1,0,2,0,0,0,141,28,3,0,17,0,0,0,56,115,1,0,1,0,0,0,158,28,3,0,10,0,0,0,64,115,1,0,1,0,0,0,168,28,3,0,5,0,0,0,72,115,1,0,14,0,0,0,173,28,3,0,7,0,0,0,184,115,1,0,2,0,0,0,180,28,3,0,1,0,0,0,200,115,1,0,161,0,0,0,181,28,3,0,12,0,0,0,208,120,1,0,5,0,0,0,193,28,3,0,9,0,0,0,248,120,1,0,1,0,0,0,202,28,3,0,11,0,0,0,0,121,1,0,1,0,0,0,213,28,3,0,2,0,0,0,8,121,1,0,6,0,0,0,215,28,3,0,2,0,0,0,56,121,1,0,17,0,0,0,217,28,3,0,2,0,0,0,192,121,1,0,72,0,0,0,219,28,3,0,2,0,0,0,0,124,1,0,10,0,0,0,221,28,3,0,8,0,0,0,80,124,1,0,1,0,0,0,229,28,3,0,10,0,0,0,88,124,1,0,2,0,0,0,239,28,3,0,2,0,0,0,104,124,1,0,11,0,0,0,241,28,3,0,2,0,0,0,192,124,1,0,157,0,0,0,243,28,3,0,2,0,0,0,168,129,1,0,75,0,0,0,245,28,3,0,15,0,0,0,0,132,1,0,3,0,0,0,4,29,3,0,6,0,0,0,24,132,1,0,2,0,0,0,10,29,3,0,5,0,0,0,40,132,1,0,2,0,0,0,15,29,3,0,1,0,0,0,56,132,1,0,214,0,0,0,16,29,3,0,9,0,0,0,232,138,1,0,2,0,0,0,25,29,3,0,10,0,0,0,248,138,1,0,2,0,0,0,35,29,3,0,2,0,0,0,8,139,1,0,17,0,0,0,37,29,3,0,7,0,0,0,144,139,1,0,2,0,0,0,44,29,3,0,7,0,0,0,160,139,1,0,1,0,0,0,51,29,3,0,7,0,0,0,168,139,1,0,2,0,0,0,58,29,3,0,11,0,0,0,184,139,1,0,3,0,0,0,69,29,3,0,7,0,0,0,208,139,1,0,13,0,0,0,76,29,3,0,2,0,0,0,56,140,1,0,29,0,0,0,78,29,3,0,2,0,0,0,32,141,1,0,64,0,0,0,80,29,3,0,2,0,0,0,32,143,1,0,170,0,0,0,82,29,3,0,12,0,0,0,112,148,1,0,2,0,0,0,94,29,3,0,9,0,0,0,128,148,1,0,2,0,0,0,103,29,3,0,12,0,0,0,144,148,1,0,1,0,0,0,115,29,3,0,6,0,0,0,152,148,1,0,3,0,0,0,121,29,3,0,7,0,0,0,176,148,1,0,2,0,0,0,128,29,3,0,8,0,0,0,192,148,1,0,3,0,0,0,136,29,3,0,6,0,0,0,216,148,1,0,2,0,0,0,142,29,3,0,8,0,0,0,232,148,1,0,5,0,0,0,150,29,3,0,8,0,0,0,16,149,1,0,2,0,0,0,158,29,3,0,5,0,0,0,32,149,1,0,2,0,0,0,163,29,3,0,5,0,0,0,48,149,1,0,16,0,0,0,168,29,3,0,6,0,0,0,176,149,1,0,13,0,0,0,174,29,3,0,6,0,0,0,24,150,1,0,1,0,0,0,180,29,3,0,4,0,0,0,32,150,1,0,2,0,0,0,184,29,3,0,7,0,0,0,48,150,1,0,7,0,0,0,191,29,3,0,8,0,0,0,104,150,1,0,3,0,0,0,199,29,3,0,7,0,0,0,128,150,1,0,2,0,0,0,206,29,3,0,8,0,0,0,144,150,1,0,2,0,0,0,214,29,3,0,9,0,0,0,160,150,1,0,118,2,0,0,223,29,3,0,3,0,0,0,80,170,1,0,1,0,0,0,226,29,3,0,11,0,0,0,88,170,1,0,2,0,0,0,237,29,3,0,11,0,0,0,20,140,0,0,10,0,0,0,248,29,3,0,12,0,0,0,104,170,1,0,146,2,0,0,4,30,3,0,9,0,0,0,248,190,1,0,50,2,0,0,13,30,3,0,2,0,0,0,136,208,1,0,2,0,0,0,15,30,3,0,1,0,0,0,152,208,1,0,8,0,0,0,16,30,3,0,2,0,0,0,216,208,1,0,1,0,0,0,18,30,3,0,2,0,0,0,224,208,1,0,1,0,0,0,20,30,3,0,2,0,0,0,232,208,1,0,7,0,0,0,48,0,0,0,57,0,0,0,96,6,0,0,105,6,0,0,240,6,0,0,249,6,0,0,192,7,0,0,201,7,0,0,102,9,0,0,111,9,0,0,230,9,0,0,239,9,0,0,102,10,0,0,111,10,0,0,230,10,0,0,239,10,0,0,102,11,0,0,111,11,0,0,230,11,0,0,239,11,0,0,102,12,0,0,111,12,0,0,230,12,0,0,239,12,0,0,102,13,0,0,111,13,0,0,230,13,0,0,239,13,0,0,80,14,0,0,89,14,0,0,208,14,0,0,217,14,0,0,32,15,0,0,41,15,0,0,64,16,0,0,73,16,0,0,144,16,0,0,153,16,0,0,224,23,0,0,233,23,0,0,16,24,0,0,25,24,0,0,70,25,0,0,79,25,0,0,208,25,0,0,217,25,0,0,128,26,0,0,137,26,0,0,144,26,0,0,153,26,0,0,80,27,0,0,89,27,0,0,176,27,0,0,185,27,0,0,64,28,0,0,73,28,0,0,80,28,0,0,89,28,0,0,32,166,0,0,41,166,0,0,208,168,0,0,217,168,0,0,0,169,0,0,9,169,0,0,208,169,0,0,217,169,0,0,240,169,0,0,249,169,0,0,80,170,0,0,89,170,0,0,240,171,0,0,249,171,0,0,16,255,0,0,25,255,0,0,160,4,1,0,169,4,1,0,102,16,1,0,111,16,1,0,240,16,1,0,249,16,1,0,54,17,1,0,63,17,1,0,208,17,1,0,217,17,1,0,240,18,1,0,249,18,1,0,208,20,1,0,217,20,1,0,80,22,1,0,89,22,1,0,192,22,1,0,201,22,1,0,48,23,1,0,57,23,1,0,224,24,1,0,233,24,1,0,96,106,1,0,105,106,1,0,80,107,1,0,89,107,1,0,206,215,1,0,255,215,1,0,9,0,0,0,13,0,0,0,32,0,0,0,32,0,0,0,133,0,0,0,133,0,0,0,160,0,0,0,160,0,0,0,128,22,0,0,128,22,0,0,0,32,0,0,10,32,0,0,40,32,0,0,41,32,0,0,47,32,0,0,47,32,0,0,95,32,0,0,95,32,0,0,0,48,0,0,0,48,0,0,48,0,0,0,57,0,0,0,65,0,0,0,90,0,0,0,95,0,0,0,95,0,0,0,97,0,0,0,122,0,0,0,170,0,0,0,170,0,0,0,181,0,0,0,181,0,0,0,186,0,0,0,186,0,0,0,192,0,0,0,214,0,0,0,216,0,0,0,246,0,0,0,248,0,0,0,193,2,0,0,198,2,0,0,209,2,0,0,224,2,0,0,228,2,0,0,236,2,0,0,236,2,0,0,238,2,0,0,238,2,0,0,0,3,0,0,116,3,0,0,118,3,0,0,119,3,0,0,122,3,0,0,125,3,0,0,127,3,0,0,127,3,0,0,134,3,0,0,134,3,0,0,136,3,0,0,138,3,0,0,140,3,0,0,140,3,0,0,142,3,0,0,161,3,0,0,163,3,0,0,245,3,0,0,247,3,0,0,129,4,0,0,131,4,0,0,47,5,0,0,49,5,0,0,86,5,0,0,89,5,0,0,89,5,0,0,97,5,0,0,135,5,0,0,145,5,0,0,189,5,0,0,191,5,0,0,191,5,0,0,193,5,0,0,194,5,0,0,196,5,0,0,197,5,0,0,199,5,0,0,199,5,0,0,208,5,0,0,234,5,0,0,240,5,0,0,242,5,0,0,16,6,0,0,26,6,0,0,32,6,0,0,105,6,0,0,110,6,0,0,211,6,0,0,213,6,0,0,220,6,0,0,223,6,0,0,232,6,0,0,234,6,0,0,252,6,0,0,255,6,0,0,255,6,0,0,16,7,0,0,74,7,0,0,77,7,0,0,177,7,0,0,192,7,0,0,245,7,0,0,250,7,0,0,250,7,0,0,0,8,0,0,45,8,0,0,64,8,0,0,91,8,0,0,160,8,0,0,180,8,0,0,227,8,0,0,99,9,0,0,102,9,0,0,111,9,0,0,113,9,0,0,131,9,0,0,133,9,0,0,140,9,0,0,143,9,0,0,144,9,0,0,147,9,0,0,168,9,0,0,170,9,0,0,176,9,0,0,178,9,0,0,178,9,0,0,182,9,0,0,185,9,0,0,188,9,0,0,196,9,0,0,199,9,0,0,200,9,0,0,203,9,0,0,206,9,0,0,215,9,0,0,215,9,0,0,220,9,0,0,221,9,0,0,223,9,0,0,227,9,0,0,230,9,0,0,241,9,0,0,1,10,0,0,3,10,0,0,5,10,0,0,10,10,0,0,15,10,0,0,16,10,0,0,19,10,0,0,40,10,0,0,42,10,0,0,48,10,0,0,50,10,0,0,51,10,0,0,53,10,0,0,54,10,0,0,56,10,0,0,57,10,0,0,60,10,0,0,60,10,0,0,62,10,0,0,66,10,0,0,71,10,0,0,72,10,0,0,75,10,0,0,77,10,0,0,81,10,0,0,81,10,0,0,89,10,0,0,92,10,0,0,94,10,0,0,94,10,0,0,102,10,0,0,117,10,0,0,129,10,0,0,131,10,0,0,133,10,0,0,141,10,0,0,143,10,0,0,145,10,0,0,147,10,0,0,168,10,0,0,170,10,0,0,176,10,0,0,178,10,0,0,179,10,0,0,181,10,0,0,185,10,0,0,188,10,0,0,197,10,0,0,199,10,0,0,201,10,0,0,203,10,0,0,205,10,0,0,208,10,0,0,208,10,0,0,224,10,0,0,227,10,0,0,230,10,0,0,239,10,0,0,249,10,0,0,249,10,0,0,1,11,0,0,3,11,0,0,5,11,0,0,12,11,0,0,15,11,0,0,16,11,0,0,19,11,0,0,40,11,0,0,42,11,0,0,48,11,0,0,50,11,0,0,51,11,0,0,53,11,0,0,57,11,0,0,60,11,0,0,68,11,0,0,71,11,0,0,72,11,0,0,75,11,0,0,77,11,0,0,86,11,0,0,87,11,0,0,92,11,0,0,93,11,0,0,95,11,0,0,99,11,0,0,102,11,0,0,111,11,0,0,113,11,0,0,113,11,0,0,130,11,0,0,131,11,0,0,133,11,0,0,138,11,0,0,142,11,0,0,144,11,0,0,146,11,0,0,149,11,0,0,153,11,0,0,154,11,0,0,156,11,0,0,156,11,0,0,158,11,0,0,159,11,0,0,163,11,0,0,164,11,0,0,168,11,0,0,170,11,0,0,174,11,0,0,185,11,0,0,190,11,0,0,194,11,0,0,198,11,0,0,200,11,0,0,202,11,0,0,205,11,0,0,208,11,0,0,208,11,0,0,215,11,0,0,215,11,0,0,230,11,0,0,239,11,0,0,0,12,0,0,3,12,0,0,5,12,0,0,12,12,0,0,14,12,0,0,16,12,0,0,18,12,0,0,40,12,0,0,42,12,0,0,57,12,0,0,61,12,0,0,68,12,0,0,70,12,0,0,72,12,0,0,74,12,0,0,77,12,0,0,85,12,0,0,86,12,0,0,88,12,0,0,90,12,0,0,96,12,0,0,99,12,0,0,102,12,0,0,111,12,0,0,129,12,0,0,131,12,0,0,133,12,0,0,140,12,0,0,142,12,0,0,144,12,0,0,146,12,0,0,168,12,0,0,170,12,0,0,179,12,0,0,181,12,0,0,185,12,0,0,188,12,0,0,196,12,0,0,198,12,0,0,200,12,0,0,202,12,0,0,205,12,0,0,213,12,0,0,214,12,0,0,222,12,0,0,222,12,0,0,224,12,0,0,227,12,0,0,230,12,0,0,239,12,0,0,241,12,0,0,242,12,0,0,1,13,0,0,3,13,0,0,5,13,0,0,12,13,0,0,14,13,0,0,16,13,0,0,18,13,0,0,58,13,0,0,61,13,0,0,68,13,0,0,70,13,0,0,72,13,0,0,74,13,0,0,78,13,0,0,87,13,0,0,87,13,0,0,95,13,0,0,99,13,0,0,102,13,0,0,111,13,0,0,122,13,0,0,127,13,0,0,130,13,0,0,131,13,0,0,133,13,0,0,150,13,0,0,154,13,0,0,177,13,0,0,179,13,0,0,187,13,0,0,189,13,0,0,189,13,0,0,192,13,0,0,198,13,0,0,202,13,0,0,202,13,0,0,207,13,0,0,212,13,0,0,214,13,0,0,214,13,0,0,216,13,0,0,223,13,0,0,230,13,0,0,239,13,0,0,242,13,0,0,243,13,0,0,1,14,0,0,58,14,0,0,64,14,0,0,78,14,0,0,80,14,0,0,89,14,0,0,129,14,0,0,130,14,0,0,132,14,0,0,132,14,0,0,135,14,0,0,136,14,0,0,138,14,0,0,138,14,0,0,141,14,0,0,141,14,0,0,148,14,0,0,151,14,0,0,153,14,0,0,159,14,0,0,161,14,0,0,163,14,0,0,165,14,0,0,165,14,0,0,167,14,0,0,167,14,0,0,170,14,0,0,171,14,0,0,173,14,0,0,185,14,0,0,187,14,0,0,189,14,0,0,192,14,0,0,196,14,0,0,198,14,0,0,198,14,0,0,200,14,0,0,205,14,0,0,208,14,0,0,217,14,0,0,220,14,0,0,223,14,0,0,0,15,0,0,0,15,0,0,24,15,0,0,25,15,0,0,32,15,0,0,41,15,0,0,53,15,0,0,53,15,0,0,55,15,0,0,55,15,0,0,57,15,0,0,57,15,0,0,62,15,0,0,71,15,0,0,73,15,0,0,108,15,0,0,113,15,0,0,132,15,0,0,134,15,0,0,151,15,0,0,153,15,0,0,188,15,0,0,198,15,0,0,198,15,0,0,0,16,0,0,73,16,0,0,80,16,0,0,157,16,0,0,160,16,0,0,197,16,0,0,199,16,0,0,199,16,0,0,205,16,0,0,205,16,0,0,208,16,0,0,250,16,0,0,252,16,0,0,72,18,0,0,74,18,0,0,77,18,0,0,80,18,0,0,86,18,0,0,88,18,0,0,88,18,0,0,90,18,0,0,93,18,0,0,96,18,0,0,136,18,0,0,138,18,0,0,141,18,0,0,144,18,0,0,176,18,0,0,178,18,0,0,181,18,0,0,184,18,0,0,190,18,0,0,192,18,0,0,192,18,0,0,194,18,0,0,197,18,0,0,200,18,0,0,214,18,0,0,216,18,0,0,16,19,0,0,18,19,0,0,21,19,0,0,24,19,0,0,90,19,0,0,93,19,0,0,95,19,0,0,128,19,0,0,143,19,0,0,160,19,0,0,245,19,0,0,248,19,0,0,253,19,0,0,1,20,0,0,108,22,0,0,111,22,0,0,127,22,0,0,129,22,0,0,154,22,0,0,160,22,0,0,234,22,0,0,238,22,0,0,248,22,0,0,0,23,0,0,12,23,0,0,14,23,0,0,20,23,0,0,32,23,0,0,52,23,0,0,64,23,0,0,83,23,0,0,96,23,0,0,108,23,0,0,110,23,0,0,112,23,0,0,114,23,0,0,115,23,0,0,128,23,0,0,211,23,0,0,215,23,0,0,215,23,0,0,220,23,0,0,221,23,0,0,224,23,0,0,233,23,0,0,11,24,0,0,13,24,0,0,16,24,0,0,25,24,0,0,32,24,0,0,119,24,0,0,128,24,0,0,170,24,0,0,176,24,0,0,245,24,0,0,0,25,0,0,30,25,0,0,32,25,0,0,43,25,0,0,48,25,0,0,59,25,0,0,70,25,0,0,109,25,0,0,112,25,0,0,116,25,0,0,128,25,0,0,171,25,0,0,176,25,0,0,201,25,0,0,208,25,0,0,217,25,0,0,0,26,0,0,27,26,0,0,32,26,0,0,94,26,0,0,96,26,0,0,124,26,0,0,127,26,0,0,137,26,0,0,144,26,0,0,153,26,0,0,167,26,0,0,167,26,0,0,176,26,0,0,190,26,0,0,0,27,0,0,75,27,0,0,80,27,0,0,89,27,0,0,107,27,0,0,115,27,0,0,128,27,0,0,243,27,0,0,0,28,0,0,55,28,0,0,64,28,0,0,73,28,0,0,77,28,0,0,125,28,0,0,208,28,0,0,210,28,0,0,212,28,0,0,246,28,0,0,248,28,0,0,249,28,0,0,0,29,0,0,245,29,0,0,252,29,0,0,21,31,0,0,24,31,0,0,29,31,0,0,32,31,0,0,69,31,0,0,72,31,0,0,77,31,0,0,80,31,0,0,87,31,0,0,89,31,0,0,89,31,0,0,91,31,0,0,91,31,0,0,93,31,0,0,93,31,0,0,95,31,0,0,125,31,0,0,128,31,0,0,180,31,0,0,182,31,0,0,188,31,0,0,190,31,0,0,190,31,0,0,194,31,0,0,196,31,0,0,198,31,0,0,204,31,0,0,208,31,0,0,211,31,0,0,214,31,0,0,219,31,0,0,224,31,0,0,236,31,0,0,242,31,0,0,244,31,0,0,246,31,0,0,252,31,0,0,12,32,0,0,13,32,0,0,63,32,0,0,64,32,0,0,84,32,0,0,84,32,0,0,113,32,0,0,113,32,0,0,127,32,0,0,127,32,0,0,144,32,0,0,156,32,0,0,208,32,0,0,240,32,0,0,2,33,0,0,2,33,0,0,7,33,0,0,7,33,0,0,10,33,0,0,19,33,0,0,21,33,0,0,21,33,0,0,25,33,0,0,29,33,0,0,36,33,0,0,36,33,0,0,38,33,0,0,38,33,0,0,40,33,0,0,40,33,0,0,42,33,0,0,45,33,0,0,47,33,0,0,57,33,0,0,60,33,0,0,63,33,0,0,69,33,0,0,73,33,0,0,78,33,0,0,78,33,0,0,96,33,0,0,136,33,0,0,182,36,0,0,233,36,0,0,0,44,0,0,46,44,0,0,48,44,0,0,94,44,0,0,96,44,0,0,228,44,0,0,235,44,0,0,243,44,0,0,0,45,0,0,37,45,0,0,39,45,0,0,39,45,0,0,45,45,0,0,45,45,0,0,48,45,0,0,103,45,0,0,111,45,0,0,111,45,0,0,127,45,0,0,150,45,0,0,160,45,0,0,166,45,0,0,168,45,0,0,174,45,0,0,176,45,0,0,182,45,0,0,184,45,0,0,190,45,0,0,192,45,0,0,198,45,0,0,200,45,0,0,206,45,0,0,208,45,0,0,214,45,0,0,216,45,0,0,222,45,0,0,224,45,0,0,255,45,0,0,47,46,0,0,47,46,0,0,5,48,0,0,7,48,0,0,33,48,0,0,47,48,0,0,49,48,0,0,53,48,0,0,56,48,0,0,60,48,0,0,65,48,0,0,150,48,0,0,153,48,0,0,154,48,0,0,157,48,0,0,159,48,0,0,161,48,0,0,250,48,0,0,252,48,0,0,255,48,0,0,5,49,0,0,45,49,0,0,49,49,0,0,142,49,0,0,160,49,0,0,186,49,0,0,240,49,0,0,255,49,0,0,0,52,0,0,181,77,0,0,0,78,0,0,213,159,0,0,0,160,0,0,140,164,0,0,208,164,0,0,253,164,0,0,0,165,0,0,12,166,0,0,16,166,0,0,43,166,0,0,64,166,0,0,114,166,0,0,116,166,0,0,125,166,0,0,127,166,0,0,241,166,0,0,23,167,0,0,31,167,0,0,34,167,0,0,136,167,0,0,139,167,0,0,173,167,0,0,176,167,0,0,183,167,0,0,247,167,0,0,39,168,0,0,64,168,0,0,115,168,0,0,128,168,0,0,196,168,0,0,208,168,0,0,217,168,0,0,224,168,0,0,247,168,0,0,251,168,0,0,251,168,0,0,253,168,0,0,253,168,0,0,0,169,0,0,45,169,0,0,48,169,0,0,83,169,0,0,96,169,0,0,124,169,0,0,128,169,0,0,192,169,0,0,207,169,0,0,217,169,0,0,224,169,0,0,254,169,0,0,0,170,0,0,54,170,0,0,64,170,0,0,77,170,0,0,80,170,0,0,89,170,0,0,96,170,0,0,118,170,0,0,122,170,0,0,194,170,0,0,219,170,0,0,221,170,0,0,224,170,0,0,239,170,0,0,242,170,0,0,246,170,0,0,1,171,0,0,6,171,0,0,9,171,0,0,14,171,0,0,17,171,0,0,22,171,0,0,32,171,0,0,38,171,0,0,40,171,0,0,46,171,0,0,48,171,0,0,90,171,0,0,92,171,0,0,101,171,0,0,112,171,0,0,234,171,0,0,236,171,0,0,237,171,0,0,240,171,0,0,249,171,0,0,0,172,0,0,163,215,0,0,176,215,0,0,198,215,0,0,203,215,0,0,251,215,0,0,0,249,0,0,109,250,0,0,112,250,0,0,217,250,0,0,0,251,0,0,6,251,0,0,19,251,0,0,23,251,0,0,29,251,0,0,40,251,0,0,42,251,0,0,54,251,0,0,56,251,0,0,60,251,0,0,62,251,0,0,62,251,0,0,64,251,0,0,65,251,0,0,67,251,0,0,68,251,0,0,70,251,0,0,177,251,0,0,211,251,0,0,61,253,0,0,80,253,0,0,143,253,0,0,146,253,0,0,199,253,0,0,240,253,0,0,251,253,0,0,0,254,0,0,15,254,0,0,32,254,0,0,47,254,0,0,51,254,0,0,52,254,0,0,77,254,0,0,79,254,0,0,112,254,0,0,116,254,0,0,118,254,0,0,252,254,0,0,16,255,0,0,25,255,0,0,33,255,0,0,58,255,0,0,63,255,0,0,63,255,0,0,65,255,0,0,90,255,0,0,102,255,0,0,190,255,0,0,194,255,0,0,199,255,0,0,202,255,0,0,207,255,0,0,210,255,0,0,215,255,0,0,218,255,0,0,220,255,0,0,0,0,1,0,11,0,1,0,13,0,1,0,38,0,1,0,40,0,1,0,58,0,1,0,60,0,1,0,61,0,1,0,63,0,1,0,77,0,1,0,80,0,1,0,93,0,1,0,128,0,1,0,250,0,1,0,64,1,1,0,116,1,1,0,253,1,1,0,253,1,1,0,128,2,1,0,156,2,1,0,160,2,1,0,208,2,1,0,224,2,1,0,224,2,1,0,0,3,1,0,31,3,1,0,48,3,1,0,74,3,1,0,80,3,1,0,122,3,1,0,128,3,1,0,157,3,1,0,160,3,1,0,195,3,1,0,200,3,1,0,207,3,1,0,209,3,1,0,213,3,1,0,0,4,1,0,157,4,1,0,160,4,1,0,169,4,1,0,0,5,1,0,39,5,1,0,48,5,1,0,99,5,1,0,0,6,1,0,54,7,1,0,64,7,1,0,85,7,1,0,96,7,1,0,103,7,1,0,0,8,1,0,5,8,1,0,8,8,1,0,8,8,1,0,10,8,1,0,53,8,1,0,55,8,1,0,56,8,1,0,60,8,1,0,60,8,1,0,63,8,1,0,85,8,1,0,96,8,1,0,118,8,1,0,128,8,1,0,158,8,1,0,224,8,1,0,242,8,1,0,244,8,1,0,245,8,1,0,0,9,1,0,21,9,1,0,32,9,1,0,57,9,1,0,128,9,1,0,183,9,1,0,190,9,1,0,191,9,1,0,0,10,1,0,3,10,1,0,5,10,1,0,6,10,1,0,12,10,1,0,19,10,1,0,21,10,1,0,23,10,1,0,25,10,1,0,51,10,1,0,56,10,1,0,58,10,1,0,63,10,1,0,63,10,1,0,96,10,1,0,124,10,1,0,128,10,1,0,156,10,1,0,192,10,1,0,199,10,1,0,201,10,1,0,230,10,1,0,0,11,1,0,53,11,1,0,64,11,1,0,85,11,1,0,96,11,1,0,114,11,1,0,128,11,1,0,145,11,1,0,0,12,1,0,72,12,1,0,128,12,1,0,178,12,1,0,192,12,1,0,242,12,1,0,0,16,1,0,70,16,1,0,102,16,1,0,111,16,1,0,127,16,1,0,186,16,1,0,208,16,1,0,232,16,1,0,240,16,1,0,249,16,1,0,0,17,1,0,52,17,1,0,54,17,1,0,63,17,1,0,80,17,1,0,115,17,1,0,118,17,1,0,118,17,1,0,128,17,1,0,196,17,1,0,202,17,1,0,204,17,1,0,208,17,1,0,218,17,1,0,220,17,1,0,220,17,1,0,0,18,1,0,17,18,1,0,19,18,1,0,55,18,1,0,128,18,1,0,134,18,1,0,136,18,1,0,136,18,1,0,138,18,1,0,141,18,1,0,143,18,1,0,157,18,1,0,159,18,1,0,168,18,1,0,176,18,1,0,234,18,1,0,240,18,1,0,249,18,1,0,0,19,1,0,3,19,1,0,5,19,1,0,12,19,1,0,15,19,1,0,16,19,1,0,19,19,1,0,40,19,1,0,42,19,1,0,48,19,1,0,50,19,1,0,51,19,1,0,53,19,1,0,57,19,1,0,60,19,1,0,68,19,1,0,71,19,1,0,72,19,1,0,75,19,1,0,77,19,1,0,80,19,1,0,80,19,1,0,87,19,1,0,87,19,1,0,93,19,1,0,99,19,1,0,102,19,1,0,108,19,1,0,112,19,1,0,116,19,1,0,128,20,1,0,197,20,1,0,199,20,1,0,199,20,1,0,208,20,1,0,217,20,1,0,128,21,1,0,181,21,1,0,184,21,1,0,192,21,1,0,216,21,1,0,221,21,1,0,0,22,1,0,64,22,1,0,68,22,1,0,68,22,1,0,80,22,1,0,89,22,1,0,128,22,1,0,183,22,1,0,192,22,1,0,201,22,1,0,0,23,1,0,25,23,1,0,29,23,1,0,43,23,1,0,48,23,1,0,57,23,1,0,160,24,1,0,233,24,1,0,255,24,1,0,255,24,1,0,192,26,1,0,248,26,1,0,0,32,1,0,153,35,1,0,0,36,1,0,110,36,1,0,128,36,1,0,67,37,1,0,0,48,1,0,46,52,1,0,0,68,1,0,70,70,1,0,0,104,1,0,56,106,1,0,64,106,1,0,94,106,1,0,96,106,1,0,105,106,1,0,208,106,1,0,237,106,1,0,240,106,1,0,244,106,1,0,0,107,1,0,54,107,1,0,64,107,1,0,67,107,1,0,80,107,1,0,89,107,1,0,99,107,1,0,119,107,1,0,125,107,1,0,143,107,1,0,0,111,1,0,68,111,1,0,80,111,1,0,126,111,1,0,143,111,1,0,159,111,1,0,0,176,1,0,1,176,1,0,0,188,1,0,106,188,1,0,112,188,1,0,124,188,1,0,128,188,1,0,136,188,1,0,144,188,1,0,153,188,1,0,157,188,1,0,158,188,1,0,101,209,1,0,105,209,1,0,109,209,1,0,114,209,1,0,123,209,1,0,130,209,1,0,133,209,1,0,139,209,1,0,170,209,1,0,173,209,1,0,66,210,1,0,68,210,1,0,0,212,1,0,84,212,1,0,86,212,1,0,156,212,1,0,158,212,1,0,159,212,1,0,162,212,1,0,162,212,1,0,165,212,1,0,166,212,1,0,169,212,1,0,172,212,1,0,174,212,1,0,185,212,1,0,187,212,1,0,187,212,1,0,189,212,1,0,195,212,1,0,197,212,1,0,5,213,1,0,7,213,1,0,10,213,1,0,13,213,1,0,20,213,1,0,22,213,1,0,28,213,1,0,30,213,1,0,57,213,1,0,59,213,1,0,62,213,1,0,64,213,1,0,68,213,1,0,70,213,1,0,70,213,1,0,74,213,1,0,80,213,1,0,82,213,1,0,165,214,1,0,168,214,1,0,192,214,1,0,194,214,1,0,218,214,1,0,220,214,1,0,250,214,1,0,252,214,1,0,20,215,1,0,22,215,1,0,52,215,1,0,54,215,1,0,78,215,1,0,80,215,1,0,110,215,1,0,112,215,1,0,136,215,1,0,138,215,1,0,168,215,1,0,170,215,1,0,194,215,1,0,196,215,1,0,203,215,1,0,206,215,1,0,255,215,1,0,0,218,1,0,54,218,1,0,59,218,1,0,108,218,1,0,117,218,1,0,117,218,1,0,132,218,1,0,132,218,1,0,155,218,1,0,159,218,1,0,161,218,1,0,175,218,1,0,0,232,1,0,196,232,1,0,208,232,1,0,214,232,1,0,0,238,1,0,3,238,1,0,5,238,1,0,31,238,1,0,33,238,1,0,34,238,1,0,36,238,1,0,36,238,1,0,39,238,1,0,39,238,1,0,41,238,1,0,50,238,1,0,52,238,1,0,55,238,1,0,57,238,1,0,57,238,1,0,59,238,1,0,59,238,1,0,66,238,1,0,66,238,1,0,71,238,1,0,71,238,1,0,73,238,1,0,73,238,1,0,75,238,1,0,75,238,1,0,77,238,1,0,79,238,1,0,81,238,1,0,82,238,1,0,84,238,1,0,84,238,1,0,87,238,1,0,87,238,1,0,89,238,1,0,89,238,1,0,91,238,1,0,91,238,1,0,93,238,1,0,93,238,1,0,95,238,1,0,95,238,1,0,97,238,1,0,98,238,1,0,100,238,1,0,100,238,1,0,103,238,1,0,106,238,1,0,108,238,1,0,114,238,1,0,116,238,1,0,119,238,1,0,121,238,1,0,124,238,1,0,126,238,1,0,126,238,1,0,128,238,1,0,137,238,1,0,139,238,1,0,155,238,1,0,161,238,1,0,163,238,1,0,165,238,1,0,169,238,1,0,171,238,1,0,187,238,1,0,48,241,1,0,73,241,1,0,80,241,1,0,105,241,1,0,112,241,1,0,137,241,1,0,0,0,2,0,214,166,2,0,0,167,2,0,52,183,2,0,64,183,2], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+30904);
/* memory initializer */ allocate([29,184,2,0,32,184,2,0,161,206,2,0,0,248,2,0,29,250,2,0,0,1,14,0,239,1,14,0,176,23,3,0,91,0,0,0,154,2,0,0,0,23,1,0,25,23,1,0,29,23,1,0,43,23,1,0,48,23,1,0,63,23,1,0,65,0,0,0,90,0,0,0,97,0,0,0,122,0,0,0,170,0,0,0,170,0,0,0,181,0,0,0,181,0,0,0,186,0,0,0,186,0,0,0,192,0,0,0,214,0,0,0,216,0,0,0,246,0,0,0,248,0,0,0,193,2,0,0,198,2,0,0,209,2,0,0,224,2,0,0,228,2,0,0,236,2,0,0,236,2,0,0,238,2,0,0,238,2,0,0,69,3,0,0,69,3,0,0,112,3,0,0,116,3,0,0,118,3,0,0,119,3,0,0,122,3,0,0,125,3,0,0,127,3,0,0,127,3,0,0,134,3,0,0,134,3,0,0,136,3,0,0,138,3,0,0,140,3,0,0,140,3,0,0,142,3,0,0,161,3,0,0,163,3,0,0,245,3,0,0,247,3,0,0,129,4,0,0,138,4,0,0,47,5,0,0,49,5,0,0,86,5,0,0,89,5,0,0,89,5,0,0,97,5,0,0,135,5,0,0,176,5,0,0,189,5,0,0,191,5,0,0,191,5,0,0,193,5,0,0,194,5,0,0,196,5,0,0,197,5,0,0,199,5,0,0,199,5,0,0,208,5,0,0,234,5,0,0,240,5,0,0,242,5,0,0,16,6,0,0,26,6,0,0,32,6,0,0,87,6,0,0,89,6,0,0,95,6,0,0,110,6,0,0,211,6,0,0,213,6,0,0,220,6,0,0,225,6,0,0,232,6,0,0,237,6,0,0,239,6,0,0,250,6,0,0,252,6,0,0,255,6,0,0,255,6,0,0,16,7,0,0,63,7,0,0,77,7,0,0,177,7,0,0,202,7,0,0,234,7,0,0,244,7,0,0,245,7,0,0,250,7,0,0,250,7,0,0,0,8,0,0,23,8,0,0,26,8,0,0,44,8,0,0,64,8,0,0,88,8,0,0,160,8,0,0,180,8,0,0,227,8,0,0,233,8,0,0,240,8,0,0,59,9,0,0,61,9,0,0,76,9,0,0,78,9,0,0,80,9,0,0,85,9,0,0,99,9,0,0,113,9,0,0,131,9,0,0,133,9,0,0,140,9,0,0,143,9,0,0,144,9,0,0,147,9,0,0,168,9,0,0,170,9,0,0,176,9,0,0,178,9,0,0,178,9,0,0,182,9,0,0,185,9,0,0,189,9,0,0,196,9,0,0,199,9,0,0,200,9,0,0,203,9,0,0,204,9,0,0,206,9,0,0,206,9,0,0,215,9,0,0,215,9,0,0,220,9,0,0,221,9,0,0,223,9,0,0,227,9,0,0,240,9,0,0,241,9,0,0,1,10,0,0,3,10,0,0,5,10,0,0,10,10,0,0,15,10,0,0,16,10,0,0,19,10,0,0,40,10,0,0,42,10,0,0,48,10,0,0,50,10,0,0,51,10,0,0,53,10,0,0,54,10,0,0,56,10,0,0,57,10,0,0,62,10,0,0,66,10,0,0,71,10,0,0,72,10,0,0,75,10,0,0,76,10,0,0,81,10,0,0,81,10,0,0,89,10,0,0,92,10,0,0,94,10,0,0,94,10,0,0,112,10,0,0,117,10,0,0,129,10,0,0,131,10,0,0,133,10,0,0,141,10,0,0,143,10,0,0,145,10,0,0,147,10,0,0,168,10,0,0,170,10,0,0,176,10,0,0,178,10,0,0,179,10,0,0,181,10,0,0,185,10,0,0,189,10,0,0,197,10,0,0,199,10,0,0,201,10,0,0,203,10,0,0,204,10,0,0,208,10,0,0,208,10,0,0,224,10,0,0,227,10,0,0,249,10,0,0,249,10,0,0,1,11,0,0,3,11,0,0,5,11,0,0,12,11,0,0,15,11,0,0,16,11,0,0,19,11,0,0,40,11,0,0,42,11,0,0,48,11,0,0,50,11,0,0,51,11,0,0,53,11,0,0,57,11,0,0,61,11,0,0,68,11,0,0,71,11,0,0,72,11,0,0,75,11,0,0,76,11,0,0,86,11,0,0,87,11,0,0,92,11,0,0,93,11,0,0,95,11,0,0,99,11,0,0,113,11,0,0,113,11,0,0,130,11,0,0,131,11,0,0,133,11,0,0,138,11,0,0,142,11,0,0,144,11,0,0,146,11,0,0,149,11,0,0,153,11,0,0,154,11,0,0,156,11,0,0,156,11,0,0,158,11,0,0,159,11,0,0,163,11,0,0,164,11,0,0,168,11,0,0,170,11,0,0,174,11,0,0,185,11,0,0,190,11,0,0,194,11,0,0,198,11,0,0,200,11,0,0,202,11,0,0,204,11,0,0,208,11,0,0,208,11,0,0,215,11,0,0,215,11,0,0,0,12,0,0,3,12,0,0,5,12,0,0,12,12,0,0,14,12,0,0,16,12,0,0,18,12,0,0,40,12,0,0,42,12,0,0,57,12,0,0,61,12,0,0,68,12,0,0,70,12,0,0,72,12,0,0,74,12,0,0,76,12,0,0,85,12,0,0,86,12,0,0,88,12,0,0,90,12,0,0,96,12,0,0,99,12,0,0,129,12,0,0,131,12,0,0,133,12,0,0,140,12,0,0,142,12,0,0,144,12,0,0,146,12,0,0,168,12,0,0,170,12,0,0,179,12,0,0,181,12,0,0,185,12,0,0,189,12,0,0,196,12,0,0,198,12,0,0,200,12,0,0,202,12,0,0,204,12,0,0,213,12,0,0,214,12,0,0,222,12,0,0,222,12,0,0,224,12,0,0,227,12,0,0,241,12,0,0,242,12,0,0,1,13,0,0,3,13,0,0,5,13,0,0,12,13,0,0,14,13,0,0,16,13,0,0,18,13,0,0,58,13,0,0,61,13,0,0,68,13,0,0,70,13,0,0,72,13,0,0,74,13,0,0,76,13,0,0,78,13,0,0,78,13,0,0,87,13,0,0,87,13,0,0,95,13,0,0,99,13,0,0,122,13,0,0,127,13,0,0,130,13,0,0,131,13,0,0,133,13,0,0,150,13,0,0,154,13,0,0,177,13,0,0,179,13,0,0,187,13,0,0,189,13,0,0,189,13,0,0,192,13,0,0,198,13,0,0,207,13,0,0,212,13,0,0,214,13,0,0,214,13,0,0,216,13,0,0,223,13,0,0,242,13,0,0,243,13,0,0,1,14,0,0,58,14,0,0,64,14,0,0,70,14,0,0,77,14,0,0,77,14,0,0,129,14,0,0,130,14,0,0,132,14,0,0,132,14,0,0,135,14,0,0,136,14,0,0,138,14,0,0,138,14,0,0,141,14,0,0,141,14,0,0,148,14,0,0,151,14,0,0,153,14,0,0,159,14,0,0,161,14,0,0,163,14,0,0,165,14,0,0,165,14,0,0,167,14,0,0,167,14,0,0,170,14,0,0,171,14,0,0,173,14,0,0,185,14,0,0,187,14,0,0,189,14,0,0,192,14,0,0,196,14,0,0,198,14,0,0,198,14,0,0,205,14,0,0,205,14,0,0,220,14,0,0,223,14,0,0,0,15,0,0,0,15,0,0,64,15,0,0,71,15,0,0,73,15,0,0,108,15,0,0,113,15,0,0,129,15,0,0,136,15,0,0,151,15,0,0,153,15,0,0,188,15,0,0,0,16,0,0,54,16,0,0,56,16,0,0,56,16,0,0,59,16,0,0,63,16,0,0,80,16,0,0,98,16,0,0,101,16,0,0,104,16,0,0,110,16,0,0,134,16,0,0,142,16,0,0,142,16,0,0,156,16,0,0,157,16,0,0,160,16,0,0,197,16,0,0,199,16,0,0,199,16,0,0,205,16,0,0,205,16,0,0,208,16,0,0,250,16,0,0,252,16,0,0,72,18,0,0,74,18,0,0,77,18,0,0,80,18,0,0,86,18,0,0,88,18,0,0,88,18,0,0,90,18,0,0,93,18,0,0,96,18,0,0,136,18,0,0,138,18,0,0,141,18,0,0,144,18,0,0,176,18,0,0,178,18,0,0,181,18,0,0,184,18,0,0,190,18,0,0,192,18,0,0,192,18,0,0,194,18,0,0,197,18,0,0,200,18,0,0,214,18,0,0,216,18,0,0,16,19,0,0,18,19,0,0,21,19,0,0,24,19,0,0,90,19,0,0,95,19,0,0,95,19,0,0,128,19,0,0,143,19,0,0,160,19,0,0,245,19,0,0,248,19,0,0,253,19,0,0,1,20,0,0,108,22,0,0,111,22,0,0,127,22,0,0,129,22,0,0,154,22,0,0,160,22,0,0,234,22,0,0,238,22,0,0,248,22,0,0,0,23,0,0,12,23,0,0,14,23,0,0,19,23,0,0,32,23,0,0,51,23,0,0,64,23,0,0,83,23,0,0,96,23,0,0,108,23,0,0,110,23,0,0,112,23,0,0,114,23,0,0,115,23,0,0,128,23,0,0,179,23,0,0,182,23,0,0,200,23,0,0,215,23,0,0,215,23,0,0,220,23,0,0,220,23,0,0,32,24,0,0,119,24,0,0,128,24,0,0,170,24,0,0,176,24,0,0,245,24,0,0,0,25,0,0,30,25,0,0,32,25,0,0,43,25,0,0,48,25,0,0,56,25,0,0,80,25,0,0,109,25,0,0,112,25,0,0,116,25,0,0,128,25,0,0,171,25,0,0,176,25,0,0,201,25,0,0,0,26,0,0,27,26,0,0,32,26,0,0,94,26,0,0,97,26,0,0,116,26,0,0,167,26,0,0,167,26,0,0,0,27,0,0,51,27,0,0,53,27,0,0,67,27,0,0,69,27,0,0,75,27,0,0,128,27,0,0,169,27,0,0,172,27,0,0,175,27,0,0,186,27,0,0,229,27,0,0,231,27,0,0,241,27,0,0,0,28,0,0,53,28,0,0,77,28,0,0,79,28,0,0,90,28,0,0,125,28,0,0,233,28,0,0,236,28,0,0,238,28,0,0,243,28,0,0,245,28,0,0,246,28,0,0,0,29,0,0,191,29,0,0,231,29,0,0,244,29,0,0,0,30,0,0,21,31,0,0,24,31,0,0,29,31,0,0,32,31,0,0,69,31,0,0,72,31,0,0,77,31,0,0,80,31,0,0,87,31,0,0,89,31,0,0,89,31,0,0,91,31,0,0,91,31,0,0,93,31,0,0,93,31,0,0,95,31,0,0,125,31,0,0,128,31,0,0,180,31,0,0,182,31,0,0,188,31,0,0,190,31,0,0,190,31,0,0,194,31,0,0,196,31,0,0,198,31,0,0,204,31,0,0,208,31,0,0,211,31,0,0,214,31,0,0,219,31,0,0,224,31,0,0,236,31,0,0,242,31,0,0,244,31,0,0,246,31,0,0,252,31,0,0,113,32,0,0,113,32,0,0,127,32,0,0,127,32,0,0,144,32,0,0,156,32,0,0,2,33,0,0,2,33,0,0,7,33,0,0,7,33,0,0,10,33,0,0,19,33,0,0,21,33,0,0,21,33,0,0,25,33,0,0,29,33,0,0,36,33,0,0,36,33,0,0,38,33,0,0,38,33,0,0,40,33,0,0,40,33,0,0,42,33,0,0,45,33,0,0,47,33,0,0,57,33,0,0,60,33,0,0,63,33,0,0,69,33,0,0,73,33,0,0,78,33,0,0,78,33,0,0,96,33,0,0,136,33,0,0,182,36,0,0,233,36,0,0,0,44,0,0,46,44,0,0,48,44,0,0,94,44,0,0,96,44,0,0,228,44,0,0,235,44,0,0,238,44,0,0,242,44,0,0,243,44,0,0,0,45,0,0,37,45,0,0,39,45,0,0,39,45,0,0,45,45,0,0,45,45,0,0,48,45,0,0,103,45,0,0,111,45,0,0,111,45,0,0,128,45,0,0,150,45,0,0,160,45,0,0,166,45,0,0,168,45,0,0,174,45,0,0,176,45,0,0,182,45,0,0,184,45,0,0,190,45,0,0,192,45,0,0,198,45,0,0,200,45,0,0,206,45,0,0,208,45,0,0,214,45,0,0,216,45,0,0,222,45,0,0,224,45,0,0,255,45,0,0,47,46,0,0,47,46,0,0,5,48,0,0,7,48,0,0,33,48,0,0,41,48,0,0,49,48,0,0,53,48,0,0,56,48,0,0,60,48,0,0,65,48,0,0,150,48,0,0,157,48,0,0,159,48,0,0,161,48,0,0,250,48,0,0,252,48,0,0,255,48,0,0,5,49,0,0,45,49,0,0,49,49,0,0,142,49,0,0,160,49,0,0,186,49,0,0,240,49,0,0,255,49,0,0,0,52,0,0,181,77,0,0,0,78,0,0,213,159,0,0,0,160,0,0,140,164,0,0,208,164,0,0,253,164,0,0,0,165,0,0,12,166,0,0,16,166,0,0,31,166,0,0,42,166,0,0,43,166,0,0,64,166,0,0,110,166,0,0,116,166,0,0,123,166,0,0,127,166,0,0,239,166,0,0,23,167,0,0,31,167,0,0,34,167,0,0,136,167,0,0,139,167,0,0,173,167,0,0,176,167,0,0,183,167,0,0,247,167,0,0,1,168,0,0,3,168,0,0,5,168,0,0,7,168,0,0,10,168,0,0,12,168,0,0,39,168,0,0,64,168,0,0,115,168,0,0,128,168,0,0,195,168,0,0,242,168,0,0,247,168,0,0,251,168,0,0,251,168,0,0,253,168,0,0,253,168,0,0,10,169,0,0,42,169,0,0,48,169,0,0,82,169,0,0,96,169,0,0,124,169,0,0,128,169,0,0,178,169,0,0,180,169,0,0,191,169,0,0,207,169,0,0,207,169,0,0,224,169,0,0,228,169,0,0,230,169,0,0,239,169,0,0,250,169,0,0,254,169,0,0,0,170,0,0,54,170,0,0,64,170,0,0,77,170,0,0,96,170,0,0,118,170,0,0,122,170,0,0,122,170,0,0,126,170,0,0,190,170,0,0,192,170,0,0,192,170,0,0,194,170,0,0,194,170,0,0,219,170,0,0,221,170,0,0,224,170,0,0,239,170,0,0,242,170,0,0,245,170,0,0,1,171,0,0,6,171,0,0,9,171,0,0,14,171,0,0,17,171,0,0,22,171,0,0,32,171,0,0,38,171,0,0,40,171,0,0,46,171,0,0,48,171,0,0,90,171,0,0,92,171,0,0,101,171,0,0,112,171,0,0,234,171,0,0,0,172,0,0,163,215,0,0,176,215,0,0,198,215,0,0,203,215,0,0,251,215,0,0,0,249,0,0,109,250,0,0,112,250,0,0,217,250,0,0,0,251,0,0,6,251,0,0,19,251,0,0,23,251,0,0,29,251,0,0,40,251,0,0,42,251,0,0,54,251,0,0,56,251,0,0,60,251,0,0,62,251,0,0,62,251,0,0,64,251,0,0,65,251,0,0,67,251,0,0,68,251,0,0,70,251,0,0,177,251,0,0,211,251,0,0,61,253,0,0,80,253,0,0,143,253,0,0,146,253,0,0,199,253,0,0,240,253,0,0,251,253,0,0,112,254,0,0,116,254,0,0,118,254,0,0,252,254,0,0,33,255,0,0,58,255,0,0,65,255,0,0,90,255,0,0,102,255,0,0,190,255,0,0,194,255,0,0,199,255,0,0,202,255,0,0,207,255,0,0,210,255,0,0,215,255,0,0,218,255,0,0,220,255,0,0,0,0,1,0,11,0,1,0,13,0,1,0,38,0,1,0,40,0,1,0,58,0,1,0,60,0,1,0,61,0,1,0,63,0,1,0,77,0,1,0,80,0,1,0,93,0,1,0,128,0,1,0,250,0,1,0,64,1,1,0,116,1,1,0,128,2,1,0,156,2,1,0,160,2,1,0,208,2,1,0,0,3,1,0,31,3,1,0,48,3,1,0,74,3,1,0,80,3,1,0,122,3,1,0,128,3,1,0,157,3,1,0,160,3,1,0,195,3,1,0,200,3,1,0,207,3,1,0,209,3,1,0,213,3,1,0,0,4,1,0,157,4,1,0,0,5,1,0,39,5,1,0,48,5,1,0,99,5,1,0,0,6,1,0,54,7,1,0,64,7,1,0,85,7,1,0,96,7,1,0,103,7,1,0,0,8,1,0,5,8,1,0,8,8,1,0,8,8,1,0,10,8,1,0,53,8,1,0,55,8,1,0,56,8,1,0,60,8,1,0,60,8,1,0,63,8,1,0,85,8,1,0,96,8,1,0,118,8,1,0,128,8,1,0,158,8,1,0,224,8,1,0,242,8,1,0,244,8,1,0,245,8,1,0,0,9,1,0,21,9,1,0,32,9,1,0,57,9,1,0,128,9,1,0,183,9,1,0,190,9,1,0,191,9,1,0,0,10,1,0,3,10,1,0,5,10,1,0,6,10,1,0,12,10,1,0,19,10,1,0,21,10,1,0,23,10,1,0,25,10,1,0,51,10,1,0,96,10,1,0,124,10,1,0,128,10,1,0,156,10,1,0,192,10,1,0,199,10,1,0,201,10,1,0,228,10,1,0,0,11,1,0,53,11,1,0,64,11,1,0,85,11,1,0,96,11,1,0,114,11,1,0,128,11,1,0,145,11,1,0,0,12,1,0,72,12,1,0,128,12,1,0,178,12,1,0,192,12,1,0,242,12,1,0,0,16,1,0,69,16,1,0,130,16,1,0,184,16,1,0,208,16,1,0,232,16,1,0,0,17,1,0,50,17,1,0,80,17,1,0,114,17,1,0,118,17,1,0,118,17,1,0,128,17,1,0,191,17,1,0,193,17,1,0,196,17,1,0,218,17,1,0,218,17,1,0,220,17,1,0,220,17,1,0,0,18,1,0,17,18,1,0,19,18,1,0,52,18,1,0,55,18,1,0,55,18,1,0,128,18,1,0,134,18,1,0,136,18,1,0,136,18,1,0,138,18,1,0,141,18,1,0,143,18,1,0,157,18,1,0,159,18,1,0,168,18,1,0,176,18,1,0,232,18,1,0,0,19,1,0,3,19,1,0,5,19,1,0,12,19,1,0,15,19,1,0,16,19,1,0,19,19,1,0,40,19,1,0,42,19,1,0,48,19,1,0,50,19,1,0,51,19,1,0,53,19,1,0,57,19,1,0,61,19,1,0,68,19,1,0,71,19,1,0,72,19,1,0,75,19,1,0,76,19,1,0,80,19,1,0,80,19,1,0,87,19,1,0,87,19,1,0,93,19,1,0,99,19,1,0,128,20,1,0,193,20,1,0,196,20,1,0,197,20,1,0,199,20,1,0,199,20,1,0,128,21,1,0,181,21,1,0,184,21,1,0,190,21,1,0,216,21,1,0,221,21,1,0,0,22,1,0,62,22,1,0,64,22,1,0,64,22,1,0,68,22,1,0,68,22,1,0,128,22,1,0,181,22,1,0,0,23,1,0,25,23,1,0,29,23,1,0,42,23,1,0,160,24,1,0,223,24,1,0,255,24,1,0,255,24,1,0,192,26,1,0,248,26,1,0,0,32,1,0,153,35,1,0,0,36,1,0,110,36,1,0,128,36,1,0,67,37,1,0,0,48,1,0,46,52,1,0,0,68,1,0,70,70,1,0,0,104,1,0,56,106,1,0,64,106,1,0,94,106,1,0,208,106,1,0,237,106,1,0,0,107,1,0,54,107,1,0,64,107,1,0,67,107,1,0,99,107,1,0,119,107,1,0,125,107,1,0,143,107,1,0,0,111,1,0,68,111,1,0,80,111,1,0,126,111,1,0,147,111,1,0,159,111,1,0,0,176,1,0,1,176,1,0,0,188,1,0,106,188,1,0,112,188,1,0,124,188,1,0,128,188,1,0,136,188,1,0,144,188,1,0,153,188,1,0,158,188,1,0,158,188,1,0,0,212,1,0,84,212,1,0,86,212,1,0,156,212,1,0,158,212,1,0,159,212,1,0,162,212,1,0,162,212,1,0,165,212,1,0,166,212,1,0,169,212,1,0,172,212,1,0,174,212,1,0,185,212,1,0,187,212,1,0,187,212,1,0,189,212,1,0,195,212,1,0,197,212,1,0,5,213,1,0,7,213,1,0,10,213,1,0,13,213,1,0,20,213,1,0,22,213,1,0,28,213,1,0,30,213,1,0,57,213,1,0,59,213,1,0,62,213,1,0,64,213,1,0,68,213,1,0,70,213,1,0,70,213,1,0,74,213,1,0,80,213,1,0,82,213,1,0,165,214,1,0,168,214,1,0,192,214,1,0,194,214,1,0,218,214,1,0,220,214,1,0,250,214,1,0,252,214,1,0,20,215,1,0,22,215,1,0,52,215,1,0,54,215,1,0,78,215,1,0,80,215,1,0,110,215,1,0,112,215,1,0,136,215,1,0,138,215,1,0,168,215,1,0,170,215,1,0,194,215,1,0,196,215,1,0,203,215,1,0,0,232,1,0,196,232,1,0,0,238,1,0,3,238,1,0,5,238,1,0,31,238,1,0,33,238,1,0,34,238,1,0,36,238,1,0,36,238,1,0,39,238,1,0,39,238,1,0,41,238,1,0,50,238,1,0,52,238,1,0,55,238,1,0,57,238,1,0,57,238,1,0,59,238,1,0,59,238,1,0,66,238,1,0,66,238,1,0,71,238,1,0,71,238,1,0,73,238,1,0,73,238,1,0,75,238,1,0,75,238,1,0,77,238,1,0,79,238,1,0,81,238,1,0,82,238,1,0,84,238,1,0,84,238,1,0,87,238,1,0,87,238,1,0,89,238,1,0,89,238,1,0,91,238,1,0,91,238,1,0,93,238,1,0,93,238,1,0,95,238,1,0,95,238,1,0,97,238,1,0,98,238,1,0,100,238,1,0,100,238,1,0,103,238,1,0,106,238,1,0,108,238,1,0,114,238,1,0,116,238,1,0,119,238,1,0,121,238,1,0,124,238,1,0,126,238,1,0,126,238,1,0,128,238,1,0,137,238,1,0,139,238,1,0,155,238,1,0,161,238,1,0,163,238,1,0,165,238,1,0,169,238,1,0,171,238,1,0,187,238,1,0,48,241,1,0,73,241,1,0,80,241,1,0,105,241,1,0,112,241,1,0,137,241,1,0,0,0,2,0,214,166,2,0,0,167,2,0,52,183,2,0,64,183,2,0,29,184,2,0,32,184,2,0,161,206,2,0,0,248,2,0,29,250,2,0,0,68,1,0,70,70,1,0,0,6,0,0,4,6,0,0,6,6,0,0,11,6,0,0,13,6,0,0,26,6,0,0,30,6,0,0,30,6,0,0,32,6,0,0,63,6,0,0,65,6,0,0,74,6,0,0,86,6,0,0,111,6,0,0,113,6,0,0,220,6,0,0,222,6,0,0,255,6,0,0,80,7,0,0,127,7,0,0,160,8,0,0,180,8,0,0,227,8,0,0,255,8,0,0,80,251,0,0,193,251,0,0,211,251,0,0,61,253,0,0,80,253,0,0,143,253,0,0,146,253,0,0,199,253,0,0,240,253,0,0,253,253,0,0,112,254,0,0,116,254,0,0,118,254,0,0,252,254,0,0,96,14,1,0,126,14,1,0,0,238,1,0,3,238,1,0,5,238,1,0,31,238,1,0,33,238,1,0,34,238,1,0,36,238,1,0,36,238,1,0,39,238,1,0,39,238,1,0,41,238,1,0,50,238,1,0,52,238,1,0,55,238,1,0,57,238,1,0,57,238,1,0,59,238,1,0,59,238,1,0,66,238,1,0,66,238,1,0,71,238,1,0,71,238,1,0,73,238,1,0,73,238,1,0,75,238,1,0,75,238,1,0,77,238,1,0,79,238,1,0,81,238,1,0,82,238,1,0,84,238,1,0,84,238,1,0,87,238,1,0,87,238,1,0,89,238,1,0,89,238,1,0,91,238,1,0,91,238,1,0,93,238,1,0,93,238,1,0,95,238,1,0,95,238,1,0,97,238,1,0,98,238,1,0,100,238,1,0,100,238,1,0,103,238,1,0,106,238,1,0,108,238,1,0,114,238,1,0,116,238,1,0,119,238,1,0,121,238,1,0,124,238,1,0,126,238,1,0,126,238,1,0,128,238,1,0,137,238,1,0,139,238,1,0,155,238,1,0,161,238,1,0,163,238,1,0,165,238,1,0,169,238,1,0,171,238,1,0,187,238,1,0,240,238,1,0,241,238,1,0,49,5,0,0,86,5,0,0,89,5,0,0,95,5,0,0,97,5,0,0,135,5,0,0,138,5,0,0,138,5,0,0,141,5,0,0,143,5,0,0,19,251,0,0,23,251,0,0,0,11,1,0,53,11,1,0,57,11,1,0,63,11,1,0,0,27,0,0,75,27,0,0,80,27,0,0,124,27,0,0,160,166,0,0,247,166,0,0,0,104,1,0,56,106,1,0,208,106,1,0,237,106,1,0,240,106,1,0,245,106,1,0,192,27,0,0,243,27,0,0,252,27,0,0,255,27,0,0,128,9,0,0,131,9,0,0,133,9,0,0,140,9,0,0,143,9,0,0,144,9,0,0,147,9,0,0,168,9,0,0,170,9,0,0,176,9,0,0,178,9,0,0,178,9,0,0,182,9,0,0,185,9,0,0,188,9,0,0,196,9,0,0,199,9,0,0,200,9,0,0,203,9,0,0,206,9,0,0,215,9,0,0,215,9,0,0,220,9,0,0,221,9,0,0,223,9,0,0,227,9,0,0,230,9,0,0,251,9,0,0,234,2,0,0,235,2,0,0,5,49,0,0,45,49,0,0,160,49,0,0,186,49,0,0,0,16,1,0,77,16,1,0,82,16,1,0,111,16,1,0,127,16,1,0,127,16,1,0,0,40,0,0,255,40,0,0,0,26,0,0,27,26,0,0,30,26,0,0,31,26,0,0,64,23,0,0,83,23,0,0,0,0,0,0,31,0,0,0,127,0,0,0,159,0,0,0,173,0,0,0,173,0,0,0,120,3,0,0,121,3,0,0,128,3,0,0,131,3,0,0,139,3,0,0,139,3,0,0,141,3,0,0,141,3,0,0,162,3,0,0,162,3,0,0,48,5,0,0,48,5,0,0,87,5,0,0,88,5,0,0,96,5,0,0,96,5,0,0,136,5,0,0,136,5,0,0,139,5,0,0,140,5,0,0,144,5,0,0,144,5,0,0,200,5,0,0,207,5,0,0,235,5,0,0,239,5,0,0,245,5,0,0,5,6,0,0,28,6,0,0,29,6,0,0,221,6,0,0,221,6,0,0,14,7,0,0,15,7,0,0,75,7,0,0,76,7,0,0,178,7,0,0,191,7,0,0,251,7,0,0,255,7,0,0,46,8,0,0,47,8,0,0,63,8,0,0,63,8,0,0,92,8,0,0,93,8,0,0,95,8,0,0,159,8,0,0,181,8,0,0,226,8,0,0,132,9,0,0,132,9,0,0,141,9,0,0,142,9,0,0,145,9,0,0,146,9,0,0,169,9,0,0,169,9,0,0,177,9,0,0,177,9,0,0,179,9,0,0,181,9,0,0,186,9,0,0,187,9,0,0,197,9,0,0,198,9,0,0,201,9,0,0,202,9,0,0,207,9,0,0,214,9,0,0,216,9,0,0,219,9,0,0,222,9,0,0,222,9,0,0,228,9,0,0,229,9,0,0,252,9,0,0,0,10,0,0,4,10,0,0,4,10,0,0,11,10,0,0,14,10,0,0,17,10,0,0,18,10,0,0,41,10,0,0,41,10,0,0,49,10,0,0,49,10,0,0,52,10,0,0,52,10,0,0,55,10,0,0,55,10,0,0,58,10,0,0,59,10,0,0,61,10,0,0,61,10,0,0,67,10,0,0,70,10,0,0,73,10,0,0,74,10,0,0,78,10,0,0,80,10,0,0,82,10,0,0,88,10,0,0,93,10,0,0,93,10,0,0,95,10,0,0,101,10,0,0,118,10,0,0,128,10,0,0,132,10,0,0,132,10,0,0,142,10,0,0,142,10,0,0,146,10,0,0,146,10,0,0,169,10,0,0,169,10,0,0,177,10,0,0,177,10,0,0,180,10,0,0,180,10,0,0,186,10,0,0,187,10,0,0,198,10,0,0,198,10,0,0,202,10,0,0,202,10,0,0,206,10,0,0,207,10,0,0,209,10,0,0,223,10,0,0,228,10,0,0,229,10,0,0,242,10,0,0,248,10,0,0,250,10,0,0,0,11,0,0,4,11,0,0,4,11,0,0,13,11,0,0,14,11,0,0,17,11,0,0,18,11,0,0,41,11,0,0,41,11,0,0,49,11,0,0,49,11,0,0,52,11,0,0,52,11,0,0,58,11,0,0,59,11,0,0,69,11,0,0,70,11,0,0,73,11,0,0,74,11,0,0,78,11,0,0,85,11,0,0,88,11,0,0,91,11,0,0,94,11,0,0,94,11,0,0,100,11,0,0,101,11,0,0,120,11,0,0,129,11,0,0,132,11,0,0,132,11,0,0,139,11,0,0,141,11,0,0,145,11,0,0,145,11,0,0,150,11,0,0,152,11,0,0,155,11,0,0,155,11,0,0,157,11,0,0,157,11,0,0,160,11,0,0,162,11,0,0,165,11,0,0,167,11,0,0,171,11,0,0,173,11,0,0,186,11,0,0,189,11,0,0,195,11,0,0,197,11,0,0,201,11,0,0,201,11,0,0,206,11,0,0,207,11,0,0,209,11,0,0,214,11,0,0,216,11,0,0,229,11,0,0,251,11,0,0,255,11,0,0,4,12,0,0,4,12,0,0,13,12,0,0,13,12,0,0,17,12,0,0,17,12,0,0,41,12,0,0,41,12,0,0,58,12,0,0,60,12,0,0,69,12,0,0,69,12,0,0,73,12,0,0,73,12,0,0,78,12,0,0,84,12,0,0,87,12,0,0,87,12,0,0,91,12,0,0,95,12,0,0,100,12,0,0,101,12,0,0,112,12,0,0,119,12,0,0,128,12,0,0,128,12,0,0,132,12,0,0,132,12,0,0,141,12,0,0,141,12,0,0,145,12,0,0,145,12,0,0,169,12,0,0,169,12,0,0,180,12,0,0,180,12,0,0,186,12,0,0,187,12,0,0,197,12,0,0,197,12,0,0,201,12,0,0,201,12,0,0,206,12,0,0,212,12,0,0,215,12,0,0,221,12,0,0,223,12,0,0,223,12,0,0,228,12,0,0,229,12,0,0,240,12,0,0,240,12,0,0,243,12,0,0,0,13,0,0,4,13,0,0,4,13,0,0,13,13,0,0,13,13,0,0,17,13,0,0,17,13,0,0,59,13,0,0,60,13,0,0,69,13,0,0,69,13,0,0,73,13,0,0,73,13,0,0,79,13,0,0,86,13,0,0,88,13,0,0,94,13,0,0,100,13,0,0,101,13,0,0,118,13,0,0,120,13,0,0,128,13,0,0,129,13,0,0,132,13,0,0,132,13,0,0,151,13,0,0,153,13,0,0,178,13,0,0,178,13,0,0,188,13,0,0,188,13,0,0,190,13,0,0,191,13,0,0,199,13,0,0,201,13,0,0,203,13,0,0,206,13,0,0,213,13,0,0,213,13,0,0,215,13,0,0,215,13,0,0,224,13,0,0,229,13,0,0,240,13,0,0,241,13,0,0,245,13,0,0,0,14,0,0,59,14,0,0,62,14,0,0,92,14,0,0,128,14,0,0,131,14,0,0,131,14,0,0,133,14,0,0,134,14,0,0,137,14,0,0,137,14,0,0,139,14,0,0,140,14,0,0,142,14,0,0,147,14,0,0,152,14,0,0,152,14,0,0,160,14,0,0,160,14,0,0,164,14,0,0,164,14,0,0,166,14,0,0,166,14,0,0,168,14,0,0,169,14,0,0,172,14,0,0,172,14,0,0,186,14,0,0,186,14,0,0,190,14,0,0,191,14,0,0,197,14,0,0,197,14,0,0,199,14,0,0,199,14,0,0,206,14,0,0,207,14,0,0,218,14,0,0,219,14,0,0,224,14,0,0,255,14,0,0,72,15,0,0,72,15,0,0,109,15,0,0,112,15,0,0,152,15,0,0,152,15,0,0,189,15,0,0,189,15,0,0,205,15,0,0,205,15,0,0,219,15,0,0,255,15,0,0,198,16,0,0,198,16,0,0,200,16,0,0,204,16,0,0,206,16,0,0,207,16,0,0,73,18,0,0,73,18,0,0,78,18,0,0,79,18,0,0,87,18,0,0,87,18,0,0,89,18,0,0,89,18,0,0,94,18,0,0,95,18,0,0,137,18,0,0,137,18,0,0,142,18,0,0,143,18,0,0,177,18,0,0,177,18,0,0,182,18,0,0,183,18,0,0,191,18,0,0,191,18,0,0,193,18,0,0,193,18,0,0,198,18,0,0,199,18,0,0,215,18,0,0,215,18,0,0,17,19,0,0,17,19,0,0,22,19,0,0,23,19,0,0,91,19,0,0,92,19,0,0,125,19,0,0,127,19,0,0,154,19,0,0,159,19,0,0,246,19,0,0,247,19,0,0,254,19,0,0,255,19,0,0,157,22,0,0,159,22,0,0,249,22,0,0,255,22,0,0,13,23,0,0,13,23,0,0,21,23,0,0,31,23,0,0,55,23,0,0,63,23,0,0,84,23,0,0,95,23,0,0,109,23,0,0,109,23,0,0,113,23,0,0,113,23,0,0,116,23,0,0,127,23,0,0,222,23,0,0,223,23,0,0,234,23,0,0,239,23,0,0,250,23,0,0,255,23,0,0,14,24,0,0,15,24,0,0,26,24,0,0,31,24,0,0,120,24,0,0,127,24,0,0,171,24,0,0,175,24,0,0,246,24,0,0,255,24,0,0,31,25,0,0,31,25,0,0,44,25,0,0,47,25,0,0,60,25,0,0,63,25,0,0,65,25,0,0,67,25,0,0,110,25,0,0,111,25,0,0,117,25,0,0,127,25,0,0,172,25,0,0,175,25,0,0,202,25,0,0,207,25,0,0,219,25,0,0,221,25,0,0,28,26,0,0,29,26,0,0,95,26,0,0,95,26,0,0,125,26,0,0,126,26,0,0,138,26,0,0,143,26,0,0,154,26,0,0,159,26,0,0,174,26,0,0,175,26,0,0,191,26,0,0,255,26,0,0,76,27,0,0,79,27,0,0,125,27,0,0,127,27,0,0,244,27,0,0,251,27,0,0,56,28,0,0,58,28,0,0,74,28,0,0,76,28,0,0,128,28,0,0,191,28,0,0,200,28,0,0,207,28,0,0,247,28,0,0,247,28,0,0,250,28,0,0,255,28,0,0,246,29,0,0,251,29,0,0,22,31,0,0,23,31,0,0,30,31,0,0,31,31,0,0,70,31,0,0,71,31,0,0,78,31,0,0,79,31,0,0,88,31,0,0,88,31,0,0,90,31,0,0,90,31,0,0,92,31,0,0,92,31,0,0,94,31,0,0,94,31,0,0,126,31,0,0,127,31,0,0,181,31,0,0,181,31,0,0,197,31,0,0,197,31,0,0,212,31,0,0,213,31,0,0,220,31,0,0,220,31,0,0,240,31,0,0,241,31,0,0,245,31,0,0,245,31,0,0,255,31,0,0,255,31,0,0,11,32,0,0,15,32,0,0,42,32,0,0,46,32,0,0,96,32,0,0,111,32,0,0,114,32,0,0,115,32,0,0,143,32,0,0,143,32,0,0,157,32,0,0,159,32,0,0,191,32,0,0,207,32,0,0,241,32,0,0,255,32,0,0,140,33,0,0,143,33,0,0,251,35,0,0,255,35,0,0,39,36,0,0,63,36,0,0,75,36,0,0,95,36,0,0,116,43,0,0,117,43,0,0,150,43,0,0,151,43,0,0,186,43,0,0,188,43,0,0,201,43,0,0,201,43,0,0,210,43,0,0,235,43,0,0,240,43,0,0,255,43,0,0,47,44,0,0,47,44,0,0,95,44,0,0,95,44,0,0,244,44,0,0,248,44,0,0,38,45,0,0,38,45,0,0,40,45,0,0,44,45,0,0,46,45,0,0,47,45,0,0,104,45,0,0,110,45,0,0,113,45,0,0,126,45,0,0,151,45,0,0,159,45,0,0,167,45,0,0,167,45,0,0,175,45,0,0,175,45,0,0,183,45,0,0,183,45,0,0,191,45,0,0,191,45,0,0,199,45,0,0,199,45,0,0,207,45,0,0,207,45,0,0,215,45,0,0,215,45,0,0,223,45,0,0,223,45,0,0,67,46,0,0,127,46,0,0,154,46,0,0,154,46,0,0,244,46,0,0,255,46,0,0,214,47,0,0,239,47,0,0,252,47,0,0,255,47,0,0,64,48,0,0,64,48,0,0,151,48,0,0,152,48,0,0,0,49,0,0,4,49,0,0,46,49,0,0,48,49,0,0,143,49,0,0,143,49,0,0,187,49,0,0,191,49,0,0,228,49,0,0,239,49,0,0,31,50,0,0,31,50,0,0,255,50,0,0,255,50,0,0,182,77,0,0,191,77,0,0,214,159,0,0,255,159,0,0,141,164,0,0,143,164,0,0,199,164,0,0,207,164,0,0,44,166,0,0,63,166,0,0,248,166,0,0,255,166,0,0,174,167,0,0,175,167,0,0,184,167,0,0,246,167,0,0,44,168,0,0,47,168,0,0,58,168,0,0,63,168,0,0,120,168,0,0,127,168,0,0,197,168,0,0,205,168,0,0,218,168,0,0,223,168,0,0,254,168,0,0,255,168,0,0,84,169,0,0,94,169,0,0,125,169,0,0,127,169,0,0,206,169,0,0,206,169,0,0,218,169,0,0,221,169,0,0,255,169,0,0,255,169,0,0,55,170,0,0,63,170,0,0,78,170,0,0,79,170,0,0,90,170,0,0,91,170,0,0,195,170,0,0,218,170,0,0,247,170,0,0,0,171,0,0,7,171,0,0,8,171,0,0,15,171,0,0,16,171,0,0,23,171,0,0,31,171,0,0,39,171,0,0,39,171,0,0,47,171,0,0,47,171,0,0,102,171,0,0,111,171,0,0,238,171,0,0,239,171,0,0,250,171,0,0,255,171,0,0,164,215,0,0,175,215,0,0,199,215,0,0,202,215,0,0,252,215,0,0,255,215,0,0,0,224,0,0,255,248,0,0,110,250,0,0,111,250,0,0,218,250,0,0,255,250,0,0,7,251,0,0,18,251,0,0,24,251,0,0,28,251,0,0,55,251,0,0,55,251,0,0,61,251,0,0,61,251,0,0,63,251,0,0,63,251,0,0,66,251,0,0,66,251,0,0,69,251,0,0,69,251,0,0,194,251,0,0,210,251,0,0,64,253,0,0,79,253,0,0,144,253,0,0,145,253,0,0,200,253,0,0,239,253,0,0,254,253,0,0,255,253,0,0,26,254,0,0,31,254,0,0,83,254,0,0,83,254,0,0,103,254,0,0,103,254,0,0,108,254,0,0,111,254,0,0,117,254,0,0,117,254,0,0,253,254,0,0,0,255,0,0,191,255,0,0,193,255,0,0,200,255,0,0,201,255,0,0,208,255,0,0,209,255,0,0,216,255,0,0,217,255,0,0,221,255,0,0,223,255,0,0,231,255,0,0,231,255,0,0,239,255,0,0,251,255,0,0,254,255,0,0,255,255,0,0,12,0,1,0,12,0,1,0,39,0,1,0,39,0,1,0,59,0,1,0,59,0,1,0,62,0,1,0,62,0,1,0,78,0,1,0,79,0,1,0,94,0,1,0,127,0,1,0,251,0,1,0,255,0,1,0,3,1,1,0,6,1,1,0,52,1,1,0,54,1,1,0,141,1,1,0,143,1,1,0,156,1,1,0,159,1,1,0,161,1,1,0,207,1,1,0,254,1,1,0,127,2,1,0,157,2,1,0,159,2,1,0,209,2,1,0,223,2,1,0,252,2,1,0,255,2,1,0,36,3,1,0,47,3,1,0,75,3,1,0,79,3,1,0,123,3,1,0,127,3,1,0,158,3,1,0,158,3,1,0,196,3,1,0,199,3,1,0,214,3,1,0,255,3,1,0,158,4,1,0,159,4,1,0,170,4,1,0,255,4,1,0,40,5,1,0,47,5,1,0,100,5,1,0,110,5,1,0,112,5,1,0,255,5,1,0,55,7,1,0,63,7,1,0,86,7,1,0,95,7,1,0,104,7,1,0,255,7,1,0,6,8,1,0,7,8,1,0,9,8,1,0,9,8,1,0,54,8,1,0,54,8,1,0,57,8,1,0,59,8,1,0,61,8,1,0,62,8,1,0,86,8,1,0,86,8,1,0,159,8,1,0,166,8,1,0,176,8,1,0,223,8,1,0,243,8,1,0,243,8,1,0,246,8,1,0,250,8,1,0,28,9,1,0,30,9,1,0,58,9,1,0,62,9,1,0,64,9,1,0,127,9,1,0,184,9,1,0,187,9,1,0,208,9,1,0,209,9,1,0,4,10,1,0,4,10,1,0,7,10,1,0,11,10,1,0,20,10,1,0,20,10,1,0,24,10,1,0,24,10,1,0,52,10,1,0,55,10,1,0,59,10,1,0,62,10,1,0,72,10,1,0,79,10,1,0,89,10,1,0,95,10,1,0,160,10,1,0,191,10,1,0,231,10,1,0,234,10,1,0,247,10,1,0,255,10,1,0,54,11,1,0,56,11,1,0,86,11,1,0,87,11,1,0,115,11,1,0,119,11,1,0,146,11,1,0,152,11,1,0,157,11,1,0,168,11,1,0,176,11,1,0,255,11,1,0,73,12,1,0,127,12,1,0,179,12,1,0,191,12,1,0,243,12,1,0,249,12,1,0,0,13,1,0,95,14,1,0,127,14,1,0,255,15,1,0,78,16,1,0,81,16,1,0,112,16,1,0,126,16,1,0,189,16,1,0,189,16,1,0,194,16,1,0,207,16,1,0,233,16,1,0,239,16,1,0,250,16,1,0,255,16,1,0,53,17,1,0,53,17,1,0,68,17,1,0,79,17,1,0,119,17,1,0,127,17,1,0,206,17,1,0,207,17,1,0,224,17,1,0,224,17,1,0,245,17,1,0,255,17,1,0,18,18,1,0,18,18,1,0,62,18,1,0,127,18,1,0,135,18,1,0,135,18,1,0,137,18,1,0,137,18,1,0,142,18,1,0,142,18,1,0,158,18,1,0,158,18,1,0,170,18,1,0,175,18,1,0,235,18,1,0,239,18,1,0,250,18,1,0,255,18,1,0,4,19,1,0,4,19,1,0,13,19,1,0,14,19,1,0,17,19,1,0,18,19,1,0,41,19,1,0,41,19,1,0,49,19,1,0,49,19,1,0,52,19,1,0,52,19,1,0,58,19,1,0,59,19,1,0,69,19,1,0,70,19,1,0,73,19,1,0,74,19,1,0,78,19,1,0,79,19,1,0,81,19,1,0,86,19,1,0,88,19,1,0,92,19,1,0,100,19,1,0,101,19,1,0,109,19,1,0,111,19,1,0,117,19,1,0,127,20,1,0,200,20,1,0,207,20,1,0,218,20,1,0,127,21,1,0,182,21,1,0,183,21,1,0,222,21,1,0,255,21,1,0,69,22,1,0,79,22,1,0,90,22,1,0,127,22,1,0,184,22,1,0,191,22,1,0,202,22,1,0,255,22,1,0,26,23,1,0,28,23,1,0,44,23,1,0,47,23,1,0,64,23,1,0,159,24,1,0,243,24,1,0,254,24,1,0,0,25,1,0,191,26,1,0,249,26,1,0,255,31,1,0,154,35,1,0,255,35,1,0,111,36,1,0,111,36,1,0,117,36,1,0,127,36,1,0,68,37,1,0,255,47,1,0,47,52,1,0,255,67,1,0,71,70,1,0,255,103,1,0,57,106,1,0,63,106,1,0,95,106,1,0,95,106,1,0,106,106,1,0,109,106,1,0,112,106,1,0,207,106,1,0,238,106,1,0,239,106,1,0,246,106,1,0,255,106,1,0,70,107,1,0,79,107,1,0,90,107,1,0,90,107,1,0,98,107,1,0,98,107,1,0,120,107,1,0,124,107,1,0,144,107,1,0,255,110,1,0,69,111,1,0,79,111,1,0,127,111,1,0,142,111,1,0,160,111,1,0,255,175,1,0,2,176,1,0,255,187,1,0,107,188,1,0,111,188,1,0,125,188,1,0,127,188,1,0,137,188,1,0,143,188,1,0,154,188,1,0,155,188,1,0,160,188,1,0,255,207,1,0,246,208,1,0,255,208,1,0,39,209,1,0,40,209,1,0,115,209,1,0,122,209,1,0,233,209,1,0,255,209,1,0,70,210,1,0,255,210,1,0,87,211,1,0,95,211,1,0,114,211,1,0,255,211,1,0,85,212,1,0,85,212,1,0,157,212,1,0,157,212,1,0,160,212,1,0,161,212,1,0,163,212,1,0,164,212,1,0,167,212,1,0,168,212,1,0,173,212,1,0,173,212,1,0,186,212,1,0,186,212,1,0,188,212,1,0,188,212,1,0,196,212,1,0,196,212,1,0,6,213,1,0,6,213,1,0,11,213,1,0,12,213,1,0,21,213,1,0,21,213,1,0,29,213,1,0,29,213,1,0,58,213,1,0,58,213,1,0,63,213,1,0,63,213,1,0,69,213,1,0,69,213,1,0,71,213,1,0,73,213,1,0,81,213,1,0,81,213,1,0,166,214,1,0,167,214,1,0,204,215,1,0,205,215,1,0,140,218,1,0,154,218,1,0,160,218,1,0,160,218,1,0,176,218,1,0,255,231,1,0,197,232,1,0,198,232,1,0,215,232,1,0,255,237,1,0,4,238,1,0,4,238,1,0,32,238,1,0,32,238,1,0,35,238,1,0,35,238,1,0,37,238,1,0,38,238,1,0,40,238,1,0,40,238,1,0,51,238,1,0,51,238,1,0,56,238,1,0,56,238,1,0,58,238,1,0,58,238,1,0,60,238,1,0,65,238,1,0,67,238,1,0,70,238,1,0,72,238,1,0,72,238,1,0,74,238,1,0,74,238,1], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+41144);
/* memory initializer */ allocate([76,238,1,0,76,238,1,0,80,238,1,0,80,238,1,0,83,238,1,0,83,238,1,0,85,238,1,0,86,238,1,0,88,238,1,0,88,238,1,0,90,238,1,0,90,238,1,0,92,238,1,0,92,238,1,0,94,238,1,0,94,238,1,0,96,238,1,0,96,238,1,0,99,238,1,0,99,238,1,0,101,238,1,0,102,238,1,0,107,238,1,0,107,238,1,0,115,238,1,0,115,238,1,0,120,238,1,0,120,238,1,0,125,238,1,0,125,238,1,0,127,238,1,0,127,238,1,0,138,238,1,0,138,238,1,0,156,238,1,0,160,238,1,0,164,238,1,0,164,238,1,0,170,238,1,0,170,238,1,0,188,238,1,0,239,238,1,0,242,238,1,0,255,239,1,0,44,240,1,0,47,240,1,0,148,240,1,0,159,240,1,0,175,240,1,0,176,240,1,0,192,240,1,0,192,240,1,0,208,240,1,0,208,240,1,0,246,240,1,0,255,240,1,0,13,241,1,0,15,241,1,0,47,241,1,0,47,241,1,0,108,241,1,0,111,241,1,0,155,241,1,0,229,241,1,0,3,242,1,0,15,242,1,0,59,242,1,0,63,242,1,0,73,242,1,0,79,242,1,0,82,242,1,0,255,242,1,0,122,245,1,0,122,245,1,0,164,245,1,0,164,245,1,0,209,246,1,0,223,246,1,0,237,246,1,0,239,246,1,0,244,246,1,0,255,246,1,0,116,247,1,0,127,247,1,0,213,247,1,0,255,247,1,0,12,248,1,0,15,248,1,0,72,248,1,0,79,248,1,0,90,248,1,0,95,248,1,0,136,248,1,0,143,248,1,0,174,248,1,0,15,249,1,0,25,249,1,0,127,249,1,0,133,249,1,0,191,249,1,0,193,249,1,0,255,255,1,0,215,166,2,0,255,166,2,0,53,183,2,0,63,183,2,0,30,184,2,0,31,184,2,0,162,206,2,0,255,247,2,0,30,250,2,0,255,0,14,0,240,1,14,0,255,255,16,0,0,20,0,0,127,22,0,0,176,24,0,0,245,24,0,0,160,2,1,0,208,2,1,0,48,5,1,0,99,5,1,0,111,5,1,0,111,5,1,0,0,0,0,0,31,0,0,0,127,0,0,0,159,0,0,0,173,0,0,0,173,0,0,0,0,6,0,0,5,6,0,0,28,6,0,0,28,6,0,0,221,6,0,0,221,6,0,0,15,7,0,0,15,7,0,0,14,24,0,0,14,24,0,0,11,32,0,0,15,32,0,0,42,32,0,0,46,32,0,0,96,32,0,0,100,32,0,0,102,32,0,0,111,32,0,0,255,254,0,0,255,254,0,0,249,255,0,0,251,255,0,0,189,16,1,0,189,16,1,0,160,188,1,0,163,188,1,0,115,209,1,0,122,209,1,0,1,0,14,0,1,0,14,0,32,0,14,0,127,0,14,0,0,17,1,0,52,17,1,0,54,17,1,0,67,17,1,0,0,170,0,0,54,170,0,0,64,170,0,0,77,170,0,0,80,170,0,0,89,170,0,0,92,170,0,0,95,170,0,0,160,19,0,0,245,19,0,0,248,19,0,0,253,19,0,0,112,171,0,0,191,171,0,0,120,3,0,0,121,3,0,0,128,3,0,0,131,3,0,0,139,3,0,0,139,3,0,0,141,3,0,0,141,3,0,0,162,3,0,0,162,3,0,0,48,5,0,0,48,5,0,0,87,5,0,0,88,5,0,0,96,5,0,0,96,5,0,0,136,5,0,0,136,5,0,0,139,5,0,0,140,5,0,0,144,5,0,0,144,5,0,0,200,5,0,0,207,5,0,0,235,5,0,0,239,5,0,0,245,5,0,0,255,5,0,0,29,6,0,0,29,6,0,0,14,7,0,0,14,7,0,0,75,7,0,0,76,7,0,0,178,7,0,0,191,7,0,0,251,7,0,0,255,7,0,0,46,8,0,0,47,8,0,0,63,8,0,0,63,8,0,0,92,8,0,0,93,8,0,0,95,8,0,0,159,8,0,0,181,8,0,0,226,8,0,0,132,9,0,0,132,9,0,0,141,9,0,0,142,9,0,0,145,9,0,0,146,9,0,0,169,9,0,0,169,9,0,0,177,9,0,0,177,9,0,0,179,9,0,0,181,9,0,0,186,9,0,0,187,9,0,0,197,9,0,0,198,9,0,0,201,9,0,0,202,9,0,0,207,9,0,0,214,9,0,0,216,9,0,0,219,9,0,0,222,9,0,0,222,9,0,0,228,9,0,0,229,9,0,0,252,9,0,0,0,10,0,0,4,10,0,0,4,10,0,0,11,10,0,0,14,10,0,0,17,10,0,0,18,10,0,0,41,10,0,0,41,10,0,0,49,10,0,0,49,10,0,0,52,10,0,0,52,10,0,0,55,10,0,0,55,10,0,0,58,10,0,0,59,10,0,0,61,10,0,0,61,10,0,0,67,10,0,0,70,10,0,0,73,10,0,0,74,10,0,0,78,10,0,0,80,10,0,0,82,10,0,0,88,10,0,0,93,10,0,0,93,10,0,0,95,10,0,0,101,10,0,0,118,10,0,0,128,10,0,0,132,10,0,0,132,10,0,0,142,10,0,0,142,10,0,0,146,10,0,0,146,10,0,0,169,10,0,0,169,10,0,0,177,10,0,0,177,10,0,0,180,10,0,0,180,10,0,0,186,10,0,0,187,10,0,0,198,10,0,0,198,10,0,0,202,10,0,0,202,10,0,0,206,10,0,0,207,10,0,0,209,10,0,0,223,10,0,0,228,10,0,0,229,10,0,0,242,10,0,0,248,10,0,0,250,10,0,0,0,11,0,0,4,11,0,0,4,11,0,0,13,11,0,0,14,11,0,0,17,11,0,0,18,11,0,0,41,11,0,0,41,11,0,0,49,11,0,0,49,11,0,0,52,11,0,0,52,11,0,0,58,11,0,0,59,11,0,0,69,11,0,0,70,11,0,0,73,11,0,0,74,11,0,0,78,11,0,0,85,11,0,0,88,11,0,0,91,11,0,0,94,11,0,0,94,11,0,0,100,11,0,0,101,11,0,0,120,11,0,0,129,11,0,0,132,11,0,0,132,11,0,0,139,11,0,0,141,11,0,0,145,11,0,0,145,11,0,0,150,11,0,0,152,11,0,0,155,11,0,0,155,11,0,0,157,11,0,0,157,11,0,0,160,11,0,0,162,11,0,0,165,11,0,0,167,11,0,0,171,11,0,0,173,11,0,0,186,11,0,0,189,11,0,0,195,11,0,0,197,11,0,0,201,11,0,0,201,11,0,0,206,11,0,0,207,11,0,0,209,11,0,0,214,11,0,0,216,11,0,0,229,11,0,0,251,11,0,0,255,11,0,0,4,12,0,0,4,12,0,0,13,12,0,0,13,12,0,0,17,12,0,0,17,12,0,0,41,12,0,0,41,12,0,0,58,12,0,0,60,12,0,0,69,12,0,0,69,12,0,0,73,12,0,0,73,12,0,0,78,12,0,0,84,12,0,0,87,12,0,0,87,12,0,0,91,12,0,0,95,12,0,0,100,12,0,0,101,12,0,0,112,12,0,0,119,12,0,0,128,12,0,0,128,12,0,0,132,12,0,0,132,12,0,0,141,12,0,0,141,12,0,0,145,12,0,0,145,12,0,0,169,12,0,0,169,12,0,0,180,12,0,0,180,12,0,0,186,12,0,0,187,12,0,0,197,12,0,0,197,12,0,0,201,12,0,0,201,12,0,0,206,12,0,0,212,12,0,0,215,12,0,0,221,12,0,0,223,12,0,0,223,12,0,0,228,12,0,0,229,12,0,0,240,12,0,0,240,12,0,0,243,12,0,0,0,13,0,0,4,13,0,0,4,13,0,0,13,13,0,0,13,13,0,0,17,13,0,0,17,13,0,0,59,13,0,0,60,13,0,0,69,13,0,0,69,13,0,0,73,13,0,0,73,13,0,0,79,13,0,0,86,13,0,0,88,13,0,0,94,13,0,0,100,13,0,0,101,13,0,0,118,13,0,0,120,13,0,0,128,13,0,0,129,13,0,0,132,13,0,0,132,13,0,0,151,13,0,0,153,13,0,0,178,13,0,0,178,13,0,0,188,13,0,0,188,13,0,0,190,13,0,0,191,13,0,0,199,13,0,0,201,13,0,0,203,13,0,0,206,13,0,0,213,13,0,0,213,13,0,0,215,13,0,0,215,13,0,0,224,13,0,0,229,13,0,0,240,13,0,0,241,13,0,0,245,13,0,0,0,14,0,0,59,14,0,0,62,14,0,0,92,14,0,0,128,14,0,0,131,14,0,0,131,14,0,0,133,14,0,0,134,14,0,0,137,14,0,0,137,14,0,0,139,14,0,0,140,14,0,0,142,14,0,0,147,14,0,0,152,14,0,0,152,14,0,0,160,14,0,0,160,14,0,0,164,14,0,0,164,14,0,0,166,14,0,0,166,14,0,0,168,14,0,0,169,14,0,0,172,14,0,0,172,14,0,0,186,14,0,0,186,14,0,0,190,14,0,0,191,14,0,0,197,14,0,0,197,14,0,0,199,14,0,0,199,14,0,0,206,14,0,0,207,14,0,0,218,14,0,0,219,14,0,0,224,14,0,0,255,14,0,0,72,15,0,0,72,15,0,0,109,15,0,0,112,15,0,0,152,15,0,0,152,15,0,0,189,15,0,0,189,15,0,0,205,15,0,0,205,15,0,0,219,15,0,0,255,15,0,0,198,16,0,0,198,16,0,0,200,16,0,0,204,16,0,0,206,16,0,0,207,16,0,0,73,18,0,0,73,18,0,0,78,18,0,0,79,18,0,0,87,18,0,0,87,18,0,0,89,18,0,0,89,18,0,0,94,18,0,0,95,18,0,0,137,18,0,0,137,18,0,0,142,18,0,0,143,18,0,0,177,18,0,0,177,18,0,0,182,18,0,0,183,18,0,0,191,18,0,0,191,18,0,0,193,18,0,0,193,18,0,0,198,18,0,0,199,18,0,0,215,18,0,0,215,18,0,0,17,19,0,0,17,19,0,0,22,19,0,0,23,19,0,0,91,19,0,0,92,19,0,0,125,19,0,0,127,19,0,0,154,19,0,0,159,19,0,0,246,19,0,0,247,19,0,0,254,19,0,0,255,19,0,0,157,22,0,0,159,22,0,0,249,22,0,0,255,22,0,0,13,23,0,0,13,23,0,0,21,23,0,0,31,23,0,0,55,23,0,0,63,23,0,0,84,23,0,0,95,23,0,0,109,23,0,0,109,23,0,0,113,23,0,0,113,23,0,0,116,23,0,0,127,23,0,0,222,23,0,0,223,23,0,0,234,23,0,0,239,23,0,0,250,23,0,0,255,23,0,0,15,24,0,0,15,24,0,0,26,24,0,0,31,24,0,0,120,24,0,0,127,24,0,0,171,24,0,0,175,24,0,0,246,24,0,0,255,24,0,0,31,25,0,0,31,25,0,0,44,25,0,0,47,25,0,0,60,25,0,0,63,25,0,0,65,25,0,0,67,25,0,0,110,25,0,0,111,25,0,0,117,25,0,0,127,25,0,0,172,25,0,0,175,25,0,0,202,25,0,0,207,25,0,0,219,25,0,0,221,25,0,0,28,26,0,0,29,26,0,0,95,26,0,0,95,26,0,0,125,26,0,0,126,26,0,0,138,26,0,0,143,26,0,0,154,26,0,0,159,26,0,0,174,26,0,0,175,26,0,0,191,26,0,0,255,26,0,0,76,27,0,0,79,27,0,0,125,27,0,0,127,27,0,0,244,27,0,0,251,27,0,0,56,28,0,0,58,28,0,0,74,28,0,0,76,28,0,0,128,28,0,0,191,28,0,0,200,28,0,0,207,28,0,0,247,28,0,0,247,28,0,0,250,28,0,0,255,28,0,0,246,29,0,0,251,29,0,0,22,31,0,0,23,31,0,0,30,31,0,0,31,31,0,0,70,31,0,0,71,31,0,0,78,31,0,0,79,31,0,0,88,31,0,0,88,31,0,0,90,31,0,0,90,31,0,0,92,31,0,0,92,31,0,0,94,31,0,0,94,31,0,0,126,31,0,0,127,31,0,0,181,31,0,0,181,31,0,0,197,31,0,0,197,31,0,0,212,31,0,0,213,31,0,0,220,31,0,0,220,31,0,0,240,31,0,0,241,31,0,0,245,31,0,0,245,31,0,0,255,31,0,0,255,31,0,0,101,32,0,0,101,32,0,0,114,32,0,0,115,32,0,0,143,32,0,0,143,32,0,0,157,32,0,0,159,32,0,0,191,32,0,0,207,32,0,0,241,32,0,0,255,32,0,0,140,33,0,0,143,33,0,0,251,35,0,0,255,35,0,0,39,36,0,0,63,36,0,0,75,36,0,0,95,36,0,0,116,43,0,0,117,43,0,0,150,43,0,0,151,43,0,0,186,43,0,0,188,43,0,0,201,43,0,0,201,43,0,0,210,43,0,0,235,43,0,0,240,43,0,0,255,43,0,0,47,44,0,0,47,44,0,0,95,44,0,0,95,44,0,0,244,44,0,0,248,44,0,0,38,45,0,0,38,45,0,0,40,45,0,0,44,45,0,0,46,45,0,0,47,45,0,0,104,45,0,0,110,45,0,0,113,45,0,0,126,45,0,0,151,45,0,0,159,45,0,0,167,45,0,0,167,45,0,0,175,45,0,0,175,45,0,0,183,45,0,0,183,45,0,0,191,45,0,0,191,45,0,0,199,45,0,0,199,45,0,0,207,45,0,0,207,45,0,0,215,45,0,0,215,45,0,0,223,45,0,0,223,45,0,0,67,46,0,0,127,46,0,0,154,46,0,0,154,46,0,0,244,46,0,0,255,46,0,0,214,47,0,0,239,47,0,0,252,47,0,0,255,47,0,0,64,48,0,0,64,48,0,0,151,48,0,0,152,48,0,0,0,49,0,0,4,49,0,0,46,49,0,0,48,49,0,0,143,49,0,0,143,49,0,0,187,49,0,0,191,49,0,0,228,49,0,0,239,49,0,0,31,50,0,0,31,50,0,0,255,50,0,0,255,50,0,0,182,77,0,0,191,77,0,0,214,159,0,0,255,159,0,0,141,164,0,0,143,164,0,0,199,164,0,0,207,164,0,0,44,166,0,0,63,166,0,0,248,166,0,0,255,166,0,0,174,167,0,0,175,167,0,0,184,167,0,0,246,167,0,0,44,168,0,0,47,168,0,0,58,168,0,0,63,168,0,0,120,168,0,0,127,168,0,0,197,168,0,0,205,168,0,0,218,168,0,0,223,168,0,0,254,168,0,0,255,168,0,0,84,169,0,0,94,169,0,0,125,169,0,0,127,169,0,0,206,169,0,0,206,169,0,0,218,169,0,0,221,169,0,0,255,169,0,0,255,169,0,0,55,170,0,0,63,170,0,0,78,170,0,0,79,170,0,0,90,170,0,0,91,170,0,0,195,170,0,0,218,170,0,0,247,170,0,0,0,171,0,0,7,171,0,0,8,171,0,0,15,171,0,0,16,171,0,0,23,171,0,0,31,171,0,0,39,171,0,0,39,171,0,0,47,171,0,0,47,171,0,0,102,171,0,0,111,171,0,0,238,171,0,0,239,171,0,0,250,171,0,0,255,171,0,0,164,215,0,0,175,215,0,0,199,215,0,0,202,215,0,0,252,215,0,0,255,215,0,0,110,250,0,0,111,250,0,0,218,250,0,0,255,250,0,0,7,251,0,0,18,251,0,0,24,251,0,0,28,251,0,0,55,251,0,0,55,251,0,0,61,251,0,0,61,251,0,0,63,251,0,0,63,251,0,0,66,251,0,0,66,251,0,0,69,251,0,0,69,251,0,0,194,251,0,0,210,251,0,0,64,253,0,0,79,253,0,0,144,253,0,0,145,253,0,0,200,253,0,0,239,253,0,0,254,253,0,0,255,253,0,0,26,254,0,0,31,254,0,0,83,254,0,0,83,254,0,0,103,254,0,0,103,254,0,0,108,254,0,0,111,254,0,0,117,254,0,0,117,254,0,0,253,254,0,0,254,254,0,0,0,255,0,0,0,255,0,0,191,255,0,0,193,255,0,0,200,255,0,0,201,255,0,0,208,255,0,0,209,255,0,0,216,255,0,0,217,255,0,0,221,255,0,0,223,255,0,0,231,255,0,0,231,255,0,0,239,255,0,0,248,255,0,0,254,255,0,0,255,255,0,0,12,0,1,0,12,0,1,0,39,0,1,0,39,0,1,0,59,0,1,0,59,0,1,0,62,0,1,0,62,0,1,0,78,0,1,0,79,0,1,0,94,0,1,0,127,0,1,0,251,0,1,0,255,0,1,0,3,1,1,0,6,1,1,0,52,1,1,0,54,1,1,0,141,1,1,0,143,1,1,0,156,1,1,0,159,1,1,0,161,1,1,0,207,1,1,0,254,1,1,0,127,2,1,0,157,2,1,0,159,2,1,0,209,2,1,0,223,2,1,0,252,2,1,0,255,2,1,0,36,3,1,0,47,3,1,0,75,3,1,0,79,3,1,0,123,3,1,0,127,3,1,0,158,3,1,0,158,3,1,0,196,3,1,0,199,3,1,0,214,3,1,0,255,3,1,0,158,4,1,0,159,4,1,0,170,4,1,0,255,4,1,0,40,5,1,0,47,5,1,0,100,5,1,0,110,5,1,0,112,5,1,0,255,5,1,0,55,7,1,0,63,7,1,0,86,7,1,0,95,7,1,0,104,7,1,0,255,7,1,0,6,8,1,0,7,8,1,0,9,8,1,0,9,8,1,0,54,8,1,0,54,8,1,0,57,8,1,0,59,8,1,0,61,8,1,0,62,8,1,0,86,8,1,0,86,8,1,0,159,8,1,0,166,8,1,0,176,8,1,0,223,8,1,0,243,8,1,0,243,8,1,0,246,8,1,0,250,8,1,0,28,9,1,0,30,9,1,0,58,9,1,0,62,9,1,0,64,9,1,0,127,9,1,0,184,9,1,0,187,9,1,0,208,9,1,0,209,9,1,0,4,10,1,0,4,10,1,0,7,10,1,0,11,10,1,0,20,10,1,0,20,10,1,0,24,10,1,0,24,10,1,0,52,10,1,0,55,10,1,0,59,10,1,0,62,10,1,0,72,10,1,0,79,10,1,0,89,10,1,0,95,10,1,0,160,10,1,0,191,10,1,0,231,10,1,0,234,10,1,0,247,10,1,0,255,10,1,0,54,11,1,0,56,11,1,0,86,11,1,0,87,11,1,0,115,11,1,0,119,11,1,0,146,11,1,0,152,11,1,0,157,11,1,0,168,11,1,0,176,11,1,0,255,11,1,0,73,12,1,0,127,12,1,0,179,12,1,0,191,12,1,0,243,12,1,0,249,12,1,0,0,13,1,0,95,14,1,0,127,14,1,0,255,15,1,0,78,16,1,0,81,16,1,0,112,16,1,0,126,16,1,0,194,16,1,0,207,16,1,0,233,16,1,0,239,16,1,0,250,16,1,0,255,16,1,0,53,17,1,0,53,17,1,0,68,17,1,0,79,17,1,0,119,17,1,0,127,17,1,0,206,17,1,0,207,17,1,0,224,17,1,0,224,17,1,0,245,17,1,0,255,17,1,0,18,18,1,0,18,18,1,0,62,18,1,0,127,18,1,0,135,18,1,0,135,18,1,0,137,18,1,0,137,18,1,0,142,18,1,0,142,18,1,0,158,18,1,0,158,18,1,0,170,18,1,0,175,18,1,0,235,18,1,0,239,18,1,0,250,18,1,0,255,18,1,0,4,19,1,0,4,19,1,0,13,19,1,0,14,19,1,0,17,19,1,0,18,19,1,0,41,19,1,0,41,19,1,0,49,19,1,0,49,19,1,0,52,19,1,0,52,19,1,0,58,19,1,0,59,19,1,0,69,19,1,0,70,19,1,0,73,19,1,0,74,19,1,0,78,19,1,0,79,19,1,0,81,19,1,0,86,19,1,0,88,19,1,0,92,19,1,0,100,19,1,0,101,19,1,0,109,19,1,0,111,19,1,0,117,19,1,0,127,20,1,0,200,20,1,0,207,20,1,0,218,20,1,0,127,21,1,0,182,21,1,0,183,21,1,0,222,21,1,0,255,21,1,0,69,22,1,0,79,22,1,0,90,22,1,0,127,22,1,0,184,22,1,0,191,22,1,0,202,22,1,0,255,22,1,0,26,23,1,0,28,23,1,0,44,23,1,0,47,23,1,0,64,23,1,0,159,24,1,0,243,24,1,0,254,24,1,0,0,25,1,0,191,26,1,0,249,26,1,0,255,31,1,0,154,35,1,0,255,35,1,0,111,36,1,0,111,36,1,0,117,36,1,0,127,36,1,0,68,37,1,0,255,47,1,0,47,52,1,0,255,67,1,0,71,70,1,0,255,103,1,0,57,106,1,0,63,106,1,0,95,106,1,0,95,106,1,0,106,106,1,0,109,106,1,0,112,106,1,0,207,106,1,0,238,106,1,0,239,106,1,0,246,106,1,0,255,106,1,0,70,107,1,0,79,107,1,0,90,107,1,0,90,107,1,0,98,107,1,0,98,107,1,0,120,107,1,0,124,107,1,0,144,107,1,0,255,110,1,0,69,111,1,0,79,111,1,0,127,111,1,0,142,111,1,0,160,111,1,0,255,175,1,0,2,176,1,0,255,187,1,0,107,188,1,0,111,188,1,0,125,188,1,0,127,188,1,0,137,188,1,0,143,188,1,0,154,188,1,0,155,188,1,0,164,188,1,0,255,207,1,0,246,208,1,0,255,208,1,0,39,209,1,0,40,209,1,0,233,209,1,0,255,209,1,0,70,210,1,0,255,210,1,0,87,211,1,0,95,211,1,0,114,211,1,0,255,211,1,0,85,212,1,0,85,212,1,0,157,212,1,0,157,212,1,0,160,212,1,0,161,212,1,0,163,212,1,0,164,212,1,0,167,212,1,0,168,212,1,0,173,212,1,0,173,212,1,0,186,212,1,0,186,212,1,0,188,212,1,0,188,212,1,0,196,212,1,0,196,212,1,0,6,213,1,0,6,213,1,0,11,213,1,0,12,213,1,0,21,213,1,0,21,213,1,0,29,213,1,0,29,213,1,0,58,213,1,0,58,213,1,0,63,213,1,0,63,213,1,0,69,213,1,0,69,213,1,0,71,213,1,0,73,213,1,0,81,213,1,0,81,213,1,0,166,214,1,0,167,214,1,0,204,215,1,0,205,215,1,0,140,218,1,0,154,218,1,0,160,218,1,0,160,218,1,0,176,218,1,0,255,231,1,0,197,232,1,0,198,232,1,0,215,232,1,0,255,237,1,0,4,238,1,0,4,238,1,0,32,238,1,0,32,238,1,0,35,238,1,0,35,238,1,0,37,238,1,0,38,238,1,0,40,238,1,0,40,238,1,0,51,238,1,0,51,238,1,0,56,238,1,0,56,238,1,0,58,238,1,0,58,238,1,0,60,238,1,0,65,238,1,0,67,238,1,0,70,238,1,0,72,238,1,0,72,238,1,0,74,238,1,0,74,238,1,0,76,238,1,0,76,238,1,0,80,238,1,0,80,238,1,0,83,238,1,0,83,238,1,0,85,238,1,0,86,238,1,0,88,238,1,0,88,238,1,0,90,238,1,0,90,238,1,0,92,238,1,0,92,238,1,0,94,238,1,0,94,238,1,0,96,238,1,0,96,238,1,0,99,238,1,0,99,238,1,0,101,238,1,0,102,238,1,0,107,238,1,0,107,238,1,0,115,238,1,0,115,238,1,0,120,238,1,0,120,238,1,0,125,238,1,0,125,238,1,0,127,238,1,0,127,238,1,0,138,238,1,0,138,238,1,0,156,238,1,0,160,238,1,0,164,238,1,0,164,238,1,0,170,238,1,0,170,238,1,0,188,238,1,0,239,238,1,0,242,238,1,0,255,239,1,0,44,240,1,0,47,240,1,0,148,240,1,0,159,240,1,0,175,240,1,0,176,240,1,0,192,240,1,0,192,240,1,0,208,240,1,0,208,240,1,0,246,240,1,0,255,240,1,0,13,241,1,0,15,241,1,0,47,241,1,0,47,241,1,0,108,241,1,0,111,241,1,0,155,241,1,0,229,241,1,0,3,242,1,0,15,242,1,0,59,242,1,0,63,242,1,0,73,242,1,0,79,242,1,0,82,242,1,0,255,242,1,0,122,245,1,0,122,245,1,0,164,245,1,0,164,245,1,0,209,246,1,0,223,246,1,0,237,246,1,0,239,246,1,0,244,246,1,0,255,246,1,0,116,247,1,0,127,247,1,0,213,247,1,0,255,247,1,0,12,248,1,0,15,248,1,0,72,248,1,0,79,248,1,0,90,248,1,0,95,248,1,0,136,248,1,0,143,248,1,0,174,248,1,0,15,249,1,0,25,249,1,0,127,249,1,0,133,249,1,0,191,249,1,0,193,249,1,0,255,255,1,0,215,166,2,0,255,166,2,0,53,183,2,0,63,183,2,0,30,184,2,0,31,184,2,0,162,206,2,0,255,247,2,0,30,250,2,0,0,0,14,0,2,0,14,0,31,0,14,0,128,0,14,0,255,0,14,0,240,1,14,0,255,255,14,0,254,255,15,0,255,255,15,0,254,255,16,0,255,255,16,0,0,224,0,0,255,248,0,0,0,0,15,0,253,255,15,0,0,0,16,0,253,255,16,0,0,0,0,0,64,0,0,0,91,0,0,0,96,0,0,0,123,0,0,0,169,0,0,0,171,0,0,0,185,0,0,0,187,0,0,0,191,0,0,0,215,0,0,0,215,0,0,0,247,0,0,0,247,0,0,0,185,2,0,0,223,2,0,0,229,2,0,0,233,2,0,0,236,2,0,0,255,2,0,0,116,3,0,0,116,3,0,0,126,3,0,0,126,3,0,0,133,3,0,0,133,3,0,0,135,3,0,0,135,3,0,0,137,5,0,0,137,5,0,0,5,6,0,0,5,6,0,0,12,6,0,0,12,6,0,0,27,6,0,0,28,6,0,0,31,6,0,0,31,6,0,0,64,6,0,0,64,6,0,0,221,6,0,0,221,6,0,0,100,9,0,0,101,9,0,0,63,14,0,0,63,14,0,0,213,15,0,0,216,15,0,0,251,16,0,0,251,16,0,0,235,22,0,0,237,22,0,0,53,23,0,0,54,23,0,0,2,24,0,0,3,24,0,0,5,24,0,0,5,24,0,0,211,28,0,0,211,28,0,0,225,28,0,0,225,28,0,0,233,28,0,0,236,28,0,0,238,28,0,0,243,28,0,0,245,28,0,0,246,28,0,0,0,32,0,0,11,32,0,0,14,32,0,0,100,32,0,0,102,32,0,0,112,32,0,0,116,32,0,0,126,32,0,0,128,32,0,0,142,32,0,0,160,32,0,0,190,32,0,0,0,33,0,0,37,33,0,0,39,33,0,0,41,33,0,0,44,33,0,0,49,33,0,0,51,33,0,0,77,33,0,0,79,33,0,0,95,33,0,0,137,33,0,0,139,33,0,0,144,33,0,0,250,35,0,0,0,36,0,0,38,36,0,0,64,36,0,0,74,36,0,0,96,36,0,0,255,39,0,0,0,41,0,0,115,43,0,0,118,43,0,0,149,43,0,0,152,43,0,0,185,43,0,0,189,43,0,0,200,43,0,0,202,43,0,0,209,43,0,0,236,43,0,0,239,43,0,0,0,46,0,0,66,46,0,0,240,47,0,0,251,47,0,0,0,48,0,0,4,48,0,0,6,48,0,0,6,48,0,0,8,48,0,0,32,48,0,0,48,48,0,0,55,48,0,0,60,48,0,0,63,48,0,0,155,48,0,0,156,48,0,0,160,48,0,0,160,48,0,0,251,48,0,0,252,48,0,0,144,49,0,0,159,49,0,0,192,49,0,0,227,49,0,0,32,50,0,0,95,50,0,0,127,50,0,0,207,50,0,0,88,51,0,0,255,51,0,0,192,77,0,0,255,77,0,0,0,167,0,0,33,167,0,0,136,167,0,0,138,167,0,0,48,168,0,0,57,168,0,0,46,169,0,0,46,169,0,0,207,169,0,0,207,169,0,0,91,171,0,0,91,171,0,0,62,253,0,0,63,253,0,0,16,254,0,0,25,254,0,0,48,254,0,0,82,254,0,0,84,254,0,0,102,254,0,0,104,254,0,0,107,254,0,0,255,254,0,0,255,254,0,0,1,255,0,0,32,255,0,0,59,255,0,0,64,255,0,0,91,255,0,0,101,255,0,0,112,255,0,0,112,255,0,0,158,255,0,0,159,255,0,0,224,255,0,0,230,255,0,0,232,255,0,0,238,255,0,0,249,255,0,0,253,255,0,0,0,1,1,0,2,1,1,0,7,1,1,0,51,1,1,0,55,1,1,0,63,1,1,0,144,1,1,0,155,1,1,0,208,1,1,0,252,1,1,0,225,2,1,0,251,2,1,0,160,188,1,0,163,188,1,0,0,208,1,0,245,208,1,0,0,209,1,0,38,209,1,0,41,209,1,0,102,209,1,0,106,209,1,0,122,209,1,0,131,209,1,0,132,209,1,0,140,209,1,0,169,209,1,0,174,209,1,0,232,209,1,0,0,211,1,0,86,211,1,0,96,211,1,0,113,211,1,0,0,212,1,0,84,212,1,0,86,212,1,0,156,212,1,0,158,212,1,0,159,212,1,0,162,212,1,0,162,212,1,0,165,212,1,0,166,212,1,0,169,212,1,0,172,212,1,0,174,212,1,0,185,212,1,0,187,212,1,0,187,212,1,0,189,212,1,0,195,212,1,0,197,212,1,0,5,213,1,0,7,213,1,0,10,213,1,0,13,213,1,0,20,213,1,0,22,213,1,0,28,213,1,0,30,213,1,0,57,213,1,0,59,213,1,0,62,213,1,0,64,213,1,0,68,213,1,0,70,213,1,0,70,213,1,0,74,213,1,0,80,213,1,0,82,213,1,0,165,214,1,0,168,214,1,0,203,215,1,0,206,215,1,0,255,215,1,0,0,240,1,0,43,240,1,0,48,240,1,0,147,240,1,0,160,240,1,0,174,240,1,0,177,240,1,0,191,240,1,0,193,240,1,0,207,240,1,0,209,240,1,0,245,240,1,0,0,241,1,0,12,241,1,0,16,241,1,0,46,241,1,0,48,241,1,0,107,241,1,0,112,241,1,0,154,241,1,0,230,241,1,0,255,241,1,0,1,242,1,0,2,242,1,0,16,242,1,0,58,242,1,0,64,242,1,0,72,242,1,0,80,242,1,0,81,242,1,0,0,243,1,0,121,245,1,0,123,245,1,0,163,245,1,0,165,245,1,0,208,246,1,0,224,246,1,0,236,246,1,0,240,246,1,0,243,246,1,0,0,247,1,0,115,247,1,0,128,247,1,0,212,247,1,0,0,248,1,0,11,248,1,0,16,248,1,0,71,248,1,0,80,248,1,0,89,248,1,0,96,248,1,0,135,248,1,0,144,248,1,0,173,248,1,0,16,249,1,0,24,249,1,0,128,249,1,0,132,249,1,0,192,249,1,0,192,249,1,0,1,0,14,0,1,0,14,0,32,0,14,0,127,0,14,0,226,3,0,0,239,3,0,0,128,44,0,0,243,44,0,0,249,44,0,0,255,44,0,0,0,32,1,0,153,35,1,0,0,36,1,0,110,36,1,0,112,36,1,0,116,36,1,0,128,36,1,0,67,37,1,0,0,8,1,0,5,8,1,0,8,8,1,0,8,8,1,0,10,8,1,0,53,8,1,0,55,8,1,0,56,8,1,0,60,8,1,0,60,8,1,0,63,8,1,0,63,8,1,0,0,4,0,0,132,4,0,0,135,4,0,0,47,5,0,0,43,29,0,0,43,29,0,0,120,29,0,0,120,29,0,0,224,45,0,0,255,45,0,0,64,166,0,0,159,166,0,0,46,254,0,0,47,254,0,0,173,0,0,0,173,0,0,0,79,3,0,0,79,3,0,0,28,6,0,0,28,6,0,0,95,17,0,0,96,17,0,0,180,23,0,0,181,23,0,0,11,24,0,0,14,24,0,0,11,32,0,0,15,32,0,0,42,32,0,0,46,32,0,0,96,32,0,0,111,32,0,0,100,49,0,0,100,49,0,0,0,254,0,0,15,254,0,0,255,254,0,0,255,254,0,0,160,255,0,0,160,255,0,0,240,255,0,0,248,255,0,0,160,188,1,0,163,188,1,0,115,209,1,0,122,209,1,0,0,0,14,0,255,15,14,0,0,4,1,0,79,4,1,0,0,9,0,0,80,9,0,0,83,9,0,0,99,9,0,0,102,9,0,0,127,9,0,0,224,168,0,0,253,168,0,0,0,188,1,0,106,188,1,0,112,188,1,0,124,188,1,0,128,188,1,0,136,188,1,0,144,188,1,0,153,188,1,0,156,188,1,0,159,188,1,0,0,48,1,0,46,52,1,0,0,5,1,0,39,5,1,0,0,18,0,0,72,18,0,0,74,18,0,0,77,18,0,0,80,18,0,0,86,18,0,0,88,18,0,0,88,18,0,0,90,18,0,0,93,18,0,0,96,18,0,0,136,18,0,0,138,18,0,0,141,18,0,0,144,18,0,0,176,18,0,0,178,18,0,0,181,18,0,0,184,18,0,0,190,18,0,0,192,18,0,0,192,18,0,0,194,18,0,0,197,18,0,0,200,18,0,0,214,18,0,0,216,18,0,0,16,19,0,0,18,19,0,0,21,19,0,0,24,19,0,0,90,19,0,0,93,19,0,0,124,19,0,0,128,19,0,0,153,19,0,0,128,45,0,0,150,45,0,0,160,45,0,0,166,45,0,0,168,45,0,0,174,45,0,0,176,45,0,0,182,45,0,0,184,45,0,0,190,45,0,0,192,45,0,0,198,45,0,0,200,45,0,0,206,45,0,0,208,45,0,0,214,45,0,0,216,45,0,0,222,45,0,0,1,171,0,0,6,171,0,0,9,171,0,0,14,171,0,0,17,171,0,0,22,171,0,0,32,171,0,0,38,171,0,0,40,171,0,0,46,171,0,0,160,16,0,0,197,16,0,0,199,16,0,0,199,16,0,0,205,16,0,0,205,16,0,0,208,16,0,0,250,16,0,0,252,16,0,0,255,16,0,0,0,45,0,0,37,45,0,0,39,45,0,0,39,45,0,0,45,45,0,0,45,45,0,0,0,44,0,0,46,44,0,0,48,44,0,0,94,44,0,0,48,3,1,0,74,3,1,0,0,19,1,0,3,19,1,0,5,19,1,0,12,19,1,0,15,19,1,0,16,19,1,0,19,19,1,0,40,19,1,0,42,19,1,0,48,19,1,0,50,19,1,0,51,19,1,0,53,19,1,0,57,19,1,0,60,19,1,0,68,19,1,0,71,19,1,0,72,19,1,0,75,19,1,0,77,19,1,0,80,19,1,0,80,19,1,0,87,19,1,0,87,19,1,0,93,19,1,0,99,19,1,0,102,19,1,0,108,19,1,0,112,19,1,0,116,19,1,0,0,3,0,0,111,3,0,0,131,4,0,0,137,4,0,0,145,5,0,0,189,5,0,0,191,5,0,0,191,5,0,0,193,5,0,0,194,5,0,0,196,5,0,0,197,5,0,0,199,5,0,0,199,5,0,0,16,6,0,0,26,6,0,0,75,6,0,0,95,6,0,0,112,6,0,0,112,6,0,0,214,6,0,0,220,6,0,0,223,6,0,0,228,6,0,0,231,6,0,0,232,6,0,0,234,6,0,0,237,6,0,0,17,7,0,0,17,7,0,0,48,7,0,0,74,7,0,0,166,7,0,0,176,7,0,0,235,7,0,0,243,7,0,0,22,8,0,0,25,8,0,0,27,8,0,0,35,8,0,0,37,8,0,0,39,8,0,0,41,8,0,0,45,8,0,0,89,8,0,0,91,8,0,0,227,8,0,0,2,9,0,0,58,9,0,0,58,9,0,0,60,9,0,0,60,9,0,0,65,9,0,0,72,9,0,0,77,9,0,0,77,9,0,0,81,9,0,0,87,9,0,0,98,9,0,0,99,9,0,0,129,9,0,0,129,9,0,0,188,9,0,0,188,9,0,0,190,9,0,0,190,9,0,0,193,9,0,0,196,9,0,0,205,9,0,0,205,9,0,0,215,9,0,0,215,9,0,0,226,9,0,0,227,9,0,0,1,10,0,0,2,10,0,0,60,10,0,0,60,10,0,0,65,10,0,0,66,10,0,0,71,10,0,0,72,10,0,0,75,10,0,0,77,10,0,0,81,10,0,0,81,10,0,0,112,10,0,0,113,10,0,0,117,10,0,0,117,10,0,0,129,10,0,0,130,10,0,0,188,10,0,0,188,10,0,0,193,10,0,0,197,10,0,0,199,10,0,0,200,10,0,0,205,10,0,0,205,10,0,0,226,10,0,0,227,10,0,0,1,11,0,0,1,11,0,0,60,11,0,0,60,11,0,0,62,11,0,0,63,11,0,0,65,11,0,0,68,11,0,0,77,11,0,0,77,11,0,0,86,11,0,0,87,11,0,0,98,11,0,0,99,11,0,0,130,11,0,0,130,11,0,0,190,11,0,0,190,11,0,0,192,11,0,0,192,11,0,0,205,11,0,0,205,11,0,0,215,11,0,0,215,11,0,0,0,12,0,0,0,12,0,0,62,12,0,0,64,12,0,0,70,12,0,0,72,12,0,0,74,12,0,0,77,12,0,0,85,12,0,0,86,12,0,0,98,12,0,0,99,12,0,0,129,12,0,0,129,12,0,0,188,12,0,0,188,12,0,0,191,12,0,0,191,12,0,0,194,12,0,0,194,12,0,0,198,12,0,0,198,12,0,0,204,12,0,0,205,12,0,0,213,12,0,0,214,12,0,0,226,12,0,0,227,12,0,0,1,13,0,0,1,13,0,0,62,13,0,0,62,13,0,0,65,13,0,0,68,13,0,0,77,13,0,0,77,13,0,0,87,13,0,0,87,13,0,0,98,13,0,0,99,13,0,0,202,13,0,0,202,13,0,0,207,13,0,0,207,13,0,0,210,13,0,0,212,13,0,0,214,13,0,0,214,13,0,0,223,13,0,0,223,13,0,0,49,14,0,0,49,14,0,0,52,14,0,0,58,14,0,0,71,14,0,0,78,14,0,0,177,14,0,0,177,14,0,0,180,14,0,0,185,14,0,0,187,14,0,0,188,14,0,0,200,14,0,0,205,14,0,0,24,15,0,0,25,15,0,0,53,15,0,0,53,15,0,0,55,15,0,0,55,15,0,0,57,15,0,0,57,15,0,0,113,15,0,0,126,15,0,0,128,15,0,0,132,15,0,0,134,15,0,0,135,15,0,0,141,15,0,0,151,15,0,0,153,15,0,0,188,15,0,0,198,15,0,0,198,15,0,0,45,16,0,0,48,16,0,0,50,16,0,0,55,16,0,0,57,16,0,0,58,16,0,0,61,16,0,0,62,16,0,0,88,16,0,0,89,16,0,0,94,16,0,0,96,16,0,0,113,16,0,0,116,16,0,0,130,16,0,0,130,16,0,0,133,16,0,0,134,16,0,0,141,16,0,0,141,16,0,0,157,16,0,0,157,16,0,0,93,19,0,0,95,19,0,0,18,23,0,0,20,23,0,0,50,23,0,0,52,23,0,0,82,23,0,0,83,23,0,0,114,23,0,0,115,23,0,0,180,23,0,0,181,23,0,0,183,23,0,0,189,23,0,0,198,23,0,0,198,23,0,0,201,23,0,0,211,23,0,0,221,23,0,0,221,23,0,0,11,24,0,0,13,24,0,0,169,24,0,0,169,24,0,0,32,25,0,0,34,25,0,0,39,25,0,0,40,25,0,0,50,25,0,0,50,25,0,0,57,25,0,0,59,25,0,0,23,26,0,0,24,26,0,0,27,26,0,0,27,26,0,0,86,26,0,0,86,26,0,0,88,26,0,0,94,26,0,0,96,26,0,0,96,26,0,0,98,26,0,0,98,26,0,0,101,26,0,0,108,26,0,0,115,26,0,0,124,26,0,0,127,26,0,0,127,26,0,0,176,26,0,0,190,26,0,0,0,27,0,0,3,27,0,0,52,27,0,0,52,27,0,0,54,27,0,0,58,27,0,0,60,27,0,0,60,27,0,0,66,27,0,0,66,27,0,0,107,27,0,0,115,27,0,0,128,27,0,0,129,27,0,0,162,27,0,0,165,27,0,0,168,27,0,0,169,27,0,0,171,27,0,0,173,27,0,0,230,27,0,0,230,27,0,0,232,27,0,0,233,27,0,0,237,27,0,0,237,27,0,0,239,27,0,0,241,27,0,0,44,28,0,0,51,28,0,0,54,28,0,0,55,28,0,0,208,28,0,0,210,28,0,0,212,28,0,0,224,28,0,0,226,28,0,0,232,28,0,0,237,28,0,0,237,28,0,0,244,28,0,0,244,28,0,0,248,28,0,0,249,28,0,0,192,29,0,0,245,29,0,0,252,29,0,0,255,29,0,0,12,32,0,0,13,32,0,0,208,32,0,0,240,32,0,0,239,44,0,0,241,44,0,0,127,45,0,0,127,45,0,0,224,45,0,0,255,45,0,0,42,48,0,0,47,48,0,0,153,48,0,0,154,48,0,0,111,166,0,0,114,166,0,0,116,166,0,0,125,166,0,0,158,166,0,0,159,166,0,0,240,166,0,0,241,166,0,0,2,168,0,0,2,168,0,0,6,168,0,0,6,168,0,0,11,168,0,0,11,168,0,0,37,168,0,0,38,168,0,0,196,168,0,0,196,168,0,0,224,168,0,0,241,168,0,0,38,169,0,0,45,169,0,0,71,169,0,0,81,169,0,0,128,169,0,0,130,169,0,0,179,169,0,0,179,169,0,0,182,169,0,0,185,169,0,0,188,169,0,0,188,169,0,0,229,169,0,0,229,169,0,0,41,170,0,0,46,170,0,0,49,170,0,0,50,170,0,0,53,170,0,0,54,170,0,0,67,170,0,0,67,170,0,0,76,170,0,0,76,170,0,0,124,170,0,0,124,170,0,0,176,170,0,0,176,170,0,0,178,170,0,0,180,170,0,0,183,170,0,0,184,170,0,0,190,170,0,0,191,170,0,0,193,170,0,0,193,170,0,0,236,170,0,0,237,170,0,0,246,170,0,0,246,170,0,0,229,171,0,0,229,171,0,0,232,171,0,0,232,171,0,0,237,171,0,0,237,171,0,0,30,251,0,0,30,251,0,0,0,254,0,0,15,254,0,0,32,254,0,0,47,254,0,0,158,255,0,0,159,255,0,0,253,1,1,0,253,1,1,0,224,2,1,0,224,2,1,0,118,3,1,0,122,3,1,0,1,10,1,0,3,10,1,0,5,10,1,0,6,10,1,0,12,10,1,0,15,10,1,0,56,10,1,0,58,10,1,0,63,10,1,0,63,10,1,0,229,10,1,0,230,10,1,0,1,16,1,0,1,16,1,0,56,16,1,0,70,16,1,0,127,16,1,0,129,16,1,0,179,16,1,0,182,16,1,0,185,16,1,0,186,16,1,0,0,17,1,0,2,17,1,0,39,17,1,0,43,17,1,0,45,17,1,0,52,17,1,0,115,17,1,0,115,17,1,0,128,17,1,0,129,17,1,0,182,17,1,0,190,17,1,0,202,17,1,0,204,17,1,0,47,18,1,0,49,18,1,0,52,18,1,0,52,18,1,0,54,18,1,0,55,18,1,0,223,18,1,0,223,18,1,0,227,18,1,0,234,18,1,0,0,19,1,0,1,19,1,0,60,19,1,0,60,19,1,0,62,19,1,0,62,19,1,0,64,19,1,0,64,19,1,0,87,19,1,0,87,19,1,0,102,19,1,0,108,19,1,0,112,19,1,0,116,19,1,0,176,20,1,0,176,20,1,0,179,20,1,0,184,20,1,0,186,20,1,0,186,20,1,0,189,20,1,0,189,20,1,0,191,20,1,0,192,20,1,0,194,20,1,0,195,20,1,0,175,21,1,0,175,21,1,0,178,21,1,0,181,21,1,0,188,21,1,0,189,21,1,0,191,21,1,0,192,21,1,0,220,21,1,0,221,21,1,0,51,22,1,0,58,22,1,0,61,22,1,0,61,22,1,0,63,22,1,0,64,22,1,0,171,22,1,0,171,22,1,0,173,22,1,0,173,22,1,0,176,22,1,0,181,22,1,0,183,22,1,0,183,22,1,0,29,23,1,0,31,23,1,0,34,23,1,0,37,23,1,0,39,23,1,0,43,23,1,0,240,106,1,0,244,106,1,0,48,107,1,0,54,107,1,0,143,111,1,0,146,111,1,0,157,188,1,0,158,188,1,0,101,209,1,0,101,209,1,0,103,209,1,0,105,209,1,0,110,209,1,0,114,209,1,0,123,209,1,0,130,209,1,0,133,209,1,0,139,209,1,0,170,209,1,0,173,209,1,0,66,210,1,0,68,210,1,0,0,218,1,0,54,218,1,0,59,218,1,0,108,218,1,0,117,218,1,0,117,218,1,0,132,218,1,0,132,218,1,0,155,218,1,0,159,218,1,0,161,218,1,0,175,218,1,0,208,232,1,0,214,232,1,0,0,1,14,0,239,1,14,0,112,3,0,0,115,3,0,0,117,3,0,0,119,3,0,0,122,3,0,0,125,3,0,0,127,3,0,0,127,3,0,0,132,3,0,0,132,3,0,0,134,3,0,0,134,3,0,0,136,3,0,0,138,3,0,0,140,3,0,0,140,3,0,0,142,3,0,0,161,3,0,0,163,3,0,0,225,3,0,0,240,3,0,0,255,3,0,0,38,29,0,0,42,29,0,0,93,29,0,0,97,29,0,0,102,29,0,0,106,29,0,0,191,29,0,0,191,29,0,0,0,31,0,0,21,31,0,0,24,31,0,0,29,31,0,0,32,31,0,0,69,31,0,0,72,31,0,0,77,31,0,0,80,31,0,0,87,31,0,0,89,31,0,0,89,31,0,0,91,31,0,0,91,31,0,0,93,31,0,0,93,31], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+51384);
/* memory initializer */ allocate([95,31,0,0,125,31,0,0,128,31,0,0,180,31,0,0,182,31,0,0,196,31,0,0,198,31,0,0,211,31,0,0,214,31,0,0,219,31,0,0,221,31,0,0,239,31,0,0,242,31,0,0,244,31,0,0,246,31,0,0,254,31,0,0,38,33,0,0,38,33,0,0,101,171,0,0,101,171,0,0,64,1,1,0,140,1,1,0,160,1,1,0,160,1,1,0,0,210,1,0,69,210,1,0,129,10,0,0,131,10,0,0,133,10,0,0,141,10,0,0,143,10,0,0,145,10,0,0,147,10,0,0,168,10,0,0,170,10,0,0,176,10,0,0,178,10,0,0,179,10,0,0,181,10,0,0,185,10,0,0,188,10,0,0,197,10,0,0,199,10,0,0,201,10,0,0,203,10,0,0,205,10,0,0,208,10,0,0,208,10,0,0,224,10,0,0,227,10,0,0,230,10,0,0,241,10,0,0,249,10,0,0,249,10,0,0,1,10,0,0,3,10,0,0,5,10,0,0,10,10,0,0,15,10,0,0,16,10,0,0,19,10,0,0,40,10,0,0,42,10,0,0,48,10,0,0,50,10,0,0,51,10,0,0,53,10,0,0,54,10,0,0,56,10,0,0,57,10,0,0,60,10,0,0,60,10,0,0,62,10,0,0,66,10,0,0,71,10,0,0,72,10,0,0,75,10,0,0,77,10,0,0,81,10,0,0,81,10,0,0,89,10,0,0,92,10,0,0,94,10,0,0,94,10,0,0,102,10,0,0,117,10,0,0,128,46,0,0,153,46,0,0,155,46,0,0,243,46,0,0,0,47,0,0,213,47,0,0,5,48,0,0,5,48,0,0,7,48,0,0,7,48,0,0,33,48,0,0,41,48,0,0,56,48,0,0,59,48,0,0,0,52,0,0,181,77,0,0,0,78,0,0,213,159,0,0,0,249,0,0,109,250,0,0,112,250,0,0,217,250,0,0,0,0,2,0,214,166,2,0,0,167,2,0,52,183,2,0,64,183,2,0,29,184,2,0,32,184,2,0,161,206,2,0,0,248,2,0,29,250,2,0,0,17,0,0,255,17,0,0,46,48,0,0,47,48,0,0,49,49,0,0,142,49,0,0,0,50,0,0,30,50,0,0,96,50,0,0,126,50,0,0,96,169,0,0,124,169,0,0,0,172,0,0,163,215,0,0,176,215,0,0,198,215,0,0,203,215,0,0,251,215,0,0,160,255,0,0,190,255,0,0,194,255,0,0,199,255,0,0,202,255,0,0,207,255,0,0,210,255,0,0,215,255,0,0,218,255,0,0,220,255,0,0,32,23,0,0,52,23,0,0,224,8,1,0,242,8,1,0,244,8,1,0,245,8,1,0,251,8,1,0,255,8,1,0,145,5,0,0,199,5,0,0,208,5,0,0,234,5,0,0,240,5,0,0,244,5,0,0,29,251,0,0,54,251,0,0,56,251,0,0,60,251,0,0,62,251,0,0,62,251,0,0,64,251,0,0,65,251,0,0,67,251,0,0,68,251,0,0,70,251,0,0,79,251,0,0,65,48,0,0,150,48,0,0,157,48,0,0,159,48,0,0,1,176,1,0,1,176,1,0,0,242,1,0,0,242,1,0,64,8,1,0,85,8,1,0,87,8,1,0,95,8,1,0,0,3,0,0,111,3,0,0,133,4,0,0,134,4,0,0,75,6,0,0,85,6,0,0,112,6,0,0,112,6,0,0,81,9,0,0,82,9,0,0,176,26,0,0,190,26,0,0,208,28,0,0,210,28,0,0,212,28,0,0,224,28,0,0,226,28,0,0,232,28,0,0,237,28,0,0,237,28,0,0,244,28,0,0,244,28,0,0,248,28,0,0,249,28,0,0,192,29,0,0,245,29,0,0,252,29,0,0,255,29,0,0,12,32,0,0,13,32,0,0,208,32,0,0,240,32,0,0,42,48,0,0,45,48,0,0,153,48,0,0,154,48,0,0,0,254,0,0,15,254,0,0,32,254,0,0,45,254,0,0,253,1,1,0,253,1,1,0,224,2,1,0,224,2,1,0,103,209,1,0,105,209,1,0,123,209,1,0,130,209,1,0,133,209,1,0,139,209,1,0,170,209,1,0,173,209,1,0,0,1,14,0,239,1,14,0,96,11,1,0,114,11,1,0,120,11,1,0,127,11,1,0,64,11,1,0,85,11,1,0,88,11,1,0,95,11,1,0,128,169,0,0,205,169,0,0,208,169,0,0,217,169,0,0,222,169,0,0,223,169,0,0,12,32,0,0,13,32,0,0,128,16,1,0,193,16,1,0,129,12,0,0,131,12,0,0,133,12,0,0,140,12,0,0,142,12,0,0,144,12,0,0,146,12,0,0,168,12,0,0,170,12,0,0,179,12,0,0,181,12,0,0,185,12,0,0,188,12,0,0,196,12,0,0,198,12,0,0,200,12,0,0,202,12,0,0,205,12,0,0,213,12,0,0,214,12,0,0,222,12,0,0,222,12,0,0,224,12,0,0,227,12,0,0,230,12,0,0,239,12,0,0,241,12,0,0,242,12,0,0,161,48,0,0,250,48,0,0,253,48,0,0,255,48,0,0,240,49,0,0,255,49,0,0,208,50,0,0,254,50,0,0,0,51,0,0,87,51,0,0,102,255,0,0,111,255,0,0,113,255,0,0,157,255,0,0,0,176,1,0,0,176,1,0,0,169,0,0,45,169,0,0,47,169,0,0,47,169,0,0,0,10,1,0,3,10,1,0,5,10,1,0,6,10,1,0,12,10,1,0,19,10,1,0,21,10,1,0,23,10,1,0,25,10,1,0,51,10,1,0,56,10,1,0,58,10,1,0,63,10,1,0,71,10,1,0,80,10,1,0,88,10,1,0,128,23,0,0,221,23,0,0,224,23,0,0,233,23,0,0,240,23,0,0,249,23,0,0,224,25,0,0,255,25,0,0,0,18,1,0,17,18,1,0,19,18,1,0,61,18,1,0,176,18,1,0,234,18,1,0,240,18,1,0,249,18,1,0,65,0,0,0,90,0,0,0,97,0,0,0,122,0,0,0,170,0,0,0,170,0,0,0,181,0,0,0,181,0,0,0,186,0,0,0,186,0,0,0,192,0,0,0,214,0,0,0,216,0,0,0,246,0,0,0,248,0,0,0,193,2,0,0,198,2,0,0,209,2,0,0,224,2,0,0,228,2,0,0,236,2,0,0,236,2,0,0,238,2,0,0,238,2,0,0,112,3,0,0,116,3,0,0,118,3,0,0,119,3,0,0,122,3,0,0,125,3,0,0,127,3,0,0,127,3,0,0,134,3,0,0,134,3,0,0,136,3,0,0,138,3,0,0,140,3,0,0,140,3,0,0,142,3,0,0,161,3,0,0,163,3,0,0,245,3,0,0,247,3,0,0,129,4,0,0,138,4,0,0,47,5,0,0,49,5,0,0,86,5,0,0,89,5,0,0,89,5,0,0,97,5,0,0,135,5,0,0,208,5,0,0,234,5,0,0,240,5,0,0,242,5,0,0,32,6,0,0,74,6,0,0,110,6,0,0,111,6,0,0,113,6,0,0,211,6,0,0,213,6,0,0,213,6,0,0,229,6,0,0,230,6,0,0,238,6,0,0,239,6,0,0,250,6,0,0,252,6,0,0,255,6,0,0,255,6,0,0,16,7,0,0,16,7,0,0,18,7,0,0,47,7,0,0,77,7,0,0,165,7,0,0,177,7,0,0,177,7,0,0,202,7,0,0,234,7,0,0,244,7,0,0,245,7,0,0,250,7,0,0,250,7,0,0,0,8,0,0,21,8,0,0,26,8,0,0,26,8,0,0,36,8,0,0,36,8,0,0,40,8,0,0,40,8,0,0,64,8,0,0,88,8,0,0,160,8,0,0,180,8,0,0,4,9,0,0,57,9,0,0,61,9,0,0,61,9,0,0,80,9,0,0,80,9,0,0,88,9,0,0,97,9,0,0,113,9,0,0,128,9,0,0,133,9,0,0,140,9,0,0,143,9,0,0,144,9,0,0,147,9,0,0,168,9,0,0,170,9,0,0,176,9,0,0,178,9,0,0,178,9,0,0,182,9,0,0,185,9,0,0,189,9,0,0,189,9,0,0,206,9,0,0,206,9,0,0,220,9,0,0,221,9,0,0,223,9,0,0,225,9,0,0,240,9,0,0,241,9,0,0,5,10,0,0,10,10,0,0,15,10,0,0,16,10,0,0,19,10,0,0,40,10,0,0,42,10,0,0,48,10,0,0,50,10,0,0,51,10,0,0,53,10,0,0,54,10,0,0,56,10,0,0,57,10,0,0,89,10,0,0,92,10,0,0,94,10,0,0,94,10,0,0,114,10,0,0,116,10,0,0,133,10,0,0,141,10,0,0,143,10,0,0,145,10,0,0,147,10,0,0,168,10,0,0,170,10,0,0,176,10,0,0,178,10,0,0,179,10,0,0,181,10,0,0,185,10,0,0,189,10,0,0,189,10,0,0,208,10,0,0,208,10,0,0,224,10,0,0,225,10,0,0,249,10,0,0,249,10,0,0,5,11,0,0,12,11,0,0,15,11,0,0,16,11,0,0,19,11,0,0,40,11,0,0,42,11,0,0,48,11,0,0,50,11,0,0,51,11,0,0,53,11,0,0,57,11,0,0,61,11,0,0,61,11,0,0,92,11,0,0,93,11,0,0,95,11,0,0,97,11,0,0,113,11,0,0,113,11,0,0,131,11,0,0,131,11,0,0,133,11,0,0,138,11,0,0,142,11,0,0,144,11,0,0,146,11,0,0,149,11,0,0,153,11,0,0,154,11,0,0,156,11,0,0,156,11,0,0,158,11,0,0,159,11,0,0,163,11,0,0,164,11,0,0,168,11,0,0,170,11,0,0,174,11,0,0,185,11,0,0,208,11,0,0,208,11,0,0,5,12,0,0,12,12,0,0,14,12,0,0,16,12,0,0,18,12,0,0,40,12,0,0,42,12,0,0,57,12,0,0,61,12,0,0,61,12,0,0,88,12,0,0,90,12,0,0,96,12,0,0,97,12,0,0,133,12,0,0,140,12,0,0,142,12,0,0,144,12,0,0,146,12,0,0,168,12,0,0,170,12,0,0,179,12,0,0,181,12,0,0,185,12,0,0,189,12,0,0,189,12,0,0,222,12,0,0,222,12,0,0,224,12,0,0,225,12,0,0,241,12,0,0,242,12,0,0,5,13,0,0,12,13,0,0,14,13,0,0,16,13,0,0,18,13,0,0,58,13,0,0,61,13,0,0,61,13,0,0,78,13,0,0,78,13,0,0,95,13,0,0,97,13,0,0,122,13,0,0,127,13,0,0,133,13,0,0,150,13,0,0,154,13,0,0,177,13,0,0,179,13,0,0,187,13,0,0,189,13,0,0,189,13,0,0,192,13,0,0,198,13,0,0,1,14,0,0,48,14,0,0,50,14,0,0,51,14,0,0,64,14,0,0,70,14,0,0,129,14,0,0,130,14,0,0,132,14,0,0,132,14,0,0,135,14,0,0,136,14,0,0,138,14,0,0,138,14,0,0,141,14,0,0,141,14,0,0,148,14,0,0,151,14,0,0,153,14,0,0,159,14,0,0,161,14,0,0,163,14,0,0,165,14,0,0,165,14,0,0,167,14,0,0,167,14,0,0,170,14,0,0,171,14,0,0,173,14,0,0,176,14,0,0,178,14,0,0,179,14,0,0,189,14,0,0,189,14,0,0,192,14,0,0,196,14,0,0,198,14,0,0,198,14,0,0,220,14,0,0,223,14,0,0,0,15,0,0,0,15,0,0,64,15,0,0,71,15,0,0,73,15,0,0,108,15,0,0,136,15,0,0,140,15,0,0,0,16,0,0,42,16,0,0,63,16,0,0,63,16,0,0,80,16,0,0,85,16,0,0,90,16,0,0,93,16,0,0,97,16,0,0,97,16,0,0,101,16,0,0,102,16,0,0,110,16,0,0,112,16,0,0,117,16,0,0,129,16,0,0,142,16,0,0,142,16,0,0,160,16,0,0,197,16,0,0,199,16,0,0,199,16,0,0,205,16,0,0,205,16,0,0,208,16,0,0,250,16,0,0,252,16,0,0,72,18,0,0,74,18,0,0,77,18,0,0,80,18,0,0,86,18,0,0,88,18,0,0,88,18,0,0,90,18,0,0,93,18,0,0,96,18,0,0,136,18,0,0,138,18,0,0,141,18,0,0,144,18,0,0,176,18,0,0,178,18,0,0,181,18,0,0,184,18,0,0,190,18,0,0,192,18,0,0,192,18,0,0,194,18,0,0,197,18,0,0,200,18,0,0,214,18,0,0,216,18,0,0,16,19,0,0,18,19,0,0,21,19,0,0,24,19,0,0,90,19,0,0,128,19,0,0,143,19,0,0,160,19,0,0,245,19,0,0,248,19,0,0,253,19,0,0,1,20,0,0,108,22,0,0,111,22,0,0,127,22,0,0,129,22,0,0,154,22,0,0,160,22,0,0,234,22,0,0,241,22,0,0,248,22,0,0,0,23,0,0,12,23,0,0,14,23,0,0,17,23,0,0,32,23,0,0,49,23,0,0,64,23,0,0,81,23,0,0,96,23,0,0,108,23,0,0,110,23,0,0,112,23,0,0,128,23,0,0,179,23,0,0,215,23,0,0,215,23,0,0,220,23,0,0,220,23,0,0,32,24,0,0,119,24,0,0,128,24,0,0,168,24,0,0,170,24,0,0,170,24,0,0,176,24,0,0,245,24,0,0,0,25,0,0,30,25,0,0,80,25,0,0,109,25,0,0,112,25,0,0,116,25,0,0,128,25,0,0,171,25,0,0,176,25,0,0,201,25,0,0,0,26,0,0,22,26,0,0,32,26,0,0,84,26,0,0,167,26,0,0,167,26,0,0,5,27,0,0,51,27,0,0,69,27,0,0,75,27,0,0,131,27,0,0,160,27,0,0,174,27,0,0,175,27,0,0,186,27,0,0,229,27,0,0,0,28,0,0,35,28,0,0,77,28,0,0,79,28,0,0,90,28,0,0,125,28,0,0,233,28,0,0,236,28,0,0,238,28,0,0,241,28,0,0,245,28,0,0,246,28,0,0,0,29,0,0,191,29,0,0,0,30,0,0,21,31,0,0,24,31,0,0,29,31,0,0,32,31,0,0,69,31,0,0,72,31,0,0,77,31,0,0,80,31,0,0,87,31,0,0,89,31,0,0,89,31,0,0,91,31,0,0,91,31,0,0,93,31,0,0,93,31,0,0,95,31,0,0,125,31,0,0,128,31,0,0,180,31,0,0,182,31,0,0,188,31,0,0,190,31,0,0,190,31,0,0,194,31,0,0,196,31,0,0,198,31,0,0,204,31,0,0,208,31,0,0,211,31,0,0,214,31,0,0,219,31,0,0,224,31,0,0,236,31,0,0,242,31,0,0,244,31,0,0,246,31,0,0,252,31,0,0,113,32,0,0,113,32,0,0,127,32,0,0,127,32,0,0,144,32,0,0,156,32,0,0,2,33,0,0,2,33,0,0,7,33,0,0,7,33,0,0,10,33,0,0,19,33,0,0,21,33,0,0,21,33,0,0,25,33,0,0,29,33,0,0,36,33,0,0,36,33,0,0,38,33,0,0,38,33,0,0,40,33,0,0,40,33,0,0,42,33,0,0,45,33,0,0,47,33,0,0,57,33,0,0,60,33,0,0,63,33,0,0,69,33,0,0,73,33,0,0,78,33,0,0,78,33,0,0,131,33,0,0,132,33,0,0,0,44,0,0,46,44,0,0,48,44,0,0,94,44,0,0,96,44,0,0,228,44,0,0,235,44,0,0,238,44,0,0,242,44,0,0,243,44,0,0,0,45,0,0,37,45,0,0,39,45,0,0,39,45,0,0,45,45,0,0,45,45,0,0,48,45,0,0,103,45,0,0,111,45,0,0,111,45,0,0,128,45,0,0,150,45,0,0,160,45,0,0,166,45,0,0,168,45,0,0,174,45,0,0,176,45,0,0,182,45,0,0,184,45,0,0,190,45,0,0,192,45,0,0,198,45,0,0,200,45,0,0,206,45,0,0,208,45,0,0,214,45,0,0,216,45,0,0,222,45,0,0,47,46,0,0,47,46,0,0,5,48,0,0,6,48,0,0,49,48,0,0,53,48,0,0,59,48,0,0,60,48,0,0,65,48,0,0,150,48,0,0,157,48,0,0,159,48,0,0,161,48,0,0,250,48,0,0,252,48,0,0,255,48,0,0,5,49,0,0,45,49,0,0,49,49,0,0,142,49,0,0,160,49,0,0,186,49,0,0,240,49,0,0,255,49,0,0,0,52,0,0,181,77,0,0,0,78,0,0,213,159,0,0,0,160,0,0,140,164,0,0,208,164,0,0,253,164,0,0,0,165,0,0,12,166,0,0,16,166,0,0,31,166,0,0,42,166,0,0,43,166,0,0,64,166,0,0,110,166,0,0,127,166,0,0,157,166,0,0,160,166,0,0,229,166,0,0,23,167,0,0,31,167,0,0,34,167,0,0,136,167,0,0,139,167,0,0,173,167,0,0,176,167,0,0,183,167,0,0,247,167,0,0,1,168,0,0,3,168,0,0,5,168,0,0,7,168,0,0,10,168,0,0,12,168,0,0,34,168,0,0,64,168,0,0,115,168,0,0,130,168,0,0,179,168,0,0,242,168,0,0,247,168,0,0,251,168,0,0,251,168,0,0,253,168,0,0,253,168,0,0,10,169,0,0,37,169,0,0,48,169,0,0,70,169,0,0,96,169,0,0,124,169,0,0,132,169,0,0,178,169,0,0,207,169,0,0,207,169,0,0,224,169,0,0,228,169,0,0,230,169,0,0,239,169,0,0,250,169,0,0,254,169,0,0,0,170,0,0,40,170,0,0,64,170,0,0,66,170,0,0,68,170,0,0,75,170,0,0,96,170,0,0,118,170,0,0,122,170,0,0,122,170,0,0,126,170,0,0,175,170,0,0,177,170,0,0,177,170,0,0,181,170,0,0,182,170,0,0,185,170,0,0,189,170,0,0,192,170,0,0,192,170,0,0,194,170,0,0,194,170,0,0,219,170,0,0,221,170,0,0,224,170,0,0,234,170,0,0,242,170,0,0,244,170,0,0,1,171,0,0,6,171,0,0,9,171,0,0,14,171,0,0,17,171,0,0,22,171,0,0,32,171,0,0,38,171,0,0,40,171,0,0,46,171,0,0,48,171,0,0,90,171,0,0,92,171,0,0,101,171,0,0,112,171,0,0,226,171,0,0,0,172,0,0,163,215,0,0,176,215,0,0,198,215,0,0,203,215,0,0,251,215,0,0,0,249,0,0,109,250,0,0,112,250,0,0,217,250,0,0,0,251,0,0,6,251,0,0,19,251,0,0,23,251,0,0,29,251,0,0,29,251,0,0,31,251,0,0,40,251,0,0,42,251,0,0,54,251,0,0,56,251,0,0,60,251,0,0,62,251,0,0,62,251,0,0,64,251,0,0,65,251,0,0,67,251,0,0,68,251,0,0,70,251,0,0,177,251,0,0,211,251,0,0,61,253,0,0,80,253,0,0,143,253,0,0,146,253,0,0,199,253,0,0,240,253,0,0,251,253,0,0,112,254,0,0,116,254,0,0,118,254,0,0,252,254,0,0,33,255,0,0,58,255,0,0,65,255,0,0,90,255,0,0,102,255,0,0,190,255,0,0,194,255,0,0,199,255,0,0,202,255,0,0,207,255,0,0,210,255,0,0,215,255,0,0,218,255,0,0,220,255,0,0,0,0,1,0,11,0,1,0,13,0,1,0,38,0,1,0,40,0,1,0,58,0,1,0,60,0,1,0,61,0,1,0,63,0,1,0,77,0,1,0,80,0,1,0,93,0,1,0,128,0,1,0,250,0,1,0,128,2,1,0,156,2,1,0,160,2,1,0,208,2,1,0,0,3,1,0,31,3,1,0,48,3,1,0,64,3,1,0,66,3,1,0,73,3,1,0,80,3,1,0,117,3,1,0,128,3,1,0,157,3,1,0,160,3,1,0,195,3,1,0,200,3,1,0,207,3,1,0,0,4,1,0,157,4,1,0,0,5,1,0,39,5,1,0,48,5,1,0,99,5,1,0,0,6,1,0,54,7,1,0,64,7,1,0,85,7,1,0,96,7,1,0,103,7,1,0,0,8,1,0,5,8,1,0,8,8,1,0,8,8,1,0,10,8,1,0,53,8,1,0,55,8,1,0,56,8,1,0,60,8,1,0,60,8,1,0,63,8,1,0,85,8,1,0,96,8,1,0,118,8,1,0,128,8,1,0,158,8,1,0,224,8,1,0,242,8,1,0,244,8,1,0,245,8,1,0,0,9,1,0,21,9,1,0,32,9,1,0,57,9,1,0,128,9,1,0,183,9,1,0,190,9,1,0,191,9,1,0,0,10,1,0,0,10,1,0,16,10,1,0,19,10,1,0,21,10,1,0,23,10,1,0,25,10,1,0,51,10,1,0,96,10,1,0,124,10,1,0,128,10,1,0,156,10,1,0,192,10,1,0,199,10,1,0,201,10,1,0,228,10,1,0,0,11,1,0,53,11,1,0,64,11,1,0,85,11,1,0,96,11,1,0,114,11,1,0,128,11,1,0,145,11,1,0,0,12,1,0,72,12,1,0,128,12,1,0,178,12,1,0,192,12,1,0,242,12,1,0,3,16,1,0,55,16,1,0,131,16,1,0,175,16,1,0,208,16,1,0,232,16,1,0,3,17,1,0,38,17,1,0,80,17,1,0,114,17,1,0,118,17,1,0,118,17,1,0,131,17,1,0,178,17,1,0,193,17,1,0,196,17,1,0,218,17,1,0,218,17,1,0,220,17,1,0,220,17,1,0,0,18,1,0,17,18,1,0,19,18,1,0,43,18,1,0,128,18,1,0,134,18,1,0,136,18,1,0,136,18,1,0,138,18,1,0,141,18,1,0,143,18,1,0,157,18,1,0,159,18,1,0,168,18,1,0,176,18,1,0,222,18,1,0,5,19,1,0,12,19,1,0,15,19,1,0,16,19,1,0,19,19,1,0,40,19,1,0,42,19,1,0,48,19,1,0,50,19,1,0,51,19,1,0,53,19,1,0,57,19,1,0,61,19,1,0,61,19,1,0,80,19,1,0,80,19,1,0,93,19,1,0,97,19,1,0,128,20,1,0,175,20,1,0,196,20,1,0,197,20,1,0,199,20,1,0,199,20,1,0,128,21,1,0,174,21,1,0,216,21,1,0,219,21,1,0,0,22,1,0,47,22,1,0,68,22,1,0,68,22,1,0,128,22,1,0,170,22,1,0,0,23,1,0,25,23,1,0,160,24,1,0,223,24,1,0,255,24,1,0,255,24,1,0,192,26,1,0,248,26,1,0,0,32,1,0,153,35,1,0,128,36,1,0,67,37,1,0,0,48,1,0,46,52,1,0,0,68,1,0,70,70,1,0,0,104,1,0,56,106,1,0,64,106,1,0,94,106,1,0,208,106,1,0,237,106,1,0,0,107,1,0,47,107,1,0,64,107,1,0,67,107,1,0,99,107,1,0,119,107,1,0,125,107,1,0,143,107,1,0,0,111,1,0,68,111,1,0,80,111,1,0,80,111,1,0,147,111,1,0,159,111,1,0,0,176,1,0,1,176,1,0,0,188,1,0,106,188,1,0,112,188,1,0,124,188,1,0,128,188,1,0,136,188,1,0,144,188,1,0,153,188,1,0,0,212,1,0,84,212,1,0,86,212,1,0,156,212,1,0,158,212,1,0,159,212,1,0,162,212,1,0,162,212,1,0,165,212,1,0,166,212,1,0,169,212,1,0,172,212,1,0,174,212,1,0,185,212,1,0,187,212,1,0,187,212,1,0,189,212,1,0,195,212,1,0,197,212,1,0,5,213,1,0,7,213,1,0,10,213,1,0,13,213,1,0,20,213,1,0,22,213,1,0,28,213,1,0,30,213,1,0,57,213,1,0,59,213,1,0,62,213,1,0,64,213,1,0,68,213,1,0,70,213,1,0,70,213,1,0,74,213,1,0,80,213,1,0,82,213,1,0,165,214,1,0,168,214,1,0,192,214,1,0,194,214,1,0,218,214,1,0,220,214,1,0,250,214,1,0,252,214,1,0,20,215,1,0,22,215,1,0,52,215,1,0,54,215,1,0,78,215,1,0,80,215,1,0,110,215,1,0,112,215,1,0,136,215,1,0,138,215,1,0,168,215,1,0,170,215,1,0,194,215,1,0,196,215,1,0,203,215,1,0,0,232,1,0,196,232,1,0,0,238,1,0,3,238,1,0,5,238,1,0,31,238,1,0,33,238,1,0,34,238,1,0,36,238,1,0,36,238,1,0,39,238,1,0,39,238,1,0,41,238,1,0,50,238,1,0,52,238,1,0,55,238,1,0,57,238,1,0,57,238,1,0,59,238,1,0,59,238,1,0,66,238,1,0,66,238,1,0,71,238,1,0,71,238,1,0,73,238,1,0,73,238,1,0,75,238,1,0,75,238,1,0,77,238,1,0,79,238,1,0,81,238,1,0,82,238,1,0,84,238,1,0,84,238,1,0,87,238,1,0,87,238,1,0,89,238,1,0,89,238,1,0,91,238,1,0,91,238,1,0,93,238,1,0,93,238,1,0,95,238,1,0,95,238,1,0,97,238,1,0,98,238,1,0,100,238,1,0,100,238,1,0,103,238,1,0,106,238,1,0,108,238,1,0,114,238,1,0,116,238,1,0,119,238,1,0,121,238,1,0,124,238,1,0,126,238,1,0,126,238,1,0,128,238,1,0,137,238,1,0,139,238,1,0,155,238,1,0,161,238,1,0,163,238,1,0,165,238,1,0,169,238,1,0,171,238,1,0,187,238,1,0,0,0,2,0,214,166,2,0,0,167,2,0,52,183,2,0,64,183,2,0,29,184,2,0,32,184,2,0,161,206,2,0,0,248,2,0,29,250,2,0,65,0,0,0,90,0,0,0,97,0,0,0,122,0,0,0,181,0,0,0,181,0,0,0,192,0,0,0,214,0,0,0,216,0,0,0,246,0,0,0,248,0,0,0,186,1,0,0,188,1,0,0,191,1,0,0,196,1,0,0,147,2,0,0,149,2,0,0,175,2,0,0,112,3,0,0,115,3,0,0,118,3,0,0,119,3,0,0,123,3,0,0,125,3,0,0,127,3,0,0,127,3,0,0,134,3,0,0,134,3,0,0,136,3,0,0,138,3,0,0,140,3,0,0,140,3,0,0,142,3,0,0,161,3,0,0,163,3,0,0,245,3,0,0,247,3,0,0,129,4,0,0,138,4,0,0,47,5,0,0,49,5,0,0,86,5,0,0,97,5,0,0,135,5,0,0,160,16,0,0,197,16,0,0,199,16,0,0,199,16,0,0,205,16,0,0,205,16,0,0,160,19,0,0,245,19,0,0,248,19,0,0,253,19,0,0,0,29,0,0,43,29,0,0,107,29,0,0,119,29,0,0,121,29,0,0,154,29,0,0,0,30,0,0,21,31,0,0,24,31,0,0,29,31,0,0,32,31,0,0,69,31,0,0,72,31,0,0,77,31,0,0,80,31,0,0,87,31,0,0,89,31,0,0,89,31,0,0,91,31,0,0,91,31,0,0,93,31,0,0,93,31,0,0,95,31,0,0,125,31,0,0,128,31,0,0,180,31,0,0,182,31,0,0,188,31,0,0,190,31,0,0,190,31,0,0,194,31,0,0,196,31,0,0,198,31,0,0,204,31,0,0,208,31,0,0,211,31,0,0,214,31,0,0,219,31,0,0,224,31,0,0,236,31,0,0,242,31,0,0,244,31,0,0,246,31,0,0,252,31,0,0,2,33,0,0,2,33,0,0,7,33,0,0,7,33,0,0,10,33,0,0,19,33,0,0,21,33,0,0,21,33,0,0,25,33,0,0,29,33,0,0,36,33,0,0,36,33,0,0,38,33,0,0,38,33,0,0,40,33,0,0,40,33,0,0,42,33,0,0,45,33,0,0,47,33,0,0,52,33,0,0,57,33,0,0,57,33,0,0,60,33,0,0,63,33,0,0,69,33,0,0,73,33,0,0,78,33,0,0,78,33,0,0,131,33,0,0,132,33,0,0,0,44,0,0,46,44,0,0,48,44,0,0,94,44,0,0,96,44,0,0,123,44,0,0,126,44,0,0,228,44,0,0,235,44,0,0,238,44,0,0,242,44,0,0,243,44,0,0,0,45,0,0,37,45,0,0,39,45,0,0,39,45,0,0,45,45,0,0,45,45,0,0,64,166,0,0,109,166,0,0,128,166,0,0,155,166,0,0,34,167,0,0,111,167,0,0,113,167,0,0,135,167,0,0,139,167,0,0,142,167,0,0,144,167,0,0,173,167,0,0,176,167,0,0,183,167,0,0,250,167,0,0,250,167,0,0,48,171,0,0,90,171,0,0,96,171,0,0,101,171,0,0,112,171,0,0,191,171,0,0,0,251,0,0,6,251,0,0,19,251,0,0,23,251,0,0,33,255,0,0,58,255,0,0,65,255,0,0,90,255,0,0,0,4,1,0,79,4,1,0,128,12,1,0,178,12,1,0,192,12,1,0,242,12,1,0,160,24,1,0,223,24,1,0,0,212,1,0,84,212,1,0,86,212,1,0,156,212,1,0,158,212,1,0,159,212,1,0,162,212,1,0,162,212,1,0,165,212,1,0,166,212,1,0,169,212,1,0,172,212,1,0,174,212,1,0,185,212,1,0,187,212,1,0,187,212,1,0,189,212,1,0,195,212,1,0,197,212,1,0,5,213,1,0,7,213,1,0,10,213,1,0,13,213,1,0,20,213,1,0,22,213,1,0,28,213,1,0,30,213,1,0,57,213,1,0,59,213,1,0,62,213,1,0,64,213,1,0,68,213,1,0,70,213,1,0,70,213,1,0,74,213,1,0,80,213,1,0,82,213,1,0,165,214,1,0,168,214,1,0,192,214,1,0,194,214,1,0,218,214,1,0,220,214,1,0,250,214,1,0,252,214,1,0,20,215,1,0,22,215,1,0,52,215,1,0,54,215,1,0,78,215,1,0,80,215,1,0,110,215,1,0,112,215,1,0,136,215,1,0,138,215,1,0,168,215,1,0,170,215,1,0,194,215,1,0,196,215,1,0,203,215,1,0,129,14,0,0,130,14,0,0,132,14,0,0,132,14,0,0,135,14,0,0,136,14,0,0,138,14,0,0,138,14,0,0,141,14,0,0,141,14,0,0,148,14,0,0,151,14,0,0,153,14,0,0,159,14,0,0,161,14,0,0,163,14,0,0,165,14,0,0,165,14,0,0,167,14,0,0,167,14,0,0,170,14,0,0,171,14,0,0,173,14,0,0,185,14,0,0,187,14,0,0,189,14,0,0,192,14,0,0,196,14,0,0,198,14,0,0,198,14,0,0,200,14,0,0,205,14,0,0,208,14,0,0,217,14,0,0,220,14,0,0,223,14,0,0,65,0,0,0,90,0,0,0,97,0,0,0,122,0,0,0,170,0,0,0,170,0,0,0,186,0,0,0,186,0,0,0,192,0,0,0,214,0,0,0,216,0,0,0,246,0,0,0,248,0,0,0,184,2,0,0,224,2,0,0,228,2,0,0,0,29,0,0,37,29,0,0,44,29,0,0,92,29,0,0,98,29,0,0,101,29,0,0,107,29,0,0,119,29,0,0,121,29,0,0,190,29,0,0,0,30,0,0,255,30,0,0,113,32,0,0,113,32,0,0,127,32,0,0,127,32,0,0,144,32,0,0,156,32,0,0,42,33,0,0,43,33,0,0,50,33,0,0,50,33,0,0,78,33,0,0,78,33,0,0,96,33,0,0,136,33,0,0,96,44,0,0,127,44,0,0,34,167,0,0,135,167,0,0,139,167,0,0,173,167,0,0,176,167,0,0,183,167,0,0,247,167,0,0,255,167,0,0,48,171,0,0,90,171,0,0,92,171,0,0,100,171,0,0,0,251,0,0,6,251,0,0,33,255,0,0,58,255,0,0,65,255,0,0,90,255,0,0,0,28,0,0,55,28,0,0,59,28,0,0,73,28,0,0,77,28,0,0,79,28,0,0,0,25,0,0,30,25,0,0,32,25,0,0,43,25,0,0,48,25,0,0,59,25,0,0,64,25,0,0,64,25,0,0,68,25,0,0,79,25,0,0,0,6,1,0,54,7,1,0,64,7,1,0,85,7,1,0,96,7,1,0,103,7,1,0,0,0,1,0,11,0,1,0,13,0,1,0,38,0,1,0,40,0,1,0,58,0,1,0,60,0,1,0,61,0,1,0,63,0,1,0,77,0,1,0,80,0,1,0,93,0,1,0,128,0,1,0,250,0,1,0,208,164,0,0,255,164,0,0,97,0,0,0,122,0,0,0,181,0,0,0,181,0,0,0,223,0,0,0,246,0,0,0,248,0,0,0,255,0,0,0,1,1,0,0,1,1,0,0,3,1,0,0,3,1,0,0,5,1,0,0,5,1,0,0,7,1,0,0,7,1,0,0,9,1,0,0,9,1,0,0,11,1,0,0,11,1,0,0,13,1,0,0,13,1,0,0,15,1,0,0,15,1,0,0,17,1,0,0,17,1,0,0,19,1,0,0,19,1,0,0,21,1,0,0,21,1,0,0,23,1,0,0,23,1,0,0,25,1,0,0,25,1,0,0,27,1,0,0,27,1,0,0,29,1,0,0,29,1,0,0,31,1,0,0,31,1,0,0,33,1,0,0,33,1,0,0,35,1,0,0,35,1,0,0,37,1,0,0,37,1,0,0,39,1,0,0,39,1,0,0,41,1,0,0,41,1,0,0,43,1,0,0,43,1,0,0,45,1,0,0,45,1,0,0,47,1,0,0,47,1,0,0,49,1,0,0,49,1,0,0,51,1,0,0,51,1,0,0,53,1,0,0,53,1,0,0,55,1,0,0,56,1,0,0,58,1,0,0,58,1,0,0,60,1,0,0,60,1,0,0,62,1,0,0,62,1,0,0,64,1,0,0,64,1,0,0,66,1,0,0,66,1,0,0,68,1,0,0,68,1,0,0,70,1,0,0,70,1,0,0,72,1,0,0,73,1,0,0,75,1,0,0,75,1,0,0,77,1,0,0,77,1,0,0,79,1,0,0,79,1,0,0,81,1,0,0,81,1,0,0,83,1,0,0,83,1,0,0,85,1,0,0,85,1,0,0,87,1,0,0,87,1,0,0,89,1,0,0,89,1,0,0,91,1,0,0,91,1,0,0,93,1,0,0,93,1,0,0,95,1,0,0,95,1,0,0,97,1,0,0,97,1,0,0,99,1,0,0,99,1,0,0,101,1,0,0,101,1,0,0,103,1,0,0,103,1,0,0,105,1,0,0,105,1,0,0,107,1,0,0,107,1,0,0,109,1,0,0,109,1,0,0,111,1,0,0,111,1,0,0,113,1,0,0,113,1,0,0,115,1,0,0,115,1,0,0,117,1,0,0,117,1,0,0,119,1,0,0,119,1,0,0,122,1,0,0,122,1,0,0,124,1,0,0,124,1,0,0,126,1,0,0,128,1,0,0,131,1,0,0,131,1,0,0,133,1,0,0,133,1,0,0,136,1,0,0,136,1,0,0,140,1,0,0,141,1,0,0,146,1,0,0,146,1,0,0,149,1,0,0,149,1,0,0,153,1,0,0,155,1,0,0,158,1,0,0,158,1,0,0,161,1,0,0,161,1,0,0,163,1,0,0,163,1,0,0,165,1,0,0,165,1,0,0,168,1,0,0,168,1,0,0,170,1,0,0,171,1,0,0,173,1,0,0,173,1,0,0,176,1,0,0,176,1,0,0,180,1,0,0,180,1,0,0,182,1,0,0,182,1,0,0,185,1,0,0,186,1,0,0,189,1,0,0,191,1,0,0,198,1,0,0,198,1,0,0,201,1,0,0,201,1,0,0,204,1,0,0,204,1,0,0,206,1,0,0,206,1,0,0,208,1,0,0,208,1,0,0,210,1,0,0,210,1,0,0,212,1,0,0,212,1,0,0,214,1,0,0,214,1,0,0,216,1,0,0,216,1,0,0,218,1,0,0,218,1,0,0,220,1,0,0,221,1,0,0,223,1,0,0,223,1,0,0,225,1,0,0,225,1,0,0,227,1,0,0,227,1,0,0,229,1,0,0,229,1,0,0,231,1,0,0,231,1,0,0,233,1,0,0,233,1,0,0,235,1,0,0,235,1,0,0,237,1,0,0,237,1,0,0,239,1,0,0,240,1,0,0,243,1,0,0,243,1,0,0,245,1,0,0,245,1,0,0,249,1,0,0,249,1,0,0,251,1,0,0,251,1,0,0,253,1,0,0,253,1,0,0,255,1,0,0,255,1,0,0,1,2,0,0,1,2,0,0,3,2,0,0,3,2,0,0,5,2,0,0,5,2,0,0,7,2,0,0,7,2,0,0,9,2,0,0,9,2,0,0,11,2,0,0,11,2,0,0,13,2,0,0,13,2,0,0,15,2,0,0,15,2,0,0,17,2,0,0,17,2,0,0,19,2,0,0,19,2,0,0,21,2,0,0,21,2,0,0,23,2,0,0,23,2,0,0,25,2,0,0,25,2,0,0,27,2,0,0,27,2,0,0,29,2,0,0,29,2,0,0,31,2,0,0,31,2,0,0,33,2,0,0,33,2,0,0,35,2,0,0,35,2,0,0,37,2,0,0,37,2,0,0,39,2,0,0,39,2,0,0,41,2,0,0,41,2,0,0,43,2,0,0,43,2,0,0,45,2,0,0,45,2,0,0,47,2,0,0,47,2,0,0,49,2,0,0,49,2,0,0,51,2,0,0,57,2,0,0,60,2,0,0,60,2,0,0,63,2,0,0,64,2,0,0,66,2,0,0,66,2,0,0,71,2,0,0,71,2,0,0,73,2,0,0,73,2,0,0,75,2,0,0,75,2,0,0,77,2,0,0,77,2,0,0,79,2,0,0,147,2,0,0,149,2,0,0,175,2,0,0,113,3,0,0,113,3,0,0,115,3,0,0,115,3,0,0,119,3,0,0,119,3,0,0,123,3,0,0,125,3,0,0,144,3,0,0,144,3,0,0,172,3,0,0,206,3,0,0,208,3,0,0,209,3,0,0,213,3,0,0,215,3,0,0,217,3,0,0,217,3,0,0,219,3,0,0,219,3,0,0,221,3,0,0,221,3,0,0,223,3,0,0,223,3,0,0,225,3,0,0,225,3,0,0,227,3,0,0,227,3,0,0,229,3,0,0,229,3,0,0,231,3,0,0,231,3,0,0,233,3,0,0,233,3,0,0,235,3,0,0,235,3,0,0,237,3,0,0,237,3,0,0,239,3,0,0,243,3,0,0,245,3,0,0,245,3,0,0,248,3,0,0,248,3,0,0,251,3,0,0,252,3,0,0,48,4,0,0,95,4,0,0,97,4,0,0,97,4,0,0,99,4,0,0,99,4,0,0,101,4,0,0,101,4,0,0,103,4,0,0,103,4,0,0,105,4,0,0,105,4,0,0,107,4,0,0,107,4,0,0,109,4,0,0,109,4,0,0,111,4,0,0,111,4,0,0,113,4,0,0,113,4,0,0,115,4,0,0,115,4,0,0,117,4,0,0,117,4,0,0,119,4,0,0,119,4,0,0,121,4,0,0,121,4,0,0,123,4,0,0,123,4,0,0,125,4,0,0,125,4,0,0,127,4,0,0,127,4,0,0,129,4,0,0,129,4,0,0,139,4,0,0,139,4,0,0,141,4,0,0,141,4,0,0,143,4,0,0,143,4,0,0,145,4,0,0,145,4,0,0,147,4,0,0,147,4,0,0,149,4,0,0,149,4,0,0,151,4,0,0,151,4,0,0,153,4,0,0,153,4,0,0,155,4,0,0,155,4,0,0,157,4,0,0,157,4,0,0,159,4,0,0,159,4,0,0,161,4,0,0,161,4,0,0,163,4,0,0,163,4,0,0,165,4,0,0,165,4,0,0,167,4,0,0,167,4,0,0,169,4,0,0,169,4,0,0,171,4,0,0,171,4,0,0,173,4,0,0,173,4,0,0,175,4,0,0,175,4,0,0,177,4,0,0,177,4,0,0,179,4,0,0,179,4,0,0,181,4,0,0,181,4,0,0,183,4,0,0,183,4,0,0,185,4,0,0,185,4,0,0,187,4,0,0,187,4,0,0,189,4,0,0,189,4,0,0,191,4,0,0,191,4,0,0,194,4,0,0,194,4,0,0,196,4,0,0,196,4,0,0,198,4,0,0,198,4,0,0,200,4,0,0,200,4,0,0,202,4,0,0,202,4,0,0,204,4,0,0,204,4,0,0,206,4,0,0,207,4,0,0,209,4,0,0,209,4,0,0,211,4,0,0,211,4,0,0,213,4,0,0,213,4,0,0,215,4,0,0,215,4,0,0,217,4,0,0,217,4,0,0,219,4,0,0,219,4,0,0,221,4,0,0,221,4,0,0,223,4,0,0,223,4,0,0,225,4,0,0,225,4,0,0,227,4,0,0,227,4,0,0,229,4,0,0,229,4,0,0,231,4,0,0,231,4,0,0,233,4,0,0,233,4,0,0,235,4,0,0,235,4,0,0,237,4,0,0,237,4,0,0,239,4,0,0,239,4,0,0,241,4,0,0,241,4,0,0,243,4,0,0,243,4,0,0,245,4,0,0,245,4,0,0,247,4,0,0,247,4,0,0,249,4,0,0,249,4,0,0,251,4,0,0,251,4,0,0,253,4,0,0,253,4,0,0,255,4,0,0,255,4,0,0,1,5,0,0,1,5,0,0,3,5,0,0,3,5,0,0,5,5,0,0,5,5,0,0,7,5,0,0,7,5,0,0,9,5,0,0,9,5,0,0,11,5,0,0,11,5,0,0,13,5,0,0,13,5,0,0,15,5,0,0,15,5,0,0,17,5,0,0,17,5,0,0,19,5,0,0,19,5,0,0,21,5,0,0,21,5,0,0,23,5,0,0,23,5,0,0,25,5,0,0,25,5,0,0,27,5,0,0,27,5,0,0,29,5,0,0,29,5,0,0,31,5,0,0,31,5,0,0,33,5,0,0,33,5,0,0,35,5,0,0,35,5,0,0,37,5,0,0,37,5,0,0,39,5,0,0,39,5,0,0,41,5,0,0,41,5,0,0,43,5,0,0,43,5,0,0,45,5,0,0,45,5,0,0,47,5,0,0,47,5,0,0,97,5,0,0,135,5,0,0,248,19,0,0,253,19,0,0,0,29,0,0,43,29,0,0,107,29,0,0,119,29,0,0,121,29,0,0,154,29,0,0,1,30,0,0,1,30,0,0,3,30,0,0,3,30,0,0,5,30,0,0,5,30,0,0,7,30,0,0,7,30,0,0,9,30,0,0,9,30,0,0,11,30,0,0,11,30,0,0,13,30,0,0,13,30,0,0,15,30,0,0,15,30,0,0,17,30,0,0,17,30,0,0,19,30,0,0,19,30,0,0,21,30,0,0,21,30,0,0,23,30,0,0,23,30,0,0,25,30,0,0,25,30,0,0,27,30,0,0,27,30,0,0,29,30,0,0,29,30,0,0,31,30,0,0,31,30,0,0,33,30,0,0,33,30,0,0,35,30,0,0,35,30,0,0,37,30,0,0,37,30,0,0,39,30,0,0,39,30,0,0,41,30,0,0,41,30,0,0,43,30,0,0,43,30,0,0,45,30,0,0,45,30,0,0,47,30,0,0,47,30,0,0,49,30,0,0,49,30,0,0,51,30,0,0,51,30,0,0,53,30,0,0,53,30,0,0,55,30,0,0,55,30,0,0,57,30,0,0,57,30,0,0,59,30,0,0,59,30,0,0,61,30,0,0,61,30,0,0,63,30,0,0,63,30,0,0,65,30,0,0,65,30,0,0,67,30,0,0,67,30,0,0,69,30,0,0,69,30,0,0,71,30,0,0,71,30,0,0,73,30,0,0,73,30,0,0,75,30,0,0,75,30,0,0,77,30,0,0,77,30,0,0,79,30,0,0,79,30,0,0,81,30,0,0,81,30,0,0,83,30,0,0,83,30,0,0,85,30,0,0,85,30,0,0,87,30,0,0,87,30,0,0,89,30,0,0,89,30,0,0,91,30,0,0,91,30,0,0,93,30,0,0,93,30,0,0,95,30,0,0,95,30,0,0,97,30,0,0,97,30,0,0,99,30,0,0,99,30,0,0,101,30,0,0,101,30,0,0,103,30,0,0,103,30,0,0,105,30,0,0,105,30,0,0,107,30,0,0,107,30,0,0,109,30,0,0,109,30,0,0,111,30,0,0,111,30,0,0,113,30,0,0,113,30,0,0,115,30,0,0,115,30,0,0,117,30,0,0,117,30,0,0,119,30,0,0,119,30,0,0,121,30,0,0,121,30,0,0,123,30,0,0,123,30,0,0,125,30,0,0,125,30,0,0,127,30,0,0,127,30,0,0,129,30,0,0,129,30,0,0,131,30,0,0,131,30,0,0,133,30,0,0,133,30,0,0,135,30,0,0,135,30,0,0,137,30,0,0,137,30,0,0,139,30,0,0,139,30,0,0,141,30,0,0,141,30,0,0,143,30,0,0,143,30,0,0,145,30,0,0,145,30,0,0,147,30,0,0,147,30,0,0,149,30,0,0,157,30,0,0,159,30,0,0,159,30,0,0,161,30,0,0,161,30,0,0,163,30,0,0,163,30,0,0,165,30,0,0,165,30,0,0,167,30,0,0,167,30,0,0,169,30,0,0,169,30,0,0,171,30,0,0,171,30,0,0,173,30,0,0,173,30,0,0,175,30,0,0,175,30,0,0,177,30,0,0,177,30,0,0,179,30,0,0,179,30,0,0,181,30,0,0,181,30,0,0,183,30,0,0,183,30,0,0,185,30,0,0,185,30,0,0,187,30,0,0,187,30,0,0,189,30,0,0,189,30,0,0,191,30,0,0,191,30,0,0,193,30,0,0,193,30,0,0,195,30,0,0,195,30], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+61624);
/* memory initializer */ allocate([197,30,0,0,197,30,0,0,199,30,0,0,199,30,0,0,201,30,0,0,201,30,0,0,203,30,0,0,203,30,0,0,205,30,0,0,205,30,0,0,207,30,0,0,207,30,0,0,209,30,0,0,209,30,0,0,211,30,0,0,211,30,0,0,213,30,0,0,213,30,0,0,215,30,0,0,215,30,0,0,217,30,0,0,217,30,0,0,219,30,0,0,219,30,0,0,221,30,0,0,221,30,0,0,223,30,0,0,223,30,0,0,225,30,0,0,225,30,0,0,227,30,0,0,227,30,0,0,229,30,0,0,229,30,0,0,231,30,0,0,231,30,0,0,233,30,0,0,233,30,0,0,235,30,0,0,235,30,0,0,237,30,0,0,237,30,0,0,239,30,0,0,239,30,0,0,241,30,0,0,241,30,0,0,243,30,0,0,243,30,0,0,245,30,0,0,245,30,0,0,247,30,0,0,247,30,0,0,249,30,0,0,249,30,0,0,251,30,0,0,251,30,0,0,253,30,0,0,253,30,0,0,255,30,0,0,7,31,0,0,16,31,0,0,21,31,0,0,32,31,0,0,39,31,0,0,48,31,0,0,55,31,0,0,64,31,0,0,69,31,0,0,80,31,0,0,87,31,0,0,96,31,0,0,103,31,0,0,112,31,0,0,125,31,0,0,128,31,0,0,135,31,0,0,144,31,0,0,151,31,0,0,160,31,0,0,167,31,0,0,176,31,0,0,180,31,0,0,182,31,0,0,183,31,0,0,190,31,0,0,190,31,0,0,194,31,0,0,196,31,0,0,198,31,0,0,199,31,0,0,208,31,0,0,211,31,0,0,214,31,0,0,215,31,0,0,224,31,0,0,231,31,0,0,242,31,0,0,244,31,0,0,246,31,0,0,247,31,0,0,10,33,0,0,10,33,0,0,14,33,0,0,15,33,0,0,19,33,0,0,19,33,0,0,47,33,0,0,47,33,0,0,52,33,0,0,52,33,0,0,57,33,0,0,57,33,0,0,60,33,0,0,61,33,0,0,70,33,0,0,73,33,0,0,78,33,0,0,78,33,0,0,132,33,0,0,132,33,0,0,48,44,0,0,94,44,0,0,97,44,0,0,97,44,0,0,101,44,0,0,102,44,0,0,104,44,0,0,104,44,0,0,106,44,0,0,106,44,0,0,108,44,0,0,108,44,0,0,113,44,0,0,113,44,0,0,115,44,0,0,116,44,0,0,118,44,0,0,123,44,0,0,129,44,0,0,129,44,0,0,131,44,0,0,131,44,0,0,133,44,0,0,133,44,0,0,135,44,0,0,135,44,0,0,137,44,0,0,137,44,0,0,139,44,0,0,139,44,0,0,141,44,0,0,141,44,0,0,143,44,0,0,143,44,0,0,145,44,0,0,145,44,0,0,147,44,0,0,147,44,0,0,149,44,0,0,149,44,0,0,151,44,0,0,151,44,0,0,153,44,0,0,153,44,0,0,155,44,0,0,155,44,0,0,157,44,0,0,157,44,0,0,159,44,0,0,159,44,0,0,161,44,0,0,161,44,0,0,163,44,0,0,163,44,0,0,165,44,0,0,165,44,0,0,167,44,0,0,167,44,0,0,169,44,0,0,169,44,0,0,171,44,0,0,171,44,0,0,173,44,0,0,173,44,0,0,175,44,0,0,175,44,0,0,177,44,0,0,177,44,0,0,179,44,0,0,179,44,0,0,181,44,0,0,181,44,0,0,183,44,0,0,183,44,0,0,185,44,0,0,185,44,0,0,187,44,0,0,187,44,0,0,189,44,0,0,189,44,0,0,191,44,0,0,191,44,0,0,193,44,0,0,193,44,0,0,195,44,0,0,195,44,0,0,197,44,0,0,197,44,0,0,199,44,0,0,199,44,0,0,201,44,0,0,201,44,0,0,203,44,0,0,203,44,0,0,205,44,0,0,205,44,0,0,207,44,0,0,207,44,0,0,209,44,0,0,209,44,0,0,211,44,0,0,211,44,0,0,213,44,0,0,213,44,0,0,215,44,0,0,215,44,0,0,217,44,0,0,217,44,0,0,219,44,0,0,219,44,0,0,221,44,0,0,221,44,0,0,223,44,0,0,223,44,0,0,225,44,0,0,225,44,0,0,227,44,0,0,228,44,0,0,236,44,0,0,236,44,0,0,238,44,0,0,238,44,0,0,243,44,0,0,243,44,0,0,0,45,0,0,37,45,0,0,39,45,0,0,39,45,0,0,45,45,0,0,45,45,0,0,65,166,0,0,65,166,0,0,67,166,0,0,67,166,0,0,69,166,0,0,69,166,0,0,71,166,0,0,71,166,0,0,73,166,0,0,73,166,0,0,75,166,0,0,75,166,0,0,77,166,0,0,77,166,0,0,79,166,0,0,79,166,0,0,81,166,0,0,81,166,0,0,83,166,0,0,83,166,0,0,85,166,0,0,85,166,0,0,87,166,0,0,87,166,0,0,89,166,0,0,89,166,0,0,91,166,0,0,91,166,0,0,93,166,0,0,93,166,0,0,95,166,0,0,95,166,0,0,97,166,0,0,97,166,0,0,99,166,0,0,99,166,0,0,101,166,0,0,101,166,0,0,103,166,0,0,103,166,0,0,105,166,0,0,105,166,0,0,107,166,0,0,107,166,0,0,109,166,0,0,109,166,0,0,129,166,0,0,129,166,0,0,131,166,0,0,131,166,0,0,133,166,0,0,133,166,0,0,135,166,0,0,135,166,0,0,137,166,0,0,137,166,0,0,139,166,0,0,139,166,0,0,141,166,0,0,141,166,0,0,143,166,0,0,143,166,0,0,145,166,0,0,145,166,0,0,147,166,0,0,147,166,0,0,149,166,0,0,149,166,0,0,151,166,0,0,151,166,0,0,153,166,0,0,153,166,0,0,155,166,0,0,155,166,0,0,35,167,0,0,35,167,0,0,37,167,0,0,37,167,0,0,39,167,0,0,39,167,0,0,41,167,0,0,41,167,0,0,43,167,0,0,43,167,0,0,45,167,0,0,45,167,0,0,47,167,0,0,49,167,0,0,51,167,0,0,51,167,0,0,53,167,0,0,53,167,0,0,55,167,0,0,55,167,0,0,57,167,0,0,57,167,0,0,59,167,0,0,59,167,0,0,61,167,0,0,61,167,0,0,63,167,0,0,63,167,0,0,65,167,0,0,65,167,0,0,67,167,0,0,67,167,0,0,69,167,0,0,69,167,0,0,71,167,0,0,71,167,0,0,73,167,0,0,73,167,0,0,75,167,0,0,75,167,0,0,77,167,0,0,77,167,0,0,79,167,0,0,79,167,0,0,81,167,0,0,81,167,0,0,83,167,0,0,83,167,0,0,85,167,0,0,85,167,0,0,87,167,0,0,87,167,0,0,89,167,0,0,89,167,0,0,91,167,0,0,91,167,0,0,93,167,0,0,93,167,0,0,95,167,0,0,95,167,0,0,97,167,0,0,97,167,0,0,99,167,0,0,99,167,0,0,101,167,0,0,101,167,0,0,103,167,0,0,103,167,0,0,105,167,0,0,105,167,0,0,107,167,0,0,107,167,0,0,109,167,0,0,109,167,0,0,111,167,0,0,111,167,0,0,113,167,0,0,120,167,0,0,122,167,0,0,122,167,0,0,124,167,0,0,124,167,0,0,127,167,0,0,127,167,0,0,129,167,0,0,129,167,0,0,131,167,0,0,131,167,0,0,133,167,0,0,133,167,0,0,135,167,0,0,135,167,0,0,140,167,0,0,140,167,0,0,142,167,0,0,142,167,0,0,145,167,0,0,145,167,0,0,147,167,0,0,149,167,0,0,151,167,0,0,151,167,0,0,153,167,0,0,153,167,0,0,155,167,0,0,155,167,0,0,157,167,0,0,157,167,0,0,159,167,0,0,159,167,0,0,161,167,0,0,161,167,0,0,163,167,0,0,163,167,0,0,165,167,0,0,165,167,0,0,167,167,0,0,167,167,0,0,169,167,0,0,169,167,0,0,181,167,0,0,181,167,0,0,183,167,0,0,183,167,0,0,250,167,0,0,250,167,0,0,48,171,0,0,90,171,0,0,96,171,0,0,101,171,0,0,112,171,0,0,191,171,0,0,0,251,0,0,6,251,0,0,19,251,0,0,23,251,0,0,65,255,0,0,90,255,0,0,40,4,1,0,79,4,1,0,192,12,1,0,242,12,1,0,192,24,1,0,223,24,1,0,26,212,1,0,51,212,1,0,78,212,1,0,84,212,1,0,86,212,1,0,103,212,1,0,130,212,1,0,155,212,1,0,182,212,1,0,185,212,1,0,187,212,1,0,187,212,1,0,189,212,1,0,195,212,1,0,197,212,1,0,207,212,1,0,234,212,1,0,3,213,1,0,30,213,1,0,55,213,1,0,82,213,1,0,107,213,1,0,134,213,1,0,159,213,1,0,186,213,1,0,211,213,1,0,238,213,1,0,7,214,1,0,34,214,1,0,59,214,1,0,86,214,1,0,111,214,1,0,138,214,1,0,165,214,1,0,194,214,1,0,218,214,1,0,220,214,1,0,225,214,1,0,252,214,1,0,20,215,1,0,22,215,1,0,27,215,1,0,54,215,1,0,78,215,1,0,80,215,1,0,85,215,1,0,112,215,1,0,136,215,1,0,138,215,1,0,143,215,1,0,170,215,1,0,194,215,1,0,196,215,1,0,201,215,1,0,203,215,1,0,203,215,1,0,176,2,0,0,193,2,0,0,198,2,0,0,209,2,0,0,224,2,0,0,228,2,0,0,236,2,0,0,236,2,0,0,238,2,0,0,238,2,0,0,116,3,0,0,116,3,0,0,122,3,0,0,122,3,0,0,89,5,0,0,89,5,0,0,64,6,0,0,64,6,0,0,229,6,0,0,230,6,0,0,244,7,0,0,245,7,0,0,250,7,0,0,250,7,0,0,26,8,0,0,26,8,0,0,36,8,0,0,36,8,0,0,40,8,0,0,40,8,0,0,113,9,0,0,113,9,0,0,70,14,0,0,70,14,0,0,198,14,0,0,198,14,0,0,252,16,0,0,252,16,0,0,215,23,0,0,215,23,0,0,67,24,0,0,67,24,0,0,167,26,0,0,167,26,0,0,120,28,0,0,125,28,0,0,44,29,0,0,106,29,0,0,120,29,0,0,120,29,0,0,155,29,0,0,191,29,0,0,113,32,0,0,113,32,0,0,127,32,0,0,127,32,0,0,144,32,0,0,156,32,0,0,124,44,0,0,125,44,0,0,111,45,0,0,111,45,0,0,47,46,0,0,47,46,0,0,5,48,0,0,5,48,0,0,49,48,0,0,53,48,0,0,59,48,0,0,59,48,0,0,157,48,0,0,158,48,0,0,252,48,0,0,254,48,0,0,21,160,0,0,21,160,0,0,248,164,0,0,253,164,0,0,12,166,0,0,12,166,0,0,127,166,0,0,127,166,0,0,156,166,0,0,157,166,0,0,23,167,0,0,31,167,0,0,112,167,0,0,112,167,0,0,136,167,0,0,136,167,0,0,248,167,0,0,249,167,0,0,207,169,0,0,207,169,0,0,230,169,0,0,230,169,0,0,112,170,0,0,112,170,0,0,221,170,0,0,221,170,0,0,243,170,0,0,244,170,0,0,92,171,0,0,95,171,0,0,112,255,0,0,112,255,0,0,158,255,0,0,159,255,0,0,64,107,1,0,67,107,1,0,147,111,1,0,159,111,1,0,170,0,0,0,170,0,0,0,186,0,0,0,186,0,0,0,187,1,0,0,187,1,0,0,192,1,0,0,195,1,0,0,148,2,0,0,148,2,0,0,208,5,0,0,234,5,0,0,240,5,0,0,242,5,0,0,32,6,0,0,63,6,0,0,65,6,0,0,74,6,0,0,110,6,0,0,111,6,0,0,113,6,0,0,211,6,0,0,213,6,0,0,213,6,0,0,238,6,0,0,239,6,0,0,250,6,0,0,252,6,0,0,255,6,0,0,255,6,0,0,16,7,0,0,16,7,0,0,18,7,0,0,47,7,0,0,77,7,0,0,165,7,0,0,177,7,0,0,177,7,0,0,202,7,0,0,234,7,0,0,0,8,0,0,21,8,0,0,64,8,0,0,88,8,0,0,160,8,0,0,180,8,0,0,4,9,0,0,57,9,0,0,61,9,0,0,61,9,0,0,80,9,0,0,80,9,0,0,88,9,0,0,97,9,0,0,114,9,0,0,128,9,0,0,133,9,0,0,140,9,0,0,143,9,0,0,144,9,0,0,147,9,0,0,168,9,0,0,170,9,0,0,176,9,0,0,178,9,0,0,178,9,0,0,182,9,0,0,185,9,0,0,189,9,0,0,189,9,0,0,206,9,0,0,206,9,0,0,220,9,0,0,221,9,0,0,223,9,0,0,225,9,0,0,240,9,0,0,241,9,0,0,5,10,0,0,10,10,0,0,15,10,0,0,16,10,0,0,19,10,0,0,40,10,0,0,42,10,0,0,48,10,0,0,50,10,0,0,51,10,0,0,53,10,0,0,54,10,0,0,56,10,0,0,57,10,0,0,89,10,0,0,92,10,0,0,94,10,0,0,94,10,0,0,114,10,0,0,116,10,0,0,133,10,0,0,141,10,0,0,143,10,0,0,145,10,0,0,147,10,0,0,168,10,0,0,170,10,0,0,176,10,0,0,178,10,0,0,179,10,0,0,181,10,0,0,185,10,0,0,189,10,0,0,189,10,0,0,208,10,0,0,208,10,0,0,224,10,0,0,225,10,0,0,249,10,0,0,249,10,0,0,5,11,0,0,12,11,0,0,15,11,0,0,16,11,0,0,19,11,0,0,40,11,0,0,42,11,0,0,48,11,0,0,50,11,0,0,51,11,0,0,53,11,0,0,57,11,0,0,61,11,0,0,61,11,0,0,92,11,0,0,93,11,0,0,95,11,0,0,97,11,0,0,113,11,0,0,113,11,0,0,131,11,0,0,131,11,0,0,133,11,0,0,138,11,0,0,142,11,0,0,144,11,0,0,146,11,0,0,149,11,0,0,153,11,0,0,154,11,0,0,156,11,0,0,156,11,0,0,158,11,0,0,159,11,0,0,163,11,0,0,164,11,0,0,168,11,0,0,170,11,0,0,174,11,0,0,185,11,0,0,208,11,0,0,208,11,0,0,5,12,0,0,12,12,0,0,14,12,0,0,16,12,0,0,18,12,0,0,40,12,0,0,42,12,0,0,57,12,0,0,61,12,0,0,61,12,0,0,88,12,0,0,90,12,0,0,96,12,0,0,97,12,0,0,133,12,0,0,140,12,0,0,142,12,0,0,144,12,0,0,146,12,0,0,168,12,0,0,170,12,0,0,179,12,0,0,181,12,0,0,185,12,0,0,189,12,0,0,189,12,0,0,222,12,0,0,222,12,0,0,224,12,0,0,225,12,0,0,241,12,0,0,242,12,0,0,5,13,0,0,12,13,0,0,14,13,0,0,16,13,0,0,18,13,0,0,58,13,0,0,61,13,0,0,61,13,0,0,78,13,0,0,78,13,0,0,95,13,0,0,97,13,0,0,122,13,0,0,127,13,0,0,133,13,0,0,150,13,0,0,154,13,0,0,177,13,0,0,179,13,0,0,187,13,0,0,189,13,0,0,189,13,0,0,192,13,0,0,198,13,0,0,1,14,0,0,48,14,0,0,50,14,0,0,51,14,0,0,64,14,0,0,69,14,0,0,129,14,0,0,130,14,0,0,132,14,0,0,132,14,0,0,135,14,0,0,136,14,0,0,138,14,0,0,138,14,0,0,141,14,0,0,141,14,0,0,148,14,0,0,151,14,0,0,153,14,0,0,159,14,0,0,161,14,0,0,163,14,0,0,165,14,0,0,165,14,0,0,167,14,0,0,167,14,0,0,170,14,0,0,171,14,0,0,173,14,0,0,176,14,0,0,178,14,0,0,179,14,0,0,189,14,0,0,189,14,0,0,192,14,0,0,196,14,0,0,220,14,0,0,223,14,0,0,0,15,0,0,0,15,0,0,64,15,0,0,71,15,0,0,73,15,0,0,108,15,0,0,136,15,0,0,140,15,0,0,0,16,0,0,42,16,0,0,63,16,0,0,63,16,0,0,80,16,0,0,85,16,0,0,90,16,0,0,93,16,0,0,97,16,0,0,97,16,0,0,101,16,0,0,102,16,0,0,110,16,0,0,112,16,0,0,117,16,0,0,129,16,0,0,142,16,0,0,142,16,0,0,208,16,0,0,250,16,0,0,253,16,0,0,72,18,0,0,74,18,0,0,77,18,0,0,80,18,0,0,86,18,0,0,88,18,0,0,88,18,0,0,90,18,0,0,93,18,0,0,96,18,0,0,136,18,0,0,138,18,0,0,141,18,0,0,144,18,0,0,176,18,0,0,178,18,0,0,181,18,0,0,184,18,0,0,190,18,0,0,192,18,0,0,192,18,0,0,194,18,0,0,197,18,0,0,200,18,0,0,214,18,0,0,216,18,0,0,16,19,0,0,18,19,0,0,21,19,0,0,24,19,0,0,90,19,0,0,128,19,0,0,143,19,0,0,1,20,0,0,108,22,0,0,111,22,0,0,127,22,0,0,129,22,0,0,154,22,0,0,160,22,0,0,234,22,0,0,241,22,0,0,248,22,0,0,0,23,0,0,12,23,0,0,14,23,0,0,17,23,0,0,32,23,0,0,49,23,0,0,64,23,0,0,81,23,0,0,96,23,0,0,108,23,0,0,110,23,0,0,112,23,0,0,128,23,0,0,179,23,0,0,220,23,0,0,220,23,0,0,32,24,0,0,66,24,0,0,68,24,0,0,119,24,0,0,128,24,0,0,168,24,0,0,170,24,0,0,170,24,0,0,176,24,0,0,245,24,0,0,0,25,0,0,30,25,0,0,80,25,0,0,109,25,0,0,112,25,0,0,116,25,0,0,128,25,0,0,171,25,0,0,176,25,0,0,201,25,0,0,0,26,0,0,22,26,0,0,32,26,0,0,84,26,0,0,5,27,0,0,51,27,0,0,69,27,0,0,75,27,0,0,131,27,0,0,160,27,0,0,174,27,0,0,175,27,0,0,186,27,0,0,229,27,0,0,0,28,0,0,35,28,0,0,77,28,0,0,79,28,0,0,90,28,0,0,119,28,0,0,233,28,0,0,236,28,0,0,238,28,0,0,241,28,0,0,245,28,0,0,246,28,0,0,53,33,0,0,56,33,0,0,48,45,0,0,103,45,0,0,128,45,0,0,150,45,0,0,160,45,0,0,166,45,0,0,168,45,0,0,174,45,0,0,176,45,0,0,182,45,0,0,184,45,0,0,190,45,0,0,192,45,0,0,198,45,0,0,200,45,0,0,206,45,0,0,208,45,0,0,214,45,0,0,216,45,0,0,222,45,0,0,6,48,0,0,6,48,0,0,60,48,0,0,60,48,0,0,65,48,0,0,150,48,0,0,159,48,0,0,159,48,0,0,161,48,0,0,250,48,0,0,255,48,0,0,255,48,0,0,5,49,0,0,45,49,0,0,49,49,0,0,142,49,0,0,160,49,0,0,186,49,0,0,240,49,0,0,255,49,0,0,0,52,0,0,181,77,0,0,0,78,0,0,213,159,0,0,0,160,0,0,20,160,0,0,22,160,0,0,140,164,0,0,208,164,0,0,247,164,0,0,0,165,0,0,11,166,0,0,16,166,0,0,31,166,0,0,42,166,0,0,43,166,0,0,110,166,0,0,110,166,0,0,160,166,0,0,229,166,0,0,143,167,0,0,143,167,0,0,247,167,0,0,247,167,0,0,251,167,0,0,1,168,0,0,3,168,0,0,5,168,0,0,7,168,0,0,10,168,0,0,12,168,0,0,34,168,0,0,64,168,0,0,115,168,0,0,130,168,0,0,179,168,0,0,242,168,0,0,247,168,0,0,251,168,0,0,251,168,0,0,253,168,0,0,253,168,0,0,10,169,0,0,37,169,0,0,48,169,0,0,70,169,0,0,96,169,0,0,124,169,0,0,132,169,0,0,178,169,0,0,224,169,0,0,228,169,0,0,231,169,0,0,239,169,0,0,250,169,0,0,254,169,0,0,0,170,0,0,40,170,0,0,64,170,0,0,66,170,0,0,68,170,0,0,75,170,0,0,96,170,0,0,111,170,0,0,113,170,0,0,118,170,0,0,122,170,0,0,122,170,0,0,126,170,0,0,175,170,0,0,177,170,0,0,177,170,0,0,181,170,0,0,182,170,0,0,185,170,0,0,189,170,0,0,192,170,0,0,192,170,0,0,194,170,0,0,194,170,0,0,219,170,0,0,220,170,0,0,224,170,0,0,234,170,0,0,242,170,0,0,242,170,0,0,1,171,0,0,6,171,0,0,9,171,0,0,14,171,0,0,17,171,0,0,22,171,0,0,32,171,0,0,38,171,0,0,40,171,0,0,46,171,0,0,192,171,0,0,226,171,0,0,0,172,0,0,163,215,0,0,176,215,0,0,198,215,0,0,203,215,0,0,251,215,0,0,0,249,0,0,109,250,0,0,112,250,0,0,217,250,0,0,29,251,0,0,29,251,0,0,31,251,0,0,40,251,0,0,42,251,0,0,54,251,0,0,56,251,0,0,60,251,0,0,62,251,0,0,62,251,0,0,64,251,0,0,65,251,0,0,67,251,0,0,68,251,0,0,70,251,0,0,177,251,0,0,211,251,0,0,61,253,0,0,80,253,0,0,143,253,0,0,146,253,0,0,199,253,0,0,240,253,0,0,251,253,0,0,112,254,0,0,116,254,0,0,118,254,0,0,252,254,0,0,102,255,0,0,111,255,0,0,113,255,0,0,157,255,0,0,160,255,0,0,190,255,0,0,194,255,0,0,199,255,0,0,202,255,0,0,207,255,0,0,210,255,0,0,215,255,0,0,218,255,0,0,220,255,0,0,0,0,1,0,11,0,1,0,13,0,1,0,38,0,1,0,40,0,1,0,58,0,1,0,60,0,1,0,61,0,1,0,63,0,1,0,77,0,1,0,80,0,1,0,93,0,1,0,128,0,1,0,250,0,1,0,128,2,1,0,156,2,1,0,160,2,1,0,208,2,1,0,0,3,1,0,31,3,1,0,48,3,1,0,64,3,1,0,66,3,1,0,73,3,1,0,80,3,1,0,117,3,1,0,128,3,1,0,157,3,1,0,160,3,1,0,195,3,1,0,200,3,1,0,207,3,1,0,80,4,1,0,157,4,1,0,0,5,1,0,39,5,1,0,48,5,1,0,99,5,1,0,0,6,1,0,54,7,1,0,64,7,1,0,85,7,1,0,96,7,1,0,103,7,1,0,0,8,1,0,5,8,1,0,8,8,1,0,8,8,1,0,10,8,1,0,53,8,1,0,55,8,1,0,56,8,1,0,60,8,1,0,60,8,1,0,63,8,1,0,85,8,1,0,96,8,1,0,118,8,1,0,128,8,1,0,158,8,1,0,224,8,1,0,242,8,1,0,244,8,1,0,245,8,1,0,0,9,1,0,21,9,1,0,32,9,1,0,57,9,1,0,128,9,1,0,183,9,1,0,190,9,1,0,191,9,1,0,0,10,1,0,0,10,1,0,16,10,1,0,19,10,1,0,21,10,1,0,23,10,1,0,25,10,1,0,51,10,1,0,96,10,1,0,124,10,1,0,128,10,1,0,156,10,1,0,192,10,1,0,199,10,1,0,201,10,1,0,228,10,1,0,0,11,1,0,53,11,1,0,64,11,1,0,85,11,1,0,96,11,1,0,114,11,1,0,128,11,1,0,145,11,1,0,0,12,1,0,72,12,1,0,3,16,1,0,55,16,1,0,131,16,1,0,175,16,1,0,208,16,1,0,232,16,1,0,3,17,1,0,38,17,1,0,80,17,1,0,114,17,1,0,118,17,1,0,118,17,1,0,131,17,1,0,178,17,1,0,193,17,1,0,196,17,1,0,218,17,1,0,218,17,1,0,220,17,1,0,220,17,1,0,0,18,1,0,17,18,1,0,19,18,1,0,43,18,1,0,128,18,1,0,134,18,1,0,136,18,1,0,136,18,1,0,138,18,1,0,141,18,1,0,143,18,1,0,157,18,1,0,159,18,1,0,168,18,1,0,176,18,1,0,222,18,1,0,5,19,1,0,12,19,1,0,15,19,1,0,16,19,1,0,19,19,1,0,40,19,1,0,42,19,1,0,48,19,1,0,50,19,1,0,51,19,1,0,53,19,1,0,57,19,1,0,61,19,1,0,61,19,1,0,80,19,1,0,80,19,1,0,93,19,1,0,97,19,1,0,128,20,1,0,175,20,1,0,196,20,1,0,197,20,1,0,199,20,1,0,199,20,1,0,128,21,1,0,174,21,1,0,216,21,1,0,219,21,1,0,0,22,1,0,47,22,1,0,68,22,1,0,68,22,1,0,128,22,1,0,170,22,1,0,0,23,1,0,25,23,1,0,255,24,1,0,255,24,1,0,192,26,1,0,248,26,1,0,0,32,1,0,153,35,1,0,128,36,1,0,67,37,1,0,0,48,1,0,46,52,1,0,0,68,1,0,70,70,1,0,0,104,1,0,56,106,1,0,64,106,1,0,94,106,1,0,208,106,1,0,237,106,1,0,0,107,1,0,47,107,1,0,99,107,1,0,119,107,1,0,125,107,1,0,143,107,1,0,0,111,1,0,68,111,1,0,80,111,1,0,80,111,1,0,0,176,1,0,1,176,1,0,0,188,1,0,106,188,1,0,112,188,1,0,124,188,1,0,128,188,1,0,136,188,1,0,144,188,1,0,153,188,1,0,0,232,1,0,196,232,1,0,0,238,1,0,3,238,1,0,5,238,1,0,31,238,1,0,33,238,1,0,34,238,1,0,36,238,1,0,36,238,1,0,39,238,1,0,39,238,1,0,41,238,1,0,50,238,1,0,52,238,1,0,55,238,1,0,57,238,1,0,57,238,1,0,59,238,1,0,59,238,1,0,66,238,1,0,66,238,1,0,71,238,1,0,71,238,1,0,73,238,1,0,73,238,1,0,75,238,1,0,75,238,1,0,77,238,1,0,79,238,1,0,81,238,1,0,82,238,1,0,84,238,1,0,84,238,1,0,87,238,1,0,87,238,1,0,89,238,1,0,89,238,1,0,91,238,1,0,91,238,1,0,93,238,1,0,93,238,1,0,95,238,1,0,95,238,1,0,97,238,1,0,98,238,1,0,100,238,1,0,100,238,1,0,103,238,1,0,106,238,1,0,108,238,1,0,114,238,1,0,116,238,1,0,119,238,1,0,121,238,1,0,124,238,1,0,126,238,1,0,126,238,1,0,128,238,1,0,137,238,1,0,139,238,1,0,155,238,1,0,161,238,1,0,163,238,1,0,165,238,1,0,169,238,1,0,171,238,1,0,187,238,1,0,0,0,2,0,214,166,2,0,0,167,2,0,52,183,2,0,64,183,2,0,29,184,2,0,32,184,2,0,161,206,2,0,0,248,2,0,29,250,2,0,97,0,0,0,122,0,0,0,170,0,0,0,170,0,0,0,181,0,0,0,181,0,0,0,186,0,0,0,186,0,0,0,223,0,0,0,246,0,0,0,248,0,0,0,255,0,0,0,1,1,0,0,1,1,0,0,3,1,0,0,3,1,0,0,5,1,0,0,5,1,0,0,7,1,0,0,7,1,0,0,9,1,0,0,9,1,0,0,11,1,0,0,11,1,0,0,13,1,0,0,13,1,0,0,15,1,0,0,15,1,0,0,17,1,0,0,17,1,0,0,19,1,0,0,19,1,0,0,21,1,0,0,21,1,0,0,23,1,0,0,23,1,0,0,25,1,0,0,25,1,0,0,27,1,0,0,27,1,0,0,29,1,0,0,29,1,0,0,31,1,0,0,31,1,0,0,33,1,0,0,33,1,0,0,35,1,0,0,35,1,0,0,37,1,0,0,37,1,0,0,39,1,0,0,39,1,0,0,41,1,0,0,41,1,0,0,43,1,0,0,43,1,0,0,45,1,0,0,45,1,0,0,47,1,0,0,47,1,0,0,49,1,0,0,49,1,0,0,51,1,0,0,51,1,0,0,53,1,0,0,53,1,0,0,55,1,0,0,56,1,0,0,58,1,0,0,58,1,0,0,60,1,0,0,60,1,0,0,62,1,0,0,62,1,0,0,64,1,0,0,64,1,0,0,66,1,0,0,66,1,0,0,68,1,0,0,68,1,0,0,70,1,0,0,70,1,0,0,72,1,0,0,73,1,0,0,75,1,0,0,75,1,0,0,77,1,0,0,77,1,0,0,79,1,0,0,79,1,0,0,81,1,0,0,81,1,0,0,83,1,0,0,83,1,0,0,85,1,0,0,85,1,0,0,87,1,0,0,87,1,0,0,89,1,0,0,89,1,0,0,91,1,0,0,91,1,0,0,93,1,0,0,93,1,0,0,95,1,0,0,95,1,0,0,97,1,0,0,97,1,0,0,99,1,0,0,99,1,0,0,101,1,0,0,101,1,0,0,103,1,0,0,103,1,0,0,105,1,0,0,105,1,0,0,107,1,0,0,107,1,0,0,109,1,0,0,109,1,0,0,111,1,0,0,111,1,0,0,113,1,0,0,113,1,0,0,115,1,0,0,115,1,0,0,117,1,0,0,117,1,0,0,119,1,0,0,119,1,0,0,122,1,0,0,122,1,0,0,124,1,0,0,124,1,0,0,126,1,0,0,128,1,0,0,131,1,0,0,131,1,0,0,133,1,0,0,133,1,0,0,136,1,0,0,136,1,0,0,140,1,0,0,141,1,0,0,146,1,0,0,146,1,0,0,149,1,0,0,149,1,0,0,153,1,0,0,155,1,0,0,158,1,0,0,158,1,0,0,161,1,0,0,161,1,0,0,163,1,0,0,163,1,0,0,165,1,0,0,165,1,0,0,168,1,0,0,168,1,0,0,170,1,0,0,171,1,0,0,173,1,0,0,173,1,0,0,176,1,0,0,176,1,0,0,180,1,0,0,180,1,0,0,182,1,0,0,182,1,0,0,185,1,0,0,186,1,0,0,189,1,0,0,191,1,0,0,198,1,0,0,198,1,0,0,201,1,0,0,201,1,0,0,204,1,0,0,204,1,0,0,206,1,0,0,206,1,0,0,208,1,0,0,208,1,0,0,210,1,0,0,210,1,0,0,212,1,0,0,212,1,0,0,214,1,0,0,214,1,0,0,216,1,0,0,216,1,0,0,218,1,0,0,218,1,0,0,220,1,0,0,221,1,0,0,223,1,0,0,223,1,0,0,225,1,0,0,225,1,0,0,227,1,0,0,227,1,0,0,229,1,0,0,229,1,0,0,231,1,0,0,231,1,0,0,233,1,0,0,233,1,0,0,235,1,0,0,235,1,0,0,237,1,0,0,237,1,0,0,239,1,0,0,240,1,0,0,243,1,0,0,243,1,0,0,245,1,0,0,245,1,0,0,249,1,0,0,249,1,0,0,251,1,0,0,251,1,0,0,253,1,0,0,253,1,0,0,255,1,0,0,255,1,0,0,1,2,0,0,1,2,0,0,3,2,0,0,3,2,0,0,5,2,0,0,5,2,0,0,7,2,0,0,7,2,0,0,9,2,0,0,9,2,0,0,11,2,0,0,11,2,0,0,13,2,0,0,13,2,0,0,15,2,0,0,15,2,0,0,17,2,0,0,17,2,0,0,19,2,0,0,19,2,0,0,21,2,0,0,21,2,0,0,23,2,0,0,23,2,0,0,25,2,0,0,25,2,0,0,27,2,0,0,27,2,0,0,29,2,0,0,29,2,0,0,31,2,0,0,31,2,0,0,33,2,0,0,33,2,0,0,35,2,0,0,35,2,0,0,37,2,0,0,37,2,0,0,39,2,0,0,39,2,0,0,41,2,0,0,41,2,0,0,43,2,0,0,43,2,0,0,45,2,0,0,45,2,0,0,47,2,0,0,47,2,0,0,49,2,0,0,49,2,0,0,51,2,0,0,57,2,0,0,60,2,0,0,60,2,0,0,63,2,0,0,64,2,0,0,66,2,0,0,66,2,0,0,71,2,0,0,71,2,0,0,73,2,0,0,73,2,0,0,75,2,0,0,75,2,0,0,77,2,0,0,77,2,0,0,79,2,0,0,147,2,0,0,149,2,0,0,184,2,0,0,192,2,0,0,193,2,0,0,224,2,0,0,228,2,0,0,69,3,0,0,69,3,0,0,113,3,0,0,113,3,0,0,115,3,0,0,115,3,0,0,119,3,0,0,119,3,0,0,122,3,0,0,125,3,0,0,144,3,0,0,144,3,0,0,172,3,0,0,206,3,0,0,208,3,0,0,209,3,0,0,213,3,0,0,215,3,0,0,217,3,0,0,217,3,0,0,219,3,0,0,219,3,0,0,221,3,0,0,221,3,0,0,223,3,0,0,223,3,0,0,225,3,0,0,225,3,0,0,227,3,0,0,227,3,0,0,229,3,0,0,229,3,0,0,231,3,0,0,231,3,0,0,233,3,0,0,233,3,0,0,235,3,0,0,235,3,0,0,237,3,0,0,237,3,0,0,239,3,0,0,243,3,0,0,245,3,0,0,245,3,0,0,248,3,0,0,248,3,0,0,251,3,0,0,252,3,0,0,48,4,0,0,95,4,0,0,97,4,0,0,97,4,0,0,99,4,0,0,99,4,0,0,101,4,0,0,101,4,0,0,103,4,0,0,103,4,0,0,105,4,0,0,105,4,0,0,107,4,0,0,107,4,0,0,109,4,0,0,109,4,0,0,111,4,0,0,111,4,0,0,113,4,0,0,113,4,0,0,115,4,0,0,115,4,0,0,117,4,0,0,117,4,0,0,119,4,0,0,119,4,0,0,121,4,0,0,121,4,0,0,123,4,0,0,123,4,0,0,125,4,0,0,125,4,0,0,127,4,0,0,127,4,0,0,129,4,0,0,129,4,0,0,139,4,0,0,139,4,0,0,141,4,0,0,141,4,0,0,143,4,0,0,143,4,0,0,145,4,0,0,145,4,0,0,147,4,0,0,147,4,0,0,149,4,0,0,149,4,0,0,151,4,0,0,151,4,0,0,153,4,0,0,153,4,0,0,155,4,0,0,155,4,0,0,157,4,0,0,157,4,0,0,159,4,0,0,159,4,0,0,161,4,0,0,161,4,0,0,163,4,0,0,163,4,0,0,165,4,0,0,165,4,0,0,167,4,0,0,167,4,0,0,169,4,0,0,169,4,0,0,171,4,0,0,171,4,0,0,173,4,0,0,173,4,0,0,175,4,0,0,175,4,0,0,177,4,0,0,177,4,0,0,179,4,0,0,179,4,0,0,181,4,0,0,181,4,0,0,183,4,0,0,183,4,0,0,185,4,0,0,185,4,0,0,187,4,0,0,187,4,0,0,189,4,0,0,189,4,0,0,191,4,0,0,191,4,0,0,194,4,0,0,194,4,0,0,196,4,0,0,196,4,0,0,198,4,0,0,198,4,0,0,200,4,0,0,200,4,0,0,202,4,0,0,202,4,0,0,204,4,0,0,204,4,0,0,206,4,0,0,207,4,0,0,209,4,0,0,209,4,0,0,211,4,0,0,211,4,0,0,213,4,0,0,213,4,0,0,215,4,0,0,215,4,0,0,217,4,0,0,217,4,0,0,219,4,0,0,219,4,0,0,221,4,0,0,221,4,0,0,223,4,0,0,223,4,0,0,225,4,0,0,225,4,0,0,227,4,0,0,227,4,0,0,229,4,0,0,229,4,0,0,231,4,0,0,231,4,0,0,233,4,0,0,233,4,0,0,235,4,0,0,235,4,0,0,237,4,0,0,237,4,0,0,239,4,0,0,239,4,0,0,241,4,0,0,241,4,0,0,243,4,0,0,243,4,0,0,245,4,0,0,245,4,0,0,247,4,0,0,247,4,0,0,249,4,0,0,249,4,0,0,251,4,0,0,251,4,0,0,253,4,0,0,253,4,0,0,255,4,0,0,255,4,0,0,1,5,0,0,1,5,0,0,3,5,0,0,3,5,0,0,5,5,0,0,5,5,0,0,7,5,0,0,7,5,0,0,9,5,0,0,9,5,0,0,11,5,0,0,11,5,0,0,13,5,0,0,13,5,0,0,15,5,0,0,15,5,0,0,17,5,0,0,17,5,0,0,19,5,0,0,19,5,0,0,21,5,0,0,21,5,0,0,23,5,0,0,23,5,0,0,25,5,0,0,25,5,0,0,27,5,0,0,27,5,0,0,29,5,0,0,29,5,0,0,31,5,0,0,31,5,0,0,33,5,0,0,33,5,0,0,35,5,0,0,35,5,0,0,37,5,0,0,37,5,0,0,39,5,0,0,39,5,0,0,41,5,0,0,41,5,0,0,43,5,0,0,43,5,0,0,45,5,0,0,45,5,0,0,47,5,0,0,47,5,0,0,97,5,0,0,135,5,0,0,248,19,0,0,253,19,0,0,0,29,0,0,191,29,0,0,1,30,0,0,1,30,0,0,3,30,0,0,3,30,0,0,5,30,0,0,5,30,0,0,7,30,0,0,7,30,0,0,9,30,0,0,9,30,0,0,11,30,0,0,11,30,0,0,13,30,0,0,13,30,0,0,15,30,0,0,15,30,0,0,17,30,0,0,17,30,0,0,19,30,0,0,19,30,0,0,21,30,0,0,21,30,0,0,23,30,0,0,23,30,0,0,25,30,0,0,25,30,0,0,27,30,0,0,27,30,0,0,29,30,0,0,29,30,0,0,31,30,0,0,31,30,0,0,33,30,0,0,33,30,0,0,35,30,0,0,35,30,0,0,37,30,0,0,37,30,0,0,39,30,0,0,39,30,0,0,41,30,0,0,41,30,0,0,43,30,0,0,43,30,0,0,45,30,0,0,45,30,0,0,47,30,0,0,47,30,0,0,49,30,0,0,49,30,0,0,51,30,0,0,51,30,0,0,53,30,0,0,53,30,0,0,55,30,0,0,55,30,0,0,57,30,0,0,57,30,0,0,59,30,0,0,59,30,0,0,61,30,0,0,61,30,0,0,63,30,0,0,63,30,0,0,65,30,0,0,65,30,0,0,67,30,0,0,67,30,0,0,69,30,0,0,69,30,0,0,71,30,0,0,71,30,0,0,73,30,0,0,73,30,0,0,75,30,0,0,75,30,0,0,77,30,0,0,77,30,0,0,79,30,0,0,79,30,0,0,81,30,0,0,81,30,0,0,83,30,0,0,83,30,0,0,85,30,0,0,85,30,0,0,87,30,0,0,87,30,0,0,89,30,0,0,89,30,0,0,91,30,0,0,91,30,0,0,93,30,0,0,93,30,0,0,95,30,0,0,95,30,0,0,97,30,0,0,97,30,0,0,99,30,0,0,99,30,0,0,101,30,0,0,101,30,0,0,103,30,0,0,103,30,0,0,105,30,0,0,105,30,0,0,107,30,0,0,107,30,0,0,109,30,0,0,109,30,0,0,111,30,0,0,111,30,0,0,113,30,0,0,113,30,0,0,115,30,0,0,115,30,0,0,117,30,0,0,117,30,0,0,119,30,0,0,119,30,0,0,121,30,0,0,121,30,0,0,123,30,0,0,123,30,0,0,125,30,0,0,125,30,0,0,127,30,0,0,127,30,0,0,129,30,0,0,129,30,0,0,131,30,0,0,131,30,0,0,133,30,0,0,133,30,0,0,135,30,0,0,135,30,0,0,137,30,0,0,137,30,0,0,139,30,0,0,139,30,0,0,141,30,0,0,141,30,0,0,143,30,0,0,143,30,0,0,145,30,0,0,145,30,0,0,147,30,0,0,147,30,0,0,149,30,0,0,157,30,0,0,159,30,0,0,159,30,0,0,161,30,0,0,161,30,0,0,163,30,0,0,163,30,0,0,165,30,0,0,165,30,0,0,167,30,0,0,167,30,0,0,169,30,0,0,169,30,0,0,171,30,0,0,171,30,0,0,173,30,0,0,173,30,0,0,175,30,0,0,175,30,0,0,177,30,0,0,177,30,0,0,179,30,0,0,179,30,0,0,181,30,0,0,181,30,0,0,183,30,0,0,183,30,0,0,185,30,0,0,185,30,0,0,187,30,0,0,187,30,0,0,189,30,0,0,189,30,0,0,191,30,0,0,191,30,0,0,193,30,0,0,193,30,0,0,195,30,0,0,195,30,0,0,197,30,0,0,197,30,0,0,199,30,0,0,199,30,0,0,201,30,0,0,201,30,0,0,203,30,0,0,203,30,0,0,205,30,0,0,205,30,0,0,207,30,0,0,207,30,0,0,209,30,0,0,209,30,0,0,211,30,0,0,211,30,0,0,213,30,0,0,213,30,0,0,215,30,0,0,215,30,0,0,217,30,0,0,217,30,0,0,219,30,0,0,219,30,0,0,221,30,0,0,221,30,0,0,223,30,0,0,223,30,0,0,225,30,0,0,225,30,0,0,227,30,0,0,227,30,0,0,229,30,0,0,229,30,0,0,231,30,0,0,231,30,0,0,233,30,0,0,233,30,0,0,235,30,0,0,235,30,0,0,237,30,0,0,237,30,0,0,239,30,0,0,239,30,0,0,241,30,0,0,241,30,0,0,243,30,0,0,243,30,0,0,245,30,0,0,245,30,0,0,247,30,0,0,247,30,0,0,249,30,0,0,249,30,0,0,251,30,0,0,251,30,0,0,253,30,0,0,253,30,0,0,255,30,0,0,7,31,0,0,16,31,0,0,21,31,0,0,32,31,0,0,39,31,0,0,48,31,0,0,55,31,0,0,64,31,0,0,69,31,0,0,80,31,0,0,87,31,0,0,96,31,0,0,103,31,0,0,112,31,0,0,125,31,0,0,128,31,0,0,135,31,0,0,144,31,0,0,151,31,0,0,160,31,0,0,167,31,0,0,176,31,0,0,180,31,0,0,182,31,0,0,183,31,0,0,190,31,0,0,190,31,0,0,194,31,0,0,196,31,0,0,198,31,0,0,199,31,0,0,208,31,0,0,211,31,0,0,214,31,0,0,215,31,0,0,224,31,0,0,231,31,0,0,242,31,0,0,244,31,0,0,246,31,0,0,247,31,0,0,113,32,0,0,113,32,0,0,127,32,0,0,127,32,0,0,144,32,0,0,156,32,0,0,10,33,0,0,10,33,0,0,14,33,0,0,15,33,0,0,19,33,0,0,19,33,0,0,47,33,0,0,47,33,0,0,52,33,0,0,52,33,0,0,57,33,0,0,57,33,0,0,60,33,0,0,61,33,0,0,70,33,0,0,73,33,0,0,78,33,0,0,78,33,0,0,112,33,0,0,127,33,0,0,132,33,0,0,132,33,0,0,208,36,0,0,233,36,0,0,48,44,0,0,94,44,0,0,97,44,0,0,97,44,0,0,101,44,0,0,102,44,0,0,104,44,0,0,104,44,0,0,106,44,0,0,106,44,0,0,108,44,0,0,108,44,0,0,113,44,0,0,113,44,0,0,115,44,0,0,116,44,0,0,118,44,0,0,125,44,0,0,129,44,0,0,129,44,0,0,131,44,0,0,131,44,0,0,133,44,0,0,133,44,0,0,135,44,0,0,135,44,0,0,137,44,0,0,137,44,0,0,139,44,0,0,139,44,0,0,141,44,0,0,141,44,0,0,143,44,0,0,143,44,0,0,145,44,0,0,145,44,0,0,147,44,0,0,147,44,0,0,149,44,0,0,149,44,0,0,151,44,0,0,151,44,0,0,153,44,0,0,153,44,0,0,155,44,0,0,155,44,0,0,157,44,0,0,157,44,0,0,159,44,0,0,159,44,0,0,161,44,0,0,161,44,0,0,163,44,0,0,163,44,0,0,165,44,0,0,165,44,0,0,167,44,0,0,167,44,0,0,169,44,0,0,169,44,0,0,171,44,0,0,171,44,0,0,173,44,0,0,173,44,0,0,175,44,0,0,175,44,0,0,177,44,0,0,177,44,0,0,179,44,0,0,179,44,0,0,181,44,0,0,181,44,0,0,183,44,0,0,183,44,0,0,185,44,0,0,185,44,0,0,187,44,0,0,187,44,0,0,189,44,0,0,189,44,0,0,191,44,0,0,191,44,0,0,193,44,0,0,193,44,0,0,195,44,0,0,195,44,0,0,197,44,0,0,197,44,0,0,199,44,0,0,199,44,0,0,201,44,0,0,201,44,0,0,203,44,0,0,203,44,0,0,205,44,0,0,205,44,0,0,207,44,0,0,207,44,0,0,209,44,0,0,209,44,0,0,211,44,0,0,211,44,0,0,213,44,0,0,213,44,0,0,215,44,0,0,215,44,0,0,217,44,0,0,217,44,0,0,219,44,0,0,219,44,0,0,221,44,0,0,221,44,0,0,223,44,0,0,223,44,0,0,225,44,0,0,225,44,0,0,227,44,0,0,228,44,0,0,236,44,0,0,236,44,0,0,238,44,0,0,238,44,0,0,243,44,0,0,243,44,0,0,0,45,0,0,37,45,0,0,39,45,0,0,39,45,0,0,45,45,0,0,45,45,0,0,65,166,0,0,65,166,0,0,67,166,0,0,67,166,0,0,69,166,0,0,69,166,0,0,71,166,0,0,71,166,0,0,73,166,0,0,73,166,0,0,75,166,0,0,75,166,0,0,77,166,0,0,77,166,0,0,79,166,0,0,79,166,0,0,81,166,0,0,81,166,0,0,83,166,0,0,83,166,0,0,85,166,0,0,85,166,0,0,87,166,0,0,87,166,0,0,89,166,0,0,89,166,0,0,91,166,0,0,91,166,0,0,93,166,0,0,93,166,0,0,95,166,0,0,95,166,0,0,97,166,0,0,97,166,0,0,99,166,0,0,99,166,0,0,101,166,0,0,101,166,0,0,103,166,0,0,103,166,0,0,105,166,0,0,105,166,0,0,107,166,0,0,107,166,0,0,109,166,0,0,109,166,0,0,129,166,0,0,129,166,0,0,131,166,0,0,131,166,0,0,133,166,0,0,133,166,0,0,135,166,0,0,135,166,0,0,137,166,0,0,137,166], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+71864);
/* memory initializer */ allocate([139,166,0,0,139,166,0,0,141,166,0,0,141,166,0,0,143,166,0,0,143,166,0,0,145,166,0,0,145,166,0,0,147,166,0,0,147,166,0,0,149,166,0,0,149,166,0,0,151,166,0,0,151,166,0,0,153,166,0,0,153,166,0,0,155,166,0,0,157,166,0,0,35,167,0,0,35,167,0,0,37,167,0,0,37,167,0,0,39,167,0,0,39,167,0,0,41,167,0,0,41,167,0,0,43,167,0,0,43,167,0,0,45,167,0,0,45,167,0,0,47,167,0,0,49,167,0,0,51,167,0,0,51,167,0,0,53,167,0,0,53,167,0,0,55,167,0,0,55,167,0,0,57,167,0,0,57,167,0,0,59,167,0,0,59,167,0,0,61,167,0,0,61,167,0,0,63,167,0,0,63,167,0,0,65,167,0,0,65,167,0,0,67,167,0,0,67,167,0,0,69,167,0,0,69,167,0,0,71,167,0,0,71,167,0,0,73,167,0,0,73,167,0,0,75,167,0,0,75,167,0,0,77,167,0,0,77,167,0,0,79,167,0,0,79,167,0,0,81,167,0,0,81,167,0,0,83,167,0,0,83,167,0,0,85,167,0,0,85,167,0,0,87,167,0,0,87,167,0,0,89,167,0,0,89,167,0,0,91,167,0,0,91,167,0,0,93,167,0,0,93,167,0,0,95,167,0,0,95,167,0,0,97,167,0,0,97,167,0,0,99,167,0,0,99,167,0,0,101,167,0,0,101,167,0,0,103,167,0,0,103,167,0,0,105,167,0,0,105,167,0,0,107,167,0,0,107,167,0,0,109,167,0,0,109,167,0,0,111,167,0,0,120,167,0,0,122,167,0,0,122,167,0,0,124,167,0,0,124,167,0,0,127,167,0,0,127,167,0,0,129,167,0,0,129,167,0,0,131,167,0,0,131,167,0,0,133,167,0,0,133,167,0,0,135,167,0,0,135,167,0,0,140,167,0,0,140,167,0,0,142,167,0,0,142,167,0,0,145,167,0,0,145,167,0,0,147,167,0,0,149,167,0,0,151,167,0,0,151,167,0,0,153,167,0,0,153,167,0,0,155,167,0,0,155,167,0,0,157,167,0,0,157,167,0,0,159,167,0,0,159,167,0,0,161,167,0,0,161,167,0,0,163,167,0,0,163,167,0,0,165,167,0,0,165,167,0,0,167,167,0,0,167,167,0,0,169,167,0,0,169,167,0,0,181,167,0,0,181,167,0,0,183,167,0,0,183,167,0,0,248,167,0,0,250,167,0,0,48,171,0,0,90,171,0,0,92,171,0,0,101,171,0,0,112,171,0,0,191,171,0,0,0,251,0,0,6,251,0,0,19,251,0,0,23,251,0,0,65,255,0,0,90,255,0,0,40,4,1,0,79,4,1,0,192,12,1,0,242,12,1,0,192,24,1,0,223,24,1,0,26,212,1,0,51,212,1,0,78,212,1,0,84,212,1,0,86,212,1,0,103,212,1,0,130,212,1,0,155,212,1,0,182,212,1,0,185,212,1,0,187,212,1,0,187,212,1,0,189,212,1,0,195,212,1,0,197,212,1,0,207,212,1,0,234,212,1,0,3,213,1,0,30,213,1,0,55,213,1,0,82,213,1,0,107,213,1,0,134,213,1,0,159,213,1,0,186,213,1,0,211,213,1,0,238,213,1,0,7,214,1,0,34,214,1,0,59,214,1,0,86,214,1,0,111,214,1,0,138,214,1,0,165,214,1,0,194,214,1,0,218,214,1,0,220,214,1,0,225,214,1,0,252,214,1,0,20,215,1,0,22,215,1,0,27,215,1,0,54,215,1,0,78,215,1,0,80,215,1,0,85,215,1,0,112,215,1,0,136,215,1,0,138,215,1,0,143,215,1,0,170,215,1,0,194,215,1,0,196,215,1,0,201,215,1,0,203,215,1,0,203,215,1,0,197,1,0,0,197,1,0,0,200,1,0,0,200,1,0,0,203,1,0,0,203,1,0,0,242,1,0,0,242,1,0,0,136,31,0,0,143,31,0,0,152,31,0,0,159,31,0,0,168,31,0,0,175,31,0,0,188,31,0,0,188,31,0,0,204,31,0,0,204,31,0,0,252,31,0,0,252,31,0,0,65,0,0,0,90,0,0,0,192,0,0,0,214,0,0,0,216,0,0,0,222,0,0,0,0,1,0,0,0,1,0,0,2,1,0,0,2,1,0,0,4,1,0,0,4,1,0,0,6,1,0,0,6,1,0,0,8,1,0,0,8,1,0,0,10,1,0,0,10,1,0,0,12,1,0,0,12,1,0,0,14,1,0,0,14,1,0,0,16,1,0,0,16,1,0,0,18,1,0,0,18,1,0,0,20,1,0,0,20,1,0,0,22,1,0,0,22,1,0,0,24,1,0,0,24,1,0,0,26,1,0,0,26,1,0,0,28,1,0,0,28,1,0,0,30,1,0,0,30,1,0,0,32,1,0,0,32,1,0,0,34,1,0,0,34,1,0,0,36,1,0,0,36,1,0,0,38,1,0,0,38,1,0,0,40,1,0,0,40,1,0,0,42,1,0,0,42,1,0,0,44,1,0,0,44,1,0,0,46,1,0,0,46,1,0,0,48,1,0,0,48,1,0,0,50,1,0,0,50,1,0,0,52,1,0,0,52,1,0,0,54,1,0,0,54,1,0,0,57,1,0,0,57,1,0,0,59,1,0,0,59,1,0,0,61,1,0,0,61,1,0,0,63,1,0,0,63,1,0,0,65,1,0,0,65,1,0,0,67,1,0,0,67,1,0,0,69,1,0,0,69,1,0,0,71,1,0,0,71,1,0,0,74,1,0,0,74,1,0,0,76,1,0,0,76,1,0,0,78,1,0,0,78,1,0,0,80,1,0,0,80,1,0,0,82,1,0,0,82,1,0,0,84,1,0,0,84,1,0,0,86,1,0,0,86,1,0,0,88,1,0,0,88,1,0,0,90,1,0,0,90,1,0,0,92,1,0,0,92,1,0,0,94,1,0,0,94,1,0,0,96,1,0,0,96,1,0,0,98,1,0,0,98,1,0,0,100,1,0,0,100,1,0,0,102,1,0,0,102,1,0,0,104,1,0,0,104,1,0,0,106,1,0,0,106,1,0,0,108,1,0,0,108,1,0,0,110,1,0,0,110,1,0,0,112,1,0,0,112,1,0,0,114,1,0,0,114,1,0,0,116,1,0,0,116,1,0,0,118,1,0,0,118,1,0,0,120,1,0,0,121,1,0,0,123,1,0,0,123,1,0,0,125,1,0,0,125,1,0,0,129,1,0,0,130,1,0,0,132,1,0,0,132,1,0,0,134,1,0,0,135,1,0,0,137,1,0,0,139,1,0,0,142,1,0,0,145,1,0,0,147,1,0,0,148,1,0,0,150,1,0,0,152,1,0,0,156,1,0,0,157,1,0,0,159,1,0,0,160,1,0,0,162,1,0,0,162,1,0,0,164,1,0,0,164,1,0,0,166,1,0,0,167,1,0,0,169,1,0,0,169,1,0,0,172,1,0,0,172,1,0,0,174,1,0,0,175,1,0,0,177,1,0,0,179,1,0,0,181,1,0,0,181,1,0,0,183,1,0,0,184,1,0,0,188,1,0,0,188,1,0,0,196,1,0,0,196,1,0,0,199,1,0,0,199,1,0,0,202,1,0,0,202,1,0,0,205,1,0,0,205,1,0,0,207,1,0,0,207,1,0,0,209,1,0,0,209,1,0,0,211,1,0,0,211,1,0,0,213,1,0,0,213,1,0,0,215,1,0,0,215,1,0,0,217,1,0,0,217,1,0,0,219,1,0,0,219,1,0,0,222,1,0,0,222,1,0,0,224,1,0,0,224,1,0,0,226,1,0,0,226,1,0,0,228,1,0,0,228,1,0,0,230,1,0,0,230,1,0,0,232,1,0,0,232,1,0,0,234,1,0,0,234,1,0,0,236,1,0,0,236,1,0,0,238,1,0,0,238,1,0,0,241,1,0,0,241,1,0,0,244,1,0,0,244,1,0,0,246,1,0,0,248,1,0,0,250,1,0,0,250,1,0,0,252,1,0,0,252,1,0,0,254,1,0,0,254,1,0,0,0,2,0,0,0,2,0,0,2,2,0,0,2,2,0,0,4,2,0,0,4,2,0,0,6,2,0,0,6,2,0,0,8,2,0,0,8,2,0,0,10,2,0,0,10,2,0,0,12,2,0,0,12,2,0,0,14,2,0,0,14,2,0,0,16,2,0,0,16,2,0,0,18,2,0,0,18,2,0,0,20,2,0,0,20,2,0,0,22,2,0,0,22,2,0,0,24,2,0,0,24,2,0,0,26,2,0,0,26,2,0,0,28,2,0,0,28,2,0,0,30,2,0,0,30,2,0,0,32,2,0,0,32,2,0,0,34,2,0,0,34,2,0,0,36,2,0,0,36,2,0,0,38,2,0,0,38,2,0,0,40,2,0,0,40,2,0,0,42,2,0,0,42,2,0,0,44,2,0,0,44,2,0,0,46,2,0,0,46,2,0,0,48,2,0,0,48,2,0,0,50,2,0,0,50,2,0,0,58,2,0,0,59,2,0,0,61,2,0,0,62,2,0,0,65,2,0,0,65,2,0,0,67,2,0,0,70,2,0,0,72,2,0,0,72,2,0,0,74,2,0,0,74,2,0,0,76,2,0,0,76,2,0,0,78,2,0,0,78,2,0,0,112,3,0,0,112,3,0,0,114,3,0,0,114,3,0,0,118,3,0,0,118,3,0,0,127,3,0,0,127,3,0,0,134,3,0,0,134,3,0,0,136,3,0,0,138,3,0,0,140,3,0,0,140,3,0,0,142,3,0,0,143,3,0,0,145,3,0,0,161,3,0,0,163,3,0,0,171,3,0,0,207,3,0,0,207,3,0,0,210,3,0,0,212,3,0,0,216,3,0,0,216,3,0,0,218,3,0,0,218,3,0,0,220,3,0,0,220,3,0,0,222,3,0,0,222,3,0,0,224,3,0,0,224,3,0,0,226,3,0,0,226,3,0,0,228,3,0,0,228,3,0,0,230,3,0,0,230,3,0,0,232,3,0,0,232,3,0,0,234,3,0,0,234,3,0,0,236,3,0,0,236,3,0,0,238,3,0,0,238,3,0,0,244,3,0,0,244,3,0,0,247,3,0,0,247,3,0,0,249,3,0,0,250,3,0,0,253,3,0,0,47,4,0,0,96,4,0,0,96,4,0,0,98,4,0,0,98,4,0,0,100,4,0,0,100,4,0,0,102,4,0,0,102,4,0,0,104,4,0,0,104,4,0,0,106,4,0,0,106,4,0,0,108,4,0,0,108,4,0,0,110,4,0,0,110,4,0,0,112,4,0,0,112,4,0,0,114,4,0,0,114,4,0,0,116,4,0,0,116,4,0,0,118,4,0,0,118,4,0,0,120,4,0,0,120,4,0,0,122,4,0,0,122,4,0,0,124,4,0,0,124,4,0,0,126,4,0,0,126,4,0,0,128,4,0,0,128,4,0,0,138,4,0,0,138,4,0,0,140,4,0,0,140,4,0,0,142,4,0,0,142,4,0,0,144,4,0,0,144,4,0,0,146,4,0,0,146,4,0,0,148,4,0,0,148,4,0,0,150,4,0,0,150,4,0,0,152,4,0,0,152,4,0,0,154,4,0,0,154,4,0,0,156,4,0,0,156,4,0,0,158,4,0,0,158,4,0,0,160,4,0,0,160,4,0,0,162,4,0,0,162,4,0,0,164,4,0,0,164,4,0,0,166,4,0,0,166,4,0,0,168,4,0,0,168,4,0,0,170,4,0,0,170,4,0,0,172,4,0,0,172,4,0,0,174,4,0,0,174,4,0,0,176,4,0,0,176,4,0,0,178,4,0,0,178,4,0,0,180,4,0,0,180,4,0,0,182,4,0,0,182,4,0,0,184,4,0,0,184,4,0,0,186,4,0,0,186,4,0,0,188,4,0,0,188,4,0,0,190,4,0,0,190,4,0,0,192,4,0,0,193,4,0,0,195,4,0,0,195,4,0,0,197,4,0,0,197,4,0,0,199,4,0,0,199,4,0,0,201,4,0,0,201,4,0,0,203,4,0,0,203,4,0,0,205,4,0,0,205,4,0,0,208,4,0,0,208,4,0,0,210,4,0,0,210,4,0,0,212,4,0,0,212,4,0,0,214,4,0,0,214,4,0,0,216,4,0,0,216,4,0,0,218,4,0,0,218,4,0,0,220,4,0,0,220,4,0,0,222,4,0,0,222,4,0,0,224,4,0,0,224,4,0,0,226,4,0,0,226,4,0,0,228,4,0,0,228,4,0,0,230,4,0,0,230,4,0,0,232,4,0,0,232,4,0,0,234,4,0,0,234,4,0,0,236,4,0,0,236,4,0,0,238,4,0,0,238,4,0,0,240,4,0,0,240,4,0,0,242,4,0,0,242,4,0,0,244,4,0,0,244,4,0,0,246,4,0,0,246,4,0,0,248,4,0,0,248,4,0,0,250,4,0,0,250,4,0,0,252,4,0,0,252,4,0,0,254,4,0,0,254,4,0,0,0,5,0,0,0,5,0,0,2,5,0,0,2,5,0,0,4,5,0,0,4,5,0,0,6,5,0,0,6,5,0,0,8,5,0,0,8,5,0,0,10,5,0,0,10,5,0,0,12,5,0,0,12,5,0,0,14,5,0,0,14,5,0,0,16,5,0,0,16,5,0,0,18,5,0,0,18,5,0,0,20,5,0,0,20,5,0,0,22,5,0,0,22,5,0,0,24,5,0,0,24,5,0,0,26,5,0,0,26,5,0,0,28,5,0,0,28,5,0,0,30,5,0,0,30,5,0,0,32,5,0,0,32,5,0,0,34,5,0,0,34,5,0,0,36,5,0,0,36,5,0,0,38,5,0,0,38,5,0,0,40,5,0,0,40,5,0,0,42,5,0,0,42,5,0,0,44,5,0,0,44,5,0,0,46,5,0,0,46,5,0,0,49,5,0,0,86,5,0,0,160,16,0,0,197,16,0,0,199,16,0,0,199,16,0,0,205,16,0,0,205,16,0,0,160,19,0,0,245,19,0,0,0,30,0,0,0,30,0,0,2,30,0,0,2,30,0,0,4,30,0,0,4,30,0,0,6,30,0,0,6,30,0,0,8,30,0,0,8,30,0,0,10,30,0,0,10,30,0,0,12,30,0,0,12,30,0,0,14,30,0,0,14,30,0,0,16,30,0,0,16,30,0,0,18,30,0,0,18,30,0,0,20,30,0,0,20,30,0,0,22,30,0,0,22,30,0,0,24,30,0,0,24,30,0,0,26,30,0,0,26,30,0,0,28,30,0,0,28,30,0,0,30,30,0,0,30,30,0,0,32,30,0,0,32,30,0,0,34,30,0,0,34,30,0,0,36,30,0,0,36,30,0,0,38,30,0,0,38,30,0,0,40,30,0,0,40,30,0,0,42,30,0,0,42,30,0,0,44,30,0,0,44,30,0,0,46,30,0,0,46,30,0,0,48,30,0,0,48,30,0,0,50,30,0,0,50,30,0,0,52,30,0,0,52,30,0,0,54,30,0,0,54,30,0,0,56,30,0,0,56,30,0,0,58,30,0,0,58,30,0,0,60,30,0,0,60,30,0,0,62,30,0,0,62,30,0,0,64,30,0,0,64,30,0,0,66,30,0,0,66,30,0,0,68,30,0,0,68,30,0,0,70,30,0,0,70,30,0,0,72,30,0,0,72,30,0,0,74,30,0,0,74,30,0,0,76,30,0,0,76,30,0,0,78,30,0,0,78,30,0,0,80,30,0,0,80,30,0,0,82,30,0,0,82,30,0,0,84,30,0,0,84,30,0,0,86,30,0,0,86,30,0,0,88,30,0,0,88,30,0,0,90,30,0,0,90,30,0,0,92,30,0,0,92,30,0,0,94,30,0,0,94,30,0,0,96,30,0,0,96,30,0,0,98,30,0,0,98,30,0,0,100,30,0,0,100,30,0,0,102,30,0,0,102,30,0,0,104,30,0,0,104,30,0,0,106,30,0,0,106,30,0,0,108,30,0,0,108,30,0,0,110,30,0,0,110,30,0,0,112,30,0,0,112,30,0,0,114,30,0,0,114,30,0,0,116,30,0,0,116,30,0,0,118,30,0,0,118,30,0,0,120,30,0,0,120,30,0,0,122,30,0,0,122,30,0,0,124,30,0,0,124,30,0,0,126,30,0,0,126,30,0,0,128,30,0,0,128,30,0,0,130,30,0,0,130,30,0,0,132,30,0,0,132,30,0,0,134,30,0,0,134,30,0,0,136,30,0,0,136,30,0,0,138,30,0,0,138,30,0,0,140,30,0,0,140,30,0,0,142,30,0,0,142,30,0,0,144,30,0,0,144,30,0,0,146,30,0,0,146,30,0,0,148,30,0,0,148,30,0,0,158,30,0,0,158,30,0,0,160,30,0,0,160,30,0,0,162,30,0,0,162,30,0,0,164,30,0,0,164,30,0,0,166,30,0,0,166,30,0,0,168,30,0,0,168,30,0,0,170,30,0,0,170,30,0,0,172,30,0,0,172,30,0,0,174,30,0,0,174,30,0,0,176,30,0,0,176,30,0,0,178,30,0,0,178,30,0,0,180,30,0,0,180,30,0,0,182,30,0,0,182,30,0,0,184,30,0,0,184,30,0,0,186,30,0,0,186,30,0,0,188,30,0,0,188,30,0,0,190,30,0,0,190,30,0,0,192,30,0,0,192,30,0,0,194,30,0,0,194,30,0,0,196,30,0,0,196,30,0,0,198,30,0,0,198,30,0,0,200,30,0,0,200,30,0,0,202,30,0,0,202,30,0,0,204,30,0,0,204,30,0,0,206,30,0,0,206,30,0,0,208,30,0,0,208,30,0,0,210,30,0,0,210,30,0,0,212,30,0,0,212,30,0,0,214,30,0,0,214,30,0,0,216,30,0,0,216,30,0,0,218,30,0,0,218,30,0,0,220,30,0,0,220,30,0,0,222,30,0,0,222,30,0,0,224,30,0,0,224,30,0,0,226,30,0,0,226,30,0,0,228,30,0,0,228,30,0,0,230,30,0,0,230,30,0,0,232,30,0,0,232,30,0,0,234,30,0,0,234,30,0,0,236,30,0,0,236,30,0,0,238,30,0,0,238,30,0,0,240,30,0,0,240,30,0,0,242,30,0,0,242,30,0,0,244,30,0,0,244,30,0,0,246,30,0,0,246,30,0,0,248,30,0,0,248,30,0,0,250,30,0,0,250,30,0,0,252,30,0,0,252,30,0,0,254,30,0,0,254,30,0,0,8,31,0,0,15,31,0,0,24,31,0,0,29,31,0,0,40,31,0,0,47,31,0,0,56,31,0,0,63,31,0,0,72,31,0,0,77,31,0,0,89,31,0,0,89,31,0,0,91,31,0,0,91,31,0,0,93,31,0,0,93,31,0,0,95,31,0,0,95,31,0,0,104,31,0,0,111,31,0,0,184,31,0,0,187,31,0,0,200,31,0,0,203,31,0,0,216,31,0,0,219,31,0,0,232,31,0,0,236,31,0,0,248,31,0,0,251,31,0,0,2,33,0,0,2,33,0,0,7,33,0,0,7,33,0,0,11,33,0,0,13,33,0,0,16,33,0,0,18,33,0,0,21,33,0,0,21,33,0,0,25,33,0,0,29,33,0,0,36,33,0,0,36,33,0,0,38,33,0,0,38,33,0,0,40,33,0,0,40,33,0,0,42,33,0,0,45,33,0,0,48,33,0,0,51,33,0,0,62,33,0,0,63,33,0,0,69,33,0,0,69,33,0,0,131,33,0,0,131,33,0,0,0,44,0,0,46,44,0,0,96,44,0,0,96,44,0,0,98,44,0,0,100,44,0,0,103,44,0,0,103,44,0,0,105,44,0,0,105,44,0,0,107,44,0,0,107,44,0,0,109,44,0,0,112,44,0,0,114,44,0,0,114,44,0,0,117,44,0,0,117,44,0,0,126,44,0,0,128,44,0,0,130,44,0,0,130,44,0,0,132,44,0,0,132,44,0,0,134,44,0,0,134,44,0,0,136,44,0,0,136,44,0,0,138,44,0,0,138,44,0,0,140,44,0,0,140,44,0,0,142,44,0,0,142,44,0,0,144,44,0,0,144,44,0,0,146,44,0,0,146,44,0,0,148,44,0,0,148,44,0,0,150,44,0,0,150,44,0,0,152,44,0,0,152,44,0,0,154,44,0,0,154,44,0,0,156,44,0,0,156,44,0,0,158,44,0,0,158,44,0,0,160,44,0,0,160,44,0,0,162,44,0,0,162,44,0,0,164,44,0,0,164,44,0,0,166,44,0,0,166,44,0,0,168,44,0,0,168,44,0,0,170,44,0,0,170,44,0,0,172,44,0,0,172,44,0,0,174,44,0,0,174,44,0,0,176,44,0,0,176,44,0,0,178,44,0,0,178,44,0,0,180,44,0,0,180,44,0,0,182,44,0,0,182,44,0,0,184,44,0,0,184,44,0,0,186,44,0,0,186,44,0,0,188,44,0,0,188,44,0,0,190,44,0,0,190,44,0,0,192,44,0,0,192,44,0,0,194,44,0,0,194,44,0,0,196,44,0,0,196,44,0,0,198,44,0,0,198,44,0,0,200,44,0,0,200,44,0,0,202,44,0,0,202,44,0,0,204,44,0,0,204,44,0,0,206,44,0,0,206,44,0,0,208,44,0,0,208,44,0,0,210,44,0,0,210,44,0,0,212,44,0,0,212,44,0,0,214,44,0,0,214,44,0,0,216,44,0,0,216,44,0,0,218,44,0,0,218,44,0,0,220,44,0,0,220,44,0,0,222,44,0,0,222,44,0,0,224,44,0,0,224,44,0,0,226,44,0,0,226,44,0,0,235,44,0,0,235,44,0,0,237,44,0,0,237,44,0,0,242,44,0,0,242,44,0,0,64,166,0,0,64,166,0,0,66,166,0,0,66,166,0,0,68,166,0,0,68,166,0,0,70,166,0,0,70,166,0,0,72,166,0,0,72,166,0,0,74,166,0,0,74,166,0,0,76,166,0,0,76,166,0,0,78,166,0,0,78,166,0,0,80,166,0,0,80,166,0,0,82,166,0,0,82,166,0,0,84,166,0,0,84,166,0,0,86,166,0,0,86,166,0,0,88,166,0,0,88,166,0,0,90,166,0,0,90,166,0,0,92,166,0,0,92,166,0,0,94,166,0,0,94,166,0,0,96,166,0,0,96,166,0,0,98,166,0,0,98,166,0,0,100,166,0,0,100,166,0,0,102,166,0,0,102,166,0,0,104,166,0,0,104,166,0,0,106,166,0,0,106,166,0,0,108,166,0,0,108,166,0,0,128,166,0,0,128,166,0,0,130,166,0,0,130,166,0,0,132,166,0,0,132,166,0,0,134,166,0,0,134,166,0,0,136,166,0,0,136,166,0,0,138,166,0,0,138,166,0,0,140,166,0,0,140,166,0,0,142,166,0,0,142,166,0,0,144,166,0,0,144,166,0,0,146,166,0,0,146,166,0,0,148,166,0,0,148,166,0,0,150,166,0,0,150,166,0,0,152,166,0,0,152,166,0,0,154,166,0,0,154,166,0,0,34,167,0,0,34,167,0,0,36,167,0,0,36,167,0,0,38,167,0,0,38,167,0,0,40,167,0,0,40,167,0,0,42,167,0,0,42,167,0,0,44,167,0,0,44,167,0,0,46,167,0,0,46,167,0,0,50,167,0,0,50,167,0,0,52,167,0,0,52,167,0,0,54,167,0,0,54,167,0,0,56,167,0,0,56,167,0,0,58,167,0,0,58,167,0,0,60,167,0,0,60,167,0,0,62,167,0,0,62,167,0,0,64,167,0,0,64,167,0,0,66,167,0,0,66,167,0,0,68,167,0,0,68,167,0,0,70,167,0,0,70,167,0,0,72,167,0,0,72,167,0,0,74,167,0,0,74,167,0,0,76,167,0,0,76,167,0,0,78,167,0,0,78,167,0,0,80,167,0,0,80,167,0,0,82,167,0,0,82,167,0,0,84,167,0,0,84,167,0,0,86,167,0,0,86,167,0,0,88,167,0,0,88,167,0,0,90,167,0,0,90,167,0,0,92,167,0,0,92,167,0,0,94,167,0,0,94,167,0,0,96,167,0,0,96,167,0,0,98,167,0,0,98,167,0,0,100,167,0,0,100,167,0,0,102,167,0,0,102,167,0,0,104,167,0,0,104,167,0,0,106,167,0,0,106,167,0,0,108,167,0,0,108,167,0,0,110,167,0,0,110,167,0,0,121,167,0,0,121,167,0,0,123,167,0,0,123,167,0,0,125,167,0,0,126,167,0,0,128,167,0,0,128,167,0,0,130,167,0,0,130,167,0,0,132,167,0,0,132,167,0,0,134,167,0,0,134,167,0,0,139,167,0,0,139,167,0,0,141,167,0,0,141,167,0,0,144,167,0,0,144,167,0,0,146,167,0,0,146,167,0,0,150,167,0,0,150,167,0,0,152,167,0,0,152,167,0,0,154,167,0,0,154,167,0,0,156,167,0,0,156,167,0,0,158,167,0,0,158,167,0,0,160,167,0,0,160,167,0,0,162,167,0,0,162,167,0,0,164,167,0,0,164,167,0,0,166,167,0,0,166,167,0,0,168,167,0,0,168,167,0,0,170,167,0,0,173,167,0,0,176,167,0,0,180,167,0,0,182,167,0,0,182,167,0,0,33,255,0,0,58,255,0,0,0,4,1,0,39,4,1,0,128,12,1,0,178,12,1,0,160,24,1,0,191,24,1,0,0,212,1,0,25,212,1,0,52,212,1,0,77,212,1,0,104,212,1,0,129,212,1,0,156,212,1,0,156,212,1,0,158,212,1,0,159,212,1,0,162,212,1,0,162,212,1,0,165,212,1,0,166,212,1,0,169,212,1,0,172,212,1,0,174,212,1,0,181,212,1,0,208,212,1,0,233,212,1,0,4,213,1,0,5,213,1,0,7,213,1,0,10,213,1,0,13,213,1,0,20,213,1,0,22,213,1,0,28,213,1,0,56,213,1,0,57,213,1,0,59,213,1,0,62,213,1,0,64,213,1,0,68,213,1,0,70,213,1,0,70,213,1,0,74,213,1,0,80,213,1,0,108,213,1,0,133,213,1,0,160,213,1,0,185,213,1,0,212,213,1,0,237,213,1,0,8,214,1,0,33,214,1,0,60,214,1,0,85,214,1,0,112,214,1,0,137,214,1,0,168,214,1,0,192,214,1,0,226,214,1,0,250,214,1,0,28,215,1,0,52,215,1,0,86,215,1,0,110,215,1,0,144,215,1,0,168,215,1,0,202,215,1,0,202,215,1,0,128,2,1,0,156,2,1,0,32,9,1,0,57,9,1,0,63,9,1,0,63,9,1,0,0,3,0,0,111,3,0,0,131,4,0,0,137,4,0,0,145,5,0,0,189,5,0,0,191,5,0,0,191,5,0,0,193,5,0,0,194,5,0,0,196,5,0,0,197,5,0,0,199,5,0,0,199,5,0,0,16,6,0,0,26,6,0,0,75,6,0,0,95,6,0,0,112,6,0,0,112,6,0,0,214,6,0,0,220,6,0,0,223,6,0,0,228,6,0,0,231,6,0,0,232,6,0,0,234,6,0,0,237,6,0,0,17,7,0,0,17,7,0,0,48,7,0,0,74,7,0,0,166,7,0,0,176,7,0,0,235,7,0,0,243,7,0,0,22,8,0,0,25,8,0,0,27,8,0,0,35,8,0,0,37,8,0,0,39,8,0,0,41,8,0,0,45,8,0,0,89,8,0,0,91,8,0,0,227,8,0,0,3,9,0,0,58,9,0,0,60,9,0,0,62,9,0,0,79,9,0,0,81,9,0,0,87,9,0,0,98,9,0,0,99,9,0,0,129,9,0,0,131,9,0,0,188,9,0,0,188,9,0,0,190,9,0,0,196,9,0,0,199,9,0,0,200,9,0,0,203,9,0,0,205,9,0,0,215,9,0,0,215,9,0,0,226,9,0,0,227,9,0,0,1,10,0,0,3,10,0,0,60,10,0,0,60,10,0,0,62,10,0,0,66,10,0,0,71,10,0,0,72,10,0,0,75,10,0,0,77,10,0,0,81,10,0,0,81,10,0,0,112,10,0,0,113,10,0,0,117,10,0,0,117,10,0,0,129,10,0,0,131,10,0,0,188,10,0,0,188,10,0,0,190,10,0,0,197,10,0,0,199,10,0,0,201,10,0,0,203,10,0,0,205,10,0,0,226,10,0,0,227,10,0,0,1,11,0,0,3,11,0,0,60,11,0,0,60,11,0,0,62,11,0,0,68,11,0,0,71,11,0,0,72,11,0,0,75,11,0,0,77,11,0,0,86,11,0,0,87,11,0,0,98,11,0,0,99,11,0,0,130,11,0,0,130,11,0,0,190,11,0,0,194,11,0,0,198,11,0,0,200,11,0,0,202,11,0,0,205,11,0,0,215,11,0,0,215,11,0,0,0,12,0,0,3,12,0,0,62,12,0,0,68,12,0,0,70,12,0,0,72,12,0,0,74,12,0,0,77,12,0,0,85,12,0,0,86,12,0,0,98,12,0,0,99,12,0,0,129,12,0,0,131,12,0,0,188,12,0,0,188,12,0,0,190,12,0,0,196,12,0,0,198,12,0,0,200,12,0,0,202,12,0,0,205,12,0,0,213,12,0,0,214,12,0,0,226,12,0,0,227,12,0,0,1,13,0,0,3,13,0,0,62,13,0,0,68,13,0,0,70,13,0,0,72,13,0,0,74,13,0,0,77,13,0,0,87,13,0,0,87,13,0,0,98,13,0,0,99,13,0,0,130,13,0,0,131,13,0,0,202,13,0,0,202,13,0,0,207,13,0,0,212,13,0,0,214,13,0,0,214,13,0,0,216,13,0,0,223,13,0,0,242,13,0,0,243,13,0,0,49,14,0,0,49,14,0,0,52,14,0,0,58,14,0,0,71,14,0,0,78,14,0,0,177,14,0,0,177,14,0,0,180,14,0,0,185,14,0,0,187,14,0,0,188,14,0,0,200,14,0,0,205,14,0,0,24,15,0,0,25,15,0,0,53,15,0,0,53,15,0,0,55,15,0,0,55,15,0,0,57,15,0,0,57,15,0,0,62,15,0,0,63,15,0,0,113,15,0,0,132,15,0,0,134,15,0,0,135,15,0,0,141,15,0,0,151,15,0,0,153,15,0,0,188,15,0,0,198,15,0,0,198,15,0,0,43,16,0,0,62,16,0,0,86,16,0,0,89,16,0,0,94,16,0,0,96,16,0,0,98,16,0,0,100,16,0,0,103,16,0,0,109,16,0,0,113,16,0,0,116,16,0,0,130,16,0,0,141,16,0,0,143,16,0,0,143,16,0,0,154,16,0,0,157,16,0,0,93,19,0,0,95,19,0,0,18,23,0,0,20,23,0,0,50,23,0,0,52,23,0,0,82,23,0,0,83,23,0,0,114,23,0,0,115,23,0,0,180,23,0,0,211,23,0,0,221,23,0,0,221,23,0,0,11,24,0,0,13,24,0,0,169,24,0,0,169,24,0,0,32,25,0,0,43,25,0,0,48,25,0,0,59,25,0,0,23,26,0,0,27,26,0,0,85,26,0,0,94,26,0,0,96,26,0,0,124,26,0,0,127,26,0,0,127,26,0,0,176,26,0,0,190,26,0,0,0,27,0,0,4,27,0,0,52,27,0,0,68,27,0,0,107,27,0,0,115,27,0,0,128,27,0,0,130,27,0,0,161,27,0,0,173,27,0,0,230,27,0,0,243,27,0,0,36,28,0,0,55,28,0,0,208,28,0,0,210,28,0,0,212,28,0,0,232,28,0,0,237,28,0,0,237,28,0,0,242,28,0,0,244,28,0,0,248,28,0,0,249,28,0,0,192,29,0,0,245,29,0,0,252,29,0,0,255,29,0,0,208,32,0,0,240,32,0,0,239,44,0,0,241,44,0,0,127,45,0,0,127,45,0,0,224,45,0,0,255,45,0,0,42,48,0,0,47,48,0,0,153,48,0,0,154,48,0,0,111,166,0,0,114,166,0,0,116,166,0,0,125,166,0,0,158,166,0,0,159,166,0,0,240,166,0,0,241,166,0,0,2,168,0,0,2,168,0,0,6,168,0,0,6,168,0,0,11,168,0,0,11,168,0,0,35,168,0,0,39,168,0,0,128,168,0,0,129,168,0,0,180,168,0,0,196,168,0,0,224,168,0,0,241,168,0,0,38,169,0,0,45,169,0,0,71,169,0,0,83,169,0,0,128,169,0,0,131,169,0,0,179,169,0,0,192,169,0,0,229,169,0,0,229,169,0,0,41,170,0,0,54,170,0,0,67,170,0,0,67,170,0,0,76,170,0,0,77,170,0,0,123,170,0,0,125,170,0,0,176,170,0,0,176,170,0,0,178,170,0,0,180,170,0,0,183,170,0,0,184,170,0,0,190,170,0,0,191,170,0,0,193,170,0,0,193,170,0,0,235,170,0,0,239,170,0,0,245,170,0,0,246,170,0,0,227,171,0,0,234,171,0,0,236,171,0,0,237,171,0,0,30,251,0,0,30,251,0,0,0,254,0,0,15,254,0,0,32,254,0,0,47,254,0,0,253,1,1,0,253,1,1,0,224,2,1,0,224,2,1,0,118,3,1,0,122,3,1,0,1,10,1,0,3,10,1,0,5,10,1,0,6,10,1,0,12,10,1,0,15,10,1,0,56,10,1,0,58,10,1,0,63,10,1,0,63,10,1,0,229,10,1,0,230,10,1,0,0,16,1,0,2,16,1,0,56,16,1,0,70,16,1,0,127,16,1,0,130,16,1,0,176,16,1,0,186,16,1,0,0,17,1,0,2,17,1,0,39,17,1,0,52,17,1,0,115,17,1,0,115,17,1,0,128,17,1,0,130,17,1,0,179,17,1,0,192,17,1,0,202,17,1,0,204,17,1,0,44,18,1,0,55,18,1,0,223,18,1,0,234,18,1,0,0,19,1,0,3,19,1,0,60,19,1,0,60,19,1,0,62,19,1,0,68,19,1,0,71,19,1,0,72,19,1,0,75,19,1,0,77,19,1,0,87,19,1,0,87,19,1,0,98,19,1,0,99,19,1,0,102,19,1,0,108,19,1,0,112,19,1,0,116,19,1,0,176,20,1,0,195,20,1,0,175,21,1,0,181,21,1,0,184,21,1,0,192,21,1,0,220,21,1,0,221,21,1,0,48,22,1,0,64,22,1,0,171,22,1,0,183,22,1,0,29,23,1,0,43,23,1,0,240,106,1,0,244,106,1,0,48,107,1,0,54,107,1,0,81,111,1,0,126,111,1,0,143,111,1,0,146,111,1,0,157,188,1,0,158,188,1,0,101,209,1,0,105,209,1,0,109,209,1,0,114,209,1,0,123,209,1,0,130,209,1,0,133,209,1,0,139,209,1,0,170,209,1,0,173,209,1,0,66,210,1,0,68,210,1,0,0,218,1,0,54,218,1,0,59,218,1,0,108,218,1,0,117,218,1,0,117,218,1,0,132,218,1,0,132,218,1,0,155,218,1,0,159,218,1,0,161,218,1,0,175,218,1,0,208,232,1,0,214,232,1,0,0,1,14,0,239,1,14,0,80,17,1,0,118,17,1,0,1,13,0,0,3,13,0,0,5,13,0,0,12,13,0,0,14,13,0,0,16,13,0,0,18,13,0,0,58,13,0,0,61,13,0,0,68,13,0,0,70,13,0,0,72,13,0,0,74,13,0,0,78,13,0,0,87,13,0,0,87,13,0,0,95,13,0,0,99,13,0,0,102,13,0,0,117,13,0,0,121,13,0,0,127,13,0,0,64,8,0,0,91,8,0,0,94,8,0,0,94,8,0,0,192,10,1,0,230,10,1,0,235,10,1,0,246,10,1,0,3,9,0,0,3,9,0,0,59,9,0,0,59,9,0,0,62,9,0,0,64,9,0,0,73,9,0,0,76,9,0,0,78,9,0,0,79,9,0,0,130,9,0,0,131,9,0,0,190,9,0,0,192,9,0,0,199,9,0,0,200,9,0,0,203,9,0,0,204,9,0,0,215,9,0,0,215,9,0,0,3,10,0,0,3,10,0,0,62,10,0,0,64,10,0,0,131,10,0,0,131,10,0,0,190,10,0,0,192,10,0,0,201,10,0,0,201,10,0,0,203,10,0,0,204,10,0,0,2,11,0,0,3,11,0,0,62,11,0,0,62,11,0,0,64,11,0,0,64,11,0,0,71,11,0,0,72,11,0,0,75,11,0,0,76,11,0,0,87,11,0,0,87,11,0,0,190,11,0,0,191,11,0,0,193,11,0,0,194,11,0,0,198,11,0,0,200,11,0,0,202,11,0,0,204,11,0,0,215,11,0,0,215,11,0,0,1,12,0,0,3,12,0,0,65,12,0,0,68,12,0,0,130,12,0,0,131,12,0,0,190,12,0,0,190,12,0,0,192,12,0,0,196,12,0,0,199,12,0,0,200,12,0,0,202,12,0,0,203,12,0,0,213,12,0,0,214,12,0,0,2,13,0,0,3,13,0,0,62,13,0,0,64,13,0,0,70,13,0,0,72,13,0,0,74,13,0,0,76,13,0,0,87,13,0,0,87,13,0,0,130,13,0,0,131,13,0,0,207,13,0,0,209,13,0,0,216,13,0,0,223,13,0,0,242,13,0,0,243,13,0,0,62,15,0,0,63,15,0,0,127,15,0,0,127,15,0,0,43,16,0,0,44,16,0,0,49,16,0,0,49,16,0,0,56,16,0,0,56,16,0,0,59,16,0,0,60,16,0,0,86,16,0,0,87,16,0,0,98,16,0,0,100,16,0,0,103,16,0,0,109,16,0,0,131,16,0,0,132,16,0,0,135,16,0,0,140,16,0,0,143,16,0,0,143,16,0,0,154,16,0,0,156,16,0,0,182,23,0,0,182,23,0,0,190,23,0,0,197,23,0,0,199,23,0,0,200,23,0,0,35,25,0,0,38,25,0,0,41,25,0,0,43,25,0,0,48,25,0,0,49,25,0,0,51,25,0,0,56,25,0,0,25,26,0,0,26,26,0,0,85,26,0,0,85,26,0,0,87,26,0,0,87,26,0,0,97,26,0,0,97,26,0,0,99,26,0,0,100,26,0,0,109,26,0,0,114,26,0,0,4,27,0,0,4,27,0,0,53,27,0,0,53,27,0,0,59,27,0,0,59,27,0,0,61,27,0,0,65,27,0,0,67,27,0,0,68,27,0,0,130,27,0,0,130,27,0,0,161,27,0,0,161,27,0,0,166,27,0,0,167,27,0,0,170,27,0,0,170,27,0,0,231,27,0,0,231,27,0,0,234,27,0,0,236,27,0,0,238,27,0,0,238,27,0,0,242,27,0,0,243,27,0,0,36,28,0,0,43,28,0,0,52,28,0,0,53,28,0,0,225,28,0,0,225,28,0,0,242,28,0,0,243,28,0,0,46,48,0,0,47,48,0,0,35,168,0,0,36,168,0,0,39,168,0,0,39,168,0,0,128,168,0,0,129,168,0,0,180,168,0,0,195,168,0,0,82,169,0,0,83,169,0,0,131,169,0,0,131,169,0,0,180,169,0,0,181,169,0,0,186,169,0,0,187,169,0,0,189,169,0,0,192,169,0,0,47,170,0,0,48,170,0,0,51,170,0,0,52,170,0,0,77,170,0,0,77,170,0,0,123,170,0,0,123,170,0,0,125,170,0,0,125,170,0,0,235,170,0,0,235,170,0,0,238,170,0,0,239,170,0,0,245,170,0,0,245,170,0,0,227,171,0,0,228,171,0,0,230,171,0,0,231,171,0,0,233,171,0,0,234,171,0,0,236,171,0,0,236,171,0,0,0,16,1,0,0,16,1,0,2,16,1,0,2,16,1,0,130,16,1,0,130,16,1,0,176,16,1,0,178,16,1,0,183,16,1,0,184,16,1,0,44,17,1,0,44,17,1,0,130,17,1,0,130,17,1,0,179,17,1,0,181,17,1,0,191,17,1,0,192,17,1,0,44,18,1,0,46,18,1,0,50,18,1,0,51,18,1,0,53,18,1,0,53,18,1,0,224,18,1,0,226,18,1,0,2,19,1,0,3,19,1,0,62,19,1,0,63,19,1,0,65,19,1,0,68,19,1,0,71,19,1,0,72,19,1,0,75,19,1,0,77,19,1,0,87,19,1,0,87,19,1,0,98,19,1,0,99,19,1,0,176,20,1,0,178,20,1,0,185,20,1,0,185,20,1,0,187,20,1,0,190,20,1,0,193,20,1,0,193,20,1,0,175,21,1,0,177,21,1,0,184,21,1,0,187,21,1,0,190,21,1,0,190,21,1,0,48,22,1,0,50,22,1,0,59,22,1,0,60,22,1,0,62,22,1,0,62,22,1,0,172,22,1,0,172,22,1,0,174,22,1,0,175,22,1,0,182,22,1,0,182,22,1,0,32,23,1,0,33,23,1,0,38,23,1,0,38,23,1,0,81,111,1,0,126,111,1,0,101,209,1,0,102,209,1,0,109,209,1,0,114,209,1,0,136,4,0,0,137,4,0,0,190,26,0,0,190,26,0,0,221,32,0,0,224,32,0,0,226,32,0,0,228,32,0,0,112,166,0,0,114,166,0,0,224,170,0,0,246,170,0,0,192,171,0,0,237,171,0,0,240,171,0,0,249,171,0,0,0,232,1,0,196,232,1,0,199,232,1,0,214,232,1,0,160,9,1,0,183,9,1,0,188,9,1,0,207,9,1,0,210,9,1,0,255,9,1,0,128,9,1,0,159,9,1,0,0,111,1,0,68,111,1,0,80,111,1,0,126,111,1,0,143,111,1,0,159,111,1,0,0,3,0,0,111,3,0,0,131,4,0,0,135,4,0,0,145,5,0,0,189,5,0,0,191,5,0,0,191,5,0,0,193,5,0,0,194,5,0,0,196,5,0,0,197,5,0,0,199,5,0,0,199,5,0,0,16,6,0,0,26,6,0,0,75,6,0,0,95,6,0,0,112,6,0,0,112,6,0,0,214,6,0,0,220,6,0,0,223,6,0,0,228,6,0,0,231,6,0,0,232,6,0,0,234,6,0,0,237,6,0,0,17,7,0,0,17,7,0,0,48,7,0,0,74,7,0,0,166,7,0,0,176,7,0,0,235,7,0,0,243,7,0,0,22,8,0,0,25,8,0,0,27,8,0,0,35,8,0,0,37,8,0,0,39,8,0,0,41,8,0,0,45,8,0,0,89,8,0,0,91,8,0,0,227,8,0,0,2,9,0,0,58,9,0,0,58,9,0,0,60,9,0,0,60,9,0,0,65,9,0,0,72,9,0,0,77,9,0,0,77,9,0,0,81,9,0,0,87,9,0,0,98,9,0,0,99,9,0,0,129,9,0,0,129,9,0,0,188,9,0,0,188,9,0,0,193,9,0,0,196,9,0,0,205,9,0,0,205,9,0,0,226,9,0,0,227,9,0,0,1,10,0,0,2,10,0,0,60,10,0,0,60,10,0,0,65,10,0,0,66,10,0,0,71,10,0,0,72,10,0,0,75,10,0,0,77,10,0,0,81,10,0,0,81,10,0,0,112,10,0,0,113,10,0,0,117,10,0,0,117,10,0,0,129,10,0,0,130,10,0,0,188,10,0,0,188,10,0,0,193,10,0,0,197,10,0,0,199,10,0,0,200,10,0,0,205,10,0,0,205,10,0,0,226,10,0,0,227,10,0,0,1,11,0,0,1,11,0,0,60,11,0,0,60,11,0,0,63,11,0,0,63,11,0,0,65,11,0,0,68,11,0,0,77,11,0,0,77,11,0,0,86,11,0,0,86,11,0,0,98,11,0,0,99,11,0,0,130,11,0,0,130,11,0,0,192,11,0,0,192,11,0,0,205,11,0,0,205,11,0,0,0,12,0,0,0,12,0,0,62,12,0,0,64,12,0,0,70,12,0,0,72,12,0,0,74,12,0,0,77,12,0,0,85,12,0,0,86,12,0,0,98,12,0,0,99,12,0,0,129,12,0,0,129,12,0,0,188,12,0,0,188,12,0,0,191,12,0,0,191,12,0,0,198,12,0,0,198,12,0,0,204,12,0,0,205,12,0,0,226,12,0,0,227,12,0,0,1,13,0,0,1,13,0,0,65,13,0,0,68,13,0,0,77,13,0,0,77,13,0,0,98,13,0,0,99,13,0,0,202,13,0,0,202,13,0,0,210,13,0,0,212,13,0,0,214,13,0,0,214,13,0,0,49,14,0,0,49,14,0,0,52,14,0,0,58,14,0,0,71,14,0,0,78,14,0,0,177,14,0,0,177,14,0,0,180,14,0,0,185,14,0,0,187,14,0,0,188,14,0,0,200,14,0,0,205,14,0,0,24,15,0,0,25,15,0,0,53,15,0,0,53,15,0,0,55,15,0,0,55,15,0,0,57,15,0,0,57,15,0,0,113,15,0,0,126,15,0,0,128,15,0,0,132,15,0,0,134,15,0,0,135,15,0,0,141,15,0,0,151,15,0,0,153,15,0,0,188,15,0,0,198,15,0,0,198,15,0,0,45,16,0,0,48,16,0,0,50,16,0,0,55,16,0,0,57,16,0,0,58,16,0,0,61,16,0,0,62,16,0,0,88,16,0,0,89,16,0,0,94,16,0,0,96,16,0,0,113,16,0,0,116,16,0,0,130,16,0,0,130,16,0,0,133,16,0,0,134,16,0,0,141,16,0,0,141,16,0,0,157,16,0,0,157,16,0,0,93,19,0,0,95,19,0,0,18,23,0,0,20,23,0,0,50,23,0,0,52,23,0,0,82,23,0,0,83,23,0,0,114,23,0,0,115,23,0,0,180,23,0,0,181,23,0,0,183,23,0,0,189,23,0,0,198,23,0,0,198,23,0,0,201,23,0,0,211,23,0,0,221,23,0,0,221,23,0,0,11,24,0,0,13,24,0,0,169,24,0,0,169,24], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+82104);
/* memory initializer */ allocate([32,25,0,0,34,25,0,0,39,25,0,0,40,25,0,0,50,25,0,0,50,25,0,0,57,25,0,0,59,25,0,0,23,26,0,0,24,26,0,0,27,26,0,0,27,26,0,0,86,26,0,0,86,26,0,0,88,26,0,0,94,26,0,0,96,26,0,0,96,26,0,0,98,26,0,0,98,26,0,0,101,26,0,0,108,26,0,0,115,26,0,0,124,26,0,0,127,26,0,0,127,26,0,0,176,26,0,0,189,26,0,0,0,27,0,0,3,27,0,0,52,27,0,0,52,27,0,0,54,27,0,0,58,27,0,0,60,27,0,0,60,27,0,0,66,27,0,0,66,27,0,0,107,27,0,0,115,27,0,0,128,27,0,0,129,27,0,0,162,27,0,0,165,27,0,0,168,27,0,0,169,27,0,0,171,27,0,0,173,27,0,0,230,27,0,0,230,27,0,0,232,27,0,0,233,27,0,0,237,27,0,0,237,27,0,0,239,27,0,0,241,27,0,0,44,28,0,0,51,28,0,0,54,28,0,0,55,28,0,0,208,28,0,0,210,28,0,0,212,28,0,0,224,28,0,0,226,28,0,0,232,28,0,0,237,28,0,0,237,28,0,0,244,28,0,0,244,28,0,0,248,28,0,0,249,28,0,0,192,29,0,0,245,29,0,0,252,29,0,0,255,29,0,0,208,32,0,0,220,32,0,0,225,32,0,0,225,32,0,0,229,32,0,0,240,32,0,0,239,44,0,0,241,44,0,0,127,45,0,0,127,45,0,0,224,45,0,0,255,45,0,0,42,48,0,0,45,48,0,0,153,48,0,0,154,48,0,0,111,166,0,0,111,166,0,0,116,166,0,0,125,166,0,0,158,166,0,0,159,166,0,0,240,166,0,0,241,166,0,0,2,168,0,0,2,168,0,0,6,168,0,0,6,168,0,0,11,168,0,0,11,168,0,0,37,168,0,0,38,168,0,0,196,168,0,0,196,168,0,0,224,168,0,0,241,168,0,0,38,169,0,0,45,169,0,0,71,169,0,0,81,169,0,0,128,169,0,0,130,169,0,0,179,169,0,0,179,169,0,0,182,169,0,0,185,169,0,0,188,169,0,0,188,169,0,0,229,169,0,0,229,169,0,0,41,170,0,0,46,170,0,0,49,170,0,0,50,170,0,0,53,170,0,0,54,170,0,0,67,170,0,0,67,170,0,0,76,170,0,0,76,170,0,0,124,170,0,0,124,170,0,0,176,170,0,0,176,170,0,0,178,170,0,0,180,170,0,0,183,170,0,0,184,170,0,0,190,170,0,0,191,170,0,0,193,170,0,0,193,170,0,0,236,170,0,0,237,170,0,0,246,170,0,0,246,170,0,0,229,171,0,0,229,171,0,0,232,171,0,0,232,171,0,0,237,171,0,0,237,171,0,0,30,251,0,0,30,251,0,0,0,254,0,0,15,254,0,0,32,254,0,0,47,254,0,0,253,1,1,0,253,1,1,0,224,2,1,0,224,2,1,0,118,3,1,0,122,3,1,0,1,10,1,0,3,10,1,0,5,10,1,0,6,10,1,0,12,10,1,0,15,10,1,0,56,10,1,0,58,10,1,0,63,10,1,0,63,10,1,0,229,10,1,0,230,10,1,0,1,16,1,0,1,16,1,0,56,16,1,0,70,16,1,0,127,16,1,0,129,16,1,0,179,16,1,0,182,16,1,0,185,16,1,0,186,16,1,0,0,17,1,0,2,17,1,0,39,17,1,0,43,17,1,0,45,17,1,0,52,17,1,0,115,17,1,0,115,17,1,0,128,17,1,0,129,17,1,0,182,17,1,0,190,17,1,0,202,17,1,0,204,17,1,0,47,18,1,0,49,18,1,0,52,18,1,0,52,18,1,0,54,18,1,0,55,18,1,0,223,18,1,0,223,18,1,0,227,18,1,0,234,18,1,0,0,19,1,0,1,19,1,0,60,19,1,0,60,19,1,0,64,19,1,0,64,19,1,0,102,19,1,0,108,19,1,0,112,19,1,0,116,19,1,0,179,20,1,0,184,20,1,0,186,20,1,0,186,20,1,0,191,20,1,0,192,20,1,0,194,20,1,0,195,20,1,0,178,21,1,0,181,21,1,0,188,21,1,0,189,21,1,0,191,21,1,0,192,21,1,0,220,21,1,0,221,21,1,0,51,22,1,0,58,22,1,0,61,22,1,0,61,22,1,0,63,22,1,0,64,22,1,0,171,22,1,0,171,22,1,0,173,22,1,0,173,22,1,0,176,22,1,0,181,22,1,0,183,22,1,0,183,22,1,0,29,23,1,0,31,23,1,0,34,23,1,0,37,23,1,0,39,23,1,0,43,23,1,0,240,106,1,0,244,106,1,0,48,107,1,0,54,107,1,0,143,111,1,0,146,111,1,0,157,188,1,0,158,188,1,0,103,209,1,0,105,209,1,0,123,209,1,0,130,209,1,0,133,209,1,0,139,209,1,0,170,209,1,0,173,209,1,0,66,210,1,0,68,210,1,0,0,218,1,0,54,218,1,0,59,218,1,0,108,218,1,0,117,218,1,0,117,218,1,0,132,218,1,0,132,218,1,0,155,218,1,0,159,218,1,0,161,218,1,0,175,218,1,0,208,232,1,0,214,232,1,0,0,1,14,0,239,1,14,0,0,22,1,0,68,22,1,0,80,22,1,0,89,22,1,0,0,24,0,0,1,24,0,0,4,24,0,0,4,24,0,0,6,24,0,0,14,24,0,0,16,24,0,0,25,24,0,0,32,24,0,0,119,24,0,0,128,24,0,0,170,24,0,0,64,106,1,0,94,106,1,0,96,106,1,0,105,106,1,0,110,106,1,0,111,106,1,0,128,18,1,0,134,18,1,0,136,18,1,0,136,18,1,0,138,18,1,0,141,18,1,0,143,18,1,0,157,18,1,0,159,18,1,0,169,18,1,0,0,16,0,0,159,16,0,0,224,169,0,0,254,169,0,0,96,170,0,0,127,170,0,0,48,0,0,0,57,0,0,0,96,6,0,0,105,6,0,0,240,6,0,0,249,6,0,0,192,7,0,0,201,7,0,0,102,9,0,0,111,9,0,0,230,9,0,0,239,9,0,0,102,10,0,0,111,10,0,0,230,10,0,0,239,10,0,0,102,11,0,0,111,11,0,0,230,11,0,0,239,11,0,0,102,12,0,0,111,12,0,0,230,12,0,0,239,12,0,0,102,13,0,0,111,13,0,0,230,13,0,0,239,13,0,0,80,14,0,0,89,14,0,0,208,14,0,0,217,14,0,0,32,15,0,0,41,15,0,0,64,16,0,0,73,16,0,0,144,16,0,0,153,16,0,0,238,22,0,0,240,22,0,0,224,23,0,0,233,23,0,0,16,24,0,0,25,24,0,0,70,25,0,0,79,25,0,0,208,25,0,0,217,25,0,0,128,26,0,0,137,26,0,0,144,26,0,0,153,26,0,0,80,27,0,0,89,27,0,0,176,27,0,0,185,27,0,0,64,28,0,0,73,28,0,0,80,28,0,0,89,28,0,0,96,33,0,0,130,33,0,0,133,33,0,0,136,33,0,0,7,48,0,0,7,48,0,0,33,48,0,0,41,48,0,0,56,48,0,0,58,48,0,0,32,166,0,0,41,166,0,0,230,166,0,0,239,166,0,0,208,168,0,0,217,168,0,0,0,169,0,0,9,169,0,0,208,169,0,0,217,169,0,0,240,169,0,0,249,169,0,0,80,170,0,0,89,170,0,0,240,171,0,0,249,171,0,0,16,255,0,0,25,255,0,0,64,1,1,0,116,1,1,0,65,3,1,0,65,3,1,0,74,3,1,0,74,3,1,0,209,3,1,0,213,3,1,0,160,4,1,0,169,4,1,0,102,16,1,0,111,16,1,0,240,16,1,0,249,16,1,0,54,17,1,0,63,17,1,0,208,17,1,0,217,17,1,0,240,18,1,0,249,18,1,0,208,20,1,0,217,20,1,0,80,22,1,0,89,22,1,0,192,22,1,0,201,22,1,0,48,23,1,0,57,23,1,0,224,24,1,0,233,24,1,0,0,36,1,0,110,36,1,0,96,106,1,0,105,106,1,0,80,107,1,0,89,107,1,0,206,215,1,0,255,215,1,0,128,8,1,0,158,8,1,0,167,8,1,0,175,8,1,0,128,25,0,0,171,25,0,0,176,25,0,0,201,25,0,0,208,25,0,0,218,25,0,0,222,25,0,0,223,25,0,0,192,7,0,0,250,7,0,0,238,22,0,0,240,22,0,0,96,33,0,0,130,33,0,0,133,33,0,0,136,33,0,0,7,48,0,0,7,48,0,0,33,48,0,0,41,48,0,0,56,48,0,0,58,48,0,0,230,166,0,0,239,166,0,0,64,1,1,0,116,1,1,0,65,3,1,0,65,3,1,0,74,3,1,0,74,3,1,0,209,3,1,0,213,3,1,0,0,36,1,0,110,36,1,0,178,0,0,0,179,0,0,0,185,0,0,0,185,0,0,0,188,0,0,0,190,0,0,0,244,9,0,0,249,9,0,0,114,11,0,0,119,11,0,0,240,11,0,0,242,11,0,0,120,12,0,0,126,12,0,0,112,13,0,0,117,13,0,0,42,15,0,0,51,15,0,0,105,19,0,0,124,19,0,0,240,23,0,0,249,23,0,0,218,25,0,0,218,25,0,0,112,32,0,0,112,32,0,0,116,32,0,0,121,32,0,0,128,32,0,0,137,32,0,0,80,33,0,0,95,33,0,0,137,33,0,0,137,33,0,0,96,36,0,0,155,36,0,0,234,36,0,0,255,36,0,0,118,39,0,0,147,39,0,0,253,44,0,0,253,44,0,0,146,49,0,0,149,49,0,0,32,50,0,0,41,50,0,0,72,50,0,0,79,50,0,0,81,50,0,0,95,50,0,0,128,50,0,0,137,50,0,0,177,50,0,0,191,50,0,0,48,168,0,0,53,168,0,0,7,1,1,0,51,1,1,0,117,1,1,0,120,1,1,0,138,1,1,0,139,1,1,0,225,2,1,0,251,2,1,0,32,3,1,0,35,3,1,0,88,8,1,0,95,8,1,0,121,8,1,0,127,8,1,0,167,8,1,0,175,8,1,0,251,8,1,0,255,8,1,0,22,9,1,0,27,9,1,0,188,9,1,0,189,9,1,0,192,9,1,0,207,9,1,0,210,9,1,0,255,9,1,0,64,10,1,0,71,10,1,0,125,10,1,0,126,10,1,0,157,10,1,0,159,10,1,0,235,10,1,0,239,10,1,0,88,11,1,0,95,11,1,0,120,11,1,0,127,11,1,0,169,11,1,0,175,11,1,0,250,12,1,0,255,12,1,0,96,14,1,0,126,14,1,0,82,16,1,0,101,16,1,0,225,17,1,0,244,17,1,0,58,23,1,0,59,23,1,0,234,24,1,0,242,24,1,0,91,107,1,0,97,107,1,0,96,211,1,0,113,211,1,0,199,232,1,0,207,232,1,0,0,241,1,0,12,241,1,0,208,253,0,0,239,253,0,0,254,255,0,0,255,255,0,0,254,255,1,0,255,255,1,0,254,255,2,0,255,255,2,0,254,255,3,0,255,255,3,0,254,255,4,0,255,255,4,0,254,255,5,0,255,255,5,0,254,255,6,0,255,255,6,0,254,255,7,0,255,255,7,0,254,255,8,0,255,255,8,0,254,255,9,0,255,255,9,0,254,255,10,0,255,255,10,0,254,255,11,0,255,255,11,0,254,255,12,0,255,255,12,0,254,255,13,0,255,255,13,0,254,255,14,0,255,255,14,0,254,255,15,0,255,255,15,0,254,255,16,0,255,255,16,0,128,22,0,0,156,22,0,0,80,28,0,0,127,28,0,0,128,12,1,0,178,12,1,0,192,12,1,0,242,12,1,0,250,12,1,0,255,12,1,0,0,3,1,0,35,3,1,0,128,10,1,0,159,10,1,0,80,3,1,0,122,3,1,0,160,3,1,0,195,3,1,0,200,3,1,0,213,3,1,0,96,10,1,0,127,10,1,0,0,12,1,0,72,12,1,0,1,11,0,0,3,11,0,0,5,11,0,0,12,11,0,0,15,11,0,0,16,11,0,0,19,11,0,0,40,11,0,0,42,11,0,0,48,11,0,0,50,11,0,0,51,11,0,0,53,11,0,0,57,11,0,0,60,11,0,0,68,11,0,0,71,11,0,0,72,11,0,0,75,11,0,0,77,11,0,0,86,11,0,0,87,11,0,0,92,11,0,0,93,11,0,0,95,11,0,0,99,11,0,0,102,11,0,0,119,11,0,0,128,4,1,0,157,4,1,0,160,4,1,0,169,4,1,0,33,0,0,0,35,0,0,0,37,0,0,0,42,0,0,0,44,0,0,0,47,0,0,0,58,0,0,0,59,0,0,0,63,0,0,0,64,0,0,0,91,0,0,0,93,0,0,0,95,0,0,0,95,0,0,0,123,0,0,0,123,0,0,0,125,0,0,0,125,0,0,0,161,0,0,0,161,0,0,0,167,0,0,0,167,0,0,0,171,0,0,0,171,0,0,0,182,0,0,0,183,0,0,0,187,0,0,0,187,0,0,0,191,0,0,0,191,0,0,0,126,3,0,0,126,3,0,0,135,3,0,0,135,3,0,0,90,5,0,0,95,5,0,0,137,5,0,0,138,5,0,0,190,5,0,0,190,5,0,0,192,5,0,0,192,5,0,0,195,5,0,0,195,5,0,0,198,5,0,0,198,5,0,0,243,5,0,0,244,5,0,0,9,6,0,0,10,6,0,0,12,6,0,0,13,6,0,0,27,6,0,0,27,6,0,0,30,6,0,0,31,6,0,0,106,6,0,0,109,6,0,0,212,6,0,0,212,6,0,0,0,7,0,0,13,7,0,0,247,7,0,0,249,7,0,0,48,8,0,0,62,8,0,0,94,8,0,0,94,8,0,0,100,9,0,0,101,9,0,0,112,9,0,0,112,9,0,0,240,10,0,0,240,10,0,0,244,13,0,0,244,13,0,0,79,14,0,0,79,14,0,0,90,14,0,0,91,14,0,0,4,15,0,0,18,15,0,0,20,15,0,0,20,15,0,0,58,15,0,0,61,15,0,0,133,15,0,0,133,15,0,0,208,15,0,0,212,15,0,0,217,15,0,0,218,15,0,0,74,16,0,0,79,16,0,0,251,16,0,0,251,16,0,0,96,19,0,0,104,19,0,0,0,20,0,0,0,20,0,0,109,22,0,0,110,22,0,0,155,22,0,0,156,22,0,0,235,22,0,0,237,22,0,0,53,23,0,0,54,23,0,0,212,23,0,0,214,23,0,0,216,23,0,0,218,23,0,0,0,24,0,0,10,24,0,0,68,25,0,0,69,25,0,0,30,26,0,0,31,26,0,0,160,26,0,0,166,26,0,0,168,26,0,0,173,26,0,0,90,27,0,0,96,27,0,0,252,27,0,0,255,27,0,0,59,28,0,0,63,28,0,0,126,28,0,0,127,28,0,0,192,28,0,0,199,28,0,0,211,28,0,0,211,28,0,0,16,32,0,0,39,32,0,0,48,32,0,0,67,32,0,0,69,32,0,0,81,32,0,0,83,32,0,0,94,32,0,0,125,32,0,0,126,32,0,0,141,32,0,0,142,32,0,0,8,35,0,0,11,35,0,0,41,35,0,0,42,35,0,0,104,39,0,0,117,39,0,0,197,39,0,0,198,39,0,0,230,39,0,0,239,39,0,0,131,41,0,0,152,41,0,0,216,41,0,0,219,41,0,0,252,41,0,0,253,41,0,0,249,44,0,0,252,44,0,0,254,44,0,0,255,44,0,0,112,45,0,0,112,45,0,0,0,46,0,0,46,46,0,0,48,46,0,0,66,46,0,0,1,48,0,0,3,48,0,0,8,48,0,0,17,48,0,0,20,48,0,0,31,48,0,0,48,48,0,0,48,48,0,0,61,48,0,0,61,48,0,0,160,48,0,0,160,48,0,0,251,48,0,0,251,48,0,0,254,164,0,0,255,164,0,0,13,166,0,0,15,166,0,0,115,166,0,0,115,166,0,0,126,166,0,0,126,166,0,0,242,166,0,0,247,166,0,0,116,168,0,0,119,168,0,0,206,168,0,0,207,168,0,0,248,168,0,0,250,168,0,0,252,168,0,0,252,168,0,0,46,169,0,0,47,169,0,0,95,169,0,0,95,169,0,0,193,169,0,0,205,169,0,0,222,169,0,0,223,169,0,0,92,170,0,0,95,170,0,0,222,170,0,0,223,170,0,0,240,170,0,0,241,170,0,0,235,171,0,0,235,171,0,0,62,253,0,0,63,253,0,0,16,254,0,0,25,254,0,0,48,254,0,0,82,254,0,0,84,254,0,0,97,254,0,0,99,254,0,0,99,254,0,0,104,254,0,0,104,254,0,0,106,254,0,0,107,254,0,0,1,255,0,0,3,255,0,0,5,255,0,0,10,255,0,0,12,255,0,0,15,255,0,0,26,255,0,0,27,255,0,0,31,255,0,0,32,255,0,0,59,255,0,0,61,255,0,0,63,255,0,0,63,255,0,0,91,255,0,0,91,255,0,0,93,255,0,0,93,255,0,0,95,255,0,0,101,255,0,0,0,1,1,0,2,1,1,0,159,3,1,0,159,3,1,0,208,3,1,0,208,3,1,0,111,5,1,0,111,5,1,0,87,8,1,0,87,8,1,0,31,9,1,0,31,9,1,0,63,9,1,0,63,9,1,0,80,10,1,0,88,10,1,0,127,10,1,0,127,10,1,0,240,10,1,0,246,10,1,0,57,11,1,0,63,11,1,0,153,11,1,0,156,11,1,0,71,16,1,0,77,16,1,0,187,16,1,0,188,16,1,0,190,16,1,0,193,16,1,0,64,17,1,0,67,17,1,0,116,17,1,0,117,17,1,0,197,17,1,0,201,17,1,0,205,17,1,0,205,17,1,0,219,17,1,0,219,17,1,0,221,17,1,0,223,17,1,0,56,18,1,0,61,18,1,0,169,18,1,0,169,18,1,0,198,20,1,0,198,20,1,0,193,21,1,0,215,21,1,0,65,22,1,0,67,22,1,0,60,23,1,0,62,23,1,0,112,36,1,0,116,36,1,0,110,106,1,0,111,106,1,0,245,106,1,0,245,106,1,0,55,107,1,0,59,107,1,0,68,107,1,0,68,107,1,0,159,188,1,0,159,188,1,0,135,218,1,0,139,218,1,0,0,107,1,0,69,107,1,0,80,107,1,0,89,107,1,0,91,107,1,0,97,107,1,0,99,107,1,0,119,107,1,0,125,107,1,0,143,107,1,0,96,8,1,0,127,8,1,0,192,26,1,0,248,26,1,0,95,0,0,0,95,0,0,0,63,32,0,0,64,32,0,0,84,32,0,0,84,32,0,0,51,254,0,0,52,254,0,0,77,254,0,0,79,254,0,0,63,255,0,0,63,255,0,0,45,0,0,0,45,0,0,0,138,5,0,0,138,5,0,0,190,5,0,0,190,5,0,0,0,20,0,0,0,20,0,0,6,24,0,0,6,24,0,0,16,32,0,0,21,32,0,0,23,46,0,0,23,46,0,0,26,46,0,0,26,46,0,0,58,46,0,0,59,46,0,0,64,46,0,0,64,46,0,0,28,48,0,0,28,48,0,0,48,48,0,0,48,48,0,0,160,48,0,0,160,48,0,0,49,254,0,0,50,254,0,0,88,254,0,0,88,254,0,0,99,254,0,0,99,254,0,0,13,255,0,0,13,255,0,0,41,0,0,0,41,0,0,0,93,0,0,0,93,0,0,0,125,0,0,0,125,0,0,0,59,15,0,0,59,15,0,0,61,15,0,0,61,15,0,0,156,22,0,0,156,22,0,0,70,32,0,0,70,32,0,0,126,32,0,0,126,32,0,0,142,32,0,0,142,32,0,0,9,35,0,0,9,35,0,0,11,35,0,0,11,35,0,0,42,35,0,0,42,35,0,0,105,39,0,0,105,39,0,0,107,39,0,0,107,39,0,0,109,39,0,0,109,39,0,0,111,39,0,0,111,39,0,0,113,39,0,0,113,39,0,0,115,39,0,0,115,39,0,0,117,39,0,0,117,39,0,0,198,39,0,0,198,39,0,0,231,39,0,0,231,39,0,0,233,39,0,0,233,39,0,0,235,39,0,0,235,39,0,0,237,39,0,0,237,39,0,0,239,39,0,0,239,39,0,0,132,41,0,0,132,41,0,0,134,41,0,0,134,41,0,0,136,41,0,0,136,41,0,0,138,41,0,0,138,41,0,0,140,41,0,0,140,41,0,0,142,41,0,0,142,41,0,0,144,41,0,0,144,41,0,0,146,41,0,0,146,41,0,0,148,41,0,0,148,41,0,0,150,41,0,0,150,41,0,0,152,41,0,0,152,41,0,0,217,41,0,0,217,41,0,0,219,41,0,0,219,41,0,0,253,41,0,0,253,41,0,0,35,46,0,0,35,46,0,0,37,46,0,0,37,46,0,0,39,46,0,0,39,46,0,0,41,46,0,0,41,46,0,0,9,48,0,0,9,48,0,0,11,48,0,0,11,48,0,0,13,48,0,0,13,48,0,0,15,48,0,0,15,48,0,0,17,48,0,0,17,48,0,0,21,48,0,0,21,48,0,0,23,48,0,0,23,48,0,0,25,48,0,0,25,48,0,0,27,48,0,0,27,48,0,0,30,48,0,0,31,48,0,0,62,253,0,0,62,253,0,0,24,254,0,0,24,254,0,0,54,254,0,0,54,254,0,0,56,254,0,0,56,254,0,0,58,254,0,0,58,254,0,0,60,254,0,0,60,254,0,0,62,254,0,0,62,254,0,0,64,254,0,0,64,254,0,0,66,254,0,0,66,254,0,0,68,254,0,0,68,254,0,0,72,254,0,0,72,254,0,0,90,254,0,0,90,254,0,0,92,254,0,0,92,254,0,0,94,254,0,0,94,254,0,0,9,255,0,0,9,255,0,0,61,255,0,0,61,255,0,0,93,255,0,0,93,255,0,0,96,255,0,0,96,255,0,0,99,255,0,0,99,255,0,0,187,0,0,0,187,0,0,0,25,32,0,0,25,32,0,0,29,32,0,0,29,32,0,0,58,32,0,0,58,32,0,0,3,46,0,0,3,46,0,0,5,46,0,0,5,46,0,0,10,46,0,0,10,46,0,0,13,46,0,0,13,46,0,0,29,46,0,0,29,46,0,0,33,46,0,0,33,46,0,0,64,168,0,0,119,168,0,0,0,9,1,0,27,9,1,0,31,9,1,0,31,9,1,0,171,0,0,0,171,0,0,0,24,32,0,0,24,32,0,0,27,32,0,0,28,32,0,0,31,32,0,0,31,32,0,0,57,32,0,0,57,32,0,0,2,46,0,0,2,46,0,0,4,46,0,0,4,46,0,0,9,46,0,0,9,46,0,0,12,46,0,0,12,46,0,0,28,46,0,0,28,46,0,0,32,46,0,0,32,46,0,0,33,0,0,0,35,0,0,0,37,0,0,0,39,0,0,0,42,0,0,0,42,0,0,0,44,0,0,0,44,0,0,0,46,0,0,0,47,0,0,0,58,0,0,0,59,0,0,0,63,0,0,0,64,0,0,0,92,0,0,0,92,0,0,0,161,0,0,0,161,0,0,0,167,0,0,0,167,0,0,0,182,0,0,0,183,0,0,0,191,0,0,0,191,0,0,0,126,3,0,0,126,3,0,0,135,3,0,0,135,3,0,0,90,5,0,0,95,5,0,0,137,5,0,0,137,5,0,0,192,5,0,0,192,5,0,0,195,5,0,0,195,5,0,0,198,5,0,0,198,5,0,0,243,5,0,0,244,5,0,0,9,6,0,0,10,6,0,0,12,6,0,0,13,6,0,0,27,6,0,0,27,6,0,0,30,6,0,0,31,6,0,0,106,6,0,0,109,6,0,0,212,6,0,0,212,6,0,0,0,7,0,0,13,7,0,0,247,7,0,0,249,7,0,0,48,8,0,0,62,8,0,0,94,8,0,0,94,8,0,0,100,9,0,0,101,9,0,0,112,9,0,0,112,9,0,0,240,10,0,0,240,10,0,0,244,13,0,0,244,13,0,0,79,14,0,0,79,14,0,0,90,14,0,0,91,14,0,0,4,15,0,0,18,15,0,0,20,15,0,0,20,15,0,0,133,15,0,0,133,15,0,0,208,15,0,0,212,15,0,0,217,15,0,0,218,15,0,0,74,16,0,0,79,16,0,0,251,16,0,0,251,16,0,0,96,19,0,0,104,19,0,0,109,22,0,0,110,22,0,0,235,22,0,0,237,22,0,0,53,23,0,0,54,23,0,0,212,23,0,0,214,23,0,0,216,23,0,0,218,23,0,0,0,24,0,0,5,24,0,0,7,24,0,0,10,24,0,0,68,25,0,0,69,25,0,0,30,26,0,0,31,26,0,0,160,26,0,0,166,26,0,0,168,26,0,0,173,26,0,0,90,27,0,0,96,27,0,0,252,27,0,0,255,27,0,0,59,28,0,0,63,28,0,0,126,28,0,0,127,28,0,0,192,28,0,0,199,28,0,0,211,28,0,0,211,28,0,0,22,32,0,0,23,32,0,0,32,32,0,0,39,32,0,0,48,32,0,0,56,32,0,0,59,32,0,0,62,32,0,0,65,32,0,0,67,32,0,0,71,32,0,0,81,32,0,0,83,32,0,0,83,32,0,0,85,32,0,0,94,32,0,0,249,44,0,0,252,44,0,0,254,44,0,0,255,44,0,0,112,45,0,0,112,45,0,0,0,46,0,0,1,46,0,0,6,46,0,0,8,46,0,0,11,46,0,0,11,46,0,0,14,46,0,0,22,46,0,0,24,46,0,0,25,46,0,0,27,46,0,0,27,46,0,0,30,46,0,0,31,46,0,0,42,46,0,0,46,46,0,0,48,46,0,0,57,46,0,0,60,46,0,0,63,46,0,0,65,46,0,0,65,46,0,0,1,48,0,0,3,48,0,0,61,48,0,0,61,48,0,0,251,48,0,0,251,48,0,0,254,164,0,0,255,164,0,0,13,166,0,0,15,166,0,0,115,166,0,0,115,166,0,0,126,166,0,0,126,166,0,0,242,166,0,0,247,166,0,0,116,168,0,0,119,168,0,0,206,168,0,0,207,168,0,0,248,168,0,0,250,168,0,0,252,168,0,0,252,168,0,0,46,169,0,0,47,169,0,0,95,169,0,0,95,169,0,0,193,169,0,0,205,169,0,0,222,169,0,0,223,169,0,0,92,170,0,0,95,170,0,0,222,170,0,0,223,170,0,0,240,170,0,0,241,170,0,0,235,171,0,0,235,171,0,0,16,254,0,0,22,254,0,0,25,254,0,0,25,254,0,0,48,254,0,0,48,254,0,0,69,254,0,0,70,254,0,0,73,254,0,0,76,254,0,0,80,254,0,0,82,254,0,0,84,254,0,0,87,254,0,0,95,254,0,0,97,254,0,0,104,254,0,0,104,254,0,0,106,254,0,0,107,254,0,0,1,255,0,0,3,255,0,0,5,255,0,0,7,255,0,0,10,255,0,0,10,255,0,0,12,255,0,0,12,255,0,0,14,255,0,0,15,255,0,0,26,255,0,0,27,255,0,0,31,255,0,0,32,255,0,0,60,255,0,0,60,255,0,0,97,255,0,0,97,255,0,0,100,255,0,0,101,255,0,0,0,1,1,0,2,1,1,0,159,3,1,0,159,3,1,0,208,3,1,0,208,3,1,0,111,5,1,0,111,5,1,0,87,8,1,0,87,8,1,0,31,9,1,0,31,9,1,0,63,9,1,0,63,9,1,0,80,10,1,0,88,10,1,0,127,10,1,0,127,10,1,0,240,10,1,0,246,10,1,0,57,11,1,0,63,11,1,0,153,11,1,0,156,11,1,0,71,16,1,0,77,16,1,0,187,16,1,0,188,16,1,0,190,16,1,0,193,16,1,0,64,17,1,0,67,17,1,0,116,17,1,0,117,17,1,0,197,17,1,0,201,17,1,0,205,17,1,0,205,17,1,0,219,17,1,0,219,17,1,0,221,17,1,0,223,17,1,0,56,18,1,0,61,18,1,0,169,18,1,0,169,18,1,0,198,20,1,0,198,20,1,0,193,21,1,0,215,21,1,0,65,22,1,0,67,22,1,0,60,23,1,0,62,23,1,0,112,36,1,0,116,36,1,0,110,106,1,0,111,106,1,0,245,106,1,0,245,106,1,0,55,107,1,0,59,107,1,0,68,107,1,0,68,107,1,0,159,188,1,0,159,188,1,0,135,218,1,0,139,218,1,0,40,0,0,0,40,0,0,0,91,0,0,0,91,0,0,0,123,0,0,0,123,0,0,0,58,15,0,0,58,15,0,0,60,15,0,0,60,15,0,0,155,22,0,0,155,22,0,0,26,32,0,0,26,32,0,0,30,32,0,0,30,32,0,0,69,32,0,0,69,32,0,0,125,32,0,0,125,32,0,0,141,32,0,0,141,32,0,0,8,35,0,0,8,35,0,0,10,35,0,0,10,35,0,0,41,35,0,0,41,35,0,0,104,39,0,0,104,39,0,0,106,39,0,0,106,39,0,0,108,39,0,0,108,39,0,0,110,39,0,0,110,39,0,0,112,39,0,0,112,39,0,0,114,39,0,0,114,39,0,0,116,39,0,0,116,39,0,0,197,39,0,0,197,39,0,0,230,39,0,0,230,39,0,0,232,39,0,0,232,39,0,0,234,39,0,0,234,39,0,0,236,39,0,0,236,39,0,0,238,39,0,0,238,39,0,0,131,41,0,0,131,41,0,0,133,41,0,0,133,41,0,0,135,41,0,0,135,41,0,0,137,41,0,0,137,41,0,0,139,41,0,0,139,41,0,0,141,41,0,0,141,41,0,0,143,41,0,0,143,41,0,0,145,41,0,0,145,41,0,0,147,41,0,0,147,41,0,0,149,41,0,0,149,41,0,0,151,41,0,0,151,41,0,0,216,41,0,0,216,41,0,0,218,41,0,0,218,41,0,0,252,41,0,0,252,41,0,0,34,46,0,0,34,46,0,0,36,46,0,0,36,46,0,0,38,46,0,0,38,46,0,0,40,46,0,0,40,46,0,0,66,46,0,0,66,46,0,0,8,48,0,0,8,48,0,0,10,48,0,0,10,48,0,0,12,48,0,0,12,48,0,0,14,48,0,0,14,48,0,0,16,48,0,0,16,48,0,0,20,48,0,0,20,48,0,0,22,48,0,0,22,48,0,0,24,48,0,0,24,48,0,0,26,48,0,0,26,48,0,0,29,48,0,0,29,48,0,0,63,253,0,0,63,253,0,0,23,254,0,0,23,254,0,0,53,254,0,0,53,254,0,0,55,254,0,0,55,254,0,0,57,254,0,0,57,254,0,0,59,254,0,0,59,254,0,0,61,254,0,0,61,254,0,0,63,254,0,0,63,254,0,0,65,254,0,0,65,254,0,0,67,254,0,0,67,254,0,0,71,254,0,0,71,254,0,0,89,254,0,0,89,254,0,0,91,254,0,0,91,254,0,0,93,254,0,0,93,254,0,0,8,255,0,0,8,255,0,0,59,255,0,0,59,255,0,0,91,255,0,0,91,255,0,0,95,255,0,0,95,255,0,0,98,255,0,0,98,255,0,0,128,11,1,0,145,11,1,0,153,11,1,0,156,11,1,0,169,11,1,0,175,11,1,0,48,169,0,0,83,169,0,0,95,169,0,0,95,169,0,0,160,22,0,0,234,22,0,0,238,22,0,0,248,22,0,0,36,0,0,0,36,0,0,0,43,0,0,0,43,0,0,0,60,0,0,0,62,0,0,0,94,0,0,0,94,0,0,0,96,0,0,0,96,0,0,0,124,0,0,0,124,0,0,0,126,0,0,0,126,0,0,0,162,0,0,0,166,0,0,0,168,0,0,0,169,0,0,0,172,0,0,0,172,0,0,0,174,0,0,0,177,0,0,0,180,0,0,0,180,0,0,0,184,0,0,0,184,0,0,0,215,0,0,0,215,0,0,0,247,0,0,0,247,0,0,0,194,2,0,0,197,2,0,0,210,2,0,0,223,2,0,0,229,2,0,0,235,2,0,0,237,2,0,0,237,2,0,0,239,2,0,0,255,2,0,0,117,3,0,0,117,3,0,0,132,3,0,0,133,3,0,0,246,3,0,0,246,3,0,0,130,4,0,0,130,4,0,0,141,5,0,0,143,5,0,0,6,6,0,0,8,6,0,0,11,6,0,0,11,6,0,0,14,6,0,0,15,6,0,0,222,6,0,0,222,6,0,0,233,6,0,0,233,6,0,0,253,6,0,0,254,6,0,0,246,7,0,0,246,7,0,0,242,9,0,0,243,9,0,0,250,9,0,0,251,9,0,0,241,10,0,0,241,10,0,0,112,11,0,0,112,11,0,0,243,11,0,0,250,11,0,0,127,12,0,0,127,12,0,0,121,13,0,0,121,13,0,0,63,14,0,0,63,14,0,0,1,15,0,0,3,15,0,0,19,15,0,0,19,15,0,0,21,15,0,0,23,15,0,0,26,15,0,0,31,15,0,0,52,15,0,0,52,15,0,0,54,15,0,0,54,15,0,0,56,15,0,0,56,15,0,0,190,15,0,0,197,15,0,0,199,15,0,0,204,15,0,0,206,15,0,0,207,15,0,0,213,15,0,0,216,15,0,0,158,16,0,0,159,16,0,0,144,19,0,0,153,19,0,0,219,23,0,0,219,23,0,0,64,25,0,0,64,25,0,0,222,25,0,0,255,25,0,0,97,27,0,0,106,27,0,0,116,27,0,0,124,27,0,0,189,31,0,0,189,31,0,0,191,31,0,0,193,31,0,0,205,31,0,0,207,31,0,0,221,31,0,0,223,31,0,0,237,31,0,0,239,31,0,0,253,31,0,0,254,31,0,0,68,32,0,0,68,32,0,0,82,32,0,0,82,32,0,0,122,32,0,0,124,32,0,0,138,32,0,0,140,32,0,0,160,32,0,0,190,32,0,0,0,33,0,0,1,33,0,0,3,33,0,0,6,33,0,0,8,33,0,0,9,33,0,0,20,33,0,0,20,33,0,0,22,33,0,0,24,33,0,0,30,33,0,0,35,33,0,0,37,33,0,0,37,33,0,0,39,33,0,0,39,33,0,0,41,33,0,0,41,33,0,0,46,33,0,0,46,33,0,0,58,33,0,0,59,33,0,0,64,33,0,0,68,33,0,0,74,33,0,0,77,33,0,0,79,33,0,0,79,33,0,0,138,33,0,0,139,33,0,0,144,33,0,0,7,35,0,0,12,35,0,0,40,35,0,0,43,35,0,0,250,35,0,0,0,36,0,0,38,36,0,0,64,36,0,0,74,36,0,0,156,36,0,0,233,36,0,0,0,37,0,0,103,39,0,0,148,39,0,0,196,39,0,0,199,39,0,0,229,39,0,0,240,39,0,0,130,41,0,0,153,41,0,0,215,41,0,0,220,41,0,0,251,41,0,0,254,41,0,0,115,43,0,0,118,43,0,0,149,43,0,0,152,43,0,0,185,43,0,0,189,43,0,0,200,43,0,0,202,43,0,0,209,43,0,0,236,43,0,0,239,43,0,0,229,44,0,0,234,44,0,0,128,46,0,0,153,46,0,0,155,46,0,0,243,46,0,0,0,47,0,0,213,47,0,0,240,47,0,0,251,47,0,0,4,48,0,0,4,48,0,0,18,48,0,0,19,48,0,0,32,48,0,0,32,48,0,0,54,48,0,0,55,48,0,0,62,48,0,0,63,48,0,0,155,48,0,0,156,48,0,0,144,49,0,0,145,49,0,0,150,49,0,0,159,49,0,0,192,49,0,0,227,49,0,0,0,50,0,0,30,50,0,0,42,50,0,0,71,50,0,0,80,50,0,0,80,50,0,0,96,50,0,0,127,50,0,0,138,50,0,0,176,50,0,0,192,50,0,0,254,50,0,0,0,51,0,0,255,51,0,0,192,77,0,0,255,77,0,0,144,164,0,0,198,164,0,0,0,167,0,0,22,167,0,0,32,167,0,0,33,167,0,0,137,167,0,0,138,167,0,0,40,168,0,0,43,168,0,0,54,168,0,0,57,168,0,0,119,170,0,0,121,170,0,0,91,171,0,0,91,171,0,0,41,251,0,0,41,251,0,0,178,251,0,0,193,251,0,0,252,253,0,0,253,253,0,0,98,254,0,0,98,254,0,0,100,254,0,0,102,254,0,0,105,254,0,0,105,254,0,0,4,255,0,0,4,255,0,0,11,255,0,0,11,255,0,0,28,255,0,0,30,255,0,0,62,255,0,0,62,255,0,0,64,255,0,0,64,255,0,0,92,255,0,0,92,255,0,0,94,255,0,0,94,255,0,0,224,255,0,0,230,255,0,0,232,255,0,0,238,255,0,0,252,255,0,0,253,255,0,0,55,1,1,0,63,1,1,0,121,1,1,0,137,1,1,0,140,1,1,0,140,1,1,0,144,1,1,0,155,1,1,0,160,1,1,0,160,1,1,0,208,1,1,0,252,1,1,0,119,8,1,0,120,8,1,0,200,10,1,0,200,10,1,0,63,23,1,0,63,23,1,0,60,107,1,0,63,107,1,0,69,107,1,0,69,107,1,0,156,188,1,0,156,188,1,0,0,208,1,0,245,208,1,0,0,209,1,0,38,209,1,0,41,209,1,0,100,209,1,0,106,209,1,0,108,209,1,0,131,209,1,0,132,209,1,0,140,209,1,0,169,209,1,0,174,209,1,0,232,209,1,0,0,210,1,0,65,210,1,0,69,210,1,0,69,210,1,0,0,211,1,0,86,211,1,0,193,214,1,0,193,214,1,0,219,214,1,0,219,214,1,0,251,214,1,0,251,214,1,0,21,215,1,0,21,215,1,0,53,215,1,0,53,215,1,0,79,215,1,0,79,215,1,0,111,215,1,0,111,215,1,0,137,215,1,0,137,215,1,0,169,215,1,0,169,215,1,0,195,215,1,0,195,215,1,0,0,216,1,0,255,217,1,0,55,218,1,0,58,218,1,0,109,218,1,0,116,218,1,0,118,218,1,0,131,218,1,0,133,218,1,0,134,218,1,0,240,238,1,0,241,238,1,0,0,240,1,0,43,240,1,0,48,240,1,0,147,240,1,0,160,240,1,0,174,240,1,0,177,240,1,0,191,240,1,0,193,240,1,0,207,240,1,0,209,240,1,0,245,240,1,0,16,241,1,0,46,241,1,0,48,241,1,0,107,241,1,0,112,241,1,0,154,241,1,0,230,241,1,0,2,242,1,0,16,242,1,0,58,242,1,0,64,242,1,0,72,242,1,0,80,242,1,0,81,242,1,0,0,243,1,0,121,245,1,0,123,245,1,0,163,245,1,0,165,245,1,0,208,246,1,0,224,246,1,0,236,246,1,0,240,246,1,0,243,246,1,0,0,247,1,0,115,247,1,0,128,247,1,0,212,247,1,0,0,248,1,0,11,248,1,0,16,248,1,0,71,248,1,0,80,248,1,0,89,248,1,0,96,248,1,0,135,248,1,0,144,248,1,0,173,248,1,0,16,249,1,0,24,249,1,0,128,249,1,0,132,249,1,0,192,249,1,0,192,249,1,0,0,8,0,0,45,8,0,0,48,8,0,0,62,8,0,0,128,168,0,0,196,168,0,0,206,168,0,0,217,168,0,0,36,0,0,0,36,0,0,0,162,0,0,0,165,0,0,0,143,5,0,0,143,5,0,0,11,6,0,0,11,6,0,0,242,9,0,0,243,9,0,0,251,9,0,0,251,9,0,0,241,10,0,0,241,10,0,0,249,11,0,0,249,11,0,0,63,14,0,0,63,14,0,0,219,23,0,0,219,23,0,0,160,32,0,0,190,32,0,0,56,168,0,0,56,168,0,0,252,253,0,0,252,253,0,0,105,254,0,0,105,254,0,0,4,255,0,0,4,255,0,0,224,255,0,0,225,255,0,0,229,255,0,0,230,255,0,0,128,17,1,0,205,17,1,0,208,17,1,0,223,17,1,0,80,4,1,0,127,4,1,0,128,21,1,0,181,21,1,0,184,21,1,0,221,21,1,0,0,216,1,0,139,218,1,0,155,218,1,0,159,218,1,0,161,218,1,0,175,218,1,0,130,13,0,0,131,13,0,0,133,13,0,0,150,13,0,0,154,13,0,0,177,13,0,0,179,13,0,0,187,13,0,0,189,13,0,0,189,13,0,0,192,13,0,0,198,13,0,0,202,13,0,0,202,13,0,0,207,13,0,0,212,13,0,0,214,13,0,0,214,13,0,0,216,13,0,0,223,13,0,0,230,13,0,0,239,13,0,0,242,13,0,0,244,13,0,0,225,17,1,0,244,17,1,0,94,0,0,0,94,0,0,0,96,0,0,0,96,0,0,0,168,0,0,0,168,0,0,0,175,0,0,0,175,0,0,0,180,0,0,0,180,0,0,0,184,0,0,0,184,0,0,0,194,2,0,0,197,2,0,0,210,2,0,0,223,2,0,0,229,2,0,0,235,2,0,0,237,2,0,0,237,2,0,0,239,2,0,0,255,2,0,0,117,3,0,0,117,3,0,0,132,3,0,0,133,3,0,0,189,31,0,0,189,31,0,0,191,31,0,0,193,31,0,0,205,31,0,0,207,31,0,0,221,31,0,0,223,31,0,0,237,31,0,0,239,31,0,0,253,31,0,0,254,31,0,0,155,48,0,0,156,48,0,0,0,167,0,0,22,167,0,0,32,167,0,0,33,167,0,0,137,167,0,0,138,167,0,0,91,171,0,0,91,171,0,0,178,251,0,0,193,251,0,0,62,255,0,0,62,255,0,0,64,255,0,0,64,255,0,0,227,255,0,0,227,255,0,0,251,243,1,0,255,243,1,0,43,0,0,0,43,0,0,0,60,0,0,0,62,0,0,0,124,0,0,0,124,0,0,0,126,0,0,0,126,0,0,0,172,0,0,0,172,0,0,0,177,0,0,0,177,0,0,0,215,0,0,0,215,0,0,0,247,0,0,0,247,0,0,0,246,3,0,0,246,3,0,0,6,6,0,0,8,6,0,0,68,32,0,0,68,32,0,0,82,32,0,0,82,32,0,0,122,32,0,0,124,32,0,0,138,32,0,0,140,32,0,0,24,33,0,0,24,33,0,0,64,33,0,0,68,33,0,0,75,33,0,0,75,33,0,0,144,33,0,0,148,33,0,0,154,33,0,0,155,33,0,0,160,33,0,0,160,33,0,0,163,33,0,0,163,33,0,0,166,33,0,0,166,33,0,0,174,33,0,0,174,33,0,0,206,33,0,0,207,33,0,0,210,33,0,0,210,33,0,0,212,33,0,0,212,33,0,0,244,33,0,0,255,34,0,0,32,35,0,0,33,35,0,0,124,35,0,0,124,35,0,0,155,35,0,0,179,35,0,0,220,35,0,0,225,35,0,0,183,37,0,0,183,37,0,0,193,37,0,0,193,37,0,0,248,37,0,0,255,37,0,0,111,38,0,0,111,38,0,0,192,39,0,0,196,39,0,0,199,39,0,0,229,39,0,0,240,39,0,0,255,39,0,0,0,41,0,0,130,41,0,0,153,41,0,0,215,41,0,0,220,41,0,0,251,41,0,0,254,41,0,0,255,42,0,0,48,43,0,0,68,43,0,0,71,43,0,0,76,43,0,0,41,251,0,0,41,251,0,0,98,254,0,0,98,254,0,0,100,254,0,0,102,254,0,0,11,255,0,0,11,255,0,0,28,255,0,0,30,255,0,0,92,255,0,0,92,255,0,0,94,255,0,0,94,255,0,0,226,255,0,0,226,255,0,0,233,255,0,0,236,255,0,0,193,214,1,0,193,214,1,0,219,214,1,0,219,214,1,0,251,214,1,0,251,214,1,0,21,215,1,0,21,215,1,0,53,215,1,0,53,215,1,0,79,215,1,0,79,215,1,0,111,215,1,0,111,215,1,0,137,215,1,0,137,215,1,0,169,215,1,0,169,215,1,0,195,215,1,0,195,215,1,0,240,238,1,0,241,238,1,0,166,0,0,0,166,0,0,0,169,0,0,0,169,0,0,0,174,0,0,0,174,0,0,0,176,0,0,0,176,0,0,0,130,4,0,0,130,4,0,0,141,5,0,0,142,5,0,0,14,6,0,0,15,6,0,0,222,6,0,0,222,6,0,0,233,6,0,0,233,6,0,0,253,6,0,0,254,6,0,0,246,7,0,0,246,7,0,0,250,9,0,0,250,9,0,0,112,11,0,0,112,11,0,0,243,11,0,0,248,11,0,0,250,11,0,0,250,11,0,0,127,12,0,0,127,12,0,0,121,13,0,0,121,13,0,0,1,15,0,0,3,15,0,0,19,15,0,0,19,15,0,0,21,15,0,0,23,15,0,0,26,15,0,0,31,15,0,0,52,15,0,0,52,15,0,0,54,15,0,0,54,15,0,0,56,15,0,0,56,15,0,0,190,15,0,0,197,15,0,0,199,15,0,0,204,15,0,0,206,15,0,0,207,15,0,0,213,15,0,0,216,15,0,0,158,16,0,0,159,16,0,0,144,19,0,0,153,19,0,0,64,25,0,0,64,25,0,0,222,25,0,0,255,25,0,0,97,27,0,0,106,27,0,0,116,27,0,0,124,27,0,0,0,33,0,0,1,33,0,0,3,33,0,0,6,33,0,0,8,33,0,0,9,33,0,0,20,33,0,0,20,33,0,0,22,33,0,0,23,33,0,0,30,33,0,0,35,33,0,0,37,33,0,0,37,33,0,0,39,33,0,0,39,33,0,0,41,33,0,0,41,33,0,0,46,33,0,0,46,33,0,0,58,33,0,0,59,33,0,0,74,33,0,0,74,33,0,0,76,33,0,0,77,33,0,0,79,33,0,0,79,33,0,0,138,33,0,0,139,33,0,0,149,33,0,0,153,33,0,0,156,33,0,0,159,33,0,0,161,33,0,0,162,33], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+92344);
/* memory initializer */ allocate([164,33,0,0,165,33,0,0,167,33,0,0,173,33,0,0,175,33,0,0,205,33,0,0,208,33,0,0,209,33,0,0,211,33,0,0,211,33,0,0,213,33,0,0,243,33,0,0,0,35,0,0,7,35,0,0,12,35,0,0,31,35,0,0,34,35,0,0,40,35,0,0,43,35,0,0,123,35,0,0,125,35,0,0,154,35,0,0,180,35,0,0,219,35,0,0,226,35,0,0,250,35,0,0,0,36,0,0,38,36,0,0,64,36,0,0,74,36,0,0,156,36,0,0,233,36,0,0,0,37,0,0,182,37,0,0,184,37,0,0,192,37,0,0,194,37,0,0,247,37,0,0,0,38,0,0,110,38,0,0,112,38,0,0,103,39,0,0,148,39,0,0,191,39,0,0,0,40,0,0,255,40,0,0,0,43,0,0,47,43,0,0,69,43,0,0,70,43,0,0,77,43,0,0,115,43,0,0,118,43,0,0,149,43,0,0,152,43,0,0,185,43,0,0,189,43,0,0,200,43,0,0,202,43,0,0,209,43,0,0,236,43,0,0,239,43,0,0,229,44,0,0,234,44,0,0,128,46,0,0,153,46,0,0,155,46,0,0,243,46,0,0,0,47,0,0,213,47,0,0,240,47,0,0,251,47,0,0,4,48,0,0,4,48,0,0,18,48,0,0,19,48,0,0,32,48,0,0,32,48,0,0,54,48,0,0,55,48,0,0,62,48,0,0,63,48,0,0,144,49,0,0,145,49,0,0,150,49,0,0,159,49,0,0,192,49,0,0,227,49,0,0,0,50,0,0,30,50,0,0,42,50,0,0,71,50,0,0,80,50,0,0,80,50,0,0,96,50,0,0,127,50,0,0,138,50,0,0,176,50,0,0,192,50,0,0,254,50,0,0,0,51,0,0,255,51,0,0,192,77,0,0,255,77,0,0,144,164,0,0,198,164,0,0,40,168,0,0,43,168,0,0,54,168,0,0,55,168,0,0,57,168,0,0,57,168,0,0,119,170,0,0,121,170,0,0,253,253,0,0,253,253,0,0,228,255,0,0,228,255,0,0,232,255,0,0,232,255,0,0,237,255,0,0,238,255,0,0,252,255,0,0,253,255,0,0,55,1,1,0,63,1,1,0,121,1,1,0,137,1,1,0,140,1,1,0,140,1,1,0,144,1,1,0,155,1,1,0,160,1,1,0,160,1,1,0,208,1,1,0,252,1,1,0,119,8,1,0,120,8,1,0,200,10,1,0,200,10,1,0,63,23,1,0,63,23,1,0,60,107,1,0,63,107,1,0,69,107,1,0,69,107,1,0,156,188,1,0,156,188,1,0,0,208,1,0,245,208,1,0,0,209,1,0,38,209,1,0,41,209,1,0,100,209,1,0,106,209,1,0,108,209,1,0,131,209,1,0,132,209,1,0,140,209,1,0,169,209,1,0,174,209,1,0,232,209,1,0,0,210,1,0,65,210,1,0,69,210,1,0,69,210,1,0,0,211,1,0,86,211,1,0,0,216,1,0,255,217,1,0,55,218,1,0,58,218,1,0,109,218,1,0,116,218,1,0,118,218,1,0,131,218,1,0,133,218,1,0,134,218,1,0,0,240,1,0,43,240,1,0,48,240,1,0,147,240,1,0,160,240,1,0,174,240,1,0,177,240,1,0,191,240,1,0,193,240,1,0,207,240,1,0,209,240,1,0,245,240,1,0,16,241,1,0,46,241,1,0,48,241,1,0,107,241,1,0,112,241,1,0,154,241,1,0,230,241,1,0,2,242,1,0,16,242,1,0,58,242,1,0,64,242,1,0,72,242,1,0,80,242,1,0,81,242,1,0,0,243,1,0,250,243,1,0,0,244,1,0,121,245,1,0,123,245,1,0,163,245,1,0,165,245,1,0,208,246,1,0,224,246,1,0,236,246,1,0,240,246,1,0,243,246,1,0,0,247,1,0,115,247,1,0,128,247,1,0,212,247,1,0,0,248,1,0,11,248,1,0,16,248,1,0,71,248,1,0,80,248,1,0,89,248,1,0,96,248,1,0,135,248,1,0,144,248,1,0,173,248,1,0,16,249,1,0,24,249,1,0,128,249,1,0,132,249,1,0,192,249,1,0,192,249,1,0,208,16,1,0,232,16,1,0,240,16,1,0,249,16,1,0,128,27,0,0,191,27,0,0,192,28,0,0,199,28,0,0,0,168,0,0,43,168,0,0,0,7,0,0,13,7,0,0,15,7,0,0,74,7,0,0,77,7,0,0,79,7,0,0,0,23,0,0,12,23,0,0,14,23,0,0,20,23,0,0,96,23,0,0,108,23,0,0,110,23,0,0,112,23,0,0,114,23,0,0,115,23,0,0,80,25,0,0,109,25,0,0,112,25,0,0,116,25,0,0,32,26,0,0,94,26,0,0,96,26,0,0,124,26,0,0,127,26,0,0,137,26,0,0,144,26,0,0,153,26,0,0,160,26,0,0,173,26,0,0,128,170,0,0,194,170,0,0,219,170,0,0,223,170,0,0,128,22,1,0,183,22,1,0,192,22,1,0,201,22,1,0,130,11,0,0,131,11,0,0,133,11,0,0,138,11,0,0,142,11,0,0,144,11,0,0,146,11,0,0,149,11,0,0,153,11,0,0,154,11,0,0,156,11,0,0,156,11,0,0,158,11,0,0,159,11,0,0,163,11,0,0,164,11,0,0,168,11,0,0,170,11,0,0,174,11,0,0,185,11,0,0,190,11,0,0,194,11,0,0,198,11,0,0,200,11,0,0,202,11,0,0,205,11,0,0,208,11,0,0,208,11,0,0,215,11,0,0,215,11,0,0,230,11,0,0,250,11,0,0,0,12,0,0,3,12,0,0,5,12,0,0,12,12,0,0,14,12,0,0,16,12,0,0,18,12,0,0,40,12,0,0,42,12,0,0,57,12,0,0,61,12,0,0,68,12,0,0,70,12,0,0,72,12,0,0,74,12,0,0,77,12,0,0,85,12,0,0,86,12,0,0,88,12,0,0,90,12,0,0,96,12,0,0,99,12,0,0,102,12,0,0,111,12,0,0,120,12,0,0,127,12,0,0,128,7,0,0,177,7,0,0,1,14,0,0,58,14,0,0,64,14,0,0,91,14,0,0,0,15,0,0,71,15,0,0,73,15,0,0,108,15,0,0,113,15,0,0,151,15,0,0,153,15,0,0,188,15,0,0,190,15,0,0,204,15,0,0,206,15,0,0,212,15,0,0,217,15,0,0,218,15,0,0,48,45,0,0,103,45,0,0,111,45,0,0,112,45,0,0,127,45,0,0,127,45,0,0,128,20,1,0,199,20,1,0,208,20,1,0,217,20,1,0,128,3,1,0,157,3,1,0,159,3,1,0,159,3,1,0,65,0,0,0,90,0,0,0,192,0,0,0,214,0,0,0,216,0,0,0,222,0,0,0,0,1,0,0,0,1,0,0,2,1,0,0,2,1,0,0,4,1,0,0,4,1,0,0,6,1,0,0,6,1,0,0,8,1,0,0,8,1,0,0,10,1,0,0,10,1,0,0,12,1,0,0,12,1,0,0,14,1,0,0,14,1,0,0,16,1,0,0,16,1,0,0,18,1,0,0,18,1,0,0,20,1,0,0,20,1,0,0,22,1,0,0,22,1,0,0,24,1,0,0,24,1,0,0,26,1,0,0,26,1,0,0,28,1,0,0,28,1,0,0,30,1,0,0,30,1,0,0,32,1,0,0,32,1,0,0,34,1,0,0,34,1,0,0,36,1,0,0,36,1,0,0,38,1,0,0,38,1,0,0,40,1,0,0,40,1,0,0,42,1,0,0,42,1,0,0,44,1,0,0,44,1,0,0,46,1,0,0,46,1,0,0,48,1,0,0,48,1,0,0,50,1,0,0,50,1,0,0,52,1,0,0,52,1,0,0,54,1,0,0,54,1,0,0,57,1,0,0,57,1,0,0,59,1,0,0,59,1,0,0,61,1,0,0,61,1,0,0,63,1,0,0,63,1,0,0,65,1,0,0,65,1,0,0,67,1,0,0,67,1,0,0,69,1,0,0,69,1,0,0,71,1,0,0,71,1,0,0,74,1,0,0,74,1,0,0,76,1,0,0,76,1,0,0,78,1,0,0,78,1,0,0,80,1,0,0,80,1,0,0,82,1,0,0,82,1,0,0,84,1,0,0,84,1,0,0,86,1,0,0,86,1,0,0,88,1,0,0,88,1,0,0,90,1,0,0,90,1,0,0,92,1,0,0,92,1,0,0,94,1,0,0,94,1,0,0,96,1,0,0,96,1,0,0,98,1,0,0,98,1,0,0,100,1,0,0,100,1,0,0,102,1,0,0,102,1,0,0,104,1,0,0,104,1,0,0,106,1,0,0,106,1,0,0,108,1,0,0,108,1,0,0,110,1,0,0,110,1,0,0,112,1,0,0,112,1,0,0,114,1,0,0,114,1,0,0,116,1,0,0,116,1,0,0,118,1,0,0,118,1,0,0,120,1,0,0,121,1,0,0,123,1,0,0,123,1,0,0,125,1,0,0,125,1,0,0,129,1,0,0,130,1,0,0,132,1,0,0,132,1,0,0,134,1,0,0,135,1,0,0,137,1,0,0,139,1,0,0,142,1,0,0,145,1,0,0,147,1,0,0,148,1,0,0,150,1,0,0,152,1,0,0,156,1,0,0,157,1,0,0,159,1,0,0,160,1,0,0,162,1,0,0,162,1,0,0,164,1,0,0,164,1,0,0,166,1,0,0,167,1,0,0,169,1,0,0,169,1,0,0,172,1,0,0,172,1,0,0,174,1,0,0,175,1,0,0,177,1,0,0,179,1,0,0,181,1,0,0,181,1,0,0,183,1,0,0,184,1,0,0,188,1,0,0,188,1,0,0,196,1,0,0,196,1,0,0,199,1,0,0,199,1,0,0,202,1,0,0,202,1,0,0,205,1,0,0,205,1,0,0,207,1,0,0,207,1,0,0,209,1,0,0,209,1,0,0,211,1,0,0,211,1,0,0,213,1,0,0,213,1,0,0,215,1,0,0,215,1,0,0,217,1,0,0,217,1,0,0,219,1,0,0,219,1,0,0,222,1,0,0,222,1,0,0,224,1,0,0,224,1,0,0,226,1,0,0,226,1,0,0,228,1,0,0,228,1,0,0,230,1,0,0,230,1,0,0,232,1,0,0,232,1,0,0,234,1,0,0,234,1,0,0,236,1,0,0,236,1,0,0,238,1,0,0,238,1,0,0,241,1,0,0,241,1,0,0,244,1,0,0,244,1,0,0,246,1,0,0,248,1,0,0,250,1,0,0,250,1,0,0,252,1,0,0,252,1,0,0,254,1,0,0,254,1,0,0,0,2,0,0,0,2,0,0,2,2,0,0,2,2,0,0,4,2,0,0,4,2,0,0,6,2,0,0,6,2,0,0,8,2,0,0,8,2,0,0,10,2,0,0,10,2,0,0,12,2,0,0,12,2,0,0,14,2,0,0,14,2,0,0,16,2,0,0,16,2,0,0,18,2,0,0,18,2,0,0,20,2,0,0,20,2,0,0,22,2,0,0,22,2,0,0,24,2,0,0,24,2,0,0,26,2,0,0,26,2,0,0,28,2,0,0,28,2,0,0,30,2,0,0,30,2,0,0,32,2,0,0,32,2,0,0,34,2,0,0,34,2,0,0,36,2,0,0,36,2,0,0,38,2,0,0,38,2,0,0,40,2,0,0,40,2,0,0,42,2,0,0,42,2,0,0,44,2,0,0,44,2,0,0,46,2,0,0,46,2,0,0,48,2,0,0,48,2,0,0,50,2,0,0,50,2,0,0,58,2,0,0,59,2,0,0,61,2,0,0,62,2,0,0,65,2,0,0,65,2,0,0,67,2,0,0,70,2,0,0,72,2,0,0,72,2,0,0,74,2,0,0,74,2,0,0,76,2,0,0,76,2,0,0,78,2,0,0,78,2,0,0,112,3,0,0,112,3,0,0,114,3,0,0,114,3,0,0,118,3,0,0,118,3,0,0,127,3,0,0,127,3,0,0,134,3,0,0,134,3,0,0,136,3,0,0,138,3,0,0,140,3,0,0,140,3,0,0,142,3,0,0,143,3,0,0,145,3,0,0,161,3,0,0,163,3,0,0,171,3,0,0,207,3,0,0,207,3,0,0,210,3,0,0,212,3,0,0,216,3,0,0,216,3,0,0,218,3,0,0,218,3,0,0,220,3,0,0,220,3,0,0,222,3,0,0,222,3,0,0,224,3,0,0,224,3,0,0,226,3,0,0,226,3,0,0,228,3,0,0,228,3,0,0,230,3,0,0,230,3,0,0,232,3,0,0,232,3,0,0,234,3,0,0,234,3,0,0,236,3,0,0,236,3,0,0,238,3,0,0,238,3,0,0,244,3,0,0,244,3,0,0,247,3,0,0,247,3,0,0,249,3,0,0,250,3,0,0,253,3,0,0,47,4,0,0,96,4,0,0,96,4,0,0,98,4,0,0,98,4,0,0,100,4,0,0,100,4,0,0,102,4,0,0,102,4,0,0,104,4,0,0,104,4,0,0,106,4,0,0,106,4,0,0,108,4,0,0,108,4,0,0,110,4,0,0,110,4,0,0,112,4,0,0,112,4,0,0,114,4,0,0,114,4,0,0,116,4,0,0,116,4,0,0,118,4,0,0,118,4,0,0,120,4,0,0,120,4,0,0,122,4,0,0,122,4,0,0,124,4,0,0,124,4,0,0,126,4,0,0,126,4,0,0,128,4,0,0,128,4,0,0,138,4,0,0,138,4,0,0,140,4,0,0,140,4,0,0,142,4,0,0,142,4,0,0,144,4,0,0,144,4,0,0,146,4,0,0,146,4,0,0,148,4,0,0,148,4,0,0,150,4,0,0,150,4,0,0,152,4,0,0,152,4,0,0,154,4,0,0,154,4,0,0,156,4,0,0,156,4,0,0,158,4,0,0,158,4,0,0,160,4,0,0,160,4,0,0,162,4,0,0,162,4,0,0,164,4,0,0,164,4,0,0,166,4,0,0,166,4,0,0,168,4,0,0,168,4,0,0,170,4,0,0,170,4,0,0,172,4,0,0,172,4,0,0,174,4,0,0,174,4,0,0,176,4,0,0,176,4,0,0,178,4,0,0,178,4,0,0,180,4,0,0,180,4,0,0,182,4,0,0,182,4,0,0,184,4,0,0,184,4,0,0,186,4,0,0,186,4,0,0,188,4,0,0,188,4,0,0,190,4,0,0,190,4,0,0,192,4,0,0,193,4,0,0,195,4,0,0,195,4,0,0,197,4,0,0,197,4,0,0,199,4,0,0,199,4,0,0,201,4,0,0,201,4,0,0,203,4,0,0,203,4,0,0,205,4,0,0,205,4,0,0,208,4,0,0,208,4,0,0,210,4,0,0,210,4,0,0,212,4,0,0,212,4,0,0,214,4,0,0,214,4,0,0,216,4,0,0,216,4,0,0,218,4,0,0,218,4,0,0,220,4,0,0,220,4,0,0,222,4,0,0,222,4,0,0,224,4,0,0,224,4,0,0,226,4,0,0,226,4,0,0,228,4,0,0,228,4,0,0,230,4,0,0,230,4,0,0,232,4,0,0,232,4,0,0,234,4,0,0,234,4,0,0,236,4,0,0,236,4,0,0,238,4,0,0,238,4,0,0,240,4,0,0,240,4,0,0,242,4,0,0,242,4,0,0,244,4,0,0,244,4,0,0,246,4,0,0,246,4,0,0,248,4,0,0,248,4,0,0,250,4,0,0,250,4,0,0,252,4,0,0,252,4,0,0,254,4,0,0,254,4,0,0,0,5,0,0,0,5,0,0,2,5,0,0,2,5,0,0,4,5,0,0,4,5,0,0,6,5,0,0,6,5,0,0,8,5,0,0,8,5,0,0,10,5,0,0,10,5,0,0,12,5,0,0,12,5,0,0,14,5,0,0,14,5,0,0,16,5,0,0,16,5,0,0,18,5,0,0,18,5,0,0,20,5,0,0,20,5,0,0,22,5,0,0,22,5,0,0,24,5,0,0,24,5,0,0,26,5,0,0,26,5,0,0,28,5,0,0,28,5,0,0,30,5,0,0,30,5,0,0,32,5,0,0,32,5,0,0,34,5,0,0,34,5,0,0,36,5,0,0,36,5,0,0,38,5,0,0,38,5,0,0,40,5,0,0,40,5,0,0,42,5,0,0,42,5,0,0,44,5,0,0,44,5,0,0,46,5,0,0,46,5,0,0,49,5,0,0,86,5,0,0,160,16,0,0,197,16,0,0,199,16,0,0,199,16,0,0,205,16,0,0,205,16,0,0,160,19,0,0,245,19,0,0,0,30,0,0,0,30,0,0,2,30,0,0,2,30,0,0,4,30,0,0,4,30,0,0,6,30,0,0,6,30,0,0,8,30,0,0,8,30,0,0,10,30,0,0,10,30,0,0,12,30,0,0,12,30,0,0,14,30,0,0,14,30,0,0,16,30,0,0,16,30,0,0,18,30,0,0,18,30,0,0,20,30,0,0,20,30,0,0,22,30,0,0,22,30,0,0,24,30,0,0,24,30,0,0,26,30,0,0,26,30,0,0,28,30,0,0,28,30,0,0,30,30,0,0,30,30,0,0,32,30,0,0,32,30,0,0,34,30,0,0,34,30,0,0,36,30,0,0,36,30,0,0,38,30,0,0,38,30,0,0,40,30,0,0,40,30,0,0,42,30,0,0,42,30,0,0,44,30,0,0,44,30,0,0,46,30,0,0,46,30,0,0,48,30,0,0,48,30,0,0,50,30,0,0,50,30,0,0,52,30,0,0,52,30,0,0,54,30,0,0,54,30,0,0,56,30,0,0,56,30,0,0,58,30,0,0,58,30,0,0,60,30,0,0,60,30,0,0,62,30,0,0,62,30,0,0,64,30,0,0,64,30,0,0,66,30,0,0,66,30,0,0,68,30,0,0,68,30,0,0,70,30,0,0,70,30,0,0,72,30,0,0,72,30,0,0,74,30,0,0,74,30,0,0,76,30,0,0,76,30,0,0,78,30,0,0,78,30,0,0,80,30,0,0,80,30,0,0,82,30,0,0,82,30,0,0,84,30,0,0,84,30,0,0,86,30,0,0,86,30,0,0,88,30,0,0,88,30,0,0,90,30,0,0,90,30,0,0,92,30,0,0,92,30,0,0,94,30,0,0,94,30,0,0,96,30,0,0,96,30,0,0,98,30,0,0,98,30,0,0,100,30,0,0,100,30,0,0,102,30,0,0,102,30,0,0,104,30,0,0,104,30,0,0,106,30,0,0,106,30,0,0,108,30,0,0,108,30,0,0,110,30,0,0,110,30,0,0,112,30,0,0,112,30,0,0,114,30,0,0,114,30,0,0,116,30,0,0,116,30,0,0,118,30,0,0,118,30,0,0,120,30,0,0,120,30,0,0,122,30,0,0,122,30,0,0,124,30,0,0,124,30,0,0,126,30,0,0,126,30,0,0,128,30,0,0,128,30,0,0,130,30,0,0,130,30,0,0,132,30,0,0,132,30,0,0,134,30,0,0,134,30,0,0,136,30,0,0,136,30,0,0,138,30,0,0,138,30,0,0,140,30,0,0,140,30,0,0,142,30,0,0,142,30,0,0,144,30,0,0,144,30,0,0,146,30,0,0,146,30,0,0,148,30,0,0,148,30,0,0,158,30,0,0,158,30,0,0,160,30,0,0,160,30,0,0,162,30,0,0,162,30,0,0,164,30,0,0,164,30,0,0,166,30,0,0,166,30,0,0,168,30,0,0,168,30,0,0,170,30,0,0,170,30,0,0,172,30,0,0,172,30,0,0,174,30,0,0,174,30,0,0,176,30,0,0,176,30,0,0,178,30,0,0,178,30,0,0,180,30,0,0,180,30,0,0,182,30,0,0,182,30,0,0,184,30,0,0,184,30,0,0,186,30,0,0,186,30,0,0,188,30,0,0,188,30,0,0,190,30,0,0,190,30,0,0,192,30,0,0,192,30,0,0,194,30,0,0,194,30,0,0,196,30,0,0,196,30,0,0,198,30,0,0,198,30,0,0,200,30,0,0,200,30,0,0,202,30,0,0,202,30,0,0,204,30,0,0,204,30,0,0,206,30,0,0,206,30,0,0,208,30,0,0,208,30,0,0,210,30,0,0,210,30,0,0,212,30,0,0,212,30,0,0,214,30,0,0,214,30,0,0,216,30,0,0,216,30,0,0,218,30,0,0,218,30,0,0,220,30,0,0,220,30,0,0,222,30,0,0,222,30,0,0,224,30,0,0,224,30,0,0,226,30,0,0,226,30,0,0,228,30,0,0,228,30,0,0,230,30,0,0,230,30,0,0,232,30,0,0,232,30,0,0,234,30,0,0,234,30,0,0,236,30,0,0,236,30,0,0,238,30,0,0,238,30,0,0,240,30,0,0,240,30,0,0,242,30,0,0,242,30,0,0,244,30,0,0,244,30,0,0,246,30,0,0,246,30,0,0,248,30,0,0,248,30,0,0,250,30,0,0,250,30,0,0,252,30,0,0,252,30,0,0,254,30,0,0,254,30,0,0,8,31,0,0,15,31,0,0,24,31,0,0,29,31,0,0,40,31,0,0,47,31,0,0,56,31,0,0,63,31,0,0,72,31,0,0,77,31,0,0,89,31,0,0,89,31,0,0,91,31,0,0,91,31,0,0,93,31,0,0,93,31,0,0,95,31,0,0,95,31,0,0,104,31,0,0,111,31,0,0,184,31,0,0,187,31,0,0,200,31,0,0,203,31,0,0,216,31,0,0,219,31,0,0,232,31,0,0,236,31,0,0,248,31,0,0,251,31,0,0,2,33,0,0,2,33,0,0,7,33,0,0,7,33,0,0,11,33,0,0,13,33,0,0,16,33,0,0,18,33,0,0,21,33,0,0,21,33,0,0,25,33,0,0,29,33,0,0,36,33,0,0,36,33,0,0,38,33,0,0,38,33,0,0,40,33,0,0,40,33,0,0,42,33,0,0,45,33,0,0,48,33,0,0,51,33,0,0,62,33,0,0,63,33,0,0,69,33,0,0,69,33,0,0,96,33,0,0,111,33,0,0,131,33,0,0,131,33,0,0,182,36,0,0,207,36,0,0,0,44,0,0,46,44,0,0,96,44,0,0,96,44,0,0,98,44,0,0,100,44,0,0,103,44,0,0,103,44,0,0,105,44,0,0,105,44,0,0,107,44,0,0,107,44,0,0,109,44,0,0,112,44,0,0,114,44,0,0,114,44,0,0,117,44,0,0,117,44,0,0,126,44,0,0,128,44,0,0,130,44,0,0,130,44,0,0,132,44,0,0,132,44,0,0,134,44,0,0,134,44,0,0,136,44,0,0,136,44,0,0,138,44,0,0,138,44,0,0,140,44,0,0,140,44,0,0,142,44,0,0,142,44,0,0,144,44,0,0,144,44,0,0,146,44,0,0,146,44,0,0,148,44,0,0,148,44,0,0,150,44,0,0,150,44,0,0,152,44,0,0,152,44,0,0,154,44,0,0,154,44,0,0,156,44,0,0,156,44,0,0,158,44,0,0,158,44,0,0,160,44,0,0,160,44,0,0,162,44,0,0,162,44,0,0,164,44,0,0,164,44,0,0,166,44,0,0,166,44,0,0,168,44,0,0,168,44,0,0,170,44,0,0,170,44,0,0,172,44,0,0,172,44,0,0,174,44,0,0,174,44,0,0,176,44,0,0,176,44,0,0,178,44,0,0,178,44,0,0,180,44,0,0,180,44,0,0,182,44,0,0,182,44,0,0,184,44,0,0,184,44,0,0,186,44,0,0,186,44,0,0,188,44,0,0,188,44,0,0,190,44,0,0,190,44,0,0,192,44,0,0,192,44,0,0,194,44,0,0,194,44,0,0,196,44,0,0,196,44,0,0,198,44,0,0,198,44,0,0,200,44,0,0,200,44,0,0,202,44,0,0,202,44,0,0,204,44,0,0,204,44,0,0,206,44,0,0,206,44,0,0,208,44,0,0,208,44,0,0,210,44,0,0,210,44,0,0,212,44,0,0,212,44,0,0,214,44,0,0,214,44,0,0,216,44,0,0,216,44,0,0,218,44,0,0,218,44,0,0,220,44,0,0,220,44,0,0,222,44,0,0,222,44,0,0,224,44,0,0,224,44,0,0,226,44,0,0,226,44,0,0,235,44,0,0,235,44,0,0,237,44,0,0,237,44,0,0,242,44,0,0,242,44,0,0,64,166,0,0,64,166,0,0,66,166,0,0,66,166,0,0,68,166,0,0,68,166,0,0,70,166,0,0,70,166,0,0,72,166,0,0,72,166,0,0,74,166,0,0,74,166,0,0,76,166,0,0,76,166,0,0,78,166,0,0,78,166,0,0,80,166,0,0,80,166,0,0,82,166,0,0,82,166,0,0,84,166,0,0,84,166,0,0,86,166,0,0,86,166,0,0,88,166,0,0,88,166,0,0,90,166,0,0,90,166,0,0,92,166,0,0,92,166,0,0,94,166,0,0,94,166,0,0,96,166,0,0,96,166,0,0,98,166,0,0,98,166,0,0,100,166,0,0,100,166,0,0,102,166,0,0,102,166,0,0,104,166,0,0,104,166,0,0,106,166,0,0,106,166,0,0,108,166,0,0,108,166,0,0,128,166,0,0,128,166,0,0,130,166,0,0,130,166,0,0,132,166,0,0,132,166,0,0,134,166,0,0,134,166,0,0,136,166,0,0,136,166,0,0,138,166,0,0,138,166,0,0,140,166,0,0,140,166,0,0,142,166,0,0,142,166,0,0,144,166,0,0,144,166,0,0,146,166,0,0,146,166,0,0,148,166,0,0,148,166,0,0,150,166,0,0,150,166,0,0,152,166,0,0,152,166,0,0,154,166,0,0,154,166,0,0,34,167,0,0,34,167,0,0,36,167,0,0,36,167,0,0,38,167,0,0,38,167,0,0,40,167,0,0,40,167,0,0,42,167,0,0,42,167,0,0,44,167,0,0,44,167,0,0,46,167,0,0,46,167,0,0,50,167,0,0,50,167,0,0,52,167,0,0,52,167,0,0,54,167,0,0,54,167,0,0,56,167,0,0,56,167,0,0,58,167,0,0,58,167,0,0,60,167,0,0,60,167,0,0,62,167,0,0,62,167,0,0,64,167,0,0,64,167,0,0,66,167,0,0,66,167,0,0,68,167,0,0,68,167,0,0,70,167,0,0,70,167,0,0,72,167,0,0,72,167,0,0,74,167,0,0,74,167,0,0,76,167,0,0,76,167,0,0,78,167,0,0,78,167,0,0,80,167,0,0,80,167,0,0,82,167,0,0,82,167,0,0,84,167,0,0,84,167,0,0,86,167,0,0,86,167,0,0,88,167,0,0,88,167,0,0,90,167,0,0,90,167,0,0,92,167,0,0,92,167,0,0,94,167,0,0,94,167,0,0,96,167,0,0,96,167,0,0,98,167,0,0,98,167,0,0,100,167,0,0,100,167,0,0,102,167,0,0,102,167,0,0,104,167,0,0,104,167,0,0,106,167,0,0,106,167,0,0,108,167,0,0,108,167,0,0,110,167,0,0,110,167,0,0,121,167,0,0,121,167,0,0,123,167,0,0,123,167,0,0,125,167,0,0,126,167,0,0,128,167,0,0,128,167,0,0,130,167,0,0,130,167,0,0,132,167,0,0,132,167,0,0,134,167,0,0,134,167,0,0,139,167,0,0,139,167,0,0,141,167,0,0,141,167,0,0,144,167,0,0,144,167,0,0,146,167,0,0,146,167,0,0,150,167,0,0,150,167,0,0,152,167,0,0,152,167,0,0,154,167,0,0,154,167,0,0,156,167,0,0,156,167,0,0,158,167,0,0,158,167,0,0,160,167,0,0,160,167,0,0,162,167,0,0,162,167,0,0,164,167,0,0,164,167,0,0,166,167,0,0,166,167,0,0,168,167,0,0,168,167,0,0,170,167,0,0,173,167,0,0,176,167,0,0,180,167,0,0,182,167,0,0,182,167,0,0,33,255,0,0,58,255,0,0,0,4,1,0,39,4,1,0,128,12,1,0,178,12,1,0,160,24,1,0,191,24,1,0,0,212,1,0,25,212,1,0,52,212,1,0,77,212,1,0,104,212,1,0,129,212,1,0,156,212,1,0,156,212,1,0,158,212,1,0,159,212,1,0,162,212,1,0,162,212,1,0,165,212,1,0,166,212,1,0,169,212,1,0,172,212,1,0,174,212,1,0,181,212,1,0,208,212,1,0,233,212,1,0,4,213,1,0,5,213,1,0,7,213,1,0,10,213,1,0,13,213,1,0,20,213,1,0,22,213,1,0,28,213,1,0,56,213,1,0,57,213,1,0,59,213,1,0,62,213,1,0,64,213,1,0,68,213,1,0,70,213,1,0,70,213,1,0,74,213,1,0,80,213,1,0,108,213,1,0,133,213,1,0,160,213,1,0,185,213,1,0,212,213,1,0,237,213,1,0,8,214,1,0,33,214,1,0,60,214,1,0,85,214,1,0,112,214,1,0,137,214,1,0,168,214,1,0,192,214,1,0,226,214,1,0,250,214,1,0,28,215,1,0,52,215,1,0,86,215,1,0,110,215,1,0,144,215,1,0,168,215,1,0,202,215,1,0,202,215,1,0,48,241,1,0,73,241,1,0,80,241,1,0,105,241,1,0,112,241,1,0,137,241,1,0,0,165,0,0,43,166,0,0,160,24,1,0,242,24,1,0,255,24,1,0,255,24,1,0,48,0,0,0,57,0,0,0,65,0,0,0,90,0,0,0,95,0,0,0,95,0,0,0,97,0,0,0,122,0,0,0,170,0,0,0,170,0,0,0,181,0,0,0,181,0,0,0,183,0,0,0,183,0,0,0,186,0,0,0,186,0,0,0,192,0,0,0,214,0,0,0,216,0,0,0,246,0,0,0,248,0,0,0,193,2,0,0,198,2,0,0,209,2,0,0,224,2,0,0,228,2,0,0,236,2,0,0,236,2,0,0,238,2,0,0,238,2,0,0,0,3,0,0,116,3,0,0,118,3,0,0,119,3,0,0,123,3,0,0,125,3,0,0,127,3,0,0,127,3,0,0,134,3,0,0,138,3,0,0,140,3,0,0,140,3,0,0,142,3,0,0,161,3,0,0,163,3,0,0,245,3,0,0,247,3,0,0,129,4,0,0,131,4,0,0,135,4,0,0,138,4,0,0,47,5,0,0,49,5,0,0,86,5,0,0,89,5,0,0,89,5,0,0,97,5,0,0,135,5,0,0,145,5,0,0,189,5,0,0,191,5,0,0,191,5,0,0,193,5,0,0,194,5,0,0,196,5,0,0,197,5,0,0,199,5,0,0,199,5,0,0,208,5,0,0,234,5,0,0,240,5,0,0,242,5,0,0,16,6,0,0,26,6,0,0,32,6,0,0,105,6,0,0,110,6,0,0,211,6,0,0,213,6,0,0,220,6,0,0,223,6,0,0,232,6,0,0,234,6,0,0,252,6,0,0,255,6,0,0,255,6,0,0,16,7,0,0,74,7,0,0,77,7,0,0,177,7,0,0,192,7,0,0,245,7,0,0,250,7,0,0,250,7,0,0,0,8,0,0,45,8,0,0,64,8,0,0,91,8,0,0,160,8,0,0,180,8,0,0,227,8,0,0,99,9,0,0,102,9,0,0,111,9,0,0,113,9,0,0,131,9,0,0,133,9,0,0,140,9,0,0,143,9,0,0,144,9,0,0,147,9,0,0,168,9,0,0,170,9,0,0,176,9,0,0,178,9,0,0,178,9,0,0,182,9,0,0,185,9,0,0,188,9,0,0,196,9,0,0,199,9,0,0,200,9,0,0,203,9,0,0,206,9,0,0,215,9,0,0,215,9,0,0,220,9,0,0,221,9,0,0,223,9,0,0,227,9,0,0,230,9,0,0,241,9,0,0,1,10,0,0,3,10,0,0,5,10,0,0,10,10,0,0,15,10,0,0,16,10,0,0,19,10,0,0,40,10,0,0,42,10,0,0,48,10,0,0,50,10,0,0,51,10,0,0,53,10,0,0,54,10,0,0,56,10,0,0,57,10,0,0,60,10,0,0,60,10,0,0,62,10,0,0,66,10,0,0,71,10,0,0,72,10,0,0,75,10,0,0,77,10,0,0,81,10,0,0,81,10,0,0,89,10,0,0,92,10,0,0,94,10,0,0,94,10,0,0,102,10,0,0,117,10,0,0,129,10,0,0,131,10,0,0,133,10,0,0,141,10,0,0,143,10,0,0,145,10,0,0,147,10,0,0,168,10,0,0,170,10,0,0,176,10,0,0,178,10,0,0,179,10,0,0,181,10,0,0,185,10,0,0,188,10,0,0,197,10,0,0,199,10,0,0,201,10,0,0,203,10,0,0,205,10,0,0,208,10,0,0,208,10,0,0,224,10,0,0,227,10,0,0,230,10,0,0,239,10,0,0,249,10,0,0,249,10,0,0,1,11,0,0,3,11,0,0,5,11,0,0,12,11,0,0,15,11,0,0,16,11,0,0,19,11,0,0,40,11,0,0,42,11,0,0,48,11,0,0,50,11,0,0,51,11,0,0,53,11,0,0,57,11,0,0,60,11,0,0,68,11,0,0,71,11,0,0,72,11,0,0,75,11,0,0,77,11,0,0,86,11,0,0,87,11,0,0,92,11,0,0,93,11,0,0,95,11,0,0,99,11,0,0,102,11,0,0,111,11,0,0,113,11,0,0,113,11,0,0,130,11,0,0,131,11,0,0,133,11,0,0,138,11,0,0,142,11,0,0,144,11,0,0,146,11,0,0,149,11,0,0,153,11,0,0,154,11,0,0,156,11,0,0,156,11,0,0,158,11,0,0,159,11,0,0,163,11,0,0,164,11,0,0,168,11,0,0,170,11,0,0,174,11,0,0,185,11,0,0,190,11,0,0,194,11,0,0,198,11,0,0,200,11,0,0,202,11,0,0,205,11,0,0,208,11,0,0,208,11,0,0,215,11,0,0,215,11,0,0,230,11,0,0,239,11,0,0,0,12,0,0,3,12,0,0,5,12,0,0,12,12,0,0,14,12,0,0,16,12,0,0,18,12,0,0,40,12,0,0,42,12,0,0,57,12,0,0,61,12,0,0,68,12,0,0,70,12,0,0,72,12,0,0,74,12,0,0,77,12,0,0,85,12,0,0,86,12,0,0,88,12,0,0,90,12,0,0,96,12,0,0,99,12,0,0,102,12,0,0,111,12,0,0,129,12,0,0,131,12,0,0,133,12,0,0,140,12,0,0,142,12,0,0,144,12,0,0,146,12,0,0,168,12,0,0,170,12,0,0,179,12,0,0,181,12,0,0,185,12,0,0,188,12,0,0,196,12,0,0,198,12,0,0,200,12,0,0,202,12,0,0,205,12,0,0,213,12,0,0,214,12,0,0,222,12,0,0,222,12,0,0,224,12,0,0,227,12,0,0,230,12,0,0,239,12,0,0,241,12,0,0,242,12,0,0,1,13,0,0,3,13,0,0,5,13,0,0,12,13,0,0,14,13,0,0,16,13,0,0,18,13,0,0,58,13,0,0,61,13,0,0,68,13,0,0,70,13,0,0,72,13,0,0,74,13,0,0,78,13,0,0,87,13,0,0,87,13,0,0,95,13,0,0,99,13,0,0,102,13,0,0,111,13,0,0,122,13,0,0,127,13,0,0,130,13,0,0,131,13,0,0,133,13,0,0,150,13,0,0,154,13,0,0,177,13,0,0,179,13,0,0,187,13,0,0,189,13,0,0,189,13,0,0,192,13,0,0,198,13,0,0,202,13,0,0,202,13,0,0,207,13,0,0,212,13,0,0,214,13,0,0,214,13,0,0,216,13,0,0,223,13,0,0,230,13,0,0,239,13,0,0,242,13,0,0,243,13,0,0,1,14,0,0,58,14,0,0,64,14,0,0,78,14,0,0,80,14,0,0,89,14,0,0,129,14,0,0,130,14,0,0,132,14,0,0,132,14,0,0,135,14,0,0,136,14,0,0,138,14,0,0,138,14,0,0,141,14,0,0,141,14,0,0,148,14,0,0,151,14,0,0,153,14,0,0,159,14,0,0,161,14,0,0,163,14,0,0,165,14,0,0,165,14,0,0,167,14,0,0,167,14,0,0,170,14,0,0,171,14,0,0,173,14,0,0,185,14,0,0,187,14,0,0,189,14,0,0,192,14,0,0,196,14,0,0,198,14,0,0,198,14,0,0,200,14,0,0,205,14,0,0,208,14,0,0,217,14,0,0,220,14,0,0,223,14,0,0,0,15,0,0,0,15,0,0,24,15,0,0,25,15,0,0,32,15,0,0,41,15,0,0,53,15,0,0,53,15,0,0,55,15,0,0,55,15,0,0,57,15,0,0,57,15,0,0,62,15,0,0,71,15,0,0,73,15,0,0,108,15,0,0,113,15,0,0,132,15,0,0,134,15,0,0,151,15,0,0,153,15,0,0,188,15,0,0,198,15,0,0,198,15,0,0,0,16,0,0,73,16,0,0,80,16,0,0,157,16,0,0,160,16,0,0,197,16,0,0,199,16,0,0,199,16,0,0,205,16,0,0,205,16,0,0,208,16,0,0,250,16,0,0,252,16,0,0,72,18,0,0,74,18,0,0,77,18,0,0,80,18,0,0,86,18,0,0,88,18,0,0,88,18,0,0,90,18,0,0,93,18,0,0,96,18,0,0,136,18,0,0,138,18,0,0,141,18,0,0,144,18,0,0,176,18,0,0,178,18,0,0,181,18,0,0,184,18,0,0,190,18,0,0,192,18,0,0,192,18,0,0,194,18,0,0,197,18,0,0,200,18,0,0,214,18,0,0,216,18,0,0,16,19,0,0,18,19,0,0,21,19,0,0,24,19,0,0,90,19,0,0,93,19,0,0,95,19,0,0,105,19,0,0,113,19,0,0,128,19,0,0,143,19,0,0,160,19,0,0,245,19,0,0,248,19,0,0,253,19,0,0,1,20,0,0,108,22,0,0,111,22,0,0,127,22,0,0,129,22,0,0,154,22,0,0,160,22,0,0,234,22,0,0,238,22,0,0,248,22,0,0,0,23,0,0,12,23,0,0,14,23,0,0,20,23,0,0,32,23,0,0,52,23,0,0,64,23,0,0,83,23,0,0,96,23,0,0,108,23,0,0,110,23,0,0,112,23,0,0,114,23,0,0,115,23,0,0,128,23,0,0,211,23,0,0,215,23,0,0,215,23,0,0,220,23,0,0,221,23,0,0,224,23,0,0,233,23,0,0,11,24,0,0,13,24,0,0,16,24,0,0,25,24,0,0,32,24,0,0,119,24,0,0,128,24,0,0,170,24,0,0,176,24,0,0,245,24,0,0,0,25,0,0,30,25,0,0,32,25,0,0,43,25,0,0,48,25,0,0,59,25,0,0,70,25,0,0,109,25,0,0,112,25,0,0,116,25,0,0,128,25,0,0,171,25,0,0,176,25,0,0,201,25,0,0,208,25,0,0,218,25,0,0,0,26,0,0,27,26,0,0,32,26,0,0,94,26,0,0,96,26,0,0,124,26,0,0,127,26,0,0,137,26,0,0,144,26,0,0,153,26,0,0,167,26,0,0,167,26,0,0,176,26,0,0,189,26,0,0,0,27,0,0,75,27,0,0,80,27,0,0,89,27,0,0,107,27,0,0,115,27,0,0,128,27,0,0,243,27,0,0,0,28,0,0,55,28,0,0,64,28,0,0,73,28,0,0,77,28,0,0,125,28,0,0,208,28,0,0,210,28,0,0,212,28,0,0,246,28,0,0,248,28,0,0,249,28,0,0,0,29,0,0,245,29,0,0,252,29,0,0,21,31,0,0,24,31,0,0,29,31,0,0,32,31,0,0,69,31,0,0,72,31,0,0,77,31,0,0,80,31,0,0,87,31,0,0,89,31,0,0,89,31,0,0,91,31,0,0,91,31,0,0,93,31,0,0,93,31,0,0,95,31,0,0,125,31,0,0,128,31,0,0,180,31,0,0,182,31,0,0,188,31,0,0,190,31,0,0,190,31,0,0,194,31,0,0,196,31,0,0,198,31,0,0,204,31,0,0,208,31,0,0,211,31,0,0,214,31,0,0,219,31,0,0,224,31,0,0,236,31,0,0,242,31,0,0,244,31,0,0,246,31,0,0,252,31,0,0,63,32,0,0,64,32,0,0,84,32,0,0,84,32,0,0,113,32,0,0,113,32,0,0,127,32,0,0,127,32,0,0,144,32,0,0,156,32,0,0,208,32,0,0,220,32,0,0,225,32,0,0,225,32,0,0,229,32,0,0,240,32,0,0,2,33,0,0,2,33,0,0,7,33,0,0,7,33,0,0,10,33,0,0,19,33,0,0,21,33,0,0,21,33,0,0,24,33,0,0,29,33,0,0,36,33,0,0,36,33,0,0,38,33,0,0,38,33,0,0,40,33,0,0,40,33,0,0,42,33,0,0,57,33,0,0,60,33,0,0,63,33,0,0,69,33,0,0,73,33,0,0,78,33,0,0,78,33,0,0,96,33,0,0,136,33,0,0,0,44,0,0,46,44,0,0,48,44,0,0,94,44,0,0,96,44,0,0,228,44,0,0,235,44,0,0,243,44,0,0,0,45,0,0,37,45,0,0,39,45,0,0,39,45,0,0,45,45,0,0,45,45,0,0,48,45,0,0,103,45,0,0,111,45,0,0,111,45,0,0,127,45,0,0,150,45,0,0,160,45,0,0,166,45,0,0,168,45,0,0,174,45,0,0,176,45,0,0,182,45,0,0,184,45,0,0,190,45,0,0,192,45,0,0,198,45,0,0,200,45,0,0,206,45,0,0,208,45,0,0,214,45,0,0,216,45,0,0,222,45,0,0,224,45,0,0,255,45,0,0,5,48,0,0,7,48,0,0,33,48,0,0,47,48,0,0,49,48,0,0,53,48,0,0,56,48,0,0,60,48,0,0,65,48,0,0,150,48,0,0,153,48,0,0,154,48,0,0,157,48,0,0,159,48,0,0,161,48,0,0,250,48,0,0,252,48,0,0,255,48,0,0,5,49,0,0,45,49,0,0,49,49,0,0,142,49,0,0,160,49,0,0,186,49,0,0,240,49,0,0,255,49,0,0,0,52,0,0,181,77,0,0,0,78,0,0,213,159,0,0,0,160,0,0,140,164,0,0,208,164,0,0,253,164,0,0,0,165,0,0,12,166,0,0,16,166,0,0,43,166,0,0,64,166,0,0,111,166,0,0,116,166,0,0,125,166,0,0,127,166,0,0,241,166,0,0,23,167,0,0,31,167,0,0,34,167,0,0,136,167,0,0,139,167,0,0,173,167,0,0,176,167,0,0,183,167,0,0,247,167,0,0,39,168,0,0,64,168,0,0,115,168,0,0,128,168,0,0,196,168,0,0,208,168,0,0,217,168,0,0,224,168,0,0,247,168,0,0,251,168,0,0,251,168,0,0,253,168,0,0,253,168,0,0,0,169,0,0,45,169,0,0,48,169,0,0,83,169,0,0,96,169,0,0,124,169,0,0,128,169,0,0,192,169,0,0,207,169,0,0,217,169,0,0,224,169,0,0,254,169,0,0,0,170,0,0,54,170,0,0,64,170,0,0,77,170,0,0,80,170,0,0,89,170,0,0,96,170,0,0,118,170,0,0,122,170,0,0,194,170,0,0,219,170,0,0,221,170,0,0,224,170,0,0,239,170,0,0,242,170,0,0,246,170,0,0,1,171,0,0,6,171,0,0,9,171,0,0,14,171,0,0,17,171,0,0,22,171,0,0,32,171,0,0,38,171,0,0,40,171,0,0,46,171,0,0,48,171,0,0,90,171,0,0,92,171,0,0,101,171,0,0,112,171,0,0,234,171,0,0,236,171,0,0,237,171,0,0,240,171,0,0,249,171,0,0,0,172,0,0,163,215,0,0,176,215,0,0,198,215,0,0,203,215,0,0,251,215,0,0,0,249,0,0,109,250,0,0,112,250,0,0,217,250,0,0,0,251,0,0,6,251,0,0,19,251,0,0,23,251,0,0,29,251,0,0,40,251,0,0,42,251,0,0,54,251,0,0,56,251,0,0,60,251,0,0,62,251,0,0,62,251,0,0,64,251,0,0,65,251,0,0,67,251,0,0,68,251,0,0,70,251,0,0,177,251,0,0,211,251,0,0,93,252,0,0,100,252,0,0,61,253,0,0,80,253,0,0,143,253,0,0,146,253,0,0,199,253,0,0,240,253,0,0,249,253,0,0,0,254,0,0,15,254,0,0,32,254,0,0,47,254,0,0,51,254,0,0,52,254,0,0,77,254,0,0,79,254,0,0,113,254,0,0,113,254,0,0,115,254,0,0,115,254,0,0,119,254,0,0,119,254,0,0,121,254,0,0,121,254,0,0,123,254,0,0,123,254,0,0,125,254,0,0,125,254,0,0,127,254,0,0,252,254,0,0,16,255,0,0,25,255,0,0,33,255,0,0,58,255,0,0,63,255,0,0,63,255,0,0,65,255,0,0,90,255,0,0,102,255,0,0,190,255,0,0,194,255,0,0,199,255,0,0,202,255,0,0,207,255,0,0,210,255,0,0,215,255,0,0,218,255,0,0,220,255,0,0,0,0,1,0,11,0,1,0,13,0,1,0,38,0,1,0,40,0,1,0,58,0,1,0,60,0,1,0,61,0,1,0,63,0,1,0,77,0,1,0,80,0,1,0,93,0,1,0,128,0,1,0,250,0,1,0,64,1,1,0,116,1,1,0,253,1,1,0,253,1,1,0,128,2,1,0,156,2,1,0,160,2,1,0,208,2,1,0,224,2,1,0,224,2,1,0,0,3,1,0,31,3,1,0,48,3,1,0,74,3,1,0,80,3,1,0,122,3,1,0,128,3,1,0,157,3,1,0,160,3,1,0,195,3,1,0,200,3,1,0,207,3,1,0,209,3,1,0,213,3,1,0,0,4,1,0,157,4,1,0,160,4,1,0,169,4,1], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+102584);
/* memory initializer */ allocate([5,1,0,39,5,1,0,48,5,1,0,99,5,1,0,0,6,1,0,54,7,1,0,64,7,1,0,85,7,1,0,96,7,1,0,103,7,1,0,0,8,1,0,5,8,1,0,8,8,1,0,8,8,1,0,10,8,1,0,53,8,1,0,55,8,1,0,56,8,1,0,60,8,1,0,60,8,1,0,63,8,1,0,85,8,1,0,96,8,1,0,118,8,1,0,128,8,1,0,158,8,1,0,224,8,1,0,242,8,1,0,244,8,1,0,245,8,1,0,0,9,1,0,21,9,1,0,32,9,1,0,57,9,1,0,128,9,1,0,183,9,1,0,190,9,1,0,191,9,1,0,0,10,1,0,3,10,1,0,5,10,1,0,6,10,1,0,12,10,1,0,19,10,1,0,21,10,1,0,23,10,1,0,25,10,1,0,51,10,1,0,56,10,1,0,58,10,1,0,63,10,1,0,63,10,1,0,96,10,1,0,124,10,1,0,128,10,1,0,156,10,1,0,192,10,1,0,199,10,1,0,201,10,1,0,230,10,1,0,0,11,1,0,53,11,1,0,64,11,1,0,85,11,1,0,96,11,1,0,114,11,1,0,128,11,1,0,145,11,1,0,0,12,1,0,72,12,1,0,128,12,1,0,178,12,1,0,192,12,1,0,242,12,1,0,0,16,1,0,70,16,1,0,102,16,1,0,111,16,1,0,127,16,1,0,186,16,1,0,208,16,1,0,232,16,1,0,240,16,1,0,249,16,1,0,0,17,1,0,52,17,1,0,54,17,1,0,63,17,1,0,80,17,1,0,115,17,1,0,118,17,1,0,118,17,1,0,128,17,1,0,196,17,1,0,202,17,1,0,204,17,1,0,208,17,1,0,218,17,1,0,220,17,1,0,220,17,1,0,0,18,1,0,17,18,1,0,19,18,1,0,55,18,1,0,128,18,1,0,134,18,1,0,136,18,1,0,136,18,1,0,138,18,1,0,141,18,1,0,143,18,1,0,157,18,1,0,159,18,1,0,168,18,1,0,176,18,1,0,234,18,1,0,240,18,1,0,249,18,1,0,0,19,1,0,3,19,1,0,5,19,1,0,12,19,1,0,15,19,1,0,16,19,1,0,19,19,1,0,40,19,1,0,42,19,1,0,48,19,1,0,50,19,1,0,51,19,1,0,53,19,1,0,57,19,1,0,60,19,1,0,68,19,1,0,71,19,1,0,72,19,1,0,75,19,1,0,77,19,1,0,80,19,1,0,80,19,1,0,87,19,1,0,87,19,1,0,93,19,1,0,99,19,1,0,102,19,1,0,108,19,1,0,112,19,1,0,116,19,1,0,128,20,1,0,197,20,1,0,199,20,1,0,199,20,1,0,208,20,1,0,217,20,1,0,128,21,1,0,181,21,1,0,184,21,1,0,192,21,1,0,216,21,1,0,221,21,1,0,0,22,1,0,64,22,1,0,68,22,1,0,68,22,1,0,80,22,1,0,89,22,1,0,128,22,1,0,183,22,1,0,192,22,1,0,201,22,1,0,0,23,1,0,25,23,1,0,29,23,1,0,43,23,1,0,48,23,1,0,57,23,1,0,160,24,1,0,233,24,1,0,255,24,1,0,255,24,1,0,192,26,1,0,248,26,1,0,0,32,1,0,153,35,1,0,0,36,1,0,110,36,1,0,128,36,1,0,67,37,1,0,0,48,1,0,46,52,1,0,0,68,1,0,70,70,1,0,0,104,1,0,56,106,1,0,64,106,1,0,94,106,1,0,96,106,1,0,105,106,1,0,208,106,1,0,237,106,1,0,240,106,1,0,244,106,1,0,0,107,1,0,54,107,1,0,64,107,1,0,67,107,1,0,80,107,1,0,89,107,1,0,99,107,1,0,119,107,1,0,125,107,1,0,143,107,1,0,0,111,1,0,68,111,1,0,80,111,1,0,126,111,1,0,143,111,1,0,159,111,1,0,0,176,1,0,1,176,1,0,0,188,1,0,106,188,1,0,112,188,1,0,124,188,1,0,128,188,1,0,136,188,1,0,144,188,1,0,153,188,1,0,157,188,1,0,158,188,1,0,101,209,1,0,105,209,1,0,109,209,1,0,114,209,1,0,123,209,1,0,130,209,1,0,133,209,1,0,139,209,1,0,170,209,1,0,173,209,1,0,66,210,1,0,68,210,1,0,0,212,1,0,84,212,1,0,86,212,1,0,156,212,1,0,158,212,1,0,159,212,1,0,162,212,1,0,162,212,1,0,165,212,1,0,166,212,1,0,169,212,1,0,172,212,1,0,174,212,1,0,185,212,1,0,187,212,1,0,187,212,1,0,189,212,1,0,195,212,1,0,197,212,1,0,5,213,1,0,7,213,1,0,10,213,1,0,13,213,1,0,20,213,1,0,22,213,1,0,28,213,1,0,30,213,1,0,57,213,1,0,59,213,1,0,62,213,1,0,64,213,1,0,68,213,1,0,70,213,1,0,70,213,1,0,74,213,1,0,80,213,1,0,82,213,1,0,165,214,1,0,168,214,1,0,192,214,1,0,194,214,1,0,218,214,1,0,220,214,1,0,250,214,1,0,252,214,1,0,20,215,1,0,22,215,1,0,52,215,1,0,54,215,1,0,78,215,1,0,80,215,1,0,110,215,1,0,112,215,1,0,136,215,1,0,138,215,1,0,168,215,1,0,170,215,1,0,194,215,1,0,196,215,1,0,203,215,1,0,206,215,1,0,255,215,1,0,0,218,1,0,54,218,1,0,59,218,1,0,108,218,1,0,117,218,1,0,117,218,1,0,132,218,1,0,132,218,1,0,155,218,1,0,159,218,1,0,161,218,1,0,175,218,1,0,0,232,1,0,196,232,1,0,208,232,1,0,214,232,1,0,0,238,1,0,3,238,1,0,5,238,1,0,31,238,1,0,33,238,1,0,34,238,1,0,36,238,1,0,36,238,1,0,39,238,1,0,39,238,1,0,41,238,1,0,50,238,1,0,52,238,1,0,55,238,1,0,57,238,1,0,57,238,1,0,59,238,1,0,59,238,1,0,66,238,1,0,66,238,1,0,71,238,1,0,71,238,1,0,73,238,1,0,73,238,1,0,75,238,1,0,75,238,1,0,77,238,1,0,79,238,1,0,81,238,1,0,82,238,1,0,84,238,1,0,84,238,1,0,87,238,1,0,87,238,1,0,89,238,1,0,89,238,1,0,91,238,1,0,91,238,1,0,93,238,1,0,93,238,1,0,95,238,1,0,95,238,1,0,97,238,1,0,98,238,1,0,100,238,1,0,100,238,1,0,103,238,1,0,106,238,1,0,108,238,1,0,114,238,1,0,116,238,1,0,119,238,1,0,121,238,1,0,124,238,1,0,126,238,1,0,126,238,1,0,128,238,1,0,137,238,1,0,139,238,1,0,155,238,1,0,161,238,1,0,163,238,1,0,165,238,1,0,169,238,1,0,171,238,1,0,187,238,1,0,0,0,2,0,214,166,2,0,0,167,2,0,52,183,2,0,64,183,2,0,29,184,2,0,32,184,2,0,161,206,2,0,0,248,2,0,29,250,2,0,0,1,14,0,239,1,14,0,65,0,0,0,90,0,0,0,97,0,0,0,122,0,0,0,170,0,0,0,170,0,0,0,181,0,0,0,181,0,0,0,186,0,0,0,186,0,0,0,192,0,0,0,214,0,0,0,216,0,0,0,246,0,0,0,248,0,0,0,193,2,0,0,198,2,0,0,209,2,0,0,224,2,0,0,228,2,0,0,236,2,0,0,236,2,0,0,238,2,0,0,238,2,0,0,112,3,0,0,116,3,0,0,118,3,0,0,119,3,0,0,123,3,0,0,125,3,0,0,127,3,0,0,127,3,0,0,134,3,0,0,134,3,0,0,136,3,0,0,138,3,0,0,140,3,0,0,140,3,0,0,142,3,0,0,161,3,0,0,163,3,0,0,245,3,0,0,247,3,0,0,129,4,0,0,138,4,0,0,47,5,0,0,49,5,0,0,86,5,0,0,89,5,0,0,89,5,0,0,97,5,0,0,135,5,0,0,208,5,0,0,234,5,0,0,240,5,0,0,242,5,0,0,32,6,0,0,74,6,0,0,110,6,0,0,111,6,0,0,113,6,0,0,211,6,0,0,213,6,0,0,213,6,0,0,229,6,0,0,230,6,0,0,238,6,0,0,239,6,0,0,250,6,0,0,252,6,0,0,255,6,0,0,255,6,0,0,16,7,0,0,16,7,0,0,18,7,0,0,47,7,0,0,77,7,0,0,165,7,0,0,177,7,0,0,177,7,0,0,202,7,0,0,234,7,0,0,244,7,0,0,245,7,0,0,250,7,0,0,250,7,0,0,0,8,0,0,21,8,0,0,26,8,0,0,26,8,0,0,36,8,0,0,36,8,0,0,40,8,0,0,40,8,0,0,64,8,0,0,88,8,0,0,160,8,0,0,180,8,0,0,4,9,0,0,57,9,0,0,61,9,0,0,61,9,0,0,80,9,0,0,80,9,0,0,88,9,0,0,97,9,0,0,113,9,0,0,128,9,0,0,133,9,0,0,140,9,0,0,143,9,0,0,144,9,0,0,147,9,0,0,168,9,0,0,170,9,0,0,176,9,0,0,178,9,0,0,178,9,0,0,182,9,0,0,185,9,0,0,189,9,0,0,189,9,0,0,206,9,0,0,206,9,0,0,220,9,0,0,221,9,0,0,223,9,0,0,225,9,0,0,240,9,0,0,241,9,0,0,5,10,0,0,10,10,0,0,15,10,0,0,16,10,0,0,19,10,0,0,40,10,0,0,42,10,0,0,48,10,0,0,50,10,0,0,51,10,0,0,53,10,0,0,54,10,0,0,56,10,0,0,57,10,0,0,89,10,0,0,92,10,0,0,94,10,0,0,94,10,0,0,114,10,0,0,116,10,0,0,133,10,0,0,141,10,0,0,143,10,0,0,145,10,0,0,147,10,0,0,168,10,0,0,170,10,0,0,176,10,0,0,178,10,0,0,179,10,0,0,181,10,0,0,185,10,0,0,189,10,0,0,189,10,0,0,208,10,0,0,208,10,0,0,224,10,0,0,225,10,0,0,249,10,0,0,249,10,0,0,5,11,0,0,12,11,0,0,15,11,0,0,16,11,0,0,19,11,0,0,40,11,0,0,42,11,0,0,48,11,0,0,50,11,0,0,51,11,0,0,53,11,0,0,57,11,0,0,61,11,0,0,61,11,0,0,92,11,0,0,93,11,0,0,95,11,0,0,97,11,0,0,113,11,0,0,113,11,0,0,131,11,0,0,131,11,0,0,133,11,0,0,138,11,0,0,142,11,0,0,144,11,0,0,146,11,0,0,149,11,0,0,153,11,0,0,154,11,0,0,156,11,0,0,156,11,0,0,158,11,0,0,159,11,0,0,163,11,0,0,164,11,0,0,168,11,0,0,170,11,0,0,174,11,0,0,185,11,0,0,208,11,0,0,208,11,0,0,5,12,0,0,12,12,0,0,14,12,0,0,16,12,0,0,18,12,0,0,40,12,0,0,42,12,0,0,57,12,0,0,61,12,0,0,61,12,0,0,88,12,0,0,90,12,0,0,96,12,0,0,97,12,0,0,133,12,0,0,140,12,0,0,142,12,0,0,144,12,0,0,146,12,0,0,168,12,0,0,170,12,0,0,179,12,0,0,181,12,0,0,185,12,0,0,189,12,0,0,189,12,0,0,222,12,0,0,222,12,0,0,224,12,0,0,225,12,0,0,241,12,0,0,242,12,0,0,5,13,0,0,12,13,0,0,14,13,0,0,16,13,0,0,18,13,0,0,58,13,0,0,61,13,0,0,61,13,0,0,78,13,0,0,78,13,0,0,95,13,0,0,97,13,0,0,122,13,0,0,127,13,0,0,133,13,0,0,150,13,0,0,154,13,0,0,177,13,0,0,179,13,0,0,187,13,0,0,189,13,0,0,189,13,0,0,192,13,0,0,198,13,0,0,1,14,0,0,48,14,0,0,50,14,0,0,50,14,0,0,64,14,0,0,70,14,0,0,129,14,0,0,130,14,0,0,132,14,0,0,132,14,0,0,135,14,0,0,136,14,0,0,138,14,0,0,138,14,0,0,141,14,0,0,141,14,0,0,148,14,0,0,151,14,0,0,153,14,0,0,159,14,0,0,161,14,0,0,163,14,0,0,165,14,0,0,165,14,0,0,167,14,0,0,167,14,0,0,170,14,0,0,171,14,0,0,173,14,0,0,176,14,0,0,178,14,0,0,178,14,0,0,189,14,0,0,189,14,0,0,192,14,0,0,196,14,0,0,198,14,0,0,198,14,0,0,220,14,0,0,223,14,0,0,0,15,0,0,0,15,0,0,64,15,0,0,71,15,0,0,73,15,0,0,108,15,0,0,136,15,0,0,140,15,0,0,0,16,0,0,42,16,0,0,63,16,0,0,63,16,0,0,80,16,0,0,85,16,0,0,90,16,0,0,93,16,0,0,97,16,0,0,97,16,0,0,101,16,0,0,102,16,0,0,110,16,0,0,112,16,0,0,117,16,0,0,129,16,0,0,142,16,0,0,142,16,0,0,160,16,0,0,197,16,0,0,199,16,0,0,199,16,0,0,205,16,0,0,205,16,0,0,208,16,0,0,250,16,0,0,252,16,0,0,72,18,0,0,74,18,0,0,77,18,0,0,80,18,0,0,86,18,0,0,88,18,0,0,88,18,0,0,90,18,0,0,93,18,0,0,96,18,0,0,136,18,0,0,138,18,0,0,141,18,0,0,144,18,0,0,176,18,0,0,178,18,0,0,181,18,0,0,184,18,0,0,190,18,0,0,192,18,0,0,192,18,0,0,194,18,0,0,197,18,0,0,200,18,0,0,214,18,0,0,216,18,0,0,16,19,0,0,18,19,0,0,21,19,0,0,24,19,0,0,90,19,0,0,128,19,0,0,143,19,0,0,160,19,0,0,245,19,0,0,248,19,0,0,253,19,0,0,1,20,0,0,108,22,0,0,111,22,0,0,127,22,0,0,129,22,0,0,154,22,0,0,160,22,0,0,234,22,0,0,238,22,0,0,248,22,0,0,0,23,0,0,12,23,0,0,14,23,0,0,17,23,0,0,32,23,0,0,49,23,0,0,64,23,0,0,81,23,0,0,96,23,0,0,108,23,0,0,110,23,0,0,112,23,0,0,128,23,0,0,179,23,0,0,215,23,0,0,215,23,0,0,220,23,0,0,220,23,0,0,32,24,0,0,119,24,0,0,128,24,0,0,168,24,0,0,170,24,0,0,170,24,0,0,176,24,0,0,245,24,0,0,0,25,0,0,30,25,0,0,80,25,0,0,109,25,0,0,112,25,0,0,116,25,0,0,128,25,0,0,171,25,0,0,176,25,0,0,201,25,0,0,0,26,0,0,22,26,0,0,32,26,0,0,84,26,0,0,167,26,0,0,167,26,0,0,5,27,0,0,51,27,0,0,69,27,0,0,75,27,0,0,131,27,0,0,160,27,0,0,174,27,0,0,175,27,0,0,186,27,0,0,229,27,0,0,0,28,0,0,35,28,0,0,77,28,0,0,79,28,0,0,90,28,0,0,125,28,0,0,233,28,0,0,236,28,0,0,238,28,0,0,241,28,0,0,245,28,0,0,246,28,0,0,0,29,0,0,191,29,0,0,0,30,0,0,21,31,0,0,24,31,0,0,29,31,0,0,32,31,0,0,69,31,0,0,72,31,0,0,77,31,0,0,80,31,0,0,87,31,0,0,89,31,0,0,89,31,0,0,91,31,0,0,91,31,0,0,93,31,0,0,93,31,0,0,95,31,0,0,125,31,0,0,128,31,0,0,180,31,0,0,182,31,0,0,188,31,0,0,190,31,0,0,190,31,0,0,194,31,0,0,196,31,0,0,198,31,0,0,204,31,0,0,208,31,0,0,211,31,0,0,214,31,0,0,219,31,0,0,224,31,0,0,236,31,0,0,242,31,0,0,244,31,0,0,246,31,0,0,252,31,0,0,113,32,0,0,113,32,0,0,127,32,0,0,127,32,0,0,144,32,0,0,156,32,0,0,2,33,0,0,2,33,0,0,7,33,0,0,7,33,0,0,10,33,0,0,19,33,0,0,21,33,0,0,21,33,0,0,24,33,0,0,29,33,0,0,36,33,0,0,36,33,0,0,38,33,0,0,38,33,0,0,40,33,0,0,40,33,0,0,42,33,0,0,57,33,0,0,60,33,0,0,63,33,0,0,69,33,0,0,73,33,0,0,78,33,0,0,78,33,0,0,96,33,0,0,136,33,0,0,0,44,0,0,46,44,0,0,48,44,0,0,94,44,0,0,96,44,0,0,228,44,0,0,235,44,0,0,238,44,0,0,242,44,0,0,243,44,0,0,0,45,0,0,37,45,0,0,39,45,0,0,39,45,0,0,45,45,0,0,45,45,0,0,48,45,0,0,103,45,0,0,111,45,0,0,111,45,0,0,128,45,0,0,150,45,0,0,160,45,0,0,166,45,0,0,168,45,0,0,174,45,0,0,176,45,0,0,182,45,0,0,184,45,0,0,190,45,0,0,192,45,0,0,198,45,0,0,200,45,0,0,206,45,0,0,208,45,0,0,214,45,0,0,216,45,0,0,222,45,0,0,5,48,0,0,7,48,0,0,33,48,0,0,41,48,0,0,49,48,0,0,53,48,0,0,56,48,0,0,60,48,0,0,65,48,0,0,150,48,0,0,157,48,0,0,159,48,0,0,161,48,0,0,250,48,0,0,252,48,0,0,255,48,0,0,5,49,0,0,45,49,0,0,49,49,0,0,142,49,0,0,160,49,0,0,186,49,0,0,240,49,0,0,255,49,0,0,0,52,0,0,181,77,0,0,0,78,0,0,213,159,0,0,0,160,0,0,140,164,0,0,208,164,0,0,253,164,0,0,0,165,0,0,12,166,0,0,16,166,0,0,31,166,0,0,42,166,0,0,43,166,0,0,64,166,0,0,110,166,0,0,127,166,0,0,157,166,0,0,160,166,0,0,239,166,0,0,23,167,0,0,31,167,0,0,34,167,0,0,136,167,0,0,139,167,0,0,173,167,0,0,176,167,0,0,183,167,0,0,247,167,0,0,1,168,0,0,3,168,0,0,5,168,0,0,7,168,0,0,10,168,0,0,12,168,0,0,34,168,0,0,64,168,0,0,115,168,0,0,130,168,0,0,179,168,0,0,242,168,0,0,247,168,0,0,251,168,0,0,251,168,0,0,253,168,0,0,253,168,0,0,10,169,0,0,37,169,0,0,48,169,0,0,70,169,0,0,96,169,0,0,124,169,0,0,132,169,0,0,178,169,0,0,207,169,0,0,207,169,0,0,224,169,0,0,228,169,0,0,230,169,0,0,239,169,0,0,250,169,0,0,254,169,0,0,0,170,0,0,40,170,0,0,64,170,0,0,66,170,0,0,68,170,0,0,75,170,0,0,96,170,0,0,118,170,0,0,122,170,0,0,122,170,0,0,126,170,0,0,175,170,0,0,177,170,0,0,177,170,0,0,181,170,0,0,182,170,0,0,185,170,0,0,189,170,0,0,192,170,0,0,192,170,0,0,194,170,0,0,194,170,0,0,219,170,0,0,221,170,0,0,224,170,0,0,234,170,0,0,242,170,0,0,244,170,0,0,1,171,0,0,6,171,0,0,9,171,0,0,14,171,0,0,17,171,0,0,22,171,0,0,32,171,0,0,38,171,0,0,40,171,0,0,46,171,0,0,48,171,0,0,90,171,0,0,92,171,0,0,101,171,0,0,112,171,0,0,226,171,0,0,0,172,0,0,163,215,0,0,176,215,0,0,198,215,0,0,203,215,0,0,251,215,0,0,0,249,0,0,109,250,0,0,112,250,0,0,217,250,0,0,0,251,0,0,6,251,0,0,19,251,0,0,23,251,0,0,29,251,0,0,29,251,0,0,31,251,0,0,40,251,0,0,42,251,0,0,54,251,0,0,56,251,0,0,60,251,0,0,62,251,0,0,62,251,0,0,64,251,0,0,65,251,0,0,67,251,0,0,68,251,0,0,70,251,0,0,177,251,0,0,211,251,0,0,93,252,0,0,100,252,0,0,61,253,0,0,80,253,0,0,143,253,0,0,146,253,0,0,199,253,0,0,240,253,0,0,249,253,0,0,113,254,0,0,113,254,0,0,115,254,0,0,115,254,0,0,119,254,0,0,119,254,0,0,121,254,0,0,121,254,0,0,123,254,0,0,123,254,0,0,125,254,0,0,125,254,0,0,127,254,0,0,252,254,0,0,33,255,0,0,58,255,0,0,65,255,0,0,90,255,0,0,102,255,0,0,157,255,0,0,160,255,0,0,190,255,0,0,194,255,0,0,199,255,0,0,202,255,0,0,207,255,0,0,210,255,0,0,215,255,0,0,218,255,0,0,220,255,0,0,0,0,1,0,11,0,1,0,13,0,1,0,38,0,1,0,40,0,1,0,58,0,1,0,60,0,1,0,61,0,1,0,63,0,1,0,77,0,1,0,80,0,1,0,93,0,1,0,128,0,1,0,250,0,1,0,64,1,1,0,116,1,1,0,128,2,1,0,156,2,1,0,160,2,1,0,208,2,1,0,0,3,1,0,31,3,1,0,48,3,1,0,74,3,1,0,80,3,1,0,117,3,1,0,128,3,1,0,157,3,1,0,160,3,1,0,195,3,1,0,200,3,1,0,207,3,1,0,209,3,1,0,213,3,1,0,0,4,1,0,157,4,1,0,0,5,1,0,39,5,1,0,48,5,1,0,99,5,1,0,0,6,1,0,54,7,1,0,64,7,1,0,85,7,1,0,96,7,1,0,103,7,1,0,0,8,1,0,5,8,1,0,8,8,1,0,8,8,1,0,10,8,1,0,53,8,1,0,55,8,1,0,56,8,1,0,60,8,1,0,60,8,1,0,63,8,1,0,85,8,1,0,96,8,1,0,118,8,1,0,128,8,1,0,158,8,1,0,224,8,1,0,242,8,1,0,244,8,1,0,245,8,1,0,0,9,1,0,21,9,1,0,32,9,1,0,57,9,1,0,128,9,1,0,183,9,1,0,190,9,1,0,191,9,1,0,0,10,1,0,0,10,1,0,16,10,1,0,19,10,1,0,21,10,1,0,23,10,1,0,25,10,1,0,51,10,1,0,96,10,1,0,124,10,1,0,128,10,1,0,156,10,1,0,192,10,1,0,199,10,1,0,201,10,1,0,228,10,1,0,0,11,1,0,53,11,1,0,64,11,1,0,85,11,1,0,96,11,1,0,114,11,1,0,128,11,1,0,145,11,1,0,0,12,1,0,72,12,1,0,128,12,1,0,178,12,1,0,192,12,1,0,242,12,1,0,3,16,1,0,55,16,1,0,131,16,1,0,175,16,1,0,208,16,1,0,232,16,1,0,3,17,1,0,38,17,1,0,80,17,1,0,114,17,1,0,118,17,1,0,118,17,1,0,131,17,1,0,178,17,1,0,193,17,1,0,196,17,1,0,218,17,1,0,218,17,1,0,220,17,1,0,220,17,1,0,0,18,1,0,17,18,1,0,19,18,1,0,43,18,1,0,128,18,1,0,134,18,1,0,136,18,1,0,136,18,1,0,138,18,1,0,141,18,1,0,143,18,1,0,157,18,1,0,159,18,1,0,168,18,1,0,176,18,1,0,222,18,1,0,5,19,1,0,12,19,1,0,15,19,1,0,16,19,1,0,19,19,1,0,40,19,1,0,42,19,1,0,48,19,1,0,50,19,1,0,51,19,1,0,53,19,1,0,57,19,1,0,61,19,1,0,61,19,1,0,80,19,1,0,80,19,1,0,93,19,1,0,97,19,1,0,128,20,1,0,175,20,1,0,196,20,1,0,197,20,1,0,199,20,1,0,199,20,1,0,128,21,1,0,174,21,1,0,216,21,1,0,219,21,1,0,0,22,1,0,47,22,1,0,68,22,1,0,68,22,1,0,128,22,1,0,170,22,1,0,0,23,1,0,25,23,1,0,160,24,1,0,223,24,1,0,255,24,1,0,255,24,1,0,192,26,1,0,248,26,1,0,0,32,1,0,153,35,1,0,0,36,1,0,110,36,1,0,128,36,1,0,67,37,1,0,0,48,1,0,46,52,1,0,0,68,1,0,70,70,1,0,0,104,1,0,56,106,1,0,64,106,1,0,94,106,1,0,208,106,1,0,237,106,1,0,0,107,1,0,47,107,1,0,64,107,1,0,67,107,1,0,99,107,1,0,119,107,1,0,125,107,1,0,143,107,1,0,0,111,1,0,68,111,1,0,80,111,1,0,80,111,1,0,147,111,1,0,159,111,1,0,0,176,1,0,1,176,1,0,0,188,1,0,106,188,1,0,112,188,1,0,124,188,1,0,128,188,1,0,136,188,1,0,144,188,1,0,153,188,1,0,0,212,1,0,84,212,1,0,86,212,1,0,156,212,1,0,158,212,1,0,159,212,1,0,162,212,1,0,162,212,1,0,165,212,1,0,166,212,1,0,169,212,1,0,172,212,1,0,174,212,1,0,185,212,1,0,187,212,1,0,187,212,1,0,189,212,1,0,195,212,1,0,197,212,1,0,5,213,1,0,7,213,1,0,10,213,1,0,13,213,1,0,20,213,1,0,22,213,1,0,28,213,1,0,30,213,1,0,57,213,1,0,59,213,1,0,62,213,1,0,64,213,1,0,68,213,1,0,70,213,1,0,70,213,1,0,74,213,1,0,80,213,1,0,82,213,1,0,165,214,1,0,168,214,1,0,192,214,1,0,194,214,1,0,218,214,1,0,220,214,1,0,250,214,1,0,252,214,1,0,20,215,1,0,22,215,1,0,52,215,1,0,54,215,1,0,78,215,1,0,80,215,1,0,110,215,1,0,112,215,1,0,136,215,1,0,138,215,1,0,168,215,1,0,170,215,1,0,194,215,1,0,196,215,1,0,203,215,1,0,0,232,1,0,196,232,1,0,0,238,1,0,3,238,1,0,5,238,1,0,31,238,1,0,33,238,1,0,34,238,1,0,36,238,1,0,36,238,1,0,39,238,1,0,39,238,1,0,41,238,1,0,50,238,1,0,52,238,1,0,55,238,1,0,57,238,1,0,57,238,1,0,59,238,1,0,59,238,1,0,66,238,1,0,66,238,1,0,71,238,1,0,71,238,1,0,73,238,1,0,73,238,1,0,75,238,1,0,75,238,1,0,77,238,1,0,79,238,1,0,81,238,1,0,82,238,1,0,84,238,1,0,84,238,1,0,87,238,1,0,87,238,1,0,89,238,1,0,89,238,1,0,91,238,1,0,91,238,1,0,93,238,1,0,93,238,1,0,95,238,1,0,95,238,1,0,97,238,1,0,98,238,1,0,100,238,1,0,100,238,1,0,103,238,1,0,106,238,1,0,108,238,1,0,114,238,1,0,116,238,1,0,119,238,1,0,121,238,1,0,124,238,1,0,126,238,1,0,126,238,1,0,128,238,1,0,137,238,1,0,139,238,1,0,155,238,1,0,161,238,1,0,163,238,1,0,165,238,1,0,169,238,1,0,171,238,1,0,187,238,1,0,0,0,2,0,214,166,2,0,0,167,2,0,52,183,2,0,64,183,2,0,29,184,2,0,32,184,2,0,161,206,2,0,0,248,2,0,29,250,2,0,0,160,0,0,140,164,0,0,144,164,0,0,198,164,0,0,32,0,0,0,32,0,0,0,160,0,0,0,160,0,0,0,128,22,0,0,128,22,0,0,0,32,0,0,10,32,0,0,40,32,0,0,41,32,0,0,47,32,0,0,47,32,0,0,95,32,0,0,95,32,0,0,0,48,0,0,0,48,0,0,40,32,0,0,40,32,0,0,41,32,0,0,41,32,0,0,32,0,0,0,32,0,0,0,160,0,0,0,160,0,0,0,128,22,0,0,128,22,0,0,0,32,0,0,10,32,0,0,47,32,0,0,47,32,0,0,95,32,0,0,95,32,0,0,0,48,0,0,0,48,0,0,62,30,3,0,6,0,0,0,61,30,3,0,1,0,0,0,55,30,3,0,6,0,0,0,49,30,3,0,6,0,0,0,48,30,3,0,1,0,0,0,47,30,3,0,1,0,0,0,45,30,3,0,2,0,0,0,43,30,3,0,2,0,0,0,152,123,3,0,0,0,0,0,38,30,3,0,3,0,0,0,29,30,3,0,1,0,0,0,197,86,3,0,1,0,0,0,29,30,3,0,1,0,0,0,34,30,3,0,4,0,0,0,192,86,3,0,1,0,0,0,29,30,3,0,1,0,0,0,30,30,3,0,4,0,0,0,29,30,3,0,1,0,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,71,23,3,0,1,0,0,0,22,30,3,0,1,0,0,0,28,30,3,0,1,0,0,0,4,87,3,0,1,0,0,0,242,86,3,0,1,0,0,0,25,30,3,0,1,0,0,0,242,86,3,0,1,0,0,0,26,30,3,0,2,0,0,0,242,86,3,0,1,0,0,0,23,30,3,0,2,0,0,0,25,30,3,0,1,0,0,0,42,30,3,0,1,0,0,0,236,86,3,0,1,0,0,0,152,123,3,0,0,0,0,0,41,30,3,0,1,0,0,0,11,24,3,0,88,0,0,0,148,3,0,0,156,33,3,0,21,0,0,0,106,33,3,0,26,0,0,0,132,33,3,0,22,0,0,0,154,33,3,0,2,0,0,0,143,39,3,0,45,0,0,0,114,39,3,0,29,0,0,0,84,39,3,0,30,0,0,0,35,39,3,0,49,0,0,0,243,38,3,0,48,0,0,0,197,38,3,0,46,0,0,0,155,38,3,0,42,0,0,0,110,38,3,0,45,0,0,0,89,38,3,0,21,0,0,0,45,38,3,0,44,0,0,0,4,38,3,0,41,0,0,0,185,37,3,0,75,0,0,0,111,37,3,0,74,0,0,0,24,37,3,0,87,0,0,0,232,36,3,0,48,0,0,0,211,36,3,0,21,0,0,0,149,36,3,0,62,0,0,0,11,24,3,0,88,0,0,0,250,3,0,0,110,36,3,0,14,0,0,0,124,36,3,0,25,0,0,0,81,36,3,0,29,0,0,0,224,86,3,0,1,0,0,0,52,36,3,0,29,0,0,0,224,86,3,0,1,0,0,0,191,35,3,0,23,0,0,0,214,35,3,0,94,0,0,0,91,35,3,0,31,0,0,0,41,30,3,0,1,0,0,0,122,35,3,0,69,0,0,0,43,35,3,0,3,0,0,0,46,35,3,0,45,0,0,0,211,33,3,0,2,0,0,0,202,34,3,0,35,0,0,0,23,30,3,0,2,0,0,0,237,34,3,0,62,0,0,0,43,35,3,0,3,0,0,0,147,34,3,0,55,0,0,0,211,33,3,0,2,0,0,0,100,34,3,0,47,0,0,0,211,33,3,0,2,0,0,0,43,34,3,0,24,0,0,0,67,34,3,0,33,0,0,0,11,34,3,0,32,0,0,0,211,33,3,0,2,0,0,0,213,33,3,0,20,0,0,0,233,33,3,0,34,0,0,0,177,33,3,0,34,0,0,0,211,33,3,0,2,0,0,0,106,45,3,0,12,0,0,0,118,45,3,0,1,0,0,0,227,43,3,0,21,0,0,0,66,45,3,0,29,0,0,0,70,0,0,0,95,45,3,0,11,0,0,0,227,43,3,0,21,0,0,0,66,45,3,0,29,0,0,0,71,0,0,0,1,46,3,0,1,0,0,0,115,46,3,0,3,0,0,0,118,46,3,0,2,0,0,0,88,46,3,0,1,0,0,0,1,46,3,0,1,0,0,0,110,46,3,0,3,0,0,0,113,46,3,0,2,0,0,0,88,46,3,0,1,0,0,0,1,46,3,0,1,0,0,0,106,46,3,0,4,0,0,0,87,46,3,0,1,0,0,0,88,46,3,0,1,0,0,0,1,46,3,0,1,0,0,0,2,46,3,0,6,0,0,0,89,46,3,0,17,0,0,0,88,46,3,0,1,0,0,0,1,46,3,0,1,0,0,0,2,46,3,0,6,0,0,0,75,46,3,0,12,0,0,0,87,46,3,0,1,0,0,0,88,46,3,0,1,0,0,0,1,46,3,0,1,0,0,0,62,46,3,0,13,0,0,0,42,46,3,0,2,0,0,0,47,46,3,0,2,0,0,0,1,46,3,0,1,0,0,0,49,46,3,0,13,0,0,0,42,46,3,0,2,0,0,0,44,46,3,0,3,0,0,0,47,46,3,0,2,0,0,0,1,46,3,0,1,0,0,0,29,46,3,0,13,0,0,0,42,46,3,0,2,0,0,0,44,46,3,0,3,0,0,0,47,46,3,0,2,0,0,0,1,46,3,0,1,0,0,0,2,46,3,0,6,0,0,0,8,46,3,0,19,0,0,0,27,46,3,0,2,0,0,0,125,47,3,0,17,0,0,0,38,0,0,0,152,123,3,0,0,0,0,0,125,47,3,0,17,0,0,0,80,0,0,0,57,49,3,0,79,0,0,0,155,2,0,0,136,49,3,0,44,0,0,0,180,49,3,0,11,0,0,0,191,49,3,0,2,0,0,0,193,49,3,0,3,0,0,0,196,49,3,0,5,0,0,0,201,49,3,0,4,0,0,0,205,49,3,0,4,0,0,0,209,49,3,0,5,0,0,0,214,49,3,0,5,0,0,0,6,56,3,0,3,0,0,0,9,56,3,0,3,0,0,0,12,56,3,0,3,0,0,0,15,56,3,0,3,0,0,0,18,56,3,0,3,0,0,0,21,56,3,0,3,0,0,0,24,56,3,0,3,0,0,0,27,56,3,0,3,0,0,0,30,56,3,0,3,0,0,0,33,56,3,0,3,0,0,0,36,56,3,0,3,0,0,0,39,56,3,0,3,0,0,0,42,56,3,0,7,0,0,0,49,56,3,0,8,0,0,0,57,56,3,0,5,0,0,0,62,56,3,0,5,0,0,0,18,56,3,0,3,0,0,0,67,56,3,0,4,0,0,0,71,56,3,0,4,0,0,0,75,56,3,0,6,0,0,0,81,56,3,0,9,0,0,0,90,56,3,0,7,0,0,0,97,56,3,0,8,0,0,0,105,56,3,0,8,0,0,0,113,56,3,0,3,0,0,0,116,56,3,0,3,0,0,0,119,56,3,0,3,0,0,0,122,56,3,0,3,0,0,0,125,56,3,0,3,0,0,0,128,56,3,0,3,0,0,0,131,56,3,0,3,0,0,0,134,56,3,0,6,0,0,0,140,56,3,0,7,0,0,0,147,56,3,0,9,0,0,0,156,56,3,0,8,0,0,0,164,56,3,0,6,0,0,0,170,56,3,0,8,0,0,0,178,56,3,0,6,0,0,0,184,56,3,0,90,0,0,0,151,0,0,0,152,123,3,0,0,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,1,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,9,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,1,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,19,57,3,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,20,57,3,0,4,0,0,0,152,123,3,0,0,0,0,0,24,57,3,0,2,0,0,0,18,57,3,0,1,0,0,0,18,57,3,0,1,0,0,0,18,57,3,0,1,0,0,0,26,57,3,0,1,0,0,0,26,57,3,0,1,0,0,0,18,57,3,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,5,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,6,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,152,123,3,0,0,0,0,0,27,57,3,0,1,0,0,0,247,60,3,0,1,0,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,26,57,3,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,26,57,3,0,1,0,0,0,26,57,3,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,185,61,3,0,3,0,0,0,188,61,3,0,4,0,0,0,192,61,3,0,6,0,0,0,198,61,3,0,5,0,0,0,185,61,3,0,3,0,0,0,203,61,3,0,5,0,0,0,208,61,3,0,6,0,0,0,214,61,3,0,4,0,0,0,218,61,3,0,5,0,0,0,223,61,3,0,2,0,0,0,225,61,3,0,2,0,0,0,152,123,3,0,0,0,0,0,227,61,3,0,1,0,0,0,228,61,3,0,1,0,0,0,229,61,3,0,3,0,0,0,232,61,3,0,6,0,0,0,238,61,3,0,4,0,0,0,242,61,3,0,5,0,0,0,242,61,3,0,5,0,0,0,65,61,3,0,91,0,0,0,33,0,0,0,0,0,0,0,147,62,3,0,1,0,0,0,2,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,147,62,3,0,1,0,0,0,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,63,61,3,0,1,0,0,0,2,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,63,61,3,0,1,0,0,0,2,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,26,57,3,0,1,0,0,0,2,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,26,57,3,0,1,0,0,0,2,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,26,57,3,0,1,0,0,0,2,17,1,0,0,0,0,0,0,0,0,0,1,0,0,0,18,57,3,0,1,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,18,57,3,0,1,0,0,0,2,7,2,0,0,0,0,0,0,0,0,0,1,0,0,0,18,57,3,0,1,0,0,0,2,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,26,57,3,0,1,0,0,0,2,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,26,57,3,0,1,0,0,0,2,17,1,0,0,0,0,0,0,0,0,0,1,0,0,0,18,57,3,0,1,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,26,57,3,0,1,0,0,0,2,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,26,57,3,0,1,0,0,0,2,17,1,0,0,0,0,0,0,0,0,0,1,0,0,0,18,57,3,0,1,0,0,0,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,61,3,0,1,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,61,3,0,1,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,52,62,3,0,95,0,0,0,46,1,0,0,52,62,3,0,95,0,0,0,56,1,0,0,152,123,3,0,0,0,0,0,63,61,3,0,1,0,0,0,63,61,3,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,9,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,152,123,3,0,0,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,152,123,3,0,0,0,0,0,0,0,0,0,63,61,3,0,1,0,0,0,1,0,0,0,152,123,3,0,0,0,0,0,2,6,1,0,0,0,0,0,0,0,0,0,1,0,0,0,152,123,3,0,0,0,0,0,0,0,0,0,63,61,3,0,1,0,0,0,1,0,0,0,152,123,3,0,0,0,0,0,2,7,1,0,0,0,0,0,0,0,0,0,1,0,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,26,57,3,0,1,0,0,0,26,57,3,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,225,62,3,0,93,0,0,0,5,2,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,82,64,3,0,86,0,0,0,104,0,0,0,249,64,3,0,20,0,0,0,168,64,3,0,81,0,0,0,85,0,0,0,63,65,3,0,81,0,0,0,87,0,0,0,144,65,3,0,83,0,0,0,209,1,0,0,227,65,3,0,21,0,0,0,248,65,3,0,4,0,0,0,100,66,3,0,1,0,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,100,66,3,0,1,0,0,0,101,66,3,0,1,0,0,0,152,123,3,0,0,0,0,0,101,66,3,0,1,0,0,0,101,66,3,0,1,0,0,0,102,66,3,0,10,0,0,0,152,123,3,0,0,0,0,0,112,66,3,0,8,0,0,0,120,66,3,0,7,0,0,0,127,66,3,0,14,0,0,0,152,123,3,0,0,0,0,0,152,123,3,0,0,0,0,0,141,66,3,0,1,0,0,0,152,123,3,0,0,0,0,0,142,66,3,0,2,0,0,0,101,66,3,0,1,0,0,0,152,123,3,0,0,0,0,0,187,86,3,0,1,0,0,0,144,66,3,0,1,0,0,0,145,66,3,0,3,0,0,0,148,66,3,0,11,0,0,0,159,66,3,0,1,0,0,0,160,66,3,0,10,0,0,0,159,66,3,0,1,0,0,0,152,123,3,0,0,0,0,0,170,66,3,0,15,0,0,0,185,66,3,0,22,0,0,0,207,66,3,0,2,0,0,0,209,66,3,0,27,0,0,0,236,66,3,0,1,0,0,0,236,66,3,0,1,0,0,0,152], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+112825);
/* memory initializer */ allocate([123,3,0,0,0,0,0,170,66,3,0,15,0,0,0,237,66,3,0,42,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,23,67,3,0,2,0,0,0,25,67,3,0,27,0,0,0,52,67,3,0,11,0,0,0,63,67,3,0,2,0,0,0,207,66,3,0,2,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,65,67,3,0,17,0,0,0,82,67,3,0,35,0,0,0,117,67,3,0,77,0,0,0,100,66,3,0,1,0,0,0,100,66,3,0,1,0,0,0,194,67,3,0,3,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,197,67,3,0,52,0,0,0,207,66,3,0,2,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,23,67,3,0,2,0,0,0,249,67,3,0,51,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,44,68,3,0,54,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,98,68,3,0,12,0,0,0,110,68,3,0,19,0,0,0,129,68,3,0,44,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,170,66,3,0,15,0,0,0,173,68,3,0,20,0,0,0,193,68,3,0,18,0,0,0,211,68,3,0,2,0,0,0,213,68,3,0,11,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,170,66,3,0,15,0,0,0,224,68,3,0,11,0,0,0,235,68,3,0,13,0,0,0,211,68,3,0,2,0,0,0,213,68,3,0,11,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,170,66,3,0,15,0,0,0,248,68,3,0,66,0,0,0,209,66,3,0,27,0,0,0,152,123,3,0,0,0,0,0,58,69,3,0,17,0,0,0,75,69,3,0,55,0,0,0,101,66,3,0,1,0,0,0,209,66,3,0,27,0,0,0,31,75,3,0,26,0,0,0,202,73,3,0,18,0,0,0,226,69,3,0,87,0,0,0,118,0,0,0,220,73,3,0,33,0,0,0,202,73,3,0,18,0,0,0,226,69,3,0,87,0,0,0,127,0,0,0,169,73,3,0,33,0,0,0,202,73,3,0,18,0,0,0,226,69,3,0,87,0,0,0,132,0,0,0,195,72,3,0,10,0,0,0,31,73,3,0,138,0,0,0,226,69,3,0,87,0,0,0,150,0,0,0,195,72,3,0,10,0,0,0,205,72,3,0,82,0,0,0,91,72,3,0,104,0,0,0,64,0,0,0,57,70,3,0,40,0,0,0,97,70,3,0,34,0,0,0,226,69,3,0,87,0,0,0,164,0,0,0,229,70,3,0,14,0,0,0,146,71,3,0,97,0,0,0,131,70,3,0,98,0,0,0,56,0,0,0,229,70,3,0,14,0,0,0,66,71,3,0,80,0,0,0,131,70,3,0,98,0,0,0,59,0,0,0,229,70,3,0,14,0,0,0,243,70,3,0,79,0,0,0,131,70,3,0,98,0,0,0,63,0,0,0,98,75,3,0,1,0,0,0,159,66,3,0,1,0,0,0,142,66,3,0,2,0,0,0,99,75,3,0,2,0,0,0,144,66,3,0,1,0,0,0,34,76,3,0,27,0,0,0,61,76,3,0,17,0,0,0,78,76,3,0,20,0,0,0,98,76,3,0,29,0,0,0,226,69,3,0,87,0,0,0,102,1,0,0,226,69,3,0,87,0,0,0,108,1,0,0,179,75,3,0,104,0,0,0,27,76,3,0,7,0,0,0,226,69,3,0,87,0,0,0,125,1,0,0,0,0,0,0,172,77,3,0,6,0,0,0,152,123,3,0,0,0,0,0,100,66,3,0,1,0,0,0,2,0,0,0,241,77,3,0,6,0,0,0,2,0,0,0,142,66,3,0,2,0,0,0,6,78,3,0,57,0,0,0,63,78,3,0,93,0,0,0,103,0,0,0,226,69,3,0,87,0,0,0,84,4,0,0,226,69,3,0,87,0,0,0,89,4,0,0,6,78,3,0,57,0,0,0,226,69,3,0,87,0,0,0,124,4,0,0,6,78,3,0,57,0,0,0,226,69,3,0,87,0,0,0,134,4,0,0,6,78,3,0,57,0,0,0,226,69,3,0,87,0,0,0,140,4,0,0,51,79,3,0,2,0,0,0,130,79,3,0,41,0,0,0,50,80,3,0,10,0,0,0,60,80,3,0,41,0,0,0,219,79,3,0,87,0,0,0,114,0,0,0,152,123,3,0,0,0,0,0,101,80,3,0,4,0,0,0,147,80,3,0,2,0,0,0,145,80,3,0,2,0,0,0,143,80,3,0,2,0,0,0,141,80,3,0,2,0,0,0,139,80,3,0,2,0,0,0,137,80,3,0,2,0,0,0,135,80,3,0,2,0,0,0,133,80,3,0,2,0,0,0,131,80,3,0,2,0,0,0,126,80,3,0,5,0,0,0,124,80,3,0,2,0,0,0,122,80,3,0,2,0,0,0,120,80,3,0,2,0,0,0,118,80,3,0,2,0,0,0,116,80,3,0,2,0,0,0,114,80,3,0,2,0,0,0,112,80,3,0,2,0,0,0,110,80,3,0,2,0,0,0,105,80,3,0,5,0,0,0,253,81,3,0,115,0,0,0,130,2,0,0,253,81,3,0,115,0,0,0,138,2,0,0,112,82,3,0,113,0,0,0,51,0,0,0,112,82,3,0,113,0,0,0,28,2,0,0,112,82,3,0,113,0,0,0,192,2,0,0,112,82,3,0,113,0,0,0,193,2,0,0,112,82,3,0,113,0,0,0,8,3,0,0,225,82,3,0,44,0,0,0,13,83,3,0,11,0,0,0,24,83,3,0,2,0,0,0,112,82,3,0,113,0,0,0,57,3,0,0,136,83,3,0,108,0,0,0,54,0,0,0,136,83,3,0,108,0,0,0,59,0,0,0,102,84,3,0,104,0,0,0,56,0,0,0,102,84,3,0,104,0,0,0,58,0,0,0,206,84,3,0,22,0,0,0,44,89,3,0,50,0,0,0,177,85,3,0,43,0,0,0,242,85,3,0,32,0,0,0,220,85,3,0,21,0,0,0,241,85,3,0,1,0,0,0,0,0,0,0,8,1,0,0,107,87,3,0,8,0,0,0,115,87,3,0,15,0,0,0,130,87,3,0,3,0,0,0,133,87,3,0,1,0,0,0,241,85,3,0,1,0,0,0,105,86,3,0,51,0,0,0,90,87,3,0,17,0,0,0,68,87,3,0,22,0,0,0,10,0,0,0,216,6,3,0,2,0,0,0,63,87,3,0,2,0,0,0,65,87,3,0,3,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,54,87,3,0,9,0,0,0,244,83,3,0,114,0,0,0,21,0,0,0,176,87,3,0,116,0,0,0,188,0,0,0,27,83,3,0,109,0,0,0,41,0,0,0,27,83,3,0,109,0,0,0,43,0,0,0,27,83,3,0,109,0,0,0,45,0,0,0,27,83,3,0,109,0,0,0,47,0,0,0,0,0,0,0,30,1,0,0,228,88,3,0,36,0,0,0,8,89,3,0,3,0,0,0,132,88,3,0,96,0,0,0,203,0,0,0,0,0,0,0,31,1,0,0,152,123,3,0,0,0,0,0,94,89,3,0,11,0,0,0,202,86,3,0,1,0,0,0,123,89,3,0,104,0,0,0,98,0,0,0,0,0,0,0,40,1,0,0,140,91,3,0,105,0,0,0,236,0,0,0,56,92,3,0,97,0,0,0,101,3,0,0,56,92,3,0,97,0,0,0,54,3,0,0,0,0,0,0,8,1,0,0,135,94,3,0,27,0,0,0,34,94,3,0,101,0,0,0,146,2,0,0,251,94,3,0,102,0,0,0,5,1,0,0,251,94,3,0,102,0,0,0,41,1,0,0,2,0,0,0,251,94,3,0,102,0,0,0,84,1,0,0,136,95,3,0,115,0,0,0,55,0,0,0,33,96,3,0,115,0,0,0,51,0,0,0,186,96,3,0,106,0,0,0,82,0,0,0,71,97,3,0,32,0,0,0,103,97,3,0,106,0,0,0,33,0,0,0,209,97,3,0,40,0,0,0,103,97,3,0,106,0,0,0,49,0,0,0,152,123,3,0,0,0,0,0,97,98,3,0,29,0,0,0,249,97,3,0,104,0,0,0,218,2,0,0,126,98,3,0,28,0,0,0,249,97,3,0,104,0,0,0,141,3,0,0,8,99,3,0,17,0,0,0,154,98,3,0,110,0,0,0,140,1,0,0,170,99,3,0,36,0,0,0,68,99,3,0,102,0,0,0,0,2,0,0,51,99,3,0,17,0,0,0,68,99,3,0,102,0,0,0,68,2,0,0,68,1,0,0,97,0,0,0,65,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,99,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,68,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,70,0,0,0,0,0,0,0,0,0,0,0,103,0,0,0,71,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,105,0,0,0,73,0,0,0,0,0,0,0,0,0,0,0,106,0,0,0,74,0,0,0,0,0,0,0,0,0,0,0,107,0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,108,0,0,0,76,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,110,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,111,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,112,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,113,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,114,0,0,0,82,0,0,0,0,0,0,0,0,0,0,0,115,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,116,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,117,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,118,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,119,0,0,0,87,0,0,0,0,0,0,0,0,0,0,0,120,0,0,0,88,0,0,0,0,0,0,0,0,0,0,0,121,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,122,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,181,0,0,0,156,3,0,0,0,0,0,0,0,0,0,0,223,0,0,0,83,0,0,0,83,0,0,0,0,0,0,0,224,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,225,0,0,0,193,0,0,0,0,0,0,0,0,0,0,0,226,0,0,0,194,0,0,0,0,0,0,0,0,0,0,0,227,0,0,0,195,0,0,0,0,0,0,0,0,0,0,0,228,0,0,0,196,0,0,0,0,0,0,0,0,0,0,0,229,0,0,0,197,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,198,0,0,0,0,0,0,0,0,0,0,0,231,0,0,0,199,0,0,0,0,0,0,0,0,0,0,0,232,0,0,0,200,0,0,0,0,0,0,0,0,0,0,0,233,0,0,0,201,0,0,0,0,0,0,0,0,0,0,0,234,0,0,0,202,0,0,0,0,0,0,0,0,0,0,0,235,0,0,0,203,0,0,0,0,0,0,0,0,0,0,0,236,0,0,0,204,0,0,0,0,0,0,0,0,0,0,0,237,0,0,0,205,0,0,0,0,0,0,0,0,0,0,0,238,0,0,0,206,0,0,0,0,0,0,0,0,0,0,0,239,0,0,0,207,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,208,0,0,0,0,0,0,0,0,0,0,0,241,0,0,0,209,0,0,0,0,0,0,0,0,0,0,0,242,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,243,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,212,0,0,0,0,0,0,0,0,0,0,0,245,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0,246,0,0,0,214,0,0,0,0,0,0,0,0,0,0,0,248,0,0,0,216,0,0,0,0,0,0,0,0,0,0,0,249,0,0,0,217,0,0,0,0,0,0,0,0,0,0,0,250,0,0,0,218,0,0,0,0,0,0,0,0,0,0,0,251,0,0,0,219,0,0,0,0,0,0,0,0,0,0,0,252,0,0,0,220,0,0,0,0,0,0,0,0,0,0,0,253,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,254,0,0,0,222,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,120,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,3,1,0,0,2,1,0,0,0,0,0,0,0,0,0,0,5,1,0,0,4,1,0,0,0,0,0,0,0,0,0,0,7,1,0,0,6,1,0,0,0,0,0,0,0,0,0,0,9,1,0,0,8,1,0,0,0,0,0,0,0,0,0,0,11,1,0,0,10,1,0,0,0,0,0,0,0,0,0,0,13,1,0,0,12,1,0,0,0,0,0,0,0,0,0,0,15,1,0,0,14,1,0,0,0,0,0,0,0,0,0,0,17,1,0,0,16,1,0,0,0,0,0,0,0,0,0,0,19,1,0,0,18,1,0,0,0,0,0,0,0,0,0,0,21,1,0,0,20,1,0,0,0,0,0,0,0,0,0,0,23,1,0,0,22,1,0,0,0,0,0,0,0,0,0,0,25,1,0,0,24,1,0,0,0,0,0,0,0,0,0,0,27,1,0,0,26,1,0,0,0,0,0,0,0,0,0,0,29,1,0,0,28,1,0,0,0,0,0,0,0,0,0,0,31,1,0,0,30,1,0,0,0,0,0,0,0,0,0,0,33,1,0,0,32,1,0,0,0,0,0,0,0,0,0,0,35,1,0,0,34,1,0,0,0,0,0,0,0,0,0,0,37,1,0,0,36,1,0,0,0,0,0,0,0,0,0,0,39,1,0,0,38,1,0,0,0,0,0,0,0,0,0,0,41,1,0,0,40,1,0,0,0,0,0,0,0,0,0,0,43,1,0,0,42,1,0,0,0,0,0,0,0,0,0,0,45,1,0,0,44,1,0,0,0,0,0,0,0,0,0,0,47,1,0,0,46,1,0,0,0,0,0,0,0,0,0,0,49,1,0,0,73,0,0,0,0,0,0,0,0,0,0,0,51,1,0,0,50,1,0,0,0,0,0,0,0,0,0,0,53,1,0,0,52,1,0,0,0,0,0,0,0,0,0,0,55,1,0,0,54,1,0,0,0,0,0,0,0,0,0,0,58,1,0,0,57,1,0,0,0,0,0,0,0,0,0,0,60,1,0,0,59,1,0,0,0,0,0,0,0,0,0,0,62,1,0,0,61,1,0,0,0,0,0,0,0,0,0,0,64,1,0,0,63,1,0,0,0,0,0,0,0,0,0,0,66,1,0,0,65,1,0,0,0,0,0,0,0,0,0,0,68,1,0,0,67,1,0,0,0,0,0,0,0,0,0,0,70,1,0,0,69,1,0,0,0,0,0,0,0,0,0,0,72,1,0,0,71,1,0,0,0,0,0,0,0,0,0,0,73,1,0,0,188,2,0,0,78,0,0,0,0,0,0,0,75,1,0,0,74,1,0,0,0,0,0,0,0,0,0,0,77,1,0,0,76,1,0,0,0,0,0,0,0,0,0,0,79,1,0,0,78,1,0,0,0,0,0,0,0,0,0,0,81,1,0,0,80,1,0,0,0,0,0,0,0,0,0,0,83,1,0,0,82,1,0,0,0,0,0,0,0,0,0,0,85,1,0,0,84,1,0,0,0,0,0,0,0,0,0,0,87,1,0,0,86,1,0,0,0,0,0,0,0,0,0,0,89,1,0,0,88,1,0,0,0,0,0,0,0,0,0,0,91,1,0,0,90,1,0,0,0,0,0,0,0,0,0,0,93,1,0,0,92,1,0,0,0,0,0,0,0,0,0,0,95,1,0,0,94,1,0,0,0,0,0,0,0,0,0,0,97,1,0,0,96,1,0,0,0,0,0,0,0,0,0,0,99,1,0,0,98,1,0,0,0,0,0,0,0,0,0,0,101,1,0,0,100,1,0,0,0,0,0,0,0,0,0,0,103,1,0,0,102,1,0,0,0,0,0,0,0,0,0,0,105,1,0,0,104,1,0,0,0,0,0,0,0,0,0,0,107,1,0,0,106,1,0,0,0,0,0,0,0,0,0,0,109,1,0,0,108,1,0,0,0,0,0,0,0,0,0,0,111,1,0,0,110,1,0,0,0,0,0,0,0,0,0,0,113,1,0,0,112,1,0,0,0,0,0,0,0,0,0,0,115,1,0,0,114,1,0,0,0,0,0,0,0,0,0,0,117,1,0,0,116,1,0,0,0,0,0,0,0,0,0,0,119,1,0,0,118,1,0,0,0,0,0,0,0,0,0,0,122,1,0,0,121,1,0,0,0,0,0,0,0,0,0,0,124,1,0,0,123,1,0,0,0,0,0,0,0,0,0,0,126,1,0,0,125,1,0,0,0,0,0,0,0,0,0,0,127,1,0,0,83,0,0,0,0,0,0,0,0,0,0,0,128,1,0,0,67,2,0,0,0,0,0,0,0,0,0,0,131,1,0,0,130,1,0,0,0,0,0,0,0,0,0,0,133,1,0,0,132,1,0,0,0,0,0,0,0,0,0,0,136,1,0,0,135,1,0,0,0,0,0,0,0,0,0,0,140,1,0,0,139,1,0,0,0,0,0,0,0,0,0,0,146,1,0,0,145,1,0,0,0,0,0,0,0,0,0,0,149,1,0,0,246,1,0,0,0,0,0,0,0,0,0,0,153,1,0,0,152,1,0,0,0,0,0,0,0,0,0,0,154,1,0,0,61,2,0,0,0,0,0,0,0,0,0,0,158,1,0,0,32,2,0,0,0,0,0,0,0,0,0,0,161,1,0,0,160,1,0,0,0,0,0,0,0,0,0,0,163,1,0,0,162,1,0,0,0,0,0,0,0,0,0,0,165,1,0,0,164,1,0,0,0,0,0,0,0,0,0,0,168,1,0,0,167,1,0,0,0,0,0,0,0,0,0,0,173,1,0,0,172,1,0,0,0,0,0,0,0,0,0,0,176,1,0,0,175,1,0,0,0,0,0,0,0,0,0,0,180,1,0,0,179,1,0,0,0,0,0,0,0,0,0,0,182,1,0,0,181,1,0,0,0,0,0,0,0,0,0,0,185,1,0,0,184,1,0,0,0,0,0,0,0,0,0,0,189,1,0,0,188,1,0,0,0,0,0,0,0,0,0,0,191,1,0,0,247,1,0,0,0,0,0,0,0,0,0,0,197,1,0,0,196,1,0,0,0,0,0,0,0,0,0,0,198,1,0,0,196,1,0,0,0,0,0,0,0,0,0,0,200,1,0,0,199,1,0,0,0,0,0,0,0,0,0,0,201,1,0,0,199,1,0,0,0,0,0,0,0,0,0,0,203,1,0,0,202,1,0,0,0,0,0,0,0,0,0,0,204,1,0,0,202,1,0,0,0,0,0,0,0,0,0,0,206,1,0,0,205,1,0,0,0,0,0,0,0,0,0,0,208,1,0,0,207,1,0,0,0,0,0,0,0,0,0,0,210,1,0,0,209,1,0,0,0,0,0,0,0,0,0,0,212,1,0,0,211,1,0,0,0,0,0,0,0,0,0,0,214,1,0,0,213,1,0,0,0,0,0,0,0,0,0,0,216,1,0,0,215,1,0,0,0,0,0,0,0,0,0,0,218,1,0,0,217,1,0,0,0,0,0,0,0,0,0,0,220,1,0,0,219,1,0,0,0,0,0,0,0,0,0,0,221,1,0,0,142,1,0,0,0,0,0,0,0,0,0,0,223,1,0,0,222,1,0,0,0,0,0,0,0,0,0,0,225,1,0,0,224,1,0,0,0,0,0,0,0,0,0,0,227,1,0,0,226,1,0,0,0,0,0,0,0,0,0,0,229,1,0,0,228,1,0,0,0,0,0,0,0,0,0,0,231,1,0,0,230,1,0,0,0,0,0,0,0,0,0,0,233,1,0,0,232,1,0,0,0,0,0,0,0,0,0,0,235,1,0,0,234,1,0,0,0,0,0,0,0,0,0,0,237,1,0,0,236,1,0,0,0,0,0,0,0,0,0,0,239,1,0,0,238,1,0,0,0,0,0,0,0,0,0,0,240,1,0,0,74,0,0,0,12,3,0,0,0,0,0,0,242,1,0,0,241,1,0,0,0,0,0,0,0,0,0,0,243,1,0,0,241,1,0,0,0,0,0,0,0,0,0,0,245,1,0,0,244,1,0,0,0,0,0,0,0,0,0,0,249,1,0,0,248,1,0,0,0,0,0,0,0,0,0,0,251,1,0,0,250,1,0,0,0,0,0,0,0,0,0,0,253,1,0,0,252,1,0,0,0,0,0,0,0,0,0,0,255,1,0,0,254,1,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,3,2,0,0,2,2,0,0,0,0,0,0,0,0,0,0,5,2,0,0,4,2,0,0,0,0,0,0,0,0,0,0,7,2,0,0,6,2,0,0,0,0,0,0,0,0,0,0,9,2,0,0,8,2,0,0,0,0,0,0,0,0,0,0,11,2,0,0,10,2,0,0,0,0,0,0,0,0,0,0,13,2,0,0,12,2,0,0,0,0,0,0,0,0,0,0,15,2,0,0,14,2,0,0,0,0,0,0,0,0,0,0,17,2,0,0,16,2,0,0,0,0,0,0,0,0,0,0,19,2,0,0,18,2,0,0,0,0,0,0,0,0,0,0,21,2,0,0,20,2,0,0,0,0,0,0,0,0,0,0,23,2,0,0,22,2,0,0,0,0,0,0,0,0,0,0,25,2,0,0,24,2,0,0,0,0,0,0,0,0,0,0,27,2,0,0,26,2,0,0,0,0,0,0,0,0,0,0,29,2,0,0,28,2,0,0,0,0,0,0,0,0,0,0,31,2,0,0,30,2,0,0,0,0,0,0,0,0,0,0,35,2,0,0,34,2,0,0,0,0,0,0,0,0,0,0,37,2,0,0,36,2,0,0,0,0,0,0,0,0,0,0,39,2,0,0,38,2,0,0,0,0,0,0,0,0,0,0,41,2,0,0,40,2,0,0,0,0,0,0,0,0,0,0,43,2,0,0,42,2,0,0,0,0,0,0,0,0,0,0,45,2,0,0,44,2,0,0,0,0,0,0,0,0,0,0,47,2,0,0,46,2,0,0,0,0,0,0,0,0,0,0,49,2,0,0,48,2,0,0,0,0,0,0,0,0,0,0,51,2,0,0,50,2,0,0,0,0,0,0,0,0,0,0,60,2,0,0,59,2,0,0,0,0,0,0,0,0,0,0,63,2,0,0,126,44,0,0,0,0,0,0,0,0,0,0,64,2,0,0,127,44,0,0,0,0,0,0,0,0,0,0,66,2,0,0,65,2,0,0,0,0,0,0,0,0,0,0,71,2,0,0,70,2,0,0,0,0,0,0,0,0,0,0,73,2,0,0,72,2,0,0,0,0,0,0,0,0,0,0,75,2,0,0,74,2,0,0,0,0,0,0,0,0,0,0,77,2,0,0,76,2,0,0,0,0,0,0,0,0,0,0,79,2,0,0,78,2,0,0,0,0,0,0,0,0,0,0,80,2,0,0,111,44,0,0,0,0,0,0,0,0,0,0,81,2,0,0,109,44,0,0,0,0,0,0,0,0,0,0,82,2,0,0,112,44,0,0,0,0,0,0,0,0,0,0,83,2,0,0,129,1,0,0,0,0,0,0,0,0,0,0,84,2,0,0,134,1,0,0,0,0,0,0,0,0,0,0,86,2,0,0,137,1,0,0,0,0,0,0,0,0,0,0,87,2,0,0,138,1,0,0,0,0,0,0,0,0,0,0,89,2,0,0,143,1,0,0,0,0,0,0,0,0,0,0,91,2,0,0,144,1,0,0,0,0,0,0,0,0,0,0,92,2,0,0,171,167,0,0,0,0,0,0,0,0,0,0,96,2,0,0,147,1,0,0,0,0,0,0,0,0,0,0,97,2,0,0,172,167,0,0,0,0,0,0,0,0,0,0,99,2,0,0,148,1,0,0,0,0,0,0,0,0,0,0,101,2,0,0,141,167,0,0,0,0,0,0,0,0,0,0,102,2,0,0,170,167,0,0,0,0,0,0,0,0,0,0,104,2,0,0,151,1,0,0,0,0,0,0,0,0,0,0,105,2,0,0,150,1,0,0,0,0,0,0,0,0,0,0,106,2,0,0,174,167,0,0,0,0,0,0,0,0,0,0,107,2,0,0,98,44,0,0,0,0,0,0,0,0,0,0,108,2,0,0,173,167,0,0,0,0,0,0,0,0,0,0,111,2,0,0,156,1,0,0,0,0,0,0,0,0,0,0,113,2,0,0,110,44,0,0,0,0,0,0,0,0,0,0,114,2,0,0,157,1,0,0,0,0,0,0,0,0,0,0,117,2,0,0,159,1,0,0,0,0,0,0,0,0,0,0,125,2,0,0,100,44,0,0,0,0,0,0,0,0,0,0,128,2,0,0,166,1,0,0,0,0,0,0,0,0,0,0,131,2,0,0,169,1,0,0,0,0,0,0,0,0,0,0,135,2,0,0,177,167,0,0,0,0,0,0,0,0,0,0,136,2,0,0,174,1,0,0,0,0,0,0,0,0,0,0,137,2,0,0,68,2,0,0,0,0,0,0,0,0,0,0,138,2,0,0,177,1,0,0,0,0,0,0,0,0,0,0,139,2,0,0,178,1,0,0,0,0,0,0,0,0,0,0,140,2,0,0,69,2,0,0,0,0,0,0,0,0,0,0,146,2,0,0,183,1,0,0,0,0,0,0,0,0,0,0,157,2,0,0,178,167,0,0,0,0,0,0,0,0,0,0,158,2,0,0,176,167,0,0,0,0,0,0,0,0,0,0,69,3,0,0,153,3,0,0,0,0,0,0,0,0,0,0,113,3,0,0,112,3,0,0,0,0,0,0,0,0,0,0,115,3,0,0,114,3,0,0,0,0,0,0,0,0,0,0,119,3,0,0,118,3,0,0,0,0,0,0,0,0,0,0,123,3,0,0,253,3,0,0,0,0,0,0,0,0,0,0,124,3,0,0,254,3,0,0,0,0,0,0,0,0,0,0,125,3,0,0,255,3,0,0,0,0,0,0,0,0,0,0,144,3,0,0,153,3,0,0,8,3,0,0,1,3,0,0,172,3,0,0,134,3,0,0,0,0,0,0,0,0,0,0,173,3,0,0,136,3,0,0,0,0,0,0,0,0,0,0,174,3,0,0,137,3,0,0,0,0,0,0,0,0,0,0,175,3,0,0,138,3,0,0,0,0,0,0,0,0,0,0,176,3,0,0,165,3,0,0,8,3,0,0,1,3,0,0,177,3,0,0,145,3,0,0,0,0,0,0,0,0,0,0,178,3,0,0,146,3,0,0,0,0,0,0,0,0,0,0,179,3,0,0,147,3,0,0,0,0,0,0,0,0,0,0,180,3,0,0,148,3,0,0,0,0,0,0,0,0,0,0,181,3,0,0,149,3,0,0,0,0,0,0,0,0,0,0,182,3,0,0,150,3,0,0,0,0,0,0,0,0,0,0,183,3,0,0,151,3,0,0,0,0,0,0,0,0,0,0,184,3,0,0,152,3,0,0,0,0,0,0,0,0,0,0,185,3,0,0,153,3,0,0,0,0,0,0,0,0,0,0,186,3,0,0,154,3,0,0,0,0,0,0,0,0,0,0,187,3,0,0,155,3,0,0,0,0,0,0,0,0,0,0,188,3,0,0,156,3,0,0,0,0,0,0,0,0,0,0,189,3,0,0,157,3,0,0,0,0,0,0,0,0,0,0,190,3,0,0,158,3,0,0,0,0,0,0,0,0,0,0,191,3,0,0,159,3,0,0,0,0,0,0,0,0,0,0,192,3,0,0,160,3,0,0,0,0,0,0,0,0,0,0,193,3,0,0,161,3,0,0,0,0,0,0,0,0,0,0,194,3,0,0,163,3,0,0,0,0,0,0,0,0,0,0,195,3,0,0,163,3,0,0,0,0,0,0,0,0,0,0,196,3,0,0,164,3,0,0,0,0,0,0,0,0,0,0,197,3,0,0,165,3,0,0,0,0,0,0,0,0,0,0,198,3,0,0,166,3,0,0,0,0,0,0,0,0,0,0,199,3,0,0,167,3,0,0,0,0,0,0,0,0,0,0,200,3,0,0,168,3,0,0,0,0,0,0,0,0,0,0,201,3,0,0,169,3,0,0,0,0,0,0,0,0,0,0,202,3,0,0,170,3,0,0,0,0,0,0,0,0,0,0,203,3,0,0,171,3,0,0,0,0,0,0,0,0,0,0,204,3,0,0,140,3,0,0,0,0,0,0,0,0,0,0,205,3,0,0,142,3,0,0,0,0,0,0,0,0,0,0,206,3,0,0,143,3,0,0,0,0,0,0,0,0,0,0,208,3,0,0,146,3,0,0,0,0,0,0,0,0,0,0,209,3,0,0,152,3,0,0,0,0,0,0,0,0,0,0,213,3,0,0,166,3,0,0,0,0,0,0,0,0,0,0,214,3,0,0,160,3,0,0,0,0,0,0,0,0,0,0,215,3,0,0,207,3,0,0,0,0,0,0,0,0,0,0,217,3,0,0,216,3,0,0,0,0,0,0,0,0,0,0,219,3,0,0,218,3,0,0,0,0,0,0,0,0,0,0,221,3,0,0,220,3,0,0,0,0,0,0,0,0,0,0,223,3,0,0,222,3,0,0,0,0,0,0,0,0,0,0,225,3,0,0,224,3,0,0,0,0,0,0,0,0,0,0,227,3,0,0,226,3,0,0,0,0,0,0,0,0,0,0,229,3,0,0,228,3,0,0,0,0,0,0,0,0,0,0,231,3,0,0,230,3,0,0,0,0,0,0,0,0,0,0,233,3,0,0,232,3,0,0,0,0,0,0,0,0,0,0,235,3,0,0,234,3,0,0,0,0,0,0,0,0,0,0,237,3,0,0,236,3,0,0,0,0,0,0,0,0,0,0,239,3,0,0,238,3,0,0,0,0,0,0,0,0,0,0,240,3,0,0,154,3,0,0,0,0,0,0,0,0,0,0,241,3,0,0,161,3,0,0,0,0,0,0,0,0,0,0,242,3,0,0,249,3,0,0,0,0,0,0,0,0,0,0,243,3,0,0,127,3,0,0,0,0,0,0,0,0,0,0,245,3,0,0,149,3,0,0,0,0,0,0,0,0,0,0,248,3,0,0,247,3,0,0,0,0,0,0,0,0,0,0,251,3,0,0,250,3,0,0,0,0,0,0,0,0,0,0,48,4,0,0,16,4,0,0,0,0,0,0,0,0,0,0,49,4,0,0,17,4,0,0,0,0,0,0,0,0,0,0,50,4,0,0,18,4,0,0,0,0,0,0,0,0,0,0,51,4,0,0,19,4,0,0,0,0,0,0,0,0,0,0,52,4,0,0,20,4,0,0,0,0,0,0,0,0,0,0,53,4,0,0,21,4,0,0,0,0,0,0,0,0,0,0,54,4,0,0,22,4,0,0,0,0,0,0,0,0,0,0,55,4,0,0,23,4,0,0,0,0,0,0,0,0,0,0,56,4,0,0,24,4,0,0,0,0,0,0,0,0,0,0,57,4,0,0,25,4,0,0,0,0,0,0,0,0,0,0,58,4,0,0,26,4,0,0,0,0,0,0,0,0,0,0,59,4,0,0,27,4,0,0,0,0,0,0,0,0,0,0,60,4,0,0,28,4,0,0,0,0,0,0,0,0,0,0,61,4,0,0,29,4,0,0,0,0,0,0,0,0,0,0,62,4,0,0,30,4,0,0,0,0,0,0,0,0,0,0,63,4,0,0,31,4,0,0,0,0,0,0,0,0,0,0,64,4,0,0,32,4,0,0,0,0,0,0,0,0,0,0,65,4,0,0,33,4,0,0,0,0,0,0,0,0,0,0,66,4,0,0,34,4,0,0,0,0,0,0,0,0,0,0,67,4,0,0,35,4,0,0,0,0,0,0,0,0,0,0,68,4,0,0,36,4,0,0,0,0,0,0,0,0,0,0,69,4,0,0,37,4,0,0,0,0,0,0,0,0,0,0,70,4,0,0,38,4,0,0,0,0,0,0,0,0,0,0,71,4,0,0,39,4,0,0,0,0,0,0,0,0,0,0,72,4,0,0,40,4,0,0,0,0,0,0,0,0,0,0,73,4,0,0,41,4,0,0,0,0,0,0,0,0,0,0,74,4,0,0,42,4,0,0,0,0,0,0,0,0,0,0,75,4,0,0,43,4,0,0,0,0,0,0,0,0,0,0,76,4,0,0,44,4,0,0,0,0,0,0,0,0,0,0,77,4,0,0,45,4,0,0,0,0,0,0,0,0,0,0,78,4,0,0,46,4,0,0,0,0,0,0,0,0,0,0,79,4,0,0,47,4,0,0,0,0,0,0,0,0,0,0,80,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,81,4,0,0,1,4,0,0,0,0,0,0,0,0,0,0,82,4,0,0,2,4,0,0,0,0,0,0,0,0,0,0,83,4,0,0,3,4,0,0,0,0,0,0,0,0,0,0,84,4,0,0,4,4,0,0,0,0,0,0,0,0,0,0,85,4,0,0,5,4,0,0,0,0,0,0,0,0,0,0,86,4,0,0,6,4,0,0,0,0,0,0,0,0,0,0,87,4,0,0,7,4,0,0,0,0,0,0,0,0,0,0,88,4,0,0,8,4,0,0,0,0,0,0,0,0,0,0,89,4,0,0,9,4,0,0,0,0,0,0,0,0,0,0,90,4,0,0,10,4,0,0,0,0,0,0,0,0,0,0,91,4,0,0,11,4,0,0,0,0,0,0,0,0,0,0,92,4,0,0,12,4,0,0,0,0,0,0,0,0,0,0,93,4,0,0,13,4,0,0,0,0,0,0,0,0,0,0,94,4,0,0,14,4,0,0,0,0,0,0,0,0,0,0,95,4,0,0,15,4,0,0,0,0,0,0,0,0,0,0,97,4,0,0,96,4,0,0,0,0,0,0,0,0,0,0,99,4,0,0,98,4,0,0,0,0,0,0,0,0,0,0,101,4,0,0,100,4,0,0,0,0,0,0,0,0,0,0,103,4,0,0,102,4,0,0,0,0,0,0,0,0,0,0,105,4,0,0,104,4,0,0,0,0,0,0,0,0,0,0,107,4,0,0,106,4,0,0,0,0,0,0,0,0,0,0,109,4,0,0,108,4,0,0,0,0,0,0,0,0,0,0,111,4,0,0,110,4,0,0,0,0,0,0,0,0,0,0,113,4,0,0,112,4,0,0,0,0,0,0,0,0,0,0,115,4,0,0,114,4,0,0,0,0,0,0,0,0,0,0,117,4,0,0,116,4,0,0,0,0,0,0,0,0,0,0,119,4,0,0,118,4,0,0,0,0,0,0,0,0,0,0,121,4,0,0,120,4,0,0,0,0,0,0,0,0,0,0,123,4,0,0,122,4,0,0,0,0,0,0,0,0,0,0,125,4,0,0,124,4,0,0,0,0,0,0,0,0,0,0,127,4,0,0,126,4,0,0,0,0,0,0,0,0,0,0,129,4,0,0,128,4,0,0,0,0,0,0,0,0,0,0,139,4,0,0,138,4,0,0,0,0,0,0,0,0,0,0,141,4,0,0,140,4,0,0,0,0,0,0,0,0,0,0,143,4,0,0,142,4,0,0,0,0,0,0,0,0,0,0,145,4,0,0,144,4,0,0,0,0,0,0,0,0,0,0,147,4,0,0,146,4,0,0,0,0,0,0,0,0,0,0,149,4,0,0,148,4,0,0,0,0,0,0,0,0,0,0,151,4,0,0,150,4,0,0,0,0,0,0,0,0,0,0,153,4,0,0,152,4,0,0,0,0,0,0,0,0,0,0,155,4,0,0,154,4,0,0,0,0,0,0,0,0,0,0,157,4,0,0,156,4,0,0,0,0,0,0,0,0,0,0,159,4,0,0,158,4,0,0,0,0,0,0,0,0,0,0,161,4,0,0,160,4,0,0,0,0,0,0,0,0,0,0,163,4,0,0,162,4,0,0,0,0,0,0,0,0,0,0,165,4,0,0,164,4,0,0,0,0,0,0,0,0,0,0,167,4,0,0,166,4,0,0,0,0,0,0,0,0,0,0,169,4,0,0,168,4,0,0,0,0,0,0,0,0,0,0,171,4,0,0,170,4,0,0,0,0,0,0,0,0,0,0,173,4,0,0,172,4,0,0,0,0,0,0,0,0,0,0,175,4,0,0,174,4,0,0,0,0,0,0,0,0,0,0,177,4,0,0,176,4,0,0,0,0,0,0,0,0,0,0,179,4,0,0,178,4,0,0,0,0,0,0,0,0,0,0,181,4,0,0,180,4,0,0,0,0,0,0,0,0,0,0,183,4,0,0,182,4,0,0,0,0,0,0,0,0,0,0,185,4,0,0,184,4,0,0,0,0,0,0,0,0,0,0,187,4,0,0,186,4,0,0,0,0,0,0,0,0,0,0,189,4,0,0,188,4,0,0,0,0,0,0,0,0,0,0,191,4,0,0,190,4,0,0,0,0,0,0,0,0,0,0,194,4,0,0,193,4,0,0,0,0,0,0,0,0,0,0,196,4,0,0,195,4,0,0,0,0,0,0,0,0,0,0,198,4,0,0,197,4,0,0,0,0,0,0,0,0,0,0,200,4,0,0,199,4,0,0,0,0,0,0,0,0,0,0,202,4,0,0,201,4,0,0,0,0,0,0,0,0,0,0,204,4,0,0,203,4,0,0,0,0,0,0,0,0,0,0,206,4,0,0,205,4,0,0,0,0,0,0,0,0,0,0,207,4,0,0,192,4,0,0,0,0,0,0,0,0,0,0,209,4,0,0,208,4,0,0,0,0,0,0,0,0,0,0,211,4,0,0,210,4,0,0,0,0,0,0,0,0,0,0,213,4,0,0,212,4,0,0,0,0,0,0,0,0,0,0,215,4,0,0,214,4,0,0,0,0,0,0,0,0,0,0,217,4,0,0,216,4,0,0,0,0,0,0,0,0,0,0,219,4,0,0,218,4,0,0,0,0,0,0,0,0,0,0,221,4,0,0,220,4,0,0,0,0,0,0,0,0,0,0,223,4,0,0,222,4,0,0,0,0,0,0,0,0,0,0,225,4,0,0,224,4,0,0,0,0,0,0,0,0,0,0,227,4,0,0,226,4,0,0,0,0,0,0,0,0,0,0,229,4,0,0,228,4,0,0,0,0,0,0,0,0,0,0,231,4,0,0,230,4,0,0,0,0,0,0,0,0,0,0,233,4,0,0,232,4,0,0,0,0,0,0,0,0,0,0,235,4,0,0,234,4,0,0,0,0,0,0,0,0,0,0,237,4,0,0,236,4,0,0,0,0,0,0,0,0,0,0,239,4,0,0,238,4,0,0,0,0,0,0,0,0,0,0,241,4,0,0,240,4,0,0,0,0,0,0,0,0,0,0,243,4,0,0,242,4,0,0,0,0,0,0,0,0,0,0,245,4,0,0,244,4,0,0,0,0,0,0,0,0,0,0,247,4,0,0,246,4,0,0,0,0,0,0,0,0,0,0,249,4,0,0,248,4,0,0,0,0,0,0,0,0,0,0,251,4,0,0,250,4,0,0,0,0,0,0,0,0,0,0,253,4,0,0,252,4,0,0,0,0,0,0,0,0,0,0,255,4,0,0,254,4,0,0,0,0,0,0,0,0,0,0,1,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,3,5,0,0,2,5,0,0,0,0,0,0,0,0,0,0,5,5,0,0,4,5,0,0,0,0,0,0,0,0,0,0,7,5,0,0,6,5,0,0,0,0,0,0,0,0,0,0,9,5,0,0,8,5,0,0,0,0,0,0,0,0,0,0,11,5,0,0,10,5,0,0,0,0,0,0,0,0,0,0,13,5,0,0,12,5,0,0,0,0,0,0,0,0,0,0,15,5,0,0,14,5,0,0,0,0,0,0,0,0,0,0,17,5,0,0,16,5,0,0,0,0,0,0,0,0,0,0,19,5,0,0,18,5,0,0,0,0,0,0,0,0,0,0,21,5,0,0,20,5,0,0,0,0,0,0,0,0,0,0,23,5,0,0,22,5,0,0,0,0,0,0,0,0,0,0,25,5,0,0,24,5,0,0,0,0,0,0,0,0,0,0,27,5,0,0,26,5,0,0,0,0,0,0,0,0,0,0,29,5,0,0,28,5,0,0,0,0,0,0,0,0,0,0,31,5,0,0,30,5,0,0,0,0,0,0,0,0,0,0,33,5,0,0,32,5,0,0,0,0,0,0,0,0,0,0,35,5,0,0,34,5,0,0,0,0,0,0,0,0,0,0,37,5,0,0,36,5,0,0,0,0,0,0,0,0,0,0,39,5,0,0,38,5,0,0,0,0,0,0,0,0,0,0,41,5,0,0,40,5,0,0,0,0,0,0,0,0,0,0,43,5,0,0,42,5,0,0,0,0,0,0,0,0,0,0,45,5,0,0,44,5,0,0,0,0,0,0,0,0,0,0,47,5,0,0,46,5,0,0,0,0,0,0,0,0,0,0,97,5,0,0,49,5,0,0,0,0,0,0,0,0,0,0,98,5,0,0,50,5,0,0,0,0,0,0,0,0,0,0,99,5,0,0,51,5,0,0,0,0,0,0,0,0,0,0,100,5,0,0,52,5,0,0,0,0,0,0,0,0,0,0,101,5,0,0,53,5,0,0,0,0,0,0,0,0,0,0,102,5,0,0,54,5,0,0,0,0,0,0,0,0,0,0,103,5,0,0,55,5,0,0,0,0,0,0,0,0,0,0,104,5,0,0,56,5,0,0,0,0,0,0,0,0,0,0,105,5,0,0,57,5,0,0,0,0,0,0,0,0,0,0,106,5,0,0,58,5,0,0,0,0,0,0,0,0,0,0,107,5,0,0,59,5,0,0,0,0,0,0,0,0,0,0,108,5,0,0,60,5,0,0,0,0,0,0,0,0,0,0,109,5,0,0,61,5,0,0,0,0,0,0,0,0,0,0,110,5,0,0,62,5,0,0,0,0,0,0,0,0,0,0,111,5,0,0,63,5,0,0,0,0,0,0,0,0,0,0,112,5,0,0,64,5,0,0,0,0,0,0,0,0,0,0,113,5,0,0,65,5,0,0,0,0,0,0,0,0,0,0,114,5,0,0,66,5,0,0,0,0,0,0,0,0,0,0,115,5,0,0,67,5,0,0,0,0,0,0,0,0,0,0,116,5,0,0,68,5,0,0,0,0,0,0,0,0,0,0,117,5,0,0,69,5,0,0,0,0,0,0,0,0,0,0,118,5,0,0,70,5,0,0,0,0,0,0,0,0,0,0,119,5,0,0,71,5,0,0,0,0,0,0,0,0,0,0,120,5,0,0,72,5,0,0,0,0,0,0,0,0,0,0,121,5,0,0,73,5,0,0,0,0,0,0,0,0,0,0,122,5,0,0,74,5,0,0,0,0,0,0,0,0,0,0,123,5,0,0,75,5,0,0,0,0,0,0,0,0,0,0,124,5,0,0,76,5,0,0,0,0,0,0,0,0,0,0,125,5,0,0,77,5,0,0,0,0,0,0,0,0,0,0,126,5,0,0,78,5,0,0,0,0,0,0,0,0,0,0,127,5,0,0,79,5,0,0,0,0,0,0,0,0,0,0,128,5,0,0,80,5,0,0,0,0,0,0,0,0,0,0,129,5,0,0,81,5,0,0,0,0,0,0,0,0,0,0,130,5,0,0,82,5,0,0,0,0,0,0,0,0,0,0,131,5,0,0,83,5,0,0,0,0,0,0,0,0,0,0,132,5,0,0,84,5,0,0,0,0,0,0,0,0,0,0,133,5,0,0,85,5,0,0,0,0,0,0,0,0,0,0,134,5,0,0,86,5,0,0,0,0,0,0,0,0,0,0,135,5,0,0,53,5,0,0,82,5,0,0,0,0,0,0,248,19,0,0,240,19,0,0,0,0,0,0,0,0,0,0,249,19,0,0,241,19,0,0,0,0,0,0,0,0,0,0,250,19,0,0,242,19,0,0,0,0,0,0,0,0,0,0,251,19,0,0,243,19,0,0,0,0,0,0,0,0,0,0,252,19,0,0,244,19,0,0,0,0,0,0,0,0,0,0,253,19,0,0,245,19,0,0,0,0,0,0,0,0,0,0,128,28,0,0,18,4,0,0,0,0,0,0,0,0,0,0,129,28,0,0,20,4,0,0,0,0,0,0,0,0,0,0,130,28,0,0,30,4,0,0,0,0,0,0,0,0,0,0,131,28,0,0,33,4,0,0,0,0,0,0,0,0,0,0,132,28,0,0,34,4,0,0,0,0,0,0,0,0,0,0,133,28,0,0,34,4], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+123065);
/* memory initializer */ allocate([134,28,0,0,42,4,0,0,0,0,0,0,0,0,0,0,135,28,0,0,98,4,0,0,0,0,0,0,0,0,0,0,136,28,0,0,74,166,0,0,0,0,0,0,0,0,0,0,121,29,0,0,125,167,0,0,0,0,0,0,0,0,0,0,125,29,0,0,99,44,0,0,0,0,0,0,0,0,0,0,1,30,0,0,0,30,0,0,0,0,0,0,0,0,0,0,3,30,0,0,2,30,0,0,0,0,0,0,0,0,0,0,5,30,0,0,4,30,0,0,0,0,0,0,0,0,0,0,7,30,0,0,6,30,0,0,0,0,0,0,0,0,0,0,9,30,0,0,8,30,0,0,0,0,0,0,0,0,0,0,11,30,0,0,10,30,0,0,0,0,0,0,0,0,0,0,13,30,0,0,12,30,0,0,0,0,0,0,0,0,0,0,15,30,0,0,14,30,0,0,0,0,0,0,0,0,0,0,17,30,0,0,16,30,0,0,0,0,0,0,0,0,0,0,19,30,0,0,18,30,0,0,0,0,0,0,0,0,0,0,21,30,0,0,20,30,0,0,0,0,0,0,0,0,0,0,23,30,0,0,22,30,0,0,0,0,0,0,0,0,0,0,25,30,0,0,24,30,0,0,0,0,0,0,0,0,0,0,27,30,0,0,26,30,0,0,0,0,0,0,0,0,0,0,29,30,0,0,28,30,0,0,0,0,0,0,0,0,0,0,31,30,0,0,30,30,0,0,0,0,0,0,0,0,0,0,33,30,0,0,32,30,0,0,0,0,0,0,0,0,0,0,35,30,0,0,34,30,0,0,0,0,0,0,0,0,0,0,37,30,0,0,36,30,0,0,0,0,0,0,0,0,0,0,39,30,0,0,38,30,0,0,0,0,0,0,0,0,0,0,41,30,0,0,40,30,0,0,0,0,0,0,0,0,0,0,43,30,0,0,42,30,0,0,0,0,0,0,0,0,0,0,45,30,0,0,44,30,0,0,0,0,0,0,0,0,0,0,47,30,0,0,46,30,0,0,0,0,0,0,0,0,0,0,49,30,0,0,48,30,0,0,0,0,0,0,0,0,0,0,51,30,0,0,50,30,0,0,0,0,0,0,0,0,0,0,53,30,0,0,52,30,0,0,0,0,0,0,0,0,0,0,55,30,0,0,54,30,0,0,0,0,0,0,0,0,0,0,57,30,0,0,56,30,0,0,0,0,0,0,0,0,0,0,59,30,0,0,58,30,0,0,0,0,0,0,0,0,0,0,61,30,0,0,60,30,0,0,0,0,0,0,0,0,0,0,63,30,0,0,62,30,0,0,0,0,0,0,0,0,0,0,65,30,0,0,64,30,0,0,0,0,0,0,0,0,0,0,67,30,0,0,66,30,0,0,0,0,0,0,0,0,0,0,69,30,0,0,68,30,0,0,0,0,0,0,0,0,0,0,71,30,0,0,70,30,0,0,0,0,0,0,0,0,0,0,73,30,0,0,72,30,0,0,0,0,0,0,0,0,0,0,75,30,0,0,74,30,0,0,0,0,0,0,0,0,0,0,77,30,0,0,76,30,0,0,0,0,0,0,0,0,0,0,79,30,0,0,78,30,0,0,0,0,0,0,0,0,0,0,81,30,0,0,80,30,0,0,0,0,0,0,0,0,0,0,83,30,0,0,82,30,0,0,0,0,0,0,0,0,0,0,85,30,0,0,84,30,0,0,0,0,0,0,0,0,0,0,87,30,0,0,86,30,0,0,0,0,0,0,0,0,0,0,89,30,0,0,88,30,0,0,0,0,0,0,0,0,0,0,91,30,0,0,90,30,0,0,0,0,0,0,0,0,0,0,93,30,0,0,92,30,0,0,0,0,0,0,0,0,0,0,95,30,0,0,94,30,0,0,0,0,0,0,0,0,0,0,97,30,0,0,96,30,0,0,0,0,0,0,0,0,0,0,99,30,0,0,98,30,0,0,0,0,0,0,0,0,0,0,101,30,0,0,100,30,0,0,0,0,0,0,0,0,0,0,103,30,0,0,102,30,0,0,0,0,0,0,0,0,0,0,105,30,0,0,104,30,0,0,0,0,0,0,0,0,0,0,107,30,0,0,106,30,0,0,0,0,0,0,0,0,0,0,109,30,0,0,108,30,0,0,0,0,0,0,0,0,0,0,111,30,0,0,110,30,0,0,0,0,0,0,0,0,0,0,113,30,0,0,112,30,0,0,0,0,0,0,0,0,0,0,115,30,0,0,114,30,0,0,0,0,0,0,0,0,0,0,117,30,0,0,116,30,0,0,0,0,0,0,0,0,0,0,119,30,0,0,118,30,0,0,0,0,0,0,0,0,0,0,121,30,0,0,120,30,0,0,0,0,0,0,0,0,0,0,123,30,0,0,122,30,0,0,0,0,0,0,0,0,0,0,125,30,0,0,124,30,0,0,0,0,0,0,0,0,0,0,127,30,0,0,126,30,0,0,0,0,0,0,0,0,0,0,129,30,0,0,128,30,0,0,0,0,0,0,0,0,0,0,131,30,0,0,130,30,0,0,0,0,0,0,0,0,0,0,133,30,0,0,132,30,0,0,0,0,0,0,0,0,0,0,135,30,0,0,134,30,0,0,0,0,0,0,0,0,0,0,137,30,0,0,136,30,0,0,0,0,0,0,0,0,0,0,139,30,0,0,138,30,0,0,0,0,0,0,0,0,0,0,141,30,0,0,140,30,0,0,0,0,0,0,0,0,0,0,143,30,0,0,142,30,0,0,0,0,0,0,0,0,0,0,145,30,0,0,144,30,0,0,0,0,0,0,0,0,0,0,147,30,0,0,146,30,0,0,0,0,0,0,0,0,0,0,149,30,0,0,148,30,0,0,0,0,0,0,0,0,0,0,150,30,0,0,72,0,0,0,49,3,0,0,0,0,0,0,151,30,0,0,84,0,0,0,8,3,0,0,0,0,0,0,152,30,0,0,87,0,0,0,10,3,0,0,0,0,0,0,153,30,0,0,89,0,0,0,10,3,0,0,0,0,0,0,154,30,0,0,65,0,0,0,190,2,0,0,0,0,0,0,155,30,0,0,96,30,0,0,0,0,0,0,0,0,0,0,161,30,0,0,160,30,0,0,0,0,0,0,0,0,0,0,163,30,0,0,162,30,0,0,0,0,0,0,0,0,0,0,165,30,0,0,164,30,0,0,0,0,0,0,0,0,0,0,167,30,0,0,166,30,0,0,0,0,0,0,0,0,0,0,169,30,0,0,168,30,0,0,0,0,0,0,0,0,0,0,171,30,0,0,170,30,0,0,0,0,0,0,0,0,0,0,173,30,0,0,172,30,0,0,0,0,0,0,0,0,0,0,175,30,0,0,174,30,0,0,0,0,0,0,0,0,0,0,177,30,0,0,176,30,0,0,0,0,0,0,0,0,0,0,179,30,0,0,178,30,0,0,0,0,0,0,0,0,0,0,181,30,0,0,180,30,0,0,0,0,0,0,0,0,0,0,183,30,0,0,182,30,0,0,0,0,0,0,0,0,0,0,185,30,0,0,184,30,0,0,0,0,0,0,0,0,0,0,187,30,0,0,186,30,0,0,0,0,0,0,0,0,0,0,189,30,0,0,188,30,0,0,0,0,0,0,0,0,0,0,191,30,0,0,190,30,0,0,0,0,0,0,0,0,0,0,193,30,0,0,192,30,0,0,0,0,0,0,0,0,0,0,195,30,0,0,194,30,0,0,0,0,0,0,0,0,0,0,197,30,0,0,196,30,0,0,0,0,0,0,0,0,0,0,199,30,0,0,198,30,0,0,0,0,0,0,0,0,0,0,201,30,0,0,200,30,0,0,0,0,0,0,0,0,0,0,203,30,0,0,202,30,0,0,0,0,0,0,0,0,0,0,205,30,0,0,204,30,0,0,0,0,0,0,0,0,0,0,207,30,0,0,206,30,0,0,0,0,0,0,0,0,0,0,209,30,0,0,208,30,0,0,0,0,0,0,0,0,0,0,211,30,0,0,210,30,0,0,0,0,0,0,0,0,0,0,213,30,0,0,212,30,0,0,0,0,0,0,0,0,0,0,215,30,0,0,214,30,0,0,0,0,0,0,0,0,0,0,217,30,0,0,216,30,0,0,0,0,0,0,0,0,0,0,219,30,0,0,218,30,0,0,0,0,0,0,0,0,0,0,221,30,0,0,220,30,0,0,0,0,0,0,0,0,0,0,223,30,0,0,222,30,0,0,0,0,0,0,0,0,0,0,225,30,0,0,224,30,0,0,0,0,0,0,0,0,0,0,227,30,0,0,226,30,0,0,0,0,0,0,0,0,0,0,229,30,0,0,228,30,0,0,0,0,0,0,0,0,0,0,231,30,0,0,230,30,0,0,0,0,0,0,0,0,0,0,233,30,0,0,232,30,0,0,0,0,0,0,0,0,0,0,235,30,0,0,234,30,0,0,0,0,0,0,0,0,0,0,237,30,0,0,236,30,0,0,0,0,0,0,0,0,0,0,239,30,0,0,238,30,0,0,0,0,0,0,0,0,0,0,241,30,0,0,240,30,0,0,0,0,0,0,0,0,0,0,243,30,0,0,242,30,0,0,0,0,0,0,0,0,0,0,245,30,0,0,244,30,0,0,0,0,0,0,0,0,0,0,247,30,0,0,246,30,0,0,0,0,0,0,0,0,0,0,249,30,0,0,248,30,0,0,0,0,0,0,0,0,0,0,251,30,0,0,250,30,0,0,0,0,0,0,0,0,0,0,253,30,0,0,252,30,0,0,0,0,0,0,0,0,0,0,255,30,0,0,254,30,0,0,0,0,0,0,0,0,0,0,0,31,0,0,8,31,0,0,0,0,0,0,0,0,0,0,1,31,0,0,9,31,0,0,0,0,0,0,0,0,0,0,2,31,0,0,10,31,0,0,0,0,0,0,0,0,0,0,3,31,0,0,11,31,0,0,0,0,0,0,0,0,0,0,4,31,0,0,12,31,0,0,0,0,0,0,0,0,0,0,5,31,0,0,13,31,0,0,0,0,0,0,0,0,0,0,6,31,0,0,14,31,0,0,0,0,0,0,0,0,0,0,7,31,0,0,15,31,0,0,0,0,0,0,0,0,0,0,16,31,0,0,24,31,0,0,0,0,0,0,0,0,0,0,17,31,0,0,25,31,0,0,0,0,0,0,0,0,0,0,18,31,0,0,26,31,0,0,0,0,0,0,0,0,0,0,19,31,0,0,27,31,0,0,0,0,0,0,0,0,0,0,20,31,0,0,28,31,0,0,0,0,0,0,0,0,0,0,21,31,0,0,29,31,0,0,0,0,0,0,0,0,0,0,32,31,0,0,40,31,0,0,0,0,0,0,0,0,0,0,33,31,0,0,41,31,0,0,0,0,0,0,0,0,0,0,34,31,0,0,42,31,0,0,0,0,0,0,0,0,0,0,35,31,0,0,43,31,0,0,0,0,0,0,0,0,0,0,36,31,0,0,44,31,0,0,0,0,0,0,0,0,0,0,37,31,0,0,45,31,0,0,0,0,0,0,0,0,0,0,38,31,0,0,46,31,0,0,0,0,0,0,0,0,0,0,39,31,0,0,47,31,0,0,0,0,0,0,0,0,0,0,48,31,0,0,56,31,0,0,0,0,0,0,0,0,0,0,49,31,0,0,57,31,0,0,0,0,0,0,0,0,0,0,50,31,0,0,58,31,0,0,0,0,0,0,0,0,0,0,51,31,0,0,59,31,0,0,0,0,0,0,0,0,0,0,52,31,0,0,60,31,0,0,0,0,0,0,0,0,0,0,53,31,0,0,61,31,0,0,0,0,0,0,0,0,0,0,54,31,0,0,62,31,0,0,0,0,0,0,0,0,0,0,55,31,0,0,63,31,0,0,0,0,0,0,0,0,0,0,64,31,0,0,72,31,0,0,0,0,0,0,0,0,0,0,65,31,0,0,73,31,0,0,0,0,0,0,0,0,0,0,66,31,0,0,74,31,0,0,0,0,0,0,0,0,0,0,67,31,0,0,75,31,0,0,0,0,0,0,0,0,0,0,68,31,0,0,76,31,0,0,0,0,0,0,0,0,0,0,69,31,0,0,77,31,0,0,0,0,0,0,0,0,0,0,80,31,0,0,165,3,0,0,19,3,0,0,0,0,0,0,81,31,0,0,89,31,0,0,0,0,0,0,0,0,0,0,82,31,0,0,165,3,0,0,19,3,0,0,0,3,0,0,83,31,0,0,91,31,0,0,0,0,0,0,0,0,0,0,84,31,0,0,165,3,0,0,19,3,0,0,1,3,0,0,85,31,0,0,93,31,0,0,0,0,0,0,0,0,0,0,86,31,0,0,165,3,0,0,19,3,0,0,66,3,0,0,87,31,0,0,95,31,0,0,0,0,0,0,0,0,0,0,96,31,0,0,104,31,0,0,0,0,0,0,0,0,0,0,97,31,0,0,105,31,0,0,0,0,0,0,0,0,0,0,98,31,0,0,106,31,0,0,0,0,0,0,0,0,0,0,99,31,0,0,107,31,0,0,0,0,0,0,0,0,0,0,100,31,0,0,108,31,0,0,0,0,0,0,0,0,0,0,101,31,0,0,109,31,0,0,0,0,0,0,0,0,0,0,102,31,0,0,110,31,0,0,0,0,0,0,0,0,0,0,103,31,0,0,111,31,0,0,0,0,0,0,0,0,0,0,112,31,0,0,186,31,0,0,0,0,0,0,0,0,0,0,113,31,0,0,187,31,0,0,0,0,0,0,0,0,0,0,114,31,0,0,200,31,0,0,0,0,0,0,0,0,0,0,115,31,0,0,201,31,0,0,0,0,0,0,0,0,0,0,116,31,0,0,202,31,0,0,0,0,0,0,0,0,0,0,117,31,0,0,203,31,0,0,0,0,0,0,0,0,0,0,118,31,0,0,218,31,0,0,0,0,0,0,0,0,0,0,119,31,0,0,219,31,0,0,0,0,0,0,0,0,0,0,120,31,0,0,248,31,0,0,0,0,0,0,0,0,0,0,121,31,0,0,249,31,0,0,0,0,0,0,0,0,0,0,122,31,0,0,234,31,0,0,0,0,0,0,0,0,0,0,123,31,0,0,235,31,0,0,0,0,0,0,0,0,0,0,124,31,0,0,250,31,0,0,0,0,0,0,0,0,0,0,125,31,0,0,251,31,0,0,0,0,0,0,0,0,0,0,128,31,0,0,8,31,0,0,153,3,0,0,0,0,0,0,129,31,0,0,9,31,0,0,153,3,0,0,0,0,0,0,130,31,0,0,10,31,0,0,153,3,0,0,0,0,0,0,131,31,0,0,11,31,0,0,153,3,0,0,0,0,0,0,132,31,0,0,12,31,0,0,153,3,0,0,0,0,0,0,133,31,0,0,13,31,0,0,153,3,0,0,0,0,0,0,134,31,0,0,14,31,0,0,153,3,0,0,0,0,0,0,135,31,0,0,15,31,0,0,153,3,0,0,0,0,0,0,136,31,0,0,8,31,0,0,153,3,0,0,0,0,0,0,137,31,0,0,9,31,0,0,153,3,0,0,0,0,0,0,138,31,0,0,10,31,0,0,153,3,0,0,0,0,0,0,139,31,0,0,11,31,0,0,153,3,0,0,0,0,0,0,140,31,0,0,12,31,0,0,153,3,0,0,0,0,0,0,141,31,0,0,13,31,0,0,153,3,0,0,0,0,0,0,142,31,0,0,14,31,0,0,153,3,0,0,0,0,0,0,143,31,0,0,15,31,0,0,153,3,0,0,0,0,0,0,144,31,0,0,40,31,0,0,153,3,0,0,0,0,0,0,145,31,0,0,41,31,0,0,153,3,0,0,0,0,0,0,146,31,0,0,42,31,0,0,153,3,0,0,0,0,0,0,147,31,0,0,43,31,0,0,153,3,0,0,0,0,0,0,148,31,0,0,44,31,0,0,153,3,0,0,0,0,0,0,149,31,0,0,45,31,0,0,153,3,0,0,0,0,0,0,150,31,0,0,46,31,0,0,153,3,0,0,0,0,0,0,151,31,0,0,47,31,0,0,153,3,0,0,0,0,0,0,152,31,0,0,40,31,0,0,153,3,0,0,0,0,0,0,153,31,0,0,41,31,0,0,153,3,0,0,0,0,0,0,154,31,0,0,42,31,0,0,153,3,0,0,0,0,0,0,155,31,0,0,43,31,0,0,153,3,0,0,0,0,0,0,156,31,0,0,44,31,0,0,153,3,0,0,0,0,0,0,157,31,0,0,45,31,0,0,153,3,0,0,0,0,0,0,158,31,0,0,46,31,0,0,153,3,0,0,0,0,0,0,159,31,0,0,47,31,0,0,153,3,0,0,0,0,0,0,160,31,0,0,104,31,0,0,153,3,0,0,0,0,0,0,161,31,0,0,105,31,0,0,153,3,0,0,0,0,0,0,162,31,0,0,106,31,0,0,153,3,0,0,0,0,0,0,163,31,0,0,107,31,0,0,153,3,0,0,0,0,0,0,164,31,0,0,108,31,0,0,153,3,0,0,0,0,0,0,165,31,0,0,109,31,0,0,153,3,0,0,0,0,0,0,166,31,0,0,110,31,0,0,153,3,0,0,0,0,0,0,167,31,0,0,111,31,0,0,153,3,0,0,0,0,0,0,168,31,0,0,104,31,0,0,153,3,0,0,0,0,0,0,169,31,0,0,105,31,0,0,153,3,0,0,0,0,0,0,170,31,0,0,106,31,0,0,153,3,0,0,0,0,0,0,171,31,0,0,107,31,0,0,153,3,0,0,0,0,0,0,172,31,0,0,108,31,0,0,153,3,0,0,0,0,0,0,173,31,0,0,109,31,0,0,153,3,0,0,0,0,0,0,174,31,0,0,110,31,0,0,153,3,0,0,0,0,0,0,175,31,0,0,111,31,0,0,153,3,0,0,0,0,0,0,176,31,0,0,184,31,0,0,0,0,0,0,0,0,0,0,177,31,0,0,185,31,0,0,0,0,0,0,0,0,0,0,178,31,0,0,186,31,0,0,153,3,0,0,0,0,0,0,179,31,0,0,145,3,0,0,153,3,0,0,0,0,0,0,180,31,0,0,134,3,0,0,153,3,0,0,0,0,0,0,182,31,0,0,145,3,0,0,66,3,0,0,0,0,0,0,183,31,0,0,145,3,0,0,66,3,0,0,153,3,0,0,188,31,0,0,145,3,0,0,153,3,0,0,0,0,0,0,190,31,0,0,153,3,0,0,0,0,0,0,0,0,0,0,194,31,0,0,202,31,0,0,153,3,0,0,0,0,0,0,195,31,0,0,151,3,0,0,153,3,0,0,0,0,0,0,196,31,0,0,137,3,0,0,153,3,0,0,0,0,0,0,198,31,0,0,151,3,0,0,66,3,0,0,0,0,0,0,199,31,0,0,151,3,0,0,66,3,0,0,153,3,0,0,204,31,0,0,151,3,0,0,153,3,0,0,0,0,0,0,208,31,0,0,216,31,0,0,0,0,0,0,0,0,0,0,209,31,0,0,217,31,0,0,0,0,0,0,0,0,0,0,210,31,0,0,153,3,0,0,8,3,0,0,0,3,0,0,211,31,0,0,153,3,0,0,8,3,0,0,1,3,0,0,214,31,0,0,153,3,0,0,66,3,0,0,0,0,0,0,215,31,0,0,153,3,0,0,8,3,0,0,66,3,0,0,224,31,0,0,232,31,0,0,0,0,0,0,0,0,0,0,225,31,0,0,233,31,0,0,0,0,0,0,0,0,0,0,226,31,0,0,165,3,0,0,8,3,0,0,0,3,0,0,227,31,0,0,165,3,0,0,8,3,0,0,1,3,0,0,228,31,0,0,161,3,0,0,19,3,0,0,0,0,0,0,229,31,0,0,236,31,0,0,0,0,0,0,0,0,0,0,230,31,0,0,165,3,0,0,66,3,0,0,0,0,0,0,231,31,0,0,165,3,0,0,8,3,0,0,66,3,0,0,242,31,0,0,250,31,0,0,153,3,0,0,0,0,0,0,243,31,0,0,169,3,0,0,153,3,0,0,0,0,0,0,244,31,0,0,143,3,0,0,153,3,0,0,0,0,0,0,246,31,0,0,169,3,0,0,66,3,0,0,0,0,0,0,247,31,0,0,169,3,0,0,66,3,0,0,153,3,0,0,252,31,0,0,169,3,0,0,153,3,0,0,0,0,0,0,78,33,0,0,50,33,0,0,0,0,0,0,0,0,0,0,112,33,0,0,96,33,0,0,0,0,0,0,0,0,0,0,113,33,0,0,97,33,0,0,0,0,0,0,0,0,0,0,114,33,0,0,98,33,0,0,0,0,0,0,0,0,0,0,115,33,0,0,99,33,0,0,0,0,0,0,0,0,0,0,116,33,0,0,100,33,0,0,0,0,0,0,0,0,0,0,117,33,0,0,101,33,0,0,0,0,0,0,0,0,0,0,118,33,0,0,102,33,0,0,0,0,0,0,0,0,0,0,119,33,0,0,103,33,0,0,0,0,0,0,0,0,0,0,120,33,0,0,104,33,0,0,0,0,0,0,0,0,0,0,121,33,0,0,105,33,0,0,0,0,0,0,0,0,0,0,122,33,0,0,106,33,0,0,0,0,0,0,0,0,0,0,123,33,0,0,107,33,0,0,0,0,0,0,0,0,0,0,124,33,0,0,108,33,0,0,0,0,0,0,0,0,0,0,125,33,0,0,109,33,0,0,0,0,0,0,0,0,0,0,126,33,0,0,110,33,0,0,0,0,0,0,0,0,0,0,127,33,0,0,111,33,0,0,0,0,0,0,0,0,0,0,132,33,0,0,131,33,0,0,0,0,0,0,0,0,0,0,208,36,0,0,182,36,0,0,0,0,0,0,0,0,0,0,209,36,0,0,183,36,0,0,0,0,0,0,0,0,0,0,210,36,0,0,184,36,0,0,0,0,0,0,0,0,0,0,211,36,0,0,185,36,0,0,0,0,0,0,0,0,0,0,212,36,0,0,186,36,0,0,0,0,0,0,0,0,0,0,213,36,0,0,187,36,0,0,0,0,0,0,0,0,0,0,214,36,0,0,188,36,0,0,0,0,0,0,0,0,0,0,215,36,0,0,189,36,0,0,0,0,0,0,0,0,0,0,216,36,0,0,190,36,0,0,0,0,0,0,0,0,0,0,217,36,0,0,191,36,0,0,0,0,0,0,0,0,0,0,218,36,0,0,192,36,0,0,0,0,0,0,0,0,0,0,219,36,0,0,193,36,0,0,0,0,0,0,0,0,0,0,220,36,0,0,194,36,0,0,0,0,0,0,0,0,0,0,221,36,0,0,195,36,0,0,0,0,0,0,0,0,0,0,222,36,0,0,196,36,0,0,0,0,0,0,0,0,0,0,223,36,0,0,197,36,0,0,0,0,0,0,0,0,0,0,224,36,0,0,198,36,0,0,0,0,0,0,0,0,0,0,225,36,0,0,199,36,0,0,0,0,0,0,0,0,0,0,226,36,0,0,200,36,0,0,0,0,0,0,0,0,0,0,227,36,0,0,201,36,0,0,0,0,0,0,0,0,0,0,228,36,0,0,202,36,0,0,0,0,0,0,0,0,0,0,229,36,0,0,203,36,0,0,0,0,0,0,0,0,0,0,230,36,0,0,204,36,0,0,0,0,0,0,0,0,0,0,231,36,0,0,205,36,0,0,0,0,0,0,0,0,0,0,232,36,0,0,206,36,0,0,0,0,0,0,0,0,0,0,233,36,0,0,207,36,0,0,0,0,0,0,0,0,0,0,48,44,0,0,0,44,0,0,0,0,0,0,0,0,0,0,49,44,0,0,1,44,0,0,0,0,0,0,0,0,0,0,50,44,0,0,2,44,0,0,0,0,0,0,0,0,0,0,51,44,0,0,3,44,0,0,0,0,0,0,0,0,0,0,52,44,0,0,4,44,0,0,0,0,0,0,0,0,0,0,53,44,0,0,5,44,0,0,0,0,0,0,0,0,0,0,54,44,0,0,6,44,0,0,0,0,0,0,0,0,0,0,55,44,0,0,7,44,0,0,0,0,0,0,0,0,0,0,56,44,0,0,8,44,0,0,0,0,0,0,0,0,0,0,57,44,0,0,9,44,0,0,0,0,0,0,0,0,0,0,58,44,0,0,10,44,0,0,0,0,0,0,0,0,0,0,59,44,0,0,11,44,0,0,0,0,0,0,0,0,0,0,60,44,0,0,12,44,0,0,0,0,0,0,0,0,0,0,61,44,0,0,13,44,0,0,0,0,0,0,0,0,0,0,62,44,0,0,14,44,0,0,0,0,0,0,0,0,0,0,63,44,0,0,15,44,0,0,0,0,0,0,0,0,0,0,64,44,0,0,16,44,0,0,0,0,0,0,0,0,0,0,65,44,0,0,17,44,0,0,0,0,0,0,0,0,0,0,66,44,0,0,18,44,0,0,0,0,0,0,0,0,0,0,67,44,0,0,19,44,0,0,0,0,0,0,0,0,0,0,68,44,0,0,20,44,0,0,0,0,0,0,0,0,0,0,69,44,0,0,21,44,0,0,0,0,0,0,0,0,0,0,70,44,0,0,22,44,0,0,0,0,0,0,0,0,0,0,71,44,0,0,23,44,0,0,0,0,0,0,0,0,0,0,72,44,0,0,24,44,0,0,0,0,0,0,0,0,0,0,73,44,0,0,25,44,0,0,0,0,0,0,0,0,0,0,74,44,0,0,26,44,0,0,0,0,0,0,0,0,0,0,75,44,0,0,27,44,0,0,0,0,0,0,0,0,0,0,76,44,0,0,28,44,0,0,0,0,0,0,0,0,0,0,77,44,0,0,29,44,0,0,0,0,0,0,0,0,0,0,78,44,0,0,30,44,0,0,0,0,0,0,0,0,0,0,79,44,0,0,31,44,0,0,0,0,0,0,0,0,0,0,80,44,0,0,32,44,0,0,0,0,0,0,0,0,0,0,81,44,0,0,33,44,0,0,0,0,0,0,0,0,0,0,82,44,0,0,34,44,0,0,0,0,0,0,0,0,0,0,83,44,0,0,35,44,0,0,0,0,0,0,0,0,0,0,84,44,0,0,36,44,0,0,0,0,0,0,0,0,0,0,85,44,0,0,37,44,0,0,0,0,0,0,0,0,0,0,86,44,0,0,38,44,0,0,0,0,0,0,0,0,0,0,87,44,0,0,39,44,0,0,0,0,0,0,0,0,0,0,88,44,0,0,40,44,0,0,0,0,0,0,0,0,0,0,89,44,0,0,41,44,0,0,0,0,0,0,0,0,0,0,90,44,0,0,42,44,0,0,0,0,0,0,0,0,0,0,91,44,0,0,43,44,0,0,0,0,0,0,0,0,0,0,92,44,0,0,44,44,0,0,0,0,0,0,0,0,0,0,93,44,0,0,45,44,0,0,0,0,0,0,0,0,0,0,94,44,0,0,46,44,0,0,0,0,0,0,0,0,0,0,97,44,0,0,96,44,0,0,0,0,0,0,0,0,0,0,101,44,0,0,58,2,0,0,0,0,0,0,0,0,0,0,102,44,0,0,62,2,0,0,0,0,0,0,0,0,0,0,104,44,0,0,103,44,0,0,0,0,0,0,0,0,0,0,106,44,0,0,105,44,0,0,0,0,0,0,0,0,0,0,108,44,0,0,107,44,0,0,0,0,0,0,0,0,0,0,115,44,0,0,114,44,0,0,0,0,0,0,0,0,0,0,118,44,0,0,117,44,0,0,0,0,0,0,0,0,0,0,129,44,0,0,128,44,0,0,0,0,0,0,0,0,0,0,131,44,0,0,130,44,0,0,0,0,0,0,0,0,0,0,133,44,0,0,132,44,0,0,0,0,0,0,0,0,0,0,135,44,0,0,134,44,0,0,0,0,0,0,0,0,0,0,137,44,0,0,136,44,0,0,0,0,0,0,0,0,0,0,139,44,0,0,138,44,0,0,0,0,0,0,0,0,0,0,141,44,0,0,140,44,0,0,0,0,0,0,0,0,0,0,143,44,0,0,142,44,0,0,0,0,0,0,0,0,0,0,145,44,0,0,144,44,0,0,0,0,0,0,0,0,0,0,147,44,0,0,146,44,0,0,0,0,0,0,0,0,0,0,149,44,0,0,148,44,0,0,0,0,0,0,0,0,0,0,151,44,0,0,150,44,0,0,0,0,0,0,0,0,0,0,153,44,0,0,152,44,0,0,0,0,0,0,0,0,0,0,155,44,0,0,154,44,0,0,0,0,0,0,0,0,0,0,157,44,0,0,156,44,0,0,0,0,0,0,0,0,0,0,159,44,0,0,158,44,0,0,0,0,0,0,0,0,0,0,161,44,0,0,160,44,0,0,0,0,0,0,0,0,0,0,163,44,0,0,162,44,0,0,0,0,0,0,0,0,0,0,165,44,0,0,164,44,0,0,0,0,0,0,0,0,0,0,167,44,0,0,166,44,0,0,0,0,0,0,0,0,0,0,169,44,0,0,168,44,0,0,0,0,0,0,0,0,0,0,171,44,0,0,170,44,0,0,0,0,0,0,0,0,0,0,173,44,0,0,172,44,0,0,0,0,0,0,0,0,0,0,175,44,0,0,174,44,0,0,0,0,0,0,0,0,0,0,177,44,0,0,176,44,0,0,0,0,0,0,0,0,0,0,179,44,0,0,178,44,0,0,0,0,0,0,0,0,0,0,181,44,0,0,180,44,0,0,0,0,0,0,0,0,0,0,183,44,0,0,182,44,0,0,0,0,0,0,0,0,0,0,185,44,0,0,184,44,0,0,0,0,0,0,0,0,0,0,187,44,0,0,186,44,0,0,0,0,0,0,0,0,0,0,189,44,0,0,188,44,0,0,0,0,0,0,0,0,0,0,191,44,0,0,190,44,0,0,0,0,0,0,0,0,0,0,193,44,0,0,192,44,0,0,0,0,0,0,0,0,0,0,195,44,0,0,194,44,0,0,0,0,0,0,0,0,0,0,197,44,0,0,196,44,0,0,0,0,0,0,0,0,0,0,199,44,0,0,198,44,0,0,0,0,0,0,0,0,0,0,201,44,0,0,200,44,0,0,0,0,0,0,0,0,0,0,203,44,0,0,202,44,0,0,0,0,0,0,0,0,0,0,205,44,0,0,204,44,0,0,0,0,0,0,0,0,0,0,207,44,0,0,206,44,0,0,0,0,0,0,0,0,0,0,209,44,0,0,208,44,0,0,0,0,0,0,0,0,0,0,211,44,0,0,210,44,0,0,0,0,0,0,0,0,0,0,213,44,0,0,212,44,0,0,0,0,0,0,0,0,0,0,215,44,0,0,214,44,0,0,0,0,0,0,0,0,0,0,217,44,0,0,216,44,0,0,0,0,0,0,0,0,0,0,219,44,0,0,218,44,0,0,0,0,0,0,0,0,0,0,221,44,0,0,220,44,0,0,0,0,0,0,0,0,0,0,223,44,0,0,222,44,0,0,0,0,0,0,0,0,0,0,225,44,0,0,224,44,0,0,0,0,0,0,0,0,0,0,227,44,0,0,226,44,0,0,0,0,0,0,0,0,0,0,236,44,0,0,235,44,0,0,0,0,0,0,0,0,0,0,238,44,0,0,237,44,0,0,0,0,0,0,0,0,0,0,243,44,0,0,242,44,0,0,0,0,0,0,0,0,0,0,0,45,0,0,160,16,0,0,0,0,0,0,0,0,0,0,1,45,0,0,161,16,0,0,0,0,0,0,0,0,0,0,2,45,0,0,162,16,0,0,0,0,0,0,0,0,0,0,3,45,0,0,163,16,0,0,0,0,0,0,0,0,0,0,4,45,0,0,164,16,0,0,0,0,0,0,0,0,0,0,5,45,0,0,165,16,0,0,0,0,0,0,0,0,0,0,6,45,0,0,166,16,0,0,0,0,0,0,0,0,0,0,7,45,0,0,167,16,0,0,0,0,0,0,0,0,0,0,8,45,0,0,168,16,0,0,0,0,0,0,0,0,0,0,9,45,0,0,169,16,0,0,0,0,0,0,0,0,0,0,10,45,0,0,170,16,0,0,0,0,0,0,0,0,0,0,11,45,0,0,171,16,0,0,0,0,0,0,0,0,0,0,12,45,0,0,172,16,0,0,0,0,0,0,0,0,0,0,13,45,0,0,173,16,0,0,0,0,0,0,0,0,0,0,14,45,0,0,174,16,0,0,0,0,0,0,0,0,0,0,15,45,0,0,175,16,0,0,0,0,0,0,0,0,0,0,16,45,0,0,176,16,0,0,0,0,0,0,0,0,0,0,17,45,0,0,177,16,0,0,0,0,0,0,0,0,0,0,18,45,0,0,178,16,0,0,0,0,0,0,0,0,0,0,19,45,0,0,179,16,0,0,0,0,0,0,0,0,0,0,20,45,0,0,180,16,0,0,0,0,0,0,0,0,0,0,21,45,0,0,181,16,0,0,0,0,0,0,0,0,0,0,22,45,0,0,182,16,0,0,0,0,0,0,0,0,0,0,23,45,0,0,183,16,0,0,0,0,0,0,0,0,0,0,24,45,0,0,184,16,0,0,0,0,0,0,0,0,0,0,25,45,0,0,185,16,0,0,0,0,0,0,0,0,0,0,26,45,0,0,186,16,0,0,0,0,0,0,0,0,0,0,27,45,0,0,187,16,0,0,0,0,0,0,0,0,0,0,28,45,0,0,188,16,0,0,0,0,0,0,0,0,0,0,29,45,0,0,189,16,0,0,0,0,0,0,0,0,0,0,30,45,0,0,190,16,0,0,0,0,0,0,0,0,0,0,31,45,0,0,191,16,0,0,0,0,0,0,0,0,0,0,32,45,0,0,192,16,0,0,0,0,0,0,0,0,0,0,33,45,0,0,193,16,0,0,0,0,0,0,0,0,0,0,34,45,0,0,194,16,0,0,0,0,0,0,0,0,0,0,35,45,0,0,195,16,0,0,0,0,0,0,0,0,0,0,36,45,0,0,196,16,0,0,0,0,0,0,0,0,0,0,37,45,0,0,197,16,0,0,0,0,0,0,0,0,0,0,39,45,0,0,199,16,0,0,0,0,0,0,0,0,0,0,45,45,0,0,205,16,0,0,0,0,0,0,0,0,0,0,65,166,0,0,64,166,0,0,0,0,0,0,0,0,0,0,67,166,0,0,66,166,0,0,0,0,0,0,0,0,0,0,69,166,0,0,68,166,0,0,0,0,0,0,0,0,0,0,71,166,0,0,70,166,0,0,0,0,0,0,0,0,0,0,73,166,0,0,72,166,0,0,0,0,0,0,0,0,0,0,75,166,0,0,74,166,0,0,0,0,0,0,0,0,0,0,77,166,0,0,76,166,0,0,0,0,0,0,0,0,0,0,79,166,0,0,78,166,0,0,0,0,0,0,0,0,0,0,81,166,0,0,80,166,0,0,0,0,0,0,0,0,0,0,83,166,0,0,82,166,0,0,0,0,0,0,0,0,0,0,85,166,0,0,84,166,0,0,0,0,0,0,0,0,0,0,87,166,0,0,86,166,0,0,0,0,0,0,0,0,0,0,89,166,0,0,88,166,0,0,0,0,0,0,0,0,0,0,91,166,0,0,90,166,0,0,0,0,0,0,0,0,0,0,93,166,0,0,92,166,0,0,0,0,0,0,0,0,0,0,95,166,0,0,94,166,0,0,0,0,0,0,0,0,0,0,97,166,0,0,96,166,0,0,0,0,0,0,0,0,0,0,99,166,0,0,98,166,0,0,0,0,0,0,0,0,0,0,101,166,0,0,100,166,0,0,0,0,0,0,0,0,0,0,103,166,0,0,102,166,0,0,0,0,0,0,0,0,0,0,105,166,0,0,104,166,0,0,0,0,0,0,0,0,0,0,107,166,0,0,106,166,0,0,0,0,0,0,0,0,0,0,109,166,0,0,108,166,0,0,0,0,0,0,0,0,0,0,129,166,0,0,128,166,0,0,0,0,0,0,0,0,0,0,131,166,0,0,130,166,0,0,0,0,0,0,0,0,0,0,133,166,0,0,132,166,0,0,0,0,0,0,0,0,0,0,135,166,0,0,134,166,0,0,0,0,0,0,0,0,0,0,137,166,0,0,136,166,0,0,0,0,0,0,0,0,0,0,139,166,0,0,138,166,0,0,0,0,0,0,0,0,0,0,141,166,0,0,140,166,0,0,0,0,0,0,0,0,0,0,143,166,0,0,142,166,0,0,0,0,0,0,0,0,0,0,145,166,0,0,144,166,0,0,0,0,0,0,0,0,0,0,147,166,0,0,146,166,0,0,0,0,0,0,0,0,0,0,149,166,0,0,148,166,0,0,0,0,0,0,0,0,0,0,151,166,0,0,150,166,0,0,0,0,0,0,0,0,0,0,153,166,0,0,152,166,0,0,0,0,0,0,0,0,0,0,155,166,0,0,154,166,0,0,0,0,0,0,0,0,0,0,35,167,0,0,34,167,0,0,0,0,0,0,0,0,0,0,37,167,0,0,36,167,0,0,0,0,0,0,0,0,0,0,39,167,0,0,38,167,0,0,0,0,0,0,0,0,0,0,41,167,0,0,40,167,0,0,0,0,0,0,0,0,0,0,43,167,0,0,42,167,0,0,0,0,0,0,0,0,0,0,45,167,0,0,44,167,0,0,0,0,0,0,0,0,0,0,47,167,0,0,46,167,0,0,0,0,0,0,0,0,0,0,51,167,0,0,50,167,0,0,0,0,0,0,0,0,0,0,53,167,0,0,52,167,0,0,0,0,0,0,0,0,0,0,55,167,0,0,54,167,0,0,0,0,0,0,0,0,0,0,57,167,0,0,56,167,0,0,0,0,0,0,0,0,0,0,59,167,0,0,58,167,0,0,0,0,0,0,0,0,0,0,61,167,0,0,60,167,0,0,0,0,0,0,0,0,0,0,63,167,0,0,62,167,0,0,0,0,0,0,0,0,0,0,65,167,0,0,64,167,0,0,0,0,0,0,0,0,0,0,67,167,0,0,66,167,0,0,0,0,0,0,0,0,0,0,69,167,0,0,68,167,0,0,0,0,0,0,0,0,0,0,71,167,0,0,70,167,0,0,0,0,0,0,0,0,0,0,73,167,0,0,72,167,0,0,0,0,0,0,0,0,0,0,75,167,0,0,74,167,0,0,0,0,0,0,0,0,0,0,77,167,0,0,76,167,0,0,0,0,0,0,0,0,0,0,79,167,0,0,78,167,0,0,0,0,0,0,0,0,0,0,81,167,0,0,80,167,0,0,0,0,0,0,0,0,0,0,83,167,0,0,82,167,0,0,0,0,0,0,0,0,0,0,85,167,0,0,84,167,0,0,0,0,0,0,0,0,0,0,87,167,0,0,86,167,0,0,0,0,0,0,0,0,0,0,89,167,0,0,88,167,0,0,0,0,0,0,0,0,0,0,91,167,0,0,90,167,0,0,0,0,0,0,0,0,0,0,93,167,0,0,92,167,0,0,0,0,0,0,0,0,0,0,95,167,0,0,94,167,0,0,0,0,0,0,0,0,0,0,97,167,0,0,96,167,0,0,0,0,0,0,0,0,0,0,99,167,0,0,98,167,0,0,0,0,0,0,0,0,0,0,101,167,0,0,100,167,0,0,0,0,0,0,0,0,0,0,103,167,0,0,102,167,0,0,0,0,0,0,0,0,0,0,105,167,0,0,104,167,0,0,0,0,0,0,0,0,0,0,107,167,0,0,106,167,0,0,0,0,0,0,0,0,0,0,109,167,0,0,108,167,0,0,0,0,0,0,0,0,0,0,111,167,0,0,110,167,0,0,0,0,0,0,0,0,0,0,122,167,0,0,121,167,0,0,0,0,0,0,0,0,0,0,124,167,0,0,123,167,0,0,0,0,0,0,0,0,0,0,127,167,0,0,126,167,0,0,0,0,0,0,0,0,0,0,129,167,0,0,128,167,0,0,0,0,0,0,0,0,0,0,131,167,0,0,130,167,0,0,0,0,0,0,0,0,0,0,133,167,0,0,132,167,0,0,0,0,0,0,0,0,0,0,135,167,0,0,134,167,0,0,0,0,0,0,0,0,0,0,140,167,0,0,139,167,0,0,0,0,0,0,0,0,0,0,145,167,0,0,144,167,0,0,0,0,0,0,0,0,0,0,147,167,0,0,146,167,0,0,0,0,0,0,0,0,0,0,151,167,0,0,150,167,0,0,0,0,0,0,0,0,0,0,153,167,0,0,152,167,0,0,0,0,0,0,0,0,0,0,155,167,0,0,154,167,0,0,0,0,0,0,0,0,0,0,157,167,0,0,156,167,0,0,0,0,0,0,0,0,0,0,159,167,0,0,158,167,0,0,0,0,0,0,0,0,0,0,161,167,0,0,160,167,0,0,0,0,0,0,0,0,0,0,163,167,0,0,162,167,0,0,0,0,0,0,0,0,0,0,165,167,0,0,164,167,0,0,0,0,0,0,0,0,0,0,167,167,0,0,166,167,0,0,0,0,0,0,0,0,0,0,169,167,0,0,168,167,0,0,0,0,0,0,0,0,0,0,181,167,0,0,180,167,0,0,0,0,0,0,0,0,0,0,183,167,0,0,182,167,0,0,0,0,0,0,0,0,0,0,83,171,0,0,179,167,0,0,0,0,0,0,0,0,0,0,112,171,0,0,160,19,0,0,0,0,0,0,0,0,0,0,113,171,0,0,161,19,0,0,0,0,0,0,0,0,0,0,114,171,0,0,162,19,0,0,0,0,0,0,0,0,0,0,115,171,0,0,163,19,0,0,0,0,0,0,0,0,0,0,116,171,0,0,164,19,0,0,0,0,0,0,0,0,0,0,117,171,0,0,165,19,0,0,0,0,0,0,0,0,0,0,118,171,0,0,166,19,0,0,0,0,0,0,0,0,0,0,119,171,0,0,167,19,0,0,0,0,0,0,0,0,0,0,120,171,0,0,168,19,0,0,0,0,0,0,0,0,0,0,121,171,0,0,169,19,0,0,0,0,0,0,0,0,0,0,122,171,0,0,170,19,0,0,0,0,0,0,0,0,0,0,123,171,0,0,171,19,0,0,0,0,0,0,0,0,0,0,124,171,0,0,172,19,0,0,0,0,0,0,0,0,0,0,125,171,0,0,173,19,0,0,0,0,0,0,0,0,0,0,126,171,0,0,174,19,0,0,0,0,0,0,0,0,0,0,127,171,0,0,175,19,0,0,0,0,0,0,0,0,0,0,128,171,0,0,176,19,0,0,0,0,0,0,0,0,0,0,129,171,0,0,177,19,0,0,0,0,0,0,0,0,0,0,130,171,0,0,178,19,0,0,0,0,0,0,0,0,0,0,131,171,0,0,179,19,0,0,0,0,0,0,0,0,0,0,132,171,0,0,180,19,0,0,0,0,0,0,0,0,0,0,133,171,0,0,181,19,0,0,0,0,0,0,0,0,0,0,134,171,0,0,182,19,0,0,0,0,0,0,0,0,0,0,135,171,0,0,183,19,0,0,0,0,0,0,0,0,0,0,136,171,0,0,184,19,0,0,0,0,0,0,0,0,0,0,137,171,0,0,185,19,0,0,0,0,0,0,0,0,0,0,138,171,0,0,186,19,0,0,0,0,0,0,0,0,0,0,139,171,0,0,187,19,0,0,0,0,0,0,0,0,0,0,140,171,0,0,188,19,0,0,0,0,0,0,0,0,0,0,141,171,0,0,189,19,0,0,0,0,0,0,0,0,0,0,142,171,0,0,190,19,0,0,0,0,0,0,0,0,0,0,143,171,0,0,191,19,0,0,0,0,0,0,0,0,0,0,144,171,0,0,192,19,0,0,0,0,0,0,0,0,0,0,145,171,0,0,193,19,0,0,0,0,0,0,0,0,0,0,146,171,0,0,194,19,0,0,0,0,0,0,0,0,0,0,147,171,0,0,195,19,0,0,0,0,0,0,0,0,0,0,148,171,0,0,196,19,0,0,0,0,0,0,0,0,0,0,149,171,0,0,197,19,0,0,0,0,0,0,0,0,0,0,150,171,0,0,198,19,0,0,0,0,0,0,0,0,0,0,151,171,0,0,199,19,0,0,0,0,0,0,0,0,0,0,152,171,0,0,200,19,0,0,0,0,0,0,0,0,0,0,153,171,0,0,201,19,0,0,0,0,0,0,0,0,0,0,154,171,0,0,202,19,0,0,0,0,0,0,0,0,0,0,155,171,0,0,203,19,0,0,0,0,0,0,0,0,0,0,156,171,0,0,204,19,0,0,0,0,0,0,0,0,0,0,157,171,0,0,205,19,0,0,0,0,0,0,0,0,0,0,158,171,0,0,206,19,0,0,0,0,0,0,0,0,0,0,159,171,0,0,207,19,0,0,0,0,0,0,0,0,0,0,160,171,0,0,208,19,0,0,0,0,0,0,0,0,0,0,161,171,0,0,209,19,0,0,0,0,0,0,0,0,0,0,162,171,0,0,210,19,0,0,0,0,0,0,0,0,0,0,163,171,0,0,211,19,0,0,0,0,0,0,0,0,0,0,164,171,0,0,212,19,0,0,0,0,0,0,0,0,0,0,165,171,0,0,213,19,0,0,0,0,0,0,0,0,0,0,166,171,0,0,214,19,0,0,0,0,0,0,0,0,0,0,167,171,0,0,215,19,0,0,0,0,0,0,0,0,0,0,168,171,0,0,216,19,0,0,0,0,0,0,0,0,0,0,169,171,0,0,217,19,0,0,0,0,0,0,0,0,0,0,170,171,0,0,218,19,0,0,0,0,0,0,0,0,0,0,171,171,0,0,219,19,0,0,0,0,0,0,0,0,0,0,172,171,0,0,220,19,0,0,0,0,0,0,0,0,0,0,173,171,0,0,221,19,0,0,0,0,0,0,0,0,0,0,174,171,0,0,222,19,0,0,0,0,0,0,0,0,0,0,175,171,0,0,223,19,0,0,0,0,0,0,0,0,0,0,176,171,0,0,224,19,0,0,0,0,0,0,0,0,0,0,177,171,0,0,225,19,0,0,0,0,0,0,0,0,0,0,178,171,0,0,226,19], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+133312);
/* memory initializer */ allocate([179,171,0,0,227,19,0,0,0,0,0,0,0,0,0,0,180,171,0,0,228,19,0,0,0,0,0,0,0,0,0,0,181,171,0,0,229,19,0,0,0,0,0,0,0,0,0,0,182,171,0,0,230,19,0,0,0,0,0,0,0,0,0,0,183,171,0,0,231,19,0,0,0,0,0,0,0,0,0,0,184,171,0,0,232,19,0,0,0,0,0,0,0,0,0,0,185,171,0,0,233,19,0,0,0,0,0,0,0,0,0,0,186,171,0,0,234,19,0,0,0,0,0,0,0,0,0,0,187,171,0,0,235,19,0,0,0,0,0,0,0,0,0,0,188,171,0,0,236,19,0,0,0,0,0,0,0,0,0,0,189,171,0,0,237,19,0,0,0,0,0,0,0,0,0,0,190,171,0,0,238,19,0,0,0,0,0,0,0,0,0,0,191,171,0,0,239,19,0,0,0,0,0,0,0,0,0,0,0,251,0,0,70,0,0,0,70,0,0,0,0,0,0,0,1,251,0,0,70,0,0,0,73,0,0,0,0,0,0,0,2,251,0,0,70,0,0,0,76,0,0,0,0,0,0,0,3,251,0,0,70,0,0,0,70,0,0,0,73,0,0,0,4,251,0,0,70,0,0,0,70,0,0,0,76,0,0,0,5,251,0,0,83,0,0,0,84,0,0,0,0,0,0,0,6,251,0,0,83,0,0,0,84,0,0,0,0,0,0,0,19,251,0,0,68,5,0,0,70,5,0,0,0,0,0,0,20,251,0,0,68,5,0,0,53,5,0,0,0,0,0,0,21,251,0,0,68,5,0,0,59,5,0,0,0,0,0,0,22,251,0,0,78,5,0,0,70,5,0,0,0,0,0,0,23,251,0,0,68,5,0,0,61,5,0,0,0,0,0,0,65,255,0,0,33,255,0,0,0,0,0,0,0,0,0,0,66,255,0,0,34,255,0,0,0,0,0,0,0,0,0,0,67,255,0,0,35,255,0,0,0,0,0,0,0,0,0,0,68,255,0,0,36,255,0,0,0,0,0,0,0,0,0,0,69,255,0,0,37,255,0,0,0,0,0,0,0,0,0,0,70,255,0,0,38,255,0,0,0,0,0,0,0,0,0,0,71,255,0,0,39,255,0,0,0,0,0,0,0,0,0,0,72,255,0,0,40,255,0,0,0,0,0,0,0,0,0,0,73,255,0,0,41,255,0,0,0,0,0,0,0,0,0,0,74,255,0,0,42,255,0,0,0,0,0,0,0,0,0,0,75,255,0,0,43,255,0,0,0,0,0,0,0,0,0,0,76,255,0,0,44,255,0,0,0,0,0,0,0,0,0,0,77,255,0,0,45,255,0,0,0,0,0,0,0,0,0,0,78,255,0,0,46,255,0,0,0,0,0,0,0,0,0,0,79,255,0,0,47,255,0,0,0,0,0,0,0,0,0,0,80,255,0,0,48,255,0,0,0,0,0,0,0,0,0,0,81,255,0,0,49,255,0,0,0,0,0,0,0,0,0,0,82,255,0,0,50,255,0,0,0,0,0,0,0,0,0,0,83,255,0,0,51,255,0,0,0,0,0,0,0,0,0,0,84,255,0,0,52,255,0,0,0,0,0,0,0,0,0,0,85,255,0,0,53,255,0,0,0,0,0,0,0,0,0,0,86,255,0,0,54,255,0,0,0,0,0,0,0,0,0,0,87,255,0,0,55,255,0,0,0,0,0,0,0,0,0,0,88,255,0,0,56,255,0,0,0,0,0,0,0,0,0,0,89,255,0,0,57,255,0,0,0,0,0,0,0,0,0,0,90,255,0,0,58,255,0,0,0,0,0,0,0,0,0,0,40,4,1,0,0,4,1,0,0,0,0,0,0,0,0,0,41,4,1,0,1,4,1,0,0,0,0,0,0,0,0,0,42,4,1,0,2,4,1,0,0,0,0,0,0,0,0,0,43,4,1,0,3,4,1,0,0,0,0,0,0,0,0,0,44,4,1,0,4,4,1,0,0,0,0,0,0,0,0,0,45,4,1,0,5,4,1,0,0,0,0,0,0,0,0,0,46,4,1,0,6,4,1,0,0,0,0,0,0,0,0,0,47,4,1,0,7,4,1,0,0,0,0,0,0,0,0,0,48,4,1,0,8,4,1,0,0,0,0,0,0,0,0,0,49,4,1,0,9,4,1,0,0,0,0,0,0,0,0,0,50,4,1,0,10,4,1,0,0,0,0,0,0,0,0,0,51,4,1,0,11,4,1,0,0,0,0,0,0,0,0,0,52,4,1,0,12,4,1,0,0,0,0,0,0,0,0,0,53,4,1,0,13,4,1,0,0,0,0,0,0,0,0,0,54,4,1,0,14,4,1,0,0,0,0,0,0,0,0,0,55,4,1,0,15,4,1,0,0,0,0,0,0,0,0,0,56,4,1,0,16,4,1,0,0,0,0,0,0,0,0,0,57,4,1,0,17,4,1,0,0,0,0,0,0,0,0,0,58,4,1,0,18,4,1,0,0,0,0,0,0,0,0,0,59,4,1,0,19,4,1,0,0,0,0,0,0,0,0,0,60,4,1,0,20,4,1,0,0,0,0,0,0,0,0,0,61,4,1,0,21,4,1,0,0,0,0,0,0,0,0,0,62,4,1,0,22,4,1,0,0,0,0,0,0,0,0,0,63,4,1,0,23,4,1,0,0,0,0,0,0,0,0,0,64,4,1,0,24,4,1,0,0,0,0,0,0,0,0,0,65,4,1,0,25,4,1,0,0,0,0,0,0,0,0,0,66,4,1,0,26,4,1,0,0,0,0,0,0,0,0,0,67,4,1,0,27,4,1,0,0,0,0,0,0,0,0,0,68,4,1,0,28,4,1,0,0,0,0,0,0,0,0,0,69,4,1,0,29,4,1,0,0,0,0,0,0,0,0,0,70,4,1,0,30,4,1,0,0,0,0,0,0,0,0,0,71,4,1,0,31,4,1,0,0,0,0,0,0,0,0,0,72,4,1,0,32,4,1,0,0,0,0,0,0,0,0,0,73,4,1,0,33,4,1,0,0,0,0,0,0,0,0,0,74,4,1,0,34,4,1,0,0,0,0,0,0,0,0,0,75,4,1,0,35,4,1,0,0,0,0,0,0,0,0,0,76,4,1,0,36,4,1,0,0,0,0,0,0,0,0,0,77,4,1,0,37,4,1,0,0,0,0,0,0,0,0,0,78,4,1,0,38,4,1,0,0,0,0,0,0,0,0,0,79,4,1,0,39,4,1,0,0,0,0,0,0,0,0,0,216,4,1,0,176,4,1,0,0,0,0,0,0,0,0,0,217,4,1,0,177,4,1,0,0,0,0,0,0,0,0,0,218,4,1,0,178,4,1,0,0,0,0,0,0,0,0,0,219,4,1,0,179,4,1,0,0,0,0,0,0,0,0,0,220,4,1,0,180,4,1,0,0,0,0,0,0,0,0,0,221,4,1,0,181,4,1,0,0,0,0,0,0,0,0,0,222,4,1,0,182,4,1,0,0,0,0,0,0,0,0,0,223,4,1,0,183,4,1,0,0,0,0,0,0,0,0,0,224,4,1,0,184,4,1,0,0,0,0,0,0,0,0,0,225,4,1,0,185,4,1,0,0,0,0,0,0,0,0,0,226,4,1,0,186,4,1,0,0,0,0,0,0,0,0,0,227,4,1,0,187,4,1,0,0,0,0,0,0,0,0,0,228,4,1,0,188,4,1,0,0,0,0,0,0,0,0,0,229,4,1,0,189,4,1,0,0,0,0,0,0,0,0,0,230,4,1,0,190,4,1,0,0,0,0,0,0,0,0,0,231,4,1,0,191,4,1,0,0,0,0,0,0,0,0,0,232,4,1,0,192,4,1,0,0,0,0,0,0,0,0,0,233,4,1,0,193,4,1,0,0,0,0,0,0,0,0,0,234,4,1,0,194,4,1,0,0,0,0,0,0,0,0,0,235,4,1,0,195,4,1,0,0,0,0,0,0,0,0,0,236,4,1,0,196,4,1,0,0,0,0,0,0,0,0,0,237,4,1,0,197,4,1,0,0,0,0,0,0,0,0,0,238,4,1,0,198,4,1,0,0,0,0,0,0,0,0,0,239,4,1,0,199,4,1,0,0,0,0,0,0,0,0,0,240,4,1,0,200,4,1,0,0,0,0,0,0,0,0,0,241,4,1,0,201,4,1,0,0,0,0,0,0,0,0,0,242,4,1,0,202,4,1,0,0,0,0,0,0,0,0,0,243,4,1,0,203,4,1,0,0,0,0,0,0,0,0,0,244,4,1,0,204,4,1,0,0,0,0,0,0,0,0,0,245,4,1,0,205,4,1,0,0,0,0,0,0,0,0,0,246,4,1,0,206,4,1,0,0,0,0,0,0,0,0,0,247,4,1,0,207,4,1,0,0,0,0,0,0,0,0,0,248,4,1,0,208,4,1,0,0,0,0,0,0,0,0,0,249,4,1,0,209,4,1,0,0,0,0,0,0,0,0,0,250,4,1,0,210,4,1,0,0,0,0,0,0,0,0,0,251,4,1,0,211,4,1,0,0,0,0,0,0,0,0,0,192,12,1,0,128,12,1,0,0,0,0,0,0,0,0,0,193,12,1,0,129,12,1,0,0,0,0,0,0,0,0,0,194,12,1,0,130,12,1,0,0,0,0,0,0,0,0,0,195,12,1,0,131,12,1,0,0,0,0,0,0,0,0,0,196,12,1,0,132,12,1,0,0,0,0,0,0,0,0,0,197,12,1,0,133,12,1,0,0,0,0,0,0,0,0,0,198,12,1,0,134,12,1,0,0,0,0,0,0,0,0,0,199,12,1,0,135,12,1,0,0,0,0,0,0,0,0,0,200,12,1,0,136,12,1,0,0,0,0,0,0,0,0,0,201,12,1,0,137,12,1,0,0,0,0,0,0,0,0,0,202,12,1,0,138,12,1,0,0,0,0,0,0,0,0,0,203,12,1,0,139,12,1,0,0,0,0,0,0,0,0,0,204,12,1,0,140,12,1,0,0,0,0,0,0,0,0,0,205,12,1,0,141,12,1,0,0,0,0,0,0,0,0,0,206,12,1,0,142,12,1,0,0,0,0,0,0,0,0,0,207,12,1,0,143,12,1,0,0,0,0,0,0,0,0,0,208,12,1,0,144,12,1,0,0,0,0,0,0,0,0,0,209,12,1,0,145,12,1,0,0,0,0,0,0,0,0,0,210,12,1,0,146,12,1,0,0,0,0,0,0,0,0,0,211,12,1,0,147,12,1,0,0,0,0,0,0,0,0,0,212,12,1,0,148,12,1,0,0,0,0,0,0,0,0,0,213,12,1,0,149,12,1,0,0,0,0,0,0,0,0,0,214,12,1,0,150,12,1,0,0,0,0,0,0,0,0,0,215,12,1,0,151,12,1,0,0,0,0,0,0,0,0,0,216,12,1,0,152,12,1,0,0,0,0,0,0,0,0,0,217,12,1,0,153,12,1,0,0,0,0,0,0,0,0,0,218,12,1,0,154,12,1,0,0,0,0,0,0,0,0,0,219,12,1,0,155,12,1,0,0,0,0,0,0,0,0,0,220,12,1,0,156,12,1,0,0,0,0,0,0,0,0,0,221,12,1,0,157,12,1,0,0,0,0,0,0,0,0,0,222,12,1,0,158,12,1,0,0,0,0,0,0,0,0,0,223,12,1,0,159,12,1,0,0,0,0,0,0,0,0,0,224,12,1,0,160,12,1,0,0,0,0,0,0,0,0,0,225,12,1,0,161,12,1,0,0,0,0,0,0,0,0,0,226,12,1,0,162,12,1,0,0,0,0,0,0,0,0,0,227,12,1,0,163,12,1,0,0,0,0,0,0,0,0,0,228,12,1,0,164,12,1,0,0,0,0,0,0,0,0,0,229,12,1,0,165,12,1,0,0,0,0,0,0,0,0,0,230,12,1,0,166,12,1,0,0,0,0,0,0,0,0,0,231,12,1,0,167,12,1,0,0,0,0,0,0,0,0,0,232,12,1,0,168,12,1,0,0,0,0,0,0,0,0,0,233,12,1,0,169,12,1,0,0,0,0,0,0,0,0,0,234,12,1,0,170,12,1,0,0,0,0,0,0,0,0,0,235,12,1,0,171,12,1,0,0,0,0,0,0,0,0,0,236,12,1,0,172,12,1,0,0,0,0,0,0,0,0,0,237,12,1,0,173,12,1,0,0,0,0,0,0,0,0,0,238,12,1,0,174,12,1,0,0,0,0,0,0,0,0,0,239,12,1,0,175,12,1,0,0,0,0,0,0,0,0,0,240,12,1,0,176,12,1,0,0,0,0,0,0,0,0,0,241,12,1,0,177,12,1,0,0,0,0,0,0,0,0,0,242,12,1,0,178,12,1,0,0,0,0,0,0,0,0,0,192,24,1,0,160,24,1,0,0,0,0,0,0,0,0,0,193,24,1,0,161,24,1,0,0,0,0,0,0,0,0,0,194,24,1,0,162,24,1,0,0,0,0,0,0,0,0,0,195,24,1,0,163,24,1,0,0,0,0,0,0,0,0,0,196,24,1,0,164,24,1,0,0,0,0,0,0,0,0,0,197,24,1,0,165,24,1,0,0,0,0,0,0,0,0,0,198,24,1,0,166,24,1,0,0,0,0,0,0,0,0,0,199,24,1,0,167,24,1,0,0,0,0,0,0,0,0,0,200,24,1,0,168,24,1,0,0,0,0,0,0,0,0,0,201,24,1,0,169,24,1,0,0,0,0,0,0,0,0,0,202,24,1,0,170,24,1,0,0,0,0,0,0,0,0,0,203,24,1,0,171,24,1,0,0,0,0,0,0,0,0,0,204,24,1,0,172,24,1,0,0,0,0,0,0,0,0,0,205,24,1,0,173,24,1,0,0,0,0,0,0,0,0,0,206,24,1,0,174,24,1,0,0,0,0,0,0,0,0,0,207,24,1,0,175,24,1,0,0,0,0,0,0,0,0,0,208,24,1,0,176,24,1,0,0,0,0,0,0,0,0,0,209,24,1,0,177,24,1,0,0,0,0,0,0,0,0,0,210,24,1,0,178,24,1,0,0,0,0,0,0,0,0,0,211,24,1,0,179,24,1,0,0,0,0,0,0,0,0,0,212,24,1,0,180,24,1,0,0,0,0,0,0,0,0,0,213,24,1,0,181,24,1,0,0,0,0,0,0,0,0,0,214,24,1,0,182,24,1,0,0,0,0,0,0,0,0,0,215,24,1,0,183,24,1,0,0,0,0,0,0,0,0,0,216,24,1,0,184,24,1,0,0,0,0,0,0,0,0,0,217,24,1,0,185,24,1,0,0,0,0,0,0,0,0,0,218,24,1,0,186,24,1,0,0,0,0,0,0,0,0,0,219,24,1,0,187,24,1,0,0,0,0,0,0,0,0,0,220,24,1,0,188,24,1,0,0,0,0,0,0,0,0,0,221,24,1,0,189,24,1,0,0,0,0,0,0,0,0,0,222,24,1,0,190,24,1,0,0,0,0,0,0,0,0,0,223,24,1,0,191,24,1,0,0,0,0,0,0,0,0,0,34,233,1,0,0,233,1,0,0,0,0,0,0,0,0,0,35,233,1,0,1,233,1,0,0,0,0,0,0,0,0,0,36,233,1,0,2,233,1,0,0,0,0,0,0,0,0,0,37,233,1,0,3,233,1,0,0,0,0,0,0,0,0,0,38,233,1,0,4,233,1,0,0,0,0,0,0,0,0,0,39,233,1,0,5,233,1,0,0,0,0,0,0,0,0,0,40,233,1,0,6,233,1,0,0,0,0,0,0,0,0,0,41,233,1,0,7,233,1,0,0,0,0,0,0,0,0,0,42,233,1,0,8,233,1,0,0,0,0,0,0,0,0,0,43,233,1,0,9,233,1,0,0,0,0,0,0,0,0,0,44,233,1,0,10,233,1,0,0,0,0,0,0,0,0,0,45,233,1,0,11,233,1,0,0,0,0,0,0,0,0,0,46,233,1,0,12,233,1,0,0,0,0,0,0,0,0,0,47,233,1,0,13,233,1,0,0,0,0,0,0,0,0,0,48,233,1,0,14,233,1,0,0,0,0,0,0,0,0,0,49,233,1,0,15,233,1,0,0,0,0,0,0,0,0,0,50,233,1,0,16,233,1,0,0,0,0,0,0,0,0,0,51,233,1,0,17,233,1,0,0,0,0,0,0,0,0,0,52,233,1,0,18,233,1,0,0,0,0,0,0,0,0,0,53,233,1,0,19,233,1,0,0,0,0,0,0,0,0,0,54,233,1,0,20,233,1,0,0,0,0,0,0,0,0,0,55,233,1,0,21,233,1,0,0,0,0,0,0,0,0,0,56,233,1,0,22,233,1,0,0,0,0,0,0,0,0,0,57,233,1,0,23,233,1,0,0,0,0,0,0,0,0,0,58,233,1,0,24,233,1,0,0,0,0,0,0,0,0,0,59,233,1,0,25,233,1,0,0,0,0,0,0,0,0,0,60,233,1,0,26,233,1,0,0,0,0,0,0,0,0,0,61,233,1,0,27,233,1,0,0,0,0,0,0,0,0,0,62,233,1,0,28,233,1,0,0,0,0,0,0,0,0,0,63,233,1,0,29,233,1,0,0,0,0,0,0,0,0,0,64,233,1,0,30,233,1,0,0,0,0,0,0,0,0,0,65,233,1,0,31,233,1,0,0,0,0,0,0,0,0,0,66,233,1,0,32,233,1,0,0,0,0,0,0,0,0,0,67,233,1,0,33,233,1,0,0,0,0,0,0,0,0,0,159,106,3,0,43,0,0,0,202,106,3,0,100,0,0,0,67,1,0,0,216,123,3,0,0,0,0,0,146,107,3,0,2,0,0,0,247,107,3,0,28,0,0,0,148,107,3,0,99,0,0,0,80,1,0,0,120,108,3,0,32,0,0,0,152,108,3,0,18,0,0,0,114,109,3,0,6,0,0,0,120,109,3,0,34,0,0,0,154,109,3,0,22,0,0,0,176,109,3,0,13,0,0,0,241,109,3,0,14,0,0,0,255,109,3,0,4,0,0,0,3,110,3,0,16,0,0,0,207,109,3,0,1,0,0,0,114,109,3,0,6,0,0,0,194,109,3,0,8,0,0,0,202,109,3,0,5,0,0,0,207,109,3,0,1,0,0,0,208,109,3,0,33,0,0,0,216,123,3,0,0,0,0,0,7,111,3,0,1,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,216,123,3,0,0,0,0,0,216,123,3,0,0,0,0,0,216,123,3,0,0,0,0,0,216,123,3,0,0,0,0,0,50,112,3,0,39,0,0,0,216,123,3,0,0,0,0,0,7,111,3,0,1,0,0,0,146,107,3,0,2,0,0,0,1,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,216,123,3,0,0,0,0,0,11,111,3,0,1,0,0,0,146,107,3,0,2,0,0,0,216,123,3,0,0,0,0,0,216,123,3,0,0,0,0,0,97,112,3,0,1,0,0,0,152,123,3,0,8,11,0,0,5,0,0,0,0,0,0,0,0,0,0,0,78,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,1,0,0,80,1,0,0,224,123,3,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,65,2,0,173,0,120,3,121,3,139,3,141,3,162,3,87,5,88,5,96,5,136,5,144,5,28,6,29,6,221,6,14,7,15,7,75,7,76,7,46,8,47,8,63,8,92,8,93,8,161,8,255,8,120,9,128,9,132,9,141,9,142,9,145,9,146,9,169,9,177,9,186,9,187,9,197,9,198,9,201,9,202,9,222,9,228,9,229,9,4,10,17,10,18,10,41,10,49,10,52,10,55,10,58,10,59,10,61,10,73,10,74,10,93,10,132,10,142,10,146,10,169,10,177,10,180,10,186,10,187,10,198,10,202,10,206,10,207,10,228,10,229,10,4,11,13,11,14,11,17,11,18,11,41,11,49,11,52,11,58,11,59,11,69,11,70,11,73,11,74,11,94,11,100,11,101,11,132,11,145,11,155,11,157,11,201,11,206,11,207,11,4,12,13,12,17,12,41,12,52,12,69,12,73,12,87,12,100,12,101,12,128,12,129,12,132,12,141,12,145,12,169,12,180,12,186,12,187,12,197,12,201,12,223,12,228,12,229,12,240,12,4,13,13,13,17,13,59,13,60,13,69,13,73,13,100,13,101,13,128,13,129,13,132,13,178,13,188,13,190,13,191,13,213,13,215,13,131,14,133,14,134,14,137,14,139,14,140,14,152,14,160,14,164,14,166,14,168,14,169,14,172,14,186,14,190,14,191,14,197,14,199,14,206,14,207,14,218,14,219,14,72,15,152,15,189,15,205,15,198,16,206,16,207,16,73,18,78,18,79,18,87,18,89,18,94,18,95,18,137,18,142,18,143,18,177,18,182,18,183,18,191,18,193,18,198,18,199,18,215,18,17,19,22,19,23,19,91,19,92,19,128,22,13,23,109,23,113,23,222,23,223,23,14,24,15,24,110,25,111,25,28,26,29,26,95,26,125,26,126,26,22,31,23,31,30,31,31,31,70,31,71,31,78,31,79,31,88,31,90,31,92,31,94,31,126,31,127,31,181,31,197,31,212,31,213,31,220,31,240,31,241,31,245,31,114,32,115,32,143,32,0,39,47,44,95,44,38,45,46,45,47,45,167,45,175,45,183,45,191,45,199,45,207,45,215,45,223,45,154,46,64,48,151,48,152,48,143,49,31,50,255,50,143,167,206,169,78,170,79,170,90,170,91,170,7,171,8,171,15,171,16,171,39,171,238,171,239,171,110,250,111,250,55,251,61,251,63,251,66,251,69,251,144,253,145,253,254,253,255,253,83,254,103,254,117,254,200,255,201,255,208,255,209,255,216,255,217,255,231,255,254,255,255,255,0,0,32,0,127,0,34,0,127,3,5,0,40,5,9,0,139,5,4,0,200,5,8,0,235,5,5,0,245,5,17,0,178,7,14,0,251,7,5,0,95,8,65,0,173,8,55,0,179,9,3,0,207,9,8,0,216,9,4,0,252,9,5,0,11,10,4,0,67,10,4,0,78,10,3,0,82,10,7,0,95,10,7,0,118,10,11,0,209,10,15,0,242,10,15,0,78,11,8,0,88,11,4,0,120,11,10,0,139,11,3,0,150,11,3,0,160,11,3,0,165,11,3,0,171,11,3,0,186,11,4,0,195,11,3,0,209,11,6,0,216,11,14,0,251,11,6,0,58,12,3,0,78,12,7,0,90,12,6,0,112,12,8,0,206,12,7,0,215,12,7,0,243,12,15,0,79,13,8,0,88,13,8,0,118,13,3,0,151,13,3,0,199,13,3,0,203,13,4,0,224,13,18,0,245,13,12,0,59,14,4,0,92,14,37,0,142,14,6,0,224,14,32,0,109,15,4,0,219,15,37,0,200,16,5,0,125,19,3,0,154,19,6,0,245,19,11,0,157,22,3,0,241,22,15,0,21,23,11,0,55,23,9,0,84,23,12,0,116,23,12,0,234,23,6,0,250,23,6,0,26,24,6,0,120,24,8,0,171,24,5,0,246,24,10,0,29,25,3,0,44,25,4,0,60,25,4,0,65,25,3,0,117,25,11,0,172,25,4,0,202,25,6,0,219,25,3,0,138,26,6,0,154,26,6,0,174,26,82,0,76,27,4,0,125,27,3,0,244,27,8,0,56,28,3,0,74,28,3,0,128,28,64,0,200,28,8,0,247,28,9,0,231,29,21,0,255,31,17,0,40,32,8,0,95,32,17,0,157,32,3,0,186,32,22,0,241,32,15,0,138,33,6,0,244,35,12,0,39,36,25,0,75,36,21,0,77,43,3,0,90,43,166,0,244,44,5,0,40,45,5,0,104,45,7,0,113,45,14,0,151,45,9,0,60,46,68,0,244,46,12,0,214,47,26,0,252,47,5,0,0,49,5,0,46,49,3,0,187,49,5,0,228,49,12,0,0,52,192,25,0,78,0,82,141,164,3,0,199,164,9,0,44,166,20,0,152,166,7,0,248,166,8,0,148,167,12,0,171,167,77,0,44,168,4,0,58,168,6,0,120,168,8,0,197,168,9,0,218,168,6,0,252,168,4,0,84,169,11,0,125,169,3,0,218,169,4,0,224,169,32,0,55,170,9,0,124,170,4,0,195,170,24,0,247,170,10,0,23,171,9,0,47,171,145,0,250,171,182,43,199,215,4,0,252,215,4,33,218,250,38,0,7,251,12,0,24,251,5,0,194,251,17,0,64,253,16,0,200,253,40,0,26,254,6,0,39,254,9,0,108,254,4,0,253,254,4,0,191,255,3,0,221,255,3,0,239,255,13,0,12,0,39,0,59,0,62,0,78,0,79,0,31,3,158,3,158,4,159,4,6,8,7,8,9,8,54,8,61,8,62,8,86,8,4,10,20,10,24,10,86,11,87,11,189,16,53,17,39,209,40,209,85,212,157,212,160,212,161,212,163,212,164,212,167,212,168,212,173,212,186,212,188,212,196,212,6,213,11,213,12,213,21,213,29,213,58,213,63,213,69,213,81,213,166,214,167,214,204,215,205,215,4,238,32,238,35,238,37,238,38,238,40,238,51,238,56,238,58,238,72,238,74,238,76,238,80,238,83,238,85,238,86,238,88,238,90,238,92,238,94,238,96,238,99,238,101,238,102,238,107,238,115,238,120,238,125,238,127,238,138,238,164,238,170,238,175,240,176,240,191,240,192,240,208,240,47,241,54,243,197,243,63,244,65,244,248,244,62,245,63,245,94,0,34,0,251,0,5,0,3,1,4,0,52,1,3,0,139,1,5,0,156,1,52,0,254,1,130,0,157,2,3,0,209,2,47,0,36,3,12,0,75,3,53,0,196,3,4,0,214,3,42,0,170,4,86,3,57,8,3,0,96,8,160,0,28,9,3,0,58,9,5,0,64,9,64,0,184,9,6,0,192,9,64,0,7,10,5,0,52,10,4,0,59,10,4,0,72,10,8,0,89,10,7,0,128,10,128,0,54,11,3,0,115,11,5,0,128,11,128,0,73,12,23,2,127,14,129,1,78,16,4,0,112,16,16,0,194,16,14,0,233,16,7,0,250,16,6,0,68,17,60,0,201,17,7,0,218,17,166,4,184,22,8,0,202,22,54,9,111,35,145,0,99,36,13,0,116,36,140,11,47,52,209,51,57,106,199,4,69,111,11,0,127,111,16,0,160,111,96,64,2,176,254,31,246,208,10,0,115,209,8,0,222,209,34,0,70,210,186,0,87,211,9,0,114,211,142,0,71,213,3,0,0,216,0,22,60,238,6,0,67,238,4,0,156,238,5,0,188,238,52,0,242,238,14,1,44,240,4,0,148,240,12,0,224,240,32,0,11,241,5,0,108,241,4,0,155,241,75,0,3,242,13,0,59,242,5,0,73,242,7,0,82,242,174,0,33,243,15,0,125,243,3,0,148,243,12,0,203,243,21,0,241,243,15,0,253,244,3,0,68,245,12,0,104,245,147,0,65,246,4,0,80,246,48,0,198,246,58,0,116,247,140,8,48,97,50,52,54,54,50,51,52,100,98,51,101,101,97,97,99,57,102,54,56,102,100,49,97,53,49,98,54,98,101,51,51,97,52,100,52,53,97,101,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,105,108,99,32,97,110,100,32,105,108,99,45,42,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,54,44,32,84,105,108,108,32,72,195,182,112,112,110,101,114,10,65,108,108,32,114,105,103,104,116,115,32,114,101,115,101,114,118,101,100,46,10,10,82,101,100,105,115,116,114,105,98,117,116,105,111,110,32,97,110,100,32,117,115,101,32,105,110,32,115,111,117,114,99,101,32,97,110,100,32,98,105,110,97,114,121,32,102,111,114,109,115,44,32,119,105,116,104,32,111,114,32,119,105,116,104,111,117,116,10,109,111,100,105,102,105,99,97,116,105,111,110,44,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,112,114,111,118,105,100,101,100,32,116,104,97,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,32,97,114,101,32,109,101,116,58,10,10,42,32,82,101,100,105,115,116,114,105,98,117,116,105,111,110,115,32,111,102,32,115,111,117,114,99,101,32,99,111,100,101,32,109,117,115,116,32,114,101,116,97,105,110,32,116,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,44,32,116,104,105,115,10,32,32,108,105,115,116,32,111,102,32,99,111,110,100,105,116,105,111,110,115,32,97,110,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,100,105,115,99,108,97,105,109,101,114,46,10,10,42,32,82,101,100,105,115,116,114,105,98,117,116,105,111,110,115,32,105,110,32,98,105,110,97,114,121,32,102,111,114,109,32,109,117,115,116,32,114,101,112,114,111,100,117,99,101,32,116,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,44,10,32,32,116,104,105,115,32,108,105,115,116,32,111,102,32,99,111,110,100,105,116,105,111,110,115,32,97,110,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,100,105,115,99,108,97,105,109,101,114,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,10,32,32,97,110,100,47,111,114,32,111,116,104,101,114,32,109,97,116,101,114,105,97,108,115,32,112,114,111,118,105,100,101,100,32,119,105,116,104,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,46,10,10,42,32,78,101,105,116,104,101,114,32,116,104,101,32,110,97,109,101,32,111,102,32,105,108,99,32,110,111,114,32,116,104,101,32,110,97,109,101,115,32,111,102,32,105,116,115,10,32,32,99,111,110,116,114,105,98,117,116,111,114,115,32,109,97,121,32,98,101,32,117,115,101,100,32,116,111,32,101,110,100,111,114,115,101,32,111,114,32,112,114,111,109,111,116,101,32,112,114,111,100,117,99,116,115,32,100,101,114,105,118,101,100,32,102,114,111,109,10,32,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,115,112,101,99,105,102,105,99,32,112,114,105,111,114,32,119,114,105,116,116,101,110,32,112,101,114,109,105,115,115,105,111,110,46,10,10,84,72,73,83,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,66,89,32,84,72,69,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,65,78,68,32,67,79,78,84,82,73,66,85,84,79,82,83,32,34,65,83,32,73,83,34,10,65,78,68,32,65,78,89,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,32,87,65,82,82,65,78,84,73,69,83,44,32,73,78,67,76,85,68,73,78,71,44,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,44,32,84,72,69,10,73,77,80,76,73,69,68,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,32,65,78,68,32,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,82,69,10,68,73,83,67,76,65,73,77,69,68,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,32,79,82,32,67,79,78,84,82,73,66,85,84,79,82,83,32,66,69,32,76,73,65,66,76,69,10,70,79,82,32,65,78,89,32,68,73,82,69,67,84,44,32,73,78,68,73,82,69,67,84,44,32,73,78,67,73,68,69,78,84,65,76,44,32,83,80,69,67,73,65,76,44,32,69,88,69,77,80,76,65,82,89,44,32,79,82,32,67,79,78,83,69,81,85,69,78,84,73,65,76,10,68,65,77,65,71,69,83,32,40,73,78,67,76,85,68,73,78,71,44,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,44,32,80,82,79,67,85,82,69,77,69,78,84,32,79,70,32,83,85,66,83,84,73,84,85,84,69,32,71,79,79,68,83,32,79,82,10,83,69,82,86,73,67,69,83,59,32,76,79,83,83,32,79,70,32,85,83,69,44,32,68,65,84,65,44,32,79,82,32,80,82,79,70,73,84,83,59,32,79,82,32,66,85,83,73,78,69,83,83,32,73,78,84,69,82,82,85,80,84,73,79,78,41,32,72,79,87,69,86,69,82,10,67,65,85,83,69,68,32,65,78,68,32,79,78,32,65,78,89,32,84,72,69,79,82,89,32,79,70,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,67,79,78,84,82,65,67,84,44,32,83,84,82,73,67,84,32,76,73,65,66,73,76,73,84,89,44,10,79,82,32,84,79,82,84,32,40,73,78,67,76,85,68,73,78,71,32,78,69,71,76,73,71,69,78,67,69,32,79,82,32,79,84,72,69,82,87,73,83,69,41,32,65,82,73,83,73,78,71,32,73,78,32,65,78,89,32,87,65,89,32,79,85,84,32,79,70,32,84,72,69,32,85,83,69,10,79,70,32,84,72,73,83,32,83,79,70,84,87,65,82,69,44,32,69,86,69,78,32,73,70,32,65,68,86,73,83,69,68,32,79,70,32,84,72,69,32,80,79,83,83,73,66,73,76,73,84,89,32,79,70,32,83,85,67,72,32,68,65,77,65,71,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,103,108,111,98,32,118,48,46,50,46,49,49,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,98,105,116,102,108,97,103,115,32,118,48,46,52,46,48,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,112,104,102,32,118,48,46,55,46,49,51,44,32,112,104,102,95,115,104,97,114,101,100,32,118,48,46,55,46,49,51,44,32,112,104,102,95,103,101,110,101,114,97,116,111,114,32,118,48,46,55,46,49,51,44,32,112,104,102,95,99,111,100,101,103,101,110,32,118,48,46,55,46,49,51,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,45,50,48,49,54,32,83,116,101,118,101,110,32,70,97,99,107,108,101,114,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+143552);
/* memory initializer */ allocate([10,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,10,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,10,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,10,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,10,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,10,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,10,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,10,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,32,73,78,10,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,118,101,99,95,109,97,112,32,118,48,46,52,46,48,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,114,101,103,101,120,32,118,48,46,49,46,53,53,44,32,114,101,103,101,120,45,115,121,110,116,97,120,32,118,48,46,50,46,53,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,114,117,115,116,99,45,115,101,114,105,97,108,105,122,101,32,118,48,46,51,46,49,56,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,115,116,114,115,105,109,32,118,48,46,52,46,48,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,68,97,110,110,121,32,71,117,111,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,10,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,10,105,110,32,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,10,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,10,99,111,112,105,101,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,10,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,10,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,10,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,10,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,10,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,10,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,119,105,110,97,112,105,32,118,48,46,50,46,53,44,32,119,105,110,97,112,105,45,98,117,105,108,100,32,118,48,46,49,46,49,44,32,107,101,114,110,101,108,51,50,45,115,121,115,32,118,48,46,50,46,49,10,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,80,101,116,101,114,32,65,116,97,115,104,105,97,110,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,10,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,10,105,110,32,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,10,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,10,99,111,112,105,101,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,10,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,10,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,10,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,10,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,10,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,10,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,103,99,99,32,118,48,46,51,46,50,53,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,65,108,101,120,32,67,114,105,99,104,116,111,110,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,108,105,98,99,32,118,48,46,50,46,56,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,108,105,110,107,101,100,45,108,105,115,116,32,118,48,46,48,46,51,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,98,105,116,45,118,101,99,32,118,48,46,52,46,51,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+153792);
/* memory initializer */ allocate([100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,115,101,114,100,101,32,118,48,46,55,46,48,44,32,115,101,114,100,101,95,106,115,111,110,32,118,48,46,55,46,48,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,109,101,109,99,104,114,32,118,48,46,49,46,49,48,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,65,110,100,114,101,119,32,71,97,108,108,97,110,116,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,10,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,10,105,110,32,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,10,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,10,99,111,112,105,101,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,10,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,10,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,10,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,10,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,10,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,10,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,98,105,116,45,115,101,116,32,118,48,46,51,46,48,10,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,65,112,97,99,104,101,32,76,105,99,101,110,115,101,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,86,101,114,115,105,111,110,32,50,46,48,44,32,74,97,110,117,97,114,121,32,50,48,48,52,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,104,116,116,112,58,47,47,119,119,119,46,97,112,97,99,104,101,46,111,114,103,47,108,105,99,101,110,115,101,115,47,10,10,84,69,82,77,83,32,65,78,68,32,67,79,78,68,73,84,73,79,78,83,32,70,79,82,32,85,83,69,44,32,82,69,80,82,79,68,85,67,84,73,79,78,44,32,65,78,68,32,68,73,83,84,82,73,66,85,84,73,79,78,10,10,49,46,32,68,101,102,105,110,105,116,105,111,110,115,46,10,10,32,32,32,34,76,105,99,101,110,115,101,34,32,115,104,97,108,108,32,109,101,97,110,32,116,104,101,32,116,101,114,109,115,32,97,110,100,32,99,111,110,100,105,116,105,111,110,115,32,102,111,114,32,117,115,101,44,32,114,101,112,114,111,100,117,99,116,105,111,110,44,10,32,32,32,97,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110,32,97,115,32,100,101,102,105,110,101,100,32,98,121,32,83,101,99,116,105,111,110,115,32,49,32,116,104,114,111,117,103,104,32,57,32,111,102,32,116,104,105,115,32,100,111,99,117,109,101,110,116,46,10,10,32,32,32,34,76,105,99,101,110,115,111,114,34,32,115,104,97,108,108,32,109,101,97,110,32,116,104,101,32,99,111,112,121,114,105,103,104,116,32,111,119,110,101,114,32,111,114,32,101,110,116,105,116,121,32,97,117,116,104,111,114,105,122,101,100,32,98,121,10,32,32,32,116,104,101,32,99,111,112,121,114,105,103,104,116,32,111,119,110,101,114,32,116,104,97,116,32,105,115,32,103,114,97,110,116,105,110,103,32,116,104,101,32,76,105,99,101,110,115,101,46,10,10,32,32,32,34,76,101,103,97,108,32,69,110,116,105,116,121,34,32,115,104,97,108,108,32,109,101,97,110,32,116,104,101,32,117,110,105,111,110,32,111,102,32,116,104,101,32,97,99,116,105,110,103,32,101,110,116,105,116,121,32,97,110,100,32,97,108,108,10,32,32,32,111,116,104,101,114,32,101,110,116,105,116,105,101,115,32,116,104,97,116,32,99,111,110,116,114,111,108,44,32,97,114,101,32,99,111,110,116,114,111,108,108,101,100,32,98,121,44,32,111,114,32,97,114,101,32,117,110,100,101,114,32,99,111,109,109,111,110,10,32,32,32,99,111,110,116,114,111,108,32,119,105,116,104,32,116,104,97,116,32,101,110,116,105,116,121,46,32,70,111,114,32,116,104,101,32,112,117,114,112,111,115,101,115,32,111,102,32,116,104,105,115,32,100,101,102,105,110,105,116,105,111,110,44,10,32,32,32,34,99,111,110,116,114,111,108,34,32,109,101,97,110,115,32,40,105,41,32,116,104,101,32,112,111,119,101,114,44,32,100,105,114,101,99,116,32,111,114,32,105,110,100,105,114,101,99,116,44,32,116,111,32,99,97,117,115,101,32,116,104,101,10,32,32,32,100,105,114,101,99,116,105,111,110,32,111,114,32,109,97,110,97,103,101,109,101,110,116,32,111,102,32,115,117,99,104,32,101,110,116,105,116,121,44,32,119,104,101,116,104,101,114,32,98,121,32,99,111,110,116,114,97,99,116,32,111,114,10,32,32,32,111,116,104,101,114,119,105,115,101,44,32,111,114,32,40,105,105,41,32,111,119,110,101,114,115,104,105,112,32,111,102,32,102,105,102,116,121,32,112,101,114,99,101,110,116,32,40,53,48,37,41,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,10,32,32,32,111,117,116,115,116,97,110,100,105,110,103,32,115,104,97,114,101,115,44,32,111,114,32,40,105,105,105,41,32,98,101,110,101,102,105,99,105,97,108,32,111,119,110,101,114,115,104,105,112,32,111,102,32,115,117,99,104,32,101,110,116,105,116,121,46,10,10,32,32,32,34,89,111,117,34,32,40,111,114,32,34,89,111,117,114,34,41,32,115,104,97,108,108,32,109,101,97,110,32,97,110,32,105,110,100,105,118,105,100,117,97,108,32,111,114,32,76,101,103,97,108,32,69,110,116,105,116,121,10,32,32,32,101,120,101,114,99,105,115,105,110,103,32,112,101,114,109,105,115,115,105,111,110,115,32,103,114,97,110,116,101,100,32,98,121,32,116,104,105,115,32,76,105,99,101,110,115,101,46,10,10,32,32,32,34,83,111,117,114,99,101,34,32,102,111,114,109,32,115,104,97,108,108,32,109,101,97,110,32,116,104,101,32,112,114,101,102,101,114,114,101,100,32,102,111,114,109,32,102,111,114,32,109,97,107,105,110,103,32,109,111,100,105,102,105,99,97,116,105,111,110,115,44,10,32,32,32,105,110,99,108,117,100,105,110,103,32,98,117,116,32,110,111,116,32,108,105,109,105,116,101,100,32,116,111,32,115,111,102,116,119,97,114,101,32,115,111,117,114,99,101,32,99,111,100,101,44,32,100,111,99,117,109,101,110,116,97,116,105,111,110,10,32,32,32,115,111,117,114,99,101,44,32,97,110,100,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,115,46,10,10,32,32,32,34,79,98,106,101,99,116,34,32,102,111,114,109,32,115,104,97,108,108,32,109,101,97,110,32,97,110,121,32,102,111,114,109,32,114,101,115,117,108,116,105,110,103,32,102,114,111,109,32,109,101,99,104,97,110,105,99,97,108,10,32,32,32,116,114,97,110,115,102,111,114,109,97,116,105,111,110,32,111,114,32,116,114,97,110,115,108,97,116,105,111,110,32,111,102,32,97,32,83,111,117,114,99,101,32,102,111,114,109,44,32,105,110,99,108,117,100,105,110,103,32,98,117,116,10,32,32,32,110,111,116,32,108,105,109,105,116,101,100,32,116,111,32,99,111,109,112,105,108,101,100,32,111,98,106,101,99,116,32,99,111,100,101,44,32,103,101,110,101,114,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,44,10,32,32,32,97,110,100,32,99,111,110,118,101,114,115,105,111,110,115,32,116,111,32,111,116,104,101,114,32,109,101,100,105,97,32,116,121,112,101,115,46,10,10,32,32,32,34,87,111,114,107,34,32,115,104,97,108,108,32,109,101,97,110,32,116,104,101,32,119,111,114,107,32,111,102,32,97,117,116,104,111,114,115,104,105,112,44,32,119,104,101,116,104,101,114,32,105,110,32,83,111,117,114,99,101,32,111,114,10,32,32,32,79,98,106,101,99,116,32,102,111,114,109,44,32,109,97,100,101,32,97,118,97,105,108,97,98,108,101,32,117,110,100,101,114,32,116,104,101,32,76,105,99,101,110,115,101,44,32,97,115,32,105,110,100,105,99,97,116,101,100,32,98,121,32,97,10,32,32,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,116,104,97,116,32,105,115,32,105,110,99,108,117,100,101,100,32,105,110,32,111,114,32,97,116,116,97,99,104,101,100,32,116,111,32,116,104,101,32,119,111,114,107,10,32,32,32,40,97,110,32,101,120,97,109,112,108,101,32,105,115,32,112,114,111,118,105,100,101,100,32,105,110,32,116,104,101,32,65,112,112,101,110,100,105,120,32,98,101,108,111,119,41,46,10,10,32,32,32,34,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,34,32,115,104,97,108,108,32,109,101,97,110,32,97,110,121,32,119,111,114,107,44,32,119,104,101,116,104,101,114,32,105,110,32,83,111,117,114,99,101,32,111,114,32,79,98,106,101,99,116,10,32,32,32,102,111,114,109,44,32,116,104,97,116,32,105,115,32,98,97,115,101,100,32,111,110,32,40,111,114,32,100,101,114,105,118,101,100,32,102,114,111,109,41,32,116,104,101,32,87,111,114,107,32,97,110,100,32,102,111,114,32,119,104,105,99,104,32,116,104,101,10,32,32,32,101,100,105,116,111,114,105,97,108,32,114,101,118,105,115,105,111,110,115,44,32,97,110,110,111,116,97,116,105,111,110,115,44,32,101,108,97,98,111,114,97,116,105,111,110,115,44,32,111,114,32,111,116,104,101,114,32,109,111,100,105,102,105,99,97,116,105,111,110,115,10,32,32,32,114,101,112,114,101,115,101,110,116,44,32,97,115,32,97,32,119,104,111,108,101,44,32,97,110,32,111,114,105,103,105,110,97,108,32,119,111,114,107,32,111,102,32,97,117,116,104,111,114,115,104,105,112,46,32,70,111,114,32,116,104,101,32,112,117,114,112,111,115,101,115,10,32,32,32,111,102,32,116,104,105,115,32,76,105,99,101,110,115,101,44,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,115,104,97,108,108,32,110,111,116,32,105,110,99,108,117,100,101,32,119,111,114,107,115,32,116,104,97,116,32,114,101,109,97,105,110,10,32,32,32,115,101,112,97,114,97,98,108,101,32,102,114,111,109,44,32,111,114,32,109,101,114,101,108,121,32,108,105,110,107,32,40,111,114,32,98,105,110,100,32,98,121,32,110,97,109,101,41,32,116,111,32,116,104,101,32,105,110,116,101,114,102,97,99,101,115,32,111,102,44,10,32,32,32,116,104,101,32,87,111,114,107,32,97,110,100,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,116,104,101,114,101,111,102,46,10,10,32,32,32,34,67,111,110,116,114,105,98,117,116,105,111,110,34,32,115,104,97,108,108,32,109,101,97,110,32,97,110,121,32,119,111,114,107,32,111,102,32,97,117,116,104,111,114,115,104,105,112,44,32,105,110,99,108,117,100,105,110,103,10,32,32,32,116,104,101,32,111,114,105,103,105,110,97,108,32,118,101,114,115,105,111,110,32,111,102,32,116,104,101,32,87,111,114,107,32,97,110,100,32,97,110,121,32,109,111,100,105,102,105,99,97,116,105,111,110,115,32,111,114,32,97,100,100,105,116,105,111,110,115,10,32,32,32,116,111,32,116,104,97,116,32,87,111,114,107,32,111,114,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,116,104,101,114,101,111,102,44,32,116,104,97,116,32,105,115,32,105,110,116,101,110,116,105,111,110,97,108,108,121,10,32,32,32,115,117,98,109,105,116,116,101,100,32,116,111,32,76,105,99,101,110,115,111,114,32,102,111,114,32,105,110,99,108,117,115,105,111,110,32,105,110,32,116,104,101,32,87,111,114,107,32,98,121,32,116,104,101,32,99,111,112,121,114,105,103,104,116,32,111,119,110,101,114,10,32,32,32,111,114,32,98,121,32,97,110,32,105,110,100,105,118,105,100,117,97,108,32,111,114,32,76,101,103,97,108,32,69,110,116,105,116,121,32,97,117,116,104,111,114,105,122,101,100,32,116,111,32,115,117,98,109,105,116,32,111,110,32,98,101,104,97,108,102,32,111,102,10,32,32,32,116,104,101,32,99,111,112,121,114,105,103,104,116,32,111,119,110,101,114,46,32,70,111,114,32,116,104,101,32,112,117,114,112,111,115,101,115,32,111,102,32,116,104,105,115,32,100,101,102,105,110,105,116,105,111,110,44,32,34,115,117,98,109,105,116,116,101,100,34,10,32,32,32,109,101,97,110,115,32,97,110,121,32,102,111,114,109,32,111,102,32,101,108,101,99,116,114,111,110,105,99,44,32,118,101,114,98,97,108,44,32,111,114,32,119,114,105,116,116,101,110,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,115,101,110,116,10,32,32,32,116,111,32,116,104,101,32,76,105,99,101,110,115,111,114,32,111,114,32,105,116,115,32,114,101,112,114,101,115,101,110,116,97,116,105,118,101,115,44,32,105,110,99,108,117,100,105,110,103,32,98,117,116,32,110,111,116,32,108,105,109,105,116,101,100,32,116,111,10,32,32,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,111,110,32,101,108,101,99,116,114,111,110,105,99,32,109,97,105,108,105,110,103,32,108,105,115,116,115,44,32,115,111,117,114,99,101,32,99,111,100,101,32,99,111,110,116,114,111,108,32,115,121,115,116,101,109,115,44,10,32,32,32,97,110,100,32,105,115,115,117,101,32,116,114,97,99,107,105,110,103,32,115,121,115,116,101,109,115,32,116,104,97,116,32,97,114,101,32,109,97,110,97,103,101,100,32,98,121,44,32,111,114,32,111,110,32,98,101,104,97,108,102,32,111,102,44,32,116,104,101,10,32,32,32,76,105,99,101,110,115,111,114,32,102,111,114,32,116,104,101,32,112,117,114,112,111,115,101,32,111,102,32,100,105,115,99,117,115,115,105,110,103,32,97,110,100,32,105,109,112,114,111,118,105,110,103,32,116,104,101,32,87,111,114,107,44,32,98,117,116,10,32,32,32,101,120,99,108,117,100,105,110,103,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,116,104,97,116,32,105,115,32,99,111,110,115,112,105,99,117,111,117,115,108,121,32,109,97,114,107,101,100,32,111,114,32,111,116,104,101,114,119,105,115,101,10,32,32,32,100,101,115,105,103,110,97,116,101,100,32,105,110,32,119,114,105,116,105,110,103,32,98,121,32,116,104,101,32,99,111,112,121,114,105,103,104,116,32,111,119,110,101,114,32,97,115,32,34,78,111,116,32,97,32,67,111,110,116,114,105,98,117,116,105,111,110,46,34,10,10,32,32,32,34,67,111,110,116,114,105,98,117,116,111,114,34,32,115,104,97,108,108,32,109,101,97,110,32,76,105,99,101,110,115,111,114,32,97,110,100,32,97,110,121,32,105,110,100,105,118,105,100,117,97,108,32,111,114,32,76,101,103,97,108,32,69,110,116,105,116,121,10,32,32,32,111,110,32,98,101,104,97,108,102,32,111,102,32,119,104,111,109,32,97,32,67,111,110,116,114,105,98,117,116,105,111,110,32,104,97,115,32,98,101,101,110,32,114,101,99,101,105,118,101,100,32,98,121,32,76,105,99,101,110,115,111,114,32,97,110,100,10,32,32,32,115,117,98,115,101,113,117,101,110,116,108,121,32,105,110,99,111,114,112,111,114,97,116,101,100,32,119,105,116,104,105,110,32,116,104,101,32,87,111,114,107,46,10,10,50,46,32,71,114,97,110,116,32,111,102,32,67,111,112,121,114,105,103,104,116,32,76,105,99,101,110,115,101,46,32,83,117,98,106,101,99,116,32,116,111,32,116,104,101,32,116,101,114,109,115,32,97,110,100,32,99,111,110,100,105,116,105,111,110,115,32,111,102,10,32,32,32,116,104,105,115,32,76,105,99,101,110,115,101,44,32,101,97,99,104,32,67,111,110,116,114,105,98,117,116,111,114,32,104,101,114,101,98,121,32,103,114,97,110,116,115,32,116,111,32,89,111,117,32,97,32,112,101,114,112,101,116,117,97,108,44,10,32,32,32,119,111,114,108,100,119,105,100,101,44,32,110,111,110,45,101,120,99,108,117,115,105,118,101,44,32,110,111,45,99,104,97,114,103,101,44,32,114,111,121,97,108,116,121,45,102,114,101,101,44,32,105,114,114,101,118,111,99,97,98,108,101,10,32,32,32,99,111,112,121,114,105,103,104,116,32,108,105,99,101,110,115,101,32,116,111,32,114,101,112,114,111,100,117,99,101,44,32,112,114,101,112,97,114,101,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,111,102,44,10,32,32,32,112,117,98,108,105,99,108,121,32,100,105,115,112,108,97,121,44,32,112,117,98,108,105,99,108,121,32,112,101,114,102,111,114,109,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,32,100,105,115,116,114,105,98,117,116,101,32,116,104,101,10,32,32,32,87,111,114,107,32,97,110,100,32,115,117,99,104,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,105,110,32,83,111,117,114,99,101,32,111,114,32,79,98,106,101,99,116,32,102,111,114,109,46,10,10,51,46,32,71,114,97,110,116,32,111,102,32,80,97,116,101,110,116,32,76,105,99,101,110,115,101,46,32,83,117,98,106,101,99,116,32,116,111,32,116,104,101,32,116,101,114,109,115,32,97,110,100,32,99,111,110,100,105,116,105,111,110,115,32,111,102,10,32,32,32,116,104,105,115,32,76,105,99,101,110,115,101,44,32,101,97,99,104,32,67,111,110,116,114,105,98,117,116,111,114,32,104,101,114,101,98,121,32,103,114,97,110,116,115,32,116,111,32,89,111,117,32,97,32,112,101,114,112,101,116,117,97,108,44,10,32,32,32,119,111,114,108,100,119,105,100,101,44,32,110,111,110,45,101,120,99,108,117,115,105,118,101,44,32,110,111,45,99,104,97,114,103,101,44,32,114,111,121,97,108,116,121,45,102,114,101,101,44,32,105,114,114,101,118,111,99,97,98,108,101,10,32,32,32,40,101,120,99,101,112,116,32,97,115,32,115,116,97,116,101,100,32,105,110,32,116,104,105,115,32,115,101,99,116,105,111,110,41,32,112,97,116,101,110,116,32,108,105,99,101,110,115,101,32,116,111,32,109,97,107,101,44,32,104,97,118,101,32,109,97,100,101,44,10,32,32,32,117,115,101,44,32,111,102,102,101,114,32,116,111,32,115,101,108,108,44,32,115,101,108,108,44,32,105,109,112,111,114,116,44,32,97,110,100,32,111,116,104,101,114,119,105,115,101,32,116,114,97,110,115,102,101,114,32,116,104,101,32,87,111,114,107,44,10,32,32,32,119,104,101,114,101,32,115,117,99,104,32,108,105,99,101,110,115,101,32,97,112,112,108,105,101,115,32,111,110,108,121,32,116,111,32,116,104,111,115,101,32,112,97,116,101,110,116,32,99,108,97,105,109,115,32,108,105,99,101,110,115,97,98,108,101,10,32,32,32,98,121,32,115,117,99,104,32,67,111,110,116,114,105,98,117,116,111,114,32,116,104,97,116,32,97,114,101,32,110,101,99,101,115,115,97,114,105,108,121,32,105,110,102,114,105,110,103,101,100,32,98,121,32,116,104,101,105,114,10,32,32,32,67,111,110,116,114,105,98,117,116,105,111,110,40,115,41,32,97,108,111,110,101,32,111,114,32,98,121,32,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,116,104,101,105,114,32,67,111,110,116,114,105,98,117,116,105,111,110,40,115,41,10,32,32,32,119,105,116,104,32,116,104,101,32,87,111,114,107,32,116,111,32,119,104,105,99,104,32,115,117,99,104,32,67,111,110,116,114,105,98,117,116,105,111,110,40,115,41,32,119,97,115,32,115,117,98,109,105,116,116,101,100,46,32,73,102,32,89,111,117,10,32,32,32,105,110,115,116,105,116,117,116,101,32,112,97,116,101,110,116,32,108,105,116,105,103,97,116,105,111,110,32,97,103,97,105,110,115,116,32,97,110,121,32,101,110,116,105,116,121,32,40,105,110,99,108,117,100,105,110,103,32,97,10,32,32,32,99,114,111,115,115,45,99,108,97,105,109,32,111,114,32,99,111,117,110,116,101,114,99,108,97,105,109,32,105,110,32,97,32,108,97,119,115,117,105,116,41,32,97,108,108,101,103,105,110,103,32,116,104,97,116,32,116,104,101,32,87,111,114,107,10,32,32,32,111,114,32,97,32,67,111,110,116,114,105,98,117,116,105,111,110,32,105,110,99,111,114,112,111,114,97,116,101,100,32,119,105,116,104,105,110,32,116,104,101,32,87,111,114,107,32,99,111,110,115,116,105,116,117,116,101,115,32,100,105,114,101,99,116,10,32,32,32,111,114,32,99,111,110,116,114,105,98,117,116,111,114,121,32,112,97,116,101,110,116,32,105,110,102,114,105,110,103,101,109,101,110,116,44,32,116,104,101,110,32,97,110,121,32,112,97,116,101,110,116,32,108,105,99,101,110,115,101,115,10,32,32,32,103,114,97,110,116,101,100,32,116,111,32,89,111,117,32,117,110,100,101,114,32,116,104,105,115,32,76,105,99,101,110,115,101,32,102,111,114,32,116,104,97,116,32,87,111,114,107,32,115,104,97,108,108,32,116,101,114,109,105,110,97,116,101,10,32,32,32,97,115,32,111,102,32,116,104,101,32,100,97,116,101,32,115,117,99,104,32,108,105,116,105,103,97,116,105,111,110,32,105,115,32,102,105,108,101,100,46,10,10,52,46,32,82,101,100,105,115,116,114,105,98,117,116,105,111,110,46,32,89,111,117,32,109,97,121,32,114,101,112,114,111,100,117,99,101,32,97,110,100,32,100,105,115,116,114,105,98,117,116,101,32,99,111,112,105,101,115,32,111,102,32,116,104,101,10,32,32,32,87,111,114,107,32,111,114,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,116,104,101,114,101,111,102,32,105,110,32,97,110,121,32,109,101,100,105,117,109,44,32,119,105,116,104,32,111,114,32,119,105,116,104,111,117,116,10,32,32,32,109,111,100,105,102,105,99,97,116,105,111,110,115,44,32,97,110,100,32,105,110,32,83,111,117,114,99,101,32,111,114,32,79,98,106,101,99,116,32,102,111,114,109,44,32,112,114,111,118,105,100,101,100,32,116,104,97,116,32,89,111,117,10,32,32,32,109,101,101,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,32,32,32,40,97,41,32,89,111,117,32,109,117,115,116,32,103,105,118,101,32,97,110,121,32,111,116,104,101,114,32,114,101,99,105,112,105,101,110,116,115,32,111,102,32,116,104,101,32,87,111,114,107,32,111,114,10,32,32,32,32,32,32,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,76,105,99,101,110,115,101,59,32,97,110,100,10,10,32,32,32,40,98,41,32,89,111,117,32,109,117,115,116,32,99,97,117,115,101,32,97,110,121,32,109,111,100,105,102,105,101,100,32,102,105,108,101,115,32,116,111,32,99,97,114,114,121,32,112,114,111,109,105,110,101,110,116,32,110,111,116,105,99,101,115,10,32,32,32,32,32,32,32,115,116,97,116,105,110,103,32,116,104,97,116,32,89,111,117,32,99,104,97,110,103,101,100,32,116,104,101,32,102,105,108,101,115,59,32,97,110,100,10,10,32,32,32,40,99,41,32,89,111,117,32,109,117,115,116,32,114,101,116,97,105,110,44,32,105,110,32,116,104,101,32,83,111,117,114,99,101,32,102,111,114,109,32,111,102,32,97,110,121,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,10,32,32,32,32,32,32,32,116,104,97,116,32,89,111,117,32,100,105,115,116,114,105,98,117,116,101,44,32,97,108,108,32,99,111,112,121,114,105,103,104,116,44,32,112,97,116,101,110,116,44,32,116,114,97,100,101,109,97,114,107,44,32,97,110,100,10,32,32,32,32,32,32,32,97,116,116,114,105,98,117,116,105,111,110,32,110,111,116,105,99,101,115,32,102,114,111,109,32,116,104,101,32,83,111,117,114,99,101,32,102,111,114,109,32,111,102,32,116,104,101,32,87,111,114,107,44,10,32,32,32,32,32,32,32,101,120,99,108,117,100,105,110,103,32,116,104,111,115,101,32,110,111,116,105,99,101,115,32,116,104,97,116,32,100,111,32,110,111,116,32,112,101,114,116,97,105,110,32,116,111,32,97,110,121,32,112,97,114,116,32,111,102,10,32,32,32,32,32,32,32,116,104,101,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,59,32,97,110,100,10,10,32,32,32,40,100,41,32,73,102,32,116,104,101,32,87,111,114,107,32,105,110,99,108,117,100,101,115,32,97,32,34,78,79,84,73,67,69,34,32,116,101,120,116,32,102,105,108,101,32,97,115,32,112,97,114,116,32,111,102,32,105,116,115,10,32,32,32,32,32,32,32,100,105,115,116,114,105,98,117,116,105,111,110,44,32,116,104,101,110,32,97,110,121,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,116,104,97,116,32,89,111,117,32,100,105,115,116,114,105,98,117,116,101,32,109,117,115,116,10,32,32,32,32,32,32,32,105,110,99,108,117,100,101,32,97,32,114,101,97,100,97,98,108,101,32,99,111,112,121,32,111,102,32,116,104,101,32,97,116,116,114,105,98,117,116,105,111,110,32,110,111,116,105,99,101,115,32,99,111,110,116,97,105,110,101,100,10,32,32,32,32,32,32,32,119,105,116,104,105,110,32,115,117,99,104,32,78,79,84,73,67,69,32,102,105,108,101,44,32,101,120,99,108,117,100,105,110,103,32,116,104,111,115,101,32,110,111,116,105,99,101,115,32,116,104,97,116,32,100,111,32,110,111,116,10,32,32,32,32,32,32,32,112,101,114,116,97,105,110,32,116,111,32,97,110,121,32,112,97,114,116,32,111,102,32,116,104,101,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,44,32,105,110,32,97,116,32,108,101,97,115,116,32,111,110,101,10,32,32,32,32,32,32,32,111,102,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,108,97,99,101,115,58,32,119,105,116,104,105,110,32,97,32,78,79,84,73,67,69,32,116,101,120,116,32,102,105,108,101,32,100,105,115,116,114,105,98,117,116,101,100,10,32,32,32,32,32,32,32,97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,59,32,119,105,116,104,105,110,32,116,104,101,32,83,111,117,114,99,101,32,102,111,114,109,32,111,114,10,32,32,32,32,32,32,32,100,111,99,117,109,101,110,116,97,116,105,111,110,44,32,105,102,32,112,114,111,118,105,100,101,100,32,97,108,111,110,103,32,119,105,116,104,32,116,104,101,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,59,32,111,114,44,10,32,32,32,32,32,32,32,119,105,116,104,105,110,32,97,32,100,105,115,112,108,97,121,32,103,101,110,101,114,97,116,101,100,32,98,121,32,116,104,101,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,44,32,105,102,32,97,110,100,10,32,32,32,32,32,32,32,119,104,101,114,101,118,101,114,32,115,117,99,104,32,116,104,105,114,100,45,112,97,114,116,121,32,110,111,116,105,99,101,115,32,110,111,114,109,97,108,108,121,32,97,112,112,101,97,114,46,32,84,104,101,32,99,111,110,116,101,110,116,115,10,32,32,32,32,32,32,32,111,102,32,116,104,101,32,78,79,84,73,67,69,32,102,105,108,101,32,97,114,101,32,102,111,114,32,105,110,102,111,114,109,97,116,105,111,110,97,108,32,112,117,114,112,111,115,101,115,32,111,110,108,121,32,97,110,100,10,32,32,32,32,32,32,32,100,111,32,110,111,116,32,109,111,100,105,102,121,32,116,104,101,32,76,105,99,101,110,115,101,46,32,89,111,117,32,109,97,121,32,97,100,100,32,89,111,117,114,32,111,119,110,32,97,116,116,114,105,98,117,116,105,111,110,10,32,32,32,32,32,32,32,110,111,116,105,99,101,115,32,119,105,116,104,105,110,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,116,104,97,116,32,89,111,117,32,100,105,115,116,114,105,98,117,116,101,44,32,97,108,111,110,103,115,105,100,101,10,32,32,32,32,32,32,32,111,114,32,97,115,32,97,110,32,97,100,100,101,110,100,117,109,32,116,111,32,116,104,101,32,78,79,84,73,67,69,32,116,101,120,116,32,102,114,111,109,32,116,104,101,32,87,111,114,107,44,32,112,114,111,118,105,100,101,100,10,32,32,32,32,32,32,32,116,104,97,116,32,115,117,99,104,32,97,100,100,105,116,105,111,110,97,108,32,97,116,116,114,105,98,117,116,105,111,110,32,110,111,116,105,99,101,115,32,99,97,110,110,111,116,32,98,101,32,99,111,110,115,116,114,117,101,100,10,32,32,32,32,32,32,32,97,115,32,109,111,100,105,102,121,105,110,103,32,116,104,101,32,76,105,99,101,110,115,101,46,10,10,32,32,32,89,111,117,32,109,97,121,32,97,100,100,32,89,111,117,114,32,111,119,110,32,99,111,112,121,114,105,103,104,116,32,115,116,97,116,101,109,101,110,116,32,116,111,32,89,111,117,114,32,109,111,100,105,102,105,99,97,116,105,111,110,115,32,97,110,100,10,32,32,32,109,97,121,32,112,114,111,118,105,100,101,32,97,100,100,105,116,105,111,110,97,108,32,111,114,32,100,105,102,102,101,114,101,110,116,32,108,105,99,101,110,115,101,32,116,101,114,109,115,32,97,110,100,32,99,111,110,100,105,116,105,111,110,115,10,32,32,32,102,111,114,32,117,115,101,44,32,114,101,112,114,111,100,117,99,116,105,111,110,44,32,111,114,32,100,105,115,116,114,105,98,117,116,105,111,110,32,111,102,32,89,111,117,114,32,109,111,100,105,102,105,99,97,116,105,111,110,115,44,32,111,114,10,32,32,32,102,111,114,32,97,110,121,32,115,117,99,104,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,97,115,32,97,32,119,104,111,108,101,44,32,112,114,111,118,105,100,101,100,32,89,111,117,114,32,117,115,101,44,10,32,32,32,114,101,112,114,111,100,117,99,116,105,111,110,44,32,97,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110,32,111,102,32,116,104,101,32,87,111,114,107,32,111,116,104,101,114,119,105,115,101,32,99,111,109,112,108,105,101,115,32,119,105,116,104,10,32,32,32,116,104,101,32,99,111,110,100,105,116,105,111,110,115,32,115,116,97,116,101,100,32,105,110,32,116,104,105,115,32,76,105,99,101,110,115,101,46,10,10,53,46,32,83,117,98,109,105,115,115,105,111,110,32,111,102,32,67,111,110,116,114,105,98,117,116,105,111,110,115,46,32,85,110,108,101,115,115,32,89,111,117,32,101,120,112,108,105,99,105,116,108,121,32,115,116,97,116,101,32,111,116,104,101,114,119,105,115,101,44,10,32,32,32,97,110,121,32,67,111,110,116,114,105,98,117,116,105,111,110,32,105,110,116,101,110,116,105,111,110,97,108,108,121,32,115,117,98,109,105,116,116,101,100,32,102,111,114,32,105,110,99,108,117,115,105,111,110,32,105,110,32,116,104,101,32,87,111,114,107,10,32,32,32,98,121,32,89,111,117,32,116,111,32,116,104,101,32,76,105,99,101,110,115,111,114,32,115,104,97,108,108,32,98,101,32,117,110,100,101,114,32,116,104,101,32,116,101,114,109,115,32,97,110,100,32,99,111,110,100,105,116,105,111,110,115,32,111,102,10,32,32,32,116,104,105,115,32,76,105,99,101,110,115,101,44,32,119,105,116,104,111,117,116,32,97,110,121,32,97,100,100,105,116,105,111,110,97,108,32,116,101,114,109,115,32,111,114,32,99,111,110,100,105,116,105,111,110,115,46,10,32,32,32,78,111,116,119,105,116,104,115,116,97,110,100,105,110,103,32,116,104,101,32,97,98,111,118,101,44,32,110,111,116,104,105,110,103,32,104,101,114,101,105,110,32,115,104,97,108,108,32,115,117,112,101,114,115,101,100,101,32,111,114,32,109,111,100,105,102,121,10,32,32,32,116,104,101,32,116,101,114,109,115,32,111,102,32], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+164032);
/* memory initializer */ allocate([97,110,121,32,115,101,112,97,114,97,116,101,32,108,105,99,101,110,115,101,32,97,103,114,101,101,109,101,110,116,32,121,111,117,32,109,97,121,32,104,97,118,101,32,101,120,101,99,117,116,101,100,10,32,32,32,119,105,116,104,32,76,105,99,101,110,115,111,114,32,114,101,103,97,114,100,105,110,103,32,115,117,99,104,32,67,111,110,116,114,105,98,117,116,105,111,110,115,46,10,10,54,46,32,84,114,97,100,101,109,97,114,107,115,46,32,84,104,105,115,32,76,105,99,101,110,115,101,32,100,111,101,115,32,110,111,116,32,103,114,97,110,116,32,112,101,114,109,105,115,115,105,111,110,32,116,111,32,117,115,101,32,116,104,101,32,116,114,97,100,101,10,32,32,32,110,97,109,101,115,44,32,116,114,97,100,101,109,97,114,107,115,44,32,115,101,114,118,105,99,101,32,109,97,114,107,115,44,32,111,114,32,112,114,111,100,117,99,116,32,110,97,109,101,115,32,111,102,32,116,104,101,32,76,105,99,101,110,115,111,114,44,10,32,32,32,101,120,99,101,112,116,32,97,115,32,114,101,113,117,105,114,101,100,32,102,111,114,32,114,101,97,115,111,110,97,98,108,101,32,97,110,100,32,99,117,115,116,111,109,97,114,121,32,117,115,101,32,105,110,32,100,101,115,99,114,105,98,105,110,103,32,116,104,101,10,32,32,32,111,114,105,103,105,110,32,111,102,32,116,104,101,32,87,111,114,107,32,97,110,100,32,114,101,112,114,111,100,117,99,105,110,103,32,116,104,101,32,99,111,110,116,101,110,116,32,111,102,32,116,104,101,32,78,79,84,73,67,69,32,102,105,108,101,46,10,10,55,46,32,68,105,115,99,108,97,105,109,101,114,32,111,102,32,87,97,114,114,97,110,116,121,46,32,85,110,108,101,115,115,32,114,101,113,117,105,114,101,100,32,98,121,32,97,112,112,108,105,99,97,98,108,101,32,108,97,119,32,111,114,10,32,32,32,97,103,114,101,101,100,32,116,111,32,105,110,32,119,114,105,116,105,110,103,44,32,76,105,99,101,110,115,111,114,32,112,114,111,118,105,100,101,115,32,116,104,101,32,87,111,114,107,32,40,97,110,100,32,101,97,99,104,10,32,32,32,67,111,110,116,114,105,98,117,116,111,114,32,112,114,111,118,105,100,101,115,32,105,116,115,32,67,111,110,116,114,105,98,117,116,105,111,110,115,41,32,111,110,32,97,110,32,34,65,83,32,73,83,34,32,66,65,83,73,83,44,10,32,32,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,73,69,83,32,79,82,32,67,79,78,68,73,84,73,79,78,83,32,79,70,32,65,78,89,32,75,73,78,68,44,32,101,105,116,104,101,114,32,101,120,112,114,101,115,115,32,111,114,10,32,32,32,105,109,112,108,105,101,100,44,32,105,110,99,108,117,100,105,110,103,44,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,44,32,97,110,121,32,119,97,114,114,97,110,116,105,101,115,32,111,114,32,99,111,110,100,105,116,105,111,110,115,10,32,32,32,111,102,32,84,73,84,76,69,44,32,78,79,78,45,73,78,70,82,73,78,71,69,77,69,78,84,44,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,111,114,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,32,32,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,46,32,89,111,117,32,97,114,101,32,115,111,108,101,108,121,32,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,100,101,116,101,114,109,105,110,105,110,103,32,116,104,101,10,32,32,32,97,112,112,114,111,112,114,105,97,116,101,110,101,115,115,32,111,102,32,117,115,105,110,103,32,111,114,32,114,101,100,105,115,116,114,105,98,117,116,105,110,103,32,116,104,101,32,87,111,114,107,32,97,110,100,32,97,115,115,117,109,101,32,97,110,121,10,32,32,32,114,105,115,107,115,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,89,111,117,114,32,101,120,101,114,99,105,115,101,32,111,102,32,112,101,114,109,105,115,115,105,111,110,115,32,117,110,100,101,114,32,116,104,105,115,32,76,105,99,101,110,115,101,46,10,10,56,46,32,76,105,109,105,116,97,116,105,111,110,32,111,102,32,76,105,97,98,105,108,105,116,121,46,32,73,110,32,110,111,32,101,118,101,110,116,32,97,110,100,32,117,110,100,101,114,32,110,111,32,108,101,103,97,108,32,116,104,101,111,114,121,44,10,32,32,32,119,104,101,116,104,101,114,32,105,110,32,116,111,114,116,32,40,105,110,99,108,117,100,105,110,103,32,110,101,103,108,105,103,101,110,99,101,41,44,32,99,111,110,116,114,97,99,116,44,32,111,114,32,111,116,104,101,114,119,105,115,101,44,10,32,32,32,117,110,108,101,115,115,32,114,101,113,117,105,114,101,100,32,98,121,32,97,112,112,108,105,99,97,98,108,101,32,108,97,119,32,40,115,117,99,104,32,97,115,32,100,101,108,105,98,101,114,97,116,101,32,97,110,100,32,103,114,111,115,115,108,121,10,32,32,32,110,101,103,108,105,103,101,110,116,32,97,99,116,115,41,32,111,114,32,97,103,114,101,101,100,32,116,111,32,105,110,32,119,114,105,116,105,110,103,44,32,115,104,97,108,108,32,97,110,121,32,67,111,110,116,114,105,98,117,116,111,114,32,98,101,10,32,32,32,108,105,97,98,108,101,32,116,111,32,89,111,117,32,102,111,114,32,100,97,109,97,103,101,115,44,32,105,110,99,108,117,100,105,110,103,32,97,110,121,32,100,105,114,101,99,116,44,32,105,110,100,105,114,101,99,116,44,32,115,112,101,99,105,97,108,44,10,32,32,32,105,110,99,105,100,101,110,116,97,108,44,32,111,114,32,99,111,110,115,101,113,117,101,110,116,105,97,108,32,100,97,109,97,103,101,115,32,111,102,32,97,110,121,32,99,104,97,114,97,99,116,101,114,32,97,114,105,115,105,110,103,32,97,115,32,97,10,32,32,32,114,101,115,117,108,116,32,111,102,32,116,104,105,115,32,76,105,99,101,110,115,101,32,111,114,32,111,117,116,32,111,102,32,116,104,101,32,117,115,101,32,111,114,32,105,110,97,98,105,108,105,116,121,32,116,111,32,117,115,101,32,116,104,101,10,32,32,32,87,111,114,107,32,40,105,110,99,108,117,100,105,110,103,32,98,117,116,32,110,111,116,32,108,105,109,105,116,101,100,32,116,111,32,100,97,109,97,103,101,115,32,102,111,114,32,108,111,115,115,32,111,102,32,103,111,111,100,119,105,108,108,44,10,32,32,32,119,111,114,107,32,115,116,111,112,112,97,103,101,44,32,99,111,109,112,117,116,101,114,32,102,97,105,108,117,114,101,32,111,114,32,109,97,108,102,117,110,99,116,105,111,110,44,32,111,114,32,97,110,121,32,97,110,100,32,97,108,108,10,32,32,32,111,116,104,101,114,32,99,111,109,109,101,114,99,105,97,108,32,100,97,109,97,103,101,115,32,111,114,32,108,111,115,115,101,115,41,44,32,101,118,101,110,32,105,102,32,115,117,99,104,32,67,111,110,116,114,105,98,117,116,111,114,10,32,32,32,104,97,115,32,98,101,101,110,32,97,100,118,105,115,101,100,32,111,102,32,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,111,102,32,115,117,99,104,32,100,97,109,97,103,101,115,46,10,10,57,46,32,65,99,99,101,112,116,105,110,103,32,87,97,114,114,97,110,116,121,32,111,114,32,65,100,100,105,116,105,111,110,97,108,32,76,105,97,98,105,108,105,116,121,46,32,87,104,105,108,101,32,114,101,100,105,115,116,114,105,98,117,116,105,110,103,10,32,32,32,116,104,101,32,87,111,114,107,32,111,114,32,68,101,114,105,118,97,116,105,118,101,32,87,111,114,107,115,32,116,104,101,114,101,111,102,44,32,89,111,117,32,109,97,121,32,99,104,111,111,115,101,32,116,111,32,111,102,102,101,114,44,10,32,32,32,97,110,100,32,99,104,97,114,103,101,32,97,32,102,101,101,32,102,111,114,44,32,97,99,99,101,112,116,97,110,99,101,32,111,102,32,115,117,112,112,111,114,116,44,32,119,97,114,114,97,110,116,121,44,32,105,110,100,101,109,110,105,116,121,44,10,32,32,32,111,114,32,111,116,104,101,114,32,108,105,97,98,105,108,105,116,121,32,111,98,108,105,103,97,116,105,111,110,115,32,97,110,100,47,111,114,32,114,105,103,104,116,115,32,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,116,104,105,115,10,32,32,32,76,105,99,101,110,115,101,46,32,72,111,119,101,118,101,114,44,32,105,110,32,97,99,99,101,112,116,105,110,103,32,115,117,99,104,32,111,98,108,105,103,97,116,105,111,110,115,44,32,89,111,117,32,109,97,121,32,97,99,116,32,111,110,108,121,10,32,32,32,111,110,32,89,111,117,114,32,111,119,110,32,98,101,104,97,108,102,32,97,110,100,32,111,110,32,89,111,117,114,32,115,111,108,101,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,44,32,110,111,116,32,111,110,32,98,101,104,97,108,102,10,32,32,32,111,102,32,97,110,121,32,111,116,104,101,114,32,67,111,110,116,114,105,98,117,116,111,114,44,32,97,110,100,32,111,110,108,121,32,105,102,32,89,111,117,32,97,103,114,101,101,32,116,111,32,105,110,100,101,109,110,105,102,121,44,10,32,32,32,100,101,102,101,110,100,44,32,97,110,100,32,104,111,108,100,32,101,97,99,104,32,67,111,110,116,114,105,98,117,116,111,114,32,104,97,114,109,108,101,115,115,32,102,111,114,32,97,110,121,32,108,105,97,98,105,108,105,116,121,10,32,32,32,105,110,99,117,114,114,101,100,32,98,121,44,32,111,114,32,99,108,97,105,109,115,32,97,115,115,101,114,116,101,100,32,97,103,97,105,110,115,116,44,32,115,117,99,104,32,67,111,110,116,114,105,98,117,116,111,114,32,98,121,32,114,101,97,115,111,110,10,32,32,32,111,102,32,121,111,117,114,32,97,99,99,101,112,116,105,110,103,32,97,110,121,32,115,117,99,104,32,119,97,114,114,97,110,116,121,32,111,114,32,97,100,100,105,116,105,111,110,97,108,32,108,105,97,98,105,108,105,116,121,46,10,10,69,78,68,32,79,70,32,84,69,82,77,83,32,65,78,68,32,67,79,78,68,73,84,73,79,78,83,10,10,65,80,80,69,78,68,73,88,58,32,72,111,119,32,116,111,32,97,112,112,108,121,32,116,104,101,32,65,112,97,99,104,101,32,76,105,99,101,110,115,101,32,116,111,32,121,111,117,114,32,119,111,114,107,46,10,10,32,32,32,84,111,32,97,112,112,108,121,32,116,104,101,32,65,112,97,99,104,101,32,76,105,99,101,110,115,101,32,116,111,32,121,111,117,114,32,119,111,114,107,44,32,97,116,116,97,99,104,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,32,32,32,98,111,105,108,101,114,112,108,97,116,101,32,110,111,116,105,99,101,44,32,119,105,116,104,32,116,104,101,32,102,105,101,108,100,115,32,101,110,99,108,111,115,101,100,32,98,121,32,98,114,97,99,107,101,116,115,32,34,91,93,34,10,32,32,32,114,101,112,108,97,99,101,100,32,119,105,116,104,32,121,111,117,114,32,111,119,110,32,105,100,101,110,116,105,102,121,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,46,32,40,68,111,110,39,116,32,105,110,99,108,117,100,101,10,32,32,32,116,104,101,32,98,114,97,99,107,101,116,115,33,41,32,32,84,104,101,32,116,101,120,116,32,115,104,111,117,108,100,32,98,101,32,101,110,99,108,111,115,101,100,32,105,110,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,10,32,32,32,99,111,109,109,101,110,116,32,115,121,110,116,97,120,32,102,111,114,32,116,104,101,32,102,105,108,101,32,102,111,114,109,97,116,46,32,87,101,32,97,108,115,111,32,114,101,99,111,109,109,101,110,100,32,116,104,97,116,32,97,10,32,32,32,102,105,108,101,32,111,114,32,99,108,97,115,115,32,110,97,109,101,32,97,110,100,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,112,117,114,112,111,115,101,32,98,101,32,105,110,99,108,117,100,101,100,32,111,110,32,116,104,101,10,32,32,32,115,97,109,101,32,34,112,114,105,110,116,101,100,32,112,97,103,101,34,32,97,115,32,116,104,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,102,111,114,32,101,97,115,105,101,114,10,32,32,32,105,100,101,110,116,105,102,105,99,97,116,105,111,110,32,119,105,116,104,105,110,32,116,104,105,114,100,45,112,97,114,116,121,32,97,114,99,104,105,118,101,115,46,10,10,67,111,112,121,114,105,103,104,116,32,91,121,121,121,121,93,32,91,110,97,109,101,32,111,102,32,99,111,112,121,114,105,103,104,116,32,111,119,110,101,114,93,10,10,76,105,99,101,110,115,101,100,32,117,110,100,101,114,32,116,104,101,32,65,112,97,99,104,101,32,76,105,99,101,110,115,101,44,32,86,101,114,115,105,111,110,32,50,46,48,32,40,116,104,101,32,34,76,105,99,101,110,115,101,34,41,59,10,121,111,117,32,109,97,121,32,110,111,116,32,117,115,101,32,116,104,105,115,32,102,105,108,101,32,101,120,99,101,112,116,32,105,110,32,99,111,109,112,108,105,97,110,99,101,32,119,105,116,104,32,116,104,101,32,76,105,99,101,110,115,101,46,10,89,111,117,32,109,97,121,32,111,98,116,97,105,110,32,97,32,99,111,112,121,32,111,102,32,116,104,101,32,76,105,99,101,110,115,101,32,97,116,10,10,32,32,32,32,104,116,116,112,58,47,47,119,119,119,46,97,112,97,99,104,101,46,111,114,103,47,108,105,99,101,110,115,101,115,47,76,73,67,69,78,83,69,45,50,46,48,10,10,85,110,108,101,115,115,32,114,101,113,117,105,114,101,100,32,98,121,32,97,112,112,108,105,99,97,98,108,101,32,108,97,119,32,111,114,32,97,103,114,101,101,100,32,116,111,32,105,110,32,119,114,105,116,105,110,103,44,32,115,111,102,116,119,97,114,101,10,100,105,115,116,114,105,98,117,116,101,100,32,117,110,100,101,114,32,116,104,101,32,76,105,99,101,110,115,101,32,105,115,32,100,105,115,116,114,105,98,117,116,101,100,32,111,110,32,97,110,32,34,65,83,32,73,83,34,32,66,65,83,73,83,44,10,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,73,69,83,32,79,82,32,67,79,78,68,73,84,73,79,78,83,32,79,70,32,65,78,89,32,75,73,78,68,44,32,101,105,116,104,101,114,32,101,120,112,114,101,115,115,32,111,114,32,105,109,112,108,105,101,100,46,10,83,101,101,32,116,104,101,32,76,105,99,101,110,115,101,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,99,32,108,97,110,103,117,97,103,101,32,103,111,118,101,114,110,105,110,103,32,112,101,114,109,105,115,115,105,111,110,115,32,97,110,100,10,108,105,109,105,116,97,116,105,111,110,115,32,117,110,100,101,114,32,116,104,101,32,76,105,99,101,110,115,101,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,108,111,103,32,118,48,46,51,46,53,44,32,101,110,118,95,108,111,103,103,101,114,32,118,48,46,51,46,50,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,97,104,111,45,99,111,114,97,115,105,99,107,32,118,48,46,53,46,49,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,65,110,100,114,101,119,32,71,97,108,108,97,110,116,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,10,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,10,105,110,32,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,10,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,10,99,111,112,105,101,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,10,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,10,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,10,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,10,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,10,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,10,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,109,105,110,105,122,45,115,121,115,32,118,48,46,49,46,55,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,65,108,101,120,32,67,114,105,99,104,116,111,110,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,35,32,76,105,99,101,110,115,101,32,102,111,114,32,109,105,110,105,122,46,99,32,105,110,32,109,105,110,105,122,45,115,121,115,10,10,32,32,84,104,105,115,32,105,115,32,102,114,101,101,32,97,110,100,32,117,110,101,110,99,117,109,98,101,114,101,100,32,115,111,102,116,119,97,114,101,32,114,101,108,101,97,115,101,100,32,105,110,116,111,32,116,104,101,32,112,117,98,108,105,99,32,100,111,109,97,105,110,46,10,32,32,65,110,121,111,110,101,32,105,115,32,102,114,101,101,32,116,111,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,112,117,98,108,105,115,104,44,32,117,115,101,44,32,99,111,109,112,105,108,101,44,32,115,101,108,108,44,32,111,114,10,32,32,100,105,115,116,114,105,98,117,116,101,32,116,104,105,115,32,115,111,102,116,119,97,114,101,44,32,101,105,116,104,101,114,32,105,110,32,115,111,117,114,99,101,32,99,111,100,101,32,102,111,114,109,32,111,114,32,97,115,32,97,32,99,111,109,112,105,108,101,100,10,32,32,98,105,110,97,114,121,44,32,102,111,114,32,97,110,121,32,112,117,114,112,111,115,101,44,32,99,111,109,109,101,114,99,105,97,108,32,111,114,32,110,111,110,45,99,111,109,109,101,114,99,105,97,108,44,32,97,110,100,32,98,121,32,97,110,121,10,32,32,109,101,97,110,115,46,10,32,32,73,110,32,106,117,114,105,115,100,105,99,116,105,111,110,115,32,116,104,97,116,32,114,101,99,111,103,110,105,122,101,32,99,111,112,121,114,105,103,104,116,32,108,97,119,115,44,32,116,104,101,32,97,117,116,104,111,114,32,111,114,32,97,117,116,104,111,114,115,10,32,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,100,101,100,105,99,97,116,101,32,97,110,121,32,97,110,100,32,97,108,108,32,99,111,112,121,114,105,103,104,116,32,105,110,116,101,114,101,115,116,32,105,110,32,116,104,101,10,32,32,115,111,102,116,119,97,114,101,32,116,111,32,116,104,101,32,112,117,98,108,105,99,32,100,111,109,97,105,110,46,32,87,101,32,109,97,107,101,32,116,104,105,115,32,100,101,100,105,99,97,116,105,111,110,32,102,111,114,32,116,104,101,32,98,101,110,101,102,105,116,10,32,32,111,102,32,116,104,101,32,112,117,98,108,105,99,32,97,116,32,108,97,114,103,101,32,97,110,100,32,116,111,32,116,104,101,32,100,101,116,114,105,109,101,110,116,32,111,102,32,111,117,114,32,104,101,105,114,115,32,97,110,100,10,32,32,115,117,99,99,101,115,115,111,114,115,46,32,87,101,32,105,110,116,101,110,100,32,116,104,105,115,32,100,101,100,105,99,97,116,105,111,110,32,116,111,32,98,101,32,97,110,32,111,118,101,114,116,32,97,99,116,32,111,102,10,32,32,114,101,108,105,110,113,117,105,115,104,109,101,110,116,32,105,110,32,112,101,114,112,101,116,117,105,116,121,32,111,102,32,97,108,108,32,112,114,101,115,101,110,116,32,97,110,100,32,102,117,116,117,114,101,32,114,105,103,104,116,115,32,116,111,32,116,104,105,115,10,32,32,115,111,102,116,119,97,114,101,32,117,110,100,101,114,32,99,111,112,121,114,105,103,104,116,32,108,97,119,46,10,32,32,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,10,32,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,10,32,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,10,32,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,10,32,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,10,32,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,10,32,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,32,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,112,108,101,97,115,101,32,114,101,102,101,114,32,116,111,32,60,104,116,116,112,58,47,47,117,110,108,105,99,101,110,115,101,46,111,114,103,47,62,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,116,105,109,101,32,118,48,46,49,46,51,52,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,119,97,108,107,100,105,114,32,118,48,46,49,46,53,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,65,110,100,114,101,119,32,71,97,108,108,97,110,116,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,10,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,10,105,110,32,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,10,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,10,99,111,112,105,101,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,10,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,10,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,10,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,10,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+174272);
/* memory initializer */ allocate([32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,10,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,10,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,114,97,110,100,32,118,48,46,51,46,49,52,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,117,116,102,56,45,114,97,110,103,101,115,32,118,48,46,49,46,51,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,65,110,100,114,101,119,32,71,97,108,108,97,110,116,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,10,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,10,105,110,32,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,10,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,10,99,111,112,105,101,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,10,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,10,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,10,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,10,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,10,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,10,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,97,110,115,105,95,116,101,114,109,32,118,48,46,55,46,50,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,66,101,110,106,97,109,105,110,32,83,97,103,111,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,10,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,10,105,110,32,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,10,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,10,99,111,112,105,101,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,10,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,10,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,10,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,10,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,10,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,10,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,102,108,97,116,101,50,32,118,48,46,50,46,49,51,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,65,108,101,120,32,67,114,105,99,104,116,111,110,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,99,108,97,112,32,118,50,46,49,46,50,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,45,50,48,49,54,32,75,101,118,105,110,32,66,46,32,75,110,97,112,112,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,10,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,10,105,110,32,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,10,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,10,99,111,112,105,101,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,10,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,10,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,10,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,10,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,10,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,10,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,105,110,99,108,117,100,101,100,105,114,32,118,48,46,50,46,49,44,32,105,110,99,108,117,100,101,100,105,114,95,99,111,100,101,103,101,110,32,118,48,46,50,46,49,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,54,44,32,84,105,108,108,32,72,195,182,112,112,110,101,114,10,65,108,108,32,114,105,103,104,116,115,32,114,101,115,101,114,118,101,100,46,10,10,82,101,100,105,115,116,114,105,98,117,116,105,111,110,32,97,110,100,32,117,115,101,32,105,110,32,115,111,117,114,99,101,32,97,110,100,32,98,105,110,97,114,121,32,102,111,114,109,115,44,32,119,105,116,104,32,111,114,32,119,105,116,104,111,117,116,10,109,111,100,105,102,105,99,97,116,105,111,110,44,32,97,114,101,32,112,101,114,109,105,116,116,101,100,32,112,114,111,118,105,100,101,100,32,116,104,97,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,32,97,114,101,32,109,101,116,58,10,10,42,32,82,101,100,105,115,116,114,105,98,117,116,105,111,110,115,32,111,102,32,115,111,117,114,99,101,32,99,111,100,101,32,109,117,115,116,32,114,101,116,97,105,110,32,116,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,44,32,116,104,105,115,10,32,32,108,105,115,116,32,111,102,32,99,111,110,100,105,116,105,111,110,115,32,97,110,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,100,105,115,99,108,97,105,109,101,114,46,10,10,42,32,82,101,100,105,115,116,114,105,98,117,116,105,111,110,115,32,105,110,32,98,105,110,97,114,121,32,102,111,114,109,32,109,117,115,116,32,114,101,112,114,111,100,117,99,101,32,116,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,44,10,32,32,116,104,105,115,32,108,105,115,116,32,111,102,32,99,111,110,100,105,116,105,111,110,115,32,97,110,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,100,105,115,99,108,97,105,109,101,114,32,105,110,32,116,104,101,32,100,111,99,117,109,101,110,116,97,116,105,111,110,10,32,32,97,110,100,47,111,114,32,111,116,104,101,114,32,109,97,116,101,114,105,97,108,115,32,112,114,111,118,105,100,101,100,32,119,105,116,104,32,116,104,101,32,100,105,115,116,114,105,98,117,116,105,111,110,46,10,10,42,32,78,101,105,116,104,101,114,32,116,104,101,32,110,97,109,101,32,111,102,32,105,110,99,108,117,100,101,100,105,114,32,110,111,114,32,116,104,101,32,110,97,109,101,115,32,111,102,32,105,116,115,10,32,32,99,111,110,116,114,105,98,117,116,111,114,115,32,109,97,121,32,98,101,32,117,115,101,100,32,116,111,32,101,110,100,111,114,115,101,32,111,114,32,112,114,111,109,111,116,101,32,112,114,111,100,117,99,116,115,32,100,101,114,105,118,101,100,32,102,114,111,109,10,32,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,115,112,101,99,105,102,105,99,32,112,114,105,111,114,32,119,114,105,116,116,101,110,32,112,101,114,109,105,115,115,105,111,110,46,10,10,84,72,73,83,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,66,89,32,84,72,69,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,65,78,68,32,67,79,78,84,82,73,66,85,84,79,82,83,32,34,65,83,32,73,83,34,10,65,78,68,32,65,78,89,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,32,87,65,82,82,65,78,84,73,69,83,44,32,73,78,67,76,85,68,73,78,71,44,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,44,32,84,72,69,10,73,77,80,76,73,69,68,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,32,65,78,68,32,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,82,69,10,68,73,83,67,76,65,73,77,69,68,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,32,79,82,32,67,79,78,84,82,73,66,85,84,79,82,83,32,66,69,32,76,73,65,66,76,69,10,70,79,82,32,65,78,89,32,68,73,82,69,67,84,44,32,73,78,68,73,82,69,67,84,44,32,73,78,67,73,68,69,78,84,65,76,44,32,83,80,69,67,73,65,76,44,32,69,88,69,77,80,76,65,82,89,44,32,79,82,32,67,79,78,83,69,81,85,69,78,84,73,65,76,10,68,65,77,65,71,69,83,32,40,73,78,67,76,85,68,73,78,71,44,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,44,32,80,82,79,67,85,82,69,77,69,78,84,32,79,70,32,83,85,66,83,84,73,84,85,84,69,32,71,79,79,68,83,32,79,82,10,83,69,82,86,73,67,69,83,59,32,76,79,83,83,32,79,70,32,85,83,69,44,32,68,65,84,65,44,32,79,82,32,80,82,79,70,73,84,83,59,32,79,82,32,66,85,83,73,78,69,83,83,32,73,78,84,69,82,82,85,80,84,73,79,78,41,32,72,79,87,69,86,69,82,10,67,65,85,83,69,68,32,65,78,68,32,79,78,32,65,78,89,32,84,72,69,79,82,89,32,79,70,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,67,79,78,84,82,65,67,84,44,32,83,84,82,73,67,84,32,76,73,65,66,73,76,73,84,89,44,10,79,82,32,84,79,82,84,32,40,73,78,67,76,85,68,73,78,71,32,78,69,71,76,73,71,69,78,67,69,32,79,82,32,79,84,72,69,82,87,73,83,69,41,32,65,82,73,83,73,78,71,32,73,78,32,65,78,89,32,87,65,89,32,79,85,84,32,79,70,32,84,72,69,32,85,83,69,10,79,70,32,84,72,73,83,32,83,79,70,84,87,65,82,69,44,32,69,86,69,78,32,73,70,32,65,68,86,73,83,69,68,32,79,70,32,84,72,69,32,80,79,83,83,73,66,73,76,73,84,89,32,79,70,32,83,85,67,72,32,68,65,77,65,71,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,110,117,109,32,118,48,46,49,46,51,49,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,99,104,114,111,110,111,32,118,48,46,50,46,50,48,10,10,84,104,101,32,77,73,84,32,76,105,99,101,110,115,101,32,40,77,73,84,41,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,52,44,32,75,97,110,103,32,83,101,111,110,103,104,111,111,110,46,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,10,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,10,105,110,32,116,104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,10,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,10,99,111,112,105,101,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,10,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,10,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,10,73,77,80,76,73,69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,10,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,10,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,10,79,85,84,32,79,70,32,79,82,32,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,10,84,72,69,32,83,79,70,84,87,65,82,69,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,116,114,97,118,101,114,115,101,32,118,48,46,48,46,49,50,10,10,116,114,97,118,101,114,115,101,32,105,115,32,77,73,84,32,108,105,99,101,110,115,101,100,44,32,98,117,116,32,100,111,101,115,110,39,116,32,105,110,99,108,117,100,101,32,97,32,99,111,112,121,46,10,10,35,35,32,78,111,116,105,99,101,32,102,111,114,32,98,108,105,115,116,32,118,48,46,48,46,52,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,49,53,32,84,104,101,32,82,117,115,116,32,80,114,111,106,101,99,116,32,68,101,118,101,108,111,112,101,114,115,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,10,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,32,111,102,32,116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,100,101,97,108,32,105,110,32,116,104,101,10,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116,10,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,10,116,104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,10,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,10,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97,108,32,112,111,114,116,105,111,110,115,10,111,102,32,116,104,101,32,83,111,102,116,119,97,114,101,46,10,10,84,72,69,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84,89,32,79,70,10,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+184512);
/* memory initializer */ allocate([32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,10,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,10,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79,32,69,86,69,78,84,10,83,72,65,76,76,32,84,72,69,32,65,85,84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72,79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,10,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,10,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,32,79,82,10,73,78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72,69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83,69,32,79,82,32,79,84,72,69,82,10,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,83,79,70,84,87,65,82,69,46,10,48,46,51,46,48,105,108,99,84,105,108,108,32,72,195,182,112,112,110,101,114,32,60,116,105,108,108,64,104,111,101,112,112,110,101,114,46,119,115,62,65,32,99,111,110,118,101,114,116,101,114,32,97,110,100,32,115,116,97,116,105,115,116,105,99,115,32,117,116,105,108,105,116,121,32,102,111,114,32,73,82,67,32,108,111,103,32,102,105,108,101,115,116,105,109,101,84,105,109,101,115,116,97,109,112,32,111,102,102,115,101,116,32,111,102,32,105,110,112,117,116,32,101,118,101,110,116,115,44,32,105,110,32,115,101,99,111,110,100,115,116,105,109,101,95,105,110,116,116,105,109,101,95,111,117,116,84,105,109,101,115,116,97,109,112,32,111,102,102,115,101,116,32,102,111,114,32,111,117,116,112,117,116,32,101,118,101,110,116,115,44,32,105,110,32,115,101,99,111,110,100,115,100,97,116,101,79,118,101,114,114,105,100,101,32,116,104,101,32,100,97,116,101,32,102,111,114,32,116,104,105,115,32,108,111,103,44,32,73,83,79,32,56,54,48,49,44,32,89,89,89,89,45,77,77,45,68,68,100,105,110,102,101,114,95,100,97,116,101,84,114,121,32,116,111,32,117,115,101,32,116,104,101,32,102,105,108,101,110,97,109,101,32,97,115,32,100,97,116,101,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,108,111,103,105,110,102,101,114,45,100,97,116,101,99,104,97,110,110,101,108,83,101,116,32,97,32,99,104,97,110,110,101,108,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,108,111,103,99,102,111,114,109,97,116,83,101,116,32,116,104,101,32,105,110,112,117,116,32,97,110,100,32,111,117,116,112,117,116,32,102,111,114,109,97,116,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,108,111,103,102,105,110,112,117,116,95,102,111,114,109,97,116,83,101,116,32,116,104,101,32,105,110,112,117,116,32,102,111,114,109,97,116,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,108,111,103,105,110,102,111,117,116,112,117,116,95,102,111,114,109,97,116,83,101,116,32,116,104,101,32,111,117,116,112,117,116,32,102,111,114,109,97,116,32,102,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,108,111,103,111,117,116,102,105,110,112,117,116,95,102,105,108,101,115,83,112,101,99,105,102,121,32,97,110,32,105,110,112,117,116,32,102,105,108,101,44,32,105,110,115,116,101,97,100,32,111,102,32,115,116,100,105,110,105,110,112,117,116,105,111,117,116,112,117,116,95,102,105,108,101,83,112,101,99,105,102,121,32,97,110,32,111,117,116,112,117,116,32,102,105,108,101,44,32,105,110,115,116,101,97,100,32,111,102,32,115,116,100,111,117,116,111,117,116,112,117,116,111,110,111,116,105,99,101,80,114,105,110,116,32,97,108,108,32,116,104,101,32,110,111,116,105,99,101,115,47,108,105,99,101,110,115,101,115,112,97,114,115,101,80,97,114,115,101,32,116,104,101,32,105,110,112,117,116,44,32,99,104,101,99,107,105,110,103,32,116,104,101,32,102,111,114,109,97,116,99,111,110,118,101,114,116,67,111,110,118,101,114,116,32,102,114,111,109,32,97,32,115,111,117,114,99,101,32,116,111,32,97,32,116,97,114,103,101,116,32,102,111,114,109,97,116,115,117,98,106,101,99,116,111,112,101,114,97,116,111,114,105,102,110,105,99,107,116,121,112,101,116,101,120,116,111,112,95,110,111,116,110,111,116,111,112,95,101,120,97,99,116,108,121,101,120,97,99,116,108,121,111,112,95,99,111,110,116,97,105,110,115,99,111,110,116,97,105,110,115,111,112,95,103,114,101,97,116,101,114,103,114,101,97,116,101,114,111,112,95,108,101,115,115,108,101,115,115,111,112,95,109,97,116,99,104,101,115,109,97,116,99,104,101,115,111,112,95,101,113,117,97,108,115,116,97,116,115,65,110,97,108,121,115,101,32,116,104,101,32,97,99,116,105,118,105,116,121,32,111,102,32,117,115,101,114,115,32,98,121,32,99,101,114,116,97,105,110,32,109,101,116,114,105,99,115,115,111,114,116,83,111,114,116,115,32,97,32,108,111,103,32,98,121,32,116,105,109,101,100,101,100,117,112,82,101,109,111,118,101,115,32,100,117,112,108,105,99,97,116,101,32,108,111,103,32,101,110,116,114,105,101,115,32,105,110,32,99,108,111,115,101,32,112,114,111,120,105,109,105,116,121,109,101,114,103,101,77,101,114,103,101,115,32,116,104,101,32,105,110,112,117,116,32,108,111,103,115,46,32,84,104,105,115,32,104,97,115,32,116,111,32,107,101,101,112,32,101,118,101,114,121,116,104,105,110,103,32,105,110,32,109,101,109,111,114,121,78,111,32,99,111,109,109,97,110,100,32,115,112,101,99,105,102,105,101,100,96,78,97,105,118,101,68,97,116,101,84,105,109,101,32,43,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,118,101,114,115,105,111,110,109,97,115,116,101,114,95,104,97,115,104,58,32,123,125,10,102,114,101,113,115,108,105,110,101,115,97,108,112,104,97,95,108,105,110,101,115,119,111,114,100,115,44,10,119,101,101,107,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,99,108,105,47,115,114,99,47,108,105,98,46,114,115,85,110,105,109,112,108,101,109,101,110,116,101,100,32,115,117,98,99,111,109,109,97,110,100,32,96,96,44,32,116,104,105,115,32,105,115,32,97,32,98,117,103,34,96,78,97,105,118,101,68,97,116,101,84,105,109,101,32,45,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,112,109,97,109,80,77,65,77,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,104,114,111,110,111,45,48,46,50,46,50,48,47,115,114,99,47,102,111,114,109,97,116,47,109,111,100,46,114,115,89,111,117,32,100,105,100,110,39,116,32,115,112,101,99,105,102,121,32,116,104,101,32,111,117,116,112,117,116,32,102,111,114,109,97,116,101,110,101,114,103,121,109,101,99,104,101,109,119,101,101,99,104,97,116,119,102,111,114,109,97,116,116,101,114,32,101,114,114,111,114,102,97,105,108,101,100,32,116,111,32,119,114,105,116,101,32,119,104,111,108,101,32,98,117,102,102,101,114,84,104,101,32,102,111,114,109,97,116,32,96,96,32,105,115,32,117,110,107,110,111,119,110,32,116,111,32,109,101,10,102,97,105,108,101,100,32,116,111,32,119,114,105,116,101,32,116,104,101,32,98,117,102,102,101,114,101,100,32,100,97,116,97,9,69,114,114,111,114,58,32,89,111,117,32,100,105,100,110,39,116,32,115,112,101,99,105,102,121,32,116,104,101,32,105,110,112,117,116,32,102,111,114,109,97,116,102,97,105,108,101,100,32,116,111,32,102,105,108,108,32,119,104,111,108,101,32,98,117,102,102,101,114,115,116,114,101,97,109,32,100,105,100,32,110,111,116,32,99,111,110,116,97,105,110,32,118,97,108,105,100,32,85,84,70,45,56,99,97,108,108,101,100,32,96,82,101,115,117,108,116,58,58,117,110,119,114,97,112,40,41,96,32,111,110,32,97,110,32,96,69,114,114,96,32,118,97,108,117,101,117,110,101,120,112,101,99,116,101,100,32,105,110,118,97,108,105,100,32,85,84,70,45,56,32,99,111,100,101,32,112,111,105,110,116,78,111,32,105,110,112,117,116,32,102,105,108,101,115,32,103,105,118,101,110,44,32,99,97,110,39,116,32,105,110,102,101,114,32,100,97,116,101,84,111,111,32,109,97,110,121,32,105,110,112,117,116,32,102,105,108,101,115,32,40,41,44,32,99,97,110,39,116,32,105,110,102,101,114,32,100,97,116,101,10,65,98,111,114,116,105,110,103,58,32,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,108,105,99,101,46,114,115,32,40,41,46,1,1,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,119,105,108,100,99,97,114,100,115,32,97,114,101,32,101,105,116,104,101,114,32,114,101,103,117,108,97,114,32,96,42,96,32,111,114,32,114,101,99,117,114,115,105,118,101,32,96,42,42,96,114,101,99,117,114,115,105,118,101,32,119,105,108,100,99,97,114,100,115,32,109,117,115,116,32,102,111,114,109,32,97,32,115,105,110,103,108,101,32,112,97,116,104,32,99,111,109,112,111,110,101,110,116,105,110,118,97,108,105,100,32,114,97,110,103,101,32,112,97,116,116,101,114,110,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,108,105,99,101,46,114,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,115,101,108,102,46,100,105,114,95,112,97,116,116,101,114,110,115,46,108,101,110,40,41,32,60,32,40,33,48,32,97,115,32,117,115,105,122,101,41,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,103,108,111,98,45,48,46,50,46,49,49,47,115,114,99,47,108,105,98,46,114,115,46,46,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,117,117,117,117,117,117,117,117,98,116,110,117,102,114,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,79,70,32,119,104,105,108,101,32,112,97,114,115,105,110,103,32,97,32,108,105,115,116,69,79,70,32,119,104,105,108,101,32,112,97,114,115,105,110,103,32,97,110,32,111,98,106,101,99,116,69,79,70,32,119,104,105,108,101,32,112,97,114,115,105,110,103,32,97,32,115,116,114,105,110,103,69,79,70,32,119,104,105,108,101,32,112,97,114,115,105,110,103,32,97,32,118,97,108,117,101,101,120,112,101,99,116,101,100,32,96,58,96,101,120,112,101,99,116,101,100,32,96,44,96,32,111,114,32,96,93,96,101,120,112,101,99,116,101,100,32,96,44,96,32,111,114,32,96,125,96,101,120,112,101,99,116,101,100,32,105,100,101,110,116,101,120,112,101,99,116,101,100,32,118,97,108,117,101,105,110,118,97,108,105,100,32,101,115,99,97,112,101,105,110,118,97,108,105,100,32,110,117,109,98,101,114,105,110,118,97,108,105,100,32,117,110,105,99,111,100,101,32,99,111,100,101,32,112,111,105,110,116,107,101,121,32,109,117,115,116,32,98,101,32,97,32,115,116,114,105,110,103,108,111,110,101,32,108,101,97,100,105,110,103,32,115,117,114,114,111,103,97,116,101,32,105,110,32,104,101,120,32,101,115,99,97,112,101,116,114,97,105,108,105,110,103,32,99,104,97,114,97,99,116,101,114,115,117,110,101,120,112,101,99,116,101,100,32,101,110,100,32,111,102,32,104,101,120,32,101,115,99,97,112,101,109,105,115,115,105,110,103,32,102,105,101,108,100,32,34,117,110,107,110,111,119,110,32,102,105,101,108,100,32,34,117,110,107,110,111,119,110,32,118,97,114,105,97,110,116,32,34,105,110,118,97,108,105,100,32,118,97,108,117,101,32,108,101,110,103,116,104,32,105,110,118,97,108,105,100,32,118,97,108,117,101,58,32,105,110,118,97,108,105,100,32,116,121,112,101,58,32,115,121,110,116,97,120,32,101,114,114,111,114,32,97,116,32,108,105,110,101,32,32,99,111,108,117,109,110,32,32,32,83,121,110,116,97,120,73,111,70,114,111,109,85,116,102,56,58,119,97,114,110,105,110,103,58,32,105,110,118,97,108,105,100,32,114,101,103,101,120,32,102,105,108,116,101,114,32,45,32,10,119,97,114,110,105,110,103,58,32,105,110,118,97,108,105,100,32,108,111,103,103,105,110,103,32,115,112,101,99,32,39,39,44,32,105,103,110,111,114,105,110,103,32,105,116,32,40,116,111,111,32,109,97,110,121,32,39,47,39,115,41,10,39,44,32,105,103,110,111,114,105,110,103,32,105,116,10,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,82,85,83,84,95,76,79,71,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,105,108,99,95,102,111,114,109,97,116,95,119,101,101,99,104,97,116,104,97,115,106,111,105,110,101,100,108,101,102,116,113,117,105,116,45,45,78,111,116,105,99,101,40,105,114,99,58,100,105,115,99,111,110,110,101,99,116,101,100,102,114,111,109,115,101,114,118,101,114,110,111,119,107,110,111,119,110,97,115,105,115,97,114,101,37,89,45,37,109,45,37,100,32,37,72,58,37,77,58,37,83,32,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,102,111,114,109,97,116,115,47,119,101,101,99,104,97,116,47,115,114,99,47,108,105,98,46,114,115,80,97,114,115,105,110,103,58,32,32,32,79,114,105,103,105,110,97,108,58,32,32,96,96,72,111,115,116,109,97,115,107,32,110,111,116,32,112,114,101,115,101,110,116,44,32,98,117,116,32,114,101,113,117,105,114,101,100,46,67,104,97,110,110,101,108,32,110,111,116,32,112,114,101,115,101,110,116,44,32,98,117,116,32,114,101,113,117,105,114,101,100,46,9,45,45,9,78,111,116,105,99,101,40,41,58,32,10,9,45,45,9,105,114,99,58,32,100,105,115,99,111,110,110,101,99,116,101,100,32,102,114,111,109,32,115,101,114,118,101,114,10,9,60,45,45,9,32,40,41,32,104,97,115,32,113,117,105,116,41,41,32,104,97,115,32,108,101,102,116,32,9,45,45,9,32,105,115,32,110,111,119,32,107,110,111,119,110,32,97,115,32,9,45,45,62,9,41,32,104,97,115,32,106,111,105,110,101,100,32,9,32,42,9,9,99,97,110,110,111,116,32,97,99,99,101,115,115,32,97,32,84,76,83,32,118,97,108,117,101,32,100,117,114,105,110,103,32,111,114,32,97,102,116,101,114,32,105,116,32,105,115,32,100,101,115,116,114,111,121,101,100,105,110,118,97,108,105,100,32,111,114,32,111,117,116,45,111,102,45,114,97,110,103,101,32,100,97,116,101,116,105,109,101,114,97,119,95,99,97,112,32,111,118,101,114,102,108,111,119,114,97,119,95,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,115,101,108,102,46,116,97,98,108,101,46,115,105,122,101,40,41,32,60,61,32,110,101,119,95,114,97,119,95,99,97,112,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,110,101,119,95,114,97,119,95,99,97,112,46,105,115,95,112,111,119,101,114,95,111,102,95,116,119,111,40,41,32,124,124,32,110,101,119,95,114,97,119,95,99,97,112,32,61,61,32,48,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,73,110,116,101,114,110,97,108,32,72,97,115,104,77,97,112,32,101,114,114,111,114,58,32,79,117,116,32,111,102,32,115,112,97,99,101,46,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,111,112,115,47,115,114,99,47,115,116,97,116,115,46,114,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,108,105,99,101,46,114,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,116,114,47,112,97,116,116,101,114,110,46,114,115,105,108,99,95,111,112,115,58,58,112,97,114,115,101,111,112,115,47,115,114,99,47,108,105,98,46,114,115,79,117,116,32,111,102,32,98,111,117,110,100,115,32,97,99,99,101,115,115,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,42,101,32,61,61,32,114,101,109,111,118,101,100,111,112,115,47,115,114,99,47,97,103,101,115,101,116,46,114,115,105,110,100,101,120,32,111,117,116,32,111,102,32,98,111,117,110,100,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,99,97,108,108,101,100,32,96,82,101,115,117,108,116,58,58,117,110,119,114,97,112,40,41,96,32,111,110,32,97,110,32,96,69,114,114,96,32,118,97,108,117,101,99,97,110,110,111,116,32,97,99,99,101,115,115,32,97,32,84,76,83,32,118,97,108,117,101,32,100,117,114,105,110,103,32,111,114,32,97,102,116,101,114,32,105,116,32,105,115,32,100,101,115,116,114,111,121,101,100,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,48,46,49,46,53,53,47,115,114,99,47,99,111,109,112,105,108,101,46,114,115,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,58,32,109,117,115,116,32,98,101,32,99,97,108,108,101,100,32,111,110,32,97,32,99,111,109,112,105,108,101,100,32,105,110,115,116,114,117,99,116,105,111,110,44,32,105,110,115,116,101,97,100,32,105,116,32,119,97,115,32,99,97,108,108,101,100,32,111,110,58,32,83,112,108,105,116,67,111,109,112,105,108,101,100,85,110,99,111,109,112,105,108,101,100,83,112,108,105,116,49,83,112,108,105,116,50,83,97,118,101,115,108,111,116,69,109,112,116,121,76,111,111,107,108,111,111,107,67,104,97,114,99,82,97,110,103,101,115,114,97,110,103,101,115,66,121,116,101,115,115,116,97,114,116,101,110,100,83,116,97,114,116,76,105,110,101,69,110,100,76,105,110,101,83,116,97,114,116,84,101,120,116,69,110,100,84,101,120,116,87,111,114,100,66,111,117,110,100,97,114,121,78,111,116,87,111,114,100,66,111,117,110,100,97,114,121,77,97,116,99,104,73,110,115,116,66,121,116,101,115,103,111,116,111,73,110,115,116,82,97,110,103,101,115,73,110,115,116,67,104,97,114,73,110,115,116,69,109,112,116,121,76,111,111,107,73,110,115,116,83,112,108,105,116,103,111,116,111,49,103,111,116,111,50,73,110,115,116,83,97,118,101,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,58,32,97,116,32,108,101,97,115,116,32,111,110,101,32,111,102,32,116,104,101,32,115,112,108,105,116,32,104,111,108,101,115,32,109,117,115,116,32,98,101,32,102,105,108,108,101,100,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,58,32,109,117,115,116,32,98,101,32,99,97,108,108,101,100,32,111,110,32,83,112,108,105,116,32,105,110,115,116,114,117,99,116,105,111,110,44,32,105,110,115,116,101,97,100,32,105,116,32,119,97,115,32,99,97,108,108,101,100,32,111,110,58,32,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,58,32,110,111,116,32,97,108,108,32,105,110,115,116,114,117,99,116,105,111,110,115,32,119,101,114,101,32,99,111,109,112,105,108,101,100,33,32,102,111,117,110,100,32,117,110,99,111,109,112,105,108,101,100,32,105,110,115,116,114,117,99,116,105,111,110,58,32,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,33,99,104,97,114,115,46,105,115,95,101,109,112,116,121,40,41,110,111,110,45,101,109,112,116,121,32,108,105,116,101,114,97,108,97,108,116,101,114,110,97,116,101,115,32,109,117,115,116,32,104,97,118,101,32,97,116,32,108,101,97,115,116,32,50,32,101,120,112,114,115,99,97,112,116,117,114,101,32,105,110,100,101,120,114,97,119,95,99,97,112,32,111,118,101,114,102,108,111,119,114,97,119,95,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,115,101,108,102,46,116,97,98,108,101,46,115,105,122,101,40,41,32,60,61,32,110,101,119,95,114,97,119,95,99,97,112,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,110,101,119,95,114,97,119,95,99,97,112,46,105,115,95,112,111,119,101,114,95,111,102,95,116,119,111,40,41,32,124,124,32,110,101,119,95,114,97,119,95,99,97,112,32,61,61,32,48,73,110,116,101,114,110,97,108,32,72,97,115,104,77,97,112,32,101,114,114,111,114,58,32,79,117,116,32,111,102,32,115,112,97,99,101,46,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,108,105,99,101,46,114,115,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,115,116,97,114,116,32,60,61,32,101,110,100,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,102,114,111,109,95,105,110,115,116,32,60,32,58,58,115,116,100,58,58,117,115,105,122,101,58,58,77,65,88,97,116,116,101,109,112,116,32,116,111,32,99,97,108,99,117,108,97,116,101,32,116,104,101,32,114,101,109,97,105,110,100,101,114,32,119,105,116,104,32,97,32,100,105,118,105,115,111,114,32,111,102,32,122,101,114,111,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,112,97,116,46,108,101,110,40,41,32,62,61,32,49,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,48,46,49,46,53,53,47,115,114,99,47,108,105,116,101,114,97,108,115,46,114,115,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,48,46,49,46,53,53,47,115,114,99,47,112,114,111,103,46,114,115,66,85,71,58,32,102,111,114,119,97,114,100,32,109,97,116,99,104,32,105,109,112,108,105,101,115,32,98,97,99,107,119,97,114,100,32,109,97,116,99,104,66,85,71,58,32,101,97,114,108,121,32,109,97,116,99,104,32,99,97,110,39,116,32,104,97,112,112,101,110,32,111,110,32,114,101,118,101,114,115,101,32,115,101,97,114,99,104,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,48,46,49,46,53,53,47,115,114,99,47,101,120,101,99,46,114,115,99,97,108,108,101,100,32,96,82,101,115,117,108,116,58,58,117,110,119,114,97,112,40,41,96,32,111,110,32,97,110,32,96,69,114,114,96,32,118,97,108,117,101,80,111,105,115,111,110,69,114,114,111,114,32,123,32,105,110,110,101,114,58,32,46,46,32,125,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,48,46,49,46,53,53,47,115,114,99,47,110,102,97,46,114,115,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,48,46,49,46,53,53,47,115,114,99,47,98,97,99,107,116,114,97,99,107,46,114,115,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,48,46,49,46,53,53,47,115,114,99,47,100,102,97,46,114,115,115,101,116,115,32,109,117,115,116,32,99,111,110,116,97,105,110,32,50,32,111,114,32,109,111,114,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,99,111,109,112,105,108,101,100,32,112,114,111,103,114,97,109,32,116,111,111,32,98,105,103,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,48,46,49,46,53,53,47,115,114,99,47,114,101,46,114,115,67,111,109,112,105,108,101,100,32,114,101,103,101,120,32,101,120,99,101,101,100,115,32,115,105,122,101,32,108,105,109,105,116,32,111,102,32,32,98,121,116,101,115,46,83,101,116,115,32,109,117,115,116,32,99,111,110,116,97,105,110,32,50,32,111,114,32,109,111,114,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115,46,73,110,118,97,108,105,100,83,101,116,95,95,78,111,110,101,120,104,97,117,115,116,105,118,101,83,121,110,116,97,120,67,111,109,112,105,108,101,100,84,111,111,66,105,103,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,117,116,102,56,45,114,97,110,103,101,115,45,48,46,49,46,51,47,115,114,99,47,108,105,98,46,114,115,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,58,32,105,110,118,97,108,105,100,32,101,110,99,111,100,101,100,32,108,101,110,103,116,104,58,32,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,96,40,108,101,102,116,32,61,61,32,114,105,103,104,116,41,96,32,40,108,101,102,116,58,32,96,96,44,32,114,105,103,104,116,58,32,96,96,41,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,58,32,105,110,118,97,108,105,100,32,85,84,70,45,56,32,98,121,116,101,32,115,101,113,117,101,110,99,101,32,115,105,122,101,114,101,103,101,120,32,108,101,110,103,116,104,32,111,118,101,114,102,108,111,119,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,63,80,60,63,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,115,121,110,116,97,120,45,48,46,50,46,53,47,115,114,99,47,112,97,114,115,101,114,46,114,115,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,114,101,103,101,120,45,115,121,110,116,97,120,45,48,46,50,46,53,47,115,114,99,47,108,105,98,46,114,115,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,58,93,97,108,110,117,109,97,108,112,104,97,97,115,99,105,105,98,108,97,110,107,99,110,116,114,108,100,105,103,105,116,103,114,97,112,104,108,111,119,101,114,112,114,105,110,116,112,117,110,99,116,115,112,97,99,101,117,112,112,101,114,119,111,114,100,120,100,105,103,105,116,111,99,116,97,108,32,115,116,114,105,110,103,118,97,108,105,100,32,111,99,116,97,108,32,110,117,109,98,101,114,85,110,105,99,111,100,101,32,115,99,97,108,97,114,32,118,97,108,117,101,65,104,111,109,65,108,112,104,97,98,101,116,105,99,65,110,97,116,111,108,105,97,110,95,72,105,101,114,111,103,108,121,112,104,115,65,114,97,98,105,99,65,114,109,101,110,105,97,110,65,118,101,115,116,97,110,66,97,108,105,110,101,115,101,66,97,109,117,109,66,97,115,115,97,95,86,97,104,66,97,116,97,107,66,101,110,103,97,108,105,66,111,112,111,109,111,102,111,66,114,97,104,109,105,66,114,97,105,108,108,101,66,117,103,105,110,101,115,101,66,117,104,105,100,67,67,97,110,97,100,105,97,110,95,65,98,111,114,105,103,105,110,97,108,67,97,114,105,97,110,67,97,117,99,97,115,105,97,110,95,65,108,98,97,110,105,97,110,67,99,67,102,67,104,97,107,109,97,67,104,97,109,67,104,101,114,111,107,101,101,67,110,67,111,67,111,109,109,111,110,67,111,112,116,105,99,67,117,110,101,105,102,111,114,109,67,121,112,114,105,111,116,67,121,114,105,108,108,105,99,68,101,102,97,117,108,116,95,73,103,110,111,114,97,98,108,101,95,67,111,100,101,95,80,111,105,110,116,68,101,115,101,114,101,116,68,101,118,97,110,97,103,97,114,105,68,117,112,108,111,121,97,110,69,103,121,112,116,105,97,110,95,72,105,101,114,111,103,108,121,112,104,115,69,108,98,97,115,97,110,69,116,104,105,111,112,105,99,71,101,111,114,103,105,97,110,71,108,97,103,111,108,105,116,105,99,71,111,116,104,105,99,71,114,97,110,116,104,97,71,114,97,112,104,101,109,101,95,69,120,116,101,110,100,71,114,101,101,107,71,117,106,97,114,97,116,105,71,117,114,109,117,107,104,105,72,97,110,72,97,110,103,117,108,72,97,110,117,110,111,111,72,97,116,114,97,110,72,101,98,114,101,119,72,105,114,97,103,97,110,97,73,109,112,101,114,105,97,108,95,65,114,97,109,97,105,99,73,110,104,101,114,105,116,101,100,73,110,115,99,114,105,112,116,105,111,110,97,108,95,80,97,104,108,97,118,105,73,110,115,99,114,105,112,116,105,111,110,97,108,95,80,97,114,116,104,105,97,110,74,97,118,97,110,101,115,101,74,111,105,110,95,67,111,110,116,114,111,108,75,97,105,116,104,105,75,97,110,110,97,100,97,75,97,116,97,107,97,110,97,75,97,121,97,104,95,76,105,75,104,97,114,111,115,104,116,104,105,75,104,109,101,114,75,104,111,106,107,105,75,104,117,100,97,119,97,100,105,76,76,67,76,97,111,76,97,116,105,110,76,101,112,99,104,97,76,105,109,98,117,76,105,110,101,97,114,95,65,76,105,110,101,97,114,95,66,76,105,115,117,76,108,76,109,76,111,76,111,119,101,114,99,97,115,101,76,116,76,117,76,121,99,105,97,110,76,121,100,105,97,110,77,77,97,104,97,106,97,110,105,77,97,108,97,121,97,108,97,109,77,97,110,100,97,105,99,77,97,110,105,99,104,97,101,97,110,77,99,77,101,77,101,101,116,101,105,95,77,97,121,101,107,77,101,110,100,101,95,75,105,107,97,107,117,105,77,101,114,111,105,116,105,99,95,67,117,114,115,105,118,101,77,101,114,111,105,116,105,99,95,72,105,101,114,111,103,108,121,112,104,115,77,105,97,111,77,110,77,111,100,105,77,111,110,103,111,108,105,97,110,77,114,111,77,117,108,116,97,110,105,77,121,97,110,109,97,114,78,78,97,98,97,116,97,101,97,110,78,100,78,101,119,95,84,97,105,95,76,117,101,78,107,111,78,108,78,111,78,111,110,99,104,97,114,97,99,116,101,114,95,67,111,100,101,95,80,111,105,110,116,79,103,104,97,109,79,108,95,67,104,105,107,105,79,108,100,95,72,117,110,103,97,114,105,97,110,79,108,100,95,73,116,97,108,105,99,79,108,100,95,78,111,114,116,104,95,65,114,97,98,105,97,110,79,108,100,95,80,101,114,109,105,99,79,108,100,95,80,101,114,115,105,97,110,79,108,100,95,83,111,117,116,104,95,65,114,97,98,105,97,110,79,108,100,95,84,117,114,107,105,99,79,114,105,121,97,79,115,109,97,110,121,97,80,80,97,104,97,119,104,95,72,109,111,110,103,80,97,108,109,121,114,101,110,101,80,97,117,95,67,105,110,95,72,97,117,80,99,80,100,80,101,80,102,80,104,97,103,115,95,80,97,80,104,111,101,110,105,99,105,97,110,80,105,80,111,80,115,80,115,97,108,116,101,114,95,80,97,104,108,97,118,105,82,101,106,97,110,103,82,117,110,105,99,83,83,97,109,97,114,105,116,97,110,83,97,117,114,97,115,104,116,114,97,83,99,83,104,97,114,97,100,97,83,104,97,118,105,97,110,83,105,100,100,104,97,109,83,105,103,110,87,114,105,116,105,110,103,83,105,110,104,97,108,97,83,107,83,109,83,111,83,111,114,97,95,83,111,109,112,101,110,103,83,117,110,100,97,110,101,115,101,83,121,108,111,116,105,95,78,97,103,114,105,83,121,114,105,97,99,84,97,103,97,108,111,103,84,97,103,98,97,110,119,97,84,97,105,95,76,101,84,97,105,95,84,104,97,109,84,97,105,95,86,105,101,116,84,97,107,114,105,84,97,109,105,108,84,101,108,117,103,117,84,104,97,97,110,97,84,104,97,105,84,105,98,101,116,97,110,84,105,102,105,110,97,103,104,84,105,114,104,117,116,97,85,103,97,114,105,116,105,99,85,112,112,101,114,99,97,115,101,86,97,105,87,97,114,97,110,103,95,67,105,116,105,87,104,105,116,101,95,83,112,97,99,101,88,73,68,95,67,111,110,116,105,110,117,101,88,73,68,95,83,116,97,114,116,89,105,90,90,108,90,112,90,115,124,44,32,125,44,125,42,41,40,63,105,58,40,63,80,60,40,63,58,45,91,92,66,92,98,36,94,40,63,109,58,36,41,40,63,109,58,94,41,46,40,63,115,58,46,41,115,116,97,99,107,32,101,120,104,97,117,115,116,101,100,44,32,116,111,111,32,109,117,99,104,32,110,101,115,116,105,110,103,117,110,114,101,99,111,103,110,105,122,101,100,32,85,110,105,99,111,100,101,32,99,108,97,115,115,32,110,97,109,101,117,110,114,101,99,111,103,110,105,122,101,100,32,102,108,97,103,117,110,114,101,99,111,103,110,105,122,101,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,117,110,111,112,101,110,101,100,32,112,97,114,101,110,116,104,101,115,105,115,117,110,101,120,112,101,99,116,101,100,32,69,79,70,32,105,110,32,104,101,120,32,108,105,116,101,114,97,108,117,110,101,120,112,101,99,116,101,100,32,69,79,70,32,105,110,32,102,108,97,103,115,117,110,101,120,112,101,99,116,101,100,32,69,79,70,32,105,110,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,117,110,101,120,112,101,99,116,101,100,32,69,79,70,32,105,110,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,117,110,99,108,111,115,101,100,32,85,110,105,99,111,100,101,32,99,108,97,115,115,32,108,105,116,101,114,97,108,117,110,99,108,111,115,101,100,32,99,111,117,110,116,101,100,32,114,101,112,101,116,105,116,105,111,110,32,111,112,101,114,97,116,111,114,117,110,99,108,111,115,101,100,32,112,97,114,101,110,116,104,101,115,105,115,117,110,99,108,111,115,101,100,32,104,101,120,97,100,101,99,105,109,97,108,32,108,105,116,101,114,97,108,117,110,99,108,111,115,101,100,32,99,97,112,116,117,114,101,32,103,114,111,117,112,32,110,97,109,101,101,120,112,114,101,115,115,105,111,110,32,99,97,110,110,111,116,32,98,101,32,114,101,112,101,97,116,101,100,114,101,112,101,116,105,116,105,111,110,32,111,112,101,114,97,116,111,114,32,109,105,115,115,105,110,103,32,101,120,112,114,101,115,115,105,111,110,109,105,115,115,105,110,103,32,99,111,117,110,116,32,105,110,32,114,101,112,101,116,105,116,105,111,110,32,111,112,101,114,97,116,111,114,105,110,118,97,108,105,100,32,85,110,105,99,111,100,101,32,115,99,97,108,97,114,32,118,97,108,117,101,105,110,118,97,108,105,100,32,99,111,117,110,116,101,100,32,114,101,112,101,116,105,116,105,111,110,32,114,97,110,103,101,105,110,118,97,108,105,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,105,110,32,99,108,97,115,115,105,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,114,97,110,103,101,105,110,118,97,108,105,100,32,99,97,112,116,117,114,101,32,110,97,109,101,105,110,118,97,108,105,100,32,98,97,115,101], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+194752);
/* memory initializer */ allocate([32,49,54,32,110,117,109,98,101,114,105,110,118,97,108,105,100,32,98,97,115,101,32,49,48,32,110,117,109,98,101,114,101,109,112,116,121,32,103,114,111,117,112,32,40,101,46,103,46,44,32,39,40,41,39,41,102,108,97,103,32,110,101,103,97,116,105,111,110,32,119,105,116,104,111,117,116,32,97,110,121,32,102,108,97,103,115,101,109,112,116,121,32,99,97,112,116,117,114,101,32,110,97,109,101,101,109,112,116,121,32,97,108,116,101,114,110,97,116,101,100,117,112,108,105,99,97,116,101,32,99,97,112,116,117,114,101,32,110,97,109,101,100,111,117,98,108,101,32,102,108,97,103,32,110,101,103,97,116,105,111,110,69,114,114,111,114,32,112,97,114,115,105,110,103,32,114,101,103,101,120,32,110,101,97,114,32,39,39,32,97,116,32,99,104,97,114,97,99,116,101,114,32,111,102,102,115,101,116,32,58,32,69,114,114,111,114,32,112,97,114,115,105,110,103,32,114,101,103,101,120,58,32,85,110,114,101,99,111,103,110,105,122,101,100,32,85,110,105,99,111,100,101,32,99,108,97,115,115,32,110,97,109,101,58,32,39,39,46,85,110,114,101,99,111,103,110,105,122,101,100,32,102,108,97,103,58,32,39,39,46,32,40,65,108,108,111,119,101,100,32,102,108,97,103,115,58,32,105,44,32,115,44,32,109,44,32,85,44,32,120,46,41,85,110,114,101,99,111,103,110,105,122,101,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,58,32,39,92,67,97,112,116,117,114,101,32,110,97,109,101,32,103,114,111,117,112,32,102,111,114,32,39,39,32,105,115,32,110,111,116,32,99,108,111,115,101,100,46,32,40,77,105,115,115,105,110,103,32,97,32,39,62,39,46,41,73,110,118,97,108,105,100,32,97,112,112,108,105,99,97,116,105,111,110,32,111,102,32,114,101,112,116,105,116,105,111,110,32,111,112,101,114,97,116,111,114,32,116,111,58,32,39,78,117,109,98,101,114,32,100,111,101,115,32,110,111,116,32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,97,32,85,110,105,99,111,100,101,32,115,99,97,108,97,114,32,118,97,108,117,101,58,32,39,73,110,118,97,108,105,100,32,99,111,117,110,116,101,100,32,114,101,112,101,116,105,116,105,111,110,32,114,97,110,103,101,58,32,123,125,46,32,67,111,117,110,116,101,100,32,114,101,112,101,116,105,116,105,111,110,32,114,97,110,103,101,115,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,116,104,101,32,109,105,110,105,109,117,109,44,32,98,117,116,32,32,62,32,73,110,118,97,108,105,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,105,110,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,58,32,39,73,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,114,97,110,103,101,32,39,39,46,32,67,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,114,97,110,103,101,115,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,116,104,101,32,115,109,97,108,108,101,114,32,99,104,97,114,97,99,116,101,114,44,32,98,117,116,32,73,110,118,97,108,105,100,32,99,97,112,116,117,114,101,32,110,97,109,101,58,32,39,39,46,32,67,97,112,116,117,114,101,32,110,97,109,101,115,32,109,117,115,116,32,99,111,110,115,105,115,116,32,111,102,32,91,95,97,45,122,65,45,90,48,45,57,93,32,97,110,100,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,32,116,111,32,115,116,97,114,116,32,119,105,116,104,32,119,105,116,104,32,97,32,110,117,109,98,101,114,46,78,111,116,32,97,32,118,97,108,105,100,32,98,97,115,101,32,49,54,32,110,117,109,98,101,114,58,32,39,78,111,116,32,97,32,118,97,108,105,100,32,98,97,115,101,32,49,48,32,110,117,109,98,101,114,58,32,39,67,97,112,116,117,114,101,32,110,97,109,101,32,39,39,32,105,115,32,117,115,101,100,32,109,111,114,101,32,116,104,97,110,32,111,110,99,101,46,69,120,104,97,117,115,116,101,100,32,115,112,97,99,101,32,114,101,113,117,105,114,101,100,32,116,111,32,112,97,114,115,101,32,114,101,103,101,120,32,119,105,116,104,32,116,111,111,32,109,117,99,104,32,110,101,115,116,105,110,103,46,85,110,111,112,101,110,101,100,32,112,97,114,101,110,116,104,101,115,105,115,46,85,110,101,120,112,101,99,116,101,100,32,101,110,100,32,111,102,32,116,119,111,32,100,105,103,105,116,32,104,101,120,97,100,101,99,105,109,97,108,32,108,105,116,101,114,97,108,46,73,110,108,105,110,101,32,102,108,97,103,32,115,101,116,116,105,110,103,115,32,119,97,115,32,110,111,116,32,99,108,111,115,101,100,32,98,101,102,111,114,101,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,114,101,103,101,120,32,40,109,105,115,115,105,110,103,32,97,32,39,41,39,32,111,114,32,39,58,39,41,46,83,116,97,114,116,101,100,32,97,110,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,32,116,104,97,116,32,100,105,100,110,39,116,32,102,105,110,105,115,104,32,98,101,102,111,114,101,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,114,101,103,101,120,46,67,104,97,114,97,99,116,101,114,32,99,108,97,115,115,32,119,97,115,32,110,111,116,32,99,108,111,115,101,100,32,98,101,102,111,114,101,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,114,101,103,101,120,32,40,109,105,115,115,105,110,103,32,97,32,39,93,39,41,46,85,110,99,108,111,115,101,100,32,85,110,105,99,111,100,101,32,108,105,116,101,114,97,108,32,40,109,105,115,115,105,110,103,32,97,32,39,125,39,41,46,85,110,99,108,111,115,101,100,32,99,111,117,110,116,101,100,32,114,101,112,101,116,105,116,105,111,110,32,40,109,105,115,115,105,110,103,32,97,32,39,125,39,41,46,85,110,99,108,111,115,101,100,32,112,97,114,101,110,116,104,101,115,105,115,46,85,110,99,108,111,115,101,100,32,104,101,120,97,100,101,99,105,109,97,108,32,108,105,116,101,114,97,108,32,40,109,105,115,115,105,110,103,32,97,32,39,125,39,41,46,77,105,115,115,105,110,103,32,101,120,112,114,101,115,115,105,111,110,32,102,111,114,32,114,101,112,116,105,116,105,111,110,32,111,112,101,114,97,116,111,114,46,77,105,115,115,105,110,103,32,109,97,120,105,109,117,109,32,105,110,32,99,111,117,110,116,101,100,32,114,101,112,116,105,116,105,111,110,32,111,112,101,114,97,116,111,114,46,69,109,112,116,121,32,114,101,103,101,120,32,103,114,111,117,112,115,32,40,101,46,103,46,44,32,39,40,41,39,41,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,46,70,108,97,103,32,110,101,103,97,116,105,111,110,32,114,101,113,117,105,114,101,115,32,115,101,116,116,105,110,103,32,97,116,32,108,101,97,115,116,32,111,110,101,32,102,108,97,103,46,67,97,112,116,117,114,101,32,110,97,109,101,115,32,99,97,110,110,111,116,32,98,101,32,101,109,112,116,121,46,65,108,116,101,114,110,97,116,105,111,110,115,32,99,97,110,110,111,116,32,98,101,32,101,109,112,116,121,46,79,110,108,121,32,111,110,101,32,110,101,103,97,116,105,111,110,32,115,121,109,98,111,108,32,105,115,32,97,108,108,111,119,101,100,32,105,110,32,102,108,97,103,115,46,99,104,97,114,115,99,97,115,101,105,105,110,97,109,101,78,111,110,101,83,111,109,101,69,109,112,116,121,65,110,121,67,104,97,114,65,110,121,67,104,97,114,78,111,78,76,83,116,97,114,116,76,105,110,101,69,110,100,76,105,110,101,83,116,97,114,116,84,101,120,116,69,110,100,84,101,120,116,87,111,114,100,66,111,117,110,100,97,114,121,78,111,116,87,111,114,100,66,111,117,110,100,97,114,121,76,105,116,101,114,97,108,67,108,97,115,115,71,114,111,117,112,101,82,101,112,101,97,116,114,103,114,101,101,100,121,67,111,110,99,97,116,65,108,116,101,114,110,97,116,101,90,101,114,111,79,114,79,110,101,90,101,114,111,79,114,77,111,114,101,79,110,101,79,114,77,111,114,101,82,97,110,103,101,109,105,110,109,97,120,67,104,97,114,67,108,97,115,115,114,97,110,103,101,115,67,108,97,115,115,82,97,110,103,101,115,116,97,114,116,101,110,100,69,114,114,111,114,112,111,115,115,117,114,114,111,117,110,100,107,105,110,100,68,111,117,98,108,101,70,108,97,103,78,101,103,97,116,105,111,110,69,109,112,116,121,65,108,116,101,114,110,97,116,101,69,109,112,116,121,67,97,112,116,117,114,101,78,97,109,101,69,109,112,116,121,70,108,97,103,78,101,103,97,116,105,111,110,69,109,112,116,121,71,114,111,117,112,77,105,115,115,105,110,103,66,97,115,101,49,48,82,101,112,101,97,116,101,114,69,120,112,101,99,116,115,69,120,112,114,85,110,99,108,111,115,101,100,72,101,120,85,110,99,108,111,115,101,100,80,97,114,101,110,85,110,99,108,111,115,101,100,82,101,112,101,97,116,85,110,99,108,111,115,101,100,85,110,105,99,111,100,101,78,97,109,101,85,110,101,120,112,101,99,116,101,100,67,108,97,115,115,69,111,102,85,110,101,120,112,101,99,116,101,100,69,115,99,97,112,101,69,111,102,85,110,101,120,112,101,99,116,101,100,70,108,97,103,69,111,102,85,110,101,120,112,101,99,116,101,100,84,119,111,68,105,103,105,116,72,101,120,69,111,102,85,110,111,112,101,110,101,100,80,97,114,101,110,83,116,97,99,107,69,120,104,97,117,115,116,101,100,95,95,78,111,110,101,120,104,97,117,115,116,105,118,101,68,117,112,108,105,99,97,116,101,67,97,112,116,117,114,101,78,97,109,101,73,110,118,97,108,105,100,66,97,115,101,49,48,73,110,118,97,108,105,100,66,97,115,101,49,54,73,110,118,97,108,105,100,67,97,112,116,117,114,101,78,97,109,101,73,110,118,97,108,105,100,67,108,97,115,115,82,97,110,103,101,73,110,118,97,108,105,100,67,108,97,115,115,69,115,99,97,112,101,73,110,118,97,108,105,100,82,101,112,101,97,116,82,97,110,103,101,73,110,118,97,108,105,100,83,99,97,108,97,114,86,97,108,117,101,82,101,112,101,97,116,101,114,85,110,101,120,112,101,99,116,101,100,69,120,112,114,85,110,99,108,111,115,101,100,67,97,112,116,117,114,101,78,97,109,101,85,110,114,101,99,111,103,110,105,122,101,100,69,115,99,97,112,101,85,110,114,101,99,111,103,110,105,122,101,100,70,108,97,103,85,110,114,101,99,111,103,110,105,122,101,100,85,110,105,99,111,100,101,67,108,97,115,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,66,111,111,108,85,115,105,122,101,85,56,85,49,54,85,51,50,85,54,52,73,115,105,122,101,73,56,73,49,54,73,51,50,73,54,52,70,51,50,70,54,52,67,104,97,114,83,116,114,83,116,114,105,110,103,85,110,105,116,79,112,116,105,111,110,83,101,113,77,97,112,85,110,105,116,83,116,114,117,99,116,78,101,119,116,121,112,101,83,116,114,117,99,116,84,117,112,108,101,83,116,114,117,99,116,83,116,114,117,99,116,70,105,101,108,100,78,97,109,101,84,117,112,108,101,69,110,117,109,86,97,114,105,97,110,116,78,97,109,101,83,116,114,117,99,116,86,97,114,105,97,110,116,84,117,112,108,101,86,97,114,105,97,110,116,85,110,105,116,86,97,114,105,97,110,116,66,121,116,101,115,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,105,108,99,95,102,111,114,109,97,116,95,101,110,101,114,103,121,109,101,99,104,42,42,42,42,105,115,110,111,119,107,110,111,119,110,97,115,119,97,115,107,105,99,107,101,100,98,121,115,101,116,115,109,111,100,101,58,74,111,105,110,115,58,80,97,114,116,115,58,81,117,105,116,115,58,99,104,97,110,103,101,115,116,111,112,105,99,116,111,96,78,97,105,118,101,68,97,116,101,32,45,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,105,110,118,97,108,105,100,32,116,105,109,101,96,78,97,105,118,101,68,97,116,101,32,43,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,96,78,97,105,118,101,68,97,116,101,84,105,109,101,32,45,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,99,97,108,108,101,100,32,96,82,101,115,117,108,116,58,58,117,110,119,114,97,112,40,41,96,32,111,110,32,97,110,32,96,69,114,114,96,32,118,97,108,117,101,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,102,111,114,109,97,116,115,47,101,110,101,114,103,121,109,101,99,104,47,115,114,99,47,108,105,98,46,114,115,80,97,114,115,105,110,103,58,32,32,32,79,114,105,103,105,110,97,108,58,32,32,96,96,37,72,58,37,77,58,37,83,78,105,99,107,110,97,109,101,32,110,111,116,32,112,114,101,115,101,110,116,44,32,98,117,116,32,114,101,113,117,105,114,101,100,46,77,97,115,107,32,110,111,116,32,112,114,101,115,101,110,116,44,32,98,117,116,32,114,101,113,117,105,114,101,100,46,82,101,97,115,111,110,32,110,111,116,32,112,114,101,115,101,110,116,44,32,98,117,116,32,114,101,113,117,105,114,101,100,46,78,105,99,107,32,110,111,116,32,112,114,101,115,101,110,116,44,32,98,117,116,32,114,101,113,117,105,114,101,100,46,91,93,32,42,42,42,32,32,99,104,97,110,103,101,115,32,116,111,112,105,99,32,116,111,32,39,39,10,93,32,42,42,42,32,81,117,105,116,115,58,32,32,40,41,32,40,41,10,93,32,42,42,42,32,80,97,114,116,115,58,32,93,32,42,42,42,32,74,111,105,110,115,58,32,32,115,101,116,115,32,109,111,100,101,58,32,32,10,32,105,115,32,110,111,119,32,107,110,111,119,110,32,97,115,32,93,32,42,32,93,32,45,45,32,93,32,60,62,32,45,43,46,96,78,97,105,118,101,68,97,116,101,84,105,109,101,32,45,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,84,105,109,101,32,100,97,116,97,32,102,111,114,32,116,104,105,115,32,101,118,101,110,116,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,105,110,118,97,108,105,100,32,116,105,109,101,78,111,32,115,117,99,104,32,108,111,99,97,108,32,116,105,109,101,96,78,97,105,118,101,68,97,116,101,84,105,109,101,32,43,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,112,109,97,109,80,77,65,77,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,104,114,111,110,111,45,48,46,50,46,50,48,47,115,114,99,47,102,111,114,109,97,116,47,109,111,100,46,114,115,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,98,97,115,101,47,115,114,99,47,101,118,101,110,116,46,114,115,96,78,97,105,118,101,68,97,116,101,32,43,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,110,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,109,111,100,101,116,111,112,105,99,95,99,104,97,110,103,101,116,111,112,105,99,107,105,99,107,110,111,116,105,99,101,110,105,99,107,113,117,105,116,112,97,114,116,106,111,105,110,97,99,116,105,111,110,100,105,115,99,111,110,110,101,99,116,99,111,110,110,101,99,116,109,101,115,115,97,103,101,101,114,114,111,114,32,100,117,114,105,110,103,32,105,110,112,117,116,47,111,117,116,112,117,116,101,114,114,111,114,32,119,104,105,108,101,32,112,97,114,115,105,110,103,32,116,105,109,101,32,115,116,114,105,110,103,115,101,114,114,111,114,32,119,104,105,108,101,32,112,97,114,115,105,110,103,85,110,107,110,111,119,110,72,109,115,84,105,109,101,115,116,97,109,112,69,118,101,110,116,116,121,116,105,109,101,99,104,97,110,110,101,108,78,111,110,101,83,111,109,101,67,111,110,110,101,99,116,68,105,115,99,111,110,110,101,99,116,77,115,103,102,114,111,109,99,111,110,116,101,110,116,65,99,116,105,111,110,74,111,105,110,109,97,115,107,80,97,114,116,114,101,97,115,111,110,81,117,105,116,78,105,99,107,111,108,100,95,110,105,99,107,110,101,119,95,110,105,99,107,78,111,116,105,99,101,75,105,99,107,107,105,99,107,101,100,95,110,105,99,107,107,105,99,107,105,110,103,95,110,105,99,107,107,105,99,107,95,109,101,115,115,97,103,101,84,111,112,105,99,84,111,112,105,99,67,104,97,110,103,101,110,101,119,95,116,111,112,105,99,77,111,100,101,109,97,115,107,115,80,97,114,115,101,67,104,114,111,110,111,73,111,67,117,115,116,111,109,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,108,111,103,45,48,46,51,46,53,47,115,114,99,47,108,105,98,46,114,115,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,96,40,108,101,102,116,32,61,61,32,114,105,103,104,116,41,96,32,40,108,101,102,116,58,32,96,96,44,32,114,105,103,104,116,58,32,96,96,41,79,70,70,69,82,82,79,82,87,65,82,78,73,78,70,79,68,69,66,85,71,84,82,65,67,69,83,101,116,76,111,103,103,101,114,69,114,114,111,114,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,128,128,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,128,128,128,128,128,128,128,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,128,128,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,128,128,128,128,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,128,128,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,128,128,128,128,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,128,128,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,128,128,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,128,128,128,128,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,128,128,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,128,128,128,128,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,0,0,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,74,72,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,76,74,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,80,78,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,82,80,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,86,84,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,90,88,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,94,92,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,96,94,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,100,98,74,97,110,70,101,98,77,97,114,65,112,114,77,97,121,74,117,110,74,117,108,65,117,103,83,101,112,79,99,116,78,111,118,68,101,99,74,97,110,117,97,114,121,70,101,98,114,117,97,114,121,77,97,114,99,104,65,112,114,105,108,74,117,110,101,74,117,108,121,65,117,103,117,115,116,83,101,112,116,101,109,98,101,114,79,99,116,111,98,101,114,78,111,118,101,109,98,101,114,68,101,99,101,109,98,101,114,77,111,110,84,117,101,87,101,100,84,104,117,70,114,105,83,97,116,83,117,110,77,111,110,100,97,121,84,117,101,115,100,97,121,87,101,100,110,101,115,100,97,121,84,104,117,114,115,100,97,121,70,114,105,100,97,121,83,97,116,117,114,100,97,121,83,117,110,100,97,121,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,104,114,111,110,111,45,48,46,50,46,50,48,47,115,114,99,47,111,102,102,115,101,116,47,109,111,100,46,114,115,32,46,46,48,48,48,44,32,58,84,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,11,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,9,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,14,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,4,14,15,9,2,12,13,14,7,10,11,12,5,15,9,10,3,13,14,15,1,11,12,13,6,9,10,11,96,78,97,105,118,101,68,97,116,101,84,105,109,101,32,43,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,68,117,114,97,116,105,111,110,58,58,100,97,121,115,32,111,117,116,32,111,102,32,98,111,117,110,100,115,68,117,114,97,116,105,111,110,58,58,115,101,99,111,110,100,115,32,111,117,116,32,111,102,32,98,111,117,110,100,115,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,104,114,111,110,111,45,48,46,50,46,50,48,47,115,114,99,47,110,97,105,118,101,47,100,97,116,101,46,114,115,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,64,65,65,65,65,66,66,66,66,67,67,67,67,68,68,68,68,69,69,69,69,70,70,70,70,71,71,71,71,72,72,72,72,73,73,73,73,73,73,73,73,74,74,74,74,75,75,75,75,76,76,76,76,77,77,77,77,78,78,78,78,79,79,79,79,80,80,80,80,81,81,81,81,82,82,82,82,83,83,83,83,84,84,84,84,85,85,85,85,86,86,86,86,87,87,87,87,88,88,88,88,89,89,89,89,90,90,90,90,91,91,91,91,92,92,92,92,93,93,93,93,94,94,94,94,95,95,95,95,96,96,96,96,97,97,97,97,90,70,105,120,101,100,79,102,102,115,101,116,58,58,101,97,115,116,32,111,117,116,32,111,102,32,98,111,117,110,100,115,105,110,118,97,108,105,100,32,111,114,32,111,117,116,45,111,102,45,114,97,110,103,101,32,100,97,116,101,105,110,118,97,108,105,100,32,116,105,109,101,45,43,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,104,114,111,110,111,45,48,46,50,46,50,48,47,115,114,99,47,102,111,114,109,97,116,47,115,99,97,110,46,114,115,103,109,116,117,116,101,115,116,101,100,116,99,115,116,99,100,116,109,115,116,109,100,116,112,115,116,112,100,116,100,97,121,115,100,97,121,110,101,115,100,97,121,114,115,100,97,121,117,114,100,97,121,115,117,110,100,97,121,117,97,114,121,114,117,97,114,121,99,104,105,108,101,121,117,115,116,116,101,109,98,101,114,111,98,101,114,101,109,98,101,114,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,109,105,110,32,60,61,32,109,97,120,37,9,10,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,110,101,120,116,115,112,101,99,32,62,32,48,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,104,114,111,110,111,45,48,46,50,46,50,48,47,115,114,99,47,102,111,114,109,97,116,47,115,116,114,102,116,105,109,101,46,114,115,47,96,78,97,105,118,101,68,97,116,101,84,105,109,101,32,45,32,68,117,114,97,116,105,111,110,96,32,111,118,101,114,102,108,111,119,101,100,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,104,114,111,110,111,45,48,46,50,46,50,48,47,115,114,99,47,102,111,114,109,97,116,47,112,97,114,115,101,100,46,114,115,98,97,100,32,111,114,32,117,110,115,117,112,112,111,114,116,101,100,32,102,111,114,109,97,116,32,115,116,114,105,110,103,116,114,97,105,108,105,110,103,32,105,110,112,117,116,112,114,101,109,97,116,117,114,101,32,101,110,100,32,111,102,32,105,110,112,117,116,105,110,112,117,116,32,99,111,110,116,97,105,110,115,32,105,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,115,105,110,112,117,116,32,105,115,32,110,111,116,32,101,110,111,117,103,104,32,102,111,114,32,117,110,105,113,117,101,32,100,97,116,101,32,97,110,100,32,116,105,109,101,110,111,32,112,111,115,115,105,98,108,101,32,100,97,116,101,32,97,110,100,32,116,105,109,101,32,109,97,116,99,104,105,110,103,32,105,110,112,117,116,105,110,112,117,116,32,105,115,32,111,117,116,32,111,102,32,114,97,110,103,101,80,97,114,115,101,69,114,114,111,114,79,117,116,79,102,82,97,110,103,101,73,109,112,111,115,115,105,98,108,101,78,111,116,69,110,111,117,103,104,73,110,118,97,108,105,100,84,111,111,83,104,111,114,116,84,111,111,76,111,110,103,66,97,100,70,111,114,109,97,116,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,116,105,109,101,45,48,46,49,46,51,52,47,115,114,99,47,100,117,114,97,116,105,111,110,46,114,115,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,116,105,109,101,45,48,46,49,46,51,52,47,115,114,99,47,115,121,115,46,114,115,108,111,99,97,108,116,105,109,101,95,114,32,102,97,105,108,101,100,58,32,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,110,115,101,99,32,62,61,32,48,32,38,38,32,110,115,101,99,32,60,32,78,83,69,67,95,80,69,82,95,83,69,67,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,116,105,109,101,45,48,46,49,46,51,52,47,115,114,99,47,108,105,98,46,114,115,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,98,105,116,45,118,101,99,45,48,46,52,46,51,47,115,114,99,47,108,105,98,46,114,115,105,110,100,101,120,32,111,117,116,32,111,102,32,98,111,117,110,100,115,58,32,32,62,61,32,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,32,10,10,79,80,84,73,79,78,83,58,10,10,70,76,65,71,83,58,10,10,65,82,71,83,58,10,10,83,85,66,67,79,77,77,65,78,68,83,58,10,45,45,45,62,46,46,46,32,91,100,101,102,97,117,108,116,58,32,93,32,91,118,97,108,117,101,115,58,32,32,84,104,101,32,97,114,103,117,109,101,110,116,32,39,39,32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,32,119,105,116,104,32,10,10,10,10,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,116,114,121,32,39,39,32,114,101,113,117,105,114,101,115,32,97,32,118,97,108,117,101,32,98,117,116,32,110,111,110,101,32,119,97,115,32,115,117,112,112,108,105,101,100,10,10,32,39,39,32,105,115,110,39,116,32,97,32,118,97,108,105,100,32,118,97,108,117,101,32,102,111,114,32,39,39,10,9,91,118,97,108,117,101,115,58,93,10,32,84,104,101,32,115,117,98,99,111,109,109,97,110,100,32,39,39,32,119,97,115,110,39,116,32,114,101,99,111,103,110,105,122,101,100,10,9,68,105,100,32,121,111,117,32,109,101,97,110,32,39,39,32,63,10,10,73,102,32,121,111,117,32,98,101,108,105,101,118,101,32,121,111,117,32,114,101,99,101,105,118,101,100,32,116,104,105,115,32,109,101,115,115,97,103,101,32,105,110,32,101,114,114,111,114,44,32,116,114,121,32,114,101,45,114,117,110,110,105,110,103,32,119,105,116,104,32,39,39,10,10,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,114,101,113,117,105,114,101,100,32,97,114,103,117,109,101,110,116,115,32,119,101,114,101,32,110,111,116,32,112,114,111,118,105,100,101,100,58,39,32,114,101,113,117,105,114,101,115,32,97,32,115,117,98,99,111,109,109,97,110,100,44,32,98,117,116,32,111,110,101,32,119,97,115,32,110,111,116,32,112,114,111,118,105,100,101,100,10,10,32,73,110,118,97,108,105,100,32,85,84,70,45,56,32,119,97,115,32,100,101,116,101,99,116,101,100,32,105,110,32,111,110,101,32,111,114,32,109,111,114,101,32,97,114,103,117,109,101,110,116,115,10,10,32,84,104,101,32,118,97,108,117,101,32,39,39,32,119,97,115,32,112,114,111,118,105,100,101,100,32,116,111,32,39,39,44,32,98,117,116,32,105,116,32,119,97,115,110,39,116,32,101,120,112,101,99,116,105,110,103,32,97,110,121,32,109,111,114,101,32,118,97,108,117,101,115,10,10,39,32,114,101,113,117,105,114,101,115,32,97,116,32,108,101,97,115,116,32,32,118,97,108,117,101,115,44,32,98,117,116,32,111,110,108,121,32,32,119,32,112,114,111,118,105,100,101,100,10,10,39,32,114,101,113,117,105,114,101,115,32,32,118,97,108,117,101,115,44,32,98,117,116,32,39,32,119,97,115,32,112,114,111,118,105,100,101,100,32,109,111,114,101,32,116,104,97,110,32,111,110,99,101,44,32,98,117,116,32,99,97,110,110,111,116,32,98,101,32,117,115,101,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,10,10,32,70,111,117,110,100,32,97,114,103,117,109,101,110,116,32,39,39,32,119,104,105,99,104,32,119,97,115,110,39,116,32,101,120,112,101,99,116,101,100,44,32,111,114,32,105,115,110,39,116,32,118,97,108,105,100,32,105,110,32,116,104,105,115,32,99,111,110,116,101,120,116,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,99,97,110,110,111,116,32,97,99,99,101,115,115,32,97,32,84,76,83,32,118,97,108,117,101,32,100,117,114,105,110,103,32,111,114,32,97,102,116,101,114,32,105,116,32,105,115,32,100,101,115,116,114,111,121,101,100,117,110,114,101,97,99,104,97,98,108,101,104,101,108,112,118,101,114,115,105,111,110,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,108,97,112,45,50,46,49,46,50,47,115,114,99,47,97,112,112,47,112,97,114,115,101,114,46,114,115,71,108,111,98,97,108,32,97,114,103,117,109,101,110,116,115,32,99,97,110,110,111,116,32,98,101,32,114,101,113,117,105,114,101,100,46,10,10,9,39,39,32,105,115,32,109,97,114,107,101,100,32,97,115,32,103,108,111,98,97,108,32,97,110,100,32,114,101,113,117,105,114,101,100,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,108,97,112,45,50,46,49,46,50,47,115,114,99,47,97,114,103,115,47,97,114,103,95,98,117,105,108,100,101,114,47,102,108,97,103,46,114,115,84,104,101,32,97,114,103,117,109,101,110,116,32,39,39,32,99,97,110,110,111,116,32,98,101,32,114,101,113,117,105,114,101,100,32,98,101,99,97,117,115,101,32,105,116,39,115,32,97,32,102,108,97,103,44,32,112,101,114,104,97,112,115,32,121,111,117,32,102,111,114,103,111,116,32,116,97,107,101,115,95,118,97,108,117,101,40,116,114,117,101,41,63,39,32,99,97,110,110,111,116,32,104,97,118,101,32,97,32,115,112,101,99,105,102,105,99,32,118,97,108,117,101,32,115,101,116,32,98,101,99,97,117,115,101,32,105,116,32,100,111,101,115,110,39,116,32,104,97,118,101,32,116,97,107,101,115,95,118,97,108,117,101,40,116,114,117,101,41,32,115,101,116,39,32,104,97,115,32,97,32,118,97,108,105,100,97,116,111,114,32,115,101,116,44,32,121,101,116,32,119,97,115,32,112,97,114,115,101,100,32,97,115,32,97,32,102,108,97,103,46,32,69,110,115,117,114,101,32,46,116,97,107,101,115,95,118,97,108,117,101,40,116,114,117,101,41,32,111,114,32,46,105,110,100,101,120,40,117,54,52,41,32,105,115,32,115,101,116,46,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,108,97,112,45,50,46,49,46,50,47,115,114,99,47,97,114,103,115,47,97,114,103,95,98,117,105,108,100,101,114,47,112,111,115,105,116,105,111,110,97,108,46,114,115,65,114,103,117,109], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+204992);
/* memory initializer */ allocate([101,110,116,32,34,34,32,104,97,115,32,99,111,110,102,108,105,99,116,105,110,103,32,114,101,113,117,105,114,101,109,101,110,116,115,44,32,98,111,116,104,32,105,110,100,101,120,40,41,32,97,110,100,32,115,104,111,114,116,40,41,44,32,111,114,32,108,111,110,103,40,41,44,32,119,101,114,101,32,115,117,112,112,108,105,101,100,34,32,104,97,115,32,116,104,101,32,115,97,109,101,32,105,110,100,101,120,32,97,115,32,97,110,111,116,104,101,114,32,112,111,115,105,116,105,111,110,97,108,32,97,114,103,117,109,101,110,116,10,10,9,80,101,114,104,97,112,115,32,116,114,121,32,46,109,117,108,116,105,112,108,101,40,116,114,117,101,41,32,116,111,32,97,108,108,111,119,32,111,110,101,32,112,111,115,105,116,105,111,110,97,108,32,97,114,103,117,109,101,110,116,32,116,111,32,116,97,107,101,32,109,117,108,116,105,112,108,101,32,118,97,108,117,101,115,65,114,103,117,109,101,110,116,32,108,111,110,103,32,109,117,115,116,32,98,101,32,117,110,105,113,117,101,10,10,9,45,45,32,105,115,32,97,108,114,101,97,100,121,32,105,110,32,117,115,101,65,114,103,117,109,101,110,116,32,115,104,111,114,116,32,109,117,115,116,32,98,101,32,117,110,105,113,117,101,10,10,9,45,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,108,105,99,101,46,114,115,114,97,119,95,99,97,112,32,111,118,101,114,102,108,111,119,114,97,119,95,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,115,101,108,102,46,116,97,98,108,101,46,115,105,122,101,40,41,32,60,61,32,110,101,119,95,114,97,119,95,99,97,112,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,110,101,119,95,114,97,119,95,99,97,112,46,105,115,95,112,111,119,101,114,95,111,102,95,116,119,111,40,41,32,124,124,32,110,101,119,95,114,97,119,95,99,97,112,32,61,61,32,48,73,110,116,101,114,110,97,108,32,72,97,115,104,77,97,112,32,101,114,114,111,114,58,32,79,117,116,32,111,102,32,115,112,97,99,101,46,78,111,110,45,117,110,105,113,117,101,32,97,114,103,117,109,101,110,116,32,110,97,109,101,58,32,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,124,91,32,60,79,110,108,121,32,116,104,101,32,112,111,115,105,116,105,111,110,97,108,32,97,114,103,117,109,101,110,116,32,119,105,116,104,32,116,104,101,32,104,105,103,104,101,115,116,32,105,110,100,101,120,32,109,97,121,32,97,99,99,101,112,116,32,109,117,108,116,105,112,108,101,32,118,97,108,117,101,115,70,111,117,110,100,32,112,111,115,105,116,105,111,110,97,108,32,97,114,103,117,109,101,110,116,32,119,104,105,99,104,32,105,115,32,110,111,116,32,114,101,113,117,105,114,101,100,32,119,105,116,104,32,97,32,108,111,119,101,114,32,105,110,100,101,120,32,116,104,97,110,32,97,32,114,101,113,117,105,114,101,100,32,112,111,115,105,116,105,111,110,97,108,32,97,114,103,117,109,101,110,116,58,32,32,105,110,100,101,120,32,70,111,117,110,100,32,112,111,115,105,116,105,111,110,97,108,32,97,114,103,117,109,101,110,116,32,34,34,32,119,104,111,39,115,32,105,110,100,101,120,32,105,115,32,32,98,117,116,32,116,104,101,114,101,32,97,114,101,32,111,110,108,121,32,32,112,111,115,105,116,105,111,110,97,108,32,97,114,103,117,109,101,110,116,115,32,100,101,102,105,110,101,100,104,99,108,97,112,95,104,101,108,112,80,114,105,110,116,115,32,104,101,108,112,32,105,110,102,111,114,109,97,116,105,111,110,118,99,108,97,112,95,118,101,114,115,105,111,110,80,114,105,110,116,115,32,118,101,114,115,105,111,110,32,105,110,102,111,114,109,97,116,105,111,110,80,114,105,110,116,115,32,116,104,105,115,32,109,101,115,115,97,103,101,32,60,83,85,66,67,79,77,77,65,78,68,62,32,91,79,80,84,73,79,78,83,93,32,91,45,45,93,32,91,65,82,71,83,93,32,91,83,85,66,67,79,77,77,65,78,68,93,102,97,105,108,101,100,32,116,111,32,119,114,105,116,101,32,116,104,101,32,98,117,102,102,101,114,101,100,32,100,97,116,97,32,32,32,32,44,32,123,110,125,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,116,114,47,112,97,116,116,101,114,110,46,114,115,102,111,114,109,97,116,116,101,114,32,101,114,114,111,114,101,114,114,111,114,58,102,97,105,108,101,100,32,116,111,32,119,114,105,116,101,32,119,104,111,108,101,32,98,117,102,102,101,114,117,110,101,120,112,101,99,116,101,100,32,105,110,118,97,108,105,100,32,85,84,70,45,56,32,99,111,100,101,32,112,111,105,110,116,45,45,104,101,108,112,10,9,68,105,100,32,121,111,117,32,109,101,97,110,32,97,116,116,101,109,112,116,32,116,111,32,99,97,108,99,117,108,97,116,101,32,116,104,101,32,114,101,109,97,105,110,100,101,114,32,119,105,116,104,32,97,32,100,105,118,105,115,111,114,32,111,102,32,122,101,114,111,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,108,97,112,45,50,46,49,46,50,47,115,114,99,47,97,114,103,115,47,97,114,103,95,109,97,116,99,104,101,114,46,114,115,70,97,116,97,108,32,105,110,116,101,114,110,97,108,32,101,114,114,111,114,46,32,80,108,101,97,115,101,32,99,111,110,115,105,100,101,114,32,102,105,108,105,110,103,32,97,32,98,117,103,32,114,101,112,111,114,116,32,97,116,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,107,98,107,110,97,112,112,47,99,108,97,112,45,114,115,47,105,115,115,117,101,115,111,110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,32,111,116,104,101,114,32,115,112,101,99,105,102,105,101,100,32,97,114,103,117,109,101,110,116,115,97,115,101,114,101,10,9,115,116,114,101,97,109,32,100,105,100,32,110,111,116,32,99,111,110,116,97,105,110,32,118,97,108,105,100,32,85,84,70,45,56,99,97,108,108,101,100,32,96,82,101,115,117,108,116,58,58,117,110,119,114,97,112,40,41,96,32,111,110,32,97,110,32,96,69,114,114,96,32,118,97,108,117,101,10,80,114,101,115,115,32,91,69,78,84,69,82,93,32,47,32,91,82,69,84,85,82,78,93,32,116,111,32,99,111,110,116,105,110,117,101,46,46,46,10,69,114,114,111,114,32,119,114,105,116,105,110,103,32,69,114,114,111,114,32,116,111,32,115,116,100,111,117,116,69,88,84,69,82,78,65,76,95,83,85,66,67,79,77,77,65,78,68,47,104,111,109,101,47,116,105,108,108,47,46,99,97,114,103,111,47,114,101,103,105,115,116,114,121,47,115,114,99,47,103,105,116,104,117,98,46,99,111,109,45,49,101,99,99,54,50,57,57,100,98,57,101,99,56,50,51,47,99,108,97,112,45,50,46,49,46,50,47,115,114,99,47,97,114,103,115,47,103,114,111,117,112,46,114,115,65,114,103,71,114,111,117,112,32,39,39,32,99,97,110,32,110,111,116,32,104,97,118,101,32,115,97,109,101,32,110,97,109,101,32,97,115,32,97,114,103,32,105,110,115,105,100,101,32,105,116,27,91,48,109,51,56,59,53,59,51,55,51,54,51,53,51,52,51,51,51,50,51,49,51,48,52,56,59,53,59,52,55,52,54,52,53,52,52,52,51,52,50,52,49,52,48,27,91,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,99,111,108,108,101,99,116,105,111,110,115,47,104,97,115,104,47,116,97,98,108,101,46,114,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,99,111,108,108,101,99,116,105,111,110,115,47,104,97,115,104,47,109,97,112,46,114,115,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,96,40,108,101,102,116,32,61,61,32,114,105,103,104,116,41,96,32,40,108,101,102,116,58,32,96,96,44,32,114,105,103,104,116,58,32,96,96,41,47,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,115,47,117,110,105,120,47,99,111,110,100,118,97,114,46,114,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,115,47,117,110,105,120,47,114,119,108,111,99,107,46,114,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,115,47,117,110,105,120,47,116,104,114,101,97,100,95,108,111,99,97,108,46,114,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,114,97,110,100,47,114,101,97,100,101,114,46,114,115,82,101,97,100,101,114,82,110,103,46,102,105,108,108,95,98,121,116,101,115,58,32,47,100,101,118,47,117,114,97,110,100,111,109,102,97,105,108,101,100,32,116,111,32,99,114,101,97,116,101,32,97,110,32,79,83,32,82,78,71,82,101,97,100,101,114,82,110,103,46,102,105,108,108,95,98,121,116,101,115,58,32,69,79,70,32,114,101,97,99,104,101,100,99,97,110,110,111,116,32,97,99,99,101,115,115,32,97,32,84,76,83,32,118,97,108,117,101,32,100,117,114,105,110,103,32,111,114,32,97,102,116,101,114,32,105,116,32,105,115,32,100,101,115,116,114,111,121,101,100,114,119,108,111,99,107,32,109,97,120,105,109,117,109,32,114,101,97,100,101,114,32,99,111,117,110,116,32,101,120,99,101,101,100,101,100,114,119,108,111,99,107,32,114,101,97,100,32,108,111,99,107,32,119,111,117,108,100,32,114,101,115,117,108,116,32,105,110,32,100,101,97,100,108,111,99,107,116,104,114,101,97,100,32,112,97,110,105,99,107,101,100,32,119,104,105,108,101,32,112,97,110,105,99,107,105,110,103,46,32,97,98,111,114,116,105,110,103,46,10,102,97,116,97,108,32,114,117,110,116,105,109,101,32,101,114,114,111,114,58,32,10,102,97,105,108,101,100,32,116,111,32,105,110,105,116,105,97,116,101,32,112,97,110,105,99,44,32,101,114,114,111,114,32,82,85,83,84,95,66,65,67,75,84,82,65,67,69,48,66,111,120,60,65,110,121,62,60,117,110,110,97,109,101,100,62,102,111,114,109,97,116,116,101,114,32,101,114,114,111,114,83,116,114,105,110,103,69,114,114,111,114,102,97,105,108,101,100,32,116,111,32,119,114,105,116,101,32,119,104,111,108,101,32,98,117,102,102,101,114,1,110,111,116,101,58,32,82,117,110,32,119,105,116,104,32,96,82,85,83,84,95,66,65,67,75,84,82,65,67,69,61,49,96,32,102,111,114,32,97,32,98,97,99,107,116,114,97,99,101,46,10,69,95,90,78,90,78,58,58,95,36,46,36,36,83,80,36,64,36,66,80,36,42,36,82,70,36,38,36,76,84,36,60,36,71,84,36,62,36,76,80,36,40,36,82,80,36,41,36,67,36,44,36,117,55,101,36,126,36,117,50,48,36,32,36,117,50,55,36,39,36,117,53,98,36,91,36,117,53,100,36,93,36,117,55,98,36,123,36,117,55,100,36,125,36,117,51,98,36,59,36,117,50,98,36,43,36,117,50,50,36,34,99,97,108,108,101,100,32,96,82,101,115,117,108,116,58,58,117,110,119,114,97,112,40,41,96,32,111,110,32,97,110,32,96,69,114,114,96,32,118,97,108,117,101,60,117,110,107,110,111,119,110,62,58,32,32,45,32,32,46,46,46,32,60,102,114,97,109,101,115,32,111,109,105,116,116,101,100,62,10,115,116,97,99,107,32,98,97,99,107,116,114,97,99,101,58,10,116,104,114,101,97,100,32,39,39,32,112,97,110,105,99,107,101,100,32,97,116,32,39,39,44,32,58,97,108,114,101,97,100,121,32,98,111,114,114,111,119,101,100,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,107,101,121,32,33,61,32,48,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,115,47,99,111,109,109,111,110,47,116,104,114,101,97,100,95,108,111,99,97,108,46,114,115,116,104,114,101,97,100,32,110,97,109,101,32,109,97,121,32,110,111,116,32,99,111,110,116,97,105,110,32,105,110,116,101,114,105,111,114,32,110,117,108,108,32,98,121,116,101,115,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,78,117,108,69,114,114,111,114,97,108,114,101,97,100,121,32,109,117,116,97,98,108,121,32,98,111,114,114,111,119,101,100,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,101,110,118,46,114,115,102,97,105,108,101,100,32,116,111,32,103,101,116,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,32,96,96,58,32,100,97,116,97,32,112,114,111,118,105,100,101,100,32,99,111,110,116,97,105,110,115,32,97,32,110,117,108,32,98,121,116,101,116,104,114,101,97,100,32,112,97,110,105,99,107,101,100,32,119,104,105,108,101,32,112,114,111,99,101,115,115,105,110,103,32,112,97,110,105,99,46,32,97,98,111,114,116,105,110,103,46,10,32,40,111,115,32,101,114,114,111,114,32,115,116,114,101,114,114,111,114,95,114,32,102,97,105,108,117,114,101,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,115,47,117,110,105,120,47,111,115,46,114,115,69,114,114,111,114,114,101,112,114,79,115,99,111,100,101,109,101,115,115,97,103,101,67,117,115,116,111,109,107,105,110,100,101,114,114,111,114,78,111,116,70,111,117,110,100,80,101,114,109,105,115,115,105,111,110,68,101,110,105,101,100,67,111,110,110,101,99,116,105,111,110,82,101,102,117,115,101,100,67,111,110,110,101,99,116,105,111,110,82,101,115,101,116,67,111,110,110,101,99,116,105,111,110,65,98,111,114,116,101,100,78,111,116,67,111,110,110,101,99,116,101,100,65,100,100,114,73,110,85,115,101,65,100,100,114,78,111,116,65,118,97,105,108,97,98,108,101,66,114,111,107,101,110,80,105,112,101,65,108,114,101,97,100,121,69,120,105,115,116,115,87,111,117,108,100,66,108,111,99,107,73,110,118,97,108,105,100,73,110,112,117,116,73,110,118,97,108,105,100,68,97,116,97,84,105,109,101,100,79,117,116,87,114,105,116,101,90,101,114,111,73,110,116,101,114,114,117,112,116,101,100,79,116,104,101,114,85,110,101,120,112,101,99,116,101,100,69,111,102,95,95,78,111,110,101,120,104,97,117,115,116,105,118,101,105,110,118,97,108,105,100,32,117,116,102,45,56,117,115,101,32,111,102,32,115,116,100,58,58,116,104,114,101,97,100,58,58,99,117,114,114,101,110,116,40,41,32,105,115,32,110,111,116,32,112,111,115,115,105,98,108,101,32,97,102,116,101,114,32,116,104,101,32,116,104,114,101,97,100,39,115,32,108,111,99,97,108,32,100,97,116,97,32,104,97,115,32,98,101,101,110,32,100,101,115,116,114,111,121,101,100,97,116,116,101,109,112,116,101,100,32,116,111,32,117,115,101,32,97,32,99,111,110,100,105,116,105,111,110,32,118,97,114,105,97,98,108,101,32,119,105,116,104,32,116,119,111,32,109,117,116,101,120,101,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,110,99,47,99,111,110,100,118,97,114,46,114,115,80,111,105,115,111,110,69,114,114,111,114,32,123,32,105,110,110,101,114,58,32,46,46,32,125,46,46,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,112,97,116,104,46,114,115,111,116,104,101,114,32,111,115,32,101,114,114,111,114,111,112,101,114,97,116,105,111,110,32,105,110,116,101,114,114,117,112,116,101,100,116,105,109,101,100,32,111,117,116,105,110,118,97,108,105,100,32,105,110,112,117,116,32,112,97,114,97,109,101,116,101,114,111,112,101,114,97,116,105,111,110,32,119,111,117,108,100,32,98,108,111,99,107,101,110,116,105,116,121,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,98,114,111,107,101,110,32,112,105,112,101,97,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,97,100,100,114,101,115,115,32,105,110,32,117,115,101,110,111,116,32,99,111,110,110,101,99,116,101,100,99,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,99,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,99,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,101,110,116,105,116,121,32,110,111,116,32,102,111,117,110,100,112,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,99,97,110,110,111,116,32,97,99,99,101,115,115,32,115,116,100,105,110,32,100,117,114,105,110,103,32,115,104,117,116,100,111,119,110,99,97,110,110,111,116,32,97,99,99,101,115,115,32,115,116,100,111,117,116,32,100,117,114,105,110,103,32,115,104,117,116,100,111,119,110,102,97,105,108,101,100,32,116,111,32,119,114,105,116,101,32,116,104,101,32,98,117,102,102,101,114,101,100,32,100,97,116,97,99,97,110,110,111,116,32,97,99,99,101,115,115,32,115,116,100,101,114,114,32,100,117,114,105,110,103,32,115,104,117,116,100,111,119,110,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,105,111,47,115,116,100,105,111,46,114,115,102,97,105,108,101,100,32,112,114,105,110,116,105,110,103,32,116,111,32,115,116,100,111,117,116,58,32,79,110,99,101,32,105,110,115,116,97,110,99,101,32,104,97,115,32,112,114,101,118,105,111,117,115,108,121,32,98,101,101,110,32,112,111,105,115,111,110,101,100,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,115,116,97,116,101,32,38,32,83,84,65,84,69,95,77,65,83,75,32,61,61,32,82,85,78,78,73,78,71,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,110,99,47,111,110,99,101,46,114,115,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,40,113,117,101,117,101,32,97,115,32,117,115,105,122,101,41,32,33,61,32,49,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,115,47,99,111,109,109,111,110,47,97,116,95,101,120,105,116,95,105,109,112,46,114,115,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,99,46,98,111,114,114,111,119,40,41,46,105,115,95,110,111,110,101,40,41,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,115,47,99,111,109,109,111,110,47,116,104,114,101,97,100,95,105,110,102,111,46,114,115,109,97,105,110,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,40,42,112,116,114,41,46,105,115,95,110,111,110,101,40,41,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,115,116,100,47,115,121,115,47,117,110,105,120,47,97,114,103,115,46,114,115,102,97,116,97,108,32,114,117,110,116,105,109,101,32,101,114,114,111,114,58,32,111,117,116,32,111,102,32,109,101,109,111,114,121,10,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,33,112,116,114,46,105,115,95,110,117,108,108,40,41,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,112,97,110,105,99,95,117,110,119,105,110,100,47,101,109,99,99,46,114,115,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,101,110,116,101,114,101,100,32,117,110,114,101,97,99,104,97,98,108,101,32,99,111,100,101,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,46,114,115,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,105,110,100,101,120,32,60,32,108,101,110,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,101,110,100,32,60,61,32,108,101,110,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,108,108,101,99,116,105,111,110,115,47,118,101,99,95,100,101,113,117,101,46,114,115,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,239,191,189,70,114,111,109,85,116,102,56,69,114,114,111,114,98,121,116,101,115,101,114,114,111,114,99,97,112,97,99,105,116,121,32,111,118,101,114,102,108,111,119,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,97,108,108,111,99,47,114,97,119,95,118,101,99,46,114,115,84,114,105,101,100,32,116,111,32,115,104,114,105,110,107,32,116,111,32,97,32,108,97,114,103,101,114,32,99,97,112,97,99,105,116,121,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,114,117,115,116,99,95,117,110,105,99,111,100,101,47,116,97,98,108,101,115,46,114,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,108,105,99,101,46,114,115,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,3,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,7,0,0,8,0,0,0,6,0,0,0,0,0,8,0,8,0,0,0,0,0,8,0,9,6,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,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,2,3,4,5,4,4,4,4,6,7,8,9,10,11,2,2,12,13,14,15,4,4,2,2,2,2,16,17,4,4,18,19,20,21,22,4,23,4,24,25,26,27,28,29,30,4,2,31,32,32,4,4,4,4,4,4,4,4,4,4,4,4,2,33,34,35,32,36,2,37,38,4,39,40,41,42,4,4,2,43,2,44,4,4,45,46,47,48,28,4,49,4,4,4,4,4,50,51,4,4,4,4,4,4,4,52,4,4,4,4,53,54,55,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,56,4,2,57,2,2,2,58,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,59,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,52,20,4,60,16,61,62,4,4,4,4,4,4,4,4,4,4,4,4,4,2,63,64,65,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,66,2,2,2,2,2,2,2,2,2,2,2,32,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,67,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,68,69,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,70,71,72,73,74,2,2,2,2,75,76,77,78,79,80,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,81,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,82,2,83,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,84,85,86,4,4,4,4,4,4,4,4,4,87,88,89,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,90,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,2,2,2,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,91,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,92,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,93,99,97,108,108,101,100,32,96,79,112,116,105,111,110,58,58,117,110,119,114,97,112,40,41,96,32,111,110,32,97,32,96,78,111,110,101,96,32,118,97,108,117,101,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,111,112,116,105,111,110,46,114,115,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,114,101,115,117,108,116,46,114,115,58,32,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,108,105,99,101,46,114,115,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,109,105,100,32,60,61,32,108,101,110,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,115,116,114,47,109,111,100,46,114,115,105,110,100,101,120,32,111,117,116,32,111,102,32,98,111,117,110,100,115,58,32,116,104,101,32,108,101,110,32,105,115,32,32,98,117,116,32,116,104,101,32,105,110,100,101,120,32,105,115,32,48,48,48,49,48,50,48,51,48,52,48,53,48,54,48,55,48,56,48,57,49,48,49,49,49,50,49,51,49,52,49,53,49,54,49,55,49,56,49,57,50,48,50,49,50,50,50,51,50,52,50,53,50,54,50,55,50,56,50,57,51,48,51,49,51,50,51,51,51,52,51,53,51,54,51,55,51,56,51,57,52,48,52,49,52,50,52,51,52,52,52,53,52,54,52,55,52,56,52,57,53,48,53,49,53,50,53,51,53,52,53,53,53,54,53,55,53,56,53,57,54,48,54,49,54,50,54,51,54,52,54,53,54,54,54,55,54,56,54,57,55,48,55,49,55,50,55,51,55,52,55,53,55,54,55,55,55,56,55,57,56,48,56,49,56,50,56,51,56,52,56,53,56,54,56,55,56,56,56,57,57,48,57,49,57,50,57,51,57,52,57,53,57,54,57,55,57,56,57,57,105,110,100,101,120,32,32,111,117,116,32,111,102,32,114,97,110,103,101,32,102,111,114,32,115,108,105,99,101,32,111,102,32,108,101,110,103,116,104,32,115,108,105,99,101,32,105,110,100,101,120,32,115,116,97,114,116,115,32,97,116,32,32,98,117,116,32,101,110,100,115,32,97,116,32,91,46,46,46,93,32,97,110,100,47,111,114,32,32,105,110,32,96,96,32,100,111,32,110,111,116,32,108,105,101,32,111,110,32,99,104,97,114,97,99,116,101,114,32,98,111,117,110,100,97,114,121,98,101,103,105,110,32,60,61,32,101,110,100,32,40,32,60,61,32,41,32,119,104,101,110,32,115,108,105,99,105,110,103,32,96,110,117,109,98,101,114,32,116,111,111,32,115,109,97,108,108,32,116,111,32,102,105,116,32,105,110,32,116,97,114,103,101,116,32,116,121,112,101,110,117,109,98,101,114,32,116,111,111,32,108,97,114,103,101,32,116,111,32,102,105,116,32,105,110,32,116,97,114,103,101,116,32,116,121,112,101,105,110,118,97,108,105,100,32,100,105,103,105,116,32,102,111,117,110,100,32,105,110,32,115,116,114,105,110,103,99,97,110,110,111,116,32,112,97,114,115,101,32,105,110,116,101,103,101,114,32,102,114,111,109,32,101,109,112,116,121,32,115,116,114,105,110,103,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,102,109,116,47,109,111,100,46,114,115,10,44,41,40,32,32,32,32,32,102,97,108,115,101,116,114,117,101,66,111,114,114,111,119,69,114,114,111,114,66,111,114,114,111,119,77,117,116,69,114,114,111,114,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,117,116,102,45,56,58,32,105,110,118,97,108,105,100,32,98,121,116,101,32,110,101,97,114,32,105,110,100,101,120,32,32,123,10,125,32,125,44,32,91,47,98,117,105,108,100,115,108,97,118,101,47,114,117,115,116,45,98,117,105,108,100,98,111,116,47,115,108,97,118,101,47,110,105,103,104,116,108,121,45,100,105,115,116,45,114,117,115,116,99,45,99,114,111,115,115,45,114,117,115,116,98,117,105,108,100,45,108,105,110,117,120,47,98,117,105,108,100,47,115,114,99,47,108,105,98,99,111,114,101,47,99,104,97,114,95,112,114,105,118,97,116], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+215232);
/* memory initializer */ allocate([101,46,114,115,40,41,107,105,110,100,69,109,112,116,121,48,120,80,97,114,115,101,73,110,116,69,114,114,111,114,73,110,118,97,108,105,100,68,105,103,105,116,79,118,101,114,102,108,111,119,85,110,100,101,114,102,108,111,119,85,116,102,56,69,114,114,111,114,118,97,108,105,100,95,117,112,95,116,111,69,114,114,111,114,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+225472);
/* no memory initializer */
var tempDoublePtr = STATICTOP; STATICTOP += 16;
assert(tempDoublePtr % 8 == 0);
function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
HEAP8[tempDoublePtr] = HEAP8[ptr];
HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
}
function copyTempDouble(ptr) {
HEAP8[tempDoublePtr] = HEAP8[ptr];
HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
}
// {{PRE_LIBRARY}}
Module["_i64Subtract"] = _i64Subtract;
Module["_i64Add"] = _i64Add;
function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()
return !!__ZSt18uncaught_exceptionv.uncaught_exception;
}
var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function (adjusted) {
if (!adjusted || EXCEPTIONS.infos[adjusted]) return adjusted;
for (var ptr in EXCEPTIONS.infos) {
var info = EXCEPTIONS.infos[ptr];
if (info.adjusted === adjusted) {
return ptr;
}
}
return adjusted;
},addRef:function (ptr) {
if (!ptr) return;
var info = EXCEPTIONS.infos[ptr];
info.refcount++;
},decRef:function (ptr) {
if (!ptr) return;
var info = EXCEPTIONS.infos[ptr];
assert(info.refcount > 0);
info.refcount--;
if (info.refcount === 0) {
if (info.destructor) {
Runtime.dynCall('vi', info.destructor, [ptr]);
}
delete EXCEPTIONS.infos[ptr];
___cxa_free_exception(ptr);
}
},clearRef:function (ptr) {
if (!ptr) return;
var info = EXCEPTIONS.infos[ptr];
info.refcount = 0;
}};
function ___resumeException(ptr) {
if (!EXCEPTIONS.last) { EXCEPTIONS.last = ptr; }
EXCEPTIONS.clearRef(EXCEPTIONS.deAdjust(ptr)); // exception refcount should be cleared, but don't free it
throw ptr;
}function ___cxa_find_matching_catch() {
var thrown = EXCEPTIONS.last;
if (!thrown) {
// just pass through the null ptr
return ((asm["setTempRet0"](0),0)|0);
}
var info = EXCEPTIONS.infos[thrown];
var throwntype = info.type;
if (!throwntype) {
// just pass through the thrown ptr
return ((asm["setTempRet0"](0),thrown)|0);
}
var typeArray = Array.prototype.slice.call(arguments);
var pointer = Module['___cxa_is_pointer_type'](throwntype);
// can_catch receives a **, add indirection
if (!___cxa_find_matching_catch.buffer) ___cxa_find_matching_catch.buffer = _malloc(4);
HEAP32[((___cxa_find_matching_catch.buffer)>>2)]=thrown;
thrown = ___cxa_find_matching_catch.buffer;
// The different catch blocks are denoted by different types.
// Due to inheritance, those types may not precisely match the
// type of the thrown object. Find one which matches, and
// return the type of the catch block which should be called.
for (var i = 0; i < typeArray.length; i++) {
if (typeArray[i] && Module['___cxa_can_catch'](typeArray[i], throwntype, thrown)) {
thrown = HEAP32[((thrown)>>2)]; // undo indirection
info.adjusted = thrown;
return ((asm["setTempRet0"](typeArray[i]),thrown)|0);
}
}
// Shouldn't happen unless we have bogus data in typeArray
// or encounter a type for which emscripten doesn't have suitable
// typeinfo defined. Best-efforts match just in case.
thrown = HEAP32[((thrown)>>2)]; // undo indirection
return ((asm["setTempRet0"](throwntype),thrown)|0);
}function ___cxa_throw(ptr, type, destructor) {
EXCEPTIONS.infos[ptr] = {
ptr: ptr,
adjusted: ptr,
type: type,
destructor: destructor,
refcount: 0,
caught: false
};
EXCEPTIONS.last = ptr;
if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) {
__ZSt18uncaught_exceptionv.uncaught_exception = 1;
} else {
__ZSt18uncaught_exceptionv.uncaught_exception++;
}
throw ptr;
}
function __Unwind_FindEnclosingFunction() {
return 0; // we cannot succeed
}
Module["_pthread_mutex_lock"] = _pthread_mutex_lock;
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};
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"};
function ___setErrNo(value) {
if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;
else Module.printErr('failed to set errno from JS');
return value;
}
var PATH={splitPath:function (filename) {
var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
return splitPathRe.exec(filename).slice(1);
},normalizeArray:function (parts, allowAboveRoot) {
// if the path tries to go above the root, `up` ends up > 0
var up = 0;
for (var i = parts.length - 1; i >= 0; i--) {
var last = parts[i];
if (last === '.') {
parts.splice(i, 1);
} else if (last === '..') {
parts.splice(i, 1);
up++;
} else if (up) {
parts.splice(i, 1);
up--;
}
}
// if the path is allowed to go above the root, restore leading ..s
if (allowAboveRoot) {
for (; up--; up) {
parts.unshift('..');
}
}
return parts;
},normalize:function (path) {
var isAbsolute = path.charAt(0) === '/',
trailingSlash = path.substr(-1) === '/';
// Normalize the path
path = PATH.normalizeArray(path.split('/').filter(function(p) {
return !!p;
}), !isAbsolute).join('/');
if (!path && !isAbsolute) {
path = '.';
}
if (path && trailingSlash) {
path += '/';
}
return (isAbsolute ? '/' : '') + path;
},dirname:function (path) {
var result = PATH.splitPath(path),
root = result[0],
dir = result[1];
if (!root && !dir) {
// No dirname whatsoever
return '.';
}
if (dir) {
// It has a dirname, strip trailing slash
dir = dir.substr(0, dir.length - 1);
}
return root + dir;
},basename:function (path) {
// EMSCRIPTEN return '/'' for '/', not an empty string
if (path === '/') return '/';
var lastSlash = path.lastIndexOf('/');
if (lastSlash === -1) return path;
return path.substr(lastSlash+1);
},extname:function (path) {
return PATH.splitPath(path)[3];
},join:function () {
var paths = Array.prototype.slice.call(arguments, 0);
return PATH.normalize(paths.join('/'));
},join2:function (l, r) {
return PATH.normalize(l + '/' + r);
},resolve:function () {
var resolvedPath = '',
resolvedAbsolute = false;
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
var path = (i >= 0) ? arguments[i] : FS.cwd();
// Skip empty and invalid entries
if (typeof path !== 'string') {
throw new TypeError('Arguments to path.resolve must be strings');
} else if (!path) {
return ''; // an invalid portion invalidates the whole thing
}
resolvedPath = path + '/' + resolvedPath;
resolvedAbsolute = path.charAt(0) === '/';
}
// At this point the path should be resolved to a full absolute path, but
// handle relative paths to be safe (might happen when process.cwd() fails)
resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {
return !!p;
}), !resolvedAbsolute).join('/');
return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
},relative:function (from, to) {
from = PATH.resolve(from).substr(1);
to = PATH.resolve(to).substr(1);
function trim(arr) {
var start = 0;
for (; start < arr.length; start++) {
if (arr[start] !== '') break;
}
var end = arr.length - 1;
for (; end >= 0; end--) {
if (arr[end] !== '') break;
}
if (start > end) return [];
return arr.slice(start, end - start + 1);
}
var fromParts = trim(from.split('/'));
var toParts = trim(to.split('/'));
var length = Math.min(fromParts.length, toParts.length);
var samePartsLength = length;
for (var i = 0; i < length; i++) {
if (fromParts[i] !== toParts[i]) {
samePartsLength = i;
break;
}
}
var outputParts = [];
for (var i = samePartsLength; i < fromParts.length; i++) {
outputParts.push('..');
}
outputParts = outputParts.concat(toParts.slice(samePartsLength));
return outputParts.join('/');
}};
var TTY={ttys:[],init:function () {
// https://github.com/kripken/emscripten/pull/1555
// if (ENVIRONMENT_IS_NODE) {
// // currently, FS.init does not distinguish if process.stdin is a file or TTY
// // device, it always assumes it's a TTY device. because of this, we're forcing
// // process.stdin to UTF8 encoding to at least make stdin reading compatible
// // with text files until FS.init can be refactored.
// process['stdin']['setEncoding']('utf8');
// }
},shutdown:function () {
// https://github.com/kripken/emscripten/pull/1555
// if (ENVIRONMENT_IS_NODE) {
// // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
// // 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
// // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?
// // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
// // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call
// process['stdin']['pause']();
// }
},register:function (dev, ops) {
TTY.ttys[dev] = { input: [], output: [], ops: ops };
FS.registerDevice(dev, TTY.stream_ops);
},stream_ops:{open:function (stream) {
var tty = TTY.ttys[stream.node.rdev];
if (!tty) {
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
}
stream.tty = tty;
stream.seekable = false;
},close:function (stream) {
// flush any pending line data
stream.tty.ops.flush(stream.tty);
},flush:function (stream) {
stream.tty.ops.flush(stream.tty);
},read:function (stream, buffer, offset, length, pos /* ignored */) {
if (!stream.tty || !stream.tty.ops.get_char) {
throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
}
var bytesRead = 0;
for (var i = 0; i < length; i++) {
var result;
try {
result = stream.tty.ops.get_char(stream.tty);
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES.EIO);
}
if (result === undefined && bytesRead === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
}
if (result === null || result === undefined) break;
bytesRead++;
buffer[offset+i] = result;
}
if (bytesRead) {
stream.node.timestamp = Date.now();
}
return bytesRead;
},write:function (stream, buffer, offset, length, pos) {
if (!stream.tty || !stream.tty.ops.put_char) {
throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
}
for (var i = 0; i < length; i++) {
try {
stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES.EIO);
}
}
if (length) {
stream.node.timestamp = Date.now();
}
return i;
}},default_tty_ops:{get_char:function (tty) {
if (!tty.input.length) {
var result = null;
if (ENVIRONMENT_IS_NODE) {
// we will read data by chunks of BUFSIZE
var BUFSIZE = 256;
var buf = new Buffer(BUFSIZE);
var bytesRead = 0;
var isPosixPlatform = (process.platform != 'win32'); // Node doesn't offer a direct check, so test by exclusion
var fd = process.stdin.fd;
if (isPosixPlatform) {
// Linux and Mac cannot use process.stdin.fd (which isn't set up as sync)
var usingDevice = false;
try {
fd = fs.openSync('/dev/stdin', 'r');
usingDevice = true;
} catch (e) {}
}
try {
bytesRead = fs.readSync(fd, buf, 0, BUFSIZE, null);
} catch(e) {
// Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes,
// reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0.
if (e.toString().indexOf('EOF') != -1) bytesRead = 0;
else throw e;
}
if (usingDevice) { fs.closeSync(fd); }
if (bytesRead > 0) {
result = buf.slice(0, bytesRead).toString('utf-8');
} else {
result = null;
}
} else if (typeof window != 'undefined' &&
typeof window.prompt == 'function') {
// Browser.
result = window.prompt('Input: '); // returns null on cancel
if (result !== null) {
result += '\n';
}
} else if (typeof readline == 'function') {
// Command line.
result = readline();
if (result !== null) {
result += '\n';
}
}
if (!result) {
return null;
}
tty.input = intArrayFromString(result, true);
}
return tty.input.shift();
},put_char:function (tty, val) {
if (val === null || val === 10) {
Module['print'](UTF8ArrayToString(tty.output, 0));
tty.output = [];
} else {
if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle.
}
},flush:function (tty) {
if (tty.output && tty.output.length > 0) {
Module['print'](UTF8ArrayToString(tty.output, 0));
tty.output = [];
}
}},default_tty1_ops:{put_char:function (tty, val) {
if (val === null || val === 10) {
Module['printErr'](UTF8ArrayToString(tty.output, 0));
tty.output = [];
} else {
if (val != 0) tty.output.push(val);
}
},flush:function (tty) {
if (tty.output && tty.output.length > 0) {
Module['printErr'](UTF8ArrayToString(tty.output, 0));
tty.output = [];
}
}}};
var MEMFS={ops_table:null,mount:function (mount) {
return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
},createNode:function (parent, name, mode, dev) {
if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
// no supported
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
if (!MEMFS.ops_table) {
MEMFS.ops_table = {
dir: {
node: {
getattr: MEMFS.node_ops.getattr,
setattr: MEMFS.node_ops.setattr,
lookup: MEMFS.node_ops.lookup,
mknod: MEMFS.node_ops.mknod,
rename: MEMFS.node_ops.rename,
unlink: MEMFS.node_ops.unlink,
rmdir: MEMFS.node_ops.rmdir,
readdir: MEMFS.node_ops.readdir,
symlink: MEMFS.node_ops.symlink
},
stream: {
llseek: MEMFS.stream_ops.llseek
}
},
file: {
node: {
getattr: MEMFS.node_ops.getattr,
setattr: MEMFS.node_ops.setattr
},
stream: {
llseek: MEMFS.stream_ops.llseek,
read: MEMFS.stream_ops.read,
write: MEMFS.stream_ops.write,
allocate: MEMFS.stream_ops.allocate,
mmap: MEMFS.stream_ops.mmap,
msync: MEMFS.stream_ops.msync
}
},
link: {
node: {
getattr: MEMFS.node_ops.getattr,
setattr: MEMFS.node_ops.setattr,
readlink: MEMFS.node_ops.readlink
},
stream: {}
},
chrdev: {
node: {
getattr: MEMFS.node_ops.getattr,
setattr: MEMFS.node_ops.setattr
},
stream: FS.chrdev_stream_ops
}
};
}
var node = FS.createNode(parent, name, mode, dev);
if (FS.isDir(node.mode)) {
node.node_ops = MEMFS.ops_table.dir.node;
node.stream_ops = MEMFS.ops_table.dir.stream;
node.contents = {};
} else if (FS.isFile(node.mode)) {
node.node_ops = MEMFS.ops_table.file.node;
node.stream_ops = MEMFS.ops_table.file.stream;
node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.buffer.byteLength which gives the whole capacity.
// When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred
// for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size
// penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme.
node.contents = null;
} else if (FS.isLink(node.mode)) {
node.node_ops = MEMFS.ops_table.link.node;
node.stream_ops = MEMFS.ops_table.link.stream;
} else if (FS.isChrdev(node.mode)) {
node.node_ops = MEMFS.ops_table.chrdev.node;
node.stream_ops = MEMFS.ops_table.chrdev.stream;
}
node.timestamp = Date.now();
// add the new node to the parent
if (parent) {
parent.contents[name] = node;
}
return node;
},getFileDataAsRegularArray:function (node) {
if (node.contents && node.contents.subarray) {
var arr = [];
for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]);
return arr; // Returns a copy of the original data.
}
return node.contents; // No-op, the file contents are already in a JS array. Return as-is.
},getFileDataAsTypedArray:function (node) {
if (!node.contents) return new Uint8Array;
if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes.
return new Uint8Array(node.contents);
},expandFileStorage:function (node, newCapacity) {
// If we are asked to expand the size of a file that already exists, revert to using a standard JS array to store the file
// instead of a typed array. This makes resizing the array more flexible because we can just .push() elements at the back to
// increase the size.
if (node.contents && node.contents.subarray && newCapacity > node.contents.length) {
node.contents = MEMFS.getFileDataAsRegularArray(node);
node.usedBytes = node.contents.length; // We might be writing to a lazy-loaded file which had overridden this property, so force-reset it.
}
if (!node.contents || node.contents.subarray) { // Keep using a typed array if creating a new storage, or if old one was a typed array as well.
var prevCapacity = node.contents ? node.contents.buffer.byteLength : 0;
if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.
// Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.
// For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to
// avoid overshooting the allocation cap by a very large margin.
var CAPACITY_DOUBLING_MAX = 1024 * 1024;
newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) | 0);
if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.
var oldContents = node.contents;
node.contents = new Uint8Array(newCapacity); // Allocate new storage.
if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.
return;
}
// Not using a typed array to back the file storage. Use a standard JS array instead.
if (!node.contents && newCapacity > 0) node.contents = [];
while (node.contents.length < newCapacity) node.contents.push(0);
},resizeFileStorage:function (node, newSize) {
if (node.usedBytes == newSize) return;
if (newSize == 0) {
node.contents = null; // Fully decommit when requesting a resize to zero.
node.usedBytes = 0;
return;
}
if (!node.contents || node.contents.subarray) { // Resize a typed array if that is being used as the backing store.
var oldContents = node.contents;
node.contents = new Uint8Array(new ArrayBuffer(newSize)); // Allocate new storage.
if (oldContents) {
node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage.
}
node.usedBytes = newSize;
return;
}
// Backing with a JS array.
if (!node.contents) node.contents = [];
if (node.contents.length > newSize) node.contents.length = newSize;
else while (node.contents.length < newSize) node.contents.push(0);
node.usedBytes = newSize;
},node_ops:{getattr:function (node) {
var attr = {};
// device numbers reuse inode numbers.
attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
attr.ino = node.id;
attr.mode = node.mode;
attr.nlink = 1;
attr.uid = 0;
attr.gid = 0;
attr.rdev = node.rdev;
if (FS.isDir(node.mode)) {
attr.size = 4096;
} else if (FS.isFile(node.mode)) {
attr.size = node.usedBytes;
} else if (FS.isLink(node.mode)) {
attr.size = node.link.length;
} else {
attr.size = 0;
}
attr.atime = new Date(node.timestamp);
attr.mtime = new Date(node.timestamp);
attr.ctime = new Date(node.timestamp);
// NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
// but this is not required by the standard.
attr.blksize = 4096;
attr.blocks = Math.ceil(attr.size / attr.blksize);
return attr;
},setattr:function (node, attr) {
if (attr.mode !== undefined) {
node.mode = attr.mode;
}
if (attr.timestamp !== undefined) {
node.timestamp = attr.timestamp;
}
if (attr.size !== undefined) {
MEMFS.resizeFileStorage(node, attr.size);
}
},lookup:function (parent, name) {
throw FS.genericErrors[ERRNO_CODES.ENOENT];
},mknod:function (parent, name, mode, dev) {
return MEMFS.createNode(parent, name, mode, dev);
},rename:function (old_node, new_dir, new_name) {
// if we're overwriting a directory at new_name, make sure it's empty.
if (FS.isDir(old_node.mode)) {
var new_node;
try {
new_node = FS.lookupNode(new_dir, new_name);
} catch (e) {
}
if (new_node) {
for (var i in new_node.contents) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
}
}
}
// do the internal rewiring
delete old_node.parent.contents[old_node.name];
old_node.name = new_name;
new_dir.contents[new_name] = old_node;
old_node.parent = new_dir;
},unlink:function (parent, name) {
delete parent.contents[name];
},rmdir:function (parent, name) {
var node = FS.lookupNode(parent, name);
for (var i in node.contents) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
}
delete parent.contents[name];
},readdir:function (node) {
var entries = ['.', '..']
for (var key in node.contents) {
if (!node.contents.hasOwnProperty(key)) {
continue;
}
entries.push(key);
}
return entries;
},symlink:function (parent, newname, oldpath) {
var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);
node.link = oldpath;
return node;
},readlink:function (node) {
if (!FS.isLink(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
return node.link;
}},stream_ops:{read:function (stream, buffer, offset, length, position) {
var contents = stream.node.contents;
if (position >= stream.node.usedBytes) return 0;
var size = Math.min(stream.node.usedBytes - position, length);
assert(size >= 0);
if (size > 8 && contents.subarray) { // non-trivial, and typed array
buffer.set(contents.subarray(position, position + size), offset);
} else {
for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];
}
return size;
},write:function (stream, buffer, offset, length, position, canOwn) {
if (!length) return 0;
var node = stream.node;
node.timestamp = Date.now();
if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array?
if (canOwn) { // Can we just reuse the buffer we are given?
assert(position === 0, 'canOwn must imply no weird position inside the file');
node.contents = buffer.subarray(offset, offset + length);
node.usedBytes = length;
return length;
} else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.
node.contents = new Uint8Array(buffer.subarray(offset, offset + length));
node.usedBytes = length;
return length;
} else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file?
node.contents.set(buffer.subarray(offset, offset + length), position);
return length;
}
}
// Appending to an existing file and we need to reallocate, or source data did not come as a typed array.
MEMFS.expandFileStorage(node, position+length);
if (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position); // Use typed array write if available.
else {
for (var i = 0; i < length; i++) {
node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not.
}
}
node.usedBytes = Math.max(node.usedBytes, position+length);
return length;
},llseek:function (stream, offset, whence) {
var position = offset;
if (whence === 1) { // SEEK_CUR.
position += stream.position;
} else if (whence === 2) { // SEEK_END.
if (FS.isFile(stream.node.mode)) {
position += stream.node.usedBytes;
}
}
if (position < 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
return position;
},allocate:function (stream, offset, length) {
MEMFS.expandFileStorage(stream.node, offset + length);
stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);
},mmap:function (stream, buffer, offset, length, position, prot, flags) {
if (!FS.isFile(stream.node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
}
var ptr;
var allocated;
var contents = stream.node.contents;
// Only make a new copy when MAP_PRIVATE is specified.
if ( !(flags & 2) &&
(contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
// We can't emulate MAP_SHARED when the file is not backed by the buffer
// we're mapping to (e.g. the HEAP buffer).
allocated = false;
ptr = contents.byteOffset;
} else {
// Try to avoid unnecessary slices.
if (position > 0 || position + length < stream.node.usedBytes) {
if (contents.subarray) {
contents = contents.subarray(position, position + length);
} else {
contents = Array.prototype.slice.call(contents, position, position + length);
}
}
allocated = true;
ptr = _malloc(length);
if (!ptr) {
throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
}
buffer.set(contents, ptr);
}
return { ptr: ptr, allocated: allocated };
},msync:function (stream, buffer, offset, length, mmapFlags) {
if (!FS.isFile(stream.node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
}
if (mmapFlags & 2) {
// MAP_PRIVATE calls need not to be synced back to underlying fs
return 0;
}
var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);
// should we check if bytesWritten and length are the same?
return 0;
}}};
var IDBFS={dbs:{},indexedDB:function () {
if (typeof indexedDB !== 'undefined') return indexedDB;
var ret = null;
if (typeof window === 'object') ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
assert(ret, 'IDBFS used, but indexedDB not supported');
return ret;
},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
// reuse all of the core MEMFS functionality
return MEMFS.mount.apply(null, arguments);
},syncfs:function (mount, populate, callback) {
IDBFS.getLocalSet(mount, function(err, local) {
if (err) return callback(err);
IDBFS.getRemoteSet(mount, function(err, remote) {
if (err) return callback(err);
var src = populate ? remote : local;
var dst = populate ? local : remote;
IDBFS.reconcile(src, dst, callback);
});
});
},getDB:function (name, callback) {
// check the cache first
var db = IDBFS.dbs[name];
if (db) {
return callback(null, db);
}
var req;
try {
req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
} catch (e) {
return callback(e);
}
if (!req) {
return callback("Unable to connect to IndexedDB");
}
req.onupgradeneeded = function(e) {
var db = e.target.result;
var transaction = e.target.transaction;
var fileStore;
if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
} else {
fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
}
if (!fileStore.indexNames.contains('timestamp')) {
fileStore.createIndex('timestamp', 'timestamp', { unique: false });
}
};
req.onsuccess = function() {
db = req.result;
// add to the cache
IDBFS.dbs[name] = db;
callback(null, db);
};
req.onerror = function(e) {
callback(this.error);
e.preventDefault();
};
},getLocalSet:function (mount, callback) {
var entries = {};
function isRealDir(p) {
return p !== '.' && p !== '..';
};
function toAbsolute(root) {
return function(p) {
return PATH.join2(root, p);
}
};
var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
while (check.length) {
var path = check.pop();
var stat;
try {
stat = FS.stat(path);
} catch (e) {
return callback(e);
}
if (FS.isDir(stat.mode)) {
check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));
}
entries[path] = { timestamp: stat.mtime };
}
return callback(null, { type: 'local', entries: entries });
},getRemoteSet:function (mount, callback) {
var entries = {};
IDBFS.getDB(mount.mountpoint, function(err, db) {
if (err) return callback(err);
var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
transaction.onerror = function(e) {
callback(this.error);
e.preventDefault();
};
var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
var index = store.index('timestamp');
index.openKeyCursor().onsuccess = function(event) {
var cursor = event.target.result;
if (!cursor) {
return callback(null, { type: 'remote', db: db, entries: entries });
}
entries[cursor.primaryKey] = { timestamp: cursor.key };
cursor.continue();
};
});
},loadLocalEntry:function (path, callback) {
var stat, node;
try {
var lookup = FS.lookupPath(path);
node = lookup.node;
stat = FS.stat(path);
} catch (e) {
return callback(e);
}
if (FS.isDir(stat.mode)) {
return callback(null, { timestamp: stat.mtime, mode: stat.mode });
} else if (FS.isFile(stat.mode)) {
// Performance consideration: storing a normal JavaScript array to a IndexedDB is much slower than storing a typed array.
// Therefore always convert the file contents to a typed array first before writing the data to IndexedDB.
node.contents = MEMFS.getFileDataAsTypedArray(node);
return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents });
} else {
return callback(new Error('node type not supported'));
}
},storeLocalEntry:function (path, entry, callback) {
try {
if (FS.isDir(entry.mode)) {
FS.mkdir(path, entry.mode);
} else if (FS.isFile(entry.mode)) {
FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true });
} else {
return callback(new Error('node type not supported'));
}
FS.chmod(path, entry.mode);
FS.utime(path, entry.timestamp, entry.timestamp);
} catch (e) {
return callback(e);
}
callback(null);
},removeLocalEntry:function (path, callback) {
try {
var lookup = FS.lookupPath(path);
var stat = FS.stat(path);
if (FS.isDir(stat.mode)) {
FS.rmdir(path);
} else if (FS.isFile(stat.mode)) {
FS.unlink(path);
}
} catch (e) {
return callback(e);
}
callback(null);
},loadRemoteEntry:function (store, path, callback) {
var req = store.get(path);
req.onsuccess = function(event) { callback(null, event.target.result); };
req.onerror = function(e) {
callback(this.error);
e.preventDefault();
};
},storeRemoteEntry:function (store, path, entry, callback) {
var req = store.put(entry, path);
req.onsuccess = function() { callback(null); };
req.onerror = function(e) {
callback(this.error);
e.preventDefault();
};
},removeRemoteEntry:function (store, path, callback) {
var req = store.delete(path);
req.onsuccess = function() { callback(null); };
req.onerror = function(e) {
callback(this.error);
e.preventDefault();
};
},reconcile:function (src, dst, callback) {
var total = 0;
var create = [];
Object.keys(src.entries).forEach(function (key) {
var e = src.entries[key];
var e2 = dst.entries[key];
if (!e2 || e.timestamp > e2.timestamp) {
create.push(key);
total++;
}
});
var remove = [];
Object.keys(dst.entries).forEach(function (key) {
var e = dst.entries[key];
var e2 = src.entries[key];
if (!e2) {
remove.push(key);
total++;
}
});
if (!total) {
return callback(null);
}
var errored = false;
var completed = 0;
var db = src.type === 'remote' ? src.db : dst.db;
var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
function done(err) {
if (err) {
if (!done.errored) {
done.errored = true;
return callback(err);
}
return;
}
if (++completed >= total) {
return callback(null);
}
};
transaction.onerror = function(e) {
done(this.error);
e.preventDefault();
};
// sort paths in ascending order so directory entries are created
// before the files inside them
create.sort().forEach(function (path) {
if (dst.type === 'local') {
IDBFS.loadRemoteEntry(store, path, function (err, entry) {
if (err) return done(err);
IDBFS.storeLocalEntry(path, entry, done);
});
} else {
IDBFS.loadLocalEntry(path, function (err, entry) {
if (err) return done(err);
IDBFS.storeRemoteEntry(store, path, entry, done);
});
}
});
// sort paths in descending order so files are deleted before their
// parent directories
remove.sort().reverse().forEach(function(path) {
if (dst.type === 'local') {
IDBFS.removeLocalEntry(path, done);
} else {
IDBFS.removeRemoteEntry(store, path, done);
}
});
}};
var NODEFS={isWindows:false,staticInit:function () {
NODEFS.isWindows = !!process.platform.match(/^win/);
},mount:function (mount) {
assert(ENVIRONMENT_IS_NODE);
return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
},createNode:function (parent, name, mode, dev) {
if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
var node = FS.createNode(parent, name, mode);
node.node_ops = NODEFS.node_ops;
node.stream_ops = NODEFS.stream_ops;
return node;
},getMode:function (path) {
var stat;
try {
stat = fs.lstatSync(path);
if (NODEFS.isWindows) {
// On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
// propagate write bits to execute bits.
stat.mode = stat.mode | ((stat.mode & 146) >> 1);
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
return stat.mode;
},realPath:function (node) {
var parts = [];
while (node.parent !== node) {
parts.push(node.name);
node = node.parent;
}
parts.push(node.mount.opts.root);
parts.reverse();
return PATH.join.apply(null, parts);
},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) {
flags &= ~0x200000 /*O_PATH*/; // Ignore this flag from musl, otherwise node.js fails to open the file.
flags &= ~0x800 /*O_NONBLOCK*/; // Ignore this flag from musl, otherwise node.js fails to open the file.
flags &= ~0x8000 /*O_LARGEFILE*/; // Ignore this flag from musl, otherwise node.js fails to open the file.
flags &= ~0x80000 /*O_CLOEXEC*/; // Some applications may pass it; it makes no sense for a single process.
if (flags in NODEFS.flagsToPermissionStringMap) {
return NODEFS.flagsToPermissionStringMap[flags];
} else {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
},node_ops:{getattr:function (node) {
var path = NODEFS.realPath(node);
var stat;
try {
stat = fs.lstatSync(path);
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
// node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
// See http://support.microsoft.com/kb/140365
if (NODEFS.isWindows && !stat.blksize) {
stat.blksize = 4096;
}
if (NODEFS.isWindows && !stat.blocks) {
stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
}
return {
dev: stat.dev,
ino: stat.ino,
mode: stat.mode,
nlink: stat.nlink,
uid: stat.uid,
gid: stat.gid,
rdev: stat.rdev,
size: stat.size,
atime: stat.atime,
mtime: stat.mtime,
ctime: stat.ctime,
blksize: stat.blksize,
blocks: stat.blocks
};
},setattr:function (node, attr) {
var path = NODEFS.realPath(node);
try {
if (attr.mode !== undefined) {
fs.chmodSync(path, attr.mode);
// update the common node structure mode as well
node.mode = attr.mode;
}
if (attr.timestamp !== undefined) {
var date = new Date(attr.timestamp);
fs.utimesSync(path, date, date);
}
if (attr.size !== undefined) {
fs.truncateSync(path, attr.size);
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
},lookup:function (parent, name) {
var path = PATH.join2(NODEFS.realPath(parent), name);
var mode = NODEFS.getMode(path);
return NODEFS.createNode(parent, name, mode);
},mknod:function (parent, name, mode, dev) {
var node = NODEFS.createNode(parent, name, mode, dev);
// create the backing node for this in the fs root as well
var path = NODEFS.realPath(node);
try {
if (FS.isDir(node.mode)) {
fs.mkdirSync(path, node.mode);
} else {
fs.writeFileSync(path, '', { mode: node.mode });
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
return node;
},rename:function (oldNode, newDir, newName) {
var oldPath = NODEFS.realPath(oldNode);
var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
try {
fs.renameSync(oldPath, newPath);
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
},unlink:function (parent, name) {
var path = PATH.join2(NODEFS.realPath(parent), name);
try {
fs.unlinkSync(path);
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
},rmdir:function (parent, name) {
var path = PATH.join2(NODEFS.realPath(parent), name);
try {
fs.rmdirSync(path);
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
},readdir:function (node) {
var path = NODEFS.realPath(node);
try {
return fs.readdirSync(path);
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
},symlink:function (parent, newName, oldPath) {
var newPath = PATH.join2(NODEFS.realPath(parent), newName);
try {
fs.symlinkSync(oldPath, newPath);
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
},readlink:function (node) {
var path = NODEFS.realPath(node);
try {
path = fs.readlinkSync(path);
path = NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root), path);
return path;
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
}},stream_ops:{open:function (stream) {
var path = NODEFS.realPath(stream.node);
try {
if (FS.isFile(stream.node.mode)) {
stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags));
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
},close:function (stream) {
try {
if (FS.isFile(stream.node.mode) && stream.nfd) {
fs.closeSync(stream.nfd);
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
},read:function (stream, buffer, offset, length, position) {
if (length === 0) return 0; // node errors on 0 length reads
// FIXME this is terrible.
var nbuffer = new Buffer(length);
var res;
try {
res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
if (res > 0) {
for (var i = 0; i < res; i++) {
buffer[offset + i] = nbuffer[i];
}
}
return res;
},write:function (stream, buffer, offset, length, position) {
// FIXME this is terrible.
var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
var res;
try {
res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
return res;
},llseek:function (stream, offset, whence) {
var position = offset;
if (whence === 1) { // SEEK_CUR.
position += stream.position;
} else if (whence === 2) { // SEEK_END.
if (FS.isFile(stream.node.mode)) {
try {
var stat = fs.fstatSync(stream.nfd);
position += stat.size;
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
}
}
}
if (position < 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
return position;
}}};
var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function (mount) {
assert(ENVIRONMENT_IS_WORKER);
if (!WORKERFS.reader) WORKERFS.reader = new FileReaderSync();
var root = WORKERFS.createNode(null, '/', WORKERFS.DIR_MODE, 0);
var createdParents = {};
function ensureParent(path) {
// return the parent node, creating subdirs as necessary
var parts = path.split('/');
var parent = root;
for (var i = 0; i < parts.length-1; i++) {
var curr = parts.slice(0, i+1).join('/');
// Issue 4254: Using curr as a node name will prevent the node
// from being found in FS.nameTable when FS.open is called on
// a path which holds a child of this node,
// given that all FS functions assume node names
// are just their corresponding parts within their given path,
// rather than incremental aggregates which include their parent's
// directories.
if (!createdParents[curr]) {
createdParents[curr] = WORKERFS.createNode(parent, parts[i], WORKERFS.DIR_MODE, 0);
}
parent = createdParents[curr];
}
return parent;
}
function base(path) {
var parts = path.split('/');
return parts[parts.length-1];
}
// We also accept FileList here, by using Array.prototype
Array.prototype.forEach.call(mount.opts["files"] || [], function(file) {
WORKERFS.createNode(ensureParent(file.name), base(file.name), WORKERFS.FILE_MODE, 0, file, file.lastModifiedDate);
});
(mount.opts["blobs"] || []).forEach(function(obj) {
WORKERFS.createNode(ensureParent(obj["name"]), base(obj["name"]), WORKERFS.FILE_MODE, 0, obj["data"]);
});
(mount.opts["packages"] || []).forEach(function(pack) {
pack['metadata'].files.forEach(function(file) {
var name = file.filename.substr(1); // remove initial slash
WORKERFS.createNode(ensureParent(name), base(name), WORKERFS.FILE_MODE, 0, pack['blob'].slice(file.start, file.end));
});
});
return root;
},createNode:function (parent, name, mode, dev, contents, mtime) {
var node = FS.createNode(parent, name, mode);
node.mode = mode;
node.node_ops = WORKERFS.node_ops;
node.stream_ops = WORKERFS.stream_ops;
node.timestamp = (mtime || new Date).getTime();
assert(WORKERFS.FILE_MODE !== WORKERFS.DIR_MODE);
if (mode === WORKERFS.FILE_MODE) {
node.size = contents.size;
node.contents = contents;
} else {
node.size = 4096;
node.contents = {};
}
if (parent) {
parent.contents[name] = node;
}
return node;
},node_ops:{getattr:function (node) {
return {
dev: 1,
ino: undefined,
mode: node.mode,
nlink: 1,
uid: 0,
gid: 0,
rdev: undefined,
size: node.size,
atime: new Date(node.timestamp),
mtime: new Date(node.timestamp),
ctime: new Date(node.timestamp),
blksize: 4096,
blocks: Math.ceil(node.size / 4096),
};
},setattr:function (node, attr) {
if (attr.mode !== undefined) {
node.mode = attr.mode;
}
if (attr.timestamp !== undefined) {
node.timestamp = attr.timestamp;
}
},lookup:function (parent, name) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
},mknod:function (parent, name, mode, dev) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
},rename:function (oldNode, newDir, newName) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
},unlink:function (parent, name) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
},rmdir:function (parent, name) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
},readdir:function (node) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
},symlink:function (parent, newName, oldPath) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
},readlink:function (node) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}},stream_ops:{read:function (stream, buffer, offset, length, position) {
if (position >= stream.node.size) return 0;
var chunk = stream.node.contents.slice(position, position + length);
var ab = WORKERFS.reader.readAsArrayBuffer(chunk);
buffer.set(new Uint8Array(ab), offset);
return chunk.size;
},write:function (stream, buffer, offset, length, position) {
throw new FS.ErrnoError(ERRNO_CODES.EIO);
},llseek:function (stream, offset, whence) {
var position = offset;
if (whence === 1) { // SEEK_CUR.
position += stream.position;
} else if (whence === 2) { // SEEK_END.
if (FS.isFile(stream.node.mode)) {
position += stream.node.size;
}
}
if (position < 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
return position;
}}};
var _stdin=STATICTOP; STATICTOP += 16;;
var _stdout=STATICTOP; STATICTOP += 16;;
var _stderr=STATICTOP; STATICTOP += 16;;var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function (e) {
if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
return ___setErrNo(e.errno);
},lookupPath:function (path, opts) {
path = PATH.resolve(FS.cwd(), path);
opts = opts || {};
if (!path) return { path: '', node: null };
var defaults = {
follow_mount: true,
recurse_count: 0
};
for (var key in defaults) {
if (opts[key] === undefined) {
opts[key] = defaults[key];
}
}
if (opts.recurse_count > 8) { // max recursive lookup of 8
throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
}
// split the path
var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
return !!p;
}), false);
// start at the root
var current = FS.root;
var current_path = '/';
for (var i = 0; i < parts.length; i++) {
var islast = (i === parts.length-1);
if (islast && opts.parent) {
// stop resolving
break;
}
current = FS.lookupNode(current, parts[i]);
current_path = PATH.join2(current_path, parts[i]);
// jump to the mount's root node if this is a mountpoint
if (FS.isMountpoint(current)) {
if (!islast || (islast && opts.follow_mount)) {
current = current.mounted.root;
}
}
// by default, lookupPath will not follow a symlink if it is the final path component.
// setting opts.follow = true will override this behavior.
if (!islast || opts.follow) {
var count = 0;
while (FS.isLink(current.mode)) {
var link = FS.readlink(current_path);
current_path = PATH.resolve(PATH.dirname(current_path), link);
var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });
current = lookup.node;
if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
}
}
}
}
return { path: current_path, node: current };
},getPath:function (node) {
var path;
while (true) {
if (FS.isRoot(node)) {
var mount = node.mount.mountpoint;
if (!path) return mount;
return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
}
path = path ? node.name + '/' + path : node.name;
node = node.parent;
}
},hashName:function (parentid, name) {
var hash = 0;
for (var i = 0; i < name.length; i++) {
hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
}
return ((parentid + hash) >>> 0) % FS.nameTable.length;
},hashAddNode:function (node) {
var hash = FS.hashName(node.parent.id, node.name);
node.name_next = FS.nameTable[hash];
FS.nameTable[hash] = node;
},hashRemoveNode:function (node) {
var hash = FS.hashName(node.parent.id, node.name);
if (FS.nameTable[hash] === node) {
FS.nameTable[hash] = node.name_next;
} else {
var current = FS.nameTable[hash];
while (current) {
if (current.name_next === node) {
current.name_next = node.name_next;
break;
}
current = current.name_next;
}
}
},lookupNode:function (parent, name) {
var err = FS.mayLookup(parent);
if (err) {
throw new FS.ErrnoError(err, parent);
}
var hash = FS.hashName(parent.id, name);
for (var node = FS.nameTable[hash]; node; node = node.name_next) {
var nodeName = node.name;
if (node.parent.id === parent.id && nodeName === name) {
return node;
}
}
// if we failed to find it in the cache, call into the VFS
return FS.lookup(parent, name);
},createNode:function (parent, name, mode, rdev) {
if (!FS.FSNode) {
FS.FSNode = function(parent, name, mode, rdev) {
if (!parent) {
parent = this; // root node sets parent to itself
}
this.parent = parent;
this.mount = parent.mount;
this.mounted = null;
this.id = FS.nextInode++;
this.name = name;
this.mode = mode;
this.node_ops = {};
this.stream_ops = {};
this.rdev = rdev;
};
FS.FSNode.prototype = {};
// compatibility
var readMode = 292 | 73;
var writeMode = 146;
// NOTE we must use Object.defineProperties instead of individual calls to
// Object.defineProperty in order to make closure compiler happy
Object.defineProperties(FS.FSNode.prototype, {
read: {
get: function() { return (this.mode & readMode) === readMode; },
set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
},
write: {
get: function() { return (this.mode & writeMode) === writeMode; },
set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
},
isFolder: {
get: function() { return FS.isDir(this.mode); }
},
isDevice: {
get: function() { return FS.isChrdev(this.mode); }
}
});
}
var node = new FS.FSNode(parent, name, mode, rdev);
FS.hashAddNode(node);
return node;
},destroyNode:function (node) {
FS.hashRemoveNode(node);
},isRoot:function (node) {
return node === node.parent;
},isMountpoint:function (node) {
return !!node.mounted;
},isFile:function (mode) {
return (mode & 61440) === 32768;
},isDir:function (mode) {
return (mode & 61440) === 16384;
},isLink:function (mode) {
return (mode & 61440) === 40960;
},isChrdev:function (mode) {
return (mode & 61440) === 8192;
},isBlkdev:function (mode) {
return (mode & 61440) === 24576;
},isFIFO:function (mode) {
return (mode & 61440) === 4096;
},isSocket:function (mode) {
return (mode & 49152) === 49152;
},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) {
var flags = FS.flagModes[str];
if (typeof flags === 'undefined') {
throw new Error('Unknown file open mode: ' + str);
}
return flags;
},flagsToPermissionString:function (flag) {
var perms = ['r', 'w', 'rw'][flag & 3];
if ((flag & 512)) {
perms += 'w';
}
return perms;
},nodePermissions:function (node, perms) {
if (FS.ignorePermissions) {
return 0;
}
// return 0 if any user, group or owner bits are set.
if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
return ERRNO_CODES.EACCES;
} else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
return ERRNO_CODES.EACCES;
} else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
return ERRNO_CODES.EACCES;
}
return 0;
},mayLookup:function (dir) {
var err = FS.nodePermissions(dir, 'x');
if (err) return err;
if (!dir.node_ops.lookup) return ERRNO_CODES.EACCES;
return 0;
},mayCreate:function (dir, name) {
try {
var node = FS.lookupNode(dir, name);
return ERRNO_CODES.EEXIST;
} catch (e) {
}
return FS.nodePermissions(dir, 'wx');
},mayDelete:function (dir, name, isdir) {
var node;
try {
node = FS.lookupNode(dir, name);
} catch (e) {
return e.errno;
}
var err = FS.nodePermissions(dir, 'wx');
if (err) {
return err;
}
if (isdir) {
if (!FS.isDir(node.mode)) {
return ERRNO_CODES.ENOTDIR;
}
if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
return ERRNO_CODES.EBUSY;
}
} else {
if (FS.isDir(node.mode)) {
return ERRNO_CODES.EISDIR;
}
}
return 0;
},mayOpen:function (node, flags) {
if (!node) {
return ERRNO_CODES.ENOENT;
}
if (FS.isLink(node.mode)) {
return ERRNO_CODES.ELOOP;
} else if (FS.isDir(node.mode)) {
if (FS.flagsToPermissionString(flags) !== 'r' || // opening for write
(flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only)
return ERRNO_CODES.EISDIR;
}
}
return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
},MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
fd_start = fd_start || 0;
fd_end = fd_end || FS.MAX_OPEN_FDS;
for (var fd = fd_start; fd <= fd_end; fd++) {
if (!FS.streams[fd]) {
return fd;
}
}
throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
},getStream:function (fd) {
return FS.streams[fd];
},createStream:function (stream, fd_start, fd_end) {
if (!FS.FSStream) {
FS.FSStream = function(){};
FS.FSStream.prototype = {};
// compatibility
Object.defineProperties(FS.FSStream.prototype, {
object: {
get: function() { return this.node; },
set: function(val) { this.node = val; }
},
isRead: {
get: function() { return (this.flags & 2097155) !== 1; }
},
isWrite: {
get: function() { return (this.flags & 2097155) !== 0; }
},
isAppend: {
get: function() { return (this.flags & 1024); }
}
});
}
// clone it, so we can return an instance of FSStream
var newStream = new FS.FSStream();
for (var p in stream) {
newStream[p] = stream[p];
}
stream = newStream;
var fd = FS.nextfd(fd_start, fd_end);
stream.fd = fd;
FS.streams[fd] = stream;
return stream;
},closeStream:function (fd) {
FS.streams[fd] = null;
},chrdev_stream_ops:{open:function (stream) {
var device = FS.getDevice(stream.node.rdev);
// override node's stream ops with the device's
stream.stream_ops = device.stream_ops;
// forward the open call
if (stream.stream_ops.open) {
stream.stream_ops.open(stream);
}
},llseek:function () {
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
}},major:function (dev) {
return ((dev) >> 8);
},minor:function (dev) {
return ((dev) & 0xff);
},makedev:function (ma, mi) {
return ((ma) << 8 | (mi));
},registerDevice:function (dev, ops) {
FS.devices[dev] = { stream_ops: ops };
},getDevice:function (dev) {
return FS.devices[dev];
},getMounts:function (mount) {
var mounts = [];
var check = [mount];
while (check.length) {
var m = check.pop();
mounts.push(m);
check.push.apply(check, m.mounts);
}
return mounts;
},syncfs:function (populate, callback) {
if (typeof(populate) === 'function') {
callback = populate;
populate = false;
}
FS.syncFSRequests++;
if (FS.syncFSRequests > 1) {
console.log('warning: ' + FS.syncFSRequests + ' FS.syncfs operations in flight at once, probably just doing extra work');
}
var mounts = FS.getMounts(FS.root.mount);
var completed = 0;
function doCallback(err) {
assert(FS.syncFSRequests > 0);
FS.syncFSRequests--;
return callback(err);
}
function done(err) {
if (err) {
if (!done.errored) {
done.errored = true;
return doCallback(err);
}
return;
}
if (++completed >= mounts.length) {
doCallback(null);
}
};
// sync all mounts
mounts.forEach(function (mount) {
if (!mount.type.syncfs) {
return done(null);
}
mount.type.syncfs(mount, populate, done);
});
},mount:function (type, opts, mountpoint) {
var root = mountpoint === '/';
var pseudo = !mountpoint;
var node;
if (root && FS.root) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
} else if (!root && !pseudo) {
var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
mountpoint = lookup.path; // use the absolute path
node = lookup.node;
if (FS.isMountpoint(node)) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
}
if (!FS.isDir(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
}
}
var mount = {
type: type,
opts: opts,
mountpoint: mountpoint,
mounts: []
};
// create a root node for the fs
var mountRoot = type.mount(mount);
mountRoot.mount = mount;
mount.root = mountRoot;
if (root) {
FS.root = mountRoot;
} else if (node) {
// set as a mountpoint
node.mounted = mount;
// add the new mount to the current mount's children
if (node.mount) {
node.mount.mounts.push(mount);
}
}
return mountRoot;
},unmount:function (mountpoint) {
var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
if (!FS.isMountpoint(lookup.node)) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
// destroy the nodes for this mount, and all its child mounts
var node = lookup.node;
var mount = node.mounted;
var mounts = FS.getMounts(mount);
Object.keys(FS.nameTable).forEach(function (hash) {
var current = FS.nameTable[hash];
while (current) {
var next = current.name_next;
if (mounts.indexOf(current.mount) !== -1) {
FS.destroyNode(current);
}
current = next;
}
});
// no longer a mountpoint
node.mounted = null;
// remove this mount from the child mounts
var idx = node.mount.mounts.indexOf(mount);
assert(idx !== -1);
node.mount.mounts.splice(idx, 1);
},lookup:function (parent, name) {
return parent.node_ops.lookup(parent, name);
},mknod:function (path, mode, dev) {
var lookup = FS.lookupPath(path, { parent: true });
var parent = lookup.node;
var name = PATH.basename(path);
if (!name || name === '.' || name === '..') {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
var err = FS.mayCreate(parent, name);
if (err) {
throw new FS.ErrnoError(err);
}
if (!parent.node_ops.mknod) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
return parent.node_ops.mknod(parent, name, mode, dev);
},create:function (path, mode) {
mode = mode !== undefined ? mode : 438 /* 0666 */;
mode &= 4095;
mode |= 32768;
return FS.mknod(path, mode, 0);
},mkdir:function (path, mode) {
mode = mode !== undefined ? mode : 511 /* 0777 */;
mode &= 511 | 512;
mode |= 16384;
return FS.mknod(path, mode, 0);
},mkdev:function (path, mode, dev) {
if (typeof(dev) === 'undefined') {
dev = mode;
mode = 438 /* 0666 */;
}
mode |= 8192;
return FS.mknod(path, mode, dev);
},symlink:function (oldpath, newpath) {
if (!PATH.resolve(oldpath)) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
}
var lookup = FS.lookupPath(newpath, { parent: true });
var parent = lookup.node;
if (!parent) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
}
var newname = PATH.basename(newpath);
var err = FS.mayCreate(parent, newname);
if (err) {
throw new FS.ErrnoError(err);
}
if (!parent.node_ops.symlink) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
return parent.node_ops.symlink(parent, newname, oldpath);
},rename:function (old_path, new_path) {
var old_dirname = PATH.dirname(old_path);
var new_dirname = PATH.dirname(new_path);
var old_name = PATH.basename(old_path);
var new_name = PATH.basename(new_path);
// parents must exist
var lookup, old_dir, new_dir;
try {
lookup = FS.lookupPath(old_path, { parent: true });
old_dir = lookup.node;
lookup = FS.lookupPath(new_path, { parent: true });
new_dir = lookup.node;
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
}
if (!old_dir || !new_dir) throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
// need to be part of the same mount
if (old_dir.mount !== new_dir.mount) {
throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
}
// source must exist
var old_node = FS.lookupNode(old_dir, old_name);
// old path should not be an ancestor of the new path
var relative = PATH.relative(old_path, new_dirname);
if (relative.charAt(0) !== '.') {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
// new path should not be an ancestor of the old path
relative = PATH.relative(new_path, old_dirname);
if (relative.charAt(0) !== '.') {
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
}
// see if the new path already exists
var new_node;
try {
new_node = FS.lookupNode(new_dir, new_name);
} catch (e) {
// not fatal
}
// early out if nothing needs to change
if (old_node === new_node) {
return;
}
// we'll need to delete the old entry
var isdir = FS.isDir(old_node.mode);
var err = FS.mayDelete(old_dir, old_name, isdir);
if (err) {
throw new FS.ErrnoError(err);
}
// need delete permissions if we'll be overwriting.
// need create permissions if new doesn't already exist.
err = new_node ?
FS.mayDelete(new_dir, new_name, isdir) :
FS.mayCreate(new_dir, new_name);
if (err) {
throw new FS.ErrnoError(err);
}
if (!old_dir.node_ops.rename) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
}
// if we are going to change the parent, check write permissions
if (new_dir !== old_dir) {
err = FS.nodePermissions(old_dir, 'w');
if (err) {
throw new FS.ErrnoError(err);
}
}
try {
if (FS.trackingDelegate['willMovePath']) {
FS.trackingDelegate['willMovePath'](old_path, new_path);
}
} catch(e) {
console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message);
}
// remove the node from the lookup hash
FS.hashRemoveNode(old_node);
// do the underlying fs rename
try {
old_dir.node_ops.rename(old_node, new_dir, new_name);
} catch (e) {
throw e;
} finally {
// add the node back to the hash (in case node_ops.rename
// changed its name)
FS.hashAddNode(old_node);
}
try {
if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path);
} catch(e) {
console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message);
}
},rmdir:function (path) {
var lookup = FS.lookupPath(path, { parent: true });
var parent = lookup.node;
var name = PATH.basename(path);
var node = FS.lookupNode(parent, name);
var err = FS.mayDelete(parent, name, true);
if (err) {
throw new FS.ErrnoError(err);
}
if (!parent.node_ops.rmdir) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
if (FS.isMountpoint(node)) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
}
try {
if (FS.trackingDelegate['willDeletePath']) {
FS.trackingDelegate['willDeletePath'](path);
}
} catch(e) {
console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message);
}
parent.node_ops.rmdir(parent, name);
FS.destroyNode(node);
try {
if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path);
} catch(e) {
console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message);
}
},readdir:function (path) {
var lookup = FS.lookupPath(path, { follow: true });
var node = lookup.node;
if (!node.node_ops.readdir) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
}
return node.node_ops.readdir(node);
},unlink:function (path) {
var lookup = FS.lookupPath(path, { parent: true });
var parent = lookup.node;
var name = PATH.basename(path);
var node = FS.lookupNode(parent, name);
var err = FS.mayDelete(parent, name, false);
if (err) {
// According to POSIX, we should map EISDIR to EPERM, but
// we instead do what Linux does (and we must, as we use
// the musl linux libc).
throw new FS.ErrnoError(err);
}
if (!parent.node_ops.unlink) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
if (FS.isMountpoint(node)) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
}
try {
if (FS.trackingDelegate['willDeletePath']) {
FS.trackingDelegate['willDeletePath'](path);
}
} catch(e) {
console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message);
}
parent.node_ops.unlink(parent, name);
FS.destroyNode(node);
try {
if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path);
} catch(e) {
console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message);
}
},readlink:function (path) {
var lookup = FS.lookupPath(path);
var link = lookup.node;
if (!link) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
}
if (!link.node_ops.readlink) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
return PATH.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));
},stat:function (path, dontFollow) {
var lookup = FS.lookupPath(path, { follow: !dontFollow });
var node = lookup.node;
if (!node) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
}
if (!node.node_ops.getattr) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
return node.node_ops.getattr(node);
},lstat:function (path) {
return FS.stat(path, true);
},chmod:function (path, mode, dontFollow) {
var node;
if (typeof path === 'string') {
var lookup = FS.lookupPath(path, { follow: !dontFollow });
node = lookup.node;
} else {
node = path;
}
if (!node.node_ops.setattr) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
node.node_ops.setattr(node, {
mode: (mode & 4095) | (node.mode & ~4095),
timestamp: Date.now()
});
},lchmod:function (path, mode) {
FS.chmod(path, mode, true);
},fchmod:function (fd, mode) {
var stream = FS.getStream(fd);
if (!stream) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
}
FS.chmod(stream.node, mode);
},chown:function (path, uid, gid, dontFollow) {
var node;
if (typeof path === 'string') {
var lookup = FS.lookupPath(path, { follow: !dontFollow });
node = lookup.node;
} else {
node = path;
}
if (!node.node_ops.setattr) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
node.node_ops.setattr(node, {
timestamp: Date.now()
// we ignore the uid / gid for now
});
},lchown:function (path, uid, gid) {
FS.chown(path, uid, gid, true);
},fchown:function (fd, uid, gid) {
var stream = FS.getStream(fd);
if (!stream) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
}
FS.chown(stream.node, uid, gid);
},truncate:function (path, len) {
if (len < 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
var node;
if (typeof path === 'string') {
var lookup = FS.lookupPath(path, { follow: true });
node = lookup.node;
} else {
node = path;
}
if (!node.node_ops.setattr) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
}
if (FS.isDir(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
}
if (!FS.isFile(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
var err = FS.nodePermissions(node, 'w');
if (err) {
throw new FS.ErrnoError(err);
}
node.node_ops.setattr(node, {
size: len,
timestamp: Date.now()
});
},ftruncate:function (fd, len) {
var stream = FS.getStream(fd);
if (!stream) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
}
if ((stream.flags & 2097155) === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
FS.truncate(stream.node, len);
},utime:function (path, atime, mtime) {
var lookup = FS.lookupPath(path, { follow: true });
var node = lookup.node;
node.node_ops.setattr(node, {
timestamp: Math.max(atime, mtime)
});
},open:function (path, flags, mode, fd_start, fd_end) {
if (path === "") {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
}
flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode;
if ((flags & 64)) {
mode = (mode & 4095) | 32768;
} else {
mode = 0;
}
var node;
if (typeof path === 'object') {
node = path;
} else {
path = PATH.normalize(path);
try {
var lookup = FS.lookupPath(path, {
follow: !(flags & 131072)
});
node = lookup.node;
} catch (e) {
// ignore
}
}
// perhaps we need to create the node
var created = false;
if ((flags & 64)) {
if (node) {
// if O_CREAT and O_EXCL are set, error out if the node already exists
if ((flags & 128)) {
throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
}
} else {
// node doesn't exist, try to create it
node = FS.mknod(path, mode, 0);
created = true;
}
}
if (!node) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
}
// can't truncate a device
if (FS.isChrdev(node.mode)) {
flags &= ~512;
}
// if asked only for a directory, then this must be one
if ((flags & 65536) && !FS.isDir(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
}
// check permissions, if this is not a file we just created now (it is ok to
// create and write to a file with read-only permissions; it is read-only
// for later use)
if (!created) {
var err = FS.mayOpen(node, flags);
if (err) {
throw new FS.ErrnoError(err);
}
}
// do truncation if necessary
if ((flags & 512)) {
FS.truncate(node, 0);
}
// we've already handled these, don't pass down to the underlying vfs
flags &= ~(128 | 512);
// register the stream with the filesystem
var stream = FS.createStream({
node: node,
path: FS.getPath(node), // we want the absolute path to the node
flags: flags,
seekable: true,
position: 0,
stream_ops: node.stream_ops,
// used by the file family libc calls (fopen, fwrite, ferror, etc.)
ungotten: [],
error: false
}, fd_start, fd_end);
// call the new stream's open function
if (stream.stream_ops.open) {
stream.stream_ops.open(stream);
}
if (Module['logReadFiles'] && !(flags & 1)) {
if (!FS.readFiles) FS.readFiles = {};
if (!(path in FS.readFiles)) {
FS.readFiles[path] = 1;
Module['printErr']('read file: ' + path);
}
}
try {
if (FS.trackingDelegate['onOpenFile']) {
var trackingFlags = 0;
if ((flags & 2097155) !== 1) {
trackingFlags |= FS.tracking.openFlags.READ;
}
if ((flags & 2097155) !== 0) {
trackingFlags |= FS.tracking.openFlags.WRITE;
}
FS.trackingDelegate['onOpenFile'](path, trackingFlags);
}
} catch(e) {
console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: " + e.message);
}
return stream;
},close:function (stream) {
if (stream.getdents) stream.getdents = null; // free readdir state
try {
if (stream.stream_ops.close) {
stream.stream_ops.close(stream);
}
} catch (e) {
throw e;
} finally {
FS.closeStream(stream.fd);
}
},llseek:function (stream, offset, whence) {
if (!stream.seekable || !stream.stream_ops.llseek) {
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
}
stream.position = stream.stream_ops.llseek(stream, offset, whence);
stream.ungotten = [];
return stream.position;
},read:function (stream, buffer, offset, length, position) {
if (length < 0 || position < 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
if ((stream.flags & 2097155) === 1) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
}
if (FS.isDir(stream.node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
}
if (!stream.stream_ops.read) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
var seeking = true;
if (typeof position === 'undefined') {
position = stream.position;
seeking = false;
} else if (!stream.seekable) {
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
}
var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
if (!seeking) stream.position += bytesRead;
return bytesRead;
},write:function (stream, buffer, offset, length, position, canOwn) {
if (length < 0 || position < 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
if ((stream.flags & 2097155) === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
}
if (FS.isDir(stream.node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
}
if (!stream.stream_ops.write) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
if (stream.flags & 1024) {
// seek to the end before writing in append mode
FS.llseek(stream, 0, 2);
}
var seeking = true;
if (typeof position === 'undefined') {
position = stream.position;
seeking = false;
} else if (!stream.seekable) {
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
}
var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
if (!seeking) stream.position += bytesWritten;
try {
if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path);
} catch(e) {
console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: " + e.message);
}
return bytesWritten;
},allocate:function (stream, offset, length) {
if (offset < 0 || length <= 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
}
if ((stream.flags & 2097155) === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
}
if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
}
if (!stream.stream_ops.allocate) {
throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
}
stream.stream_ops.allocate(stream, offset, length);
},mmap:function (stream, buffer, offset, length, position, prot, flags) {
// TODO if PROT is PROT_WRITE, make sure we have write access
if ((stream.flags & 2097155) === 1) {
throw new FS.ErrnoError(ERRNO_CODES.EACCES);
}
if (!stream.stream_ops.mmap) {
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
}
return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
},msync:function (stream, buffer, offset, length, mmapFlags) {
if (!stream || !stream.stream_ops.msync) {
return 0;
}
return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);
},munmap:function (stream) {
return 0;
},ioctl:function (stream, cmd, arg) {
if (!stream.stream_ops.ioctl) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
}
return stream.stream_ops.ioctl(stream, cmd, arg);
},readFile:function (path, opts) {
opts = opts || {};
opts.flags = opts.flags || 'r';
opts.encoding = opts.encoding || 'binary';
if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
throw new Error('Invalid encoding type "' + opts.encoding + '"');
}
var ret;
var stream = FS.open(path, opts.flags);
var stat = FS.stat(path);
var length = stat.size;
var buf = new Uint8Array(length);
FS.read(stream, buf, 0, length, 0);
if (opts.encoding === 'utf8') {
ret = UTF8ArrayToString(buf, 0);
} else if (opts.encoding === 'binary') {
ret = buf;
}
FS.close(stream);
return ret;
},writeFile:function (path, data, opts) {
opts = opts || {};
opts.flags = opts.flags || 'w';
opts.encoding = opts.encoding || 'utf8';
if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
throw new Error('Invalid encoding type "' + opts.encoding + '"');
}
var stream = FS.open(path, opts.flags, opts.mode);
if (opts.encoding === 'utf8') {
var buf = new Uint8Array(lengthBytesUTF8(data)+1);
var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
FS.write(stream, buf, 0, actualNumBytes, 0, opts.canOwn);
} else if (opts.encoding === 'binary') {
FS.write(stream, data, 0, data.length, 0, opts.canOwn);
}
FS.close(stream);
},cwd:function () {
return FS.currentPath;
},chdir:function (path) {
var lookup = FS.lookupPath(path, { follow: true });
if (!FS.isDir(lookup.node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
}
var err = FS.nodePermissions(lookup.node, 'x');
if (err) {
throw new FS.ErrnoError(err);
}
FS.currentPath = lookup.path;
},createDefaultDirectories:function () {
FS.mkdir('/tmp');
FS.mkdir('/home');
FS.mkdir('/home/web_user');
},createDefaultDevices:function () {
// create /dev
FS.mkdir('/dev');
// setup /dev/null
FS.registerDevice(FS.makedev(1, 3), {
read: function() { return 0; },
write: function(stream, buffer, offset, length, pos) { return length; }
});
FS.mkdev('/dev/null', FS.makedev(1, 3));
// setup /dev/tty and /dev/tty1
// stderr needs to print output using Module['printErr']
// so we register a second tty just for it.
TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
FS.mkdev('/dev/tty', FS.makedev(5, 0));
FS.mkdev('/dev/tty1', FS.makedev(6, 0));
// setup /dev/[u]random
var random_device;
if (typeof crypto !== 'undefined') {
// for modern web browsers
var randomBuffer = new Uint8Array(1);
random_device = function() { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; };
} else if (ENVIRONMENT_IS_NODE) {
// for nodejs
random_device = function() { return require('crypto').randomBytes(1)[0]; };
} else {
// default for ES5 platforms
random_device = function() { return (Math.random()*256)|0; };
}
FS.createDevice('/dev', 'random', random_device);
FS.createDevice('/dev', 'urandom', random_device);
// we're not going to emulate the actual shm device,
// just create the tmp dirs that reside in it commonly
FS.mkdir('/dev/shm');
FS.mkdir('/dev/shm/tmp');
},createSpecialDirectories:function () {
// create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the name of the stream for fd 6 (see test_unistd_ttyname)
FS.mkdir('/proc');
FS.mkdir('/proc/self');
FS.mkdir('/proc/self/fd');
FS.mount({
mount: function() {
var node = FS.createNode('/proc/self', 'fd', 16384 | 511 /* 0777 */, 73);
node.node_ops = {
lookup: function(parent, name) {
var fd = +name;
var stream = FS.getStream(fd);
if (!stream) throw new FS.ErrnoError(ERRNO_CODES.EBADF);
var ret = {
parent: null,
mount: { mountpoint: 'fake' },
node_ops: { readlink: function() { return stream.path } }
};
ret.parent = ret; // make it look like a simple root node
return ret;
}
};
return node;
}
}, {}, '/proc/self/fd');
},createStandardStreams:function () {
// TODO deprecate the old functionality of a single
// input / output callback and that utilizes FS.createDevice
// and instead require a unique set of stream ops
// by default, we symlink the standard streams to the
// default tty devices. however, if the standard streams
// have been overwritten we create a unique device for
// them instead.
if (Module['stdin']) {
FS.createDevice('/dev', 'stdin', Module['stdin']);
} else {
FS.symlink('/dev/tty', '/dev/stdin');
}
if (Module['stdout']) {
FS.createDevice('/dev', 'stdout', null, Module['stdout']);
} else {
FS.symlink('/dev/tty', '/dev/stdout');
}
if (Module['stderr']) {
FS.createDevice('/dev', 'stderr', null, Module['stderr']);
} else {
FS.symlink('/dev/tty1', '/dev/stderr');
}
// open default streams for the stdin, stdout and stderr devices
var stdin = FS.open('/dev/stdin', 'r');
assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
var stdout = FS.open('/dev/stdout', 'w');
assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');
var stderr = FS.open('/dev/stderr', 'w');
assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');
},ensureErrnoError:function () {
if (FS.ErrnoError) return;
FS.ErrnoError = function ErrnoError(errno, node) {
//Module.printErr(stackTrace()); // useful for debugging
this.node = node;
this.setErrno = function(errno) {
this.errno = errno;
for (var key in ERRNO_CODES) {
if (ERRNO_CODES[key] === errno) {
this.code = key;
break;
}
}
};
this.setErrno(errno);
this.message = ERRNO_MESSAGES[errno];
if (this.stack) this.stack = demangleAll(this.stack);
};
FS.ErrnoError.prototype = new Error();
FS.ErrnoError.prototype.constructor = FS.ErrnoError;
// Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
[ERRNO_CODES.ENOENT].forEach(function(code) {
FS.genericErrors[code] = new FS.ErrnoError(code);
FS.genericErrors[code].stack = '<generic error, no stack>';
});
},staticInit:function () {
FS.ensureErrnoError();
FS.nameTable = new Array(4096);
FS.mount(MEMFS, {}, '/');
FS.createDefaultDirectories();
FS.createDefaultDevices();
FS.createSpecialDirectories();
FS.filesystems = {
'MEMFS': MEMFS,
'IDBFS': IDBFS,
'NODEFS': NODEFS,
'WORKERFS': WORKERFS,
};
},init:function (input, output, error) {
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)');
FS.init.initialized = true;
FS.ensureErrnoError();
// Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
Module['stdin'] = input || Module['stdin'];
Module['stdout'] = output || Module['stdout'];
Module['stderr'] = error || Module['stderr'];
FS.createStandardStreams();
},quit:function () {
FS.init.initialized = false;
// force-flush all streams, so we get musl std streams printed out
var fflush = Module['_fflush'];
if (fflush) fflush(0);
// close all of our streams
for (var i = 0; i < FS.streams.length; i++) {
var stream = FS.streams[i];
if (!stream) {
continue;
}
FS.close(stream);
}
},getMode:function (canRead, canWrite) {
var mode = 0;
if (canRead) mode |= 292 | 73;
if (canWrite) mode |= 146;
return mode;
},joinPath:function (parts, forceRelative) {
var path = PATH.join.apply(null, parts);
if (forceRelative && path[0] == '/') path = path.substr(1);
return path;
},absolutePath:function (relative, base) {
return PATH.resolve(base, relative);
},standardizePath:function (path) {
return PATH.normalize(path);
},findObject:function (path, dontResolveLastLink) {
var ret = FS.analyzePath(path, dontResolveLastLink);
if (ret.exists) {
return ret.object;
} else {
___setErrNo(ret.error);
return null;
}
},analyzePath:function (path, dontResolveLastLink) {
// operate from within the context of the symlink's target
try {
var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
path = lookup.path;
} catch (e) {
}
var ret = {
isRoot: false, exists: false, error: 0, name: null, path: null, object: null,
parentExists: false, parentPath: null, parentObject: null
};
try {
var lookup = FS.lookupPath(path, { parent: true });
ret.parentExists = true;
ret.parentPath = lookup.path;
ret.parentObject = lookup.node;
ret.name = PATH.basename(path);
lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
ret.exists = true;
ret.path = lookup.path;
ret.object = lookup.node;
ret.name = lookup.node.name;
ret.isRoot = lookup.path === '/';
} catch (e) {
ret.error = e.errno;
};
return ret;
},createFolder:function (parent, name, canRead, canWrite) {
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
var mode = FS.getMode(canRead, canWrite);
return FS.mkdir(path, mode);
},createPath:function (parent, path, canRead, canWrite) {
parent = typeof parent === 'string' ? parent : FS.getPath(parent);
var parts = path.split('/').reverse();
while (parts.length) {
var part = parts.pop();
if (!part) continue;
var current = PATH.join2(parent, part);
try {
FS.mkdir(current);
} catch (e) {
// ignore EEXIST
}
parent = current;
}
return current;
},createFile:function (parent, name, properties, canRead, canWrite) {
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
var mode = FS.getMode(canRead, canWrite);
return FS.create(path, mode);
},createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
var mode = FS.getMode(canRead, canWrite);
var node = FS.create(path, mode);
if (data) {
if (typeof data === 'string') {
var arr = new Array(data.length);
for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
data = arr;
}
// make sure we can write to the file
FS.chmod(node, mode | 146);
var stream = FS.open(node, 'w');
FS.write(stream, data, 0, data.length, 0, canOwn);
FS.close(stream);
FS.chmod(node, mode);
}
return node;
},createDevice:function (parent, name, input, output) {
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
var mode = FS.getMode(!!input, !!output);
if (!FS.createDevice.major) FS.createDevice.major = 64;
var dev = FS.makedev(FS.createDevice.major++, 0);
// Create a fake device that a set of stream ops to emulate
// the old behavior.
FS.registerDevice(dev, {
open: function(stream) {
stream.seekable = false;
},
close: function(stream) {
// flush any pending line data
if (output && output.buffer && output.buffer.length) {
output(10);
}
},
read: function(stream, buffer, offset, length, pos /* ignored */) {
var bytesRead = 0;
for (var i = 0; i < length; i++) {
var result;
try {
result = input();
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES.EIO);
}
if (result === undefined && bytesRead === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
}
if (result === null || result === undefined) break;
bytesRead++;
buffer[offset+i] = result;
}
if (bytesRead) {
stream.node.timestamp = Date.now();
}
return bytesRead;
},
write: function(stream, buffer, offset, length, pos) {
for (var i = 0; i < length; i++) {
try {
output(buffer[offset+i]);
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES.EIO);
}
}
if (length) {
stream.node.timestamp = Date.now();
}
return i;
}
});
return FS.mkdev(path, mode, dev);
},createLink:function (parent, name, target, canRead, canWrite) {
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
return FS.symlink(target, path);
},forceLoadFile:function (obj) {
if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
var success = true;
if (typeof XMLHttpRequest !== 'undefined') {
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.");
} else if (Module['read']) {
// Command-line.
try {
// WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
// read() will try to parse UTF8.
obj.contents = intArrayFromString(Module['read'](obj.url), true);
obj.usedBytes = obj.contents.length;
} catch (e) {
success = false;
}
} else {
throw new Error('Cannot load without read() or XMLHttpRequest.');
}
if (!success) ___setErrNo(ERRNO_CODES.EIO);
return success;
},createLazyFile:function (parent, name, url, canRead, canWrite) {
// Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
function LazyUint8Array() {
this.lengthKnown = false;
this.chunks = []; // Loaded chunks. Index is the chunk number
}
LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
if (idx > this.length-1 || idx < 0) {
return undefined;
}
var chunkOffset = idx % this.chunkSize;
var chunkNum = (idx / this.chunkSize)|0;
return this.getter(chunkNum)[chunkOffset];
}
LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
this.getter = getter;
}
LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
// Find length
var xhr = new XMLHttpRequest();
xhr.open('HEAD', url, false);
xhr.send(null);
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
var datalength = Number(xhr.getResponseHeader("Content-length"));
var header;
var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip";
var chunkSize = 1024*1024; // Chunk size in bytes
if (!hasByteServing) chunkSize = datalength;
// Function to get a range from the remote URL.
var doXHR = (function(from, to) {
if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
// TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
// Some hints to the browser that we want binary data.
if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
if (xhr.overrideMimeType) {
xhr.overrideMimeType('text/plain; charset=x-user-defined');
}
xhr.send(null);
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
if (xhr.response !== undefined) {
return new Uint8Array(xhr.response || []);
} else {
return intArrayFromString(xhr.responseText || '', true);
}
});
var lazyArray = this;
lazyArray.setDataGetter(function(chunkNum) {
var start = chunkNum * chunkSize;
var end = (chunkNum+1) * chunkSize - 1; // including this byte
end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
lazyArray.chunks[chunkNum] = doXHR(start, end);
}
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
return lazyArray.chunks[chunkNum];
});
if (usesGzip || !datalength) {
// if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length
chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file
datalength = this.getter(0).length;
chunkSize = datalength;
console.log("LazyFiles on gzip forces download of the whole file when length is accessed");
}
this._length = datalength;
this._chunkSize = chunkSize;
this.lengthKnown = true;
}
if (typeof XMLHttpRequest !== 'undefined') {
if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
var lazyArray = new LazyUint8Array();
Object.defineProperties(lazyArray, {
length: {
get: function() {
if(!this.lengthKnown) {
this.cacheLength();
}
return this._length;
}
},
chunkSize: {
get: function() {
if(!this.lengthKnown) {
this.cacheLength();
}
return this._chunkSize;
}
}
});
var properties = { isDevice: false, contents: lazyArray };
} else {
var properties = { isDevice: false, url: url };
}
var node = FS.createFile(parent, name, properties, canRead, canWrite);
// This is a total hack, but I want to get this lazy file code out of the
// core of MEMFS. If we want to keep this lazy file concept I feel it should
// be its own thin LAZYFS proxying calls to MEMFS.
if (properties.contents) {
node.contents = properties.contents;
} else if (properties.url) {
node.contents = null;
node.url = properties.url;
}
// Add a function that defers querying the file size until it is asked the first time.
Object.defineProperties(node, {
usedBytes: {
get: function() { return this.contents.length; }
}
});
// override each stream op with one that tries to force load the lazy file first
var stream_ops = {};
var keys = Object.keys(node.stream_ops);
keys.forEach(function(key) {
var fn = node.stream_ops[key];
stream_ops[key] = function forceLoadLazyFile() {
if (!FS.forceLoadFile(node)) {
throw new FS.ErrnoError(ERRNO_CODES.EIO);
}
return fn.apply(null, arguments);
};
});
// use a custom read function
stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
if (!FS.forceLoadFile(node)) {
throw new FS.ErrnoError(ERRNO_CODES.EIO);
}
var contents = stream.node.contents;
if (position >= contents.length)
return 0;
var size = Math.min(contents.length - position, length);
assert(size >= 0);
if (contents.slice) { // normal array
for (var i = 0; i < size; i++) {
buffer[offset + i] = contents[position + i];
}
} else {
for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
buffer[offset + i] = contents.get(position + i);
}
}
return size;
};
node.stream_ops = stream_ops;
return node;
},createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) {
Browser.init(); // XXX perhaps this method should move onto Browser?
// TODO we should allow people to just pass in a complete filename instead
// of parent and name being that we just join them anyways
var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname
function processData(byteArray) {
function finish(byteArray) {
if (preFinish) preFinish();
if (!dontCreateFile) {
FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
}
if (onload) onload();
removeRunDependency(dep);
}
var handled = false;
Module['preloadPlugins'].forEach(function(plugin) {
if (handled) return;
if (plugin['canHandle'](fullname)) {
plugin['handle'](byteArray, fullname, finish, function() {
if (onerror) onerror();
removeRunDependency(dep);
});
handled = true;
}
});
if (!handled) finish(byteArray);
}
addRunDependency(dep);
if (typeof url == 'string') {
Browser.asyncLoad(url, function(byteArray) {
processData(byteArray);
}, onerror);
} else {
processData(url);
}
},indexedDB:function () {
return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
},DB_NAME:function () {
return 'EM_FS_' + window.location.pathname;
},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) {
onload = onload || function(){};
onerror = onerror || function(){};
var indexedDB = FS.indexedDB();
try {
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
} catch (e) {
return onerror(e);
}
openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
console.log('creating db');
var db = openRequest.result;
db.createObjectStore(FS.DB_STORE_NAME);
};
openRequest.onsuccess = function openRequest_onsuccess() {
var db = openRequest.result;
var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
var files = transaction.objectStore(FS.DB_STORE_NAME);
var ok = 0, fail = 0, total = paths.length;
function finish() {
if (fail == 0) onload(); else onerror();
}
paths.forEach(function(path) {
var putRequest = files.put(FS.analyzePath(path).object.contents, path);
putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() };
putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
});
transaction.onerror = onerror;
};
openRequest.onerror = onerror;
},loadFilesFromDB:function (paths, onload, onerror) {
onload = onload || function(){};
onerror = onerror || function(){};
var indexedDB = FS.indexedDB();
try {
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
} catch (e) {
return onerror(e);
}
openRequest.onupgradeneeded = onerror; // no database to load from
openRequest.onsuccess = function openRequest_onsuccess() {
var db = openRequest.result;
try {
var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
} catch(e) {
onerror(e);
return;
}
var files = transaction.objectStore(FS.DB_STORE_NAME);
var ok = 0, fail = 0, total = paths.length;
function finish() {
if (fail == 0) onload(); else onerror();
}
paths.forEach(function(path) {
var getRequest = files.get(path);
getRequest.onsuccess = function getRequest_onsuccess() {
if (FS.analyzePath(path).exists) {
FS.unlink(path);
}
FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
ok++;
if (ok + fail == total) finish();
};
getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
});
transaction.onerror = onerror;
};
openRequest.onerror = onerror;
}};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function (dirfd, path) {
if (path[0] !== '/') {
// relative path
var dir;
if (dirfd === -100) {
dir = FS.cwd();
} else {
var dirstream = FS.getStream(dirfd);
if (!dirstream) throw new FS.ErrnoError(ERRNO_CODES.EBADF);
dir = dirstream.path;
}
path = PATH.join2(dir, path);
}
return path;
},doStat:function (func, path, buf) {
try {
var stat = func(path);
} catch (e) {
if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) {
// an error occurred while trying to look up the path; we should just report ENOTDIR
return -ERRNO_CODES.ENOTDIR;
}
throw e;
}
HEAP32[((buf)>>2)]=stat.dev;
HEAP32[(((buf)+(4))>>2)]=0;
HEAP32[(((buf)+(8))>>2)]=stat.ino;
HEAP32[(((buf)+(12))>>2)]=stat.mode;
HEAP32[(((buf)+(16))>>2)]=stat.nlink;
HEAP32[(((buf)+(20))>>2)]=stat.uid;
HEAP32[(((buf)+(24))>>2)]=stat.gid;
HEAP32[(((buf)+(28))>>2)]=stat.rdev;
HEAP32[(((buf)+(32))>>2)]=0;
HEAP32[(((buf)+(36))>>2)]=stat.size;
HEAP32[(((buf)+(40))>>2)]=4096;
HEAP32[(((buf)+(44))>>2)]=stat.blocks;
HEAP32[(((buf)+(48))>>2)]=(stat.atime.getTime() / 1000)|0;
HEAP32[(((buf)+(52))>>2)]=0;
HEAP32[(((buf)+(56))>>2)]=(stat.mtime.getTime() / 1000)|0;
HEAP32[(((buf)+(60))>>2)]=0;
HEAP32[(((buf)+(64))>>2)]=(stat.ctime.getTime() / 1000)|0;
HEAP32[(((buf)+(68))>>2)]=0;
HEAP32[(((buf)+(72))>>2)]=stat.ino;
return 0;
},doMsync:function (addr, stream, len, flags) {
var buffer = new Uint8Array(HEAPU8.subarray(addr, addr + len));
FS.msync(stream, buffer, 0, len, flags);
},doMkdir:function (path, mode) {
// remove a trailing slash, if one - /a/b/ has basename of '', but
// we want to create b in the context of this function
path = PATH.normalize(path);
if (path[path.length-1] === '/') path = path.substr(0, path.length-1);
FS.mkdir(path, mode, 0);
return 0;
},doMknod:function (path, mode, dev) {
// we don't want this in the JS API as it uses mknod to create all nodes.
switch (mode & 61440) {
case 32768:
case 8192:
case 24576:
case 4096:
case 49152:
break;
default: return -ERRNO_CODES.EINVAL;
}
FS.mknod(path, mode, dev);
return 0;
},doReadlink:function (path, buf, bufsize) {
if (bufsize <= 0) return -ERRNO_CODES.EINVAL;
var ret = FS.readlink(path);
var len = Math.min(bufsize, lengthBytesUTF8(ret));
var endChar = HEAP8[buf+len];
stringToUTF8(ret, buf, bufsize+1);
// readlink is one of the rare functions that write out a C string, but does never append a null to the output buffer(!)
// stringToUTF8() always appends a null byte, so restore the character under the null byte after the write.
HEAP8[buf+len] = endChar;
return len;
},doAccess:function (path, amode) {
if (amode & ~7) {
// need a valid mode
return -ERRNO_CODES.EINVAL;
}
var node;
var lookup = FS.lookupPath(path, { follow: true });
node = lookup.node;
var perms = '';
if (amode & 4) perms += 'r';
if (amode & 2) perms += 'w';
if (amode & 1) perms += 'x';
if (perms /* otherwise, they've just passed F_OK */ && FS.nodePermissions(node, perms)) {
return -ERRNO_CODES.EACCES;
}
return 0;
},doDup:function (path, flags, suggestFD) {
var suggest = FS.getStream(suggestFD);
if (suggest) FS.close(suggest);
return FS.open(path, flags, 0, suggestFD, suggestFD).fd;
},doReadv:function (stream, iov, iovcnt, offset) {
var ret = 0;
for (var i = 0; i < iovcnt; i++) {
var ptr = HEAP32[(((iov)+(i*8))>>2)];
var len = HEAP32[(((iov)+(i*8 + 4))>>2)];
var curr = FS.read(stream, HEAP8,ptr, len, offset);
if (curr < 0) return -1;
ret += curr;
if (curr < len) break; // nothing more to read
}
return ret;
},doWritev:function (stream, iov, iovcnt, offset) {
var ret = 0;
for (var i = 0; i < iovcnt; i++) {
var ptr = HEAP32[(((iov)+(i*8))>>2)];
var len = HEAP32[(((iov)+(i*8 + 4))>>2)];
var curr = FS.write(stream, HEAP8,ptr, len, offset);
if (curr < 0) return -1;
ret += curr;
}
return ret;
},varargs:0,get:function (varargs) {
SYSCALLS.varargs += 4;
var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];
return ret;
},getStr:function () {
var ret = Pointer_stringify(SYSCALLS.get());
return ret;
},getStreamFromFD:function () {
var stream = FS.getStream(SYSCALLS.get());
if (!stream) throw new FS.ErrnoError(ERRNO_CODES.EBADF);
return stream;
},getSocketFromFD:function () {
var socket = SOCKFS.getSocket(SYSCALLS.get());
if (!socket) throw new FS.ErrnoError(ERRNO_CODES.EBADF);
return socket;
},getSocketAddress:function (allowNull) {
var addrp = SYSCALLS.get(), addrlen = SYSCALLS.get();
if (allowNull && addrp === 0) return null;
var info = __read_sockaddr(addrp, addrlen);
if (info.errno) throw new FS.ErrnoError(info.errno);
info.addr = DNS.lookup_addr(info.addr) || info.addr;
return info;
},get64:function () {
var low = SYSCALLS.get(), high = SYSCALLS.get();
if (low >= 0) assert(high === 0);
else assert(high === -1);
return low;
},getZero:function () {
assert(SYSCALLS.get() === 0);
}};function ___syscall195(which, varargs) {SYSCALLS.varargs = varargs;
try {
// SYS_stat64
var path = SYSCALLS.getStr(), buf = SYSCALLS.get();
return SYSCALLS.doStat(FS.stat, path, buf);
} catch (e) {
if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
return -e.errno;
}
}
function _pthread_condattr_destroy() { return 0; }
Module["_llvm_ctpop_i32"] = _llvm_ctpop_i32;
function _dladdr(addr, info) {
// report all function pointers as coming from this program itself XXX not really correct in any way
var fname = allocate(intArrayFromString(Module['thisProgram'] || './this.program'), 'i8', ALLOC_NORMAL); // XXX leak
HEAP32[((addr)>>2)]=fname;
HEAP32[(((addr)+(4))>>2)]=0;
HEAP32[(((addr)+(8))>>2)]=0;
HEAP32[(((addr)+(12))>>2)]=0;
return 1;
}
var PTHREAD_SPECIFIC={};
var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key, destructor) {
if (key == 0) {
return ERRNO_CODES.EINVAL;
}
HEAP32[((key)>>2)]=PTHREAD_SPECIFIC_NEXT_KEY;
// values start at 0
PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY] = 0;
PTHREAD_SPECIFIC_NEXT_KEY++;
return 0;
}
function _pthread_mutex_init() {}
var _tzname=STATICTOP; STATICTOP += 16;;
var _daylight=STATICTOP; STATICTOP += 16;;
var _timezone=STATICTOP; STATICTOP += 16;;function _tzset() {
// TODO: Use (malleable) environment variables instead of system settings.
if (_tzset.called) return;
_tzset.called = true;
HEAP32[((_timezone)>>2)]=-(new Date()).getTimezoneOffset() * 60;
var winter = new Date(2000, 0, 1);
var summer = new Date(2000, 6, 1);
HEAP32[((_daylight)>>2)]=Number(winter.getTimezoneOffset() != summer.getTimezoneOffset());
function extractZone(date) {
var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/);
return match ? match[1] : "GMT";
};
var winterName = extractZone(winter);
var summerName = extractZone(summer);
var winterNamePtr = allocate(intArrayFromString(winterName), 'i8', ALLOC_NORMAL);
var summerNamePtr = allocate(intArrayFromString(summerName), 'i8', ALLOC_NORMAL);
if (summer.getTimezoneOffset() < winter.getTimezoneOffset()) {
// Northern hemisphere
HEAP32[((_tzname)>>2)]=winterNamePtr;
HEAP32[(((_tzname)+(4))>>2)]=summerNamePtr;
} else {
HEAP32[((_tzname)>>2)]=summerNamePtr;
HEAP32[(((_tzname)+(4))>>2)]=winterNamePtr;
}
}function _mktime(tmPtr) {
_tzset();
var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900,
HEAP32[(((tmPtr)+(16))>>2)],
HEAP32[(((tmPtr)+(12))>>2)],
HEAP32[(((tmPtr)+(8))>>2)],
HEAP32[(((tmPtr)+(4))>>2)],
HEAP32[((tmPtr)>>2)],
0);
// There's an ambiguous hour when the time goes back; the tm_isdst field is
// used to disambiguate it. Date() basically guesses, so we fix it up if it
// guessed wrong, or fill in tm_isdst with the guess if it's -1.
var dst = HEAP32[(((tmPtr)+(32))>>2)];
var guessedOffset = date.getTimezoneOffset();
var start = new Date(date.getFullYear(), 0, 1);
var summerOffset = new Date(2000, 6, 1).getTimezoneOffset();
var winterOffset = start.getTimezoneOffset();
var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South
if (dst < 0) {
HEAP32[(((tmPtr)+(32))>>2)]=Number(dstOffset == guessedOffset);
} else if ((dst > 0) != (dstOffset == guessedOffset)) {
var nonDstOffset = Math.max(winterOffset, summerOffset);
var trueOffset = dst > 0 ? dstOffset : nonDstOffset;
// Don't try setMinutes(date.getMinutes() + ...) -- it's messed up.
date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000);
}
HEAP32[(((tmPtr)+(24))>>2)]=date.getDay();
var yday = ((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24))|0;
HEAP32[(((tmPtr)+(28))>>2)]=yday;
return (date.getTime() / 1000)|0;
}
function _pthread_mutexattr_destroy() {}
function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;
try {
// ioctl
var stream = SYSCALLS.getStreamFromFD(), op = SYSCALLS.get();
switch (op) {
case 21505: {
if (!stream.tty) return -ERRNO_CODES.ENOTTY;
return 0;
}
case 21506: {
if (!stream.tty) return -ERRNO_CODES.ENOTTY;
return 0; // no-op, not actually adjusting terminal settings
}
case 21519: {
if (!stream.tty) return -ERRNO_CODES.ENOTTY;
var argp = SYSCALLS.get();
HEAP32[((argp)>>2)]=0;
return 0;
}
case 21520: {
if (!stream.tty) return -ERRNO_CODES.ENOTTY;
return -ERRNO_CODES.EINVAL; // not supported
}
case 21531: {
var argp = SYSCALLS.get();
return FS.ioctl(stream, op, argp);
}
default: abort('bad ioctl syscall ' + op);
}
} catch (e) {
if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
return -e.errno;
}
}
Module["_bitshift64Ashr"] = _bitshift64Ashr;
Module["_bitshift64Lshr"] = _bitshift64Lshr;
function __Unwind_GetIPInfo() {
abort('Unwind_GetIPInfo');
}
function _pthread_cleanup_push(routine, arg) {
__ATEXIT__.push(function() { Runtime.dynCall('vi', routine, [arg]) })
_pthread_cleanup_push.level = __ATEXIT__.length;
}
var _environ=STATICTOP; STATICTOP += 16;;var ___environ=_environ;function ___buildEnvironment(env) {
// WARNING: Arbitrary limit!
var MAX_ENV_VALUES = 64;
var TOTAL_ENV_SIZE = 1024;
// Statically allocate memory for the environment.
var poolPtr;
var envPtr;
if (!___buildEnvironment.called) {
___buildEnvironment.called = true;
// Set default values. Use string keys for Closure Compiler compatibility.
ENV['USER'] = ENV['LOGNAME'] = 'web_user';
ENV['PATH'] = '/';
ENV['PWD'] = '/';
ENV['HOME'] = '/home/web_user';
ENV['LANG'] = 'C';
ENV['_'] = Module['thisProgram'];
// Allocate memory.
poolPtr = allocate(TOTAL_ENV_SIZE, 'i8', ALLOC_STATIC);
envPtr = allocate(MAX_ENV_VALUES * 4,
'i8*', ALLOC_STATIC);
HEAP32[((envPtr)>>2)]=poolPtr;
HEAP32[((_environ)>>2)]=envPtr;
} else {
envPtr = HEAP32[((_environ)>>2)];
poolPtr = HEAP32[((envPtr)>>2)];
}
// Collect key=value lines.
var strings = [];
var totalSize = 0;
for (var key in env) {
if (typeof env[key] === 'string') {
var line = key + '=' + env[key];
strings.push(line);
totalSize += line.length;
}
}
if (totalSize > TOTAL_ENV_SIZE) {
throw new Error('Environment size exceeded TOTAL_ENV_SIZE!');
}
// Make new.
var ptrSize = 4;
for (var i = 0; i < strings.length; i++) {
var line = strings[i];
writeAsciiToMemory(line, poolPtr);
HEAP32[(((envPtr)+(i * ptrSize))>>2)]=poolPtr;
poolPtr += line.length + 1;
}
HEAP32[(((envPtr)+(strings.length * ptrSize))>>2)]=0;
}var ENV={};function _getenv(name) {
// char *getenv(const char *name);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/getenv.html
if (name === 0) return 0;
name = Pointer_stringify(name);
if (!ENV.hasOwnProperty(name)) return 0;
if (_getenv.ret) _free(_getenv.ret);
_getenv.ret = allocate(intArrayFromString(ENV[name]), 'i8', ALLOC_NORMAL);
return _getenv.ret;
}
function _pthread_cleanup_pop() {
assert(_pthread_cleanup_push.level == __ATEXIT__.length, 'cannot pop if something else added meanwhile!');
__ATEXIT__.pop();
_pthread_cleanup_push.level = __ATEXIT__.length;
}
function ___cxa_find_matching_catch_2() {
return ___cxa_find_matching_catch.apply(null, arguments);
}
function ___cxa_find_matching_catch_3() {
return ___cxa_find_matching_catch.apply(null, arguments);
}
Module["_pthread_mutex_unlock"] = _pthread_mutex_unlock;
function _pthread_cond_signal() { return 0; }
function _emscripten_memcpy_big(dest, src, num) {
HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
return dest;
}
Module["_memcpy"] = _memcpy;
Module["_sbrk"] = _sbrk;
Module["_bitshift64Shl"] = _bitshift64Shl;
Module["_memmove"] = _memmove;
function ___gxx_personality_v0() {
}
var cttz_i8 = allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0], "i8", ALLOC_STATIC);
Module["_llvm_cttz_i32"] = _llvm_cttz_i32;
Module["___udivmoddi4"] = ___udivmoddi4;
Module["___uremdi3"] = ___uremdi3;
function _pthread_cond_wait() { return 0; }
function ___syscall4(which, varargs) {SYSCALLS.varargs = varargs;
try {
// write
var stream = SYSCALLS.getStreamFromFD(), buf = SYSCALLS.get(), count = SYSCALLS.get();
return FS.write(stream, HEAP8,buf, count);
} catch (e) {
if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
return -e.errno;
}
}
Module["___remdi3"] = ___remdi3;
function _pthread_rwlock_unlock() { return 0; }
function _emscripten_get_now() { abort() }
function _emscripten_get_now_is_monotonic() {
// return whether emscripten_get_now is guaranteed monotonic; the Date.now
// implementation is not :(
return ENVIRONMENT_IS_NODE || (typeof dateNow !== 'undefined') ||
((ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && self['performance'] && self['performance']['now']);
}function _clock_gettime(clk_id, tp) {
// int clock_gettime(clockid_t clk_id, struct timespec *tp);
var now;
if (clk_id === 0) {
now = Date.now();
} else if (clk_id === 1 && _emscripten_get_now_is_monotonic()) {
now = _emscripten_get_now();
} else {
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
}
HEAP32[((tp)>>2)]=(now/1000)|0; // seconds
HEAP32[(((tp)+(4))>>2)]=((now % 1000)*1000*1000)|0; // nanoseconds
return 0;
}
Module["_memset"] = _memset;
function _pthread_mutexattr_settype() {}
function _abort() {
Module['abort']();
}
function _pthread_cond_destroy() { return 0; }
function _pthread_mutex_destroy() {}
function _free() {
}
Module["_free"] = _free;function ___cxa_free_exception(ptr) {
try {
return _free(ptr);
} catch(e) { // XXX FIXME
Module.printErr('exception during cxa_free_exception: ' + e);
}
}
Module["___divdi3"] = ___divdi3;
function ___lock() {}
function ___unlock() {}
function _pthread_mutexattr_init() {}
function _pthread_getspecific(key) {
return PTHREAD_SPECIFIC[key] || 0;
}
function _atexit(func, arg) {
__ATEXIT__.unshift({ func: func, arg: arg });
}
function _pthread_key_delete(key) {
if (key in PTHREAD_SPECIFIC) {
delete PTHREAD_SPECIFIC[key];
return 0;
}
return ERRNO_CODES.EINVAL;
}
function __exit(status) {
// void _exit(int status);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
Module['exit'](status);
}function _exit(status) {
__exit(status);
}
function _pthread_setspecific(key, value) {
if (!(key in PTHREAD_SPECIFIC)) {
return ERRNO_CODES.EINVAL;
}
PTHREAD_SPECIFIC[key] = value;
return 0;
}
function _malloc(bytes) {
/* Over-allocate to make sure it is byte-aligned by 8.
* This will leak memory, but this is only the dummy
* implementation (replaced by dlmalloc normally) so
* not an issue.
*/
var ptr = Runtime.dynamicAlloc(bytes + 8);
return (ptr+8) & 0xFFFFFFF8;
}
Module["_malloc"] = _malloc;function ___cxa_allocate_exception(size) {
return _malloc(size);
}
var _llvm_ctlz_i32=true;
function __emscripten_traverse_stack(args) {
if (!args || !args.callee || !args.callee.name) {
return [null, '', ''];
}
var funstr = args.callee.toString();
var funcname = args.callee.name;
var str = '(';
var first = true;
for(i in args) {
var a = args[i];
if (!first) {
str += ", ";
}
first = false;
if (typeof a === 'number' || typeof a === 'string') {
str += a;
} else {
str += '(' + typeof a + ')';
}
}
str += ')';
var caller = args.callee.caller;
args = caller ? caller.arguments : [];
if (first)
str = '';
return [args, funcname, str];
}function _emscripten_get_callstack_js(flags) {
var callstack = jsStackTrace();
// Find the symbols in the callstack that corresponds to the functions that report callstack information, and remove everyhing up to these from the output.
var iThisFunc = callstack.lastIndexOf('_emscripten_log');
var iThisFunc2 = callstack.lastIndexOf('_emscripten_get_callstack');
var iNextLine = callstack.indexOf('\n', Math.max(iThisFunc, iThisFunc2))+1;
callstack = callstack.slice(iNextLine);
// If user requested to see the original source stack, but no source map information is available, just fall back to showing the JS stack.
if (flags & 8/*EM_LOG_C_STACK*/ && typeof emscripten_source_map === 'undefined') {
Runtime.warnOnce('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with "--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js" linker flag to add source map loading to code.');
flags ^= 8/*EM_LOG_C_STACK*/;
flags |= 16/*EM_LOG_JS_STACK*/;
}
var stack_args = null;
if (flags & 128 /*EM_LOG_FUNC_PARAMS*/) {
// To get the actual parameters to the functions, traverse the stack via the unfortunately deprecated 'arguments.callee' method, if it works:
var stack_args = __emscripten_traverse_stack(arguments);
while (stack_args[1].indexOf('_emscripten_') >= 0)
stack_args = __emscripten_traverse_stack(stack_args[0]);
}
// Process all lines:
lines = callstack.split('\n');
callstack = '';
var newFirefoxRe = new RegExp('\\s*(.*?)@(.*?):([0-9]+):([0-9]+)'); // New FF30 with column info: extract components of form ' Object._main@http://server.com:4324:12'
var firefoxRe = new RegExp('\\s*(.*?)@(.*):(.*)(:(.*))?'); // Old FF without column info: extract components of form ' Object._main@http://server.com:4324'
var chromeRe = new RegExp('\\s*at (.*?) \\\((.*):(.*):(.*)\\\)'); // Extract components of form ' at Object._main (http://server.com/file.html:4324:12)'
for(l in lines) {
var line = lines[l];
var jsSymbolName = '';
var file = '';
var lineno = 0;
var column = 0;
var parts = chromeRe.exec(line);
if (parts && parts.length == 5) {
jsSymbolName = parts[1];
file = parts[2];
lineno = parts[3];
column = parts[4];
} else {
parts = newFirefoxRe.exec(line);
if (!parts) parts = firefoxRe.exec(line);
if (parts && parts.length >= 4) {
jsSymbolName = parts[1];
file = parts[2];
lineno = parts[3];
column = parts[4]|0; // Old Firefox doesn't carry column information, but in new FF30, it is present. See https://bugzilla.mozilla.org/show_bug.cgi?id=762556
} else {
// Was not able to extract this line for demangling/sourcemapping purposes. Output it as-is.
callstack += line + '\n';
continue;
}
}
// Try to demangle the symbol, but fall back to showing the original JS symbol name if not available.
var cSymbolName = (flags & 32/*EM_LOG_DEMANGLE*/) ? demangle(jsSymbolName) : jsSymbolName;
if (!cSymbolName) {
cSymbolName = jsSymbolName;
}
var haveSourceMap = false;
if (flags & 8/*EM_LOG_C_STACK*/) {
var orig = emscripten_source_map.originalPositionFor({line: lineno, column: column});
haveSourceMap = (orig && orig.source);
if (haveSourceMap) {
if (flags & 64/*EM_LOG_NO_PATHS*/) {
orig.source = orig.source.substring(orig.source.replace(/\\/g, "/").lastIndexOf('/')+1);
}
callstack += ' at ' + cSymbolName + ' (' + orig.source + ':' + orig.line + ':' + orig.column + ')\n';
}
}
if ((flags & 16/*EM_LOG_JS_STACK*/) || !haveSourceMap) {
if (flags & 64/*EM_LOG_NO_PATHS*/) {
file = file.substring(file.replace(/\\/g, "/").lastIndexOf('/')+1);
}
callstack += (haveSourceMap ? (' = '+jsSymbolName) : (' at '+cSymbolName)) + ' (' + file + ':' + lineno + ':' + column + ')\n';
}
// If we are still keeping track with the callstack by traversing via 'arguments.callee', print the function parameters as well.
if (flags & 128 /*EM_LOG_FUNC_PARAMS*/ && stack_args[0]) {
if (stack_args[1] == jsSymbolName && stack_args[2].length > 0) {
callstack = callstack.replace(/\s+$/, '');
callstack += ' with values: ' + stack_args[1] + stack_args[2] + '\n';
}
stack_args = __emscripten_traverse_stack(stack_args[0]);
}
}
// Trim extra whitespace at the end of the output.
callstack = callstack.replace(/\s+$/, '');
return callstack;
}function __Unwind_Backtrace(func, arg) {
var trace = _emscripten_get_callstack_js();
var parts = trace.split('\n');
for (var i = 0; i < parts.length; i++) {
var ret = Module.dynCall('iii', [0, arg]);
if (ret !== 0) return;
}
}
function _pthread_condattr_setclock() { return 0; }
function _pthread_rwlock_rdlock() { return 0; }
var ___tm_timezone=allocate(intArrayFromString("GMT"), "i8", ALLOC_STATIC);function _localtime_r(time, tmPtr) {
_tzset();
var date = new Date(HEAP32[((time)>>2)]*1000);
HEAP32[((tmPtr)>>2)]=date.getSeconds();
HEAP32[(((tmPtr)+(4))>>2)]=date.getMinutes();
HEAP32[(((tmPtr)+(8))>>2)]=date.getHours();
HEAP32[(((tmPtr)+(12))>>2)]=date.getDate();
HEAP32[(((tmPtr)+(16))>>2)]=date.getMonth();
HEAP32[(((tmPtr)+(20))>>2)]=date.getFullYear()-1900;
HEAP32[(((tmPtr)+(24))>>2)]=date.getDay();
var start = new Date(date.getFullYear(), 0, 1);
var yday = ((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24))|0;
HEAP32[(((tmPtr)+(28))>>2)]=yday;
HEAP32[(((tmPtr)+(36))>>2)]=-(date.getTimezoneOffset() * 60);
// DST is in December in South
var summerOffset = new Date(2000, 6, 1).getTimezoneOffset();
var winterOffset = start.getTimezoneOffset();
var dst = (date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0;
HEAP32[(((tmPtr)+(32))>>2)]=dst;
var zonePtr = HEAP32[(((_tzname)+(dst ? Runtime.QUANTUM_SIZE : 0))>>2)];
HEAP32[(((tmPtr)+(40))>>2)]=zonePtr;
return tmPtr;
}
function ___syscall3(which, varargs) {SYSCALLS.varargs = varargs;
try {
// read
var stream = SYSCALLS.getStreamFromFD(), buf = SYSCALLS.get(), count = SYSCALLS.get();
return FS.read(stream, HEAP8,buf, count);
} catch (e) {
if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
return -e.errno;
}
}
function ___syscall5(which, varargs) {SYSCALLS.varargs = varargs;
try {
// open
var pathname = SYSCALLS.getStr(), flags = SYSCALLS.get(), mode = SYSCALLS.get() // optional TODO
var stream = FS.open(pathname, flags, mode);
return stream.fd;
} catch (e) {
if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
return -e.errno;
}
}
function _pthread_cond_init() { return 0; }
function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;
try {
// close
var stream = SYSCALLS.getStreamFromFD();
FS.close(stream);
return 0;
} catch (e) {
if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
return -e.errno;
}
}
var _llvm_nacl_atomic_cmpxchg_i8=undefined;
Module["___udivdi3"] = ___udivdi3;
Module["___muldsi3"] = ___muldsi3;
Module["___muldi3"] = ___muldi3;
function _pthread_condattr_init() { return 0; }
function _llvm_trap() {
abort('trap!');
}
Module["_pthread_self"] = _pthread_self;
function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;
try {
// llseek
var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();
var offset = offset_low;
assert(offset_high === 0);
FS.llseek(stream, offset, whence);
HEAP32[((result)>>2)]=stream.position;
if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state
return 0;
} catch (e) {
if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
return -e.errno;
}
}
function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;
try {
// writev
var stream = SYSCALLS.getStreamFromFD(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();
return SYSCALLS.doWritev(stream, iov, iovcnt);
} catch (e) {
if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
return -e.errno;
}
}
var _llvm_nacl_atomic_cmpxchg_i32=undefined;
function ___syscall220(which, varargs) {SYSCALLS.varargs = varargs;
try {
// SYS_getdents64
var stream = SYSCALLS.getStreamFromFD(), dirp = SYSCALLS.get(), count = SYSCALLS.get();
if (!stream.getdents) {
stream.getdents = FS.readdir(stream.path);
}
var pos = 0;
while (stream.getdents.length > 0 && pos + 268 < count) {
var id;
var type;
var name = stream.getdents.pop();
assert(name.length < 256); // limit of dirent struct
if (name[0] === '.') {
id = 1;
type = 4; // DT_DIR
} else {
var child = FS.lookupNode(stream.node, name);
id = child.id;
type = FS.isChrdev(child.mode) ? 2 : // DT_CHR, character device.
FS.isDir(child.mode) ? 4 : // DT_DIR, directory.
FS.isLink(child.mode) ? 10 : // DT_LNK, symbolic link.
8; // DT_REG, regular file.
}
HEAP32[((dirp + pos)>>2)]=id;
HEAP32[(((dirp + pos)+(4))>>2)]=stream.position;
HEAP16[(((dirp + pos)+(8))>>1)]=268;
HEAP8[(((dirp + pos)+(10))>>0)]=type;
for (var i = 0; i < name.length; i++) {
HEAP8[(((dirp + pos)+(11 + i))>>0)]=name.charCodeAt(i);
}
HEAP8[(((dirp + pos)+(11 + i))>>0)]=0;
pos += 268;
}
return pos;
} catch (e) {
if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);
return -e.errno;
}
}
FS.staticInit();__ATINIT__.unshift(function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() });__ATMAIN__.push(function() { FS.ignorePermissions = false });__ATEXIT__.push(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;Module["FS_unlink"] = FS.unlink;;
__ATINIT__.unshift(function() { TTY.init() });__ATEXIT__.push(function() { TTY.shutdown() });;
if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); var NODEJS_PATH = require("path"); NODEFS.staticInit(); };
___buildEnvironment(ENV);;
if (ENVIRONMENT_IS_NODE) {
_emscripten_get_now = function _emscripten_get_now_actual() {
var t = process['hrtime']();
return t[0] * 1e3 + t[1] / 1e6;
};
} else if (typeof dateNow !== 'undefined') {
_emscripten_get_now = dateNow;
} else if (typeof self === 'object' && self['performance'] && typeof self['performance']['now'] === 'function') {
_emscripten_get_now = function() { return self['performance']['now'](); };
} else if (typeof performance === 'object' && typeof performance['now'] === 'function') {
_emscripten_get_now = function() { return performance['now'](); };
} else {
_emscripten_get_now = Date.now;
};
DYNAMICTOP_PTR = allocate(1, "i32", ALLOC_STATIC);
STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
STACK_MAX = STACK_BASE + TOTAL_STACK;
DYNAMIC_BASE = Runtime.alignMemory(STACK_MAX);
HEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;
staticSealed = true; // seal the static portion of memory
assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
function nullFunc_iiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'iiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_viiiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_viiiiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_viiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_i(x) { Module["printErr"]("Invalid function pointer called with signature 'i'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_vi(x) { Module["printErr"]("Invalid function pointer called with signature 'vi'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_vii(x) { Module["printErr"]("Invalid function pointer called with signature 'vii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_iiiiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'iiiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_ii(x) { Module["printErr"]("Invalid function pointer called with signature 'ii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_iiii(x) { Module["printErr"]("Invalid function pointer called with signature 'iiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_viii(x) { Module["printErr"]("Invalid function pointer called with signature 'viii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_viiiiiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiiiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_v(x) { Module["printErr"]("Invalid function pointer called with signature 'v'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_viiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_iii(x) { Module["printErr"]("Invalid function pointer called with signature 'iii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_diiii(x) { Module["printErr"]("Invalid function pointer called with signature 'diiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function nullFunc_iiiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'iiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) }
function invoke_iiiii(index,a1,a2,a3,a4) {
try {
return Module["dynCall_iiiii"](index,a1,a2,a3,a4);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
try {
Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {
try {
Module["dynCall_viiiiiii"](index,a1,a2,a3,a4,a5,a6,a7);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_viiiii(index,a1,a2,a3,a4,a5) {
try {
Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_i(index) {
try {
return Module["dynCall_i"](index);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_vi(index,a1) {
try {
Module["dynCall_vi"](index,a1);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_vii(index,a1,a2) {
try {
Module["dynCall_vii"](index,a1,a2);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6) {
try {
return Module["dynCall_iiiiiii"](index,a1,a2,a3,a4,a5,a6);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_ii(index,a1) {
try {
return Module["dynCall_ii"](index,a1);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_iiii(index,a1,a2,a3) {
try {
return Module["dynCall_iiii"](index,a1,a2,a3);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_viii(index,a1,a2,a3) {
try {
Module["dynCall_viii"](index,a1,a2,a3);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8) {
try {
Module["dynCall_viiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_v(index) {
try {
Module["dynCall_v"](index);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_viiii(index,a1,a2,a3,a4) {
try {
Module["dynCall_viiii"](index,a1,a2,a3,a4);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_iii(index,a1,a2) {
try {
return Module["dynCall_iii"](index,a1,a2);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_diiii(index,a1,a2,a3,a4) {
try {
return Module["dynCall_diiii"](index,a1,a2,a3,a4);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_iiiiii(index,a1,a2,a3,a4,a5) {
try {
return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
Module.asmGlobalArg = { "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array, "NaN": NaN, "Infinity": Infinity, "SIMD": SIMD };
Module.asmLibraryArg = { "abort": abort, "assert": assert, "enlargeMemory": enlargeMemory, "getTotalMemory": getTotalMemory, "abortOnCannotGrowMemory": abortOnCannotGrowMemory, "abortStackOverflow": abortStackOverflow, "nullFunc_iiiii": nullFunc_iiiii, "nullFunc_viiiiii": nullFunc_viiiiii, "nullFunc_viiiiiii": nullFunc_viiiiiii, "nullFunc_viiiii": nullFunc_viiiii, "nullFunc_i": nullFunc_i, "nullFunc_vi": nullFunc_vi, "nullFunc_vii": nullFunc_vii, "nullFunc_iiiiiii": nullFunc_iiiiiii, "nullFunc_ii": nullFunc_ii, "nullFunc_iiii": nullFunc_iiii, "nullFunc_viii": nullFunc_viii, "nullFunc_viiiiiiii": nullFunc_viiiiiiii, "nullFunc_v": nullFunc_v, "nullFunc_viiii": nullFunc_viiii, "nullFunc_iii": nullFunc_iii, "nullFunc_diiii": nullFunc_diiii, "nullFunc_iiiiii": nullFunc_iiiiii, "invoke_iiiii": invoke_iiiii, "invoke_viiiiii": invoke_viiiiii, "invoke_viiiiiii": invoke_viiiiiii, "invoke_viiiii": invoke_viiiii, "invoke_i": invoke_i, "invoke_vi": invoke_vi, "invoke_vii": invoke_vii, "invoke_iiiiiii": invoke_iiiiiii, "invoke_ii": invoke_ii, "invoke_iiii": invoke_iiii, "invoke_viii": invoke_viii, "invoke_viiiiiiii": invoke_viiiiiiii, "invoke_v": invoke_v, "invoke_viiii": invoke_viiii, "invoke_iii": invoke_iii, "invoke_diiii": invoke_diiii, "invoke_iiiiii": invoke_iiiiii, "_pthread_cleanup_pop": _pthread_cleanup_pop, "___syscall220": ___syscall220, "_pthread_cond_wait": _pthread_cond_wait, "_emscripten_get_now_is_monotonic": _emscripten_get_now_is_monotonic, "___syscall54": ___syscall54, "_pthread_cleanup_push": _pthread_cleanup_push, "__Unwind_FindEnclosingFunction": __Unwind_FindEnclosingFunction, "_emscripten_get_callstack_js": _emscripten_get_callstack_js, "___gxx_personality_v0": ___gxx_personality_v0, "___cxa_free_exception": ___cxa_free_exception, "___cxa_find_matching_catch_2": ___cxa_find_matching_catch_2, "__ZSt18uncaught_exceptionv": __ZSt18uncaught_exceptionv, "___buildEnvironment": ___buildEnvironment, "_pthread_cond_init": _pthread_cond_init, "__Unwind_GetIPInfo": __Unwind_GetIPInfo, "_clock_gettime": _clock_gettime, "_pthread_mutexattr_destroy": _pthread_mutexattr_destroy, "_pthread_cond_signal": _pthread_cond_signal, "_localtime_r": _localtime_r, "_tzset": _tzset, "___setErrNo": ___setErrNo, "_pthread_rwlock_unlock": _pthread_rwlock_unlock, "_pthread_key_delete": _pthread_key_delete, "___cxa_allocate_exception": ___cxa_allocate_exception, "_pthread_rwlock_rdlock": _pthread_rwlock_rdlock, "___resumeException": ___resumeException, "___cxa_find_matching_catch": ___cxa_find_matching_catch, "_pthread_condattr_setclock": _pthread_condattr_setclock, "_mktime": _mktime, "_pthread_getspecific": _pthread_getspecific, "___cxa_find_matching_catch_3": ___cxa_find_matching_catch_3, "___syscall195": ___syscall195, "__emscripten_traverse_stack": __emscripten_traverse_stack, "_pthread_mutex_destroy": _pthread_mutex_destroy, "_abort": _abort, "_pthread_condattr_init": _pthread_condattr_init, "_pthread_mutexattr_settype": _pthread_mutexattr_settype, "_dladdr": _dladdr, "_pthread_condattr_destroy": _pthread_condattr_destroy, "_pthread_key_create": _pthread_key_create, "___unlock": ___unlock, "___syscall140": ___syscall140, "_emscripten_memcpy_big": _emscripten_memcpy_big, "_exit": _exit, "_emscripten_get_now": _emscripten_get_now, "_pthread_mutexattr_init": _pthread_mutexattr_init, "_pthread_setspecific": _pthread_setspecific, "_getenv": _getenv, "___cxa_throw": ___cxa_throw, "__exit": __exit, "___lock": ___lock, "___syscall6": ___syscall6, "___syscall5": ___syscall5, "___syscall4": ___syscall4, "___syscall3": ___syscall3, "_pthread_cond_destroy": _pthread_cond_destroy, "_atexit": _atexit, "_llvm_trap": _llvm_trap, "_pthread_mutex_init": _pthread_mutex_init, "__Unwind_Backtrace": __Unwind_Backtrace, "___syscall146": ___syscall146, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "DYNAMICTOP_PTR": DYNAMICTOP_PTR, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "cttz_i8": cttz_i8 };
// EMSCRIPTEN_START_ASM
var asm = (function(global, env, buffer) {
'almost asm';
var HEAP8 = new global.Int8Array(buffer);
var HEAP16 = new global.Int16Array(buffer);
var HEAP32 = new global.Int32Array(buffer);
var HEAPU8 = new global.Uint8Array(buffer);
var HEAPU16 = new global.Uint16Array(buffer);
var HEAPU32 = new global.Uint32Array(buffer);
var HEAPF32 = new global.Float32Array(buffer);
var HEAPF64 = new global.Float64Array(buffer);
var STACKTOP=env.STACKTOP|0;
var STACK_MAX=env.STACK_MAX|0;
var DYNAMICTOP_PTR=env.DYNAMICTOP_PTR|0;
var tempDoublePtr=env.tempDoublePtr|0;
var ABORT=env.ABORT|0;
var cttz_i8=env.cttz_i8|0;
var __THREW__ = 0;
var threwValue = 0;
var setjmpId = 0;
var undef = 0;
var nan = global.NaN, inf = global.Infinity;
var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0;
var tempRet0 = 0;
var Math_floor=global.Math.floor;
var Math_abs=global.Math.abs;
var Math_sqrt=global.Math.sqrt;
var Math_pow=global.Math.pow;
var Math_cos=global.Math.cos;
var Math_sin=global.Math.sin;
var Math_tan=global.Math.tan;
var Math_acos=global.Math.acos;
var Math_asin=global.Math.asin;
var Math_atan=global.Math.atan;
var Math_atan2=global.Math.atan2;
var Math_exp=global.Math.exp;
var Math_log=global.Math.log;
var Math_ceil=global.Math.ceil;
var Math_imul=global.Math.imul;
var Math_min=global.Math.min;
var Math_max=global.Math.max;
var Math_clz32=global.Math.clz32;
var Math_fround=global.Math.fround;
var abort=env.abort;
var assert=env.assert;
var enlargeMemory=env.enlargeMemory;
var getTotalMemory=env.getTotalMemory;
var abortOnCannotGrowMemory=env.abortOnCannotGrowMemory;
var abortStackOverflow=env.abortStackOverflow;
var nullFunc_iiiii=env.nullFunc_iiiii;
var nullFunc_viiiiii=env.nullFunc_viiiiii;
var nullFunc_viiiiiii=env.nullFunc_viiiiiii;
var nullFunc_viiiii=env.nullFunc_viiiii;
var nullFunc_i=env.nullFunc_i;
var nullFunc_vi=env.nullFunc_vi;
var nullFunc_vii=env.nullFunc_vii;
var nullFunc_iiiiiii=env.nullFunc_iiiiiii;
var nullFunc_ii=env.nullFunc_ii;
var nullFunc_iiii=env.nullFunc_iiii;
var nullFunc_viii=env.nullFunc_viii;
var nullFunc_viiiiiiii=env.nullFunc_viiiiiiii;
var nullFunc_v=env.nullFunc_v;
var
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment