2013-06-24 13:25:58 +00:00
// Copyright 1986 - 1993, 1998, 2004 Thomas Williams, Colin Kelley
//
// Permission to use, copy, and distribute this software and its
// documentation for any purpose with or without fee is hereby granted,
// provided that the above copyright notice appear in all copies and
// that both that copyright notice and this permission notice appear
// in supporting documentation.
//
// Permission to modify the software is granted, but not the right to
// distribute the complete modified source code. Modifications are to
// be distributed as patches to the released version. Permission to
// distribute binaries produced by compiling modified sources is granted,
// provided you
// 1. distribute the corresponding source modifications from the
// released version in the form of a patch file along with the binaries,
// 2. add special version identification to distinguish your version
// in addition to the base release version number,
// 3. provide your name and address as the primary contact for the
// support of your modified version, and
// 4. retain our contact information in regard to use of the base
// software.
// Permission to distribute the released version of the source code along
// with corresponding source modifications in the form of a patch file is
// granted with same provisions 2 through 4 for binary distributions.
//
// This software is provided "as is" without express or implied warranty
// to the extent permitted by applicable law.
// This Javascript port of gnuplot 4.6.3 [1] has been generated using
// Emscripten [2]. This port has been made possible by Christian Huettig [3],
// whose changes to gnuplot's source files can be found below [4] in
// accordance to gnuplot's copyright.
//
// [1] http://www.gnuplot.info/
// [2] https://github.com/kripken/emscripten/
// [3] https://github.com/chhu/gnuplot-JS
// [4] Patch to gnuplot 4.6.3
// --- gnuplot-4.6.3/src/axis.c 2012-11-08 18:13:08.000000000 +0100
// +++ gnuplot-4.6.3_mod/src/axis.c 2013-05-11 11:08:08.791587160 +0200
// @@ -467,8 +467,9 @@ copy_or_invent_formatstring(AXIS_INDEX a
// int precision = (ceil(-log10(fabs(axmax-axmin))));
// if ((axmin*axmax > 0) && precision > 4)
// sprintf(ticfmt[axis],"%%.%df", (precision>14) ? 14 : precision);
// + else
// + strcpy(ticfmt[axis], "%g");
// }
// -
// return ticfmt[axis];
// }
var Module = {
'noInitialRun' : true ,
print : function ( text ) {
self . postMessage ( { 'transaction' : - 1 , 'content' : text } ) ;
} ,
printErr : function ( text ) {
self . postMessage ( { 'transaction' : - 2 , 'content' : text } ) ;
} ,
} ;
function gnuplot _create ( ) {
// Note: For maximum-speed code, see "Optimizing Code" on the Emscripten wiki, https://github.com/kripken/emscripten/wiki/Optimizing-Code
// Note: Some Emscripten settings may limit the speed of the generated code.
try {
this [ 'Module' ] = Module ;
Module . test ;
} catch ( e ) {
this [ 'Module' ] = Module = { } ;
}
// The environment setup code below is customized to use Module.
// *** Environment setup code ***
var ENVIRONMENT _IS _NODE = typeof process === 'object' && typeof require === 'function' ;
var ENVIRONMENT _IS _WEB = typeof window === 'object' ;
var ENVIRONMENT _IS _WORKER = typeof importScripts === 'function' ;
var ENVIRONMENT _IS _SHELL = ! ENVIRONMENT _IS _WEB && ! ENVIRONMENT _IS _NODE && ! ENVIRONMENT _IS _WORKER ;
if ( typeof module === "object" ) {
module . exports = Module ;
}
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
Module [ 'print' ] = function ( x ) {
process [ 'stdout' ] . write ( x + '\n' ) ;
} ;
Module [ 'printErr' ] = function ( x ) {
process [ 'stderr' ] . write ( x + '\n' ) ;
} ;
var nodeFS = require ( 'fs' ) ;
var nodePath = require ( 'path' ) ;
Module [ 'read' ] = function ( filename , binary ) {
filename = nodePath [ 'normalize' ] ( filename ) ;
var ret = nodeFS [ 'readFileSync' ] ( filename ) ;
// The path is absolute if the normalized version is the same as the resolved.
if ( ! ret && filename != nodePath [ 'resolve' ] ( filename ) ) {
filename = path . join ( _ _dirname , '..' , 'src' , filename ) ;
ret = nodeFS [ 'readFileSync' ] ( filename ) ;
}
if ( ret && ! binary ) ret = ret . toString ( ) ;
return ret ;
} ;
Module [ 'readBinary' ] = function ( filename ) { return Module [ 'read' ] ( filename , true ) } ;
Module [ 'load' ] = function ( f ) {
globalEval ( read ( f ) ) ;
} ;
if ( ! Module [ 'arguments' ] ) {
Module [ 'arguments' ] = process [ 'argv' ] . slice ( 2 ) ;
}
}
if ( ENVIRONMENT _IS _SHELL ) {
Module [ 'print' ] = print ;
if ( typeof printErr != 'undefined' ) Module [ 'printErr' ] = printErr ; // not present in v8 or older sm
Module [ 'read' ] = read ;
Module [ 'readBinary' ] = function ( f ) {
return read ( f , 'binary' ) ;
} ;
if ( ! Module [ 'arguments' ] ) {
if ( typeof scriptArgs != 'undefined' ) {
Module [ 'arguments' ] = scriptArgs ;
} else if ( typeof arguments != 'undefined' ) {
Module [ 'arguments' ] = arguments ;
}
}
}
if ( ENVIRONMENT _IS _WEB && ! ENVIRONMENT _IS _WORKER ) {
if ( ! Module [ 'print' ] ) {
Module [ 'print' ] = function ( x ) {
console . log ( x ) ;
} ;
}
if ( ! Module [ 'printErr' ] ) {
Module [ 'printErr' ] = function ( x ) {
console . log ( x ) ;
} ;
}
}
if ( ENVIRONMENT _IS _WEB || ENVIRONMENT _IS _WORKER ) {
Module [ 'read' ] = function ( url ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( 'GET' , url , false ) ;
xhr . send ( null ) ;
return xhr . responseText ;
} ;
if ( ! Module [ 'arguments' ] ) {
if ( typeof arguments != 'undefined' ) {
Module [ 'arguments' ] = arguments ;
}
}
}
if ( ENVIRONMENT _IS _WORKER ) {
// 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
} ) ) ;
}
Module [ 'load' ] = importScripts ;
}
if ( ! ENVIRONMENT _IS _WORKER && ! ENVIRONMENT _IS _WEB && ! ENVIRONMENT _IS _NODE && ! ENVIRONMENT _IS _SHELL ) {
2017-08-02 08:23:36 +00:00
// Unreachable because SHELL is dependent on the others
2013-06-24 13:25:58 +00:00
throw 'Unknown runtime environment. Where are we?' ;
}
function globalEval ( x ) {
eval . call ( null , x ) ;
}
if ( ! Module [ 'load' ] == 'undefined' && Module [ 'read' ] ) {
Module [ 'load' ] = function ( f ) {
globalEval ( Module [ 'read' ] ( f ) ) ;
} ;
}
if ( ! Module [ 'print' ] ) {
Module [ 'print' ] = function ( ) { } ;
}
if ( ! Module [ 'printErr' ] ) {
Module [ 'printErr' ] = Module [ 'print' ] ;
}
if ( ! Module [ 'arguments' ] ) {
Module [ 'arguments' ] = [ ] ;
}
// *** Environment setup code ***
// Closure helpers
Module . print = Module [ 'print' ] ;
Module . printErr = Module [ 'printErr' ] ;
// Callbacks
if ( ! Module [ 'preRun' ] ) Module [ 'preRun' ] = [ ] ;
if ( ! Module [ 'postRun' ] ) Module [ 'postRun' ] = [ ] ;
// === Auto-generated preamble library stuff ===
//========================================
// Runtime code shared with compiler
//========================================
var Runtime = {
stackSave : function ( ) {
return STACKTOP ;
} ,
stackRestore : function ( stackTop ) {
STACKTOP = stackTop ;
} ,
forceAlign : function ( target , quantum ) {
quantum = quantum || 4 ;
if ( quantum == 1 ) return target ;
if ( isNumber ( target ) && isNumber ( quantum ) ) {
return Math . ceil ( target / quantum ) * quantum ;
} else if ( isNumber ( quantum ) && isPowerOfTwo ( quantum ) ) {
var logg = log2 ( quantum ) ;
return '((((' + target + ')+' + ( quantum - 1 ) + ')>>' + logg + ')<<' + logg + ')' ;
}
return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum ;
} ,
isNumberType : function ( type ) {
return type in Runtime . INT _TYPES || type in Runtime . FLOAT _TYPES ;
} ,
isPointerType : function isPointerType ( type ) {
return type [ type . length - 1 ] == '*' ;
} ,
isStructType : function isStructType ( type ) {
if ( isPointerType ( type ) ) return false ;
if ( isArrayType ( type ) ) return true ;
if ( /<?{ ?[^}]* ?}>?/ . test ( type ) ) return true ; // { i32, i8 } etc. - anonymous struct types
// See comment in isStructPointerType()
return type [ 0 ] == '%' ;
} ,
INT _TYPES : { "i1" : 0 , "i8" : 0 , "i16" : 0 , "i32" : 0 , "i64" : 0 } ,
FLOAT _TYPES : { "float" : 0 , "double" : 0 } ,
or64 : function ( x , y ) {
var l = ( x | 0 ) | ( y | 0 ) ;
var h = ( Math . round ( x / 4294967296 ) | Math . round ( y / 4294967296 ) ) * 4294967296 ;
return l + h ;
} ,
and64 : function ( x , y ) {
var l = ( x | 0 ) & ( y | 0 ) ;
var h = ( Math . round ( x / 4294967296 ) & Math . round ( y / 4294967296 ) ) * 4294967296 ;
return l + h ;
} ,
xor64 : function ( x , y ) {
var l = ( x | 0 ) ^ ( y | 0 ) ;
var h = ( Math . round ( x / 4294967296 ) ^ Math . round ( y / 4294967296 ) ) * 4294967296 ;
return l + h ;
} ,
getNativeTypeSize : function ( type , quantumSize ) {
if ( Runtime . QUANTUM _SIZE == 1 ) return 1 ;
var size = {
'%i1' : 1 ,
'%i8' : 1 ,
'%i16' : 2 ,
'%i32' : 4 ,
'%i64' : 8 ,
"%float" : 4 ,
"%double" : 8
} [ '%' + type ] ; // add '%' since float and double confuse Closure compiler as keys, and also spidermonkey as a compiler will remove 's from '_i8' etc
if ( ! size ) {
if ( type . charAt ( type . length - 1 ) == '*' ) {
size = Runtime . QUANTUM _SIZE ; // A pointer
} else if ( type [ 0 ] == 'i' ) {
var bits = parseInt ( type . substr ( 1 ) ) ;
assert ( bits % 8 == 0 ) ;
size = bits / 8 ;
}
}
return size ;
} ,
getNativeFieldSize : function ( type ) {
return Math . max ( Runtime . getNativeTypeSize ( type ) , Runtime . QUANTUM _SIZE ) ;
} ,
dedup : function dedup ( items , ident ) {
var seen = { } ;
if ( ident ) {
return items . filter ( function ( item ) {
if ( seen [ item [ ident ] ] ) return false ;
seen [ item [ ident ] ] = true ;
return true ;
} ) ;
} else {
return items . filter ( function ( item ) {
if ( seen [ item ] ) return false ;
seen [ item ] = true ;
return true ;
} ) ;
}
} ,
set : function set ( ) {
var args = typeof arguments [ 0 ] === 'object' ? arguments [ 0 ] : arguments ;
var ret = { } ;
for ( var i = 0 ; i < args . length ; i ++ ) {
ret [ args [ i ] ] = 0 ;
}
return ret ;
} ,
STACK _ALIGN : 8 ,
getAlignSize : function ( type , size , vararg ) {
// we align i64s and doubles on 64-bit boundaries, unlike x86
if ( type == 'i64' || type == 'double' || vararg ) 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 ) ;
} ,
calculateStructAlignment : function calculateStructAlignment ( type ) {
type . flatSize = 0 ;
type . alignSize = 0 ;
var diffs = [ ] ;
var prev = - 1 ;
type . flatIndexes = type . fields . map ( function ( field ) {
var size , alignSize ;
if ( Runtime . isNumberType ( field ) || Runtime . isPointerType ( field ) ) {
size = Runtime . getNativeTypeSize ( field ) ; // pack char; char; in structs, also char[X]s.
alignSize = Runtime . getAlignSize ( field , size ) ;
} else if ( Runtime . isStructType ( field ) ) {
size = Types . types [ field ] . flatSize ;
alignSize = Runtime . getAlignSize ( null , Types . types [ field ] . alignSize ) ;
} else if ( field [ 0 ] == 'b' ) {
// bN, large number field, like a [N x i8]
size = field . substr ( 1 ) | 0 ;
alignSize = 1 ;
} else {
throw 'Unclear type in struct: ' + field + ', in ' + type . name _ + ' :: ' + dump ( Types . types [ type . name _ ] ) ;
}
if ( type . packed ) alignSize = 1 ;
type . alignSize = Math . max ( type . alignSize , alignSize ) ;
var curr = Runtime . alignMemory ( type . flatSize , alignSize ) ; // if necessary, place this on aligned memory
type . flatSize = curr + size ;
if ( prev >= 0 ) {
diffs . push ( curr - prev ) ;
}
prev = curr ;
return curr ;
} ) ;
type . flatSize = Runtime . alignMemory ( type . flatSize , type . alignSize ) ;
if ( diffs . length == 0 ) {
type . flatFactor = type . flatSize ;
} else if ( Runtime . dedup ( diffs ) . length == 1 ) {
type . flatFactor = diffs [ 0 ] ;
}
type . needsFlattening = ( type . flatFactor != 1 ) ;
return type . flatIndexes ;
} ,
generateStructInfo : function ( struct , typeName , offset ) {
var type , alignment ;
if ( typeName ) {
offset = offset || 0 ;
type = ( typeof Types === 'undefined' ? Runtime . typeInfo : Types . types ) [ typeName ] ;
if ( ! type ) return null ;
if ( type . fields . length != struct . length ) {
printErr ( 'Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo' ) ;
return null ;
}
alignment = type . flatIndexes ;
} else {
var type = { fields : struct . map ( function ( item ) { return item [ 0 ] } ) } ;
alignment = Runtime . calculateStructAlignment ( type ) ;
}
var ret = {
_ _size _ _ : type . flatSize
} ;
if ( typeName ) {
struct . forEach ( function ( item , i ) {
if ( typeof item === 'string' ) {
ret [ item ] = alignment [ i ] + offset ;
} else {
// embedded struct
var key ;
for ( var k in item ) key = k ;
ret [ key ] = Runtime . generateStructInfo ( item [ key ] , type . fields [ i ] , alignment [ i ] ) ;
}
} ) ;
} else {
struct . forEach ( function ( item , i ) {
ret [ item [ 1 ] ] = alignment [ i ] ;
} ) ;
}
return ret ;
} ,
dynCall : function ( sig , ptr , args ) {
if ( args && args . length ) {
if ( ! args . splice ) args = Array . prototype . slice . call ( args ) ;
args . splice ( 0 , 0 , ptr ) ;
return Module [ 'dynCall_' + sig ] . apply ( null , args ) ;
} else {
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 + 2 * 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 [ func ] ) {
Runtime . funcWrappers [ func ] = function ( ) {
return Runtime . dynCall ( sig , func , arguments ) ;
} ;
}
return Runtime . funcWrappers [ func ] ;
} ,
UTF8Processor : function ( ) {
var buffer = [ ] ;
var needed = 0 ;
this . processCChar = function ( code ) {
code = code & 0xff ;
if ( needed ) {
buffer . push ( code ) ;
needed -- ;
}
if ( buffer . length == 0 ) {
if ( code < 128 ) return String . fromCharCode ( code ) ;
buffer . push ( code ) ;
if ( code > 191 && code < 224 ) {
needed = 1 ;
} else {
needed = 2 ;
}
return '' ;
}
if ( needed > 0 ) return '' ;
var c1 = buffer [ 0 ] ;
var c2 = buffer [ 1 ] ;
var c3 = buffer [ 2 ] ;
var ret ;
if ( c1 > 191 && c1 < 224 ) {
ret = String . fromCharCode ( ( ( c1 & 31 ) << 6 ) | ( c2 & 63 ) ) ;
} else {
ret = String . fromCharCode ( ( ( c1 & 15 ) << 12 ) | ( ( c2 & 63 ) << 6 ) | ( c3 & 63 ) ) ;
}
buffer . length = 0 ;
return ret ;
}
this . processJSString = function ( string ) {
string = unescape ( encodeURIComponent ( string ) ) ;
var ret = [ ] ;
for ( var i = 0 ; i < string . length ; i ++ ) {
ret . push ( string . charCodeAt ( i ) ) ;
}
return ret ;
}
} ,
stackAlloc : function ( size ) { var ret = STACKTOP ; STACKTOP = ( STACKTOP + size ) | 0 ; STACKTOP = ( ( ( ( STACKTOP ) + 7 ) >> 3 ) << 3 ) ; return ret ; } ,
staticAlloc : function ( size ) { var ret = STATICTOP ; STATICTOP = ( STATICTOP + size ) | 0 ; STATICTOP = ( ( ( ( STATICTOP ) + 7 ) >> 3 ) << 3 ) ; return ret ; } ,
dynamicAlloc : function ( size ) { var ret = DYNAMICTOP ; DYNAMICTOP = ( DYNAMICTOP + size ) | 0 ; DYNAMICTOP = ( ( ( ( DYNAMICTOP ) + 7 ) >> 3 ) << 3 ) ; if ( DYNAMICTOP >= TOTAL _MEMORY ) enlargeMemory ( ) ; ; return ret ; } ,
alignMemory : function ( size , quantum ) { var ret = size = Math . ceil ( ( size ) / ( quantum ? quantum : 8 ) ) * ( quantum ? quantum : 8 ) ; return ret ; } ,
makeBigInt : function ( low , high , unsigned ) { var ret = ( unsigned ? ( ( + ( ( ( low ) >>> ( 0 ) ) ) ) + ( ( + ( ( ( high ) >>> ( 0 ) ) ) ) * ( + ( 4294967296 ) ) ) ) : ( ( + ( ( ( low ) >>> ( 0 ) ) ) ) + ( ( + ( ( ( high ) | ( 0 ) ) ) ) * ( + ( 4294967296 ) ) ) ) ) ; return ret ; } ,
GLOBAL _BASE : 8 ,
QUANTUM _SIZE : 4 ,
_ _dummy _ _ : 0
}
//========================================
// Runtime essentials
//========================================
var _ _THREW _ _ = 0 ; // Used in checking for thrown exceptions.
var ABORT = false ; // whether we are quitting the application. no code should run after this. set in exit() and abort()
var undef = 0 ;
// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
var tempValue , tempInt , tempBigInt , tempInt2 , tempBigInt2 , tempPair , tempBigIntI , tempBigIntR , tempBigIntS , tempBigIntP , tempBigIntD ;
var tempI64 , tempI64b ;
var tempRet0 , tempRet1 , tempRet2 , tempRet3 , tempRet4 , tempRet5 , tempRet6 , tempRet7 , tempRet8 , tempRet9 ;
function abort ( text ) {
Module . print ( text + ':\n' + ( new Error ) . stack ) ;
ABORT = true ;
throw "Assertion: " + text ;
}
function assert ( condition , text ) {
if ( ! condition ) {
abort ( 'Assertion failed: ' + text ) ;
}
}
var globalScope = this ;
// C calling interface. A convenient way to call C functions (in C files, or
// defined with extern "C").
//
// Note: LLVM optimizations can inline and remove functions, after which you will not be
// able to call them. Closure can also do so. To avoid that, add your function to
// the exports using something like
//
// -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
//
// @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C")
// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
// 'array' for JavaScript arrays and typed arrays).
2017-08-02 08:23:36 +00:00
// @param argTypes An array of the types of arguments for the function (if there are no arguments, this can be omitted). Types are as in returnType,
2013-06-24 13:25:58 +00:00
// except that 'array' is not possible (there is no way for us to know the length of the array)
// @param args An array of the arguments to the function, as native JS values (as in returnType)
// Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
// @return The return value, as a native JS value (as in returnType)
function ccall ( ident , returnType , argTypes , args ) {
return ccallFunc ( getCFunc ( ident ) , returnType , argTypes , args ) ;
}
Module [ "ccall" ] = ccall ;
// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
function getCFunc ( ident ) {
try {
var func = globalScope [ 'Module' ] [ '_' + ident ] ; // closure exported function
if ( ! func ) func = eval ( '_' + ident ) ; // explicit lookup
} catch ( e ) {
}
assert ( func , 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)' ) ;
return func ;
}
// Internal function that does a C call using a function, not an identifier
function ccallFunc ( func , returnType , argTypes , args ) {
var stack = 0 ;
function toC ( value , type ) {
if ( type == 'string' ) {
if ( value === null || value === undefined || value === 0 ) return 0 ; // null string
if ( ! stack ) stack = Runtime . stackSave ( ) ;
var ret = Runtime . stackAlloc ( value . length + 1 ) ;
writeStringToMemory ( value , ret ) ;
return ret ;
} else if ( type == 'array' ) {
if ( ! stack ) stack = Runtime . stackSave ( ) ;
var ret = Runtime . stackAlloc ( value . length ) ;
writeArrayToMemory ( value , ret ) ;
return ret ;
}
return value ;
}
function fromC ( value , type ) {
if ( type == 'string' ) {
return Pointer _stringify ( value ) ;
}
assert ( type != 'array' ) ;
return value ;
}
var i = 0 ;
var cArgs = args ? args . map ( function ( arg ) {
return toC ( arg , argTypes [ i ++ ] ) ;
} ) : [ ] ;
var ret = fromC ( func . apply ( null , cArgs ) , returnType ) ;
if ( stack ) Runtime . stackRestore ( stack ) ;
return ret ;
}
// Returns a native JS wrapper for a C function. This is similar to ccall, but
// returns a function you can call repeatedly in a normal way. For example:
//
// var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
// alert(my_function(5, 22));
// alert(my_function(99, 12));
//
function cwrap ( ident , returnType , argTypes ) {
var func = getCFunc ( ident ) ;
return function ( ) {
return ccallFunc ( func , returnType , argTypes , Array . prototype . slice . call ( arguments ) ) ;
}
}
Module [ "cwrap" ] = cwrap ;
// Sets a value in memory in a dynamic way at run-time. Uses the
// type data. This is the same as makeSetValue, except that
// makeSetValue is done at compile-time and generates the needed
// code then, whereas this function picks the right code at
// run-time.
// Note that setValue and getValue only do *aligned* writes and reads!
// Note that ccall uses JS types as for defining types, while setValue and
// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
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 ) ] = value ; break ;
case 'i8' : HEAP8 [ ( ptr ) ] = value ; break ;
case 'i16' : HEAP16 [ ( ( ptr ) >> 1 ) ] = value ; break ;
case 'i32' : HEAP32 [ ( ( ptr ) >> 2 ) ] = value ; break ;
case 'i64' : ( tempI64 = [ value >>> 0 , Math . min ( Math . floor ( ( value ) / ( + ( 4294967296 ) ) ) , ( + ( 4294967295 ) ) ) >>> 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 ;
// Parallel to 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 ) ] ;
case 'i8' : return HEAP8 [ ( ptr ) ] ;
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 = [ _malloc , 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 ;
}
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 ;
function Pointer _stringify ( ptr , /* optional */ length ) {
// Find the length, and check for UTF while doing so
var hasUtf = false ;
var t ;
var i = 0 ;
while ( 1 ) {
t = HEAPU8 [ ( ( ( ptr ) + ( i ) ) | 0 ) ] ;
if ( t >= 128 ) hasUtf = true ;
else if ( t == 0 && ! length ) break ;
i ++ ;
if ( length && i == length ) break ;
}
if ( ! length ) length = i ;
var ret = '' ;
if ( ! hasUtf ) {
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 ;
}
var utf8 = new Runtime . UTF8Processor ( ) ;
for ( i = 0 ; i < length ; i ++ ) {
t = HEAPU8 [ ( ( ( ptr ) + ( i ) ) | 0 ) ] ;
ret += utf8 . processCChar ( t ) ;
}
return ret ;
}
Module [ 'Pointer_stringify' ] = Pointer _stringify ;
// Memory management
var PAGE _SIZE = 4096 ;
function alignMemoryPage ( x ) {
return ( ( x + 4095 ) >> 12 ) << 12 ;
}
var HEAP ;
var HEAP8 , HEAPU8 , HEAP16 , HEAPU16 , HEAP32 , HEAPU32 , HEAPF32 , HEAPF64 ;
var STATIC _BASE = 0 , STATICTOP = 0 , staticSealed = false ; // static area
var STACK _BASE = 0 , STACKTOP = 0 , STACK _MAX = 0 ; // stack area
var DYNAMIC _BASE = 0 , DYNAMICTOP = 0 ; // dynamic area handled by sbrk
function enlargeMemory ( ) {
abort ( 'Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value, or (2) set Module.TOTAL_MEMORY before the program runs.' ) ;
}
var TOTAL _STACK = Module [ 'TOTAL_STACK' ] || 5242880 ;
var TOTAL _MEMORY = Module [ 'TOTAL_MEMORY' ] || 16777216 ;
var FAST _MEMORY = Module [ 'FAST_MEMORY' ] || 2097152 ;
// Initialize the runtime's memory
// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
assert ( ! ! Int32Array && ! ! Float64Array && ! ! ( new Int32Array ( 1 ) [ 'subarray' ] ) && ! ! ( new Int32Array ( 1 ) [ 'set' ] ) ,
'Cannot fallback to non-typed array case: Code is too specialized' ) ;
var buffer = new ArrayBuffer ( TOTAL _MEMORY ) ;
HEAP8 = new Int8Array ( buffer ) ;
HEAP16 = new Int16Array ( buffer ) ;
HEAP32 = new Int32Array ( buffer ) ;
HEAPU8 = new Uint8Array ( buffer ) ;
HEAPU16 = new Uint16Array ( buffer ) ;
HEAPU32 = new Uint32Array ( buffer ) ;
HEAPF32 = new Float32Array ( buffer ) ;
HEAPF64 = new Float64Array ( buffer ) ;
// Endianness check (note: assumes compiler arch was little-endian)
HEAP32 [ 0 ] = 255 ;
assert ( HEAPU8 [ 0 ] === 255 && HEAPU8 [ 3 ] === 0 , 'Typed arrays 2 must be run on a little-endian system' ) ;
Module [ 'HEAP' ] = HEAP ;
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 _ _ATINIT _ _ = [ ] ; // functions called during startup
var _ _ATMAIN _ _ = [ ] ; // functions called when main() is to be run
var _ _ATEXIT _ _ = [ ] ; // functions called during shutdown
var runtimeInitialized = false ;
function ensureInitRuntime ( ) {
if ( runtimeInitialized ) return ;
runtimeInitialized = true ;
callRuntimeCallbacks ( _ _ATINIT _ _ ) ;
}
function preMain ( ) {
callRuntimeCallbacks ( _ _ATMAIN _ _ ) ;
}
function exitRuntime ( ) {
callRuntimeCallbacks ( _ _ATEXIT _ _ ) ;
}
// Tools
// This processes a JS string into a C-line array of numbers, 0-terminated.
// For LLVM-originating strings, see parser.js:parseLLVMString function
function intArrayFromString ( stringy , dontAddNull , length /* optional */ ) {
var ret = ( new Runtime . UTF8Processor ( ) ) . processJSString ( stringy ) ;
if ( length ) {
ret . length = length ;
}
if ( ! dontAddNull ) {
ret . push ( 0 ) ;
}
return ret ;
}
Module [ 'intArrayFromString' ] = intArrayFromString ;
function intArrayToString ( array ) {
var ret = [ ] ;
for ( var i = 0 ; i < array . length ; i ++ ) {
var chr = array [ i ] ;
if ( chr > 0xFF ) {
chr &= 0xFF ;
}
ret . push ( String . fromCharCode ( chr ) ) ;
}
return ret . join ( '' ) ;
}
Module [ 'intArrayToString' ] = intArrayToString ;
// Write a Javascript array to somewhere in the heap
function writeStringToMemory ( string , buffer , dontAddNull ) {
var array = intArrayFromString ( string , dontAddNull ) ;
var i = 0 ;
while ( i < array . length ) {
var chr = array [ i ] ;
HEAP8 [ ( ( ( buffer ) + ( i ) ) | 0 ) ] = chr
i = i + 1 ;
}
}
Module [ 'writeStringToMemory' ] = writeStringToMemory ;
function writeArrayToMemory ( array , buffer ) {
for ( var i = 0 ; i < array . length ; i ++ ) {
HEAP8 [ ( ( ( buffer ) + ( i ) ) | 0 ) ] = array [ i ] ;
}
}
Module [ 'writeArrayToMemory' ] = writeArrayToMemory ;
function unSign ( value , bits , ignore , sig ) {
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 , sig ) {
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 ;
}
if ( ! Math [ 'imul' ] ) Math [ 'imul' ] = function ( 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 ;
} ;
// 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 runDependencyTracking = { } ;
var calledInit = false , calledRun = false ;
var runDependencyWatcher = null ;
function addRunDependency ( id ) {
runDependencies ++ ;
if ( Module [ 'monitorRunDependencies' ] ) {
Module [ 'monitorRunDependencies' ] ( runDependencies ) ;
}
if ( id ) {
assert ( ! runDependencyTracking [ id ] ) ;
runDependencyTracking [ id ] = 1 ;
} 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 run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
if ( ! calledRun && shouldRunNow ) run ( ) ;
}
}
Module [ 'removeRunDependency' ] = removeRunDependency ;
Module [ "preloadedImages" ] = { } ; // maps url to image data
Module [ "preloadedAudios" ] = { } ; // maps url to audio data
function addPreRun ( func ) {
if ( ! Module [ 'preRun' ] ) Module [ 'preRun' ] = [ ] ;
else if ( typeof Module [ 'preRun' ] == 'function' ) Module [ 'preRun' ] = [ Module [ 'preRun' ] ] ;
Module [ 'preRun' ] . push ( func ) ;
}
var awaitingMemoryInitializer = false ;
function loadMemoryInitializer ( filename ) {
function applyData ( data ) {
HEAPU8 . set ( data , STATIC _BASE ) ;
runPostSets ( ) ;
}
// always do this asynchronously, to keep shell and web as similar as possible
addPreRun ( function ( ) {
if ( ENVIRONMENT _IS _NODE || ENVIRONMENT _IS _SHELL ) {
applyData ( Module [ 'readBinary' ] ( filename ) ) ;
} else {
Browser . asyncLoad ( filename , function ( data ) {
applyData ( data ) ;
} , function ( data ) {
throw 'could not load memory initializer ' + filename ;
} ) ;
}
} ) ;
awaitingMemoryInitializer = false ;
}
// === Body ===
STATIC _BASE = 8 ;
STATICTOP = STATIC _BASE + 243440 ;
var _stdout ;
var _stdin ;
var _stderr ;
var _stdout = _stdout = allocate ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , "i8" , ALLOC _STATIC ) ;
var _stdin = _stdin = allocate ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , "i8" , ALLOC _STATIC ) ;
var _stderr = _stderr = allocate ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , "i8" , ALLOC _STATIC ) ;
/* memory initializer */ allocate ( [ 0 , 0 , 128 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 90 , 71 , 110 , 117 , 112 , 108 , 111 , 116 , 80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 90 , 71 , 110 , 117 , 112 , 108 , 111 , 116 , 68 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 90 , 71 , 110 , 117 , 112 , 108 , 111 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 140 , 48 , 226 , 142 , 121 , 69 , 62 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 224 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 144 , 139 , 1 , 0 , 240 , 84 , 3 , 0 , 80 , 126 , 1 , 0 , 0 , 0 , 0 , 0 , 80 , 131 , 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 , 160 , 134 , 1 , 0 , 248 , 132 , 1 , 0 , 232 , 123 , 1 , 0 , 0 , 0 , 0 , 0 , 224 , 128 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 85 , 1 , 0 , 8 , 0 , 0 , 0 , 208 , 80 , 1 , 0 , 9 , 0 , 0 , 0 , 192 , 76 , 1 , 0 , 10 , 0 , 0 , 0 , 64 , 73 , 1 , 0 , 13 , 0 , 0 , 0 , 240 , 70 , 1 , 0 , 27 , 0 , 0 , 0 , 40 , 67 , 1 , 0 , 127 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 31 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 88 , 244 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 255 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 252 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 252 , 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 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 252 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 252 , 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 , 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 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 154 , 153 , 153 , 153 , 153 , 153 , 169 , 63 , 184 , 30 , 133 , 235 , 81 , 184 , 158 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 252 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 252 , 255 , 255 , 255 , 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 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 123 , 20 , 174 , 71 , 225 , 122 , 148 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 118 , 64 , 0 , 0 , 0 , 0
. concat ( [ 240 , 230 , 1 , 0 , 40 , 226 , 1 , 0 , 224 , 220 , 1 , 0 , 48 , 214 , 1 , 0 , 40 , 209 , 1 , 0 , 160 , 197 , 1 , 0 , 56 , 194 , 1 , 0 , 128 , 190 , 1 , 0 , 192 , 177 , 1 , 0 , 216 , 165 , 1 , 0 , 16 , 162 , 1 , 0 , 184 , 158 , 1 , 0 , 48 , 154 , 1 , 0 , 224 , 151 , 1 , 0 , 240 , 149 , 1 , 0 , 128 , 148 , 1 , 0 , 224 , 139 , 1 , 0 , 240 , 137 , 1 , 0 , 8 , 135 , 1 , 0 , 88 , 133 , 1 , 0 , 144 , 131 , 1 , 0 , 152 , 129 , 1 , 0 , 8 , 127 , 1 , 0 , 96 , 124 , 1 , 0 , 32 , 122 , 1 , 0 , 72 , 120 , 1 , 0 , 200 , 118 , 1 , 0 , 192 , 116 , 1 , 0 , 8 , 115 , 1 , 0 , 56 , 112 , 1 , 0 , 216 , 109 , 1 , 0 , 160 , 107 , 1 , 0 , 184 , 103 , 1 , 0 , 8 , 101 , 1 , 0 , 136 , 98 , 1 , 0 , 232 , 96 , 1 , 0 , 88 , 94 , 1 , 0 , 104 , 92 , 1 , 0 , 80 , 89 , 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 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 199 , 1 , 0 , 1 , 0 , 0 , 0 , 88 , 199 , 1 , 0 , 2 , 0 , 0 , 0 , 224 , 198 , 1 , 0 , 3 , 0 , 0 , 0 , 40 , 43 , 1 , 0 , 4 , 0 , 0 , 0 , 136 , 198 , 1 , 0 , 4 , 0 , 0 , 0 , 176 , 111 , 1 , 0 , 5 , 0 , 0 , 0 , 88 , 198 , 1 , 0 , 9 , 0 , 0 , 0 , 232 , 197 , 1 , 0 , 10 , 0 , 0 , 0 , 152 , 197 , 1 , 0 , 6 , 0 , 0 , 0 , 8 , 197 , 1 , 0 , 7 , 0 , 0 , 0 , 112 , 196 , 1 , 0 , 8 , 0 , 0 , 0 , 248 , 195 , 1 , 0 , 11 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 248 , 60 , 1 , 0 , 56 , 55 , 1 , 0 , 88 , 52 , 1 , 0 , 48 , 50 , 1 , 0 , 200 , 48 , 1 , 0 , 0 , 0 , 0 , 0 , 16 , 241 , 1 , 0 , 152 , 240 , 1 , 0 , 88 , 52 , 1 , 0 , 48 , 50 , 1 , 0 , 200 , 48 , 1 , 0 , 0 , 0 , 0 , 0 , 16 , 241 , 1 , 0 , 152 , 240 , 1 , 0 , 88 , 52 , 1 , 0 , 48 , 50 , 1 , 0 , 104 , 249 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 115 , 115 , 99 , 97 , 108 , 101 , 32 , 109 , 117 , 115 , 116 , 32 , 98 , 101 , 32 , 62 , 32 , 48 , 59 , 32 , 118 , 105 , 101 , 119 , 32 , 117 , 110 , 99 , 104 , 97 , 110 , 103 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 114 , 111 , 116 , 95 , 37 , 99 , 32 , 109 , 117 , 115 , 116 , 32 , 98 , 101 , 32 , 105 , 110 , 32 , 91 , 48 , 58 , 37 , 100 , 93 , 32 , 100 , 101 , 103 , 114 , 101 , 101 , 115 , 32 , 114 , 97 , 110 , 103 , 101 , 59 , 32 , 118 , 105 , 101 , 119 , 32 , 117 , 110 , 99 , 104 , 97 , 110 , 103 , 101 , 100 , 0 , 0 , 232 , 119 , 1 , 0 , 2 , 0 , 0 , 0 , 16 , 118 , 1 , 0 , 1 , 0 , 0 , 0 , 48 , 116 , 1 , 0 , 1 , 0 , 0 , 0 , 96 , 114 , 1 , 0 , 3 , 0 , 0 , 0 , 176 , 111 , 1 , 0 , 4 , 0 , 0 , 0 , 56 , 109 , 1 , 0 , 5 , 0 , 0 , 0 , 248 , 105 , 1 , 0 , 6 , 0 , 0 , 0 , 8 , 199 , 1 , 0 , 7 , 0 , 0 , 0 , 40 , 100 , 1 , 0 , 8 , 0 , 0 , 0 , 232 , 97 , 1 , 0 , 9 , 0 , 0 , 0 , 248 , 95 , 1 , 0 , 10 , 0 , 0 , 0 , 32 , 93 , 1 , 0 , 11 , 0 , 0 , 0 , 56 , 91 , 1 , 0 , 12 , 0 , 0 , 0 , 0 , 89 , 1 , 0 , 13 , 0 , 0 , 0 , 0 , 84 , 1 , 0 , 14 , 0 , 0 , 0 , 224 , 79 , 1 , 0 , 15 , 0 , 0 , 0 , 16 , 75 , 1 , 0 , 17 , 0 , 0 , 0 , 232 , 72 , 1 , 0 , 18 , 0 , 0 , 0 , 160 , 69 , 1 , 0 , 19 , 0 , 0 , 0 , 16 , 66 , 1 , 0 , 20 , 0 , 0 , 0 , 80 , 60 , 1 , 0 , 21 , 0 , 0 , 0 , 248 , 54 , 1 , 0 , 22 , 0 , 0 , 0 , 24 , 52 , 1 , 0 , 23 , 0 , 0 , 0 , 248 , 49 , 1 , 0 , 16 , 0 , 0 , 0 , 96 , 48 , 1 , 0 , 16 , 0 , 0 , 0 , 0 , 46 , 1 , 0 , 24 , 0 , 0 , 0 , 184 , 43 , 1 , 0 , 25 , 0 , 0 , 0 , 96 , 41 , 1 , 0 , 26 , 0 , 0 , 0 , 24 , 39 , 1 , 0 , 27 , 0 , 0 , 0 , 104 , 37 , 1 , 0 , 28 , 0 , 0 , 0 , 104 , 35 , 1 , 0 , 29 , 0 , 0 , 0 , 200 , 33 , 1 , 0 , 30 , 0 , 0 , 0 , 96 , 32 , 1 , 0 , 31 , 0 , 0 , 0 , 208 , 30 , 1 , 0 , 32 , 0 , 0 , 0 , 112 , 28 , 1 , 0 , 31 , 0 , 0 , 0 , 32 , 111 , 3 , 0 , 32 , 0 , 0 , 0 , 80 , 109 , 3 , 0 , 33 , 0 , 0 , 0 , 80 , 105 , 3 , 0 , 34 , 0 , 0 , 0 , 240 , 102 , 3 , 0 , 35 , 0 , 0 , 0 , 64 , 101 , 3 , 0 , 36 , 0 , 0 , 0 , 32 , 98 , 3 ,
. concat ( [ 40 , 194 , 1 , 0 , 39 , 1 , 0 , 0 , 88 , 193 , 1 , 0 , 23 , 1 , 0 , 0 , 240 , 192 , 1 , 0 , 55 , 1 , 0 , 0 , 168 , 192 , 1 , 0 , 102 , 0 , 0 , 0 , 104 , 192 , 1 , 0 , 102 , 0 , 0 , 0 , 16 , 192 , 1 , 0 , 86 , 0 , 0 , 0 , 224 , 191 , 1 , 0 , 118 , 0 , 0 , 0 , 168 , 191 , 1 , 0 , 153 , 0 , 0 , 0 , 112 , 191 , 1 , 0 , 136 , 1 , 0 , 0 , 32 , 191 , 1 , 0 , 89 , 1 , 0 , 0 , 112 , 190 , 1 , 0 , 169 , 0 , 0 , 0 , 88 , 189 , 1 , 0 , 137 , 0 , 0 , 0 , 192 , 188 , 1 , 0 , 177 , 0 , 0 , 0 , 96 , 188 , 1 , 0 , 184 , 0 , 0 , 0 , 40 , 188 , 1 , 0 , 193 , 0 , 0 , 0 , 120 , 187 , 1 , 0 , 209 , 0 , 0 , 0 , 216 , 186 , 1 , 0 , 225 , 0 , 0 , 0 , 104 , 186 , 1 , 0 , 1 , 1 , 0 , 0 , 88 , 185 , 1 , 0 , 252 , 0 , 0 , 0 , 248 , 195 , 1 , 0 , 218 , 1 , 0 , 0 , 0 , 38 , 3 , 0 , 96 , 1 , 0 , 0 , 80 , 184 , 1 , 0 , 112 , 1 , 0 , 0 , 184 , 177 , 1 , 0 , 144 , 1 , 0 , 0 , 248 , 175 , 1 , 0 , 160 , 1 , 0 , 0 , 128 , 172 , 1 , 0 , 176 , 1 , 0 , 0 , 216 , 170 , 1 , 0 , 201 , 1 , 0 , 0 , 176 , 168 , 1 , 0 , 233 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 255 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 196 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 193 , 1 , 0 , 2 , 0 , 0 , 0 , 200 , 188 , 1 , 0 , 3 , 0 , 0 , 0 , 144 , 172 , 1 , 0 , 4 , 0 , 0 , 0 , 216 , 164 , 1 , 0 , 5 , 0 , 0 , 0 , 8 , 161 , 1 , 0 , 6 , 0 , 0 , 0 , 48 , 157 , 1 , 0 , 7 , 0 , 0 , 0 , 16 , 153 , 1 , 0 , 8 , 0 , 0 , 0 , 200 , 150 , 1 , 0 , 9 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 67 , 97 , 110 , 32 , 115 , 112 , 101 , 99 , 105 , 102 , 121 , 32 , 96 , 111 , 114 , 105 , 103 , 105 , 110 , 96 , 32 , 111 , 114 , 32 , 96 , 99 , 101 , 110 , 116 , 101 , 114 , 96 , 44 , 32 , 98 , 117 , 116 , 32 , 110 , 111 , 116 , 32 , 98 , 111 , 116 , 104 , 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 , 72 , 224 , 1 , 0 , 0 , 0 , 0 , 0 , 216 , 219 , 1 , 0 , 1 , 0 , 0 , 0 , 64 , 212 , 1 , 0 , 2 , 0 , 0 , 0 , 232 , 199 , 1 , 0 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 252 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 154 , 153 , 153 , 153 , 153 , 153 , 201 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 252 , 255 , 255 , 255 , 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 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 123 , 20 , 174 , 71 , 225 , 122 , 148 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 118 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
. concat ( [ 77 , 111 , 110 , 100 , 97 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 84 , 117 , 101 , 115 , 100 , 97 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 87 , 101 , 100 , 110 , 101 , 115 , 100 , 97 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 84 , 104 , 117 , 114 , 115 , 100 , 97 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 70 , 114 , 105 , 100 , 97 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 83 , 97 , 116 , 117 , 114 , 100 , 97 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 88 , 78 , 3 , 0 , 116 , 1 , 0 , 0 , 72 , 75 , 2 , 0 , 32 , 1 , 0 , 0 , 112 , 5 , 2 , 0 , 64 , 1 , 0 , 0 , 64 , 210 , 1 , 0 , 62 , 1 , 0 , 0 , 96 , 150 , 1 , 0 , 36 , 1 , 0 , 0 , 152 , 76 , 3 , 0 , 10 , 1 , 0 , 0 , 248 , 109 , 3 , 0 , 188 , 0 , 0 , 0 , 72 , 68 , 1 , 0 , 128 , 0 , 0 , 0 , 216 , 150 , 1 , 0 , 100 , 0 , 0 , 0 , 104 , 102 , 3 , 0 , 170 , 0 , 0 , 0 , 136 , 75 , 3 , 0 , 210 , 0 , 0 , 0 , 88 , 54 , 3 , 0 , 80 , 1 , 0 , 0 , 224 , 30 , 3 , 0 , 72 , 1 , 0 , 0 , 120 , 15 , 3 , 0 , 222 , 0 , 0 , 0 , 136 , 250 , 2 , 0 , 78 , 1 , 0 , 0 , 176 , 208 , 2 , 0 , 28 , 1 , 0 , 0 , 120 , 188 , 2 , 0 , 232 , 0 , 0 , 0 , 168 , 42 , 2 , 0 , 56 , 1 , 0 , 0 , 24 , 36 , 2 , 0 , 252 , 0 , 0 , 0 , 184 , 140 , 2 , 0 , 172 , 0 , 0 , 0 , 32 , 111 , 3 , 0 , 68 , 0 , 0 , 0 , 168 , 88 , 2 , 0 , 74 , 0 , 0 , 0 , 40 , 77 , 2 , 0 , 124 , 0 , 0 , 0 , 184 , 69 , 2 , 0 , 206 , 0 , 0 , 0 , 0 , 62 , 2 , 0 , 192 , 0 , 0 , 0 , 136 , 53 , 2 , 0 , 166 , 0 , 0 , 0 , 224 , 46 , 2 , 0 , 72 , 0 , 0 , 0 , 80 , 41 , 2 , 0 , 246 , 0 , 0 , 0 , 88 , 34 , 2 , 0 , 96 , 1 , 0 , 0 , 152 , 26 , 2 , 0 , 216 , 0 , 0 , 0 , 192 , 19 , 2 , 0 , 214 , 0 , 0 , 0 , 112 , 13 , 2 , 0 , 74 , 1 , 0 , 0 , 160 , 6 , 2 , 0 , 2 , 0 , 0 , 0 , 208 , 1 , 2 , 0 , 84 , 0 , 0 , 0 , 64 , 253 , 1 , 0 , 208 , 0 , 0 , 0 , 16 , 248 , 1 , 0 , 114 , 1 , 0 , 0 , 184 , 243 , 1 , 0 , 82 , 1 , 0 , 0 , 184 , 238 , 1 , 0 , 104 , 0 , 0 , 0 , 112 , 234 , 1 , 0 , 234 , 0 , 0 , 0 , 176 , 229 , 1 , 0 , 6 , 1 , 0 , 0 , 208 , 223 , 1 , 0 , 30 , 0 , 0 , 0 , 152 , 190 , 2 , 0 , 0 , 0 , 0 , 0 , 72 , 158 , 1 , 0 , 240 , 0 , 0 , 0 , 144 , 199 , 1 , 0 , 104 , 1 , 0 , 0 , 0 , 196 , 1 , 0 , 104 , 1 , 0 , 0 , 144 , 42 , 2 , 0 , 116 , 0 , 0 , 0 , 112 , 188 , 1 , 0 , 176 , 0 , 0 , 0 , 240 , 170 , 1 , 0 , 2 , 1 , 0 , 0 , 120 , 164 , 1 , 0 , 98 , 1 , 0 , 0 , 184 , 160 , 1 , 0 , 12 , 0 , 0 , 0 , 248 , 156 , 1 , 0 , 152 , 0 , 0 , 0 , 216 , 152 , 1 , 0 , 112 , 1 , 0 , 0 , 168 , 150 , 1 , 0 , 110 , 0 , 0 , 0 , 72 , 149 , 1 , 0 , 250 , 0 , 0 , 0 , 120 , 145 , 1 , 0 , 184 , 0 , 0 , 0 , 0 , 139 , 1 , 0 , 130 , 1 , 0 , 0 , 96 , 136 , 1 , 0 , 126 , 0 , 0 , 0 , 80 , 134 , 1 , 0 , 134 , 0 , 0 , 0 , 144 , 132 , 1 , 0 , 20 , 1 , 0 , 0 , 240 , 130 , 1 , 0 , 60 , 0 , 0 , 0 , 64 , 128 , 1 , 0 , 66 , 0 , 0 , 0 , 208 , 125 , 1 , 0 , 70 , 0 , 0 , 0 , 112 , 123 , 1 , 0 , 90 , 1 , 0 , 0 , 88 , 121 , 1 , 0 , 76 , 1 , 0 , 0 , 184 , 119 , 1 , 0 , 76 , 0 , 0 , 0 , 216 , 117 , 1 , 0 , 110 , 1 , 0 , 0 , 0 , 116 , 1 , 0 , 68 , 1 , 0 , 0 , 224 , 113 , 1 , 0 , 36 , 0 , 0 , 0 , 96 , 182 , 2 , 0 , 196 , 0 , 0 , 0 , 0 , 137 , 1 , 0 , 122 , 0 , 0 , 0 , 208 , 105 , 1 , 0 , 106 , 0 , 0 , 0 , 136 , 102 , 1 , 0 , 6 , 0 , 0 , 0 , 224 , 99 , 1 , 0 , 224 , 0 , 0 , 0 , 192 , 97 , 1 , 0 , 226 , 0 , 0 , 0 , 208 , 95 , 1 , 0 , 46 , 1 , 0 , 0 , 0 , 93 , 1 , 0 , 44 , 1 , 0 , 0 , 120 , 90 , 1 , 0 , 82 , 0 , 0 , 0 , 160 , 87 , 1 , 0 , 202 , 0 , 0 , 0 , 168 , 83 , 1 , 0 , 154 , 0 , 0 , 0 , 168 , 79 , 1 , 0 , 164 , 0 , 0 , 0 , 144 , 74 , 1 , 0 , 186 , 0 , 0 , 0 , 184 , 72 , 1 , 0 , 218 , 0 , 0 , 0 , 104 , 69 , 1 , 0 , 44 , 0 , 0 , 0 , 136 , 65 , 1 , 0 , 12 , 1 , 0 , 0 , 184 , 59 , 1 , 0 , 112 , 0 , 0 , 0 , 208 , 54 , 1 , 0 , 8 , 1 , 0 , 0 , 248 , 51 , 1 , 0 , 58 , 1 , 0 , 0 , 208 , 49 , 1 , 0 , 122 , 1 , 0 , 0 , 0 , 48 , 1 , 0 , 78 , 0 , 0 , 0 , 216 , 45 , 1 , 0 , 66 , 1 , 0 , 0 , 120 , 43 , 1 , 0 , 118 , 0 , 0 , 0 , 48 , 41 , 1 , 0 , 52 , 1 , 0 , 0 , 208 , 38 , 1 , 0 , 126 , 1 , 0 , 0 , 48 , 37 , 1 , 0 , 244 , 0 , 0 , 0 , 72 , 35 , 1 , 0 , 64 , 0 , 0 , 0 , 152 , 33 , 1 , 0 , 14 , 1 , 0 , 0 , 72 , 32 , 1 , 0 , 88 , 1 , 0 , 0 , 144 , 30 , 1 , 0 , 254 , 0 , 0 , 0 , 72 , 28 , 1 , 0 , 124 , 1 , 0 , 0 , 240 , 110 , 3 , 0 , 190 , 0 , 0 , 0 , 192 , 108 , 3 , 0 , 50 , 1 , 0 , 0 , 56 , 105 , 3 , 0 , 50 , 0 , 0 , 0 , 208 , 102 , 3 , 0 , 86 , 1 , 0 , 0 , 192 , 165 , 1 , 0 , 60 , 1 , 0 , 0 , 200 , 97 , 3 , 0 , 42 , 0 , 0 , 0 , 32 , 96 , 3 , 0 , 40 , 1 , 0 , 0 , 48 , 93 , 3 , 0 , 198 , 0 , 0 , 0 , 144 , 86 , 3 , 0 , 114 , 1 , 0 , 0 , 240 , 84 , 3 , 0 , 238 , 0 , 0 , 0 , 240 , 161 , 1 , 0 , 238 , 0 , 0 , 0 , 24 , 80 , 3 , 0 , 248 , 0 , 0 , 0 , 192 , 77 , 3 , 0 , 22 , 1 , 0 , 0 , 32 , 42 , 2 , 0 , 10 , 0 , 0 , 0 , 8 , 74 , 3 , 0 , 92 , 1 , 0 , 0 , 0 , 72 , 3 , 0 , 162 , 0 , 0 , 0 , 208 , 69 , 3 , 0 , 162 , 0 , 0 , 0 , 56 , 67 , 3 , 0 , 114 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 248 , 25 , 2 , 0 , 232 , 18 , 2 , 0 , 200 , 12 , 2 , 0 , 48 , 6 , 2 , 0 , 128 , 1 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 168 , 121 , 1 , 0 , 0 , 0 , 0 , 0 , 8 , 120 , 1 , 0 , 0 , 0 , 0 , 0 , 192 , 172 , 1 , 0 , 240 , 164 , 1 , 0 , 102 , 105 , 116 , 46 , 108 , 111 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 1 , 0 , 0 , 0 , 8 , 0 , 0 , 0 , 9 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 120 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
. concat ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 4 , 0 , 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 , 254 , 255 , 255 , 255 , 4 , 0 , 0 , 0 , 4 , 0 , 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 , 1 , 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 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 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 , 4 , 0 , 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 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 88 , 161 , 1 , 0 , 120 , 157 , 1 , 0 , 18 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
. concat ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
. concat ( [ 0 , 0 , 0 , 0 , 1 , 37 , 32 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 100 , 47 , 37 , 109 , 47 , 37 , 121 , 44 , 37 , 72 , 58 , 37 , 77 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 4 , 0 , 0 , 0 , 4 , 0 , 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 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 36 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 224 , 63 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 254 , 255 , 255 , 255 , 4 , 0 , 0 , 0 , 4 , 0 , 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 , 1 , 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 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 254 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 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 , 4 , 0 , 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 , 0 , 0 , 0 , 0 , 0 , 253 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 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 , 32 , 77 , 2 , 0 , 176 , 69 , 2 , 0 , 240 , 61 , 2 , 0 , 128 , 53 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 74 , 97 , 110 , 0 , 0 , 0 , 0 , 0 , 70 , 101 , 98 , 0 , 0 , 0 , 0 , 0 , 77 , 97 , 114 , 0 , 0 , 0 , 0 , 0 , 65 , 112 , 114 , 0 , 0 , 0 , 0 , 0 , 77 , 97 , 121 , 0 , 0 , 0 , 0 , 0 , 74 , 117 , 110 , 0 , 0 , 0 , 0 , 0 , 74 , 117 , 108 , 0 , 0 , 0 , 0 , 0 , 65 , 117 , 103 , 0 , 0 , 0 , 0 , 0 , 83 , 101 , 112 , 0 , 0 , 0 , 0 , 0 , 79 , 99 , 116 , 0 , 0 , 0 , 0 , 0 , 78 , 111 , 118 , 0 , 0 , 0 , 0 , 0 , 68 , 101 , 99 , 0 , 0 , 0 , 0 , 0 , 83 , 117 , 110 , 0 , 0 , 0 , 0 , 0 , 77 , 111 , 110 , 0 , 0 , 0 , 0 , 0 , 84 , 117 , 101 , 0 , 0 , 0 , 0 , 0 , 87 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 84 , 104 , 117 , 0 , 0 , 0 , 0 , 0 , 70 , 114 , 105 , 0 , 0 , 0 , 0 , 0 , 83 , 97 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 108 , 111 , 116 , 95 , 97 , 120 , 105 , 115 , 95 , 120 , 109 , 97 , 120 , 0 , 0 , 71 , 80 , 86 , 65 , 76 , 95 , 88 , 95 , 77 , 65 , 88 , 0 , 0 , 0 , 0 , 0 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 95 , 115 , 118 , 103 , 46 , 37 , 115 , 32 , 61 , 32 , 37 , 103 , 59 , 10 , 0 , 0 , 0 , 87 , 105 , 108 , 108 , 32 , 110 , 111 , 116 , 32 , 99 , 104 , 101 , 99 , 107 , 32 , 102 , 111 , 114 , 32 , 117 , 110 , 100 , 101 , 102 , 105 , 110 , 101 , 100 , 32 , 100 , 97 , 116 , 97 , 112 , 111 , 105 , 110 , 116 , 115 , 32 , 40 , 109 , 97 , 121 , 32 , 99 , 97 , 117 , 115 , 101 , 32 , 99 , 114 , 97 , 115 , 104 , 101 , 115 , 41 , 46 , 10 , 0 , 0 , 0 , 117 , 110 , 100 , 101 , 102 , 105 , 110 , 101 , 100 , 32 , 118 , 97 , 114 , 105 , 97 , 98 , 108 , 101 , 58 , 32 , 37 , 115 , 0 , 0 , 101 , 120 , 101 , 99 , 117 , 116 , 105 , 110 , 103 , 58 , 32 , 37 , 115 , 0 , 0 , 0 , 112 , 108 , 111 , 116 , 95 , 97 , 120 , 105 , 115 , 95 , 120 , 109 , 105 , 110 , 0 , 0 , 65 , 109 , 98 , 105 , 103 , 117 , 111 , 117 , 115 , 32 , 114 , 101 , 113 , 117 , 101 , 115 , 116 , 32 , 39 , 37 , 46 , 42 , 115 , 39 , 59 , 32 , 112 , 111 , 115 , 115 , 105 , 98 , 108 , 101 , 32 , 109 , 97 , 116 , 99 , 104 , 101 , 115 , 58 , 10 , 0 , 0 , 0 , 0 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 95 , 115 , 118 , 103 , 46 , 37 , 115 , 32 , 61 , 32 , 37 , 100 , 59 , 10 , 0 , 0 , 0 , 116 , 109 , 95 , 109 , 100 , 97 , 121 , 0 , 97 , 108 , 108 , 95 , 116 , 101 , 114 , 109 , 95 , 110 , 97 , 109 , 101 , 115 , 50 , 0 , 71 , 80 , 86 , 65 , 76 , 95 , 88 , 95 , 77 , 73 , 78 , 0 , 0 , 0 , 0 , 0 , 108 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 105 , 110 , 100 , 101 , 120 , 95 , 109 , 105 , 110 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 32 , 99 , 111 , 108 , 117 , 109 , 110 , 32 , 119 , 105 , 116 , 104 , 32 , 104 , 101 , 97 , 100 , 101 , 114 , 32 , 34 , 37 , 115 , 34 , 0 , 0 , 0 , 0 , 0 , 0 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 95 , 115 , 118 , 103 , 46 , 112 , 108 , 111 , 116 , 95 , 104 , 101 , 105 , 103 , 104 , 116 , 32 , 61 , 32 , 37 , 46 , 49 , 102 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 10 , 9 , 85 , 115 , 101 , 114 , 32 , 97 , 110 , 100 , 32 , 100 , 101 , 102 , 97 , 117 , 108 , 116 , 32 , 118 , 97 , 114 , 105 , 97 , 98 , 108 , 101 , 115 , 58 , 10 , 0 , 0 , 114 , 101 , 108 , 36 , 97 , 116 , 105 , 118 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 95 , 115 , 118 , 103 , 46 , 112 , 108 , 111 , 116 , 95 , 119 , 105 , 100 , 116 , 104 , 32 , 61 , 32 , 37 , 46 , 49 , 102 , 59 , 10 , 0 , 99 , 104 , 97 , 110 , 103 , 101 , 32 , 118 , 105 , 101 , 119 , 32 , 40 , 115 , 99 , 97 , 108 , 105 , 110 , 103 , 41 , 46 , 32 , 85 , 115 , 101 , 32 , 60 , 99 , 116 , 114 , 108 , 62 , 32 , 116 , 111 , 32 , 115 , 99 , 97 , 108 , 101 , 32 , 116 , 104 , 101 , 32 , 97 , 120 , 101 , 115 , 32 , 111 , 110 , 108 , 121 , 46 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 95 , 115 , 118 , 103 , 46 , 112 , 108 , 111 , 116 , 95 , 121 , 116 , 111 , 112 , 32 , 61 , 32 , 37 , 46 , 49 , 102 , 59 , 10 , 0 , 0 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 95 , 115 , 118 , 103 , 46 , 112 , 108 , 111 , 116 , 95 , 121 , 98 , 111 , 116 , 32 , 61 , 32 , 37 , 46 , 49 , 102 , 59 , 10 , 0 , 0 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 95 , 115 , 118 , 103 , 46 , 112 , 108 , 111 , 116 , 95 , 120 , 109 , 97 , 120 , 32 , 61 , 32 , 37 , 46 , 49 , 102 , 59 , 10 , 0 , 0 , 101 , 108 , 108 , 105 , 112 , 115 , 101 , 0 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 95 , 115 , 118 , 103 , 46 , 112 , 108 , 111 , 116 , 95 , 120 , 109 , 105 , 1
. concat ( [ 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 67 , 97 , 108 , 99 , 117 , 108 , 97 , 116 , 105 , 111 , 110 , 32 , 101 , 114 , 114 , 111 , 114 , 58 , 32 , 110 , 111 , 110 , 45 , 112 , 111 , 115 , 105 , 116 , 105 , 118 , 101 , 32 , 100 , 105 , 97 , 103 , 111 , 110 , 97 , 108 , 32 , 101 , 108 , 101 , 109 , 101 , 110 , 116 , 32 , 105 , 110 , 32 , 99 , 111 , 118 , 97 , 114 , 46 , 32 , 109 , 97 , 116 , 114 , 105 , 120 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 70 , 111 , 114 , 109 , 97 , 116 , 32 , 99 , 104 , 97 , 114 , 97 , 99 , 116 , 101 , 114 , 32 , 109 , 105 , 115 , 109 , 97 , 116 , 99 , 104 , 58 , 32 , 37 , 37 , 76 , 32 , 105 , 115 , 32 , 111 , 110 , 108 , 121 , 32 , 118 , 97 , 108 , 105 , 100 , 32 , 119 , 105 , 116 , 104 , 32 , 37 , 37 , 108 , 0 , 0 , 0 , 112 , 111 , 108 , 121 , 103 , 111 , 110 , 40 , 39 , 37 , 115 , 39 , 44 , 54 , 44 , 91 , 10 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 93 , 44 , 48 , 44 , 49 , 44 , 49 , 44 , 48 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 100 , 47 , 37 , 109 , 47 , 37 , 121 , 44 , 37 , 72 , 58 , 37 , 77 , 0 , 0 , 37 , 42 , 100 , 0 , 0 , 0 , 0 , 0 , 112 , 111 , 108 , 121 , 103 , 111 , 110 , 40 , 39 , 37 , 115 , 39 , 44 , 53 , 44 , 91 , 10 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 93 , 44 , 49 , 44 , 49 , 44 , 49 , 44 , 48 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 114 , 97 , 110 , 100 , 0 , 0 , 0 , 0 , 112 , 111 , 108 , 121 , 103 , 111 , 110 , 40 , 39 , 37 , 115 , 39 , 44 , 53 , 44 , 91 , 10 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 93 , 44 , 48 , 44 , 49 , 44 , 49 , 44 , 48 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 78 , 101 , 119 , 32 , 67 , 101 , 110 , 116 , 117 , 114 , 121 , 32 , 83 , 99 , 104 , 111 , 111 , 108 , 98 , 111 , 111 , 107 , 32 , 66 , 111 , 108 , 100 , 0 , 0 , 0 , 0 , 0 , 100 , 101 , 99 , 36 , 105 , 109 , 97 , 108 , 115 , 105 , 103 , 110 , 0 , 0 , 0 , 0 , 105 , 110 , 118 , 97 , 108 , 105 , 100 , 0 , 112 , 111 , 108 , 121 , 103 , 111 , 110 , 40 , 39 , 37 , 115 , 39 , 44 , 52 , 44 , 91 , 10 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 93 , 44 , 49 , 44 , 49 , 44 , 49 , 44 , 48 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 0 , 0 , 9 , 32 , 32 , 102 , 111 , 110 , 116 , 32 , 34 , 37 , 115 , 34 , 10 , 0 , 0 , 0 , 101 , 113 , 117 , 97 , 108 , 36 , 95 , 97 , 120 , 101 , 115 , 0 , 0 , 0 , 0 , 0 , 102 , 114 , 111 , 109 , 32 , 0 , 0 , 0 , 112 , 111 , 108 , 121 , 103 , 111 , 110 , 40 , 39 , 37 , 115 , 39 , 44 , 52 , 44 , 91 , 10 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 93 , 44 , 48 , 44 , 49 , 44 , 49 , 44 , 48 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 0 , 0 , 84 , 111 , 111 , 32 , 109 , 97 , 110 , 121 , 32 , 99 , 111 , 108 , 117 , 109 , 110 , 115 , 32 , 105 , 110 , 32 , 117 , 115 , 105 , 110 , 103 , 32 , 115 , 112 , 101 , 99 , 105 , 102 , 105 , 99 , 97 , 116 , 105 , 111 , 110 , 0 , 68 , 101 , 108 , 101 , 116 , 101 , 0 , 0 , 111 , 118 , 97 , 108 , 40 , 39 , 37 , 115 , 39 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 49 , 44 , 49 , 44 , 49 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 111 , 118 , 97 , 108 , 40 , 39 , 37 , 115 , 39 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 50 , 44 , 49 , 44 , 49 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 67 , 97 , 110 , 110 , 111 , 116 , 32 , 111 , 112 , 101 , 110 , 32 , 115 , 97 , 118 , 101 , 32 , 102 , 105 , 108 , 101 , 0 , 0 , 0 , 99 , 112 , 57 , 53 , 48 , 0 , 0 , 0 , 98 , 111 , 120 , 40 , 39 , 37 , 115 , 39 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 49 , 44 , 49 , 44 , 49 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 111 , 112 , 101 , 110 , 32 , 121 , 108 , 111 , 119 , 32 , 121 , 104 , 105 , 103 , 104 , 32 , 121 , 99 , 108 , 111 , 115 , 101 , 0 , 98 , 111 , 120 , 40 , 39 , 37 , 115 , 39 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 50 , 44 , 49 , 44 , 49 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 99 , 97 , 108 , 108 , 110 , 0 , 0 , 0 , 112 , 111 , 108 , 121 , 40 , 39 , 37 , 115 , 39 , 44 , 50 , 44 , 91 , 10 , 9 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 93 , 44 , 48 , 44 , 50 , 44 , 49 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 56 , 44 , 51 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 70 , 73 , 84 , 95 , 87 , 83 , 83 , 82 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 111 , 108 , 121 , 40 , 39 , 37 , 115 , 39 , 44 , 50 , 44 , 91 , 10 , 9 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 93 , 44 , 48 , 44 , 50 , 44 , 49 , 44 , 37 , 117 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 48 , 44 , 56 , 44 , 51 , 44 , 48 , 44 , 91 , 10 , 93 , 41 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 111 , 108 , 121 , 40 , 39 , 37 , 115 , 39 , 44 , 50 , 44 , 91 , 10 , 9 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 , 44 , 37 , 46 , 49 , 102 ,
. concat ( [ 92 , 109 , 97 , 107 , 101 , 98 , 111 , 120 , 40 , 48 , 44 , 48 , 41 , 123 , 36 , 92 , 98 , 108 , 97 , 99 , 107 , 116 , 114 , 105 , 97 , 110 , 103 , 108 , 101 , 36 , 125 , 0 , 115 , 101 , 116 , 32 , 37 , 115 , 114 , 97 , 110 , 103 , 101 , 32 , 91 , 32 , 0 , 0 , 92 , 109 , 97 , 107 , 101 , 98 , 111 , 120 , 40 , 48 , 44 , 48 , 41 , 123 , 36 , 92 , 98 , 117 , 108 , 108 , 101 , 116 , 36 , 125 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 98 , 108 , 45 , 105 , 110 , 116 , 101 , 114 , 112 , 32 , 97 , 108 , 111 , 110 , 103 , 32 , 115 , 99 , 97 , 110 , 0 , 0 , 0 , 0 , 112 , 114 , 101 , 118 , 105 , 111 , 117 , 115 , 32 , 112 , 97 , 114 , 97 , 109 , 101 , 116 , 114 , 105 , 99 , 32 , 102 , 117 , 110 , 99 , 116 , 105 , 111 , 110 , 32 , 110 , 111 , 116 , 32 , 102 , 117 , 108 , 108 , 121 , 32 , 115 , 112 , 101 , 99 , 105 , 102 , 105 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 50 , 32 , 109 , 117 , 108 , 0 , 0 , 0 , 92 , 109 , 97 , 107 , 101 , 98 , 111 , 120 , 40 , 48 , 44 , 48 , 41 , 123 , 36 , 92 , 99 , 105 , 114 , 99 , 36 , 125 , 0 , 0 , 116 , 101 , 120 , 116 , 95 , 108 , 97 , 98 , 101 , 108 , 32 , 108 , 105 , 115 , 116 , 32 , 119 , 97 , 115 , 32 , 110 , 111 , 116 , 32 , 105 , 110 , 105 , 116 , 105 , 97 , 108 , 105 , 122 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 92 , 109 , 97 , 107 , 101 , 98 , 111 , 120 , 40 , 48 , 44 , 48 , 41 , 123 , 36 , 92 , 98 , 108 , 97 , 99 , 107 , 115 , 113 , 117 , 97 , 114 , 101 , 36 , 125 , 0 , 0 , 0 , 45 , 45 , 112 , 101 , 114 , 115 , 105 , 115 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 97 , 98 , 115 , 46 , 32 , 99 , 104 , 97 , 110 , 103 , 101 , 32 , 100 , 117 , 114 , 105 , 110 , 103 , 32 , 108 , 97 , 115 , 116 , 32 , 105 , 116 , 101 , 114 , 97 , 116 , 105 , 111 , 110 , 32 , 58 , 32 , 37 , 103 , 10 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 92 , 114 , 97 , 105 , 115 , 101 , 98 , 111 , 120 , 123 , 45 , 46 , 56 , 112 , 116 , 125 , 123 , 92 , 109 , 97 , 107 , 101 , 98 , 111 , 120 , 40 , 48 , 44 , 48 , 41 , 123 , 36 , 92 , 66 , 111 , 120 , 36 , 125 , 125 , 0 , 87 , 97 , 114 , 110 , 105 , 110 , 103 , 32 , 58 , 32 , 117 , 100 , 102 , 32 , 115 , 104 , 97 , 100 , 111 , 119 , 101 , 100 , 32 , 98 , 121 , 32 , 98 , 117 , 105 , 108 , 116 , 45 , 105 , 110 , 32 , 102 , 117 , 110 , 99 , 116 , 105 , 111 , 110 , 32 , 111 , 102 , 32 , 116 , 104 , 101 , 32 , 115 , 97 , 109 , 101 , 32 , 110 , 97 , 109 , 101 , 0 , 0 , 0 , 0 , 92 , 109 , 97 , 107 , 101 , 98 , 111 , 120 , 40 , 48 , 44 , 48 , 41 , 123 , 36 , 92 , 97 , 115 , 116 , 36 , 125 , 0 , 0 , 0 , 108 , 111 , 103 , 49 , 48 , 0 , 0 , 0 , 92 , 114 , 117 , 108 , 101 , 123 , 49 , 112 , 116 , 125 , 123 , 49 , 112 , 116 , 125 , 0 , 67 , 111 , 117 , 114 , 105 , 101 , 114 , 32 , 79 , 98 , 108 , 105 , 113 , 117 , 101 , 0 , 98 , 36 , 97 , 114 , 115 , 0 , 0 , 0 , 32 , 32 , 77 , 101 , 97 , 110 , 58 , 32 , 32 , 32 , 32 , 32 , 37 , 115 , 10 , 0 , 77 , 79 , 85 , 83 , 69 , 95 , 82 , 85 , 76 , 69 , 82 , 95 , 89 , 0 , 0 , 0 , 92 , 112 , 117 , 116 , 40 , 37 , 100 , 44 , 37 , 100 , 41 , 123 , 92 , 114 , 117 , 108 , 101 , 123 , 37 , 103 , 112 , 116 , 125 , 123 , 37 , 103 , 112 , 116 , 125 , 125 , 10 , 0 , 37 , 35 , 103 , 0 , 0 , 0 , 0 , 0 , 105 , 110 , 99 , 114 , 101 , 109 , 101 , 110 , 116 , 32 , 109 , 117 , 115 , 116 , 32 , 98 , 101 , 32 , 110 , 101 , 103 , 97 , 116 , 105 , 118 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 32 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 58 , 32 , 76 , 97 , 84 , 101 , 88 , 32 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 32 , 119 , 105 , 116 , 104 , 32 , 101 , 109 , 116 , 101 , 120 , 32 , 115 , 112 , 101 , 99 , 105 , 97 , 108 , 115 , 10 , 92 , 115 , 101 , 116 , 108 , 101 , 110 , 103 , 116 , 104 , 123 , 92 , 117 , 110 , 105 , 116 , 108 , 101 , 110 , 103 , 116 , 104 , 125 , 123 , 37 , 102 , 112 , 116 , 125 , 10 , 92 , 105 , 102 , 120 , 92 , 112 , 108 , 111 , 116 , 112 , 111 , 105 , 110 , 116 , 92 , 117 , 110 , 100 , 101 , 102 , 105 , 110 , 101 , 100 , 92 , 110 , 101 , 119 , 115 , 97 , 118 , 101 , 98 , 111 , 120 , 123 , 92 , 112 , 108 , 111 , 116 , 112 , 111 , 105 , 110 , 116 , 125 , 92 , 102 , 105 , 10 , 0 , 32 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 32 , 37 , 46 , 51 , 102 , 0 , 98 , 111 , 120 , 112 , 108 , 111 , 116 , 32 , 112 , 101 , 114 , 109 , 117 , 116 , 97 , 116 , 105 , 111 , 110 , 115 , 32 , 97 , 114 , 114 , 97 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 116 , 114 , 111 , 107 , 101 , 32 , 103 , 115 , 97 , 118 , 101 , 9 , 37 , 37 , 32 , 100 , 114 , 97 , 119 , 32 , 103 , 114 , 97 , 121 , 32 , 115 , 99 , 97 , 108 , 101 , 32 , 115 , 109 , 111 , 111 , 116 , 104 , 32 , 98 , 111 , 120 , 10 , 109 , 97 , 120 , 99 , 111 , 108 , 111 , 114 , 115 , 32 , 48 , 32 , 103 , 116 , 32 , 123 , 47 , 105 , 109 , 97 , 120 , 32 , 109 , 97 , 120 , 99 , 111 , 108 , 111 , 114 , 115 , 32 , 100 , 101 , 102 , 125 , 32 , 123 , 47 , 105 , 109 , 97 , 120 , 32 , 49 , 48 , 50 , 52 , 32 , 100 , 101 , 102 , 125 , 32 , 105 , 102 , 101 , 108 , 115 , 101 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 112 , 108 , 105 , 110 , 101 , 32 , 115 , 111 , 108 , 117 , 116 , 105 , 111 , 110 , 32 , 118 , 101 , 99 , 116 , 111 , 114 , 0 , 0 , 70 , 56 , 0 , 0 , 0 , 0 , 0 , 0 , 92 , 101 , 110 , 100 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 10 , 92 , 101 , 110 , 100 , 103 , 114 , 111 , 117 , 112 , 10 , 92 , 101 , 110 , 100 , 105 , 110 , 112 , 117 , 116 , 10 , 0 , 105 , 110 , 116 , 101 , 114 , 110 , 97 , 108 , 32 , 101 , 114 , 114 , 111 , 114 , 58 , 32 , 102 , 95 , 115 , 117 , 109 , 32 , 99 , 111 , 117 , 108 , 100 , 32 , 110 , 111 , 116 , 32 , 97 , 99 , 99 , 101 , 115 , 115 , 32 , 105 , 116 , 101 , 114 , 97 , 116 , 105 , 111 , 110 , 32 , 118 , 97 , 114 , 105 , 97 , 98 , 108 , 101 , 46 , 0 , 0 , 0 , 0 , 0 , 0 , 92 , 101 , 110 , 100 , 123 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 125 , 37 , 10 , 92 , 101 , 110 , 100 , 103 , 114 , 111 , 117 , 112 , 10 , 92 , 101 , 110 , 100 , 105 , 110 , 112 , 117 , 116 , 10 , 0 , 0 , 0 , 0 , 0 , 92 , 101 , 110 , 100 , 123 , 100 , 111 , 99 , 117 , 109 , 101 , 110 , 116 , 125 , 10 , 0 , 124 , 50 , 42 , 120 , 32 , 45 , 32 , 48 , 46 , 53 , 124 , 0 , 0 , 0 , 0 , 0 , 32 , 32 , 32 , 32 , 92 , 103 , 112 , 108 , 98 , 97 , 99 , 107 , 116 , 101 , 120 , 116 , 10 , 32 , 32 , 32 , 32 , 92 , 112 , 117 , 116 , 40 , 48 , 44 , 48 , 41 , 123 , 92 , 105 , 110 , 99 , 108 , 117 , 100 , 101 , 103 , 114 , 97 , 112 , 104 , 105 , 99 , 115 , 123 , 37 , 115 , 125 , 125 , 37 , 37 , 10 , 32 , 32 , 32 , 32 , 92 , 103 , 112 , 108 , 102 , 114 , 111 , 110 , 116 , 116 , 101 , 120 , 116 , 10 , 32 , 32 , 92 , 101 , 110 , 10
. concat ( [ 84 , 64 , 70 , 105 , 108 , 108 , 112 , 101 , 110 , 116 , 97 , 103 , 111 , 110 , 125 , 123 , 112 , 115 , 100 , 111 , 116 , 115 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 49 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 115 , 111 , 108 , 105 , 100 , 44 , 100 , 111 , 116 , 115 , 116 , 121 , 108 , 101 , 61 , 112 , 101 , 110 , 116 , 97 , 103 , 111 , 110 , 42 , 125 , 10 , 0 , 0 , 0 , 0 , 0 , 92 , 110 , 101 , 119 , 112 , 115 , 111 , 98 , 106 , 101 , 99 , 116 , 123 , 80 , 83 , 84 , 64 , 68 , 105 , 97 , 109 , 111 , 110 , 100 , 125 , 123 , 112 , 115 , 100 , 111 , 116 , 115 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 49 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 115 , 111 , 108 , 105 , 100 , 44 , 100 , 111 , 116 , 115 , 116 , 121 , 108 , 101 , 61 , 115 , 113 , 117 , 97 , 114 , 101 , 44 , 100 , 111 , 116 , 97 , 110 , 103 , 108 , 101 , 61 , 52 , 53 , 125 , 10 , 92 , 110 , 101 , 119 , 112 , 115 , 111 , 98 , 106 , 101 , 99 , 116 , 123 , 80 , 83 , 84 , 64 , 70 , 105 , 108 , 108 , 100 , 105 , 97 , 109 , 111 , 110 , 100 , 125 , 123 , 112 , 115 , 100 , 111 , 116 , 115 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 49 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 115 , 111 , 108 , 105 , 100 , 44 , 100 , 111 , 116 , 115 , 116 , 121 , 108 , 101 , 61 , 115 , 113 , 117 , 97 , 114 , 101 , 42 , 44 , 100 , 111 , 116 , 97 , 110 , 103 , 108 , 101 , 61 , 52 , 53 , 125 , 10 , 92 , 110 , 101 , 119 , 112 , 115 , 111 , 98 , 106 , 101 , 99 , 116 , 123 , 80 , 83 , 84 , 64 , 67 , 114 , 111 , 115 , 115 , 125 , 123 , 112 , 115 , 100 , 111 , 116 , 115 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 49 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 115 , 111 , 108 , 105 , 100 , 44 , 100 , 111 , 116 , 115 , 116 , 121 , 108 , 101 , 61 , 43 , 44 , 100 , 111 , 116 , 97 , 110 , 103 , 108 , 101 , 61 , 52 , 53 , 125 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 116 , 97 , 110 , 0 , 0 , 0 , 0 , 0 , 92 , 110 , 101 , 119 , 112 , 115 , 111 , 98 , 106 , 101 , 99 , 116 , 123 , 80 , 83 , 84 , 64 , 66 , 111 , 114 , 100 , 101 , 114 , 125 , 123 , 112 , 115 , 108 , 105 , 110 , 101 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 49 , 53 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 115 , 111 , 108 , 105 , 100 , 125 , 10 , 92 , 110 , 101 , 119 , 112 , 115 , 111 , 98 , 106 , 101 , 99 , 116 , 123 , 80 , 83 , 84 , 64 , 65 , 120 , 101 , 115 , 125 , 123 , 112 , 115 , 108 , 105 , 110 , 101 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 49 , 53 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 100 , 111 , 116 , 116 , 101 , 100 , 44 , 100 , 111 , 116 , 115 , 101 , 112 , 61 , 46 , 48 , 48 , 52 , 125 , 10 , 92 , 110 , 101 , 119 , 112 , 115 , 111 , 98 , 106 , 101 , 99 , 116 , 123 , 80 , 83 , 84 , 64 , 83 , 111 , 108 , 105 , 100 , 125 , 123 , 112 , 115 , 108 , 105 , 110 , 101 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 49 , 53 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 115 , 111 , 108 , 105 , 100 , 125 , 10 , 92 , 110 , 101 , 119 , 112 , 115 , 111 , 98 , 106 , 101 , 99 , 116 , 123 , 80 , 83 , 84 , 64 , 68 , 97 , 115 , 104 , 101 , 100 , 125 , 123 , 112 , 115 , 108 , 105 , 110 , 101 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 49 , 53 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 100 , 97 , 115 , 104 , 101 , 100 , 44 , 100 , 97 , 115 , 104 , 61 , 46 , 48 , 49 , 32 , 46 , 48 , 49 , 125 , 10 , 92 , 110 , 101 , 119 , 112 , 115 , 111 , 98 , 106 , 101 , 99 , 116 , 123 , 80 , 83 , 84 , 64 , 68 , 111 , 116 , 116 , 101 , 100 , 125 , 123 , 112 , 115 , 108 , 105 , 110 , 101 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 50 , 53 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 100 , 111 , 116 , 116 , 101 , 100 , 44 , 100 , 111 , 116 , 115 , 101 , 112 , 61 , 46 , 48 , 48 , 56 , 125 , 10 , 92 , 110 , 101 , 119 , 112 , 115 , 111 , 98 , 106 , 101 , 99 , 116 , 123 , 80 , 83 , 84 , 64 , 76 , 111 , 110 , 103 , 68 , 97 , 115 , 104 , 125 , 123 , 112 , 115 , 108 , 105 , 110 , 101 , 125 , 123 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 61 , 46 , 48 , 48 , 49 , 53 , 44 , 108 , 105 , 110 , 101 , 115 , 116 , 121 , 108 , 101 , 61 , 100 , 97 , 115 , 104 , 101 , 100 , 44 , 100 , 97 , 115 , 104 , 61 , 46 , 48 , 50 , 32 , 46 , 48 , 49 , 125 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 112 , 108 , 105 , 110 , 101 , 36 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 109 , 105 , 110 , 0 , 0 , 0 , 0 , 0 , 37 , 32 , 68 , 101 , 102 , 105 , 110 , 101 , 32 , 110 , 101 , 119 , 32 , 80 , 83 , 84 , 32 , 111 , 98 , 106 , 101 , 99 , 116 , 115 , 44 , 32 , 105 , 102 , 32 , 110 , 111 , 116 , 32 , 97 , 108 , 114 , 101 , 97 , 100 , 121 , 32 , 100 , 101 , 102 , 105 , 110 , 101 , 100 , 10 , 92 , 105 , 102 , 120 , 92 , 80 , 83 , 84 , 108 , 111 , 97 , 100 , 101 , 100 , 92 , 117 , 110 , 100 , 101 , 102 , 105 , 110 , 101 , 100 , 10 , 92 , 100 , 101 , 102 , 92 , 80 , 83 , 84 , 108 , 111 , 97 , 100 , 101 , 100 , 123 , 116 , 125 , 10 , 92 , 112 , 115 , 115 , 101 , 116 , 123 , 97 , 114 , 114 , 111 , 119 , 115 , 105 , 122 , 101 , 61 , 46 , 48 , 49 , 32 , 51 , 46 , 50 , 32 , 49 , 46 , 52 , 32 , 46 , 51 , 125 , 10 , 92 , 112 , 115 , 115 , 101 , 116 , 123 , 100 , 111 , 116 , 115 , 105 , 122 , 101 , 61 , 46 , 48 , 49 , 125 , 10 , 92 , 99 , 97 , 116 , 99 , 111 , 100 , 101 , 96 , 64 , 61 , 49 , 49 , 10 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 108 , 101 , 102 , 116 , 32 , 106 , 117 , 115 , 116 , 105 , 102 , 105 , 101 , 100 , 44 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 117 , 98 , 121 , 116 , 101 , 0 , 0 , 0 , 92 , 80 , 83 , 84 , 64 , 76 , 111 , 110 , 103 , 68 , 97 , 115 , 104 , 0 , 0 , 0 , 104 , 105 , 115 , 116 , 101 , 112 , 115 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 105 , 110 , 100 , 101 , 120 , 101 , 115 , 32 , 108 , 117 , 0 , 0 , 0 , 0 , 0 , 0 , 120 , 50 , 32 , 114 , 97 , 110 , 103 , 101 , 32 , 105 , 115 , 32 , 105 , 110 , 118 , 97 , 108 , 105 , 100 , 0 , 0 , 0 , 0 , 0 , 39 , 58 , 39 , 32 , 101 , 120 , 112 , 101 , 99 , 116 , 101 , 100 , 0 , 0 , 0 , 0 , 75
. concat ( [ 121 , 110 , 101 , 120 , 116 , 43 , 119 , 100 , 91 , 100 , 101 , 99 , 95 , 110 , 117 , 109 , 93 , 42 , 115 , 105 , 110 , 100 , 32 , 114 , 111 , 116 , 59 , 10 , 32 , 32 , 32 , 32 , 32 , 32 , 102 , 105 , 10 , 32 , 32 , 32 , 32 , 101 , 110 , 100 , 102 , 111 , 114 , 10 , 32 , 32 , 101 , 110 , 100 , 103 , 114 , 111 , 117 , 112 , 32 , 10 , 101 , 110 , 100 , 100 , 101 , 102 , 59 , 10 , 0 , 0 , 0 , 0 , 108 , 97 , 98 , 101 , 108 , 115 , 0 , 0 , 44 , 32 , 107 , 100 , 101 , 110 , 115 , 105 , 116 , 121 , 50 , 100 , 32 , 109 , 111 , 100 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 99 , 111 , 108 , 111 , 114 , 32 , 97 , 120 , 105 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 10 , 37 , 73 , 110 , 99 , 108 , 117 , 100 , 101 , 32 , 110 , 101 , 120 , 116 , 32 , 101 , 105 , 103 , 104 , 116 , 32 , 108 , 105 , 110 , 101 , 115 , 32 , 105 , 102 , 32 , 121 , 111 , 117 , 32 , 104 , 97 , 118 , 101 , 32 , 112 , 114 , 111 , 98 , 108 , 101 , 109 , 115 , 32 , 119 , 105 , 116 , 104 , 32 , 116 , 104 , 101 , 32 , 109 , 111 , 100 , 101 , 32 , 111 , 110 , 32 , 121 , 111 , 117 , 114 , 32 , 115 , 121 , 115 , 116 , 101 , 109 , 46 , 46 , 10 , 37 , 112 , 114 , 111 , 111 , 102 , 105 , 110 , 103 , 58 , 61 , 48 , 59 , 10 , 37 , 102 , 111 , 110 , 116 , 109 , 97 , 107 , 105 , 110 , 103 , 58 , 61 , 49 , 59 , 10 , 37 , 116 , 114 , 97 , 99 , 105 , 110 , 103 , 116 , 105 , 116 , 108 , 101 , 115 , 58 , 61 , 48 , 59 , 10 , 37 , 112 , 105 , 120 , 101 , 108 , 115 , 95 , 112 , 101 , 114 , 95 , 105 , 110 , 99 , 104 , 58 , 61 , 51 , 48 , 48 , 59 , 10 , 37 , 98 , 108 , 97 , 99 , 107 , 101 , 114 , 58 , 61 , 48 , 59 , 10 , 37 , 102 , 105 , 108 , 108 , 105 , 110 , 58 , 61 , 46 , 50 , 59 , 10 , 37 , 111 , 95 , 99 , 111 , 114 , 114 , 101 , 99 , 116 , 105 , 111 , 110 , 58 , 61 , 46 , 54 , 59 , 10 , 37 , 102 , 105 , 120 , 95 , 117 , 110 , 105 , 116 , 115 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 99 , 97 , 110 , 36 , 100 , 108 , 101 , 115 , 116 , 105 , 99 , 107 , 115 , 0 , 0 , 0 , 9 , 100 , 97 , 116 , 97 , 32 , 103 , 114 , 105 , 100 , 51 , 100 , 32 , 105 , 115 , 32 , 101 , 110 , 97 , 98 , 108 , 101 , 100 , 32 , 102 , 111 , 114 , 32 , 109 , 101 , 115 , 104 , 32 , 111 , 102 , 32 , 115 , 105 , 122 , 101 , 32 , 37 , 100 , 120 , 37 , 100 , 44 , 32 , 107 , 101 , 114 , 110 , 101 , 108 , 61 , 37 , 115 , 44 , 10 , 9 , 115 , 99 , 97 , 108 , 101 , 32 , 102 , 97 , 99 , 116 , 111 , 114 , 115 , 32 , 120 , 61 , 37 , 102 , 44 , 32 , 121 , 61 , 37 , 102 , 37 , 115 , 10 , 0 , 105 , 102 , 32 , 117 , 110 , 107 , 110 , 111 , 119 , 110 , 32 , 99 , 109 , 98 , 97 , 115 , 101 , 58 , 32 , 105 , 110 , 112 , 117 , 116 , 32 , 99 , 109 , 98 , 97 , 115 , 101 , 32 , 102 , 105 , 10 , 10 , 116 , 114 , 97 , 99 , 105 , 110 , 103 , 115 , 116 , 97 , 116 , 115 , 58 , 61 , 49 , 59 , 10 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 32 , 114 , 91 , 93 , 59 , 10 , 10 , 100 , 101 , 102 , 32 , 111 , 112 , 101 , 110 , 105 , 116 , 32 , 61 , 32 , 111 , 112 , 101 , 110 , 119 , 105 , 110 , 100 , 111 , 119 , 32 , 99 , 117 , 114 , 114 , 101 , 110 , 116 , 119 , 105 , 110 , 100 , 111 , 119 , 10 , 32 , 32 , 102 , 114 , 111 , 109 , 32 , 40 , 48 , 44 , 48 , 41 , 32 , 116 , 111 , 32 , 40 , 52 , 48 , 48 , 44 , 56 , 48 , 48 , 41 , 32 , 97 , 116 , 32 , 40 , 45 , 53 , 48 , 44 , 53 , 48 , 48 , 41 , 32 , 101 , 110 , 100 , 100 , 101 , 102 , 59 , 10 , 10 , 109 , 111 , 100 , 101 , 95 , 115 , 101 , 116 , 117 , 112 , 59 , 10 , 0 , 0 , 0 , 102 , 105 , 110 , 36 , 97 , 110 , 99 , 101 , 98 , 97 , 114 , 115 , 0 , 0 , 0 , 0 , 9 , 100 , 97 , 116 , 97 , 32 , 103 , 114 , 105 , 100 , 51 , 100 , 32 , 105 , 115 , 32 , 101 , 110 , 97 , 98 , 108 , 101 , 100 , 32 , 102 , 111 , 114 , 32 , 109 , 101 , 115 , 104 , 32 , 111 , 102 , 32 , 115 , 105 , 122 , 101 , 32 , 37 , 100 , 120 , 37 , 100 , 44 , 32 , 115 , 112 , 108 , 105 , 110 , 101 , 115 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 51 , 32 , 109 , 117 , 108 , 32 , 49 , 32 , 115 , 117 , 98 , 0 , 0 , 0 , 0 , 0 , 101 , 110 , 100 , 99 , 104 , 97 , 114 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 118 , 101 , 99 , 36 , 116 , 111 , 114 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 9 , 100 , 97 , 116 , 97 , 32 , 103 , 114 , 105 , 100 , 51 , 100 , 32 , 105 , 115 , 32 , 101 , 110 , 97 , 98 , 108 , 101 , 100 , 32 , 102 , 111 , 114 , 32 , 109 , 101 , 115 , 104 , 32 , 111 , 102 , 32 , 115 , 105 , 122 , 101 , 32 , 37 , 100 , 120 , 37 , 100 , 44 , 32 , 110 , 111 , 114 , 109 , 61 , 37 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 68 , 97 , 109 , 97 , 103 , 101 , 100 , 32 , 69 , 68 , 70 , 32 , 104 , 101 , 97 , 100 , 101 , 114 , 32 , 111 , 102 , 32 , 37 , 115 , 58 , 32 , 110 , 111 , 116 , 32 , 109 , 117 , 108 , 116 , 105 , 112 , 108 , 101 , 32 , 111 , 102 , 32 , 53 , 49 , 50 , 32 , 66 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 97 , 58 , 61 , 119 , 47 , 37 , 100 , 59 , 98 , 58 , 61 , 104 , 47 , 37 , 100 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 104 , 105 , 115 , 36 , 116 , 101 , 112 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 114 , 101 , 115 , 105 , 100 , 117 , 97 , 108 , 115 , 32 , 97 , 114 , 101 , 32 , 119 , 101 , 105 , 103 , 104 , 116 , 101 , 100 , 32 , 101 , 113 , 117 , 97 , 108 , 108 , 121 , 32 , 40 , 117 , 110 , 105 , 116 , 32 , 119 , 101 , 105 , 103 , 104 , 116 , 41 , 10 , 10 , 0 , 0 , 9 , 99 , 111 , 109 , 109 , 97 , 110 , 100 , 32 , 108 , 105 , 110 , 101 , 32 , 109 , 97 , 99 , 114 , 111 , 115 , 32 , 119 , 105 , 108 , 108 , 32 , 37 , 115 , 98 , 101 , 32 , 101 , 120 , 112 , 97 , 110 , 100 , 101 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 65 , 115 , 115 , 101 , 114 , 116 , 105 , 111 , 110 , 32 , 102 , 97 , 105 , 108 , 101 , 100 , 58 , 32 , 37 , 115 , 0 , 0 , 0 , 0 , 10 , 10 , 98 , 101 , 103 , 105 , 110 , 99 , 104 , 97 , 114 , 40 , 37 , 100 , 44 , 37 , 103 , 105 , 110 , 35 , 44 , 37 , 103 , 105 , 110 , 35 , 44 , 48 , 41 , 59 , 10 , 0 , 102 , 115 , 36 , 116 , 101 , 112 , 115 , 0 , 99 , 121 , 108 , 105 , 110 , 100 , 114 , 105 , 99 , 97 , 108 , 10 , 0 , 0 , 0 , 0 , 100 , 114 , 97 , 119 , 32 , 40 , 37 , 100 , 97 , 44 , 37 , 100 , 98 , 41 , 45 , 45 , 40 , 37 , 100 , 97 , 44 , 37 , 100 , 98 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 102 , 105 , 108 , 108 , 115 , 116 , 36 , 101 , 112 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 118 , 97 , 108 , 105 , 100 , 0 , 0 , 0 , 115 , 112 , 104 , 101 , 114 , 105 , 99 , 97 , 108 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 101 , 120 , 112 , 101 , 99 , 116 , 105 , 110 , 103 , 32 , 39 , 44 , 32 , 60 , 110 , 117 , 109 , 95 , 99 , 111 , 108 , 115 , 62 , 39 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 100 , 114 , 97 , 119 , 100 , 111 , 116 , 32 , 40 , 37 , 100 , 97 , 44 , 37 , 100 , 98 , 41 , 59 , 10 , 0 , 0 , 0 ,
. concat ( [ 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 99 , 97 , 108 , 101 , 112 , 101 , 110 , 32 , 49 , 59 , 32 , 112 , 116 , 115 , 105 , 122 , 101 , 32 , 37 , 46 , 51 , 102 , 59 , 108 , 105 , 110 , 101 , 116 , 121 , 112 , 101 , 32 , 45 , 50 , 59 , 10 , 0 , 0 , 0 , 115 , 108 , 97 , 116 , 101 , 98 , 108 , 117 , 101 , 49 , 0 , 0 , 0 , 0 , 0 , 0 , 120 , 49 , 121 , 49 , 0 , 0 , 0 , 0 , 68 , 97 , 116 , 97 , 0 , 0 , 0 , 0 , 32 , 32 , 77 , 97 , 120 , 105 , 109 , 117 , 109 , 58 , 32 , 32 , 37 , 115 , 32 , 91 , 37 , 42 , 108 , 100 , 93 , 32 , 32 , 32 , 37 , 115 , 32 , 91 , 37 , 42 , 108 , 100 , 93 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 115 , 58 , 37 , 100 , 32 , 112 , 114 , 111 , 116 , 111 , 99 , 111 , 108 , 32 , 101 , 114 , 114 , 111 , 114 , 10 , 0 , 0 , 0 , 100 , 36 , 101 , 103 , 114 , 101 , 101 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 109 , 117 , 108 , 116 , 105 , 112 , 108 , 111 , 116 , 62 , 32 , 0 , 0 , 0 , 0 , 0 , 37 , 48 , 51 , 111 , 0 , 0 , 0 , 0 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 97 , 58 , 61 , 119 , 47 , 37 , 46 , 49 , 102 , 59 , 98 , 58 , 61 , 104 , 47 , 37 , 46 , 49 , 102 , 59 , 10 , 0 , 0 , 0 , 109 , 101 , 100 , 105 , 117 , 109 , 112 , 117 , 114 , 112 , 108 , 101 , 51 , 0 , 0 , 0 , 9 , 37 , 115 , 32 , 105 , 115 , 32 , 117 , 110 , 100 , 101 , 102 , 105 , 110 , 101 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 116 , 121 , 108 , 101 , 32 , 108 , 105 , 110 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 36 , 97 , 100 , 105 , 97 , 110 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 120 , 101 , 114 , 114 , 111 , 114 , 108 , 105 , 110 , 101 , 115 , 10 , 0 , 0 , 0 , 0 , 78 , 101 , 101 , 100 , 32 , 49 , 32 , 111 , 114 , 32 , 51 , 32 , 99 , 111 , 108 , 117 , 109 , 110 , 115 , 32 , 102 , 111 , 114 , 32 , 99 , 97 , 114 , 116 , 101 , 115 , 105 , 97 , 110 , 32 , 100 , 97 , 116 , 97 , 0 , 0 , 67 , 97 , 110 , 39 , 116 , 32 , 99 , 104 , 97 , 110 , 103 , 101 , 32 , 116 , 111 , 32 , 116 , 104 , 105 , 115 , 32 , 100 , 105 , 114 , 101 , 99 , 116 , 111 , 114 , 121 , 0 , 0 , 126 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 83 , 105 , 110 , 103 , 117 , 108 , 97 , 114 , 32 , 109 , 97 , 116 , 114 , 105 , 120 , 32 , 105 , 110 , 32 , 71 , 105 , 118 , 101 , 110 , 115 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 67 , 97 , 110 , 39 , 116 , 32 , 99 , 97 , 108 , 99 , 117 , 108 , 97 , 116 , 101 , 32 , 97 , 112 , 112 , 114 , 111 , 120 , 105 , 109 , 97 , 116 , 105 , 111 , 110 , 32 , 115 , 112 , 108 , 105 , 110 , 101 , 115 , 44 , 32 , 97 , 108 , 108 , 32 , 119 , 101 , 105 , 103 , 104 , 116 , 115 , 32 , 104 , 97 , 118 , 101 , 32 , 116 , 111 , 32 , 98 , 101 , 32 , 62 , 32 , 48 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 10 , 98 , 101 , 103 , 105 , 110 , 102 , 105 , 103 , 40 , 37 , 100 , 41 , 59 , 10 , 119 , 58 , 61 , 37 , 46 , 51 , 102 , 105 , 110 , 59 , 104 , 58 , 61 , 37 , 46 , 51 , 102 , 105 , 110 , 59 , 10 , 0 , 0 , 0 , 0 , 99 , 98 , 116 , 105 , 99 , 115 , 0 , 0 , 111 , 114 , 99 , 104 , 105 , 100 , 52 , 0 , 75 , 80 , 95 , 66 , 101 , 103 , 105 , 110 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 9 , 37 , 115 , 10 , 0 , 0 , 0 , 0 , 114 , 103 , 98 , 36 , 99 , 111 , 108 , 111 , 114 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 73 , 110 , 116 , 101 , 114 , 110 , 97 , 108 , 32 , 101 , 114 , 114 , 111 , 114 , 58 , 32 , 115 , 116 , 114 , 105 , 110 , 103 , 32 , 110 , 111 , 116 , 32 , 97 , 108 , 108 , 111 , 99 , 97 , 116 , 101 , 100 , 0 , 0 , 0 , 0 , 100 , 117 , 112 , 108 , 105 , 99 , 97 , 116 , 101 , 32 , 111 , 114 , 32 , 99 , 111 , 110 , 116 , 114 , 97 , 100 , 105 , 99 , 116 , 111 , 114 , 121 , 32 , 97 , 114 , 103 , 117 , 109 , 101 , 110 , 116 , 115 , 0 , 0 , 0 , 0 , 45 , 45 , 40 , 37 , 46 , 49 , 102 , 97 , 44 , 37 , 46 , 49 , 102 , 98 , 41 , 0 , 115 , 105 , 101 , 110 , 110 , 97 , 52 , 0 , 10 , 9 , 85 , 115 , 101 , 114 , 45 , 68 , 101 , 102 , 105 , 110 , 101 , 100 , 32 , 70 , 117 , 110 , 99 , 116 , 105 , 111 , 110 , 115 , 58 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 102 , 117 , 110 , 99 , 116 , 105 , 111 , 110 , 32 , 37 , 115 , 32 , 114 , 101 , 113 , 117 , 105 , 114 , 101 , 115 , 32 , 37 , 100 , 32 , 118 , 97 , 114 , 105 , 97 , 98 , 108 , 101 , 37 , 99 , 0 , 0 , 0 , 0 , 0 , 0 , 119 , 114 , 111 , 110 , 103 , 32 , 97 , 114 , 103 , 117 , 109 , 101 , 110 , 116 , 32 , 105 , 110 , 32 , 115 , 101 , 116 , 32 , 97 , 114 , 114 , 111 , 119 , 0 , 0 , 0 , 0 , 0 , 109 , 97 , 108 , 102 , 111 , 114 , 109 , 101 , 100 , 32 , 114 , 97 , 110 , 103 , 101 , 32 , 119 , 105 , 116 , 104 , 32 , 99 , 111 , 110 , 115 , 116 , 114 , 97 , 105 , 110 , 116 , 32 , 40 , 117 , 115 , 101 , 32 , 39 , 60 , 39 , 32 , 111 , 110 , 108 , 121 , 41 , 0 , 0 , 100 , 114 , 97 , 119 , 32 , 40 , 37 , 46 , 49 , 102 , 97 , 44 , 37 , 46 , 49 , 102 , 98 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 98 , 114 , 111 , 119 , 110 , 52 , 0 , 0 , 100 , 101 , 102 , 97 , 117 , 108 , 116 , 32 , 108 , 97 , 121 , 101 , 114 , 0 , 0 , 0 , 101 , 110 , 100 , 32 , 99 , 111 , 111 , 114 , 100 , 105 , 110 , 97 , 116 , 101 , 115 , 32 , 101 , 120 , 112 , 101 , 99 , 116 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 108 , 105 , 110 , 101 , 116 , 121 , 112 , 101 , 32 , 37 , 100 , 59 , 10 , 0 , 0 , 0 , 111 , 114 , 97 , 110 , 103 , 101 , 114 , 101 , 100 , 52 , 0 , 0 , 0 , 0 , 0 , 0 , 9 , 71 , 114 , 105 , 100 , 32 , 100 , 114 , 97 , 119 , 110 , 32 , 97 , 116 , 32 , 37 , 115 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 116 , 97 , 114 , 116 , 32 , 99 , 111 , 111 , 114 , 100 , 105 , 110 , 97 , 116 , 101 , 115 , 32 , 101 , 120 , 112 , 101 , 99 , 116 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 124 , 99 , 111 , 115 , 40 , 51 , 54 , 48 , 120 , 41 , 124 , 0 , 0 , 0 , 0 , 0 , 112 , 117 , 116 , 95 , 116 , 101 , 120 , 116 , 40 , 32 , 98 , 116 , 101 , 120 , 32 , 37 , 115 , 32 , 101 , 116 , 101 , 120 , 44 , 32 , 37 , 46 , 49 , 102 , 97 , 44 , 32 , 37 , 46 , 49 , 102 , 98 , 44 , 32 , 37 , 100 , 44 , 32 , 37 , 100 , 41 , 59 , 10 , 0 , 100 , 97 , 114 , 107 , 45 , 111 , 108 , 105 , 118 , 101 , 103 , 114 , 101 , 101 , 110 , 0 , 100 , 101 , 103 , 114 , 101 , 101 , 115 , 0 , 97 , 114 , 114 , 111 , 119 , 0 , 0 , 0 , 112 , 117 , 116 , 95 , 116 , 101 , 120 , 116 , 40 , 32 , 98 , 116 , 101 , 120 , 32 , 92 , 115 , 101 , 116 , 102 , 111 , 110 , 116 , 123 , 37 , 115 , 125 , 123 , 37 , 53 , 46 , 50 , 102 , 125 , 32 , 37 , 115 , 32 , 101 , 116 , 101 , 120 , 44 , 32 , 37 , 46 , 49 , 102 , 97 , 44 , 32 , 37 , 46 , 49 , 102 , 98 , 44 , 32 , 37 , 100 , 44 , 32 , 37 , 100 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 100 , 97 , 114 , 107 , 45 , 112 , 108 , 117 , 109 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 97 , 100 , 105 , 97 , 110 , 115 , 0 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 83 , 107 , 105 , 112 , 112 , 101 , 100 , 32 , 37 , 100 , 32 , 112 , 111 , 105 , 110 , 116 , 115 , 32 , 111 , 117 , 116 , 115 , 105 , 100 , 101 , 32 , 114 , 9
. concat ( [ 79 , 117 , 116 , 32 , 111 , 102 , 32 , 109 , 101 , 109 , 111 , 114 , 121 , 32 , 105 , 110 , 32 , 115 , 116 , 97 , 116 , 115 , 58 , 32 , 116 , 111 , 111 , 32 , 109 , 97 , 110 , 121 , 32 , 100 , 97 , 116 , 97 , 112 , 111 , 105 , 110 , 116 , 115 , 32 , 40 , 37 , 100 , 41 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 114 , 103 , 98 , 32 , 34 , 37 , 115 , 34 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 65 , 108 , 108 , 32 , 112 , 111 , 105 , 110 , 116 , 115 , 32 , 120 , 32 , 118 , 97 , 108 , 117 , 101 , 32 , 117 , 110 , 100 , 101 , 102 , 105 , 110 , 101 , 100 , 0 , 0 , 0 , 0 , 34 , 119 , 105 , 116 , 104 , 34 , 32 , 97 , 108 , 108 , 111 , 119 , 101 , 100 , 32 , 111 , 110 , 108 , 121 , 32 , 97 , 102 , 116 , 101 , 114 , 32 , 112 , 97 , 114 , 97 , 109 , 101 , 116 , 114 , 105 , 99 , 32 , 102 , 117 , 110 , 99 , 116 , 105 , 111 , 110 , 32 , 102 , 117 , 108 , 108 , 121 , 32 , 115 , 112 , 101 , 99 , 105 , 102 , 105 , 101 , 100 , 0 , 0 , 0 , 97 , 108 , 108 , 36 , 119 , 105 , 110 , 100 , 111 , 119 , 115 , 0 , 0 , 0 , 0 , 0 , 62 , 61 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 116 , 105 , 109 , 101 , 115 , 116 , 97 , 109 , 112 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 101 , 36 , 120 , 112 , 108 , 105 , 99 , 105 , 116 , 0 , 0 , 0 , 0 , 0 , 75 , 80 , 95 , 70 , 50 , 0 , 0 , 0 , 9 , 114 , 109 , 97 , 114 , 103 , 105 , 110 , 32 , 105 , 115 , 32 , 115 , 101 , 116 , 32 , 116 , 111 , 32 , 37 , 103 , 10 , 0 , 0 , 99 , 108 , 111 , 115 , 101 , 100 , 0 , 0 , 70 , 108 , 111 , 97 , 116 , 86 , 97 , 108 , 117 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 70 , 105 , 114 , 115 , 116 , 32 , 112 , 97 , 114 , 97 , 109 , 101 , 116 , 101 , 114 , 32 , 116 , 111 , 32 , 115 , 116 , 114 , 102 , 116 , 105 , 109 , 101 , 32 , 109 , 117 , 115 , 116 , 32 , 98 , 101 , 32 , 97 , 32 , 102 , 111 , 114 , 109 , 97 , 116 , 32 , 115 , 116 , 114 , 105 , 110 , 103 , 0 , 0 , 0 , 0 , 0 , 114 , 103 , 98 , 102 , 111 , 114 , 109 , 117 , 108 , 97 , 101 , 32 , 37 , 100 , 44 , 32 , 37 , 100 , 44 , 32 , 37 , 100 , 10 , 0 , 114 , 97 , 36 , 105 , 115 , 101 , 0 , 0 , 100 , 111 , 109 , 97 , 105 , 110 , 0 , 0 , 116 , 105 , 109 , 101 , 115 , 116 , 97 , 109 , 112 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 105 , 36 , 109 , 112 , 108 , 105 , 99 , 105 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 9 , 114 , 109 , 97 , 114 , 103 , 105 , 110 , 32 , 105 , 115 , 32 , 115 , 101 , 116 , 32 , 116 , 111 , 32 , 115 , 99 , 114 , 101 , 101 , 110 , 32 , 37 , 103 , 10 , 0 , 0 , 0 , 78 , 97 , 78 , 0 , 0 , 0 , 0 , 0 , 10 , 115 , 101 , 116 , 32 , 112 , 97 , 108 , 101 , 116 , 116 , 101 , 32 , 0 , 0 , 0 , 119 , 104 , 105 , 99 , 104 , 61 , 61 , 65 , 85 , 84 , 79 , 83 , 67 , 65 , 76 , 69 , 95 , 77 , 73 , 78 , 32 , 124 , 124 , 32 , 119 , 104 , 105 , 99 , 104 , 61 , 61 , 65 , 85 , 84 , 79 , 83 , 67 , 65 , 76 , 69 , 95 , 77 , 65 , 88 , 0 , 0 , 0 , 0 , 105 , 110 , 112 , 117 , 116 , 0 , 0 , 0 , 116 , 114 , 36 , 97 , 110 , 115 , 112 , 97 , 114 , 101 , 110 , 116 , 0 , 0 , 0 , 0 , 9 , 98 , 109 , 97 , 114 , 103 , 105 , 110 , 32 , 105 , 115 , 32 , 99 , 111 , 109 , 112 , 117 , 116 , 101 , 100 , 32 , 97 , 117 , 116 , 111 , 109 , 97 , 116 , 105 , 99 , 97 , 108 , 108 , 121 , 10 , 0 , 0 , 0 , 0 , 0 , 108 , 97 , 121 , 101 , 114 , 100 , 36 , 101 , 102 , 97 , 117 , 108 , 116 , 0 , 0 , 0 , 87 , 97 , 114 , 110 , 105 , 110 , 103 , 32 , 45 , 32 , 100 , 105 , 102 , 102 , 105 , 99 , 117 , 108 , 116 , 121 , 32 , 102 , 105 , 116 , 116 , 105 , 110 , 103 , 32 , 112 , 108 , 111 , 116 , 32 , 116 , 105 , 116 , 108 , 101 , 115 , 32 , 105 , 110 , 116 , 111 , 32 , 107 , 101 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 97 , 118 , 101 , 46 , 99 , 0 , 0 , 115 , 116 , 97 , 110 , 100 , 97 , 108 , 111 , 110 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 115 , 111 , 36 , 108 , 105 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 9 , 98 , 109 , 97 , 114 , 103 , 105 , 110 , 32 , 105 , 115 , 32 , 115 , 101 , 116 , 32 , 116 , 111 , 32 , 37 , 103 , 10 , 0 , 0 , 110 , 111 , 112 , 111 , 36 , 108 , 97 , 114 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 115 , 58 , 37 , 100 , 32 , 111 , 111 , 111 , 112 , 115 , 58 , 32 , 85 , 110 , 107 , 110 , 111 , 119 , 110 , 32 , 99 , 111 , 108 , 111 , 114 , 32 , 109 , 111 , 100 , 101 , 108 , 32 , 39 , 37 , 99 , 39 , 46 , 10 , 0 , 124 , 99 , 111 , 115 , 40 , 49 , 56 , 48 , 120 , 41 , 124 , 0 , 0 , 0 , 0 , 0 , 115 , 105 , 122 , 101 , 32 , 37 , 103 , 37 , 115 , 44 , 37 , 103 , 37 , 115 , 32 , 37 , 115 , 32 , 37 , 115 , 32 , 37 , 115 , 0 , 110 , 111 , 116 , 114 , 36 , 97 , 110 , 115 , 112 , 97 , 114 , 101 , 110 , 116 , 0 , 0 , 9 , 98 , 109 , 97 , 114 , 103 , 105 , 110 , 32 , 105 , 115 , 32 , 115 , 101 , 116 , 32 , 116 , 111 , 32 , 115 , 99 , 114 , 101 , 101 , 110 , 32 , 37 , 103 , 10 , 0 , 0 , 0 , 112 , 111 , 36 , 108 , 97 , 114 , 0 , 0 , 88 , 89 , 90 , 32 , 0 , 0 , 0 , 0 , 107 , 101 , 121 , 119 , 111 , 114 , 100 , 32 , 39 , 100 , 97 , 116 , 97 , 39 , 32 , 100 , 101 , 112 , 114 , 101 , 99 , 97 , 116 , 101 , 100 , 44 , 32 , 117 , 115 , 101 , 32 , 39 , 115 , 104 , 111 , 119 , 32 , 115 , 116 , 121 , 108 , 101 , 32 , 100 , 97 , 116 , 97 , 39 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 101 , 120 , 116 , 114 , 97 , 110 , 101 , 111 , 117 , 115 , 32 , 97 , 114 , 103 , 117 , 109 , 101 , 110 , 116 , 32 , 105 , 110 , 32 , 115 , 101 , 116 , 32 , 116 , 101 , 114 , 109 , 105 , 110 , 97 , 108 , 32 , 37 , 115 , 0 , 0 , 9 , 108 , 109 , 97 , 114 , 103 , 105 , 110 , 32 , 105 , 115 , 32 , 99 , 111 , 109 , 112 , 117 , 116 , 101 , 100 , 32 , 97 , 117 , 116 , 111 , 109 , 97 , 116 , 105 , 99 , 97 , 108 , 108 , 121 , 10 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 114 , 36 , 116 , 105 , 99 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 89 , 73 , 81 , 32 , 0 , 0 , 0 , 0 , 122 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 71 , 110 , 117 , 112 , 108 , 111 , 116 , 32 , 119 , 97 , 115 , 32 , 98 , 117 , 105 , 108 , 116 , 32 , 119 , 105 , 116 , 104 , 111 , 117 , 116 , 32 , 115 , 117 , 112 , 112 , 111 , 114 , 116 , 32 , 102 , 111 , 114 , 32 , 80 , 78 , 71 , 32 , 105 , 109 , 97 , 103 , 101 , 115 , 46 , 32 , 89 , 111 , 117 , 32 , 99 , 97 , 110 , 110 , 111 , 116 , 32 , 117 , 115 , 101 , 32 , 116 , 104 , 105 , 115 , 32 , 111 , 112 , 116 , 105 , 111 , 110 , 32 , 117 , 110 , 108 , 101 , 115 , 115 , 32 , 121 , 111 , 117 , 32 , 114 , 101 , 98 , 117 , 105 , 108 , 100 , 32 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 46 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 104 , 105 , 36 , 100 , 100 , 101 , 110 , 51 , 100 , 0 , 0 , 0 , 0 , 0 , 9 , 108 , 109 , 97 , 114 , 103 , 105 , 110 , 32 , 105 , 115 , 32 , 115 , 101 , 116 , 32 , 116 , 111 , 32 , 37 , 103 , 10 , 0 , 0 , 110 , 111 , 109 , 99 , 98 , 36 , 116 , 105 , 99 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 67 , 77 , 89 , 32 , 0 , 0 , 0 , 0 , 47 , 117 , 11
. concat ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 9 , 67 , 111 , 108 , 111 , 114 , 45 , 77 , 111 , 100 , 101 , 108 , 58 , 32 , 0 , 0 , 119 , 114 , 111 , 110 , 103 , 32 , 111 , 112 , 116 , 105 , 111 , 110 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 109 , 37 , 115 , 116 , 105 , 99 , 115 , 32 , 37 , 102 , 10 , 0 , 37 , 103 , 32 , 37 , 103 , 0 , 0 , 0 , 32 , 108 , 116 , 32 , 37 , 100 , 0 , 0 , 121 , 32 , 114 , 97 , 110 , 103 , 101 , 32 , 105 , 115 , 32 , 105 , 110 , 118 , 97 , 108 , 105 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 33 , 61 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 32 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 32 , 115 , 99 , 97 , 108 , 105 , 110 , 103 , 32 , 102 , 97 , 99 , 116 , 111 , 114 , 32 , 102 , 111 , 114 , 32 , 105 , 110 , 100 , 105 , 118 , 105 , 100 , 117 , 97 , 108 , 32 , 108 , 105 , 110 , 101 , 115 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 80 , 97 , 103 , 101 , 68 , 111 , 119 , 110 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 99 , 111 , 108 , 111 , 114 , 32 , 112 , 111 , 115 , 105 , 116 , 105 , 111 , 110 , 115 , 32 , 102 , 111 , 114 , 32 , 100 , 105 , 115 , 99 , 114 , 101 , 116 , 101 , 32 , 112 , 97 , 108 , 101 , 116 , 116 , 101 , 32 , 116 , 101 , 114 , 109 , 105 , 110 , 97 , 108 , 115 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 117 , 108 , 101 , 114 , 32 , 97 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 109 , 37 , 115 , 116 , 105 , 99 , 115 , 32 , 100 , 101 , 102 , 97 , 117 , 108 , 116 , 10 , 0 , 0 , 0 , 0 , 117 , 110 , 114 , 101 , 99 , 111 , 103 , 110 , 105 , 122 , 101 , 100 , 32 , 112 , 108 , 111 , 116 , 32 , 116 , 121 , 112 , 101 , 0 , 0 , 37 , 37 , 0 , 0 , 0 , 0 , 0 , 0 , 85 , 110 , 115 , 105 , 103 , 110 , 101 , 100 , 83 , 104 , 111 , 114 , 116 , 0 , 0 , 0 , 103 , 112 , 95 , 115 , 101 , 116 , 95 , 112 , 111 , 105 , 110 , 116 , 115 , 105 , 122 , 101 , 40 , 37 , 103 , 41 , 59 , 10 , 0 , 0 , 110 , 111 , 97 , 36 , 117 , 116 , 111 , 116 , 105 , 116 , 108 , 101 , 115 , 0 , 0 , 0 , 65 , 76 , 76 , 32 , 114 , 101 , 109 , 97 , 105 , 110 , 105 , 110 , 103 , 0 , 0 , 0 , 101 , 120 , 112 , 101 , 99 , 116 , 105 , 110 , 103 , 32 , 114 , 117 , 108 , 101 , 114 , 32 , 99 , 111 , 111 , 114 , 100 , 105 , 110 , 97 , 116 , 101 , 115 , 0 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 109 , 37 , 115 , 116 , 105 , 99 , 115 , 10 , 0 , 0 , 0 , 0 , 37 , 100 , 47 , 37 , 109 , 0 , 0 , 0 , 83 , 105 , 103 , 110 , 101 , 100 , 66 , 121 , 116 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 118 , 101 , 114 , 116 , 32 , 62 , 61 , 32 , 48 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 32 , 112 , 111 , 105 , 110 , 116 , 115 , 105 , 122 , 101 , 32 , 115 , 99 , 97 , 108 , 105 , 110 , 103 , 32 , 102 , 97 , 99 , 116 , 111 , 114 , 10 , 0 , 0 , 0 , 0 , 97 , 36 , 117 , 116 , 111 , 116 , 105 , 116 , 108 , 101 , 115 , 0 , 0 , 0 , 0 , 0 , 77 , 65 , 88 , 32 , 37 , 105 , 0 , 0 , 114 , 117 , 36 , 108 , 101 , 114 , 0 , 0 , 115 , 101 , 116 , 32 , 110 , 111 , 109 , 37 , 115 , 116 , 105 , 99 , 115 , 10 , 0 , 0 , 103 , 112 , 95 , 115 , 99 , 97 , 108 , 101 , 95 , 116 , 101 , 120 , 116 , 32 , 58 , 61 , 32 , 37 , 103 , 59 , 10 , 0 , 0 , 0 , 104 , 36 , 101 , 105 , 103 , 104 , 116 , 0 , 9 , 97 , 108 , 108 , 111 , 99 , 97 , 116 , 105 , 110 , 103 , 32 , 0 , 0 , 0 , 0 , 110 , 111 , 114 , 117 , 36 , 108 , 101 , 114 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 116 , 105 , 99 , 115 , 108 , 101 , 118 , 101 , 108 , 32 , 37 , 103 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 124 , 120 , 45 , 48 , 46 , 53 , 124 , 0 , 37 , 37 , 32 , 116 , 101 , 120 , 116 , 32 , 115 , 99 , 97 , 108 , 105 , 110 , 103 , 32 , 102 , 97 , 99 , 116 , 111 , 114 , 32 , 102 , 111 , 114 , 32 , 116 , 104 , 101 , 32 , 119 , 104 , 111 , 108 , 101 , 32 , 102 , 105 , 103 , 117 , 114 , 101 , 10 , 0 , 0 , 0 , 0 , 119 , 36 , 105 , 100 , 116 , 104 , 0 , 0 , 32 , 78 , 79 , 84 , 0 , 0 , 0 , 0 , 115 , 104 , 111 , 117 , 108 , 100 , 32 , 98 , 101 , 58 , 32 , 37 , 100 , 32 , 60 , 61 , 32 , 109 , 111 , 117 , 115 , 101 , 102 , 111 , 114 , 109 , 97 , 116 , 32 , 60 , 61 , 32 , 37 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 120 , 121 , 112 , 108 , 97 , 110 , 101 , 32 , 97 , 116 , 32 , 37 , 103 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 32 , 102 , 111 , 114 , 32 , 97 , 100 , 100 , 105 , 116 , 105 , 111 , 110 , 97 , 108 , 32 , 117 , 115 , 101 , 114 , 45 , 100 , 101 , 102 , 105 , 110 , 101 , 100 , 32 , 115 , 101 , 116 , 116 , 105 , 110 , 103 , 115 , 10 , 103 , 112 , 95 , 115 , 101 , 116 , 117 , 112 , 95 , 98 , 101 , 102 , 111 , 114 , 101 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 112 , 36 , 97 , 99 , 105 , 110 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 9 , 97 , 108 , 108 , 32 , 99 , 111 , 108 , 111 , 114 , 32 , 102 , 111 , 114 , 109 , 117 , 108 , 97 , 101 , 32 , 65 , 82 , 69 , 37 , 115 , 32 , 119 , 114 , 105 , 116 , 116 , 101 , 110 , 32 , 105 , 110 , 116 , 111 , 32 , 111 , 117 , 116 , 112 , 117 , 116 , 32 , 112 , 111 , 115 , 116 , 115 , 99 , 114 , 105 , 112 , 116 , 32 , 102 , 105 , 108 , 101 , 10 , 0 , 0 , 112 , 108 , 101 , 97 , 115 , 101 , 32 , 39 , 115 , 101 , 116 , 32 , 109 , 111 , 117 , 115 , 101 , 32 , 109 , 111 , 117 , 115 , 101 , 102 , 111 , 114 , 109 , 97 , 116 , 32 , 60 , 102 , 109 , 116 , 62 , 39 , 32 , 102 , 105 , 114 , 115 , 116 , 46 , 10 , 0 , 0 , 0 , 0 , 102 , 117 , 110 , 99 , 116 , 105 , 111 , 110 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 44 , 32 , 116 , 97 , 110 , 103 , 101 , 110 , 116 , 61 , 37 , 115 , 41 , 0 , 0 , 0 , 99 , 111 , 117 , 108 , 100 , 32 , 110 , 111 , 116 , 32 , 111 , 112 , 101 , 110 , 32 , 108 , 111 , 103 , 45 , 102 , 105 , 108 , 101 , 32 , 37 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 32 , 68 , 105 , 102 , 102 , 101 , 114 , 101 , 110 , 116 , 32 , 105 , 110 , 105 , 116 , 105 , 97 , 108 , 105 , 115 , 97 , 116 , 105 , 111 , 110 , 115 , 10 , 0 , 0 , 0 , 115 , 97 , 36 , 109 , 112 , 108 , 101 , 110 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 78 , 69 , 71 , 65 , 84 , 73 , 86 , 69 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 109 , 111 , 36 , 117 , 115 , 101 , 102 , 111 , 114 , 109 , 97 , 116 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 115 , 116 , 121 , 108 , 101 , 32 , 102 , 117 , 110 , 99 , 116 , 105 , 111 , 110 , 32 , 0 , 0 , 0 , 0 , 0 , 44 , 32 , 37 , 32 , 35 , 46 , 52 , 103 , 100 , 101 , 103 , 41 , 0 , 0 , 0 , 0 , 80 , 115 , 101 , 117 , 100 , 111 , 100 , 97 , 116 , 97 , 32 , 110 , 111 , 116 , 32 , 121 , 101 , 116 , 32 , 105 , 109 , 112 , 108 , 101 , 109 , 101 , 110 , 116 , 101 , 100 , 32 , 102 , 111 , 114 , 32 , 112 , 111 , 108 , 97 , 114 , 32 , 111 , 114 , 32 , 112 , 97 , 114 , 97 , 109 , 101 , 116 , 114 , 105 , 99 , 32 , 103 , 114 , 97 , 112 , 104 , 115 , 0 , 0 , 0 , 9 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 32 , 101 , 110 , 99 , 111
. concat ( [ 103 , 58 , 32 , 0 , 0 , 0 , 0 , 0 , 78 , 97 , 109 , 101 , 100 , 32 , 99 , 111 , 108 , 111 , 114 , 115 , 32 , 119 , 105 , 108 , 108 , 32 , 112 , 114 , 111 , 100 , 117 , 99 , 101 , 32 , 115 , 116 , 114 , 97 , 110 , 103 , 101 , 32 , 114 , 101 , 115 , 117 , 108 , 116 , 115 , 32 , 105 , 102 , 32 , 110 , 111 , 116 , 32 , 105 , 110 , 32 , 99 , 111 , 108 , 111 , 114 , 32 , 109 , 111 , 100 , 101 , 32 , 82 , 71 , 66 , 46 , 0 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 111 , 102 , 102 , 115 , 101 , 116 , 115 , 0 , 0 , 0 , 0 , 0 , 27 , 76 , 86 , 49 , 27 , 37 , 37 , 33 , 49 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 37 , 37 , 33 , 48 , 27 , 12 , 27 , 76 , 86 , 48 , 0 , 0 , 0 , 0 , 0 , 27 , 76 , 70 , 0 , 0 , 0 , 0 , 0 , 121 , 89 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 106 , 36 , 105 , 115 , 0 , 0 , 0 , 27 , 76 , 71 , 0 , 0 , 0 , 0 , 0 , 103 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 52 , 100 , 32 , 0 , 0 , 0 , 0 , 27 , 77 , 86 , 0 , 0 , 0 , 0 , 0 , 27 , 77 , 76 , 0 , 0 , 0 , 0 , 0 , 27 , 77 , 76 , 63 , 0 , 0 , 0 , 0 , 37 , 108 , 102 , 32 , 44 , 32 , 37 , 108 , 102 , 32 , 37 , 99 , 0 , 0 , 0 , 0 , 27 , 77 , 76 , 53 , 0 , 0 , 0 , 0 , 32 , 32 , 99 , 108 , 105 , 112 , 32 , 99 , 117 , 114 , 114 , 101 , 110 , 116 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 32 , 116 , 111 , 32 , 117 , 110 , 105 , 116 , 115 , 113 , 117 , 97 , 114 , 101 , 32 , 120 , 121 , 115 , 99 , 97 , 108 , 101 , 100 , 32 , 40 , 37 , 46 , 51 , 102 , 97 , 44 , 37 , 46 , 51 , 102 , 97 , 41 , 32 , 115 , 104 , 105 , 102 , 116 , 101 , 100 , 32 , 40 , 37 , 46 , 51 , 102 , 97 , 44 , 37 , 46 , 51 , 102 , 97 , 41 , 59 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 27 , 76 , 84 , 0 , 0 , 0 , 0 , 0 , 100 , 101 , 102 , 36 , 97 , 117 , 108 , 116 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 101 , 112 , 36 , 108 , 111 , 116 , 0 , 27 , 77 , 82 , 69 , 58 , 48 , 0 , 0 , 9 , 102 , 108 , 117 , 115 , 104 , 105 , 110 , 103 , 32 , 116 , 114 , 105 , 97 , 110 , 103 , 108 , 101 , 115 , 32 , 97 , 114 , 101 , 32 , 37 , 115 , 100 , 114 , 97 , 119 , 110 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 105 , 110 , 118 , 97 , 108 , 105 , 100 , 32 , 112 , 97 , 108 , 101 , 116 , 116 , 101 , 32 , 111 , 112 , 116 , 105 , 111 , 110 , 0 , 0 , 69 , 120 , 112 , 101 , 99 , 116 , 105 , 110 , 103 , 32 , 91 , 110 , 111 , 93 , 111 , 117 , 116 , 112 , 117 , 116 , 32 , 111 , 114 , 32 , 112 , 114 , 101 , 102 , 105 , 120 , 0 , 0 , 115 , 101 , 116 , 32 , 108 , 111 , 103 , 115 , 99 , 97 , 108 , 101 , 32 , 37 , 115 , 32 , 37 , 103 , 10 , 0 , 0 , 0 , 0 , 0 , 27 , 77 , 82 , 48 , 48 , 0 , 0 , 0 , 27 , 76 , 72 , 0 , 0 , 0 , 0 , 0 , 27 , 77 , 77 , 0 , 0 , 0 , 0 , 0 , 120 , 88 , 0 , 0 , 0 , 0 , 0 , 0 , 31 , 37 , 115 , 10 , 0 , 0 , 0 , 0 , 27 , 91 , 63 , 51 , 56 , 108 , 0 , 0 , 35 , 33 , 37 , 115 , 47 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 10 , 35 , 10 , 0 , 96 , 97 , 96 , 97 , 98 , 99 , 100 , 104 , 105 , 106 , 107 , 108 , 0 , 0 , 0 , 0 , 31 , 27 , 3 , 0 , 0 , 0 , 0 , 0 , 67 , 111 , 109 , 109 , 97 , 110 , 100 , 32 , 39 , 115 , 101 , 116 , 32 , 104 , 105 , 115 , 116 , 111 , 114 , 121 , 115 , 105 , 122 , 101 , 39 , 32 , 114 , 101 , 113 , 117 , 105 , 114 , 101 , 115 , 32 , 104 , 105 , 115 , 116 , 111 , 114 , 121 , 32 , 115 , 117 , 112 , 112 , 111 , 114 , 116 , 46 , 0 , 0 , 0 , 0 , 0 , 100 , 114 , 97 , 119 , 32 , 98 , 105 , 116 , 109 , 97 , 112 , 105 , 109 , 97 , 103 , 101 , 32 , 40 , 37 , 117 , 44 , 37 , 117 , 44 , 105 , 109 , 103 , 41 , 32 , 120 , 121 , 115 , 99 , 97 , 108 , 101 , 100 , 32 , 40 , 37 , 46 , 51 , 102 , 97 , 44 , 37 , 46 , 51 , 102 , 97 , 41 , 32 , 115 , 104 , 105 , 102 , 116 , 101 , 100 , 32 , 40 , 37 , 46 , 51 , 102 , 97 , 44 , 37 , 46 , 51 , 102 , 97 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 27 , 12 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 32 , 109 , 97 , 116 , 99 , 104 , 105 , 110 , 103 , 32 , 39 , 125 , 39 , 0 , 122 , 36 , 101 , 114 , 111 , 0 , 0 , 0 , 121 , 122 , 120 , 0 , 0 , 0 , 0 , 0 , 56 , 57 , 58 , 59 , 0 , 0 , 0 , 0 , 69 , 78 , 68 , 0 , 0 , 0 , 0 , 0 , 112 , 97 , 114 , 97 , 36 , 108 , 108 , 101 , 108 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 110 , 45 , 110 , 101 , 103 , 97 , 116 , 105 , 118 , 101 , 32 , 110 , 117 , 109 , 98 , 101 , 114 , 32 , 114 , 101 , 113 , 117 , 105 , 114 , 101 , 100 , 0 , 0 , 0 , 0 , 117 , 110 , 115 , 101 , 116 , 32 , 108 , 111 , 103 , 115 , 99 , 97 , 108 , 101 , 10 , 0 , 27 , 37 , 99 , 0 , 0 , 0 , 0 , 0 , 27 , 91 , 63 , 51 , 56 , 104 , 0 , 0 , 116 , 105 , 116 , 108 , 101 , 0 , 0 , 0 , 67 , 97 , 110 , 32 , 111 , 110 , 108 , 121 , 32 , 102 , 108 , 105 , 112 , 32 , 120 , 44 , 32 , 121 , 44 , 32 , 97 , 110 , 100 , 47 , 111 , 114 , 32 , 122 , 0 , 0 , 0 , 0 , 32 , 101 , 109 , 112 , 116 , 121 , 32 , 0 , 106 , 115 , 36 , 100 , 105 , 114 , 0 , 0 , 102 , 115 , 105 , 122 , 101 , 0 , 0 , 0 , 97 , 120 , 36 , 101 , 115 , 0 , 0 , 0 , 32 , 106 , 115 , 100 , 105 , 114 , 32 , 34 , 37 , 115 , 34 , 0 , 0 , 0 , 0 , 0 , 47 , 98 , 105 , 110 , 47 , 115 , 104 , 0 , 38 , 38 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 116 , 105 , 116 , 108 , 101 , 32 , 34 , 37 , 115 , 34 , 0 , 0 , 0 , 0 , 0 , 118 , 97 , 114 , 110 , 97 , 109 , 101 , 0 , 32 , 109 , 111 , 117 , 115 , 105 , 110 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 100 , 114 , 97 , 119 , 32 , 105 , 109 , 97 , 103 , 101 , 40 , 10 , 32 , 32 , 0 , 0 , 32 , 115 , 116 , 97 , 110 , 100 , 97 , 108 , 111 , 110 , 101 , 0 , 0 , 0 , 0 , 0 , 114 , 97 , 120 , 36 , 105 , 115 , 0 , 0 , 32 , 110 , 97 , 109 , 101 , 32 , 34 , 37 , 115 , 34 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 119 , 97 , 112 , 112 , 101 , 100 , 32 , 112 , 100 , 112 , 32 , 40 , 100 , 105 , 109 , 109 , 108 , 101 , 41 , 0 , 0 , 0 , 0 , 66 , 69 , 71 , 73 , 78 , 0 , 0 , 0 , 85 , 110 , 107 , 110 , 111 , 119 , 110 , 32 , 99 , 111 , 108 , 111 , 114 , 32 , 109 , 111 , 100 , 101 , 108 , 46 , 0 , 0 , 0 , 0 , 37 , 115 , 10 , 0 , 0 , 0 , 0 , 0 , 116 , 105 , 116 , 108 , 101 , 32 , 0 , 0 , 32 , 102 , 111 , 110 , 116 , 115 , 99 , 97 , 108 , 101 , 32 , 37 , 103 , 0 , 0 , 0 , 9 , 99 , 117 , 114 , 114 , 101 , 110 , 116 , 32 , 116 , 101 , 114 , 109 , 105 , 110 , 97 , 108 , 32 , 116 , 121 , 112 , 101 , 32 , 105 , 115 , 32 , 117 , 110 , 107 , 110 , 111 , 119 , 110 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 77 , 79 , 85 , 83 , 69 , 95 , 67 , 84 , 82 , 76 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 101 , 110 , 104 , 97 , 110 , 99 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 112 , 114 , 105 , 110 , 116 , 102 , 32 , 97 , 114 , 103 , 115 , 0 , 0 , 0 , 0 , 37 , 115 , 32 , 102 , 115 , 105 , 122 , 101 , 32 , 37 , 103 , 32 , 108 , 119 , 32 , 37 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 120 , 88 , 121 , 89 , 122 , 90 , 0 , 0 , 32 , 115 , 105 , 122 , 101 , 32 , 37 , 100 , 44 , 37 , 100 , 0 , 0 , 0 , 0 , 0 , 32 , 98 , 117 , 116 , 116 , 0 , 0 , 0 , 32 , 114 , 111 , 117 , 110 , 100 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 100 , 97 , 115 , 104 , 108 , 10
. concat ( [ 114 , 103 , 98 , 40 , 48 , 48 , 48 , 44 , 48 , 48 , 48 , 44 , 48 , 48 , 48 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 112 , 108 , 105 , 110 , 101 , 32 , 109 , 97 , 116 , 114 , 105 , 120 , 0 , 0 , 0 , 109 , 112 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 103 , 98 , 40 , 50 , 53 , 53 , 44 , 50 , 53 , 53 , 44 , 50 , 53 , 53 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 114 , 36 , 97 , 110 , 103 , 101 , 0 , 117 , 115 , 105 , 110 , 103 , 32 , 100 , 101 , 102 , 97 , 117 , 108 , 116 , 32 , 98 , 105 , 110 , 97 , 114 , 121 , 32 , 114 , 101 , 99 , 111 , 114 , 100 , 47 , 97 , 114 , 114 , 97 , 121 , 32 , 115 , 116 , 114 , 117 , 99 , 116 , 117 , 114 , 101 , 0 , 0 , 0 , 0 , 0 , 72 , 111 , 109 , 101 , 0 , 0 , 0 , 0 , 34 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 83 , 85 , 82 , 70 , 65 , 67 , 69 , 0 , 105 , 110 , 118 , 97 , 108 , 105 , 100 , 32 , 112 , 109 , 51 , 100 , 32 , 111 , 112 , 116 , 105 , 111 , 110 , 0 , 0 , 0 , 0 , 0 , 84 , 40 , 37 , 100 , 44 , 37 , 100 , 44 , 37 , 46 , 49 , 102 , 44 , 34 , 37 , 115 , 34 , 44 , 34 , 0 , 0 , 0 , 0 , 0 , 117 , 110 , 115 , 101 , 116 , 32 , 115 , 116 , 121 , 108 , 101 , 32 , 108 , 105 , 110 , 101 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 102 , 105 , 108 , 108 , 101 , 100 , 95 , 112 , 111 , 108 , 121 , 103 , 111 , 110 , 51 , 100 , 32 , 99 , 111 , 114 , 110 , 101 , 114 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 32 , 32 , 112 , 117 , 115 , 104 , 101 , 100 , 32 , 116 , 101 , 114 , 109 , 105 , 110 , 97 , 108 , 32 , 37 , 115 , 32 , 37 , 115 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 77 , 79 , 85 , 83 , 69 , 95 , 66 , 85 , 84 , 84 , 79 , 78 , 0 , 0 , 0 , 0 , 84 , 82 , 40 , 37 , 100 , 44 , 37 , 100 , 44 , 37 , 100 , 44 , 37 , 46 , 49 , 102 , 44 , 34 , 37 , 115 , 34 , 44 , 34 , 0 , 105 , 110 , 116 , 101 , 114 , 110 , 97 , 108 , 32 , 101 , 114 , 114 , 111 , 114 , 32 , 58 , 32 , 110 , 111 , 110 , 45 , 83 , 84 , 82 , 73 , 78 , 71 , 32 , 97 , 114 , 103 , 117 , 109 , 101 , 110 , 116 , 0 , 0 , 0 , 0 , 82 , 105 , 103 , 104 , 116 , 0 , 0 , 0 , 108 , 105 , 116 , 116 , 108 , 101 , 0 , 0 , 80 , 116 , 40 , 37 , 100 , 44 , 37 , 100 , 44 , 37 , 100 , 44 , 37 , 46 , 49 , 102 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 68 , 111 , 116 , 40 , 37 , 100 , 44 , 37 , 100 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 82 , 40 , 37 , 100 , 44 , 37 , 100 , 44 , 37 , 100 , 44 , 37 , 100 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 99 , 116 , 120 , 46 , 108 , 105 , 110 , 101 , 87 , 105 , 100 , 116 , 104 , 32 , 61 , 32 , 37 , 103 , 59 , 10 , 0 , 0 , 0 , 0 , 99 , 116 , 120 , 46 , 115 , 116 , 114 , 111 , 107 , 101 , 83 , 116 , 121 , 108 , 101 , 32 , 61 , 32 , 34 , 37 , 115 , 34 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 77 , 101 , 116 , 97 , 102 , 111 , 110 , 116 , 32 , 112 , 108 , 111 , 116 , 116 , 105 , 110 , 103 , 32 , 115 , 116 , 97 , 110 , 100 , 97 , 114 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 103 , 98 , 40 , 37 , 48 , 51 , 100 , 44 , 37 , 48 , 51 , 100 , 44 , 37 , 48 , 51 , 100 , 41 , 0 , 0 , 0 , 0 , 0 , 99 , 98 , 114 , 36 , 97 , 110 , 103 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 115 , 37 , 99 , 0 , 0 , 0 , 0 , 66 , 79 , 84 , 84 , 79 , 77 , 0 , 0 , 101 , 120 , 112 , 101 , 99 , 116 , 105 , 110 , 103 , 32 , 39 , 109 , 101 , 97 , 110 , 39 , 44 , 32 , 39 , 103 , 101 , 111 , 109 , 101 , 97 , 110 , 39 , 44 , 32 , 39 , 109 , 101 , 100 , 105 , 97 , 110 , 39 , 44 , 32 , 39 , 109 , 105 , 110 , 39 , 44 , 32 , 39 , 109 , 97 , 120 , 39 , 44 , 32 , 39 , 99 , 49 , 39 , 44 , 32 , 39 , 99 , 50 , 39 , 44 , 32 , 39 , 99 , 51 , 39 , 32 , 111 , 114 , 32 , 39 , 99 , 52 , 39 , 0 , 0 , 0 , 117 , 115 , 101 , 114 , 115 , 116 , 121 , 108 , 101 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 103 , 98 , 40 , 37 , 51 , 100 , 44 , 37 , 51 , 100 , 44 , 37 , 51 , 100 , 41 , 37 , 99 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 103 , 98 , 97 , 40 , 50 , 53 , 53 , 44 , 50 , 53 , 53 , 44 , 50 , 53 , 53 , 44 , 48 , 46 , 48 , 48 , 41 , 0 , 0 , 114 , 103 , 98 , 97 , 40 , 37 , 49 , 49 , 46 , 49 , 49 , 115 , 44 , 37 , 52 , 46 , 50 , 102 , 41 , 37 , 99 , 0 , 0 , 0 , 68 , 117 , 112 , 108 , 105 , 99 , 97 , 116 , 101 , 100 , 32 , 111 , 114 , 32 , 99 , 111 , 110 , 116 , 114 , 97 , 100 , 105 , 99 , 116 , 105 , 110 , 103 , 32 , 97 , 114 , 103 , 117 , 109 , 101 , 110 , 116 , 115 , 32 , 105 , 110 , 32 , 100 , 97 , 116 , 97 , 102 , 105 , 108 , 101 , 32 , 111 , 112 , 116 , 105 , 111 , 110 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 77 , 0 , 0 , 0 , 0 , 0 , 0 , 99 , 102 , 115 , 112 , 40 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 80 , 108 , 111 , 116 , 32 , 116 , 121 , 112 , 101 , 32 , 105 , 115 , 32 , 110 , 101 , 105 , 116 , 104 , 101 , 114 , 32 , 102 , 117 , 110 , 99 , 116 , 105 , 111 , 110 , 32 , 110 , 111 , 114 , 32 , 100 , 97 , 116 , 97 , 0 , 0 , 99 , 102 , 112 , 40 , 41 , 59 , 10 , 0 , 76 , 40 , 37 , 100 , 44 , 32 , 37 , 100 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 98 , 112 , 40 , 37 , 100 , 44 , 32 , 37 , 100 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 99 , 116 , 120 , 46 , 102 , 105 , 108 , 108 , 83 , 116 , 121 , 108 , 101 , 32 , 61 , 32 , 34 , 37 , 115 , 34 , 59 , 10 , 0 , 0 , 109 , 102 , 0 , 0 , 0 , 0 , 0 , 0 , 68 , 84 , 40 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 46 , 115 , 111 , 108 , 105 , 100 , 41 , 59 , 10 , 0 , 0 , 0 , 0 , 0 , 122 , 114 , 36 , 97 , 110 , 103 , 101 , 0 , 109 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 84 , 104 , 105 , 115 , 32 , 99 , 111 , 112 , 121 , 32 , 111 , 102 , 32 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 32 , 99 , 97 , 110 , 110 , 111 , 116 , 32 , 114 , 101 , 97 , 100 , 32 , 112 , 110 , 103 , 47 , 103 , 105 , 102 , 47 , 106 , 112 , 101 , 103 , 32 , 105 , 109 , 97 , 103 , 101 , 115 , 0 , 0 , 0 , 0 , 44 , 32 , 116 , 104 , 101 , 110 , 32 , 0 , 99 , 52 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 115 , 116 , 121 , 108 , 101 , 32 , 105 , 110 , 99 , 114 , 101 , 109 , 101 , 110 , 116 , 32 , 37 , 115 , 10 , 0 , 77 , 126 , 60 , 62 , 37 , 87 , 61 , 38 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 97 , 120 , 105 , 115 , 32 , 114 , 97 , 110 , 103 , 101 , 115 , 32 , 109 , 117 , 115 , 116 , 32 , 98 , 101 , 32 , 97 , 98 , 111 , 118 , 101 , 32 , 48 , 32 , 102 , 111 , 114 , 32 , 108 , 111 , 103 , 32 , 115 , 99 , 97 , 108 , 101 , 33 , 0 , 0 , 0 , 0 , 0 , 0 , 65 , 99 , 101 , 70 , 86 , 63 , 97 , 98 , 100 , 69 , 103 , 104 , 110 , 111 , 112 , 113 , 117 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 74 , 84 , 118 , 94 , 95 , 34 , 42 , 121 , 107 , 76 , 115 , 120 , 122 , 0 , 0 , 109 , 105 , 115 , 115 , 105 , 110 , 103 , 32 , 102 , 111 , 114 , 109 , 97 , 116 , 32 , 115 , 116 , 114 , 105 , 110 , 103 , 0 , 0 , 0 , 40 , 41 , 91 , 93 , 123 , 125 , 92 , 0 , 102 , 116 , 114 , 0 , 0 , 0 , 0 , 0 , 106 , 96 , 39 , 44 , 59 , 58 , 33 , 46 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 105 , 73 , 108 , 124 , 0 , 0 , 0 , 0 , 99 , 116 , 120 , 46 , 115 , 116 , 114 , 111 , 107 , 101 , 40 , 41 , 59 , 1
. concat ( [ 111 , 102 , 32 , 99 , 111 , 108 , 111 , 114 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 102 , 105 , 103 , 58 , 32 , 80 , 97 , 108 , 101 , 116 , 116 , 101 , 32 , 117 , 115 , 101 , 100 , 32 , 98 , 101 , 102 , 111 , 114 , 101 , 32 , 115 , 101 , 116 , 10 , 0 , 0 , 0 , 32 , 37 , 100 , 32 , 37 , 100 , 0 , 0 , 87 , 51 , 67 , 32 , 83 , 99 , 97 , 108 , 97 , 98 , 108 , 101 , 32 , 86 , 101 , 99 , 116 , 111 , 114 , 32 , 71 , 114 , 97 , 112 , 104 , 105 , 99 , 115 , 32 , 100 , 114 , 105 , 118 , 101 , 114 , 0 , 0 , 0 , 0 , 0 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 57 , 46 , 51 , 102 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 108 , 100 , 10 , 9 , 0 , 0 , 0 , 110 , 111 , 121 , 100 , 116 , 105 , 36 , 99 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 45 , 54 , 10 , 0 , 0 , 0 , 0 , 0 , 9 , 65 , 110 , 103 , 108 , 101 , 115 , 32 , 97 , 114 , 101 , 32 , 105 , 110 , 32 , 0 , 73 , 108 , 108 , 101 , 103 , 97 , 108 , 32 , 118 , 97 , 108 , 117 , 101 , 32 , 102 , 111 , 114 , 32 , 115 , 105 , 122 , 101 , 0 , 0 , 117 , 110 , 115 , 101 , 116 , 32 , 107 , 101 , 121 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 35 , 32 , 69 , 110 , 100 , 32 , 112 , 108 , 111 , 116 , 32 , 35 , 37 , 100 , 10 , 0 , 96 , 98 , 117 , 105 , 108 , 116 , 105 , 110 , 45 , 110 , 101 , 97 , 114 , 101 , 115 , 116 , 45 , 108 , 111 , 103 , 96 , 32 , 116 , 111 , 103 , 103 , 108 , 101 , 32 , 108 , 111 , 103 , 115 , 99 , 97 , 108 , 101 , 32 , 111 , 102 , 32 , 97 , 120 , 105 , 115 , 32 , 110 , 101 , 97 , 114 , 101 , 115 , 116 , 32 , 99 , 117 , 114 , 115 , 111 , 114 , 0 , 0 , 0 , 0 , 35 , 32 , 66 , 101 , 103 , 105 , 110 , 32 , 112 , 108 , 111 , 116 , 32 , 35 , 37 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 10 , 0 , 0 , 0 , 102 , 108 , 105 , 112 , 121 , 0 , 0 , 0 , 54 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 78 , 101 , 101 , 100 , 32 , 50 , 32 , 116 , 111 , 32 , 55 , 32 , 117 , 115 , 105 , 110 , 103 , 32 , 115 , 112 , 101 , 99 , 115 , 0 , 27 , 42 , 109 , 112 , 49 , 109 , 50 , 97 , 50 , 81 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 42 , 100 , 101 , 84 , 0 , 0 , 0 , 27 , 42 , 100 , 97 , 102 , 108 , 115 , 67 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 42 , 112 , 0 , 0 , 0 , 0 , 0 , 81 , 77 , 83 , 47 , 81 , 85 , 73 , 67 , 32 , 76 , 97 , 115 , 101 , 114 , 32 , 112 , 114 , 105 , 110 , 116 , 101 , 114 , 32 , 40 , 97 , 108 , 115 , 111 , 32 , 84 , 97 , 108 , 97 , 114 , 105 , 115 , 32 , 49 , 50 , 48 , 48 , 32 , 97 , 110 , 100 , 32 , 111 , 116 , 104 , 101 , 114 , 115 , 41 , 0 , 0 , 0 , 27 , 42 , 109 , 37 , 100 , 66 , 0 , 0 , 121 , 100 , 116 , 105 , 36 , 99 , 115 , 0 , 27 , 42 , 100 , 84 , 0 , 0 , 0 , 0 , 9 , 115 , 97 , 109 , 112 , 108 , 105 , 110 , 103 , 32 , 114 , 97 , 116 , 101 , 32 , 105 , 115 , 32 , 37 , 100 , 44 , 32 , 37 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 115 , 113 , 36 , 117 , 97 , 114 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 107 , 101 , 121 , 32 , 37 , 115 , 111 , 112 , 97 , 113 , 117 , 101 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 72 , 80 , 50 , 54 , 0 , 0 , 0 , 0 , 116 , 117 , 114 , 110 , 105 , 110 , 103 , 32 , 109 , 111 , 117 , 115 , 101 , 32 , 111 , 102 , 102 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 37 , 100 , 44 , 37 , 100 , 79 , 0 , 0 , 37 , 100 , 44 , 37 , 100 , 80 , 0 , 0 , 102 , 108 , 105 , 112 , 120 , 0 , 0 , 0 , 27 , 42 , 100 , 0 , 0 , 0 , 0 , 0 , 27 , 42 , 109 , 37 , 100 , 78 , 0 , 0 , 9 , 102 , 111 , 110 , 116 , 112 , 97 , 116 , 104 , 32 , 105 , 115 , 32 , 101 , 109 , 112 , 116 , 121 , 10 , 0 , 0 , 0 , 0 , 0 , 27 , 42 , 109 , 49 , 109 , 49 , 110 , 49 , 51 , 54 , 44 , 49 , 99 , 90 , 0 , 0 , 120 , 50 , 94 , 123 , 37 , 100 , 125 , 0 , 27 , 42 , 100 , 97 , 99 , 90 , 0 , 0 , 105 , 110 , 118 , 97 , 108 , 105 , 100 , 32 , 97 , 120 , 105 , 115 , 0 , 0 , 0 , 0 , 27 , 42 , 112 , 97 , 102 , 37 , 100 , 44 , 37 , 100 , 90 , 0 , 0 , 0 , 0 , 0 , 113 , 109 , 115 , 0 , 0 , 0 , 0 , 0 , 27 , 42 , 112 , 98 , 102 , 37 , 100 , 44 , 37 , 100 , 90 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 120 , 50 , 100 , 116 , 105 , 36 , 99 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 42 , 109 , 37 , 100 , 98 , 90 , 0 , 9 , 105 , 115 , 111 , 32 , 115 , 97 , 109 , 112 , 108 , 105 , 110 , 103 , 32 , 114 , 97 , 116 , 101 , 32 , 105 , 115 , 32 , 37 , 100 , 44 , 32 , 37 , 100 , 10 , 0 , 0 , 0 , 110 , 111 , 114 , 97 , 36 , 116 , 105 , 111 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 10 , 115 , 101 , 116 , 32 , 107 , 101 , 121 , 32 , 109 , 97 , 120 , 99 , 111 , 108 , 117 , 109 , 110 , 115 , 32 , 37 , 100 , 32 , 109 , 97 , 120 , 114 , 111 , 119 , 115 , 32 , 37 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 42 , 108 , 37 , 115 , 10 , 0 , 0 , 116 , 117 , 114 , 110 , 105 , 110 , 103 , 32 , 109 , 111 , 117 , 115 , 101 , 32 , 111 , 110 , 46 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 42 , 109 , 37 , 100 , 110 , 90 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 101 , 106 , 101 , 99 , 116 , 0 , 120 , 95 , 109 , 105 , 110 , 51 , 100 , 32 , 115 , 104 , 111 , 117 , 108 , 100 , 32 , 110 , 111 , 116 , 32 , 101 , 113 , 117 , 97 , 108 , 32 , 120 , 95 , 109 , 97 , 120 , 51 , 100 , 33 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 67 , 117 , 114 , 114 , 101 , 110 , 116 , 108 , 121 , 32 , 110 , 111 , 116 , 32 , 115 , 117 , 112 , 112 , 111 , 114 , 116 , 105 , 110 , 103 , 32 , 116 , 104 , 114 , 101 , 101 , 45 , 100 , 105 , 109 , 101 , 110 , 115 , 105 , 111 , 110 , 97 , 108 , 32 , 115 , 97 , 109 , 112 , 108 , 105 , 110 , 103 , 0 , 0 , 0 , 0 , 0 , 105 , 115 , 111 , 36 , 95 , 56 , 56 , 53 , 57 , 95 , 49 , 0 , 0 , 0 , 0 , 0 , 101 , 106 , 101 , 99 , 116 , 0 , 0 , 0 , 32 , 116 , 121 , 112 , 101 , 10 , 0 , 0 , 37 , 100 , 32 , 112 , 101 , 110 , 115 , 32 , 37 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 101 , 120 , 112 , 101 , 99 , 116 , 105 , 110 , 103 , 32 , 34 , 101 , 106 , 101 , 99 , 116 , 34 , 32 , 111 , 114 , 32 , 110 , 117 , 109 , 98 , 101 , 114 , 32 , 111 , 102 , 32 , 112 , 101 , 110 , 115 , 0 , 0 , 0 , 0 , 0 , 78 , 117 , 109 , 98 , 101 , 114 , 32 , 111 , 102 , 32 , 112 , 101 , 110 , 115 , 32 , 109 , 117 , 115 , 116 , 32 , 98 , 101 , 32 , 112 , 111 , 115 , 105 , 116 , 105 , 118 , 101 , 0 , 101 , 106 , 101 , 36 , 99 , 116 , 0 , 0 , 80 , 111 , 115 , 116 , 83 , 99 , 114 , 105 , 112 , 116 , 32 , 103 , 114 , 97 , 112 , 104 , 105 , 99 , 115 , 44 , 32 , 105 , 110 , 99 , 108 , 117 , 100 , 105 , 110 , 103 , 32 , 69 , 80 , 83 , 70 , 32 , 101 , 109 , 98 , 101 , 100 , 100 , 101 , 100 , 32 , 102 , 105 , 108 , 101 , 115 , 32 , 40 , 42 , 46 , 101 , 112 , 115 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 80 , 85 , 83 , 80 , 48 , 59 , 80 , 71 , 59 , 27 , 46 , 90 , 10 , 0 , 0 , 0 , 120 , 50 , 100 , 116 , 105 , 36 , 99 , 11
. concat ( [ 97 , 114 , 99 , 0 , 0 , 0 , 0 , 0 , 98 , 109 , 97 , 114 , 103 , 105 , 110 , 0 , 99 , 111 , 108 , 111 , 117 , 114 , 116 , 36 , 101 , 120 , 116 , 0 , 0 , 0 , 0 , 0 , 112 , 114 , 101 , 118 , 105 , 111 , 117 , 115 , 32 , 122 , 111 , 111 , 109 , 46 , 10 , 0 , 99 , 111 , 108 , 111 , 114 , 116 , 36 , 101 , 120 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 98 , 36 , 108 , 97 , 99 , 107 , 116 , 101 , 120 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 67 , 111 , 117 , 108 , 100 , 110 , 39 , 116 , 32 , 115 , 108 , 117 , 114 , 112 , 32 , 37 , 108 , 100 , 32 , 98 , 121 , 116 , 101 , 115 , 32 , 40 , 114 , 101 , 116 , 117 , 114 , 110 , 32 , 119 , 97 , 115 , 32 , 37 , 122 , 100 , 41 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 100 , 101 , 102 , 36 , 97 , 117 , 108 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 109 , 36 , 111 , 110 , 111 , 99 , 104 , 114 , 111 , 109 , 101 , 0 , 0 , 0 , 0 , 0 , 116 , 104 , 105 , 115 , 0 , 0 , 0 , 0 , 120 , 111 , 114 , 0 , 0 , 0 , 0 , 0 , 101 , 112 , 36 , 115 , 102 , 0 , 0 , 0 , 32 , 102 , 111 , 110 , 116 , 115 , 99 , 97 , 108 , 101 , 32 , 37 , 51 , 46 , 49 , 102 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 103 , 32 , 0 , 0 , 0 , 0 , 0 , 71 , 80 , 86 , 65 , 76 , 0 , 0 , 0 , 34 , 37 , 115 , 34 , 32 , 37 , 103 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 97 , 115 , 99 , 105 , 105 , 32 , 97 , 114 , 116 , 32 , 102 , 111 , 114 , 32 , 97 , 110 , 121 , 116 , 104 , 105 , 110 , 103 , 32 , 116 , 104 , 97 , 116 , 32 , 112 , 114 , 105 , 110 , 116 , 115 , 32 , 116 , 101 , 120 , 116 , 0 , 34 , 37 , 115 , 34 , 32 , 37 , 103 , 37 , 115 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 121 , 108 , 36 , 97 , 98 , 101 , 108 , 0 , 100 , 102 , 95 , 114 , 101 , 97 , 100 , 98 , 105 , 110 , 97 , 114 , 121 , 32 , 115 , 108 , 117 , 114 , 112 , 101 , 114 , 0 , 0 , 0 , 112 , 97 , 36 , 117 , 115 , 101 , 0 , 0 , 32 , 37 , 115 , 97 , 100 , 111 , 98 , 101 , 103 , 108 , 121 , 112 , 104 , 110 , 97 , 109 , 101 , 115 , 32 , 92 , 10 , 32 , 32 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 97 , 100 , 105 , 117 , 115 , 0 , 0 , 111 , 117 , 116 , 36 , 112 , 117 , 116 , 0 , 116 , 109 , 97 , 114 , 103 , 105 , 110 , 0 , 110 , 111 , 104 , 101 , 97 , 100 , 101 , 114 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 96 , 98 , 117 , 105 , 108 , 116 , 105 , 110 , 45 , 122 , 111 , 111 , 109 , 45 , 112 , 114 , 101 , 118 , 105 , 111 , 117 , 115 , 96 , 32 , 103 , 111 , 32 , 116 , 111 , 32 , 112 , 114 , 101 , 118 , 105 , 111 , 117 , 115 , 32 , 122 , 111 , 111 , 109 , 32 , 105 , 110 , 32 , 116 , 104 , 101 , 32 , 122 , 111 , 111 , 109 , 32 , 115 , 116 , 97 , 99 , 107 , 0 , 0 , 0 , 104 , 101 , 97 , 100 , 101 , 114 , 32 , 34 , 37 , 115 , 34 , 32 , 0 , 0 , 0 , 0 , 110 , 111 , 97 , 117 , 120 , 102 , 105 , 108 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 97 , 117 , 120 , 102 , 105 , 108 , 101 , 0 , 37 , 115 , 32 , 37 , 115 , 32 , 0 , 0 , 32 , 32 , 32 , 112 , 97 , 108 , 102 , 117 , 110 , 99 , 112 , 97 , 114 , 97 , 109 , 32 , 37 , 100 , 44 , 37 , 103 , 32 , 92 , 10 , 32 , 32 , 32 , 0 , 0 , 0 , 0 , 0 , 45 , 66 , 65 , 67 , 75 , 87 , 65 , 82 , 68 , 83 , 95 , 67 , 79 , 77 , 80 , 65 , 84 , 73 , 66 , 73 , 76 , 73 , 84 , 89 , 32 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 32 , 32 , 110 , 111 , 98 , 97 , 99 , 107 , 103 , 114 , 111 , 117 , 110 , 100 , 32 , 92 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 71 , 80 , 86 , 65 , 76 , 95 , 84 , 69 , 82 , 77 , 95 , 89 , 83 , 73 , 90 , 69 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 32 , 32 , 98 , 97 , 99 , 107 , 103 , 114 , 111 , 117 , 110 , 100 , 32 , 34 , 35 , 37 , 48 , 50 , 120 , 37 , 48 , 50 , 120 , 37 , 48 , 50 , 120 , 34 , 32 , 92 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 100 , 117 , 109 , 98 , 0 , 0 , 0 , 0 , 110 , 111 , 99 , 108 , 105 , 112 , 0 , 0 , 120 , 50 , 108 , 36 , 97 , 98 , 101 , 108 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 99 , 108 , 105 , 112 , 0 , 0 , 0 , 0 , 116 , 105 , 99 , 115 , 32 , 97 , 114 , 101 , 32 , 105 , 110 , 32 , 37 , 115 , 32 , 111 , 102 , 32 , 112 , 108 , 111 , 116 , 10 , 0 , 99 , 101 , 110 , 36 , 116 , 101 , 114 , 0 , 111 , 117 , 116 , 115 , 105 , 100 , 101 , 0 , 99 , 111 , 108 , 111 , 114 , 116 , 101 , 120 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 98 , 108 , 97 , 99 , 107 , 116 , 101 , 120 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 108 , 101 , 118 , 101 , 108 , 100 , 101 , 102 , 97 , 117 , 108 , 116 , 0 , 0 , 0 , 0 , 83 , 99 , 97 , 110 , 32 , 115 , 105 , 122 , 101 , 32 , 111 , 102 , 32 , 109 , 97 , 116 , 114 , 105 , 120 , 32 , 105 , 115 , 32 , 122 , 101 , 114 , 111 , 0 , 0 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 97 , 117 , 116 , 111 , 115 , 99 , 97 , 108 , 101 , 32 , 37 , 115 , 102 , 105 , 120 , 109 , 105 , 110 , 10 , 0 , 108 , 101 , 118 , 101 , 108 , 49 , 0 , 0 , 84 , 104 , 105 , 115 , 32 , 112 , 108 , 111 , 116 , 32 , 115 , 116 , 121 , 108 , 101 , 32 , 105 , 115 , 32 , 111 , 110 , 108 , 121 , 32 , 102 , 111 , 114 , 32 , 100 , 97 , 116 , 97 , 102 , 105 , 108 , 101 , 115 , 32 , 44 , 32 , 114 , 101 , 118 , 101 , 114 , 116 , 105 , 110 , 103 , 32 , 116 , 111 , 32 , 34 , 112 , 111 , 105 , 110 , 116 , 115 , 34 , 0 , 0 , 0 , 32 , 32 , 32 , 37 , 115 , 32 , 37 , 115 , 32 , 37 , 115 , 32 , 92 , 10 , 32 , 32 , 32 , 37 , 115 , 32 , 100 , 97 , 115 , 104 , 108 , 101 , 110 , 103 , 116 , 104 , 32 , 37 , 46 , 49 , 102 , 32 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 32 , 37 , 46 , 49 , 102 , 32 , 37 , 115 , 32 , 37 , 115 , 32 , 92 , 10 , 0 , 0 , 0 , 0 , 0 , 32 , 97 , 117 , 120 , 102 , 105 , 108 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 121 , 110 , 116 , 97 , 120 , 58 , 32 , 32 , 103 , 110 , 117 , 112 , 108 , 111 , 116 , 32 , 45 , 101 , 32 , 34 , 99 , 111 , 109 , 109 , 97 , 110 , 100 , 115 , 34 , 10 , 0 , 110 , 111 , 114 , 111 , 116 , 97 , 116 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 71 , 80 , 86 , 65 , 76 , 95 , 84 , 69 , 82 , 77 , 95 , 88 , 83 , 73 , 90 , 69 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 111 , 116 , 97 , 116 , 101 , 0 , 0 , 114 , 101 , 102 , 114 , 101 , 115 , 104 , 32 , 110 , 111 , 116 , 32 , 112 , 111 , 115 , 115 , 105 , 98 , 108 , 101 , 32 , 97 , 110 , 100 , 32 , 114 , 101 , 112 , 108 , 111 , 116 , 32 , 105 , 115 , 32 , 100 , 105 , 115 , 97 , 98 , 108 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 69 , 80 , 83 , 32 , 102 , 111 , 114 , 109 , 97 , 116 , 32 , 102 , 111 , 114 , 32 , 67 , 111 , 114 , 101 , 108 , 68 , 82 , 65 , 87 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 100 , 101 , 102 , 97 , 117 , 108 , 116 , 112 , 108 , 101 , 120 , 0 , 0 , 0 , 0 , 0 , 120 , 108 , 36 , 97 , 98 , 101 , 108 , 0 , 67 , 108 , 101 , 97 , 114 , 0 , 0 , 0 , 115 , 105 , 109 , 112 , 108 , 101 , 120 , 0 , 9 , 120 , 121 , 112 , 108 , 97 , 110 , 101 , 32 , 116 , 105 , 99 , 115 , 108 , 101 , 118 , 101 , 108 , 32 , 105 , 115 , 32 , 37 , 103 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 69 , 120 , 112 , 101 , 99 , 116 , 105 , 110 , 103 , 32 , 116 , 111 , 3
. concat ( [ 110 , 111 , 114 , 101 , 115 , 112 , 97 , 99 , 101 , 115 , 125 , 37 , 37 , 10 , 32 , 32 , 32 , 32 , 92 , 100 , 101 , 102 , 92 , 108 , 106 , 117 , 115 , 116 , 35 , 35 , 49 , 123 , 92 , 118 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 118 , 115 , 115 , 92 , 104 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 35 , 35 , 49 , 92 , 104 , 115 , 115 , 125 , 92 , 118 , 115 , 115 , 125 , 125 , 37 , 37 , 10 , 32 , 32 , 32 , 32 , 92 , 100 , 101 , 102 , 92 , 99 , 106 , 117 , 115 , 116 , 35 , 35 , 49 , 123 , 92 , 118 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 118 , 115 , 115 , 92 , 104 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 104 , 115 , 115 , 32 , 35 , 35 , 49 , 92 , 104 , 115 , 115 , 125 , 92 , 118 , 115 , 115 , 125 , 125 , 37 , 37 , 10 , 32 , 32 , 32 , 32 , 92 , 100 , 101 , 102 , 92 , 114 , 106 , 117 , 115 , 116 , 35 , 35 , 49 , 123 , 92 , 118 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 118 , 115 , 115 , 92 , 104 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 104 , 115 , 115 , 32 , 35 , 35 , 49 , 125 , 92 , 118 , 115 , 115 , 125 , 125 , 37 , 37 , 10 , 32 , 32 , 32 , 32 , 92 , 100 , 101 , 102 , 92 , 115 , 116 , 97 , 99 , 107 , 35 , 35 , 49 , 123 , 92 , 108 , 101 , 116 , 92 , 92 , 61 , 92 , 99 , 114 , 92 , 116 , 97 , 98 , 115 , 107 , 105 , 112 , 61 , 48 , 112 , 116 , 92 , 104 , 97 , 108 , 105 , 103 , 110 , 123 , 92 , 104 , 102 , 105 , 108 , 32 , 35 , 35 , 35 , 35 , 92 , 104 , 102 , 105 , 108 , 92 , 99 , 114 , 32 , 35 , 35 , 49 , 92 , 99 , 114 , 99 , 114 , 125 , 125 , 37 , 37 , 10 , 32 , 32 , 32 , 32 , 92 , 100 , 101 , 102 , 92 , 108 , 115 , 116 , 97 , 99 , 107 , 35 , 35 , 49 , 123 , 92 , 104 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 118 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 118 , 115 , 115 , 92 , 115 , 116 , 97 , 99 , 107 , 123 , 35 , 35 , 49 , 125 , 125 , 92 , 104 , 115 , 115 , 125 , 125 , 37 , 37 , 10 , 32 , 32 , 32 , 32 , 92 , 100 , 101 , 102 , 92 , 99 , 115 , 116 , 97 , 99 , 107 , 35 , 35 , 49 , 123 , 92 , 104 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 104 , 115 , 115 , 92 , 118 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 118 , 115 , 115 , 92 , 115 , 116 , 97 , 99 , 107 , 123 , 35 , 35 , 49 , 125 , 125 , 92 , 104 , 115 , 115 , 125 , 125 , 37 , 37 , 10 , 32 , 32 , 32 , 32 , 92 , 100 , 101 , 102 , 92 , 114 , 115 , 116 , 97 , 99 , 107 , 35 , 35 , 49 , 123 , 92 , 104 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 118 , 98 , 111 , 120 , 32 , 116 , 111 , 48 , 112 , 116 , 123 , 92 , 115 , 116 , 97 , 99 , 107 , 123 , 35 , 35 , 49 , 125 , 92 , 118 , 115 , 115 , 125 , 92 , 104 , 115 , 115 , 125 , 125 , 37 , 37 , 10 , 32 , 32 , 32 , 32 , 92 , 118 , 115 , 115 , 92 , 104 , 98 , 111 , 120 , 32 , 116 , 111 , 35 , 49 , 92 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 117 , 110 , 105 , 116 , 92 , 98 , 103 , 114 , 111 , 117 , 112 , 92 , 105 , 103 , 110 , 111 , 114 , 101 , 115 , 112 , 97 , 99 , 101 , 115 , 125 , 37 , 37 , 10 , 32 , 32 , 92 , 103 , 100 , 101 , 102 , 92 , 101 , 110 , 100 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 123 , 92 , 104 , 115 , 115 , 92 , 101 , 103 , 114 , 111 , 117 , 112 , 92 , 101 , 103 , 114 , 111 , 117 , 112 , 125 , 37 , 37 , 10 , 92 , 102 , 105 , 10 , 92 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 117 , 110 , 105 , 116 , 61 , 37 , 46 , 52 , 102 , 98 , 112 , 10 , 0 , 104 , 105 , 115 , 116 , 111 , 103 , 114 , 97 , 109 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 98 , 111 , 114 , 0 , 0 , 0 , 0 , 0 , 92 , 98 , 101 , 103 , 105 , 110 , 123 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 125 , 40 , 37 , 100 , 44 , 37 , 100 , 41 , 40 , 48 , 44 , 48 , 41 , 37 , 37 , 10 , 0 , 0 , 37 , 37 , 32 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 58 , 32 , 76 , 97 , 84 , 101 , 88 , 32 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 32 , 119 , 105 , 116 , 104 , 32 , 80 , 111 , 115 , 116 , 115 , 99 , 114 , 105 , 112 , 116 , 10 , 92 , 98 , 101 , 103 , 105 , 110 , 103 , 114 , 111 , 117 , 112 , 37 , 37 , 10 , 92 , 109 , 97 , 107 , 101 , 97 , 116 , 108 , 101 , 116 , 116 , 101 , 114 , 37 , 37 , 10 , 92 , 110 , 101 , 119 , 99 , 111 , 109 , 109 , 97 , 110 , 100 , 123 , 92 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 115 , 112 , 101 , 99 , 105 , 97 , 108 , 125 , 123 , 37 , 37 , 10 , 32 , 32 , 92 , 64 , 115 , 97 , 110 , 105 , 116 , 105 , 122 , 101 , 92 , 99 , 97 , 116 , 99 , 111 , 100 , 101 , 96 , 92 , 37 , 37 , 61 , 49 , 52 , 92 , 114 , 101 , 108 , 97 , 120 , 92 , 115 , 112 , 101 , 99 , 105 , 97 , 108 , 125 , 37 , 37 , 10 , 92 , 115 , 101 , 116 , 108 , 101 , 110 , 103 , 116 , 104 , 123 , 92 , 117 , 110 , 105 , 116 , 108 , 101 , 110 , 103 , 116 , 104 , 125 , 123 , 37 , 46 , 52 , 102 , 98 , 112 , 125 , 37 , 37 , 10 , 0 , 80 , 108 , 111 , 116 , 32 , 102 , 97 , 105 , 108 , 101 , 100 , 33 , 0 , 0 , 0 , 0 , 111 , 114 , 32 , 115 , 101 , 116 , 32 , 116 , 104 , 101 , 32 , 108 , 111 , 97 , 100 , 112 , 97 , 116 , 104 , 32 , 97 , 112 , 112 , 114 , 111 , 112 , 114 , 105 , 97 , 116 , 101 , 108 , 121 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 86 , 84 , 45 , 108 , 105 , 107 , 101 , 32 , 116 , 101 , 107 , 52 , 48 , 120 , 120 , 32 , 116 , 101 , 114 , 109 , 105 , 110 , 97 , 108 , 32 , 101 , 109 , 117 , 108 , 97 , 116 , 111 , 114 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 111 , 114 , 32 , 115 , 101 , 116 , 32 , 116 , 104 , 101 , 32 , 101 , 110 , 118 , 105 , 114 , 111 , 110 , 109 , 101 , 110 , 116 , 97 , 108 , 32 , 118 , 97 , 114 , 105 , 97 , 98 , 108 , 101 , 32 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 95 , 80 , 83 , 95 , 68 , 73 , 82 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 118 , 105 , 36 , 101 , 119 , 0 , 0 , 0 , 108 , 36 , 111 , 97 , 100 , 0 , 0 , 0 , 80 , 108 , 101 , 97 , 115 , 101 , 32 , 99 , 111 , 112 , 121 , 32 , 37 , 115 , 32 , 116 , 111 , 32 , 111 , 110 , 101 , 32 , 111 , 102 , 32 , 116 , 104 , 101 , 32 , 97 , 98 , 111 , 118 , 101 , 32 , 100 , 105 , 114 , 101 , 99 , 116 , 111 , 114 , 105 , 101 , 115 , 10 , 0 , 9 , 114 , 111 , 116 , 97 , 116 , 101 , 100 , 32 , 105 , 102 , 32 , 116 , 104 , 101 , 32 , 116 , 101 , 114 , 109 , 105 , 110 , 97 , 108 , 32 , 97 , 108 , 108 , 111 , 119 , 115 , 32 , 105 , 116 , 10 , 9 , 0 , 0 , 0 , 0 , 103 , 97 , 112 , 0 , 0 , 0 , 0 , 0 , 32 , 92 , 10 , 0 , 0 , 0 , 0 , 0 , 67 , 97 , 110 , 39 , 116 , 32 , 102 , 105 , 110 , 100 , 32 , 80 , 111 , 115 , 116 , 83 , 99 , 114 , 105 , 112 , 116 , 32 , 112 , 114 , 111 , 108 , 111 , 103 , 117 , 101 , 32 , 102 , 105 , 108 , 10
. concat ( [ 80 , 108 , 115 , 0 , 0 , 0 , 0 , 0 , 98 , 97 , 100 , 32 , 115 , 121 , 110 , 116 , 97 , 120 , 32 , 105 , 110 , 32 , 101 , 110 , 104 , 97 , 110 , 99 , 101 , 100 , 32 , 116 , 101 , 120 , 116 , 32 , 115 , 116 , 114 , 105 , 110 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 80 , 110 , 116 , 0 , 0 , 0 , 0 , 0 , 99 , 111 , 108 , 111 , 114 , 98 , 36 , 111 , 120 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 103 , 115 , 97 , 118 , 101 , 32 , 91 , 93 , 32 , 48 , 32 , 115 , 101 , 116 , 100 , 97 , 115 , 104 , 10 , 0 , 0 , 0 , 0 , 0 , 9 , 78 , 111 , 32 , 102 , 108 , 111 , 97 , 116 , 105 , 110 , 103 , 32 , 112 , 111 , 105 , 110 , 116 , 32 , 101 , 120 , 99 , 101 , 112 , 116 , 105 , 111 , 110 , 32 , 104 , 97 , 110 , 100 , 108 , 101 , 114 , 32 , 100 , 117 , 114 , 105 , 110 , 103 , 32 , 100 , 97 , 116 , 97 , 32 , 105 , 110 , 112 , 117 , 116 , 10 , 0 , 114 , 97 , 119 , 0 , 0 , 0 , 0 , 0 , 85 , 110 , 114 , 101 , 99 , 111 , 103 , 110 , 105 , 122 , 101 , 100 , 32 , 111 , 112 , 116 , 105 , 111 , 110 , 46 , 32 , 32 , 83 , 101 , 101 , 32 , 39 , 104 , 101 , 108 , 112 , 32 , 115 , 101 , 116 , 39 , 46 , 0 , 0 , 0 , 114 , 97 , 110 , 103 , 101 , 0 , 0 , 0 , 115 , 101 , 116 , 32 , 115 , 116 , 121 , 108 , 101 , 32 , 101 , 108 , 108 , 105 , 112 , 115 , 101 , 32 , 115 , 105 , 122 , 101 , 32 , 0 , 47 , 118 , 115 , 104 , 105 , 102 , 116 , 32 , 37 , 100 , 32 , 100 , 101 , 102 , 10 , 0 , 97 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 47 , 37 , 115 , 32 , 102 , 105 , 110 , 100 , 102 , 111 , 110 , 116 , 32 , 37 , 103 , 32 , 115 , 99 , 97 , 108 , 101 , 102 , 111 , 110 , 116 , 32 , 115 , 101 , 116 , 102 , 111 , 110 , 116 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 102 , 0 , 0 , 0 , 0 , 0 , 0 , 109 , 105 , 115 , 115 , 105 , 110 , 103 , 32 , 102 , 105 , 108 , 101 , 110 , 97 , 109 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 46 , 51 , 102 , 32 , 85 , 80 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 101 , 120 , 112 , 101 , 99 , 116 , 105 , 110 , 103 , 32 , 34 , 116 , 105 , 116 , 108 , 101 , 34 , 32 , 102 , 111 , 114 , 32 , 112 , 108 , 111 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 48 , 32 , 80 , 97 , 116 , 116 , 101 , 114 , 110 , 70 , 105 , 108 , 108 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 101 , 119 , 104 , 105 , 115 , 116 , 36 , 111 , 103 , 114 , 97 , 109 , 0 , 0 , 0 , 49 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 66 , 111 , 120 , 67 , 111 , 108 , 70 , 105 , 108 , 108 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 87 , 65 , 82 , 78 , 73 , 78 , 71 , 58 , 32 , 69 , 114 , 114 , 111 , 114 , 32 , 100 , 117 , 114 , 105 , 110 , 103 , 32 , 105 , 110 , 105 , 116 , 105 , 97 , 108 , 105 , 122 , 97 , 116 , 105 , 111 , 110 , 10 , 10 , 0 , 0 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 50 , 32 , 80 , 97 , 116 , 116 , 101 , 114 , 110 , 70 , 105 , 108 , 108 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 49 , 32 , 80 , 97 , 116 , 116 , 101 , 114 , 110 , 70 , 105 , 108 , 108 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 71 , 80 , 86 , 65 , 76 , 95 , 82 , 95 , 77 , 73 , 78 , 0 , 0 , 0 , 0 , 0 , 39 , 59 , 39 , 32 , 101 , 120 , 112 , 101 , 99 , 116 , 101 , 100 , 0 , 0 , 0 , 0 , 101 , 110 , 104 , 97 , 110 , 99 , 101 , 100 , 32 , 116 , 101 , 120 , 116 , 32 , 112 , 97 , 114 , 115 , 101 , 114 , 32 , 45 , 32 , 115 , 112 , 117 , 114 , 105 , 111 , 117 , 115 , 32 , 125 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 66 , 111 , 120 , 70 , 105 , 108 , 108 , 10 , 0 , 0 , 0 , 0 , 112 , 97 , 108 , 36 , 101 , 116 , 116 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 98 , 105 , 110 , 100 , 58 , 32 , 99 , 97 , 110 , 110 , 111 , 116 , 32 , 112 , 97 , 114 , 115 , 101 , 32 , 37 , 115 , 10 , 0 , 0 , 10 , 32 , 47 , 84 , 114 , 97 , 110 , 115 , 112 , 97 , 114 , 101 , 110 , 116 , 80 , 97 , 116 , 116 , 101 , 114 , 110 , 115 , 32 , 116 , 114 , 117 , 101 , 32 , 100 , 101 , 102 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 9 , 68 , 97 , 116 , 97 , 102 , 105 , 108 , 101 , 32 , 112 , 97 , 114 , 115 , 105 , 110 , 103 , 32 , 119 , 105 , 108 , 108 , 32 , 97 , 99 , 99 , 101 , 112 , 116 , 32 , 70 , 111 , 114 , 116 , 114 , 97 , 110 , 32 , 68 , 32 , 111 , 114 , 32 , 81 , 32 , 99 , 111 , 110 , 115 , 116 , 97 , 110 , 116 , 115 , 10 , 0 , 112 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 121 , 48 , 32 , 48 , 32 , 78 , 32 , 48 , 32 , 49 , 32 , 86 , 32 , 121 , 115 , 116 , 101 , 112 , 32 , 48 , 32 , 86 , 32 , 48 , 32 , 45 , 49 , 32 , 102 , 10 , 0 , 0 , 32 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 46 , 51 , 102 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 66 , 111 , 120 , 67 , 111 , 108 , 70 , 105 , 108 , 108 , 10 , 0 , 0 , 0 , 0 , 67 , 97 , 110 , 110 , 111 , 116 , 32 , 115 , 109 , 111 , 111 , 116 , 104 , 58 , 32 , 110 , 111 , 32 , 100 , 97 , 116 , 97 , 32 , 119 , 105 , 116 , 104 , 105 , 110 , 32 , 102 , 105 , 120 , 101 , 100 , 32 , 120 , 114 , 97 , 110 , 103 , 101 , 33 , 0 , 0 , 0 , 0 , 0 , 37 , 115 , 65 , 108 , 116 , 45 , 0 , 0 , 105 , 110 , 116 , 101 , 114 , 110 , 97 , 108 , 32 , 101 , 114 , 114 , 111 , 114 , 32 , 58 , 32 , 97 , 114 , 103 , 117 , 109 , 101 , 110 , 116 , 32 , 110 , 101 , 105 , 116 , 104 , 101 , 114 , 32 , 73 , 78 , 84 , 32 , 111 , 114 , 32 , 67 , 77 , 80 , 76 , 88 , 0 , 0 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 37 , 100 , 32 , 82 , 101 , 99 , 32 , 102 , 105 , 108 , 108 , 10 , 0 , 0 , 0 , 37 , 46 , 51 , 102 , 32 , 85 , 76 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 115 , 102 , 108 , 105 , 112 , 32 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 32 , 105 , 102 , 125 , 32 , 105 , 102 , 101 , 108 , 115 , 101 , 125 , 32 , 105 , 102 , 101 , 108 , 115 , 101 , 125 , 32 , 105 , 102 , 101 , 108 , 115 , 101 , 125 , 32 , 100 , 101 , 102 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 32 , 88 , 89 , 90 , 50 , 82 , 71 , 66 , 125 , 123 , 67 , 111 , 108 , 111 , 114 , 83 , 112 , 97 , 99 , 101 , 32 , 40 , 67 , 77 , 89 , 41 , 32 , 101 , 113 , 32 , 123 , 67 , 77 , 89 , 50 , 82 , 71 , 66 , 125 , 123 , 67 , 111 , 108 , 111 , 114 , 83 , 112 , 97 , 99 , 101 , 32 , 40 , 89 , 73 , 81 , 41 , 32 , 101 , 113 , 32 , 123 , 89 , 73 , 81 , 50 , 82 , 71 , 66 , 125 , 10 , 0 , 105 , 110 , 118 , 101 , 114 , 115 , 101 , 95 , 110 , 111 , 114 , 109 , 97 , 108 , 95 , 102 , 117 , 110 , 99 , 0 , 0 , 0 , 0 , 0 , 47 , 83 , 101 , 108 , 101 , 99 , 116 , 83 , 112 , 97 , 99 , 101 , 32 , 123 , 67 , 111 , 108 , 111 , 114 , 83 , 112 , 97 , 99 , 101 , 32 , 40 , 72 , 83 , 86 , 41 , 32 , 101 , 113 , 32 , 123 , 72 , 83 , 86 , 50 , 82 , 71 , 66 , 125 , 123 , 67 , 111 , 108 , 111
. concat ( [ 115 , 101 , 116 , 32 , 116 , 101 , 114 , 109 , 111 , 112 , 116 , 32 , 110 , 111 , 101 , 110 , 104 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 101 , 101 , 110 , 99 , 111 , 100 , 101 , 73 , 83 , 79 , 57 , 32 , 100 , 101 , 102 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 110 , 111 , 109 , 120 , 116 , 36 , 105 , 99 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 100 , 97 , 116 , 97 , 102 , 105 , 108 , 101 , 32 , 99 , 111 , 108 , 117 , 109 , 110 , 115 , 32 , 98 , 105 , 110 , 97 , 114 , 121 , 32 , 105 , 110 , 102 , 111 , 114 , 109 , 97 , 116 , 105 , 111 , 110 , 0 , 0 , 0 , 0 , 0 , 114 , 101 , 101 , 110 , 99 , 111 , 100 , 101 , 73 , 83 , 79 , 50 , 32 , 100 , 101 , 102 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 9 , 102 , 111 , 114 , 109 , 97 , 116 , 32 , 102 , 111 , 114 , 32 , 66 , 117 , 116 , 116 , 111 , 110 , 32 , 50 , 32 , 105 , 115 , 32 , 37 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 35 , 32 , 115 , 101 , 116 , 32 , 116 , 101 , 114 , 109 , 105 , 110 , 97 , 108 , 32 , 37 , 115 , 32 , 37 , 115 , 10 , 0 , 0 , 0 , 114 , 101 , 101 , 110 , 99 , 111 , 100 , 101 , 73 , 83 , 79 , 32 , 100 , 101 , 102 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 122 , 111 , 111 , 109 , 32 , 105 , 110 , 32 , 111 , 110 , 108 , 121 , 32 , 116 , 104 , 101 , 32 , 88 , 32 , 97 , 120 , 105 , 115 , 46 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 80 , 111 , 115 , 116 , 83 , 99 , 114 , 105 , 112 , 116 , 32 , 70 , 111 , 110 , 116 , 32 , 114 , 101 , 99 , 111 , 114 , 100 , 0 , 0 , 123 , 125 , 91 , 93 , 40 , 41 , 32 , 0 , 99 , 97 , 110 , 110 , 111 , 116 , 32 , 119 , 114 , 105 , 116 , 101 , 32 , 116 , 101 , 109 , 112 , 111 , 114 , 97 , 114 , 121 , 32 , 102 , 105 , 108 , 101 , 0 , 0 , 0 , 0 , 0 , 83 , 121 , 109 , 98 , 111 , 108 , 45 , 79 , 98 , 108 , 105 , 113 , 117 , 101 , 0 , 0 , 37 , 115 , 40 , 0 , 0 , 0 , 0 , 0 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 95 , 70 , 79 , 78 , 84 , 80 , 65 , 84 , 72 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 91 , 40 , 37 , 115 , 41 , 32 , 37 , 46 , 49 , 102 , 32 , 37 , 46 , 49 , 102 , 32 , 37 , 115 , 32 , 37 , 115 , 32 , 37 , 100 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 70 , 73 , 84 , 95 , 77 , 65 , 88 , 73 , 84 , 69 , 82 , 0 , 0 , 0 , 0 , 0 , 70 , 111 , 114 , 109 , 97 , 116 , 32 , 99 , 104 , 97 , 114 , 97 , 99 , 116 , 101 , 114 , 32 , 109 , 105 , 115 , 109 , 97 , 116 , 99 , 104 , 58 , 32 , 37 , 37 , 83 , 32 , 105 , 115 , 32 , 111 , 110 , 108 , 121 , 32 , 118 , 97 , 108 , 105 , 100 , 32 , 119 , 105 , 116 , 104 , 32 , 37 , 37 , 115 , 0 , 0 , 0 , 69 , 78 , 72 , 80 , 83 , 95 , 111 , 112 , 101 , 110 , 115 , 101 , 113 , 117 , 101 , 110 , 99 , 101 , 0 , 0 , 0 , 0 , 0 , 0 , 71 , 78 , 85 , 84 , 69 , 82 , 77 , 0 , 97 , 109 , 0 , 0 , 0 , 0 , 0 , 0 , 88 , 89 , 114 , 101 , 115 , 116 , 111 , 114 , 101 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 115 , 121 , 115 , 116 , 101 , 109 , 0 , 0 , 69 , 110 , 104 , 97 , 110 , 99 , 101 , 100 , 32 , 116 , 101 , 120 , 116 , 58 , 32 , 32 , 32 , 123 , 120 , 64 , 95 , 123 , 48 , 125 , 94 , 123 , 110 , 43 , 49 , 125 , 125 , 0 , 88 , 89 , 115 , 97 , 118 , 101 , 10 , 0 , 109 , 120 , 116 , 36 , 105 , 99 , 115 , 0 , 99 , 111 , 108 , 32 , 62 , 32 , 48 , 0 , 41 , 93 , 10 , 0 , 0 , 0 , 0 , 0 , 9 , 97 , 108 , 116 , 101 , 114 , 110 , 97 , 116 , 105 , 118 , 101 , 32 , 102 , 111 , 114 , 109 , 97 , 116 , 32 , 102 , 111 , 114 , 32 , 66 , 117 , 116 , 116 , 111 , 110 , 32 , 49 , 32 , 105 , 115 , 32 , 39 , 37 , 115 , 39 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 79 , 112 , 116 , 105 , 111 , 110 , 115 , 32 , 97 , 114 , 101 , 32 , 39 , 37 , 115 , 39 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 115 , 37 , 103 , 44 , 32 , 37 , 115 , 37 , 103 , 44 , 32 , 37 , 115 , 37 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 117 , 110 , 105 , 37 , 48 , 52 , 108 , 88 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 60 , 115 , 104 , 105 , 102 , 116 , 45 , 99 , 111 , 110 , 116 , 114 , 111 , 108 , 45 , 119 , 104 , 101 , 101 , 108 , 45 , 117 , 112 , 62 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 117 , 37 , 108 , 88 , 0 , 0 , 0 , 0 , 37 , 115 , 47 , 0 , 0 , 0 , 0 , 0 , 99 , 111 , 109 , 98 , 105 , 110 , 97 , 116 , 105 , 111 , 110 , 32 , 114 , 103 , 98 , 32 , 111 , 114 , 32 , 103 , 98 , 114 , 32 , 111 , 114 , 32 , 98 , 114 , 103 , 32 , 101 , 116 , 99 , 46 , 32 , 101 , 120 , 112 , 101 , 99 , 116 , 101 , 100 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 32 , 69 , 110 , 100 , 32 , 112 , 108 , 111 , 116 , 32 , 35 , 37 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 99 , 112 , 49 , 50 , 53 , 52 , 0 , 0 , 105 , 110 , 116 , 101 , 114 , 112 , 111 , 108 , 97 , 116 , 105 , 111 , 110 , 32 , 116 , 97 , 98 , 108 , 101 , 0 , 0 , 0 , 0 , 0 , 32 , 100 , 101 , 108 , 116 , 97 , 95 , 120 , 32 , 100 , 101 , 108 , 116 , 97 , 95 , 121 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 32 , 66 , 101 , 103 , 105 , 110 , 32 , 112 , 108 , 111 , 116 , 32 , 35 , 37 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 98 , 110 , 111 , 116 , 0 , 0 , 0 , 0 , 115 , 116 , 114 , 111 , 107 , 101 , 10 , 0 , 70 , 73 , 84 , 95 , 83 , 84 , 65 , 82 , 84 , 95 , 76 , 65 , 77 , 66 , 68 , 65 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 94 , 80 , 89 , 94 , 45 , 10 , 94 , 73 , 79 , 76 , 10 , 94 , 73 , 83 , 89 , 78 , 84 , 65 , 88 , 48 , 48 , 48 , 48 , 48 , 94 , 70 , 94 , 73 , 66 , 49 , 49 , 48 , 48 , 48 , 94 , 73 , 74 , 48 , 48 , 48 , 48 , 48 , 94 , 73 , 84 , 48 , 48 , 48 , 48 , 48 , 10 , 0 , 0 , 0 , 0 , 0 , 94 , 80 , 78 , 94 , 45 , 10 , 0 , 0 , 116 , 101 , 115 , 116 , 32 , 111 , 102 , 32 , 99 , 104 , 97 , 114 , 97 , 99 , 116 , 101 , 114 , 32 , 119 , 105 , 100 , 116 , 104 , 58 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 94 , 73 , 71 , 69 , 10 , 94 , 45 , 94 , 44 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 109 , 117 , 108 , 116 , 105 , 36 , 112 , 108 , 111 , 116 , 0 , 0 , 0 , 0 , 0 , 0 , 69 , 114 , 114 , 111 , 114 , 32 , 97 , 115 , 115 , 105 , 103 , 110 , 105 , 110 , 103 , 32 , 109 , 101 , 109 , 111 , 114 , 121 , 32 , 102 , 111 , 114 , 32 , 98 , 105 , 110 , 97 , 114 , 121 , 32 , 102 , 105 , 108 , 101 , 32 , 100 , 97 , 116 , 97 , 32 , 114 , 101 , 99 , 111 , 114 , 100 , 115 , 0 , 0 , 0 , 0 , 0 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 94 , 73 , 71 , 86 , 10 , 0 , 0 , 0 , 9 , 102 , 111 , 114 , 109 , 97 , 116 , 32 , 102 , 111 , 114 , 32 , 66 , 117 , 116 , 116 , 111 , 110 , 32 , 49 , 32 , 105 , 115 , 32 , 37 , 100 , 10 , 0 , 0 , 0 , 0 , 0 , 112 , 111 , 112 , 0 , 0 , 0 , 0 , 0 , 98 , 97 , 100 , 32 , 100 , 97 , 116 , 97 , 32 , 111 , 110 , 32 , 108 , 105 , 110 , 101 , 32 , 37 , 100 , 32 , 111 , 102 , 32 , 102 , 105 , 108 , 101 , 32 , 37 , 115 , 0 , 0 , 32 , 111 , 102 , 102 , 115 , 101 , 116 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 94 , 85 , 37 , 48 , 53 , 100 , 58 , 37 , 48 , 53 , 100 , 10 , 0 , 0 , 0 , 0 , 32 , 122 , 111 , 111 , 109 , 32 , 111 , 117 , 116 , 46 , 0 , 0 , 0 , 0 , 0 , 0 , 94 , 68 , 37 , 48 , 53 , 100 , 58 , 37 , 48 , 53 , 100 , 10 , 0 , 0 , 0 , 0 , 73 , 108 , 108 , 101 , 103 , 97 , 108 , 32 , 115 , 101 , 101 , 100 , 32 , 118 , 9
. concat ( [ 118 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 111 , 117 , 116 , 32 , 111 , 102 , 32 , 109 , 101 , 109 , 111 , 114 , 121 , 32 , 102 , 111 , 114 , 32 , 37 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 32 , 71 , 78 , 85 , 80 , 76 , 79 , 84 , 58 , 32 , 76 , 97 , 84 , 101 , 88 , 32 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 32 , 117 , 115 , 105 , 110 , 103 , 32 , 116 , 112 , 105 , 99 , 32 , 92 , 115 , 112 , 101 , 99 , 105 , 97 , 108 , 115 , 10 , 37 , 37 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 119 , 105 , 116 , 104 , 32 , 37 , 100 , 32 , 112 , 111 , 105 , 110 , 116 , 32 , 116 , 121 , 112 , 101 , 115 , 32 , 97 , 110 , 100 , 32 , 37 , 100 , 32 , 108 , 105 , 110 , 101 , 32 , 116 , 121 , 112 , 101 , 115 , 10 , 37 , 37 , 32 , 79 , 112 , 116 , 105 , 111 , 110 , 115 , 58 , 32 , 112 , 111 , 105 , 110 , 116 , 115 , 105 , 122 , 101 , 32 , 61 , 32 , 37 , 100 , 44 , 32 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 32 , 61 , 32 , 37 , 100 , 44 , 32 , 105 , 110 , 116 , 101 , 114 , 118 , 97 , 108 , 32 , 61 , 32 , 37 , 102 , 10 , 37 , 37 , 32 , 84 , 111 , 32 , 99 , 104 , 97 , 110 , 103 , 101 , 32 , 97 , 98 , 111 , 118 , 101 , 32 , 111 , 112 , 116 , 105 , 111 , 110 , 115 , 44 , 32 , 115 , 97 , 121 , 58 , 10 , 37 , 37 , 32 , 115 , 101 , 116 , 32 , 116 , 101 , 114 , 109 , 105 , 110 , 97 , 108 , 32 , 116 , 112 , 105 , 99 , 32 , 112 , 111 , 105 , 110 , 116 , 115 , 105 , 122 , 101 , 95 , 118 , 97 , 108 , 117 , 101 , 32 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 95 , 118 , 97 , 108 , 117 , 101 , 32 , 105 , 110 , 116 , 101 , 114 , 118 , 97 , 108 , 95 , 118 , 97 , 108 , 117 , 101 , 10 , 37 , 37 , 32 , 40 , 112 , 111 , 105 , 110 , 116 , 115 , 105 , 122 , 101 , 32 , 97 , 110 , 100 , 32 , 108 , 105 , 110 , 101 , 119 , 105 , 100 , 116 , 104 , 32 , 45 , 32 , 105 , 110 , 116 , 101 , 103 , 101 , 114 , 115 , 32 , 105 , 110 , 32 , 109 , 105 , 108 , 108 , 105 , 45 , 105 , 110 , 99 , 104 , 101 , 115 , 46 , 10 , 37 , 37 , 32 , 32 , 105 , 110 , 116 , 101 , 114 , 118 , 97 , 108 , 32 , 45 , 32 , 97 , 32 , 102 , 108 , 111 , 97 , 116 , 32 , 105 , 110 , 32 , 105 , 110 , 99 , 104 , 101 , 115 , 46 , 32 , 32 , 73 , 102 , 32 , 122 , 101 , 114 , 111 , 32 , 105 , 115 , 32 , 115 , 112 , 101 , 99 , 105 , 102 , 105 , 101 , 100 , 44 , 32 , 10 , 37 , 37 , 32 , 32 , 116 , 104 , 101 , 32 , 100 , 101 , 102 , 97 , 117 , 108 , 116 , 32 , 118 , 97 , 108 , 117 , 101 , 32 , 105 , 115 , 32 , 99 , 104 , 111 , 115 , 101 , 110 , 46 , 41 , 10 , 92 , 115 , 101 , 116 , 108 , 101 , 110 , 103 , 116 , 104 , 123 , 92 , 117 , 110 , 105 , 116 , 108 , 101 , 110 , 103 , 116 , 104 , 125 , 123 , 37 , 102 , 105 , 110 , 125 , 37 , 37 , 10 , 0 , 0 , 0 , 0 , 37 , 115 , 92 , 98 , 101 , 103 , 105 , 110 , 123 , 112 , 105 , 99 , 116 , 117 , 114 , 101 , 125 , 40 , 37 , 100 , 44 , 37 , 100 , 41 , 40 , 37 , 100 , 44 , 37 , 100 , 41 , 37 , 37 , 32 , 37 , 115 , 10 , 0 , 0 , 0 , 64 , 74 , 1 , 0 , 0 , 0 , 0 , 0 , 184 , 73 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 232 , 195 , 1 , 0 , 0 , 0 , 0 , 0 , 144 , 195 , 1 , 0 , 1 , 0 , 0 , 0 , 80 , 195 , 1 , 0 , 1 , 0 , 0 , 0 , 144 , 245 , 1 , 0 , 2 , 0 , 0 , 0 , 40 , 245 , 1 , 0 , 2 , 0 , 0 , 0 , 32 , 50 , 1 , 0 , 3 , 0 , 0 , 0 , 232 , 49 , 1 , 0 , 4 , 0 , 0 , 0 , 200 , 49 , 1 , 0 , 5 , 0 , 0 , 0 , 40 , 195 , 1 , 0 , 6 , 0 , 0 , 0 , 192 , 49 , 1 , 0 , 7 , 0 , 0 , 0 , 192 , 229 , 1 , 0 , 8 , 0 , 0 , 0 , 72 , 236 , 1 , 0 , 10 , 0 , 0 , 0 , 0 , 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 , 0 , 0 , 0 , 0 , 56 , 166 , 1 , 0 , 200 , 165 , 1 , 0 , 248 , 164 , 1 , 0 , 184 , 164 , 1 , 0 , 88 , 164 , 1 , 0 , 8 , 164 , 1 , 0 , 176 , 163 , 1 , 0 , 120 , 163 , 1 , 0 , 64 , 163 , 1 , 0 , 232 , 162 , 1 , 0 , 152 , 162 , 1 , 0 , 248 , 161 , 1 , 0 , 4 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 98 , 101 , 103 , 105 , 110 , 123 , 116 , 101 , 120 , 100 , 114 , 97 , 119 , 125 , 10 , 92 , 110 , 111 , 114 , 109 , 97 , 108 , 115 , 105 , 122 , 101 , 10 , 92 , 105 , 102 , 120 , 92 , 112 , 97 , 116 , 104 , 68 , 69 , 70 , 73 , 78 , 69 , 68 , 92 , 114 , 101 , 108 , 97 , 120 , 92 , 101 , 108 , 115 , 101 , 92 , 108 , 101 , 116 , 92 , 112 , 97 , 116 , 104 , 68 , 69 , 70 , 73 , 78 , 69 , 68 , 92 , 114 , 101 , 108 , 97 , 120 , 10 , 32 , 92 , 100 , 101 , 102 , 92 , 81 , 116 , 71 , 102 , 114 , 123 , 92 , 105 , 102 , 120 , 32 , 40 , 92 , 84 , 71 , 114 , 101 , 32 , 92 , 108 , 101 , 116 , 92 , 89 , 104 , 101 , 116 , 84 , 92 , 99 , 112 , 97 , 116 , 104 , 92 , 101 , 108 , 115 , 101 , 92 , 108 , 101 , 116 , 92 , 89 , 104 , 101 , 116 , 84 , 92 , 114 , 101 , 108 , 97 , 120 , 92 , 102 , 105 , 92 , 89 , 104 , 101 , 116 , 84 , 125 , 10 , 32 , 92 , 100 , 101 , 102 , 92 , 112 , 97 , 116 , 104 , 32 , 40 , 35 , 49 , 32 , 35 , 50 , 41 , 123 , 92 , 109 , 111 , 118 , 101 , 32 , 40 , 35 , 49 , 32 , 35 , 50 , 41 , 92 , 102 , 117 , 116 ,
. concat ( [ 136 , 193 , 2 , 0 , 128 , 193 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 52 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 120 , 193 , 2 , 0 , 40 , 193 , 2 , 0 , 21 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 34 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 48 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 208 , 192 , 2 , 0 , 144 , 192 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 5 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 192 , 2 , 0 , 8 , 192 , 2 , 0 , 108 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 45 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 216 , 191 , 2 , 0 , 200 , 191 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 72 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 191 , 2 , 0 , 120 , 191 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 218 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 104 , 191 , 2 , 0 , 176 , 98 , 1 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 191 , 2 , 0 , 16 , 191 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 101 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 200 , 190 , 2 , 0 , 136 , 190 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 6 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 104 , 190 , 2 , 0 , 80 , 190 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 17 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 64 , 190 , 2 , 0 , 32 , 190 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 10 , 17 , 0 , 0 , 0 , 0 , 0 , 0 , 8 , 190 , 2 , 0 , 248 , 189 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 5 , 66 , 0 , 0 , 0 , 0 , 0 , 0 , 216 , 189 , 2 , 0 , 200 , 189 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 4 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 44 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 144 , 189 , 2 , 0 , 24 , 189 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 20 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 248 , 188 , 2 , 0 , 208 , 188 , 2 , 0 , 21 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 201 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 168 , 188 , 2 , 0 , 144 , 188 , 2 , 0 , 109 , 2 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 46 , 65 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 188 , 2 , 0 , 96 , 188 , 2 , 0 , 108 , 72 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 64 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 170 , 122 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 8 , 152 , 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 , 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 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 1 , 0 , 0 , 0 , 7 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 5 , 0 , 0 , 0 , 6 , 0 , 0 , 0 , 8 , 0 , 0 , 0 , 9 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 7 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 32 , 114 , 117 , 108 , 101 , 114 , 58 , 32 , 91 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 84 , 2 , 0 , 152 , 190 , 2 , 0 , 152 , 190 , 2 , 0 , 24 , 84 , 2 , 0 , 8 , 84 , 2 , 0 , 248 , 83 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 70 , 73 , 84 , 95 , 76 , 79 , 71 , 0 , 176 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 176 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 51 , 46 , 50 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 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 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 231 , 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 , 32 , 160 , 2 , 0 , 3 , 0 , 0 , 0 , 144 , 195 , 1 , 0 , 1 , 0 , 0 , 0 , 80 , 195 , 1 , 0 , 1 , 0 , 0 , 0 , 80 , 248 , 1 , 0 , 15 , 0 , 0 , 0 , 24 , 160 , 2 , 0 , 12 , 0 , 0 , 0 , 192 , 229 , 1 , 0 , 9 , 0 , 0 , 0 , 240 , 159 , 2 , 0 , 10 , 0 , 0 , 0 , 96 , 255 , 1 , 0 , 4 , 0 , 0 , 0 , 232 , 49 , 1 , 0 , 7 , 0 , 0 , 0 , 200 , 159 , 2 , 0 , 5 , 0 , 0 , 0 , 232 , 195 , 1 , 0 , 0 , 0 , 0 , 0 , 184 , 159 , 2 , 0 , 13 , 0 , 0 , 0 , 152 , 159 , 2 , 0 , 6 , 0 , 0 , 0 , 120 , 97 , 1 , 0 , 8 , 0 , 0 , 0 , 144 , 159 , 2 , 0 , 2 , 0 , 0 , 0 , 232 , 247 , 1 , 0 , 14 , 0 , 0 , 0 , 144 , 245 , 1 , 0 , 11 , 0 , 0 , 0 , 112 , 159 , 2 , 0 , 11 , 0 , 0 , 0 , 24 , 159 , 2 , 0 , 18 , 0 , 0 , 0 , 240 , 158 , 2 , 0 , 16 , 0 , 0 , 0 , 192 , 158 , 2 , 0 , 19 , 0 , 0 , 0 , 176 , 158 , 2 , 0 , 17 , 0 , 0 , 0 , 144 , 158 , 2 , 0 , 20 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 21 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 5 , 0 , 0 , 0 , 3 , 0 , 0 , 0 , 6 , 0 , 0 , 0 ,
, "i8" , ALLOC _NONE , Runtime . GLOBAL _BASE )
function runPostSets ( ) {
}
if ( ! awaitingMemoryInitializer ) runPostSets ( ) ;
var tempDoublePtr = Runtime . alignMemory ( allocate ( 12 , "i8" , ALLOC _STATIC ) , 8 ) ;
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 ] ;
}
var _log = Math . log ;
var _fabs = Math . abs ;
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 : 35 , EIDRM : 36 , ECHRNG : 37 , EL2NSYNC : 38 , EL3HLT : 39 , EL3RST : 40 , ELNRNG : 41 , EUNATCH : 42 , ENOCSI : 43 , EL2HLT : 44 , EDEADLK : 45 , ENOLCK : 46 , EBADE : 50 , EBADR : 51 , EXFULL : 52 , ENOANO : 53 , EBADRQC : 54 , EBADSLT : 55 , EDEADLOCK : 56 , EBFONT : 57 , 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 : 74 , ELBIN : 75 , EDOTDOT : 76 , EBADMSG : 77 , EFTYPE : 79 , ENOTUNIQ : 80 , EBADFD : 81 , EREMCHG : 82 , ELIBACC : 83 , ELIBBAD : 84 , ELIBSCN : 85 , ELIBMAX : 86 , ELIBEXEC : 87 , ENOSYS : 88 , ENMFILE : 89 , ENOTEMPTY : 90 , ENAMETOOLONG : 91 , ELOOP : 92 , EOPNOTSUPP : 95 , EPFNOSUPPORT : 96 , ECONNRESET : 104 , ENOBUFS : 105 , EAFNOSUPPORT : 106 , EPROTOTYPE : 107 , ENOTSOCK : 108 , ENOPROTOOPT : 109 , ESHUTDOWN : 110 , ECONNREFUSED : 111 , EADDRINUSE : 112 , ECONNABORTED : 113 , ENETUNREACH : 114 , ENETDOWN : 115 , ETIMEDOUT : 116 , EHOSTDOWN : 117 , EHOSTUNREACH : 118 , EINPROGRESS : 119 , EALREADY : 120 , EDESTADDRREQ : 121 , EMSGSIZE : 122 , EPROTONOSUPPORT : 123 , ESOCKTNOSUPPORT : 124 , EADDRNOTAVAIL : 125 , ENETRESET : 126 , EISCONN : 127 , ENOTCONN : 128 , ETOOMANYREFS : 129 , EPROCLIM : 130 , EUSERS : 131 , EDQUOT : 132 , ESTALE : 133 , ENOTSUP : 134 , ENOMEDIUM : 135 , ENOSHARE : 136 , ECASECLASH : 137 , EILSEQ : 138 , EOVERFLOW : 139 , ECANCELED : 140 , ENOTRECOVERABLE : 141 , EOWNERDEAD : 142 , ESTRPIPE : 143 } ;
var _ _ _errno _state = 0 ; function _ _ _setErrNo ( value ) {
// For convenient setting and returning of errno.
HEAP32 [ ( ( _ _ _errno _state ) >> 2 ) ] = value
return value ;
}
var _stdin = allocate ( 1 , "i32*" , ALLOC _STATIC ) ;
var _stdout = allocate ( 1 , "i32*" , ALLOC _STATIC ) ;
var _stderr = allocate ( 1 , "i32*" , ALLOC _STATIC ) ;
var _ _impure _ptr = allocate ( 1 , "i32*" , ALLOC _STATIC ) ; var FS = { currentPath : "/" , nextInode : 2 , streams : [ null ] , ignorePermissions : true , createFileHandle : function ( stream , fd ) {
if ( typeof stream === 'undefined' ) {
stream = null ;
}
if ( ! fd ) {
if ( stream && stream . socket ) {
for ( var i = 1 ; i < 64 ; i ++ ) {
if ( ! FS . streams [ i ] ) {
fd = i ;
break ;
}
}
assert ( fd , 'ran out of low fds for sockets' ) ;
} else {
fd = Math . max ( FS . streams . length , 64 ) ;
for ( var i = FS . streams . length ; i < fd ; i ++ ) {
FS . streams [ i ] = null ; // Keep dense
}
}
}
// Close WebSocket first if we are about to replace the fd (i.e. dup2)
if ( FS . streams [ fd ] && FS . streams [ fd ] . socket && FS . streams [ fd ] . socket . close ) {
FS . streams [ fd ] . socket . close ( ) ;
}
FS . streams [ fd ] = stream ;
return fd ;
} , removeFileHandle : function ( fd ) {
FS . streams [ fd ] = null ;
} , joinPath : function ( parts , forceRelative ) {
var ret = parts [ 0 ] ;
for ( var i = 1 ; i < parts . length ; i ++ ) {
if ( ret [ ret . length - 1 ] != '/' ) ret += '/' ;
ret += parts [ i ] ;
}
if ( forceRelative && ret [ 0 ] == '/' ) ret = ret . substr ( 1 ) ;
return ret ;
} , absolutePath : function ( relative , base ) {
if ( typeof relative !== 'string' ) return null ;
if ( base === undefined ) base = FS . currentPath ;
if ( relative && relative [ 0 ] == '/' ) base = '' ;
var full = base + '/' + relative ;
var parts = full . split ( '/' ) . reverse ( ) ;
var absolute = [ '' ] ;
while ( parts . length ) {
var part = parts . pop ( ) ;
if ( part == '' || part == '.' ) {
// Nothing.
} else if ( part == '..' ) {
if ( absolute . length > 1 ) absolute . pop ( ) ;
} else {
absolute . push ( part ) ;
}
}
return absolute . length == 1 ? '/' : absolute . join ( '/' ) ;
} , analyzePath : function ( path , dontResolveLastLink , linksVisited ) {
var ret = {
isRoot : false ,
exists : false ,
error : 0 ,
name : null ,
path : null ,
object : null ,
parentExists : false ,
parentPath : null ,
parentObject : null
} ;
path = FS . absolutePath ( path ) ;
if ( path == '/' ) {
ret . isRoot = true ;
ret . exists = ret . parentExists = true ;
ret . name = '/' ;
ret . path = ret . parentPath = '/' ;
ret . object = ret . parentObject = FS . root ;
} else if ( path !== null ) {
linksVisited = linksVisited || 0 ;
path = path . slice ( 1 ) . split ( '/' ) ;
var current = FS . root ;
var traversed = [ '' ] ;
while ( path . length ) {
if ( path . length == 1 && current . isFolder ) {
ret . parentExists = true ;
ret . parentPath = traversed . length == 1 ? '/' : traversed . join ( '/' ) ;
ret . parentObject = current ;
ret . name = path [ 0 ] ;
}
var target = path . shift ( ) ;
if ( ! current . isFolder ) {
ret . error = ERRNO _CODES . ENOTDIR ;
break ;
} else if ( ! current . read ) {
ret . error = ERRNO _CODES . EACCES ;
break ;
} else if ( ! current . contents . hasOwnProperty ( target ) ) {
ret . error = ERRNO _CODES . ENOENT ;
break ;
}
current = current . contents [ target ] ;
if ( current . link && ! ( dontResolveLastLink && path . length == 0 ) ) {
if ( linksVisited > 40 ) { // Usual Linux SYMLOOP_MAX.
ret . error = ERRNO _CODES . ELOOP ;
break ;
}
var link = FS . absolutePath ( current . link , traversed . join ( '/' ) ) ;
ret = FS . analyzePath ( [ link ] . concat ( path ) . join ( '/' ) ,
dontResolveLastLink , linksVisited + 1 ) ;
return ret ;
}
traversed . push ( target ) ;
if ( path . length == 0 ) {
ret . exists = true ;
ret . path = traversed . join ( '/' ) ;
ret . object = current ;
}
}
}
return ret ;
} , findObject : function ( path , dontResolveLastLink ) {
FS . ensureRoot ( ) ;
var ret = FS . analyzePath ( path , dontResolveLastLink ) ;
if ( ret . exists ) {
return ret . object ;
} else {
_ _ _setErrNo ( ret . error ) ;
return null ;
}
} , createObject : function ( parent , name , properties , canRead , canWrite ) {
if ( ! parent ) parent = '/' ;
if ( typeof parent === 'string' ) parent = FS . findObject ( parent ) ;
if ( ! parent ) {
_ _ _setErrNo ( ERRNO _CODES . EACCES ) ;
throw new Error ( 'Parent path must exist.' ) ;
}
if ( ! parent . isFolder ) {
_ _ _setErrNo ( ERRNO _CODES . ENOTDIR ) ;
throw new Error ( 'Parent must be a folder.' ) ;
}
if ( ! parent . write && ! FS . ignorePermissions ) {
_ _ _setErrNo ( ERRNO _CODES . EACCES ) ;
throw new Error ( 'Parent folder must be writeable.' ) ;
}
if ( ! name || name == '.' || name == '..' ) {
_ _ _setErrNo ( ERRNO _CODES . ENOENT ) ;
throw new Error ( 'Name must not be empty.' ) ;
}
if ( parent . contents . hasOwnProperty ( name ) ) {
_ _ _setErrNo ( ERRNO _CODES . EEXIST ) ;
throw new Error ( "Can't overwrite object." ) ;
}
parent . contents [ name ] = {
read : canRead === undefined ? true : canRead ,
write : canWrite === undefined ? false : canWrite ,
timestamp : Date . now ( ) ,
inodeNumber : FS . nextInode ++
} ;
for ( var key in properties ) {
if ( properties . hasOwnProperty ( key ) ) {
parent . contents [ name ] [ key ] = properties [ key ] ;
}
}
return parent . contents [ name ] ;
} , createFolder : function ( parent , name , canRead , canWrite ) {
var properties = { isFolder : true , isDevice : false , contents : { } } ;
return FS . createObject ( parent , name , properties , canRead , canWrite ) ;
} , createPath : function ( parent , path , canRead , canWrite ) {
var current = FS . findObject ( parent ) ;
if ( current === null ) throw new Error ( 'Invalid parent.' ) ;
path = path . split ( '/' ) . reverse ( ) ;
while ( path . length ) {
var part = path . pop ( ) ;
if ( ! part ) continue ;
if ( ! current . contents . hasOwnProperty ( part ) ) {
FS . createFolder ( current , part , canRead , canWrite ) ;
}
current = current . contents [ part ] ;
}
return current ;
} , createFile : function ( parent , name , properties , canRead , canWrite ) {
properties . isFolder = false ;
return FS . createObject ( parent , name , properties , canRead , canWrite ) ;
} , createDataFile : function ( parent , name , data , canRead , canWrite ) {
if ( typeof data === 'string' ) {
var dataArray = new Array ( data . length ) ;
for ( var i = 0 , len = data . length ; i < len ; ++ i ) dataArray [ i ] = data . charCodeAt ( i ) ;
data = dataArray ;
}
var properties = {
isDevice : false ,
contents : data . subarray ? data . subarray ( 0 ) : data // as an optimization, create a new array wrapper (not buffer) here, to help JS engines understand this object
} ;
return FS . createFile ( parent , name , properties , canRead , canWrite ) ;
} , createLazyFile : function ( parent , name , url , canRead , canWrite ) {
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' ;
// Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
var LazyUint8Array = function ( ) {
this . lengthKnown = false ;
this . chunks = [ ] ; // Loaded chunks. Index is the chunk number
}
LazyUint8Array . prototype . get = function ( idx ) {
if ( idx > this . length - 1 || idx < 0 ) {
return undefined ;
}
var chunkOffset = idx % this . chunkSize ;
var chunkNum = Math . floor ( idx / this . chunkSize ) ;
return this . getter ( chunkNum ) [ chunkOffset ] ;
}
LazyUint8Array . prototype . setDataGetter = function ( getter ) {
this . getter = getter ;
}
LazyUint8Array . prototype . cacheLength = function ( ) {
// 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 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 ] ;
} ) ;
this . _length = datalength ;
this . _chunkSize = chunkSize ;
this . lengthKnown = true ;
}
var lazyArray = new LazyUint8Array ( ) ;
Object . defineProperty ( lazyArray , "length" , {
get : function ( ) {
if ( ! this . lengthKnown ) {
this . cacheLength ( ) ;
}
return this . _length ;
}
} ) ;
Object . defineProperty ( lazyArray , "chunkSize" , {
get : function ( ) {
if ( ! this . lengthKnown ) {
this . cacheLength ( ) ;
}
return this . _chunkSize ;
}
} ) ;
var properties = { isDevice : false , contents : lazyArray } ;
} else {
var properties = { isDevice : false , url : url } ;
}
return FS . createFile ( parent , name , properties , canRead , canWrite ) ;
} , createPreloadedFile : function ( parent , name , url , canRead , canWrite , onload , onerror , dontCreateFile ) {
Browser . init ( ) ;
var fullname = FS . joinPath ( [ parent , name ] , true ) ;
function processData ( byteArray ) {
function finish ( byteArray ) {
if ( ! dontCreateFile ) {
FS . createDataFile ( parent , name , byteArray , canRead , canWrite ) ;
}
if ( onload ) onload ( ) ;
removeRunDependency ( 'cp ' + fullname ) ;
}
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 ( 'cp ' + fullname ) ;
} ) ;
handled = true ;
}
} ) ;
if ( ! handled ) finish ( byteArray ) ;
}
addRunDependency ( 'cp ' + fullname ) ;
if ( typeof url == 'string' ) {
Browser . asyncLoad ( url , function ( byteArray ) {
processData ( byteArray ) ;
} , onerror ) ;
} else {
processData ( url ) ;
}
} , createLink : function ( parent , name , target , canRead , canWrite ) {
var properties = { isDevice : false , link : target } ;
return FS . createFile ( parent , name , properties , canRead , canWrite ) ;
} , createDevice : function ( parent , name , input , output ) {
if ( ! ( input || output ) ) {
throw new Error ( 'A device must have at least one callback defined.' ) ;
}
var ops = { isDevice : true , input : input , output : output } ;
return FS . createFile ( parent , name , ops , Boolean ( input ) , Boolean ( output ) ) ;
} , 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 ) ;
} catch ( e ) {
success = false ;
}
} else {
throw new Error ( 'Cannot load without read() or XMLHttpRequest.' ) ;
}
if ( ! success ) _ _ _setErrNo ( ERRNO _CODES . EIO ) ;
return success ;
} , ensureRoot : function ( ) {
if ( FS . root ) return ;
// The main file system tree. All the contents are inside this.
FS . root = {
read : true ,
write : true ,
isFolder : true ,
isDevice : false ,
timestamp : Date . now ( ) ,
inodeNumber : 1 ,
contents : { }
} ;
} , init : function ( input , output , error ) {
// Make sure we initialize only once.
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 . ensureRoot ( ) ;
// Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
input = input || Module [ 'stdin' ] ;
output = output || Module [ 'stdout' ] ;
error = error || Module [ 'stderr' ] ;
// Default handlers.
var stdinOverridden = true , stdoutOverridden = true , stderrOverridden = true ;
if ( ! input ) {
stdinOverridden = false ;
input = function ( ) {
if ( ! input . cache || ! input . cache . length ) {
var result ;
if ( typeof window != 'undefined' &&
typeof window . prompt == 'function' ) {
// Browser.
result = window . prompt ( 'Input: ' ) ;
if ( result === null ) result = String . fromCharCode ( 0 ) ; // cancel ==> EOF
} else if ( typeof readline == 'function' ) {
// Command line.
result = readline ( ) ;
}
if ( ! result ) result = '' ;
input . cache = intArrayFromString ( result + '\n' , true ) ;
}
return input . cache . shift ( ) ;
} ;
}
var utf8 = new Runtime . UTF8Processor ( ) ;
function simpleOutput ( val ) {
if ( val === null || val === 10 ) {
output . printer ( output . buffer . join ( '' ) ) ;
output . buffer = [ ] ;
} else {
output . buffer . push ( utf8 . processCChar ( val ) ) ;
}
}
if ( ! output ) {
stdoutOverridden = false ;
output = simpleOutput ;
}
if ( ! output . printer ) output . printer = Module [ 'print' ] ;
if ( ! output . buffer ) output . buffer = [ ] ;
if ( ! error ) {
stderrOverridden = false ;
error = simpleOutput ;
}
if ( ! error . printer ) error . printer = Module [ 'print' ] ;
if ( ! error . buffer ) error . buffer = [ ] ;
// Create the temporary folder, if not already created
try {
FS . createFolder ( '/' , 'tmp' , true , true ) ;
} catch ( e ) { }
// Create the I/O devices.
var devFolder = FS . createFolder ( '/' , 'dev' , true , true ) ;
var stdin = FS . createDevice ( devFolder , 'stdin' , input ) ;
var stdout = FS . createDevice ( devFolder , 'stdout' , null , output ) ;
var stderr = FS . createDevice ( devFolder , 'stderr' , null , error ) ;
FS . createDevice ( devFolder , 'tty' , input , output ) ;
FS . createDevice ( devFolder , 'null' , function ( ) { } , function ( ) { } ) ;
// Create default streams.
FS . streams [ 1 ] = {
path : '/dev/stdin' ,
object : stdin ,
position : 0 ,
isRead : true ,
isWrite : false ,
isAppend : false ,
isTerminal : ! stdinOverridden ,
error : false ,
eof : false ,
ungotten : [ ]
} ;
FS . streams [ 2 ] = {
path : '/dev/stdout' ,
object : stdout ,
position : 0 ,
isRead : false ,
isWrite : true ,
isAppend : false ,
isTerminal : ! stdoutOverridden ,
error : false ,
eof : false ,
ungotten : [ ]
} ;
FS . streams [ 3 ] = {
path : '/dev/stderr' ,
object : stderr ,
position : 0 ,
isRead : false ,
isWrite : true ,
isAppend : false ,
isTerminal : ! stderrOverridden ,
error : false ,
eof : false ,
ungotten : [ ]
} ;
// TODO: put these low in memory like we used to assert on: assert(Math.max(_stdin, _stdout, _stderr) < 15000); // make sure these are low, we flatten arrays with these
HEAP32 [ ( ( _stdin ) >> 2 ) ] = 1 ;
HEAP32 [ ( ( _stdout ) >> 2 ) ] = 2 ;
HEAP32 [ ( ( _stderr ) >> 2 ) ] = 3 ;
// Other system paths
FS . createPath ( '/' , 'dev/shm/tmp' , true , true ) ; // temp files
// Newlib initialization
for ( var i = FS . streams . length ; i < Math . max ( _stdin , _stdout , _stderr ) + 4 ; i ++ ) {
FS . streams [ i ] = null ; // Make sure to keep FS.streams dense
}
FS . streams [ _stdin ] = FS . streams [ 1 ] ;
FS . streams [ _stdout ] = FS . streams [ 2 ] ;
FS . streams [ _stderr ] = FS . streams [ 3 ] ;
allocate ( [ allocate (
[ 0 , 0 , 0 , 0 , _stdin , 0 , 0 , 0 , _stdout , 0 , 0 , 0 , _stderr , 0 , 0 , 0 ] ,
'void*' , ALLOC _NORMAL ) ] , 'void*' , ALLOC _NONE , _ _impure _ptr ) ;
} , quit : function ( ) {
if ( ! FS . init . initialized ) return ;
// Flush any partially-printed lines in stdout and stderr. Careful, they may have been closed
if ( FS . streams [ 2 ] && FS . streams [ 2 ] . object . output . buffer . length > 0 ) FS . streams [ 2 ] . object . output ( 10 ) ;
if ( FS . streams [ 3 ] && FS . streams [ 3 ] . object . output . buffer . length > 0 ) FS . streams [ 3 ] . object . output ( 10 ) ;
} , standardizePath : function ( path ) {
if ( path . substr ( 0 , 2 ) == './' ) path = path . substr ( 2 ) ;
return path ;
} , deleteFile : function ( path ) {
path = FS . analyzePath ( path ) ;
if ( ! path . parentExists || ! path . exists ) {
throw 'Invalid path ' + path ;
}
delete path . parentObject . contents [ path . name ] ;
} } ;
function _send ( fd , buf , len , flags ) {
var info = FS . streams [ fd ] ;
if ( ! info ) return - 1 ;
info . sender ( HEAPU8 . subarray ( buf , buf + len ) ) ;
return len ;
}
function _pwrite ( fildes , buf , nbyte , offset ) {
// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
var stream = FS . streams [ fildes ] ;
if ( ! stream || stream . object . isDevice ) {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return - 1 ;
} else if ( ! stream . isWrite ) {
_ _ _setErrNo ( ERRNO _CODES . EACCES ) ;
return - 1 ;
} else if ( stream . object . isFolder ) {
_ _ _setErrNo ( ERRNO _CODES . EISDIR ) ;
return - 1 ;
} else if ( nbyte < 0 || offset < 0 ) {
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return - 1 ;
} else {
var contents = stream . object . contents ;
while ( contents . length < offset ) contents . push ( 0 ) ;
for ( var i = 0 ; i < nbyte ; i ++ ) {
contents [ offset + i ] = HEAPU8 [ ( ( ( buf ) + ( i ) ) | 0 ) ] ;
}
stream . object . timestamp = Date . now ( ) ;
return i ;
}
} function _write ( fildes , buf , nbyte ) {
// ssize_t write(int fildes, const void *buf, size_t nbyte);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
var stream = FS . streams [ fildes ] ;
if ( stream && ( 'socket' in stream ) ) {
return _send ( fildes , buf , nbyte , 0 ) ;
} else if ( ! stream ) {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return - 1 ;
} else if ( ! stream . isWrite ) {
_ _ _setErrNo ( ERRNO _CODES . EACCES ) ;
return - 1 ;
} else if ( nbyte < 0 ) {
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return - 1 ;
} else {
if ( stream . object . isDevice ) {
if ( stream . object . output ) {
for ( var i = 0 ; i < nbyte ; i ++ ) {
try {
stream . object . output ( HEAP8 [ ( ( ( buf ) + ( i ) ) | 0 ) ] ) ;
} catch ( e ) {
_ _ _setErrNo ( ERRNO _CODES . EIO ) ;
return - 1 ;
}
}
stream . object . timestamp = Date . now ( ) ;
return i ;
} else {
_ _ _setErrNo ( ERRNO _CODES . ENXIO ) ;
return - 1 ;
}
} else {
var bytesWritten = _pwrite ( fildes , buf , nbyte , stream . position ) ;
if ( bytesWritten != - 1 ) stream . position += bytesWritten ;
return bytesWritten ;
}
}
} function _fwrite ( ptr , size , nitems , stream ) {
// size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
var bytesToWrite = nitems * size ;
if ( bytesToWrite == 0 ) return 0 ;
var bytesWritten = _write ( stream , ptr , bytesToWrite ) ;
if ( bytesWritten == - 1 ) {
if ( FS . streams [ stream ] ) FS . streams [ stream ] . error = true ;
return 0 ;
} else {
return Math . floor ( bytesWritten / size ) ;
}
}
Module [ "_strlen" ] = _strlen ;
function _ _reallyNegative ( x ) {
return x < 0 || ( x === 0 && ( 1 / x ) === - Infinity ) ;
} function _ _formatString ( format , varargs ) {
var textIndex = format ;
var argIndex = 0 ;
function getNextArg ( type ) {
// NOTE: Explicitly ignoring type safety. Otherwise this fails:
// int x = 4; printf("%c\n", (char)x);
var ret ;
if ( type === 'double' ) {
ret = HEAPF64 [ ( ( ( varargs ) + ( argIndex ) ) >> 3 ) ] ;
} else if ( type == 'i64' ) {
ret = [ HEAP32 [ ( ( ( varargs ) + ( argIndex ) ) >> 2 ) ] ,
HEAP32 [ ( ( ( varargs ) + ( argIndex + 8 ) ) >> 2 ) ] ] ;
argIndex += 8 ; // each 32-bit chunk is in a 64-bit block
} else {
type = 'i32' ; // varargs are always i32, i64, or double
ret = HEAP32 [ ( ( ( varargs ) + ( argIndex ) ) >> 2 ) ] ;
}
argIndex += Math . max ( Runtime . getNativeFieldSize ( type ) , Runtime . getAlignSize ( type , null , true ) ) ;
return ret ;
}
var ret = [ ] ;
var curr , next , currArg ;
while ( 1 ) {
var startTextIndex = textIndex ;
curr = HEAP8 [ ( textIndex ) ] ;
if ( curr === 0 ) break ;
next = HEAP8 [ ( ( textIndex + 1 ) | 0 ) ] ;
if ( curr == 37 ) {
// Handle flags.
var flagAlwaysSigned = false ;
var flagLeftAlign = false ;
var flagAlternative = false ;
var flagZeroPad = false ;
flagsLoop : while ( 1 ) {
switch ( next ) {
case 43 :
flagAlwaysSigned = true ;
break ;
case 45 :
flagLeftAlign = true ;
break ;
case 35 :
flagAlternative = true ;
break ;
case 48 :
if ( flagZeroPad ) {
break flagsLoop ;
} else {
flagZeroPad = true ;
break ;
}
default :
break flagsLoop ;
}
textIndex ++ ;
next = HEAP8 [ ( ( textIndex + 1 ) | 0 ) ] ;
}
// Handle width.
var width = 0 ;
if ( next == 42 ) {
width = getNextArg ( 'i32' ) ;
textIndex ++ ;
next = HEAP8 [ ( ( textIndex + 1 ) | 0 ) ] ;
} else {
while ( next >= 48 && next <= 57 ) {
width = width * 10 + ( next - 48 ) ;
textIndex ++ ;
next = HEAP8 [ ( ( textIndex + 1 ) | 0 ) ] ;
}
}
// Handle precision.
var precisionSet = false ;
if ( next == 46 ) {
var precision = 0 ;
precisionSet = true ;
textIndex ++ ;
next = HEAP8 [ ( ( textIndex + 1 ) | 0 ) ] ;
if ( next == 42 ) {
precision = getNextArg ( 'i32' ) ;
textIndex ++ ;
} else {
while ( 1 ) {
var precisionChr = HEAP8 [ ( ( textIndex + 1 ) | 0 ) ] ;
if ( precisionChr < 48 ||
precisionChr > 57 ) break ;
precision = precision * 10 + ( precisionChr - 48 ) ;
textIndex ++ ;
}
}
next = HEAP8 [ ( ( textIndex + 1 ) | 0 ) ] ;
} else {
var precision = 6 ; // Standard default.
}
// Handle integer sizes. WARNING: These assume a 32-bit architecture!
var argSize ;
switch ( String . fromCharCode ( next ) ) {
case 'h' :
var nextNext = HEAP8 [ ( ( textIndex + 2 ) | 0 ) ] ;
if ( nextNext == 104 ) {
textIndex ++ ;
argSize = 1 ; // char (actually i32 in varargs)
} else {
argSize = 2 ; // short (actually i32 in varargs)
}
break ;
case 'l' :
var nextNext = HEAP8 [ ( ( textIndex + 2 ) | 0 ) ] ;
if ( nextNext == 108 ) {
textIndex ++ ;
argSize = 8 ; // long long
} else {
argSize = 4 ; // long
}
break ;
case 'L' : // long long
case 'q' : // int64_t
case 'j' : // intmax_t
argSize = 8 ;
break ;
case 'z' : // size_t
case 't' : // ptrdiff_t
case 'I' : // signed ptrdiff_t or unsigned size_t
argSize = 4 ;
break ;
default :
argSize = null ;
}
if ( argSize ) textIndex ++ ;
next = HEAP8 [ ( ( textIndex + 1 ) | 0 ) ] ;
// Handle type specifier.
switch ( String . fromCharCode ( next ) ) {
case 'd' : case 'i' : case 'u' : case 'o' : case 'x' : case 'X' : case 'p' : {
// Integer.
var signed = next == 100 || next == 105 ;
argSize = argSize || 4 ;
var currArg = getNextArg ( 'i' + ( argSize * 8 ) ) ;
var origArg = currArg ;
var argText ;
// Flatten i64-1 [low, high] into a (slightly rounded) double
if ( argSize == 8 ) {
currArg = Runtime . makeBigInt ( currArg [ 0 ] , currArg [ 1 ] , next == 117 ) ;
}
// Truncate to requested size.
if ( argSize <= 4 ) {
var limit = Math . pow ( 256 , argSize ) - 1 ;
currArg = ( signed ? reSign : unSign ) ( currArg & limit , argSize * 8 ) ;
}
// Format the number.
var currAbsArg = Math . abs ( currArg ) ;
var prefix = '' ;
if ( next == 100 || next == 105 ) {
if ( argSize == 8 && i64Math ) argText = i64Math . stringify ( origArg [ 0 ] , origArg [ 1 ] , null ) ; else
argText = reSign ( currArg , 8 * argSize , 1 ) . toString ( 10 ) ;
} else if ( next == 117 ) {
if ( argSize == 8 && i64Math ) argText = i64Math . stringify ( origArg [ 0 ] , origArg [ 1 ] , true ) ; else
argText = unSign ( currArg , 8 * argSize , 1 ) . toString ( 10 ) ;
currArg = Math . abs ( currArg ) ;
} else if ( next == 111 ) {
argText = ( flagAlternative ? '0' : '' ) + currAbsArg . toString ( 8 ) ;
} else if ( next == 120 || next == 88 ) {
prefix = ( flagAlternative && currArg != 0 ) ? '0x' : '' ;
if ( argSize == 8 && i64Math ) {
if ( origArg [ 1 ] ) {
argText = ( origArg [ 1 ] >>> 0 ) . toString ( 16 ) ;
var lower = ( origArg [ 0 ] >>> 0 ) . toString ( 16 ) ;
while ( lower . length < 8 ) lower = '0' + lower ;
argText += lower ;
} else {
argText = ( origArg [ 0 ] >>> 0 ) . toString ( 16 ) ;
}
} else
if ( currArg < 0 ) {
// Represent negative numbers in hex as 2's complement.
currArg = - currArg ;
argText = ( currAbsArg - 1 ) . toString ( 16 ) ;
var buffer = [ ] ;
for ( var i = 0 ; i < argText . length ; i ++ ) {
buffer . push ( ( 0xF - parseInt ( argText [ i ] , 16 ) ) . toString ( 16 ) ) ;
}
argText = buffer . join ( '' ) ;
while ( argText . length < argSize * 2 ) argText = 'f' + argText ;
} else {
argText = currAbsArg . toString ( 16 ) ;
}
if ( next == 88 ) {
prefix = prefix . toUpperCase ( ) ;
argText = argText . toUpperCase ( ) ;
}
} else if ( next == 112 ) {
if ( currAbsArg === 0 ) {
argText = '(nil)' ;
} else {
prefix = '0x' ;
argText = currAbsArg . toString ( 16 ) ;
}
}
if ( precisionSet ) {
while ( argText . length < precision ) {
argText = '0' + argText ;
}
}
// Add sign if needed
if ( flagAlwaysSigned ) {
if ( currArg < 0 ) {
prefix = '-' + prefix ;
} else {
prefix = '+' + prefix ;
}
}
// Add padding.
while ( prefix . length + argText . length < width ) {
if ( flagLeftAlign ) {
argText += ' ' ;
} else {
if ( flagZeroPad ) {
argText = '0' + argText ;
} else {
prefix = ' ' + prefix ;
}
}
}
// Insert the result into the buffer.
argText = prefix + argText ;
argText . split ( '' ) . forEach ( function ( chr ) {
ret . push ( chr . charCodeAt ( 0 ) ) ;
} ) ;
break ;
}
case 'f' : case 'F' : case 'e' : case 'E' : case 'g' : case 'G' : {
// Float.
var currArg = getNextArg ( 'double' ) ;
var argText ;
if ( isNaN ( currArg ) ) {
argText = 'nan' ;
flagZeroPad = false ;
} else if ( ! isFinite ( currArg ) ) {
argText = ( currArg < 0 ? '-' : '' ) + 'inf' ;
flagZeroPad = false ;
} else {
var isGeneral = false ;
var effectivePrecision = Math . min ( precision , 20 ) ;
// Convert g/G to f/F or e/E, as per:
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
if ( next == 103 || next == 71 ) {
isGeneral = true ;
precision = precision || 1 ;
var exponent = parseInt ( currArg . toExponential ( effectivePrecision ) . split ( 'e' ) [ 1 ] , 10 ) ;
if ( precision > exponent && exponent >= - 4 ) {
next = ( ( next == 103 ) ? 'f' : 'F' ) . charCodeAt ( 0 ) ;
precision -= exponent + 1 ;
} else {
next = ( ( next == 103 ) ? 'e' : 'E' ) . charCodeAt ( 0 ) ;
precision -- ;
}
effectivePrecision = Math . min ( precision , 20 ) ;
}
if ( next == 101 || next == 69 ) {
argText = currArg . toExponential ( effectivePrecision ) ;
// Make sure the exponent has at least 2 digits.
if ( /[eE][-+]\d$/ . test ( argText ) ) {
argText = argText . slice ( 0 , - 1 ) + '0' + argText . slice ( - 1 ) ;
}
} else if ( next == 102 || next == 70 ) {
argText = currArg . toFixed ( effectivePrecision ) ;
if ( currArg === 0 && _ _reallyNegative ( currArg ) ) {
argText = '-' + argText ;
}
}
var parts = argText . split ( 'e' ) ;
if ( isGeneral && ! flagAlternative ) {
// Discard trailing zeros and periods.
while ( parts [ 0 ] . length > 1 && parts [ 0 ] . indexOf ( '.' ) != - 1 &&
( parts [ 0 ] . slice ( - 1 ) == '0' || parts [ 0 ] . slice ( - 1 ) == '.' ) ) {
parts [ 0 ] = parts [ 0 ] . slice ( 0 , - 1 ) ;
}
} else {
// Make sure we have a period in alternative mode.
if ( flagAlternative && argText . indexOf ( '.' ) == - 1 ) parts [ 0 ] += '.' ;
// Zero pad until required precision.
while ( precision > effectivePrecision ++ ) parts [ 0 ] += '0' ;
}
argText = parts [ 0 ] + ( parts . length > 1 ? 'e' + parts [ 1 ] : '' ) ;
// Capitalize 'E' if needed.
if ( next == 69 ) argText = argText . toUpperCase ( ) ;
// Add sign.
if ( flagAlwaysSigned && currArg >= 0 ) {
argText = '+' + argText ;
}
}
// Add padding.
while ( argText . length < width ) {
if ( flagLeftAlign ) {
argText += ' ' ;
} else {
if ( flagZeroPad && ( argText [ 0 ] == '-' || argText [ 0 ] == '+' ) ) {
argText = argText [ 0 ] + '0' + argText . slice ( 1 ) ;
} else {
argText = ( flagZeroPad ? '0' : ' ' ) + argText ;
}
}
}
// Adjust case.
if ( next < 97 ) argText = argText . toUpperCase ( ) ;
// Insert the result into the buffer.
argText . split ( '' ) . forEach ( function ( chr ) {
ret . push ( chr . charCodeAt ( 0 ) ) ;
} ) ;
break ;
}
case 's' : {
// String.
var arg = getNextArg ( 'i8*' ) ;
var argLength = arg ? _strlen ( arg ) : '(null)' . length ;
if ( precisionSet ) argLength = Math . min ( argLength , precision ) ;
if ( ! flagLeftAlign ) {
while ( argLength < width -- ) {
ret . push ( 32 ) ;
}
}
if ( arg ) {
for ( var i = 0 ; i < argLength ; i ++ ) {
ret . push ( HEAPU8 [ ( ( arg ++ ) | 0 ) ] ) ;
}
} else {
ret = ret . concat ( intArrayFromString ( '(null)' . substr ( 0 , argLength ) , true ) ) ;
}
if ( flagLeftAlign ) {
while ( argLength < width -- ) {
ret . push ( 32 ) ;
}
}
break ;
}
case 'c' : {
// Character.
if ( flagLeftAlign ) ret . push ( getNextArg ( 'i8' ) ) ;
while ( -- width > 0 ) {
ret . push ( 32 ) ;
}
if ( ! flagLeftAlign ) ret . push ( getNextArg ( 'i8' ) ) ;
break ;
}
case 'n' : {
// Write the length written so far to the next parameter.
var ptr = getNextArg ( 'i32*' ) ;
HEAP32 [ ( ( ptr ) >> 2 ) ] = ret . length
break ;
}
case '%' : {
// Literal percent sign.
ret . push ( curr ) ;
break ;
}
default : {
// Unknown specifiers remain untouched.
for ( var i = startTextIndex ; i < textIndex + 2 ; i ++ ) {
ret . push ( HEAP8 [ ( i ) ] ) ;
}
}
}
textIndex += 2 ;
// TODO: Support a/A (hex float) and m (last error) specifiers.
// TODO: Support %1${specifier} for arg selection.
} else {
ret . push ( curr ) ;
textIndex += 1 ;
}
}
return ret ;
} function _fprintf ( stream , format , varargs ) {
// int fprintf(FILE *restrict stream, const char *restrict format, ...);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
var result = _ _formatString ( format , varargs ) ;
var stack = Runtime . stackSave ( ) ;
var ret = _fwrite ( allocate ( result , 'i8' , ALLOC _STACK ) , 1 , result . length , stream ) ;
Runtime . stackRestore ( stack ) ;
return ret ;
}
Module [ "_strcpy" ] = _strcpy ;
function _strncmp ( px , py , n ) {
var i = 0 ;
while ( i < n ) {
var x = HEAPU8 [ ( ( ( px ) + ( i ) ) | 0 ) ] ;
var y = HEAPU8 [ ( ( ( py ) + ( i ) ) | 0 ) ] ;
if ( x == y && x == 0 ) return 0 ;
if ( x == 0 ) return - 1 ;
if ( y == 0 ) return 1 ;
if ( x == y ) {
i ++ ;
continue ;
} else {
return x > y ? 1 : - 1 ;
}
}
return 0 ;
} function _strcmp ( px , py ) {
return _strncmp ( px , py , TOTAL _MEMORY ) ;
}
var _exp = Math . exp ;
var _ceil = Math . ceil ;
function _log10 ( x ) {
return Math . log ( x ) / Math . LN10 ;
}
function _snprintf ( s , n , format , varargs ) {
// int snprintf(char *restrict s, size_t n, const char *restrict format, ...);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
var result = _ _formatString ( format , varargs ) ;
var limit = ( n === undefined ) ? result . length
: Math . min ( result . length , Math . max ( n - 1 , 0 ) ) ;
if ( s < 0 ) {
s = - s ;
var buf = _malloc ( limit + 1 ) ;
HEAP32 [ ( ( s ) >> 2 ) ] = buf ;
s = buf ;
}
for ( var i = 0 ; i < limit ; i ++ ) {
HEAP8 [ ( ( ( s ) + ( i ) ) | 0 ) ] = result [ i ] ;
}
if ( limit < n || ( n === undefined ) ) HEAP8 [ ( ( ( s ) + ( i ) ) | 0 ) ] = 0 ;
return result . length ;
} function _sprintf ( s , format , varargs ) {
// int sprintf(char *restrict s, const char *restrict format, ...);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
return _snprintf ( s , undefined , format , varargs ) ;
}
Module [ "_strcat" ] = _strcat ;
function _strchr ( ptr , chr ) {
ptr -- ;
do {
ptr ++ ;
var val = HEAP8 [ ( ptr ) ] ;
if ( val == chr ) return ptr ;
} while ( val ) ;
return 0 ;
}
var _floor = Math . floor ;
var _llvm _pow _f64 = Math . pow ;
Module [ "_memcpy" ] = _memcpy ; var _llvm _memcpy _p0i8 _p0i8 _i32 = _memcpy ;
Module [ "_memset" ] = _memset ; var _llvm _memset _p0i8 _i32 = _memset ;
function _ftell ( stream ) {
// long ftell(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/ftell.html
if ( FS . streams [ stream ] ) {
stream = FS . streams [ stream ] ;
if ( stream . object . isDevice ) {
_ _ _setErrNo ( ERRNO _CODES . ESPIPE ) ;
return - 1 ;
} else {
return stream . position ;
}
} else {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return - 1 ;
}
}
function _lseek ( fildes , offset , whence ) {
// off_t lseek(int fildes, off_t offset, int whence);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/lseek.html
if ( FS . streams [ fildes ] && ! FS . streams [ fildes ] . object . isDevice ) {
var stream = FS . streams [ fildes ] ;
var position = offset ;
if ( whence === 1 ) { // SEEK_CUR.
position += stream . position ;
} else if ( whence === 2 ) { // SEEK_END.
position += stream . object . contents . length ;
}
if ( position < 0 ) {
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return - 1 ;
} else {
stream . ungotten = [ ] ;
stream . position = position ;
return position ;
}
} else {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return - 1 ;
}
} function _fseek ( stream , offset , whence ) {
// int fseek(FILE *stream, long offset, int whence);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fseek.html
var ret = _lseek ( stream , offset , whence ) ;
if ( ret == - 1 ) {
return - 1 ;
} else {
FS . streams [ stream ] . eof = false ;
return 0 ;
}
} function _rewind ( stream ) {
// void rewind(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/rewind.html
_fseek ( stream , 0 , 0 ) ; // SEEK_SET.
if ( FS . streams [ stream ] ) FS . streams [ stream ] . error = false ;
}
function _recv ( fd , buf , len , flags ) {
var info = FS . streams [ fd ] ;
if ( ! info ) return - 1 ;
if ( ! info . hasData ( ) ) {
_ _ _setErrNo ( ERRNO _CODES . EAGAIN ) ; // no data, and all sockets are nonblocking, so this is the right behavior
return - 1 ;
}
var buffer = info . inQueue . shift ( ) ;
if ( len < buffer . length ) {
if ( info . stream ) {
// This is tcp (reliable), so if not all was read, keep it
info . inQueue . unshift ( buffer . subarray ( len ) ) ;
}
buffer = buffer . subarray ( 0 , len ) ;
}
HEAPU8 . set ( buffer , buf ) ;
return buffer . length ;
}
function _pread ( fildes , buf , nbyte , offset ) {
// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
var stream = FS . streams [ fildes ] ;
if ( ! stream || stream . object . isDevice ) {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return - 1 ;
} else if ( ! stream . isRead ) {
_ _ _setErrNo ( ERRNO _CODES . EACCES ) ;
return - 1 ;
} else if ( stream . object . isFolder ) {
_ _ _setErrNo ( ERRNO _CODES . EISDIR ) ;
return - 1 ;
} else if ( nbyte < 0 || offset < 0 ) {
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return - 1 ;
} else {
var bytesRead = 0 ;
while ( stream . ungotten . length && nbyte > 0 ) {
HEAP8 [ ( ( buf ++ ) | 0 ) ] = stream . ungotten . pop ( )
nbyte -- ;
bytesRead ++ ;
}
var contents = stream . object . contents ;
var size = Math . min ( contents . length - offset , nbyte ) ;
if ( contents . subarray ) { // typed array
HEAPU8 . set ( contents . subarray ( offset , offset + size ) , buf ) ;
} else
if ( contents . slice ) { // normal array
for ( var i = 0 ; i < size ; i ++ ) {
HEAP8 [ ( ( ( buf ) + ( i ) ) | 0 ) ] = contents [ offset + i ]
}
} else {
for ( var i = 0 ; i < size ; i ++ ) { // LazyUint8Array from sync binary XHR
HEAP8 [ ( ( ( buf ) + ( i ) ) | 0 ) ] = contents . get ( offset + i )
}
}
bytesRead += size ;
return bytesRead ;
}
} function _read ( fildes , buf , nbyte ) {
// ssize_t read(int fildes, void *buf, size_t nbyte);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
var stream = FS . streams [ fildes ] ;
if ( stream && ( 'socket' in stream ) ) {
return _recv ( fildes , buf , nbyte , 0 ) ;
} else if ( ! stream ) {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return - 1 ;
} else if ( ! stream . isRead ) {
_ _ _setErrNo ( ERRNO _CODES . EACCES ) ;
return - 1 ;
} else if ( nbyte < 0 ) {
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return - 1 ;
} else {
var bytesRead ;
if ( stream . object . isDevice ) {
if ( stream . object . input ) {
bytesRead = 0 ;
while ( stream . ungotten . length && nbyte > 0 ) {
HEAP8 [ ( ( buf ++ ) | 0 ) ] = stream . ungotten . pop ( )
nbyte -- ;
bytesRead ++ ;
}
for ( var i = 0 ; i < nbyte ; i ++ ) {
try {
var result = stream . object . input ( ) ;
} catch ( e ) {
_ _ _setErrNo ( ERRNO _CODES . EIO ) ;
return - 1 ;
}
if ( result === undefined && bytesRead === 0 ) {
_ _ _setErrNo ( ERRNO _CODES . EAGAIN ) ;
return - 1 ;
}
if ( result === null || result === undefined ) break ;
bytesRead ++ ;
HEAP8 [ ( ( ( buf ) + ( i ) ) | 0 ) ] = result
}
return bytesRead ;
} else {
_ _ _setErrNo ( ERRNO _CODES . ENXIO ) ;
return - 1 ;
}
} else {
var ungotSize = stream . ungotten . length ;
bytesRead = _pread ( fildes , buf , nbyte , stream . position ) ;
if ( bytesRead != - 1 ) {
stream . position += ( stream . ungotten . length - ungotSize ) + bytesRead ;
}
return bytesRead ;
}
}
} function _fread ( ptr , size , nitems , stream ) {
// size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
var bytesToRead = nitems * size ;
if ( bytesToRead == 0 ) return 0 ;
var bytesRead = _read ( stream , ptr , bytesToRead ) ;
var streamObj = FS . streams [ stream ] ;
if ( bytesRead == - 1 ) {
if ( streamObj ) streamObj . error = true ;
return 0 ;
} else {
if ( bytesRead < bytesToRead ) streamObj . eof = true ;
return Math . floor ( bytesRead / size ) ;
}
}
function _close ( fildes ) {
// int close(int fildes);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/close.html
if ( FS . streams [ fildes ] ) {
if ( FS . streams [ fildes ] . currentEntry ) {
_free ( FS . streams [ fildes ] . currentEntry ) ;
}
FS . streams [ fildes ] = null ;
return 0 ;
} else {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return - 1 ;
}
}
function _fsync ( fildes ) {
// int fsync(int fildes);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fsync.html
if ( FS . streams [ fildes ] ) {
// We write directly to the file system, so there's nothing to do here.
return 0 ;
} else {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return - 1 ;
}
} function _fclose ( stream ) {
// int fclose(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fclose.html
_fsync ( stream ) ;
return _close ( stream ) ;
}
function _strcspn ( pstr , pset ) {
var str = pstr , set , strcurr , setcurr ;
while ( 1 ) {
strcurr = HEAP8 [ ( str ) ] ;
if ( ! strcurr ) return str - pstr ;
set = pset ;
while ( 1 ) {
setcurr = HEAP8 [ ( set ) ] ;
if ( ! setcurr || setcurr == strcurr ) break ;
set ++ ;
}
if ( setcurr ) return str - pstr ;
str ++ ;
}
}
Module [ "_strncpy" ] = _strncpy ;
function _isspace ( chr ) {
return chr in { 32 : 0 , 9 : 0 , 10 : 0 , 11 : 0 , 12 : 0 , 13 : 0 } ;
} function _ _parseInt ( str , endptr , base , min , max , bits , unsign ) {
// Skip space.
while ( _isspace ( HEAP8 [ ( str ) ] ) ) str ++ ;
// Check for a plus/minus sign.
var multiplier = 1 ;
if ( HEAP8 [ ( str ) ] == 45 ) {
multiplier = - 1 ;
str ++ ;
} else if ( HEAP8 [ ( str ) ] == 43 ) {
str ++ ;
}
// Find base.
var finalBase = base ;
if ( ! finalBase ) {
if ( HEAP8 [ ( str ) ] == 48 ) {
if ( HEAP8 [ ( ( str + 1 ) | 0 ) ] == 120 ||
HEAP8 [ ( ( str + 1 ) | 0 ) ] == 88 ) {
finalBase = 16 ;
str += 2 ;
} else {
finalBase = 8 ;
str ++ ;
}
}
} else if ( finalBase == 16 ) {
if ( HEAP8 [ ( str ) ] == 48 ) {
if ( HEAP8 [ ( ( str + 1 ) | 0 ) ] == 120 ||
HEAP8 [ ( ( str + 1 ) | 0 ) ] == 88 ) {
str += 2 ;
}
}
}
if ( ! finalBase ) finalBase = 10 ;
// Get digits.
var chr ;
var ret = 0 ;
while ( ( chr = HEAP8 [ ( str ) ] ) != 0 ) {
var digit = parseInt ( String . fromCharCode ( chr ) , finalBase ) ;
if ( isNaN ( digit ) ) {
break ;
} else {
ret = ret * finalBase + digit ;
str ++ ;
}
}
// Apply sign.
ret *= multiplier ;
// Set end pointer.
if ( endptr ) {
HEAP32 [ ( ( endptr ) >> 2 ) ] = str
}
// Unsign if needed.
if ( unsign ) {
if ( Math . abs ( ret ) > max ) {
ret = max ;
_ _ _setErrNo ( ERRNO _CODES . ERANGE ) ;
} else {
ret = unSign ( ret , bits ) ;
}
}
// Validate range.
if ( ret > max || ret < min ) {
ret = ret > max ? max : min ;
_ _ _setErrNo ( ERRNO _CODES . ERANGE ) ;
}
if ( bits == 64 ) {
return ( ( asm [ "setTempRet0" ] ( Math . min ( Math . floor ( ( ret ) / ( + ( 4294967296 ) ) ) , ( + ( 4294967295 ) ) ) >>> 0 ) , ret >>> 0 ) | 0 ) ;
}
return ret ;
} function _strtol ( str , endptr , base ) {
return _ _parseInt ( str , endptr , base , - 2147483648 , 2147483647 , 32 ) ; // LONG_MIN, LONG_MAX.
} function _atoi ( ptr ) {
return _strtol ( ptr , null , 10 ) ;
}
function _strstr ( ptr1 , ptr2 ) {
var check = 0 , start ;
do {
if ( ! check ) {
start = ptr1 ;
check = ptr2 ;
}
var curr1 = HEAP8 [ ( ( ptr1 ++ ) | 0 ) ] ;
var curr2 = HEAP8 [ ( ( check ++ ) | 0 ) ] ;
if ( curr2 == 0 ) return start ;
if ( curr2 != curr1 ) {
// rewind to one character after start, to find ez in eeez
ptr1 = start + 1 ;
check = 0 ;
}
} while ( curr1 ) ;
return 0 ;
}
Module [ "_memcmp" ] = _memcmp ;
function _fputs ( s , stream ) {
// int fputs(const char *restrict s, FILE *restrict stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
return _write ( stream , s , _strlen ( s ) ) ;
}
Module [ "_memmove" ] = _memmove ; var _llvm _memmove _p0i8 _p0i8 _i32 = _memmove ;
function _fflush ( stream ) {
// int fflush(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
var flush = function ( filedes ) {
// Right now we write all data directly, except for output devices.
if ( FS . streams [ filedes ] && FS . streams [ filedes ] . object . output ) {
if ( ! FS . streams [ filedes ] . isTerminal ) { // don't flush terminals, it would cause a \n to also appear
FS . streams [ filedes ] . object . output ( null ) ;
}
}
} ;
try {
if ( stream === 0 ) {
for ( var i = 0 ; i < FS . streams . length ; i ++ ) if ( FS . streams [ i ] ) flush ( i ) ;
} else {
flush ( stream ) ;
}
return 0 ;
} catch ( e ) {
_ _ _setErrNo ( ERRNO _CODES . EIO ) ;
return - 1 ;
}
}
function _ _exit ( status ) {
// void _exit(int status);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
function ExitStatus ( ) {
this . name = "ExitStatus" ;
this . message = "Program terminated with exit(" + status + ")" ;
this . status = status ;
Module . print ( 'Exit Status: ' + status ) ;
} ;
ExitStatus . prototype = new Error ( ) ;
ExitStatus . prototype . constructor = ExitStatus ;
exitRuntime ( ) ;
ABORT = true ;
throw new ExitStatus ( ) ;
} function _exit ( status ) {
_ _exit ( status ) ;
}
function _fgetc ( stream ) {
// int fgetc(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fgetc.html
if ( ! FS . streams [ stream ] ) return - 1 ;
var streamObj = FS . streams [ stream ] ;
if ( streamObj . eof || streamObj . error ) return - 1 ;
var ret = _read ( stream , _fgetc . ret , 1 ) ;
if ( ret == 0 ) {
streamObj . eof = true ;
return - 1 ;
} else if ( ret == - 1 ) {
streamObj . error = true ;
return - 1 ;
} else {
return HEAPU8 [ ( ( _fgetc . ret ) | 0 ) ] ;
}
} function _fgets ( s , n , stream ) {
// char *fgets(char *restrict s, int n, FILE *restrict stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fgets.html
if ( ! FS . streams [ stream ] ) return 0 ;
var streamObj = FS . streams [ stream ] ;
if ( streamObj . error || streamObj . eof ) return 0 ;
var byte _ ;
for ( var i = 0 ; i < n - 1 && byte _ != 10 ; i ++ ) {
byte _ = _fgetc ( stream ) ;
if ( byte _ == - 1 ) {
if ( streamObj . error || ( streamObj . eof && i == 0 ) ) return 0 ;
else if ( streamObj . eof ) break ;
}
HEAP8 [ ( ( ( s ) + ( i ) ) | 0 ) ] = byte _
}
HEAP8 [ ( ( ( s ) + ( i ) ) | 0 ) ] = 0
return s ;
}
function _usleep ( useconds ) {
// int usleep(useconds_t useconds);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/usleep.html
// We're single-threaded, so use a busy loop. Super-ugly.
var msec = useconds / 1000 ;
var start = Date . now ( ) ;
while ( Date . now ( ) - start < msec ) {
// Do nothing.
}
return 0 ;
}
function _fputc ( c , stream ) {
// int fputc(int c, FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
var chr = unSign ( c & 0xFF ) ;
HEAP8 [ ( ( _fputc . ret ) | 0 ) ] = chr
var ret = _write ( stream , _fputc . ret , 1 ) ;
if ( ret == - 1 ) {
if ( FS . streams [ stream ] ) FS . streams [ stream ] . error = true ;
return - 1 ;
} else {
return chr ;
}
}
function _pclose ( stream ) {
// int pclose(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/pclose.html
// We allow only one process, so no pipes.
_ _ _setErrNo ( ERRNO _CODES . ECHILD ) ;
return - 1 ;
}
function _puts ( s ) {
// int puts(const char *s);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html
// NOTE: puts() always writes an extra newline.
var stdout = HEAP32 [ ( ( _stdout ) >> 2 ) ] ;
var ret = _fputs ( s , stdout ) ;
if ( ret < 0 ) {
return ret ;
} else {
var newlineRet = _fputc ( 10 , stdout ) ;
return ( newlineRet < 0 ) ? - 1 : ret + 1 ;
}
}
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 : "No message of desired type" , 36 : "Identifier removed" , 37 : "Channel number out of range" , 38 : "Level 2 not synchronized" , 39 : "Level 3 halted" , 40 : "Level 3 reset" , 41 : "Link number out of range" , 42 : "Protocol driver not attached" , 43 : "No CSI structure available" , 44 : "Level 2 halted" , 45 : "Deadlock condition" , 46 : "No record locks available" , 50 : "Invalid exchange" , 51 : "Invalid request descriptor" , 52 : "Exchange full" , 53 : "No anode" , 54 : "Invalid request code" , 55 : "Invalid slot" , 56 : "File locking deadlock error" , 57 : "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" , 74 : "Multihop attempted" , 75 : "Inode is remote (not really error)" , 76 : "Cross mount point (not really error)" , 77 : "Trying to read unreadable message" , 79 : "Inappropriate file type or format" , 80 : "Given log. name not unique" , 81 : "f.d. invalid for this operation" , 82 : "Remote address changed" , 83 : "Can\t access a needed shared lib" , 84 : "Accessing a corrupted shared lib" , 85 : ".lib section in a.out corrupted" , 86 : "Attempting to link in too many libs" , 87 : "Attempting to exec a shared library" , 88 : "Function not implemented" , 89 : "No more files" , 90 : "Directory not empty" , 91 : "File or path name too long" , 92 : "Too many symbolic links" , 95 : "Operation not supported on transport endpoint" , 96 : "Protocol family not supported" , 104 : "Connection reset by peer" , 105 : "No buffer space available" , 106 : "Address family not supported by protocol family" , 107 : "Protocol wrong type for socket" , 108 : "Socket operation on non-socket" , 109 : "Protocol not available" , 110 : "Can't send after socket shutdown" , 111 : "Connection refused" , 112 : "Address already in use" , 113 : "Connection aborted" , 114 : "Network is unreachable" , 115 : "Network interface is not configured" , 116 : "Connection timed out" , 117 : "Host is down" , 118 : "Host is unreachable" , 119 : "Connection already in progress" , 120 : "Socket already connected" , 121 : "Destination address required" , 122 : "Message too long" , 123 : "Unknown protocol" , 124 : "Socket type not supported" , 125 : "Address not available" , 126 : "ENETRESET" , 127 : "Socket is already connected" , 128 : "Socket is not connected" , 129 : "TOOMANYREFS" , 130 : "EPROCLIM" , 131 : "EUSERS" , 132 : "EDQUOT" , 133 : "ESTALE" , 134 : "Not supported" , 135 : "No medium (in tape drive)" , 136 : "No such host or network path" , 137 : "Filename exists with different case" , 138 : "EILSEQ" , 139 : "Value too large for defined data type" , 140 : "Operation canceled" , 141 : "State not recoverable" , 142 : "Previous owner died" , 143 : "Streams pipe error" } ; function _strerror _r ( errnum , strerrbuf , buflen ) {
if ( errnum in ERRNO _MESSAGES ) {
if ( ERRNO _MESSAGES [ errnum ] . length > buflen - 1 ) {
return _ _ _setErrNo ( ERRNO _CODES . ERANGE ) ;
} else {
var msg = ERRNO _MESSAGES [ errnum ] ;
for ( var i = 0 ; i < msg . length ; i ++ ) {
HEAP8 [ ( ( ( strerrbuf ) + ( i ) ) | 0 ) ] = msg . charCodeAt ( i )
}
HEAP8 [ ( ( ( strerrbuf ) + ( i ) ) | 0 ) ] = 0
return 0 ;
}
} else {
return _ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
}
} function _strerror ( errnum ) {
if ( ! _strerror . buffer ) _strerror . buffer = _malloc ( 256 ) ;
_strerror _r ( errnum , _strerror . buffer , 256 ) ;
return _strerror . buffer ;
}
function _ _ _errno _location ( ) {
return _ _ _errno _state ;
} function _perror ( s ) {
// void perror(const char *s);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/perror.html
var stdout = HEAP32 [ ( ( _stdout ) >> 2 ) ] ;
if ( s ) {
_fputs ( s , stdout ) ;
_fputc ( 58 , stdout ) ;
_fputc ( 32 , stdout ) ;
}
var errnum = HEAP32 [ ( ( _ _ _errno _location ( ) ) >> 2 ) ] ;
_puts ( _strerror ( errnum ) ) ;
}
function _popen ( command , mode ) {
// FILE *popen(const char *command, const char *mode);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/popen.html
// We allow only one process, so no pipes.
_ _ _setErrNo ( ERRNO _CODES . EMFILE ) ;
return 0 ;
}
var _ _ _dirent _struct _layout = { _ _size _ _ : 1040 , d _ino : 0 , d _name : 4 , d _off : 1028 , d _reclen : 1032 , d _type : 1036 } ; function _open ( path , oflag , varargs ) {
// int open(const char *path, int oflag, ...);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/open.html
// NOTE: This implementation tries to mimic glibc rather than strictly
// following the POSIX standard.
var mode = HEAP32 [ ( ( varargs ) >> 2 ) ] ;
// Simplify flags.
var accessMode = oflag & 3 ;
var isWrite = accessMode != 0 ;
var isRead = accessMode != 1 ;
var isCreate = Boolean ( oflag & 512 ) ;
var isExistCheck = Boolean ( oflag & 2048 ) ;
var isTruncate = Boolean ( oflag & 1024 ) ;
var isAppend = Boolean ( oflag & 8 ) ;
// Verify path.
var origPath = path ;
path = FS . analyzePath ( Pointer _stringify ( path ) ) ;
if ( ! path . parentExists ) {
_ _ _setErrNo ( path . error ) ;
return - 1 ;
}
var target = path . object || null ;
var finalPath ;
// Verify the file exists, create if needed and allowed.
if ( target ) {
if ( isCreate && isExistCheck ) {
_ _ _setErrNo ( ERRNO _CODES . EEXIST ) ;
return - 1 ;
}
if ( ( isWrite || isCreate || isTruncate ) && target . isFolder ) {
_ _ _setErrNo ( ERRNO _CODES . EISDIR ) ;
return - 1 ;
}
if ( isRead && ! target . read || isWrite && ! target . write ) {
_ _ _setErrNo ( ERRNO _CODES . EACCES ) ;
return - 1 ;
}
if ( isTruncate && ! target . isDevice ) {
target . contents = [ ] ;
} else {
if ( ! FS . forceLoadFile ( target ) ) {
_ _ _setErrNo ( ERRNO _CODES . EIO ) ;
return - 1 ;
}
}
finalPath = path . path ;
} else {
if ( ! isCreate ) {
_ _ _setErrNo ( ERRNO _CODES . ENOENT ) ;
return - 1 ;
}
if ( ! path . parentObject . write ) {
_ _ _setErrNo ( ERRNO _CODES . EACCES ) ;
return - 1 ;
}
target = FS . createDataFile ( path . parentObject , path . name , [ ] ,
mode & 0x100 , mode & 0x80 ) ; // S_IRUSR, S_IWUSR.
finalPath = path . parentPath + '/' + path . name ;
}
// Actually create an open stream.
var id ;
if ( target . isFolder ) {
var entryBuffer = 0 ;
if ( _ _ _dirent _struct _layout ) {
entryBuffer = _malloc ( _ _ _dirent _struct _layout . _ _size _ _ ) ;
}
var contents = [ ] ;
for ( var key in target . contents ) contents . push ( key ) ;
id = FS . createFileHandle ( {
path : finalPath ,
object : target ,
// An index into contents. Special values: -2 is ".", -1 is "..".
position : - 2 ,
isRead : true ,
isWrite : false ,
isAppend : false ,
error : false ,
eof : false ,
ungotten : [ ] ,
// Folder-specific properties:
// Remember the contents at the time of opening in an array, so we can
// seek between them relying on a single order.
contents : contents ,
// Each stream has its own area for readdir() returns.
currentEntry : entryBuffer
} ) ;
} else {
id = FS . createFileHandle ( {
path : finalPath ,
object : target ,
position : 0 ,
isRead : isRead ,
isWrite : isWrite ,
isAppend : isAppend ,
error : false ,
eof : false ,
ungotten : [ ]
} ) ;
}
return id ;
} function _fopen ( filename , mode ) {
// FILE *fopen(const char *restrict filename, const char *restrict mode);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html
var flags ;
mode = Pointer _stringify ( mode ) ;
if ( mode [ 0 ] == 'r' ) {
if ( mode . indexOf ( '+' ) != - 1 ) {
flags = 2 ;
} else {
flags = 0 ;
}
} else if ( mode [ 0 ] == 'w' ) {
if ( mode . indexOf ( '+' ) != - 1 ) {
flags = 2 ;
} else {
flags = 1 ;
}
flags |= 512 ;
flags |= 1024 ;
} else if ( mode [ 0 ] == 'a' ) {
if ( mode . indexOf ( '+' ) != - 1 ) {
flags = 2 ;
} else {
flags = 1 ;
}
flags |= 512 ;
flags |= 8 ;
} else {
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return 0 ;
}
var ret = _open ( filename , flags , allocate ( [ 0x1FF , 0 , 0 , 0 ] , 'i32' , ALLOC _STACK ) ) ; // All creation permissions.
return ( ret == - 1 ) ? 0 : ret ;
}
var _putc = _fputc ;
function _getcwd ( buf , size ) {
// char *getcwd(char *buf, size_t size);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/getcwd.html
if ( size == 0 ) {
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return 0 ;
} else if ( size < FS . currentPath . length + 1 ) {
_ _ _setErrNo ( ERRNO _CODES . ERANGE ) ;
return 0 ;
} else {
for ( var i = 0 ; i < FS . currentPath . length ; i ++ ) {
HEAP8 [ ( ( ( buf ) + ( i ) ) | 0 ) ] = FS . currentPath . charCodeAt ( i )
}
HEAP8 [ ( ( ( buf ) + ( i ) ) | 0 ) ] = 0
return buf ;
}
}
var _environ = allocate ( 1 , "i32*" , ALLOC _STATIC ) ; 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' ] = 'root' ;
ENV [ 'PATH' ] = '/' ;
ENV [ 'PWD' ] = '/' ;
ENV [ 'HOME' ] = '/home/emscripten' ;
ENV [ 'LANG' ] = 'en_US.UTF-8' ;
ENV [ '_' ] = './this.program' ;
// 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 ] ;
for ( var j = 0 ; j < line . length ; j ++ ) {
HEAP8 [ ( ( ( poolPtr ) + ( j ) ) | 0 ) ] = line . charCodeAt ( j ) ;
}
HEAP8 [ ( ( ( poolPtr ) + ( j ) ) | 0 ) ] = 0 ;
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 _strncat ( pdest , psrc , num ) {
var len = _strlen ( pdest ) ;
var i = 0 ;
while ( 1 ) {
HEAP8 [ ( ( pdest + len + i ) | 0 ) ] = HEAP8 [ ( ( psrc + i ) | 0 ) ] ;
if ( HEAP8 [ ( ( ( pdest ) + ( len + i ) ) | 0 ) ] == 0 ) break ;
i ++ ;
if ( i == num ) {
HEAP8 [ ( ( ( pdest ) + ( len + i ) ) | 0 ) ] = 0
break ;
}
}
return pdest ;
}
function _printf ( format , varargs ) {
// int printf(const char *restrict format, ...);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
var stdout = HEAP32 [ ( ( _stdout ) >> 2 ) ] ;
return _fprintf ( stdout , format , varargs ) ;
}
function _system ( command ) {
// int system(const char *command);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/system.html
// Can't call external programs.
_ _ _setErrNo ( ERRNO _CODES . EAGAIN ) ;
return - 1 ;
}
function _isalpha ( chr ) {
return ( chr >= 97 && chr <= 122 ) ||
( chr >= 65 && chr <= 90 ) ;
}
function _isalnum ( chr ) {
return ( chr >= 48 && chr <= 57 ) ||
( chr >= 97 && chr <= 122 ) ||
( chr >= 65 && chr <= 90 ) ;
}
var _getc = _fgetc ;
function _chdir ( path ) {
// int chdir(const char *path);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/chdir.html
// NOTE: The path argument may be a string, to simplify fchdir().
if ( typeof path !== 'string' ) path = Pointer _stringify ( path ) ;
path = FS . analyzePath ( path ) ;
if ( ! path . exists ) {
_ _ _setErrNo ( path . error ) ;
return - 1 ;
} else if ( ! path . object . isFolder ) {
_ _ _setErrNo ( ERRNO _CODES . ENOTDIR ) ;
return - 1 ;
} else {
FS . currentPath = path . path ;
return 0 ;
}
}
function _tmpnam ( s , dir , prefix ) {
// char *tmpnam(char *s);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/tmpnam.html
// NOTE: The dir and prefix arguments are for internal use only.
var folder = FS . findObject ( dir || '/tmp' ) ;
if ( ! folder || ! folder . isFolder ) {
dir = '/tmp' ;
folder = FS . findObject ( dir ) ;
if ( ! folder || ! folder . isFolder ) return 0 ;
}
var name = prefix || 'file' ;
do {
name += String . fromCharCode ( 65 + Math . floor ( Math . random ( ) * 25 ) ) ;
} while ( name in folder . contents ) ;
var result = dir + '/' + name ;
if ( ! _tmpnam . buffer ) _tmpnam . buffer = _malloc ( 256 ) ;
if ( ! s ) s = _tmpnam . buffer ;
for ( var i = 0 ; i < result . length ; i ++ ) {
HEAP8 [ ( ( ( s ) + ( i ) ) | 0 ) ] = result . charCodeAt ( i ) ;
}
HEAP8 [ ( ( ( s ) + ( i ) ) | 0 ) ] = 0 ;
return s ;
} function _tmpfile ( ) {
// FILE *tmpfile(void);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/tmpfile.html
// TODO: Delete the created file on closing.
if ( _tmpfile . mode ) {
_tmpfile . mode = allocate ( intArrayFromString ( 'w+' ) , 'i8' , ALLOC _NORMAL ) ;
}
return _fopen ( _tmpnam ( 0 ) , _tmpfile . mode ) ;
}
function _memchr ( ptr , chr , num ) {
chr = unSign ( chr ) ;
for ( var i = 0 ; i < num ; i ++ ) {
if ( HEAP8 [ ( ptr ) ] == chr ) return ptr ;
ptr ++ ;
}
return 0 ;
}
var _sqrt = Math . sqrt ;
function _fileno ( stream ) {
// int fileno(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html
// We use file descriptor numbers and FILE* streams interchangeably.
return stream ;
}
function _fdopen ( fildes , mode ) {
// FILE *fdopen(int fildes, const char *mode);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fdopen.html
if ( FS . streams [ fildes ] ) {
var stream = FS . streams [ fildes ] ;
mode = Pointer _stringify ( mode ) ;
if ( ( mode . indexOf ( 'w' ) != - 1 && ! stream . isWrite ) ||
( mode . indexOf ( 'r' ) != - 1 && ! stream . isRead ) ||
( mode . indexOf ( 'a' ) != - 1 && ! stream . isAppend ) ||
( mode . indexOf ( '+' ) != - 1 && ( ! stream . isRead || ! stream . isWrite ) ) ) {
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return 0 ;
} else {
stream . error = false ;
stream . eof = false ;
return fildes ;
}
} else {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return 0 ;
}
}
var _ _ _stat _struct _layout = { _ _size _ _ : 68 , st _dev : 0 , st _ino : 4 , st _mode : 8 , st _nlink : 12 , st _uid : 16 , st _gid : 20 , st _rdev : 24 , st _size : 28 , st _atime : 32 , st _spare1 : 36 , st _mtime : 40 , st _spare2 : 44 , st _ctime : 48 , st _spare3 : 52 , st _blksize : 56 , st _blocks : 60 , st _spare4 : 64 } ; function _stat ( path , buf , dontResolveLastLink ) {
// http://pubs.opengroup.org/onlinepubs/7908799/xsh/stat.html
// int stat(const char *path, struct stat *buf);
// NOTE: dontResolveLastLink is a shortcut for lstat(). It should never be
// used in client code.
var obj = FS . findObject ( Pointer _stringify ( path ) , dontResolveLastLink ) ;
if ( obj === null || ! FS . forceLoadFile ( obj ) ) return - 1 ;
var offsets = _ _ _stat _struct _layout ;
// Constants.
HEAP32 [ ( ( ( buf ) + ( offsets . st _nlink ) ) >> 2 ) ] = 1
HEAP32 [ ( ( ( buf ) + ( offsets . st _uid ) ) >> 2 ) ] = 0
HEAP32 [ ( ( ( buf ) + ( offsets . st _gid ) ) >> 2 ) ] = 0
HEAP32 [ ( ( ( buf ) + ( offsets . st _blksize ) ) >> 2 ) ] = 4096
// Variables.
HEAP32 [ ( ( ( buf ) + ( offsets . st _ino ) ) >> 2 ) ] = obj . inodeNumber
var time = Math . floor ( obj . timestamp / 1000 ) ;
if ( offsets . st _atime === undefined ) {
offsets . st _atime = offsets . st _atim . tv _sec ;
offsets . st _mtime = offsets . st _mtim . tv _sec ;
offsets . st _ctime = offsets . st _ctim . tv _sec ;
var nanosec = ( obj . timestamp % 1000 ) * 1000 ;
HEAP32 [ ( ( ( buf ) + ( offsets . st _atim . tv _nsec ) ) >> 2 ) ] = nanosec
HEAP32 [ ( ( ( buf ) + ( offsets . st _mtim . tv _nsec ) ) >> 2 ) ] = nanosec
HEAP32 [ ( ( ( buf ) + ( offsets . st _ctim . tv _nsec ) ) >> 2 ) ] = nanosec
}
HEAP32 [ ( ( ( buf ) + ( offsets . st _atime ) ) >> 2 ) ] = time
HEAP32 [ ( ( ( buf ) + ( offsets . st _mtime ) ) >> 2 ) ] = time
HEAP32 [ ( ( ( buf ) + ( offsets . st _ctime ) ) >> 2 ) ] = time
var mode = 0 ;
var size = 0 ;
var blocks = 0 ;
var dev = 0 ;
var rdev = 0 ;
if ( obj . isDevice ) {
// Device numbers reuse inode numbers.
dev = rdev = obj . inodeNumber ;
size = blocks = 0 ;
mode = 0x2000 ; // S_IFCHR.
} else {
dev = 1 ;
rdev = 0 ;
// NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
// but this is not required by the standard.
if ( obj . isFolder ) {
size = 4096 ;
blocks = 1 ;
mode = 0x4000 ; // S_IFDIR.
} else {
var data = obj . contents || obj . link ;
size = data . length ;
blocks = Math . ceil ( data . length / 4096 ) ;
mode = obj . link === undefined ? 0x8000 : 0xA000 ; // S_IFREG, S_IFLNK.
}
}
HEAP32 [ ( ( ( buf ) + ( offsets . st _dev ) ) >> 2 ) ] = dev ;
HEAP32 [ ( ( ( buf ) + ( offsets . st _rdev ) ) >> 2 ) ] = rdev ;
HEAP32 [ ( ( ( buf ) + ( offsets . st _size ) ) >> 2 ) ] = size
HEAP32 [ ( ( ( buf ) + ( offsets . st _blocks ) ) >> 2 ) ] = blocks
if ( obj . read ) mode |= 0x16D ; // S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH.
if ( obj . write ) mode |= 0x92 ; // S_IWUSR | S_IWGRP | S_IWOTH.
HEAP32 [ ( ( ( buf ) + ( offsets . st _mode ) ) >> 2 ) ] = mode
return 0 ;
}
function _feof ( stream ) {
// int feof(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/feof.html
return Number ( FS . streams [ stream ] && FS . streams [ stream ] . eof ) ;
}
function _setlocale ( category , locale ) {
if ( ! _setlocale . ret ) _setlocale . ret = allocate ( [ 0 ] , 'i8' , ALLOC _NORMAL ) ;
return _setlocale . ret ;
}
function _ _ _fpclassifyf ( x ) {
if ( isNaN ( x ) ) return 0 ;
if ( ! isFinite ( x ) ) return 1 ;
if ( x == 0 ) return 2 ;
// FP_SUBNORMAL..?
return 4 ;
} var _ _ _fpclassifyd = _ _ _fpclassifyf ;
var _cos = Math . cos ;
var _sin = Math . sin ;
Module [ "_tolower" ] = _tolower ;
Module [ "_strncasecmp" ] = _strncasecmp ;
Module [ "_strcasecmp" ] = _strcasecmp ;
function _strrchr ( ptr , chr ) {
var ptr2 = ptr + _strlen ( ptr ) ;
do {
if ( HEAP8 [ ( ptr2 ) ] == chr ) return ptr2 ;
ptr2 -- ;
} while ( ptr2 >= ptr ) ;
return 0 ;
}
function _strspn ( pstr , pset ) {
var str = pstr , set , strcurr , setcurr ;
while ( 1 ) {
strcurr = HEAP8 [ ( str ) ] ;
if ( ! strcurr ) return str - pstr ;
set = pset ;
while ( 1 ) {
setcurr = HEAP8 [ ( set ) ] ;
if ( ! setcurr || setcurr == strcurr ) break ;
set ++ ;
}
if ( ! setcurr ) return str - pstr ;
str ++ ;
}
}
function _strpbrk ( ptr1 , ptr2 ) {
var curr ;
var searchSet = { } ;
while ( 1 ) {
var curr = HEAP8 [ ( ( ptr2 ++ ) | 0 ) ] ;
if ( ! curr ) break ;
searchSet [ curr ] = 1 ;
}
while ( 1 ) {
curr = HEAP8 [ ( ptr1 ) ] ;
if ( ! curr ) break ;
if ( curr in searchSet ) return ptr1 ;
ptr1 ++ ;
}
return 0 ;
}
function _ _isFloat ( text ) {
return ! ! ( /^[+-]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?$/ . exec ( text ) ) ;
} function _ _scanString ( format , get , unget , varargs ) {
if ( ! _ _scanString . whiteSpace ) {
_ _scanString . whiteSpace = { } ;
_ _scanString . whiteSpace [ 32 ] = 1 ;
_ _scanString . whiteSpace [ 9 ] = 1 ;
_ _scanString . whiteSpace [ 10 ] = 1 ;
_ _scanString . whiteSpace [ 11 ] = 1 ;
_ _scanString . whiteSpace [ 12 ] = 1 ;
_ _scanString . whiteSpace [ 13 ] = 1 ;
_ _scanString . whiteSpace [ ' ' ] = 1 ;
_ _scanString . whiteSpace [ '\t' ] = 1 ;
_ _scanString . whiteSpace [ '\n' ] = 1 ;
_ _scanString . whiteSpace [ '\v' ] = 1 ;
_ _scanString . whiteSpace [ '\f' ] = 1 ;
_ _scanString . whiteSpace [ '\r' ] = 1 ;
}
// Supports %x, %4x, %d.%d, %lld, %s, %f, %lf.
// TODO: Support all format specifiers.
format = Pointer _stringify ( format ) ;
var soFar = 0 ;
if ( format . indexOf ( '%n' ) >= 0 ) {
// need to track soFar
var _get = get ;
get = function ( ) {
soFar ++ ;
return _get ( ) ;
}
var _unget = unget ;
unget = function ( ) {
soFar -- ;
return _unget ( ) ;
}
}
var formatIndex = 0 ;
var argsi = 0 ;
var fields = 0 ;
var argIndex = 0 ;
var next ;
mainLoop :
for ( var formatIndex = 0 ; formatIndex < format . length ; ) {
if ( format [ formatIndex ] === '%' && format [ formatIndex + 1 ] == 'n' ) {
var argPtr = HEAP32 [ ( ( ( varargs ) + ( argIndex ) ) >> 2 ) ] ;
argIndex += Runtime . getAlignSize ( 'void*' , null , true ) ;
HEAP32 [ ( ( argPtr ) >> 2 ) ] = soFar ;
formatIndex += 2 ;
continue ;
}
// TODO: Support strings like "%5c" etc.
if ( format [ formatIndex ] === '%' && format [ formatIndex + 1 ] == 'c' ) {
var argPtr = HEAP32 [ ( ( ( varargs ) + ( argIndex ) ) >> 2 ) ] ;
argIndex += Runtime . getAlignSize ( 'void*' , null , true ) ;
fields ++ ;
next = get ( ) ;
HEAP8 [ ( argPtr ) ] = next
formatIndex += 2 ;
continue ;
}
// remove whitespace
while ( 1 ) {
next = get ( ) ;
if ( next == 0 ) return fields ;
if ( ! ( next in _ _scanString . whiteSpace ) ) break ;
}
unget ( ) ;
if ( format [ formatIndex ] === '%' ) {
formatIndex ++ ;
var suppressAssignment = false ;
if ( format [ formatIndex ] == '*' ) {
suppressAssignment = true ;
formatIndex ++ ;
}
var maxSpecifierStart = formatIndex ;
while ( format [ formatIndex ] . charCodeAt ( 0 ) >= 48 &&
format [ formatIndex ] . charCodeAt ( 0 ) <= 57 ) {
formatIndex ++ ;
}
var max _ ;
if ( formatIndex != maxSpecifierStart ) {
max _ = parseInt ( format . slice ( maxSpecifierStart , formatIndex ) , 10 ) ;
}
var long _ = false ;
var half = false ;
var longLong = false ;
if ( format [ formatIndex ] == 'l' ) {
long _ = true ;
formatIndex ++ ;
if ( format [ formatIndex ] == 'l' ) {
longLong = true ;
formatIndex ++ ;
}
} else if ( format [ formatIndex ] == 'h' ) {
half = true ;
formatIndex ++ ;
}
var type = format [ formatIndex ] ;
formatIndex ++ ;
var curr = 0 ;
var buffer = [ ] ;
// Read characters according to the format. floats are trickier, they may be in an unfloat state in the middle, then be a valid float later
if ( type == 'f' || type == 'e' || type == 'g' ||
type == 'F' || type == 'E' || type == 'G' ) {
var last = 0 ;
next = get ( ) ;
while ( next > 0 ) {
buffer . push ( String . fromCharCode ( next ) ) ;
if ( _ _isFloat ( buffer . join ( '' ) ) ) {
last = buffer . length ;
}
next = get ( ) ;
}
for ( var i = 0 ; i < buffer . length - last + 1 ; i ++ ) {
unget ( ) ;
}
buffer . length = last ;
} else {
next = get ( ) ;
var first = true ;
while ( ( curr < max _ || isNaN ( max _ ) ) && next > 0 ) {
if ( ! ( next in _ _scanString . whiteSpace ) && // stop on whitespace
( type == 's' ||
( ( type === 'd' || type == 'u' || type == 'i' ) && ( ( next >= 48 && next <= 57 ) ||
( first && next == 45 ) ) ) ||
( ( type === 'x' || type === 'X' ) && ( next >= 48 && next <= 57 ||
next >= 97 && next <= 102 ||
next >= 65 && next <= 70 ) ) ) &&
( formatIndex >= format . length || next !== format [ formatIndex ] . charCodeAt ( 0 ) ) ) { // Stop when we read something that is coming up
buffer . push ( String . fromCharCode ( next ) ) ;
next = get ( ) ;
curr ++ ;
first = false ;
} else {
break ;
}
}
unget ( ) ;
}
if ( buffer . length === 0 ) return 0 ; // Failure.
if ( suppressAssignment ) continue ;
var text = buffer . join ( '' ) ;
var argPtr = HEAP32 [ ( ( ( varargs ) + ( argIndex ) ) >> 2 ) ] ;
argIndex += Runtime . getAlignSize ( 'void*' , null , true ) ;
switch ( type ) {
case 'd' : case 'u' : case 'i' :
if ( half ) {
HEAP16 [ ( ( argPtr ) >> 1 ) ] = parseInt ( text , 10 ) ;
} else if ( longLong ) {
( tempI64 = [ parseInt ( text , 10 ) >>> 0 , Math . min ( Math . floor ( ( parseInt ( text , 10 ) ) / ( + ( 4294967296 ) ) ) , ( + ( 4294967295 ) ) ) >>> 0 ] , HEAP32 [ ( ( argPtr ) >> 2 ) ] = tempI64 [ 0 ] , HEAP32 [ ( ( ( argPtr ) + ( 4 ) ) >> 2 ) ] = tempI64 [ 1 ] ) ;
} else {
HEAP32 [ ( ( argPtr ) >> 2 ) ] = parseInt ( text , 10 ) ;
}
break ;
case 'X' :
case 'x' :
HEAP32 [ ( ( argPtr ) >> 2 ) ] = parseInt ( text , 16 )
break ;
case 'F' :
case 'f' :
case 'E' :
case 'e' :
case 'G' :
case 'g' :
case 'E' :
// fallthrough intended
if ( long _ ) {
HEAPF64 [ ( ( argPtr ) >> 3 ) ] = parseFloat ( text )
} else {
HEAPF32 [ ( ( argPtr ) >> 2 ) ] = parseFloat ( text )
}
break ;
case 's' :
var array = intArrayFromString ( text ) ;
for ( var j = 0 ; j < array . length ; j ++ ) {
HEAP8 [ ( ( ( argPtr ) + ( j ) ) | 0 ) ] = array [ j ]
}
break ;
}
fields ++ ;
} else if ( format [ formatIndex ] in _ _scanString . whiteSpace ) {
next = get ( ) ;
while ( next in _ _scanString . whiteSpace ) {
if ( next <= 0 ) break mainLoop ; // End of input.
next = get ( ) ;
}
unget ( next ) ;
formatIndex ++ ;
} else {
// Not a specifier.
next = get ( ) ;
if ( format [ formatIndex ] . charCodeAt ( 0 ) !== next ) {
unget ( next ) ;
break mainLoop ;
}
formatIndex ++ ;
}
}
return fields ;
} function _sscanf ( s , format , varargs ) {
// int sscanf(const char *restrict s, const char *restrict format, ... );
// http://pubs.opengroup.org/onlinepubs/000095399/functions/scanf.html
var index = 0 ;
var get = function ( ) { return HEAP8 [ ( ( ( s ) + ( index ++ ) ) | 0 ) ] ; } ;
var unget = function ( ) { index -- ; } ;
return _ _scanString ( format , get , unget , varargs ) ;
}
var _atan2 = Math . atan2 ;
var _ _ _errno = _ _ _errno _location ;
function _putchar ( c ) {
// int putchar(int c);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/putchar.html
return _fputc ( c , HEAP32 [ ( ( _stdout ) >> 2 ) ] ) ;
}
Module [ "_saveSetjmp" ] = _saveSetjmp ;
Module [ "_testSetjmp" ] = _testSetjmp ; var _setjmp = undefined ;
function _signal ( sig , func ) {
// TODO
return 0 ;
}
function _toupper ( chr ) {
if ( chr >= 97 && chr <= 122 ) {
return chr - 97 + 65 ;
} else {
return chr ;
}
}
function _longjmp ( env , value ) {
asm [ 'setThrew' ] ( env , value || 1 ) ;
throw 'longjmp' ;
}
function _time ( ptr ) {
var ret = Math . floor ( Date . now ( ) / 1000 ) ;
if ( ptr ) {
HEAP32 [ ( ( ptr ) >> 2 ) ] = ret
}
return ret ;
}
var _ _ _tm _struct _layout = { _ _size _ _ : 44 , tm _sec : 0 , tm _min : 4 , tm _hour : 8 , tm _mday : 12 , tm _mon : 16 , tm _year : 20 , tm _wday : 24 , tm _yday : 28 , tm _isdst : 32 , tm _gmtoff : 36 , tm _zone : 40 } ;
var _ _ _tm _current = allocate ( 4 * 26 , "i8" , ALLOC _STATIC ) ;
var _ _ _tm _timezones = { } ;
var _ _tzname = allocate ( 8 , "i32*" , ALLOC _STATIC ) ;
var _ _daylight = allocate ( 1 , "i32*" , ALLOC _STATIC ) ;
var _ _timezone = allocate ( 1 , "i32*" , ALLOC _STATIC ) ; 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 ( ) )
var winterName = 'GMT' ; // XXX do not rely on browser timezone info, it is very unpredictable | winter.toString().match(/\(([A-Z]+)\)/)[1];
var summerName = 'GMT' ; // XXX do not rely on browser timezone info, it is very unpredictable | summer.toString().match(/\(([A-Z]+)\)/)[1];
var winterNamePtr = allocate ( intArrayFromString ( winterName ) , 'i8' , ALLOC _NORMAL ) ;
var summerNamePtr = allocate ( intArrayFromString ( summerName ) , 'i8' , ALLOC _NORMAL ) ;
HEAP32 [ ( ( _ _tzname ) >> 2 ) ] = winterNamePtr
HEAP32 [ ( ( ( _ _tzname ) + ( 4 ) ) >> 2 ) ] = summerNamePtr
} function _localtime _r ( time , tmPtr ) {
_tzset ( ) ;
var offsets = _ _ _tm _struct _layout ;
var date = new Date ( HEAP32 [ ( ( time ) >> 2 ) ] * 1000 ) ;
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _sec ) ) >> 2 ) ] = date . getSeconds ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _min ) ) >> 2 ) ] = date . getMinutes ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _hour ) ) >> 2 ) ] = date . getHours ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _mday ) ) >> 2 ) ] = date . getDate ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _mon ) ) >> 2 ) ] = date . getMonth ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _year ) ) >> 2 ) ] = date . getFullYear ( ) - 1900
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _wday ) ) >> 2 ) ] = date . getDay ( )
var start = new Date ( date . getFullYear ( ) , 0 , 1 ) ;
var yday = Math . floor ( ( date . getTime ( ) - start . getTime ( ) ) / ( 1000 * 60 * 60 * 24 ) ) ;
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _yday ) ) >> 2 ) ] = yday
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _gmtoff ) ) >> 2 ) ] = start . getTimezoneOffset ( ) * 60
var dst = Number ( start . getTimezoneOffset ( ) != date . getTimezoneOffset ( ) ) ;
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _isdst ) ) >> 2 ) ] = dst
var timezone = 'GMT' ; // XXX do not rely on browser timezone info, it is very unpredictable | date.toString().match(/\(([A-Z]+)\)/)[1];
if ( ! ( timezone in _ _ _tm _timezones ) ) {
_ _ _tm _timezones [ timezone ] = allocate ( intArrayFromString ( timezone ) , 'i8' , ALLOC _NORMAL ) ;
}
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _zone ) ) >> 2 ) ] = _ _ _tm _timezones [ timezone ]
return tmPtr ;
} function _localtime ( time ) {
return _localtime _r ( time , _ _ _tm _current ) ;
}
var _ _ _tm _formatted = allocate ( 4 * 26 , "i8" , ALLOC _STATIC ) ;
function _mktime ( tmPtr ) {
_tzset ( ) ;
var offsets = _ _ _tm _struct _layout ;
var year = HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _year ) ) >> 2 ) ] ;
var timestamp = new Date ( year >= 1900 ? year : year + 1900 ,
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _mon ) ) >> 2 ) ] ,
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _mday ) ) >> 2 ) ] ,
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _hour ) ) >> 2 ) ] ,
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _min ) ) >> 2 ) ] ,
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _sec ) ) >> 2 ) ] ,
0 ) . getTime ( ) / 1000 ;
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _wday ) ) >> 2 ) ] = new Date ( timestamp ) . getDay ( )
var yday = Math . round ( ( timestamp - ( new Date ( year , 0 , 1 ) ) . getTime ( ) ) / ( 1000 * 60 * 60 * 24 ) ) ;
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _yday ) ) >> 2 ) ] = yday
return timestamp ;
} function _asctime _r ( tmPtr , buf ) {
var date = new Date ( _mktime ( tmPtr ) * 1000 ) ;
var formatted = date . toString ( ) ;
var datePart = formatted . replace ( /\d{4}.*/ , '' ) . replace ( / 0/ , ' ' ) ;
var timePart = formatted . match ( /\d{2}:\d{2}:\d{2}/ ) [ 0 ] ;
formatted = datePart + timePart + ' ' + date . getFullYear ( ) + '\n' ;
formatted . split ( '' ) . forEach ( function ( chr , index ) {
HEAP8 [ ( ( ( buf ) + ( index ) ) | 0 ) ] = chr . charCodeAt ( 0 )
} ) ;
HEAP8 [ ( ( ( buf ) + ( 25 ) ) | 0 ) ] = 0
return buf ;
} function _asctime ( tmPtr ) {
return _asctime _r ( tmPtr , _ _ _tm _formatted ) ;
} function _ctime ( timer ) {
return _asctime ( _localtime ( timer ) ) ;
}
var _llvm _va _start = undefined ;
function _vfprintf ( s , f , va _arg ) {
return _fprintf ( s , f , HEAP32 [ ( ( va _arg ) >> 2 ) ] ) ;
}
function _llvm _va _end ( ) { }
function _rename ( old , new _ ) {
// int rename(const char *old, const char *new);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/rename.html
var oldObj = FS . analyzePath ( Pointer _stringify ( old ) ) ;
var newObj = FS . analyzePath ( Pointer _stringify ( new _ ) ) ;
if ( newObj . path == oldObj . path ) {
return 0 ;
} else if ( ! oldObj . exists ) {
_ _ _setErrNo ( oldObj . error ) ;
return - 1 ;
} else if ( oldObj . isRoot || oldObj . path == FS . currentPath ) {
_ _ _setErrNo ( ERRNO _CODES . EBUSY ) ;
return - 1 ;
} else if ( newObj . parentPath &&
newObj . parentPath . indexOf ( oldObj . path ) == 0 ) {
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return - 1 ;
} else if ( newObj . exists && newObj . object . isFolder ) {
_ _ _setErrNo ( ERRNO _CODES . EISDIR ) ;
return - 1 ;
} else {
delete oldObj . parentObject . contents [ oldObj . name ] ;
newObj . parentObject . contents [ newObj . name ] = oldObj . object ;
return 0 ;
}
}
function _strftime ( s , maxsize , format , timeptr ) {
// size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html
// TODO: Implement.
return 0 ;
}
function _qsort ( base , num , size , cmp ) {
if ( num == 0 || size == 0 ) return ;
// forward calls to the JavaScript sort method
// first, sort the items logically
var comparator = function ( x , y ) {
return Runtime . dynCall ( 'iii' , cmp , [ x , y ] ) ;
}
var keys = [ ] ;
for ( var i = 0 ; i < num ; i ++ ) keys . push ( i ) ;
keys . sort ( function ( a , b ) {
return comparator ( base + a * size , base + b * size ) ;
} ) ;
// apply the sort
var temp = _malloc ( num * size ) ;
_memcpy ( temp , base , num * size ) ;
for ( var i = 0 ; i < num ; i ++ ) {
if ( keys [ i ] == i ) continue ; // already in place
_memcpy ( base + i * size , temp + keys [ i ] * size , size ) ;
}
_free ( temp ) ;
}
function _gettimeofday ( ptr ) {
// %struct.timeval = type { i32, i32 }
var now = Date . now ( ) ;
HEAP32 [ ( ( ptr ) >> 2 ) ] = Math . floor ( now / 1000 ) ; // seconds
HEAP32 [ ( ( ( ptr ) + ( 4 ) ) >> 2 ) ] = Math . floor ( ( now - 1000 * Math . floor ( now / 1000 ) ) * 1000 ) ; // microseconds
return 0 ;
}
function _opendir ( dirname ) {
// DIR *opendir(const char *dirname);
// http://pubs.opengroup.org/onlinepubs/007908799/xsh/opendir.html
// NOTE: Calculating absolute path redundantly since we need to associate it
// with the opened stream.
var path = FS . absolutePath ( Pointer _stringify ( dirname ) ) ;
if ( path === null ) {
_ _ _setErrNo ( ERRNO _CODES . ENOENT ) ;
return 0 ;
}
var target = FS . findObject ( path ) ;
if ( target === null ) return 0 ;
if ( ! target . isFolder ) {
_ _ _setErrNo ( ERRNO _CODES . ENOTDIR ) ;
return 0 ;
} else if ( ! target . read ) {
_ _ _setErrNo ( ERRNO _CODES . EACCES ) ;
return 0 ;
}
var contents = [ ] ;
for ( var key in target . contents ) contents . push ( key ) ;
var id = FS . createFileHandle ( {
path : path ,
object : target ,
// An index into contents. Special values: -2 is ".", -1 is "..".
position : - 2 ,
isRead : true ,
isWrite : false ,
isAppend : false ,
error : false ,
eof : false ,
ungotten : [ ] ,
// Folder-specific properties:
// Remember the contents at the time of opening in an array, so we can
// seek between them relying on a single order.
contents : contents ,
// Each stream has its own area for readdir() returns.
currentEntry : _malloc ( _ _ _dirent _struct _layout . _ _size _ _ )
} ) ;
return id ;
}
function _readdir _r ( dirp , entry , result ) {
// int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
// http://pubs.opengroup.org/onlinepubs/007908799/xsh/readdir_r.html
if ( ! FS . streams [ dirp ] || ! FS . streams [ dirp ] . object . isFolder ) {
return _ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
}
var stream = FS . streams [ dirp ] ;
var loc = stream . position ;
var entries = 0 ;
for ( var key in stream . contents ) entries ++ ;
if ( loc < - 2 || loc >= entries ) {
HEAP32 [ ( ( result ) >> 2 ) ] = 0
} else {
var name , inode , type ;
if ( loc === - 2 ) {
name = '.' ;
inode = 1 ; // Really undefined.
type = 4 ; //DT_DIR
} else if ( loc === - 1 ) {
name = '..' ;
inode = 1 ; // Really undefined.
type = 4 ; //DT_DIR
} else {
var object ;
name = stream . contents [ loc ] ;
object = stream . object . contents [ name ] ;
inode = object . inodeNumber ;
type = object . isDevice ? 2 // DT_CHR, character device.
: object . isFolder ? 4 // DT_DIR, directory.
: object . link !== undefined ? 10 // DT_LNK, symbolic link.
: 8 ; // DT_REG, regular file.
}
stream . position ++ ;
var offsets = _ _ _dirent _struct _layout ;
HEAP32 [ ( ( ( entry ) + ( offsets . d _ino ) ) >> 2 ) ] = inode
HEAP32 [ ( ( ( entry ) + ( offsets . d _off ) ) >> 2 ) ] = stream . position
HEAP32 [ ( ( ( entry ) + ( offsets . d _reclen ) ) >> 2 ) ] = name . length + 1
for ( var i = 0 ; i < name . length ; i ++ ) {
HEAP8 [ ( ( ( entry + offsets . d _name ) + ( i ) ) | 0 ) ] = name . charCodeAt ( i )
}
HEAP8 [ ( ( ( entry + offsets . d _name ) + ( i ) ) | 0 ) ] = 0
HEAP8 [ ( ( ( entry ) + ( offsets . d _type ) ) | 0 ) ] = type
HEAP32 [ ( ( result ) >> 2 ) ] = entry
}
return 0 ;
} function _readdir ( dirp ) {
// struct dirent *readdir(DIR *dirp);
// http://pubs.opengroup.org/onlinepubs/007908799/xsh/readdir_r.html
if ( ! FS . streams [ dirp ] || ! FS . streams [ dirp ] . object . isFolder ) {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return 0 ;
} else {
if ( ! _readdir . result ) _readdir . result = _malloc ( 4 ) ;
_readdir _r ( dirp , FS . streams [ dirp ] . currentEntry , _readdir . result ) ;
if ( HEAP32 [ ( ( _readdir . result ) >> 2 ) ] === 0 ) {
return 0 ;
} else {
return FS . streams [ dirp ] . currentEntry ;
}
}
}
function _closedir ( dirp ) {
// int closedir(DIR *dirp);
// http://pubs.opengroup.org/onlinepubs/007908799/xsh/closedir.html
if ( ! FS . streams [ dirp ] || ! FS . streams [ dirp ] . object . isFolder ) {
return _ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
} else {
_free ( FS . streams [ dirp ] . currentEntry ) ;
FS . streams [ dirp ] = null ;
return 0 ;
}
}
function _ungetc ( c , stream ) {
// int ungetc(int c, FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/ungetc.html
if ( FS . streams [ stream ] ) {
c = unSign ( c & 0xFF ) ;
FS . streams [ stream ] . ungotten . push ( c ) ;
return c ;
} else {
return - 1 ;
}
}
function _fmod ( x , y ) {
return x % y ;
}
function _gmtime _r ( time , tmPtr ) {
var date = new Date ( HEAP32 [ ( ( time ) >> 2 ) ] * 1000 ) ;
var offsets = _ _ _tm _struct _layout ;
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _sec ) ) >> 2 ) ] = date . getUTCSeconds ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _min ) ) >> 2 ) ] = date . getUTCMinutes ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _hour ) ) >> 2 ) ] = date . getUTCHours ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _mday ) ) >> 2 ) ] = date . getUTCDate ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _mon ) ) >> 2 ) ] = date . getUTCMonth ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _year ) ) >> 2 ) ] = date . getUTCFullYear ( ) - 1900
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _wday ) ) >> 2 ) ] = date . getUTCDay ( )
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _gmtoff ) ) >> 2 ) ] = 0
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _isdst ) ) >> 2 ) ] = 0
var start = new Date ( date . getFullYear ( ) , 0 , 1 ) ;
var yday = Math . round ( ( date . getTime ( ) - start . getTime ( ) ) / ( 1000 * 60 * 60 * 24 ) ) ;
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _yday ) ) >> 2 ) ] = yday
var timezone = "GMT" ;
if ( ! ( timezone in _ _ _tm _timezones ) ) {
_ _ _tm _timezones [ timezone ] = allocate ( intArrayFromString ( timezone ) , 'i8' , ALLOC _NORMAL ) ;
}
HEAP32 [ ( ( ( tmPtr ) + ( offsets . tm _zone ) ) >> 2 ) ] = _ _ _tm _timezones [ timezone ]
return tmPtr ;
} function _gmtime ( time ) {
return _gmtime _r ( time , _ _ _tm _current ) ;
}
function _setvbuf ( stream , buf , type , size ) {
// int setvbuf(FILE *restrict stream, char *restrict buf, int type, size_t size);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/setvbuf.html
// TODO: Implement custom buffering.
return 0 ;
} function _setbuf ( stream , buf ) {
// void setbuf(FILE *restrict stream, char *restrict buf);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/setbuf.html
if ( buf ) _setvbuf ( stream , buf , 0 , 8192 ) ; // _IOFBF, BUFSIZ.
else _setvbuf ( stream , buf , 2 , 8192 ) ; // _IONBF, BUFSIZ.
}
function _atexit ( func , arg ) {
_ _ATEXIT _ _ . unshift ( { func : func , arg : arg } ) ;
}
function _isatty ( fildes ) {
// int isatty(int fildes);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/isatty.html
if ( ! FS . streams [ fildes ] ) {
_ _ _setErrNo ( ERRNO _CODES . EBADF ) ;
return 0 ;
}
if ( FS . streams [ fildes ] . isTerminal ) return 1 ;
_ _ _setErrNo ( ERRNO _CODES . ENOTTY ) ;
return 0 ;
}
var _ _ _utsname _struct _layout = { _ _size _ _ : 160 , sysname : 0 , nodename : 32 , release : 64 , version : 96 , machine : 128 } ; function _uname ( name ) {
// int uname(struct utsname *name);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/uname.html
function copyString ( element , value ) {
var offset = _ _ _utsname _struct _layout [ element ] ;
for ( var i = 0 ; i < value . length ; i ++ ) {
HEAP8 [ ( ( ( name ) + ( offset + i ) ) | 0 ) ] = value . charCodeAt ( i )
}
HEAP8 [ ( ( ( name ) + ( offset + i ) ) | 0 ) ] = 0
}
if ( name === 0 ) {
return - 1 ;
} else {
copyString ( 'sysname' , 'Emscripten' ) ;
copyString ( 'nodename' , 'emscripten' ) ;
copyString ( 'release' , '1.0' ) ;
copyString ( 'version' , '#1' ) ;
copyString ( 'machine' , 'x86-JS' ) ;
return 0 ;
}
}
function _nl _langinfo ( item ) {
// char *nl_langinfo(nl_item item);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/nl_langinfo.html
var result ;
switch ( item ) {
case 0 :
result = 'ANSI_X3.4-1968' ;
break ;
case 1 :
result = '%a %b %e %H:%M:%S %Y' ;
break ;
case 2 :
result = '%m/%d/%y' ;
break ;
case 3 :
result = '%H:%M:%S' ;
break ;
case 4 :
result = '%I:%M:%S %p' ;
break ;
case 5 :
result = 'AM' ;
break ;
case 6 :
result = 'PM' ;
break ;
case 7 :
result = 'Sunday' ;
break ;
case 8 :
result = 'Monday' ;
break ;
case 9 :
result = 'Tuesday' ;
break ;
case 10 :
result = 'Wednesday' ;
break ;
case 11 :
result = 'Thursday' ;
break ;
case 12 :
result = 'Friday' ;
break ;
case 13 :
result = 'Saturday' ;
break ;
case 14 :
result = 'Sun' ;
break ;
case 15 :
result = 'Mon' ;
break ;
case 16 :
result = 'Tue' ;
break ;
case 17 :
result = 'Wed' ;
break ;
case 18 :
result = 'Thu' ;
break ;
case 19 :
result = 'Fri' ;
break ;
case 20 :
result = 'Sat' ;
break ;
case 21 :
result = 'January' ;
break ;
case 22 :
result = 'February' ;
break ;
case 23 :
result = 'March' ;
break ;
case 24 :
result = 'April' ;
break ;
case 25 :
result = 'May' ;
break ;
case 26 :
result = 'June' ;
break ;
case 27 :
result = 'July' ;
break ;
case 28 :
result = 'August' ;
break ;
case 29 :
result = 'September' ;
break ;
case 30 :
result = 'October' ;
break ;
case 31 :
result = 'November' ;
break ;
case 32 :
result = 'December' ;
break ;
case 33 :
result = 'Jan' ;
break ;
case 34 :
result = 'Feb' ;
break ;
case 35 :
result = 'Mar' ;
break ;
case 36 :
result = 'Apr' ;
break ;
case 37 :
result = 'May' ;
break ;
case 38 :
result = 'Jun' ;
break ;
case 39 :
result = 'Jul' ;
break ;
case 40 :
result = 'Aug' ;
break ;
case 41 :
result = 'Sep' ;
break ;
case 42 :
result = 'Oct' ;
break ;
case 43 :
result = 'Nov' ;
break ;
case 44 :
result = 'Dec' ;
break ;
case 49 :
result = '' ;
break ;
case 50 :
result = '.' ;
break ;
case 51 :
result = '' ;
break ;
case 52 :
result = '^[yY]' ;
break ;
case 53 :
result = '^[nN]' ;
break ;
case 56 :
result = '-' ;
break ;
case 45 :
case 46 :
case 47 :
case 48 :
default :
result = '' ;
break ;
}
var me = _nl _langinfo ;
if ( ! me . ret ) me . ret = _malloc ( 32 ) ;
for ( var i = 0 ; i < result . length ; i ++ ) {
HEAP8 [ ( ( ( me . ret ) + ( i ) ) | 0 ) ] = result . charCodeAt ( i )
}
HEAP8 [ ( ( ( me . ret ) + ( i ) ) | 0 ) ] = 0
return me . ret ;
}
function _iconv _open ( ) {
Module [ 'printErr' ] ( 'missing function: iconv_open' ) ; abort ( - 1 ) ;
}
function _iconv ( ) {
Module [ 'printErr' ] ( 'missing function: iconv' ) ; abort ( - 1 ) ;
}
function _iconv _close ( ) {
Module [ 'printErr' ] ( 'missing function: iconv_close' ) ; abort ( - 1 ) ;
}
function _localeconv ( ) {
// %struct.timeval = type { char* decimal point, other stuff... }
// var indexes = Runtime.calculateStructAlignment({ fields: ['i32', 'i32'] });
var me = _localeconv ;
if ( ! me . ret ) {
me . ret = allocate ( [ allocate ( intArrayFromString ( '.' ) , 'i8' , ALLOC _NORMAL ) ] , 'i8*' , ALLOC _NORMAL ) ; // just decimal point, for now
}
return me . ret ;
}
function _isprint ( chr ) {
return 0x1F < chr && chr < 0x7F ;
}
function _erfc ( x ) {
var MATH _TOLERANCE = 1E-12 ;
var ONE _SQRTPI = 0.564189583547756287 ;
var a = 1 ;
var b = x ;
var c = x ;
var d = x * x + 0.5 ;
var n = 1.0 ;
var q2 = b / d ;
var q1 , t ;
if ( Math . abs ( x ) < 2.2 ) {
return 1.0 - _erf ( x ) ;
}
if ( x < 0 ) {
return 2.0 - _erfc ( - x ) ;
}
do {
t = a * n + b * x ;
a = b ;
b = t ;
t = c * n + d * x ;
c = d ;
d = t ;
n += 0.5 ;
q1 = q2 ;
q2 = b / d ;
} while ( Math . abs ( q1 - q2 ) / q2 > MATH _TOLERANCE ) ;
return ( ONE _SQRTPI * Math . exp ( - x * x ) * q2 ) ;
} function _erf ( x ) {
var MATH _TOLERANCE = 1E-12 ;
var TWO _SQRTPI = 1.128379167095512574 ;
var sum = x ;
var term = x ;
var xsqr = x * x ;
var j = 1 ;
if ( Math . abs ( x ) > 2.2 ) {
return 1.0 - _erfc ( x ) ;
}
do {
term *= xsqr / j ;
sum -= term / ( 2 * j + 1 ) ;
++ j ;
term *= xsqr / j ;
sum += term / ( 2 * j + 1 ) ;
++ j ;
} while ( Math . abs ( term / sum ) > MATH _TOLERANCE ) ;
return ( TWO _SQRTPI * sum ) ;
}
function _lgamma ( ) {
Module [ 'printErr' ] ( 'missing function: lgamma' ) ; abort ( - 1 ) ;
}
function _ _ _signgam ( ) {
Module [ 'printErr' ] ( 'missing function: __signgam' ) ; abort ( - 1 ) ;
}
function _modf ( x , intpart ) {
HEAPF64 [ ( ( intpart ) >> 3 ) ] = Math . floor ( x )
return x - HEAPF64 [ ( ( intpart ) >> 3 ) ] ;
}
function _cosh ( x ) {
var p = Math . pow ( Math . E , x ) ;
return ( p + ( 1 / p ) ) / 2 ;
}
function _sinh ( x ) {
var p = Math . pow ( Math . E , x ) ;
return ( p - ( 1 / p ) ) / 2 ;
}
var _tan = Math . tan ;
var _asin = Math . asin ;
var _acos = Math . acos ;
var _atan = Math . atan ;
function _sleep ( seconds ) {
// unsigned sleep(unsigned seconds);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/sleep.html
return _usleep ( seconds * 1e6 ) ;
}
function _strdup ( ptr ) {
var len = _strlen ( ptr ) ;
var newStr = _malloc ( len + 1 ) ;
_memcpy ( newStr , ptr , len ) ;
HEAP8 [ ( ( ( newStr ) + ( len ) ) | 0 ) ] = 0 ;
return newStr ;
}
function _vsnprintf ( s , n , format , va _arg ) {
return _snprintf ( s , n , format , HEAP32 [ ( ( va _arg ) >> 2 ) ] ) ;
}
function _abort ( ) {
ABORT = true ;
throw 'abort() at ' + ( new Error ( ) . stack ) ;
}
function _sysconf ( name ) {
// long sysconf(int name);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
switch ( name ) {
case 8 : return PAGE _SIZE ;
case 54 :
case 56 :
case 21 :
case 61 :
case 63 :
case 22 :
case 67 :
case 23 :
case 24 :
case 25 :
case 26 :
case 27 :
case 69 :
case 28 :
case 101 :
case 70 :
case 71 :
case 29 :
case 30 :
case 199 :
case 75 :
case 76 :
case 32 :
case 43 :
case 44 :
case 80 :
case 46 :
case 47 :
case 45 :
case 48 :
case 49 :
case 42 :
case 82 :
case 33 :
case 7 :
case 108 :
case 109 :
case 107 :
case 112 :
case 119 :
case 121 :
return 200809 ;
case 13 :
case 104 :
case 94 :
case 95 :
case 34 :
case 35 :
case 77 :
case 81 :
case 83 :
case 84 :
case 85 :
case 86 :
case 87 :
case 88 :
case 89 :
case 90 :
case 91 :
case 94 :
case 95 :
case 110 :
case 111 :
case 113 :
case 114 :
case 115 :
case 116 :
case 117 :
case 118 :
case 120 :
case 40 :
case 16 :
case 79 :
case 19 :
return - 1 ;
case 92 :
case 93 :
case 5 :
case 72 :
case 6 :
case 74 :
case 92 :
case 93 :
case 96 :
case 97 :
case 98 :
case 99 :
case 102 :
case 103 :
case 105 :
return 1 ;
case 38 :
case 66 :
case 50 :
case 51 :
case 4 :
return 1024 ;
case 15 :
case 64 :
case 41 :
return 32 ;
case 55 :
case 37 :
case 17 :
return 2147483647 ;
case 18 :
case 1 :
return 47839 ;
case 59 :
case 57 :
return 99 ;
case 68 :
case 58 :
return 2048 ;
case 0 : return 2097152 ;
case 3 : return 65536 ;
case 14 : return 32768 ;
case 73 : return 32767 ;
case 39 : return 16384 ;
case 60 : return 1000 ;
case 106 : return 700 ;
case 52 : return 256 ;
case 62 : return 255 ;
case 2 : return 100 ;
case 65 : return 64 ;
case 36 : return 20 ;
case 100 : return 16 ;
case 20 : return 6 ;
case 53 : return 4 ;
case 10 : return 1 ;
}
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return - 1 ;
}
function _sbrk ( bytes ) {
// Implement a Linux-like 'memory area' for our 'process'.
// Changes the size of the memory area by |bytes|; returns the
// address of the previous top ('break') of the memory area
// We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
var self = _sbrk ;
if ( ! self . called ) {
DYNAMICTOP = alignMemoryPage ( DYNAMICTOP ) ; // make sure we start out aligned
self . called = true ;
assert ( Runtime . dynamicAlloc ) ;
self . alloc = Runtime . dynamicAlloc ;
Runtime . dynamicAlloc = function ( ) { abort ( 'cannot dynamically allocate, sbrk now has control' ) } ;
}
var ret = DYNAMICTOP ;
if ( bytes != 0 ) self . alloc ( bytes ) ;
return ret ; // Previous break location.
}
function _llvm _lifetime _start ( ) { }
function _llvm _lifetime _end ( ) { }
var _llvm _memset _p0i8 _i64 = _memset ;
var _llvm _memcpy _p0i8 _p0i8 _i64 = _memcpy ;
function _llvm _trap ( ) {
throw 'trap! ' + new Error ( ) . stack ;
}
var Browser = { mainLoop : { scheduler : null , shouldPause : false , paused : false , queue : [ ] , pause : function ( ) {
Browser . mainLoop . shouldPause = true ;
} , resume : function ( ) {
if ( Browser . mainLoop . paused ) {
Browser . mainLoop . paused = false ;
Browser . mainLoop . scheduler ( ) ;
}
Browser . mainLoop . shouldPause = false ;
} , updateStatus : function ( ) {
if ( Module [ 'setStatus' ] ) {
var message = Module [ 'statusMessage' ] || 'Please wait...' ;
var remaining = Browser . mainLoop . remainingBlockers ;
var expected = Browser . mainLoop . expectedBlockers ;
if ( remaining ) {
if ( remaining < expected ) {
Module [ 'setStatus' ] ( message + ' (' + ( expected - remaining ) + '/' + expected + ')' ) ;
} else {
Module [ 'setStatus' ] ( message ) ;
}
} else {
Module [ 'setStatus' ] ( '' ) ;
}
}
} } , isFullScreen : false , pointerLock : false , moduleContextCreatedCallbacks : [ ] , workers : [ ] , init : function ( ) {
if ( Browser . initted ) return ;
Browser . initted = true ;
try {
new Blob ( ) ;
Browser . hasBlobConstructor = true ;
} catch ( e ) {
Browser . hasBlobConstructor = false ;
console . log ( "warning: no blob constructor, cannot create blobs with mimetypes" ) ;
}
Browser . BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : ( typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : ( ! Browser . hasBlobConstructor ? console . log ( "warning: no BlobBuilder" ) : null ) ) ;
Browser . URLObject = typeof window != "undefined" ? ( window . URL ? window . URL : window . webkitURL ) : console . log ( "warning: cannot create object URLs" ) ;
// Support for plugins that can process preloaded files. You can add more of these to
// your app by creating and appending to Module.preloadPlugins.
//
// Each plugin is asked if it can handle a file based on the file's name. If it can,
// it is given the file's raw data. When it is done, it calls a callback with the file's
// (possibly modified) data. For example, a plugin might decompress a file, or it
// might create some side data structure for use later (like an Image element, etc.).
function getMimetype ( name ) {
return {
'jpg' : 'image/jpeg' ,
'jpeg' : 'image/jpeg' ,
'png' : 'image/png' ,
'bmp' : 'image/bmp' ,
'ogg' : 'audio/ogg' ,
'wav' : 'audio/wav' ,
'mp3' : 'audio/mpeg'
} [ name . substr ( name . lastIndexOf ( '.' ) + 1 ) ] ;
}
if ( ! Module [ "preloadPlugins" ] ) Module [ "preloadPlugins" ] = [ ] ;
var imagePlugin = { } ;
imagePlugin [ 'canHandle' ] = function ( name ) {
return ! Module . noImageDecoding && /\.(jpg|jpeg|png|bmp)$/ . exec ( name ) ;
} ;
imagePlugin [ 'handle' ] = function ( byteArray , name , onload , onerror ) {
var b = null ;
if ( Browser . hasBlobConstructor ) {
try {
b = new Blob ( [ byteArray ] , { type : getMimetype ( name ) } ) ;
} catch ( e ) {
Runtime . warnOnce ( 'Blob constructor present but fails: ' + e + '; falling back to blob builder' ) ;
}
}
if ( ! b ) {
var bb = new Browser . BlobBuilder ( ) ;
bb . append ( ( new Uint8Array ( byteArray ) ) . buffer ) ; // we need to pass a buffer, and must copy the array to get the right data range
b = bb . getBlob ( ) ;
}
var url = Browser . URLObject . createObjectURL ( b ) ;
var img = new Image ( ) ;
img . onload = function ( ) {
assert ( img . complete , 'Image ' + name + ' could not be decoded' ) ;
var canvas = document . createElement ( 'canvas' ) ;
canvas . width = img . width ;
canvas . height = img . height ;
var ctx = canvas . getContext ( '2d' ) ;
ctx . drawImage ( img , 0 , 0 ) ;
Module [ "preloadedImages" ] [ name ] = canvas ;
Browser . URLObject . revokeObjectURL ( url ) ;
if ( onload ) onload ( byteArray ) ;
} ;
img . onerror = function ( event ) {
console . log ( 'Image ' + url + ' could not be decoded' ) ;
if ( onerror ) onerror ( ) ;
} ;
img . src = url ;
} ;
Module [ 'preloadPlugins' ] . push ( imagePlugin ) ;
var audioPlugin = { } ;
audioPlugin [ 'canHandle' ] = function ( name ) {
return ! Module . noAudioDecoding && name . substr ( - 4 ) in { '.ogg' : 1 , '.wav' : 1 , '.mp3' : 1 } ;
} ;
audioPlugin [ 'handle' ] = function ( byteArray , name , onload , onerror ) {
var done = false ;
function finish ( audio ) {
if ( done ) return ;
done = true ;
Module [ "preloadedAudios" ] [ name ] = audio ;
if ( onload ) onload ( byteArray ) ;
}
function fail ( ) {
if ( done ) return ;
done = true ;
Module [ "preloadedAudios" ] [ name ] = new Audio ( ) ; // empty shim
if ( onerror ) onerror ( ) ;
}
if ( Browser . hasBlobConstructor ) {
try {
var b = new Blob ( [ byteArray ] , { type : getMimetype ( name ) } ) ;
} catch ( e ) {
return fail ( ) ;
}
var url = Browser . URLObject . createObjectURL ( b ) ; // XXX we never revoke this!
var audio = new Audio ( ) ;
audio . addEventListener ( 'canplaythrough' , function ( ) { finish ( audio ) } , false ) ; // use addEventListener due to chromium bug 124926
audio . onerror = function ( event ) {
if ( done ) return ;
console . log ( 'warning: browser could not fully decode audio ' + name + ', trying slower base64 approach' ) ;
function encode64 ( data ) {
var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' ;
var PAD = '=' ;
var ret = '' ;
var leftchar = 0 ;
var leftbits = 0 ;
for ( var i = 0 ; i < data . length ; i ++ ) {
leftchar = ( leftchar << 8 ) | data [ i ] ;
leftbits += 8 ;
while ( leftbits >= 6 ) {
var curr = ( leftchar >> ( leftbits - 6 ) ) & 0x3f ;
leftbits -= 6 ;
ret += BASE [ curr ] ;
}
}
if ( leftbits == 2 ) {
ret += BASE [ ( leftchar & 3 ) << 4 ] ;
ret += PAD + PAD ;
} else if ( leftbits == 4 ) {
ret += BASE [ ( leftchar & 0xf ) << 2 ] ;
ret += PAD ;
}
return ret ;
}
audio . src = 'data:audio/x-' + name . substr ( - 3 ) + ';base64,' + encode64 ( byteArray ) ;
finish ( audio ) ; // we don't wait for confirmation this worked - but it's worth trying
} ;
audio . src = url ;
// workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
Browser . safeSetTimeout ( function ( ) {
finish ( audio ) ; // try to use it even though it is not necessarily ready to play
} , 10000 ) ;
} else {
return fail ( ) ;
}
} ;
Module [ 'preloadPlugins' ] . push ( audioPlugin ) ;
// Canvas event setup
var canvas = Module [ 'canvas' ] ;
canvas . requestPointerLock = canvas [ 'requestPointerLock' ] ||
canvas [ 'mozRequestPointerLock' ] ||
canvas [ 'webkitRequestPointerLock' ] ;
canvas . exitPointerLock = document [ 'exitPointerLock' ] ||
document [ 'mozExitPointerLock' ] ||
document [ 'webkitExitPointerLock' ] ||
function ( ) { } ; // no-op if function does not exist
canvas . exitPointerLock = canvas . exitPointerLock . bind ( document ) ;
function pointerLockChange ( ) {
Browser . pointerLock = document [ 'pointerLockElement' ] === canvas ||
document [ 'mozPointerLockElement' ] === canvas ||
document [ 'webkitPointerLockElement' ] === canvas ;
}
document . addEventListener ( 'pointerlockchange' , pointerLockChange , false ) ;
document . addEventListener ( 'mozpointerlockchange' , pointerLockChange , false ) ;
document . addEventListener ( 'webkitpointerlockchange' , pointerLockChange , false ) ;
if ( Module [ 'elementPointerLock' ] ) {
canvas . addEventListener ( "click" , function ( ev ) {
if ( ! Browser . pointerLock && canvas . requestPointerLock ) {
canvas . requestPointerLock ( ) ;
ev . preventDefault ( ) ;
}
} , false ) ;
}
} , createContext : function ( canvas , useWebGL , setInModule ) {
var ctx ;
try {
if ( useWebGL ) {
ctx = canvas . getContext ( 'experimental-webgl' , {
alpha : false
} ) ;
} else {
ctx = canvas . getContext ( '2d' ) ;
}
if ( ! ctx ) throw ':(' ;
} catch ( e ) {
Module . print ( 'Could not create canvas - ' + e ) ;
return null ;
}
if ( useWebGL ) {
// Set the background of the WebGL canvas to black
canvas . style . backgroundColor = "black" ;
// Warn on context loss
canvas . addEventListener ( 'webglcontextlost' , function ( event ) {
alert ( 'WebGL context lost. You will need to reload the page.' ) ;
} , false ) ;
}
if ( setInModule ) {
Module . ctx = ctx ;
Module . useWebGL = useWebGL ;
Browser . moduleContextCreatedCallbacks . forEach ( function ( callback ) { callback ( ) } ) ;
Browser . init ( ) ;
}
return ctx ;
} , destroyContext : function ( canvas , useWebGL , setInModule ) { } , fullScreenHandlersInstalled : false , lockPointer : undefined , resizeCanvas : undefined , requestFullScreen : function ( lockPointer , resizeCanvas ) {
Browser . lockPointer = lockPointer ;
Browser . resizeCanvas = resizeCanvas ;
if ( typeof Browser . lockPointer === 'undefined' ) Browser . lockPointer = true ;
if ( typeof Browser . resizeCanvas === 'undefined' ) Browser . resizeCanvas = false ;
var canvas = Module [ 'canvas' ] ;
function fullScreenChange ( ) {
Browser . isFullScreen = false ;
if ( ( document [ 'webkitFullScreenElement' ] || document [ 'webkitFullscreenElement' ] ||
document [ 'mozFullScreenElement' ] || document [ 'mozFullscreenElement' ] ||
document [ 'fullScreenElement' ] || document [ 'fullscreenElement' ] ) === canvas ) {
canvas . cancelFullScreen = document [ 'cancelFullScreen' ] ||
document [ 'mozCancelFullScreen' ] ||
document [ 'webkitCancelFullScreen' ] ;
canvas . cancelFullScreen = canvas . cancelFullScreen . bind ( document ) ;
if ( Browser . lockPointer ) canvas . requestPointerLock ( ) ;
Browser . isFullScreen = true ;
if ( Browser . resizeCanvas ) Browser . setFullScreenCanvasSize ( ) ;
} else if ( Browser . resizeCanvas ) {
Browser . setWindowedCanvasSize ( ) ;
}
if ( Module [ 'onFullScreen' ] ) Module [ 'onFullScreen' ] ( Browser . isFullScreen ) ;
}
if ( ! Browser . fullScreenHandlersInstalled ) {
Browser . fullScreenHandlersInstalled = true ;
document . addEventListener ( 'fullscreenchange' , fullScreenChange , false ) ;
document . addEventListener ( 'mozfullscreenchange' , fullScreenChange , false ) ;
document . addEventListener ( 'webkitfullscreenchange' , fullScreenChange , false ) ;
}
canvas . requestFullScreen = canvas [ 'requestFullScreen' ] ||
canvas [ 'mozRequestFullScreen' ] ||
( canvas [ 'webkitRequestFullScreen' ] ? function ( ) { canvas [ 'webkitRequestFullScreen' ] ( Element [ 'ALLOW_KEYBOARD_INPUT' ] ) } : null ) ;
canvas . requestFullScreen ( ) ;
} , requestAnimationFrame : function ( func ) {
if ( ! window . requestAnimationFrame ) {
window . requestAnimationFrame = window [ 'requestAnimationFrame' ] ||
window [ 'mozRequestAnimationFrame' ] ||
window [ 'webkitRequestAnimationFrame' ] ||
window [ 'msRequestAnimationFrame' ] ||
window [ 'oRequestAnimationFrame' ] ||
window [ 'setTimeout' ] ;
}
window . requestAnimationFrame ( func ) ;
} , safeCallback : function ( func ) {
return function ( ) {
if ( ! ABORT ) return func . apply ( null , arguments ) ;
} ;
} , safeRequestAnimationFrame : function ( func ) {
return Browser . requestAnimationFrame ( function ( ) {
if ( ! ABORT ) func ( ) ;
} ) ;
} , safeSetTimeout : function ( func , timeout ) {
return setTimeout ( function ( ) {
if ( ! ABORT ) func ( ) ;
} , timeout ) ;
} , safeSetInterval : function ( func , timeout ) {
return setInterval ( function ( ) {
if ( ! ABORT ) func ( ) ;
} , timeout ) ;
} , getUserMedia : function ( func ) {
if ( ! window . getUserMedia ) {
window . getUserMedia = navigator [ 'getUserMedia' ] ||
navigator [ 'mozGetUserMedia' ] ;
}
window . getUserMedia ( func ) ;
} , getMovementX : function ( event ) {
return event [ 'movementX' ] ||
event [ 'mozMovementX' ] ||
event [ 'webkitMovementX' ] ||
0 ;
} , getMovementY : function ( event ) {
return event [ 'movementY' ] ||
event [ 'mozMovementY' ] ||
event [ 'webkitMovementY' ] ||
0 ;
} , mouseX : 0 , mouseY : 0 , mouseMovementX : 0 , mouseMovementY : 0 , calculateMouseEvent : function ( event ) { // event should be mousemove, mousedown or mouseup
if ( Browser . pointerLock ) {
// When the pointer is locked, calculate the coordinates
// based on the movement of the mouse.
// Workaround for Firefox bug 764498
if ( event . type != 'mousemove' &&
( 'mozMovementX' in event ) ) {
Browser . mouseMovementX = Browser . mouseMovementY = 0 ;
} else {
Browser . mouseMovementX = Browser . getMovementX ( event ) ;
Browser . mouseMovementY = Browser . getMovementY ( event ) ;
}
Browser . mouseX = SDL . mouseX + Browser . mouseMovementX ;
Browser . mouseY = SDL . mouseY + Browser . mouseMovementY ;
} else {
// Otherwise, calculate the movement based on the changes
// in the coordinates.
var rect = Module [ "canvas" ] . getBoundingClientRect ( ) ;
var x = event . pageX - ( window . scrollX + rect . left ) ;
var y = event . pageY - ( window . scrollY + rect . top ) ;
// the canvas might be CSS-scaled compared to its backbuffer;
// SDL-using content will want mouse coordinates in terms
// of backbuffer units.
var cw = Module [ "canvas" ] . width ;
var ch = Module [ "canvas" ] . height ;
x = x * ( cw / rect . width ) ;
y = y * ( ch / rect . height ) ;
Browser . mouseMovementX = x - Browser . mouseX ;
Browser . mouseMovementY = y - Browser . mouseY ;
Browser . mouseX = x ;
Browser . mouseY = y ;
}
} , xhrLoad : function ( url , onload , onerror ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( 'GET' , url , true ) ;
xhr . responseType = 'arraybuffer' ;
xhr . onload = function ( ) {
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 ) ;
} , asyncLoad : function ( url , onload , onerror , noRunDep ) {
Browser . xhrLoad ( url , function ( arrayBuffer ) {
assert ( arrayBuffer , 'Loading data file "' + url + '" failed (no arrayBuffer).' ) ;
onload ( new Uint8Array ( arrayBuffer ) ) ;
if ( ! noRunDep ) removeRunDependency ( 'al ' + url ) ;
} , function ( event ) {
if ( onerror ) {
onerror ( ) ;
} else {
throw 'Loading data file "' + url + '" failed.' ;
}
} ) ;
if ( ! noRunDep ) addRunDependency ( 'al ' + url ) ;
} , resizeListeners : [ ] , updateResizeListeners : function ( ) {
var canvas = Module [ 'canvas' ] ;
Browser . resizeListeners . forEach ( function ( listener ) {
listener ( canvas . width , canvas . height ) ;
} ) ;
} , setCanvasSize : function ( width , height , noUpdates ) {
var canvas = Module [ 'canvas' ] ;
canvas . width = width ;
canvas . height = height ;
if ( ! noUpdates ) Browser . updateResizeListeners ( ) ;
} , windowedWidth : 0 , windowedHeight : 0 , setFullScreenCanvasSize : function ( ) {
var canvas = Module [ 'canvas' ] ;
this . windowedWidth = canvas . width ;
this . windowedHeight = canvas . height ;
canvas . width = screen . width ;
canvas . height = screen . height ;
var flags = HEAPU32 [ ( ( SDL . screen + Runtime . QUANTUM _SIZE * 0 ) >> 2 ) ] ;
flags = flags | 0x00800000 ; // set SDL_FULLSCREEN flag
HEAP32 [ ( ( SDL . screen + Runtime . QUANTUM _SIZE * 0 ) >> 2 ) ] = flags
Browser . updateResizeListeners ( ) ;
} , setWindowedCanvasSize : function ( ) {
var canvas = Module [ 'canvas' ] ;
canvas . width = this . windowedWidth ;
canvas . height = this . windowedHeight ;
var flags = HEAPU32 [ ( ( SDL . screen + Runtime . QUANTUM _SIZE * 0 ) >> 2 ) ] ;
flags = flags & ~ 0x00800000 ; // clear SDL_FULLSCREEN flag
HEAP32 [ ( ( SDL . screen + Runtime . QUANTUM _SIZE * 0 ) >> 2 ) ] = flags
Browser . updateResizeListeners ( ) ;
} } ;
_ _ATINIT _ _ . unshift ( { func : function ( ) { if ( ! Module [ "noFSInit" ] && ! FS . init . initialized ) FS . init ( ) } } ) ; _ _ATMAIN _ _ . push ( { func : function ( ) { FS . ignorePermissions = false } } ) ; _ _ATEXIT _ _ . push ( { func : function ( ) { FS . quit ( ) } } ) ; Module [ "FS_createFolder" ] = FS . createFolder ; Module [ "FS_createPath" ] = FS . createPath ; Module [ "FS_createDataFile" ] = FS . createDataFile ; Module [ "FS_createPreloadedFile" ] = FS . createPreloadedFile ; Module [ "FS_createLazyFile" ] = FS . createLazyFile ; Module [ "FS_createLink" ] = FS . createLink ; Module [ "FS_createDevice" ] = FS . createDevice ;
_ _ _errno _state = Runtime . staticAlloc ( 4 ) ; HEAP32 [ ( ( _ _ _errno _state ) >> 2 ) ] = 0 ;
_fgetc . ret = allocate ( [ 0 ] , "i8" , ALLOC _STATIC ) ;
_fputc . ret = allocate ( [ 0 ] , "i8" , ALLOC _STATIC ) ;
_ _ _buildEnvironment ( ENV ) ;
Module [ "requestFullScreen" ] = function ( lockPointer , resizeCanvas ) { Browser . requestFullScreen ( lockPointer , resizeCanvas ) } ;
Module [ "requestAnimationFrame" ] = function ( func ) { Browser . requestAnimationFrame ( func ) } ;
Module [ "pauseMainLoop" ] = function ( ) { Browser . mainLoop . pause ( ) } ;
Module [ "resumeMainLoop" ] = function ( ) { Browser . mainLoop . resume ( ) } ;
Module [ "getUserMedia" ] = function ( ) { Browser . getUserMedia ( ) }
STACK _BASE = STACKTOP = Runtime . alignMemory ( STATICTOP ) ;
staticSealed = true ; // seal the static portion of memory
STACK _MAX = STACK _BASE + 5242880 ;
DYNAMIC _BASE = DYNAMICTOP = Runtime . alignMemory ( STACK _MAX ) ;
assert ( DYNAMIC _BASE < TOTAL _MEMORY ) ; // Stack must fit in TOTAL_MEMORY; allocations from here on may enlarge TOTAL_MEMORY
var Math _min = Math . min ;
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 _viffiii ( index , a1 , a2 , a3 , a4 , a5 , a6 ) {
try {
Module [ "dynCall_viffiii" ] ( index , a1 , a2 , a3 , a4 , a5 , a6 ) ;
} catch ( e ) {
if ( typeof e !== 'number' && e !== 'longjmp' ) throw e ;
asm [ "setThrew" ] ( 1 , 0 ) ;
}
}
function invoke _vf ( index , a1 ) {
try {
Module [ "dynCall_vf" ] ( index , a1 ) ;
} 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 _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 _iff ( index , a1 , a2 ) {
try {
return Module [ "dynCall_iff" ] ( index , a1 , a2 ) ;
} 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 _v ( index ) {
try {
Module [ "dynCall_v" ] ( index ) ;
} catch ( e ) {
if ( typeof e !== 'number' && e !== 'longjmp' ) throw e ;
asm [ "setThrew" ] ( 1 , 0 ) ;
}
}
function invoke _vifiii ( index , a1 , a2 , a3 , a4 , a5 ) {
try {
Module [ "dynCall_vifiii" ] ( index , a1 , a2 , a3 , a4 , a5 ) ;
} catch ( e ) {
if ( typeof e !== 'number' && e !== 'longjmp' ) throw e ;
asm [ "setThrew" ] ( 1 , 0 ) ;
}
}
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 _fii ( index , a1 , a2 ) {
try {
return Module [ "dynCall_fii" ] ( index , a1 , a2 ) ;
} 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 asmPrintInt ( x , y ) {
Module . print ( 'int ' + x + ',' + y ) ; // + ' ' + new Error().stack);
}
function asmPrintFloat ( x , y ) {
Module . print ( 'float ' + x + ',' + y ) ; // + ' ' + new Error().stack);
}
// EMSCRIPTEN_START_ASM
var asm = ( function ( global , env , buffer ) { "use asm" ; var a = new global . Int8Array ( buffer ) ; var b = new global . Int16Array ( buffer ) ; var c = new global . Int32Array ( buffer ) ; var d = new global . Uint8Array ( buffer ) ; var e = new global . Uint16Array ( buffer ) ; var f = new global . Uint32Array ( buffer ) ; var g = new global . Float32Array ( buffer ) ; var h = new global . Float64Array ( buffer ) ; var i = env . STACKTOP | 0 ; var j = env . STACK _MAX | 0 ; var k = env . tempDoublePtr | 0 ; var l = env . ABORT | 0 ; var m = env . _stderr | 0 ; var n = env . _stdout | 0 ; var o = env . _stdin | 0 ; var p = + env . NaN ; var q = + env . Infinity ; var r = 0 ; var s = 0 ; var t = 0 ; var u = 0 ; var v = 0 , w = 0 , x = 0 , y = 0 , z = 0.0 , A = 0 , B = 0 , C = 0 , D = 0.0 ; var E = 0 ; var F = 0 ; var G = 0 ; var H = 0 ; var I = 0 ; var J = 0 ; var K = 0 ; var L = 0 ; var M = 0 ; var N = 0 ; var O = global . Math . floor ; var P = global . Math . abs ; var Q = global . Math . sqrt ; var R = global . Math . pow ; var S = global . Math . cos ; var T = global . Math . sin ; var U = global . Math . tan ; var V = global . Math . acos ; var W = global . Math . asin ; var X = global . Math . atan ; var Y = global . Math . atan2 ; var Z = global . Math . exp ; var _ = global . Math . log ; var $ = global . Math . ceil ; var aa = global . Math . imul ; var ab = env . abort ; var ac = env . assert ; var ad = env . asmPrintInt ; var ae = env . asmPrintFloat ; var af = env . copyTempDouble ; var ag = env . copyTempFloat ; var ah = env . min ; var ai = env . invoke _viiiii ; var aj = env . invoke _viffiii ; var ak = env . invoke _vf ; var al = env . invoke _i ; var am = env . invoke _vi ; var an = env . invoke _vii ; var ao = env . invoke _ii ; var ap = env . invoke _iff ; var aq = env . invoke _iiii ; var ar = env . invoke _viii ; var as = env . invoke _v ; var at = env . invoke _vifiii ; var au = env . invoke _iiiii ; var av = env . invoke _fii ; var aw = env . invoke _iii ; var ax = env . _lseek ; var ay = env . _ _scanString ; var az = env . _fclose ; var aA = env . _uname ; var aB = env . _sleep ; var aC = env . _ _isFloat ; var aD = env . _fflush ; var aE = env . _strtol ; var aF = env . _fputc ; var aG = env . _iconv ; var aH = env . _ _ _signgam ; var aI = env . _fwrite ; var aJ = env . _send ; var aK = env . _fputs ; var aL = env . _tmpnam ; var aM = env . _isspace ; var aN = env . _localtime ; var aO = env . _read ; var aP = env . _ceil ; var aQ = env . _strstr ; var aR = env . _fileno ; var aS = env . _perror ; var aT = env . _ctime ; var aU = env . _fsync ; var aV = env . _signal ; var aW = env . _opendir ; var aX = env . _fmod ; var aY = env . _strcmp ; var aZ = env . _memchr ; var a _ = env . _strncmp ; var a$ = env . _tmpfile ; var a0 = env . _snprintf ; var a1 = env . _fgetc ; var a2 = env . _pclose ; var a3 = env . _readdir ; var a4 = env . _cosh ; var a5 = env . _atexit ; var a6 = env . _fgets ; var a7 = env . _close ; var a8 = env . _strchr ; var a9 = env . _asin ; var ba = env . _llvm _lifetime _start ; var bb = env . _ _ _setErrNo ; var bc = env . _ftell ; var bd = env . _exit ; var be = env . _sprintf ; var bf = env . _llvm _lifetime _end ; var bg = env . _asctime ; var bh = env . _strrchr ; var bi = env . _iconv _open ; var bj = env . _modf ; var bk = env . _strcspn ; var bl = env . _getcwd ; var bm = env . _gmtime ; var bn = env . _localtime _r ; var bo = env . _asctime _r ; var bp = env . _recv ; var bq = env . _cos ; var br = env . _putchar ; var bs = env . _isalnum ; var bt = env . _popen ; var bu = env . _erfc ; var bv = env . _ _exit ; var bw = env . _strftime ; var bx = env . _llvm _va _end ; var by = env . _tzset ; var bz = env . _sinh ; var bA = env . _setlocale ; var bB = env . _isprint ; var bC = env . _toupper ; var bD = env . _printf ; var bE = env . _pread ; var bF = env . _fopen ; var bG = env . _open ; var bH = env . _usleep ; var bI = env . _log ; var bJ = env . _puts ; var bK = env . _mktime ; var bL = env . _fdopen ; var bM = env . _qsort ; var bN = env . _system ; var bO = env . _isalpha ; var bP = env . _strdup ; var bQ = env . _log10 ; var bR = env . _closedir ; var bS = env . _isatty ; var bT = env . _ _formatString ; var bU = env . _getenv ; var bV = env . _gettimeofday ; var bW = env . _atoi ; var bX = env . _vfprintf ; var bY = env . _chdir ; var bZ = env . _llvm _pow _f64 ; var b _ = env . _sbrk ; var b$ = env . _localeconv ; var b0 = env . _ _ _errno _location ; var b1 = env . _strerror ; var b2 = env . _lgamma ; var b3 = env . _erf ; var b4 = env . _strspn ; var b5 = env . _ _parseInt ; var b6 = env . _ungetc ; var b7 = env . _llvm _trap ; var b8 = env . _rename ; var b9 = env . _vsnprintf ; var ca = env . _sscanf ; var cb = env . _sysconf ; var cc = env . _acos ; var cd = env . _fread ; var ce = env . _abort ; var cf = env . _fprintf ; var cg = env . _ _ _fpclassifyf ; var ch = env . _tan ; var ci = env . _ _ _buildEnvironment ; var cj = env . _feof ; var ck = env . _strncat ; var cl = env . _gmtime _r ; var cm = env . _fabs ; var cn = env . _floor ; var co = env . _ _reallyNegative ; var cp = env . _fseek ; var cq = env . _sqrt ; var cr = env . _write ; var cs = env . _rewind ; var ct = env . _sin ; var cu = env . _stat ; var cv = env . _longjmp ; var cw = env . _atan ; var cx = env . _readdir _r ; var cy = env . _strpbrk ; var cz = env . _iconv _close ; var cA = env . _se
// EMSCRIPTEN_START_FUNCS
function cX ( a ) { a = a | 0 ; var b = 0 ; b = i ; i = i + a | 0 ; i = i + 7 >> 3 << 3 ; return b | 0 } function cY ( ) { return i | 0 } function cZ ( a ) { a = a | 0 ; i = a } function c _ ( a , b ) { a = a | 0 ; b = b | 0 ; if ( ( r | 0 ) == 0 ) { r = a ; s = b } } function c$ ( a ) { a = a | 0 ; E = a } function c0 ( a ) { a = a | 0 ; F = a } function c1 ( a ) { a = a | 0 ; G = a } function c2 ( a ) { a = a | 0 ; H = a } function c3 ( a ) { a = a | 0 ; I = a } function c4 ( a ) { a = a | 0 ; J = a } function c5 ( a ) { a = a | 0 ; K = a } function c6 ( a ) { a = a | 0 ; L = a } function c7 ( a ) { a = a | 0 ; M = a } function c8 ( a ) { a = a | 0 ; N = a } function c9 ( b ) { b = b | 0 ; var d = 0 , e = 0 , f = 0 , g = 0 , j = 0 , k = 0.0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0.0 , t = 0.0 , u = 0.0 , x = 0.0 ; d = i ; i = i + 96 | 0 ; e = d | 0 ; f = d + 48 | 0 ; do { if ( ( c [ 64808 + ( b * 688 & - 1 ) >> 2 ] | 0 ) == 1 ) { if ( ( a [ 64812 + ( b * 688 & - 1 ) | 0 ] & 1 ) == 0 ) { break } g = 4968 + ( b * 51 & - 1 ) | 0 ; a [ g ] = 0 ; j = 4608 + ( b << 2 ) | 0 ; k = + da ( c [ j >> 2 ] | 0 , + h [ 64664 + ( b * 688 & - 1 ) >> 3 ] ) ; t3 ( e , k ) ; k = + da ( c [ j >> 2 ] | 0 , + h [ 64672 + ( b * 688 & - 1 ) >> 3 ] ) ; t3 ( f , k ) ; l = c [ f + 20 >> 2 ] | 0 ; m = c [ e + 20 >> 2 ] | 0 ; n = ( l | 0 ) == ( m | 0 ) ; do { if ( n ) { if ( ( c [ f + 28 >> 2 ] | 0 ) != ( c [ e + 28 >> 2 ] | 0 ) ) { break } if ( ( c [ f + 8 >> 2 ] | 0 ) != ( c [ e + 8 >> 2 ] | 0 ) ) { a [ g ] = a [ 172544 ] | 0 ; a [ g + 1 | 0 ] = a [ 172545 | 0 ] | 0 ; a [ g + 2 | 0 ] = a [ 172546 | 0 ] | 0 } o = c [ j >> 2 ] | 0 ; if ( o >>> 0 >= 4 ) { p = g ; i = d ; return p | 0 } if ( ( a [ g ] | 0 ) != 0 ) { q = ( uA ( g | 0 ) | 0 ) + ( 4968 + ( b * 51 & - 1 ) ) | 0 ; w = 58 ; a [ q ] = w & 255 ; w = w >> 8 ; a [ q + 1 | 0 ] = w & 255 } q = ( uA ( g | 0 ) | 0 ) + ( 4968 + ( b * 51 & - 1 ) ) | 0 ; a [ q ] = a [ 164672 ] | 0 ; a [ q + 1 | 0 ] = a [ 164673 | 0 ] | 0 ; a [ q + 2 | 0 ] = a [ 164674 | 0 ] | 0 ; if ( o >>> 0 >= 3 ) { p = g ; i = d ; return p | 0 } o = ( uA ( g | 0 ) | 0 ) + ( 4968 + ( b * 51 & - 1 ) ) | 0 ; w = 5449018 ; a [ o ] = w & 255 ; w = w >> 8 ; a [ o + 1 | 0 ] = w & 255 ; w = w >> 8 ; a [ o + 2 | 0 ] = w & 255 ; w = w >> 8 ; a [ o + 3 | 0 ] = w & 255 ; p = g ; i = d ; return p | 0 } } while ( 0 ) ; o = 64813 + ( b * 688 & - 1 ) | 0 ; q = a8 ( o | 0 , 109 ) | 0 ; r = q >>> 0 < ( a8 ( o | 0 , 100 ) | 0 ) >>> 0 ; do { if ( n ) { if ( r ) { a [ g ] = a [ 145768 ] | 0 ; a [ g + 1 | 0 ] = a [ 145769 | 0 ] | 0 ; a [ g + 2 | 0 ] = a [ 145770 | 0 ] | 0 ; a [ g + 3 | 0 ] = a [ 145771 | 0 ] | 0 ; a [ g + 4 | 0 ] = a [ 145772 | 0 ] | 0 ; a [ g + 5 | 0 ] = a [ 145773 | 0 ] | 0 ; break } else { a [ g ] = a [ 143792 ] | 0 ; a [ g + 1 | 0 ] = a [ 143793 | 0 ] | 0 ; a [ g + 2 | 0 ] = a [ 143794 | 0 ] | 0 ; a [ g + 3 | 0 ] = a [ 143795 | 0 ] | 0 ; a [ g + 4 | 0 ] = a [ 143796 | 0 ] | 0 ; a [ g + 5 | 0 ] = a [ 143797 | 0 ] | 0 ; break } } else { o = g ; q = o | 0 ; w = r ? 623865125 : 623862821 ; a [ q ] = w & 255 ; w = w >> 8 ; a [ q + 1 | 0 ] = w & 255 ; w = w >> 8 ; a [ q + 2 | 0 ] = w & 255 ; w = w >> 8 ; a [ q + 3 | 0 ] = w & 255 ; q = o + 4 | 0 ; w = r ? 2436964 : 2436973 ; a [ q ] = w & 255 ; w = w >> 8 ; a [ q + 1 | 0 ] = w & 255 ; w = w >> 8 ; a [ q + 2 | 0 ] = w & 255 ; w = w >> 8 ; a [ q + 3 | 0 ] = w & 255 ; q = ( uA ( g | 0 ) | 0 ) + ( 4968 + ( b * 51 & - 1 ) ) | 0 ; if ( ( ( l | 0 ) / 100 & - 1 | 0 ) == ( ( m | 0 ) / 100 & - 1 | 0 ) ) { w = 121 ; a [ q ] = w & 255 ; w = w >> 8 ; a [ q + 1 | 0 ] = w & 255 ; break } else { w = 89 ; a [ q ] = w & 255 ; w = w >> 8 ; a [ q + 1 | 0 ] = w & 255 ; break } } } while ( 0 ) ; if ( ( c [ j >> 2 ] | 0 ) >>> 0 >= 5 ) { p = g ; i = d ; return p | 0 } m = ( uA ( g | 0 ) | 0 ) + ( 4968 + ( b * 51 & - 1 ) ) | 0 ; a [ m ] = a [ 142240 ] | 0 ; a [ m + 1 | 0 ] = a [ 142241 | 0 ] | 0 ; a [ m + 2 | 0 ] = a [ 142242 | 0 ] | 0 ; a [ m + 3 | 0 ] = a [ 142243 | 0 ] | 0 ; a [ m + 4 | 0 ] = a [ 142244 | 0 ] | 0 ; a [ m + 5 | 0 ] = a [ 142245 | 0 ] | 0 ; a [ m + 6 | 0 ] = a [ 142246 | 0 ] | 0 ; p = g ; i = d ; return p | 0 } } while ( 0 ) ; e = 4968 + ( b * 51 & - 1 ) | 0 ; uB ( e | 0 , 64864 + ( b * 688 & - 1 ) | 0 ) ; if ( ( aY ( e | 0 , 186288 ) | 0 ) != 0 ) { p = e ; i = d ; return p | 0 } k = + h [ 64664 + ( b * 688 & - 1 ) >> 3 ] ; if ( ( a [ 64788 + ( b * 688 & - 1 ) | 0 ] & 1 ) == 0 ) { s = + h [ 64672 + ( b * 688 & - 1 ) >> 3 ] ; t = k } else { u = + h [ 64800 + ( b * 688 & - 1 ) >> 3 ] ; x = + Z ( + ( k * u ) ) ; s = + Z ( + ( + h [ 64672 + ( b * 688 & - 1 ) >> 3 ] * u ) ) ; t = x } b = ~ ~ + $ ( + ( - 0.0 - + bQ ( + ( + P ( + ( s - t ) ) ) ) ) ) ; if ( t * s > 0.0 & ( b | 0 ) > 4 ) { f = ( b | 0 ) > 14 ? 14 : b ; be ( e | 0 , 180872 , ( v = i , i = i + 8 | 0 , c [ v >> 2 ] = f , v ) | 0 ) ; p = e ; i = d ; return p | 0 } else { a [ e ] = a [ 170912 ] | 0 ; a [ e + 1 | 0 ] = a [ 170913 | 0 ] | 0 ; a [ e + 2 | 0 ] = a [ 170914 | 0 ] | 0 ; p = e ; i = d ; return p | 0 } return 0 } function da ( a , b ) { a = a | 0 ; b = + b ; var d = 0 , e = 0 , f = 0.0 , g = 0 , h = 0 , j = 0 ; d = i ; i = i + 48 | 0 ; e = d | 0 ; if ( a >>> 0 < 2 ) { f = b ; i = d ; return + f } t3 ( e , b ) ; g = e | 0 ; if ( ( c [ g >> 2 ] | 0 ) > 55 ) { h = e + 4 | 0 ; c [ h >> 2 ] = ( c [ h >> 2 ] | 0 ) + 1 } c [ g >> 2 ] = 0 ; do { if ( a >>> 0 > 2 ) { g = e + 4 | 0 ; if ( ( c [ g >> 2 ] | 0 ) > 55 ) { h = e + 8 | 0 ; c [ h >> 2 ] = ( c [ h >> 2 ] | 0 ) + 1 } c [ g >> 2 ] = 0 ; if ( a >>> 0 <= 3 ) { break } g = e + 8 | 0 ; if ( ( c [ g >> 2 ] | 0 ) > 22 ) { c [ g >> 2 ] = 0 ; c [ e + 12 >> 2 ] = 0 ; g = e + 28 | 0 ; c [ g >> 2 ] = ( c [ g >> 2 ] | 0 ) + 1 ; b = + t2 ( e ) ; t3 ( e , b ) } if ( a >>> 0 <= 5 ) { break } g = e + 12 | 0 ; do { if ( ( c [ g >> 2 ] | 0 ) > 25 ) { h = e + 16 | 0 ; j = ( c [ h >> 2 ] | 0 ) + 1 | 0 ; c [ h >> 2 ] = j ; if ( ( j | 0 ) <= 11 ) { break } j = e + 20 | 0 ; c [ j >> 2 ] = ( c [ j >> 2 ] | 0 ) + 1 ; c [ h >> 2 ] = 0 } } while ( 0 ) ; c [ g >> 2 ] = 1 } } while ( 0 ) ; f = + t2 ( e ) ; i = d ; return + f } function db ( a , b , d ) { a = a | 0 ; b = b | 0 ; d = d | 0 ; var e = 0 , f = 0 , g = 0 ; e = i ; do { if ( ( a | 0 ) == 0 ) { f = ut ( b ) | 0 ; if ( ( f | 0 ) != 0 ) { g = f ; break } gk ( ) ; f = ut ( b ) | 0 ; if ( ( f | 0 ) != 0 | ( d | 0 ) == 0 ) { g = f ; break } uf ( - 1 , 225296 , ( v = i , i = i + 8 | 0 , c [ v >> 2 ] = d , v ) | 0 ) ; return 0 } else { f = uv ( a , b ) | 0 ; if ( ( f | 0 ) != 0 ) { g = f ; break } gk ( ) ; f = uv ( a , b ) | 0 ; if ( ( f | 0 ) != 0 | ( d | 0 ) == 0 ) { g = f ; break } uf ( - 1 , 225296 , ( v = i , i = i + 8 | 0 , c [ v >> 2 ] = d , v ) | 0 ) ; return 0 } } while ( 0 ) ; i = e ; return g | 0 } function dc ( a , b ) { a = a | 0 ; b = b | 0 ; var d = 0 , e = 0 , f = 0.0 , g = 0 , j = 0.0 , k = 0 , l = 0 , n = 0.0 , o = 0 , p = 0 , q = 0 ; d = i ; e = 64664 + ( a * 688 & - 1 ) | 0 ; f = + h [ e >> 3 ] ; g = 64672 + ( a * 688 & - 1 ) | 0 ; j = + h [ g >> 3 ] ; k = ( b | 0 ) != 0 ; do { if ( k ) { if ( ! ( f == 8.988465674311579 e + 307 | j == - 8.988465674311579 e + 307 ) ) { break } uf ( c [ 13898 ] | 0 , b , ( v = i , i = i + 1 | 0 , i = i + 7 >> 3 <
function hH ( b , d , e ) { b = b | 0 ; d = d | 0 ; e = e | 0 ; var f = 0 , g = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 , F = 0 , G = 0.0 , H = 0 , I = 0 , J = 0 , K = 0 , L = 0 , M = 0 , N = 0 , O = 0 , P = 0 , Q = 0 , R = 0 , S = 0 , T = 0 , U = 0 , V = 0 , W = 0 , X = 0 , Y = 0 , Z = 0 , _ = 0 , $ = 0 , aa = 0 , ab = 0 , ac = 0 , ad = 0 , ae = 0 , af = 0 , ag = 0 , ah = 0 , ai = 0 , aj = 0 , ak = 0 , al = 0 , am = 0 , an = 0 , ao = 0 , ap = 0 , aq = 0 , ar = 0 , as = 0 , at = 0 , au = 0 , av = 0 , aw = 0 , ax = 0 , ay = 0 , az = 0 , aA = 0 , aB = 0 , aC = 0 , aD = 0 , aE = 0 , aF = 0 , aG = 0 , aH = 0 , aI = 0 , aJ = 0 , aK = 0 , aL = 0 , aM = 0 , aN = 0 , aO = 0 , aP = 0 , aQ = 0 , aR = 0.0 , aS = 0 , aT = 0 , aU = 0 , aV = 0 , aW = 0 , aX = 0 , aY = 0 , aZ = 0 , a _ = 0 , a$ = 0 , a0 = 0 , a1 = 0 , a2 = 0.0 , a3 = 0 , a4 = 0 , a5 = 0 , a6 = 0 , a7 = 0 , a8 = 0 , a9 = 0 , ba = 0 , bb = 0 , bc = 0 , bd = 0 , be = 0 , bf = 0.0 , bg = 0 , bh = 0 , bi = 0 , bj = 0 , bk = 0 , bl = 0 , bm = 0 , bn = 0 , bo = 0.0 , bp = 0.0 , bq = 0.0 , br = 0 , bs = 0 , bt = 0 , bu = 0 , bv = 0 , bw = 0 , bx = 0 , by = 0.0 , bz = 0.0 , bA = 0 , bB = 0 , bC = 0 , bD = 0.0 , bE = 0.0 , bF = 0 ; f = i ; i = i + 272 | 0 ; g = f | 0 ; j = f + 24 | 0 ; k = f + 48 | 0 ; l = f + 72 | 0 ; m = f + 96 | 0 ; n = f + 120 | 0 ; o = f + 144 | 0 ; p = f + 168 | 0 ; q = f + 192 | 0 ; r = f + 216 | 0 ; s = r ; t = b ; c [ s >> 2 ] = c [ t >> 2 ] ; c [ s + 4 >> 2 ] = c [ t + 4 >> 2 ] ; c [ s + 8 >> 2 ] = c [ t + 8 >> 2 ] ; c [ s + 12 >> 2 ] = c [ t + 12 >> 2 ] ; c [ s + 16 >> 2 ] = c [ t + 16 >> 2 ] ; c [ s + 20 >> 2 ] = c [ t + 20 >> 2 ] ; c [ s + 24 >> 2 ] = c [ t + 24 >> 2 ] ; c [ s + 28 >> 2 ] = c [ t + 28 >> 2 ] ; c [ s + 32 >> 2 ] = c [ t + 32 >> 2 ] ; c [ s + 36 >> 2 ] = c [ t + 36 >> 2 ] ; c [ s + 40 >> 2 ] = c [ t + 40 >> 2 ] ; c [ s + 44 >> 2 ] = c [ t + 44 >> 2 ] ; c [ s + 48 >> 2 ] = c [ t + 48 >> 2 ] ; c [ s + 52 >> 2 ] = c [ t + 52 >> 2 ] ; L2163 : do { if ( d ) { s = c [ 13898 ] | 0 ; u = c [ 1054 ] | 0 ; w = c [ u + ( s * 40 & - 1 ) + 36 >> 2 ] | 0 ; x = c [ u + ( s * 40 & - 1 ) + 32 >> 2 ] | 0 ; y = ( a [ u + ( s * 40 & - 1 ) | 0 ] & 1 ) == 0 ; L2165 : do { if ( ( w | 0 ) > 0 & ( y ^ 1 ) ) { u = c [ 10036 ] | 0 ; z = 0 ; A = 0 ; B = x ; while ( 1 ) { if ( ( a [ z + 73824 | 0 ] | 0 ) == ( a [ u + ( z + B | 0 ) | 0 ] | 0 ) ) { C = B ; D = A } else { if ( ( z | 0 ) != 5 ) { E = 1558 ; break L2165 } C = B - 1 | 0 ; D = 1 } F = z + 1 | 0 ; if ( ( F | 0 ) < ( D + w | 0 ) ) { z = F ; A = D ; B = C } else { break } } if ( ( D | 0 ) != 0 ) { break } if ( ! ( ( z | 0 ) == 4 | ( z | 0 ) == 9 ) ) { E = 1558 } } else { E = 1558 } } while ( 0 ) ; if ( ( E | 0 ) == 1558 ) { if ( ( c [ 8272 ] | 0 ) <= ( s | 0 ) | y ) { break } B = c [ 10036 ] | 0 ; A = 0 ; while ( 1 ) { if ( ( A | 0 ) >= ( w | 0 ) ) { break } if ( ( a [ B + ( x + A | 0 ) | 0 ] | 0 ) == ( a [ A + 72816 | 0 ] | 0 ) ) { A = A + 1 | 0 } else { break L2163 } } if ( ( A | 0 ) != 2 ) { break } } c [ 13898 ] = s + 1 ; x = is ( p ) | 0 ; B = c [ x >> 2 ] | 0 ; if ( ( B | 0 ) == 3 ) { G = + uz ( c [ x + 8 >> 2 ] | 0 , 0 ) } else if ( ( B | 0 ) == 1 ) { G = + ( c [ x + 8 >> 2 ] | 0 ) } else if ( ( B | 0 ) == 2 ) { G = + h [ x + 8 >> 3 ] } else { uf ( - 1 , 213288 , ( v = i , i = i + 1 | 0 , i = i + 7 >> 3 << 3 , c [ v >> 2 ] = 0 , v ) | 0 ) ; return 0 } x = p | 0 ; if ( ( c [ x >> 2 ] | 0 ) == 3 ) { uu ( c [ p + 8 >> 2 ] | 0 ) ; c [ x >> 2 ] = 1 } lK ( b , ~ ~ G ) } } while ( 0 ) ; p = c [ 13898 ] | 0 ; D = c [ 8272 ] | 0 ; L2193 : do { if ( ( p | 0 ) < ( D | 0 ) ) { C = n | 0 ; x = n + 8 | 0 ; B = r + 12 | 0 ; w = q | 0 ; y = q + 8 | 0 ; u = m | 0 ; F = m + 8 | 0 ; H = r + 24 | 0 ; I = g | 0 ; J = g + 8 | 0 ; K = r + 8 | 0 ; L = j | 0 ; M = j + 8 | 0 ; N = r + 16 | 0 ; O = r + 32 | 0 ; P = r + 40 | 0 ; Q = r + 44 | 0 ; R = l | 0 ; S = l + 8 | 0 ; T = r + 48 | 0 ; U = k | 0 ; V = k + 8 | 0 ; W = r + 4 | 0 ; X = r + 40 | 0 ; Y = o | 0 ; Z = o + 8 | 0 ; _ = b + 4 | 0 ; $ = d ^ 1 ; aa = b | 0 ; ab = b + 40 | 0 ; ac = b + 44 | 0 ; ad = b + 8 | 0 ; ae = b + 32 | 0 ; G = 0.0 ; af = 0 ; ag = 0 ; ah = 0 ; ai = 0 ; aj = 0 ; ak = 0 ; al = 0 ; am = p ; an = D ; L2195 : while ( 1 ) { ao = c [ 1054 ] | 0 ; ap = ( a [ ao + ( am * 40 & - 1 ) | 0 ] & 1 ) == 0 ; aq = c [ ao + ( am * 40 & - 1 ) + 36 >> 2 ] | 0 ; ar = ao + ( am * 40 & - 1 ) + 32 | 0 ; L2197 : do { if ( ap ) { as = c [ ar >> 2 ] | 0 ; E = 1587 } else { at = c [ 10036 ] | 0 ; au = 0 ; while ( 1 ) { if ( ( au | 0 ) >= ( aq | 0 ) ) { E = 1578 ; break } if ( ( a [ at + ( ( c [ ar >> 2 ] | 0 ) + au | 0 ) | 0 ] | 0 ) == ( a [ au + 103664 | 0 ] | 0 ) ) { au = au + 1 | 0 } else { break } } if ( ( E | 0 ) == 1578 ) { E = 0 ; if ( ( au | 0 ) == 1 ) { av = al ; aw = aj ; ax = ai ; ay = ah ; az = ag ; aA = af ; aB = ak ; aC = am ; break L2193 } } at = c [ ar >> 2 ] | 0 ; if ( ! ( ( aq | 0 ) > 0 & ( ap ^ 1 ) ) ) { as = at ; E = 1587 ; break } aD = c [ 10036 ] | 0 ; aE = 0 ; aF = 0 ; aG = at ; while ( 1 ) { if ( ( a [ aE + 139232 | 0 ] | 0 ) == ( a [ aD + ( aE + aG | 0 ) | 0 ] | 0 ) ) { aH = aG ; aI = aF } else { if ( ( aE | 0 ) != 5 ) { as = at ; E = 1587 ; break L2197 } aH = aG - 1 | 0 ; aI = 1 } aJ = aE + 1 | 0 ; if ( ( aJ | 0 ) < ( aI + aq | 0 ) ) { aE = aJ ; aF = aI ; aG = aH } else { break } } if ( ( aI | 0 ) != 0 ) { E = 1592 ; break } if ( ( aE | 0 ) == 4 | ( aE | 0 ) == 8 ) { E = 1592 } else { as = at ; E = 1587 } } } while ( 0 ) ; L2215 : do { if ( ( E | 0 ) == 1587 ) { E = 0 ; if ( ( an | 0 ) <= ( am | 0 ) | ap ) { aK = al ; aL = ag ; aM = af ; break } ar = c [ 10036 ] | 0 ; z = 0 ; while ( 1 ) { if ( ( z | 0 ) >= ( aq | 0 ) ) { break } if ( ( a [ ar + ( as + z | 0 ) | 0 ] | 0 ) == ( a [ z + 225056 | 0 ] | 0 ) ) { z = z + 1 | 0 } else { aK = al ; aL = ag ; aM = af ; break L2215 } } if ( ( z | 0 ) == 2 ) { E = 1592 } else { aK = al ; aL = ag ; aM = af } } } while ( 0 ) ; L2222 : do { if ( ( E | 0 ) == 1592 ) { E = 0 ; aq = af + 1 | 0 ; if ( ( af | 0 ) != 0 ) { av = al ; aw = aj ; ax = ai ; ay = ah ; az = ag ; aA = aq ; aB = ak ; aC = am ; break L2193 } ap = am + 1 | 0 ; c [ 13898 ] = ap ; ar = c [ ao + ( ap * 40 & - 1 ) + 36 >> 2 ] | 0 ; at = c [ ao + ( ap * 40 & - 1 ) + 32 >> 2 ] | 0 ; aE = ( a [ ao + ( ap * 40 & - 1 ) | 0 ] & 1 ) == 0 ; L2225 : do { if ( ( ar | 0 ) > 0 & ( aE ^ 1 ) ) { aG = c [ 10036 ] | 0 ; aF = 0 ; aD = 0 ; au = at ; while ( 1 ) { if ( ( a [ aF + 123456 | 0 ] | 0 ) == ( a [ aG + ( aF + au | 0 ) | 0 ] | 0 ) ) { aN = au ; aO = aD } else { if ( ( aF | 0 ) != 3 ) { break } aN = au - 1 | 0 ; aO = 1 } aJ = aF + 1 | 0 ; if ( ( aJ | 0 ) < ( aO + ar | 0 ) ) { aF = aJ ; aD = aO ; au = aN } else { E = 1599 ; break } } do { if ( ( E | 0 ) == 1599 ) { E = 0 ; if ( ( aO | 0 ) == 0 ) { if ( ! ( ( aF | 0 ) == 2 | ( aF | 0 ) == 8 ) ) { break } } au = ag + 1 | 0 ; if ( ( ag | 0 ) != 0 ) { av = al ; aw = aj ; ax = ai ; ay = ah ; az = au ; aA = aq ; aB = ak ; aC = ap ; break L2193 } c [ 13898 ] = am ; hI ( X , 3 ) ; a [ O ] = 1 ; aK = al ; aL = au ; aM = aq ; break L2222 } } while ( 0 ) ; if ( ! ( ( ar | 0 ) > 0 & ( aE ^ 1 ) ) ) { break } aF = c [ 10036 ] | 0 ; au = 0 ; aD = 0 ;
function jx ( b , d ) { b = b | 0 ; d = d | 0 ; var e = 0 , f = 0 , g = 0 , j = 0 , k = 0 , l = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 , F = 0 , G = 0 , H = 0 , I = 0 , J = 0 , K = 0 , L = 0 , M = 0 , N = 0 , O = 0 , Q = 0 , R = 0 , S = 0 , T = 0 , U = 0 , V = 0 , W = 0 , X = 0 , Y = 0 , Z = 0 , _ = 0 , $ = 0 , aa = 0 , ab = 0 , ac = 0 , ad = 0 , ae = 0 , af = 0 , ag = 0 , ah = 0 , ai = 0 , aj = 0 , ak = 0 , al = 0 , am = 0 , an = 0 , ao = 0 , ap = 0 , aq = 0.0 , ar = 0 , as = 0 , at = 0 , au = 0 , av = 0 , aw = 0 , ax = 0 , ay = 0 , az = 0 , aA = 0.0 , aB = 0 , aC = 0 , aD = 0 , aE = 0 , aF = 0 , aG = 0 , aH = 0 , aJ = 0 , aK = 0 , aL = 0.0 , aM = 0 , aN = 0 , aO = 0 , aP = 0 , aQ = 0 , aR = 0 , aS = 0 , aT = 0 , aU = 0 , aV = 0 , aW = 0 , aX = 0 , aY = 0.0 , aZ = 0 , a _ = 0 , a$ = 0 , a0 = 0 , a1 = 0 , a2 = 0 , a3 = 0 , a4 = 0 , a5 = 0 , a6 = 0.0 , a7 = 0.0 , a8 = 0 , a9 = 0 , ba = 0 , bb = 0 , bc = 0 , bd = 0 , be = 0 , bf = 0 , bg = 0 , bh = 0 , bi = 0 , bj = 0 , bk = 0 , bl = 0 , bm = 0 , bn = 0 , bo = 0 , bp = 0 , bq = 0 , br = 0 , bs = 0 , bt = 0.0 , bu = 0 , bv = 0 , bw = 0.0 , bx = 0 , by = 0 , bz = 0 ; e = i ; i = i + 96 | 0 ; f = e | 0 ; g = e + 24 | 0 ; j = e + 48 | 0 ; k = e + 72 | 0 ; l = c [ 13898 ] | 0 ; c [ 13898 ] = l + 1 ; do { if ( ( b | 0 ) < - 1 ) { c [ 13898 ] = l ; if ( ( d | 0 ) == 1 ) { n = b ; o = 49264 ; p = 0 ; q = 0 ; r = 49160 ; s = 0 ; t = 0 ; u = l ; break } uf ( l , 191504 , ( v = i , i = i + 1 | 0 , i = i + 7 >> 3 << 3 , c [ v >> 2 ] = 0 , v ) | 0 ) } else { w = c [ 10818 ] | 0 ; L9036 : do { if ( ( w | 0 ) == 0 ) { x = 0 ; y = 0 ; z = 6591 } else { A = ( b | 0 ) > 0 ; B = 0 ; C = w ; while ( 1 ) { if ( A ) { D = c [ C + 4 >> 2 ] | 0 ; if ( ( D | 0 ) >= ( b | 0 ) ) { break } } E = c [ C >> 2 ] | 0 ; if ( ( E | 0 ) == 0 ) { x = C ; y = 0 ; z = 6591 ; break L9036 } else { B = C ; C = E } } if ( ( C | 0 ) == 0 ) { F = b ; G = B ; H = 0 ; z = 6594 ; break } if ( ( D | 0 ) != ( b | 0 ) ) { x = B ; y = C ; z = 6591 ; break } A = c [ C + 12 >> 2 ] | 0 ; if ( ( A | 0 ) == ( d | 0 ) ) { I = b ; J = 0 ; K = C ; break } E = C | 0 ; L = c [ E >> 2 ] | 0 ; if ( ( A | 0 ) == 4 ) { uu ( c [ ( C + 104 | 0 ) + 4 >> 2 ] | 0 ) } if ( ( d | 0 ) == 4 ) { uD ( C | 0 , 33240 , 272 ) } else if ( ( d | 0 ) == 1 ) { uD ( C | 0 , 1144 , 272 ) ; c [ C + 52 >> 2 ] = - 7 ; c [ C + 16 >> 2 ] = 3 } else if ( ( d | 0 ) == 3 ) { uD ( C | 0 , 1416 , 272 ) } else if ( ( d | 0 ) == 2 ) { uD ( C | 0 , 1688 , 272 ) } else { uf ( - 1 , 177064 , ( v = i , i = i + 1 | 0 , i = i + 7 >> 3 << 3 , c [ v >> 2 ] = 0 , v ) | 0 ) } c [ C + 4 >> 2 ] = b ; c [ C + 12 >> 2 ] = d ; c [ E >> 2 ] = L ; I = b ; J = C ; K = C } } while ( 0 ) ; do { if ( ( z | 0 ) == 6591 ) { if ( ( b | 0 ) != - 1 ) { F = b ; G = x ; H = y ; z = 6594 ; break } if ( ( x | 0 ) == 0 ) { F = 1 ; G = 0 ; H = y ; z = 6594 ; break } F = ( c [ x + 4 >> 2 ] | 0 ) + 1 | 0 ; G = x ; H = y ; z = 6594 } } while ( 0 ) ; if ( ( z | 0 ) == 6594 ) { w = ut ( 272 ) | 0 ; do { if ( ( w | 0 ) == 0 ) { gk ( ) ; L = ut ( 272 ) | 0 ; if ( ( L | 0 ) != 0 ) { M = L ; break } uf ( - 1 , 225296 , ( v = i , i = i + 8 | 0 , c [ v >> 2 ] = 177576 , v ) | 0 ) } else { M = w } } while ( 0 ) ; w = M ; if ( ( d | 0 ) == 1 ) { uD ( M | 0 , 1144 , 272 ) ; c [ M + 52 >> 2 ] = - 7 ; c [ M + 16 >> 2 ] = 3 } else if ( ( d | 0 ) == 3 ) { uD ( M | 0 , 1416 , 272 ) } else if ( ( d | 0 ) == 2 ) { uD ( M | 0 , 1688 , 272 ) } else if ( ( d | 0 ) == 4 ) { uD ( M | 0 , 33240 , 272 ) } else { uf ( - 1 , 177064 , ( v = i , i = i + 1 | 0 , i = i + 7 >> 3 << 3 , c [ v >> 2 ] = 0 , v ) | 0 ) } c [ M + 4 >> 2 ] = F ; c [ M + 12 >> 2 ] = d ; if ( ( G | 0 ) == 0 ) { c [ 10818 ] = w } else { c [ G >> 2 ] = w } c [ M >> 2 ] = H ; I = F ; J = w ; K = w } w = K + 104 | 0 ; n = I ; o = w | 0 ; p = w ; q = J ; r = K ; s = w ; t = w ; u = c [ 13898 ] | 0 } } while ( 0 ) ; K = c [ 8272 ] | 0 ; if ( ( u | 0 ) >= ( K | 0 ) ) { i = e ; return } J = o + 88 | 0 ; I = o + 128 | 0 ; F = J | 0 ; H = I | 0 ; M = o + 92 | 0 ; G = o + 132 | 0 ; y = o + 104 | 0 ; x = o + 144 | 0 ; b = o + 112 | 0 ; D = o + 152 | 0 ; l = o | 0 ; w = o + 48 | 0 ; L = o + 8 | 0 ; o = r + 8 | 0 ; E = k | 0 ; A = k + 8 | 0 ; N = r + 80 | 0 ; O = r + 52 | 0 ; Q = r + 88 | 0 ; R = Q | 0 ; S = r + 12 | 0 ; T = ( q | 0 ) == 0 ; q = r + 16 | 0 ; U = q | 0 ; V = r + 20 | 0 ; W = r + 24 | 0 ; X = r + 32 | 0 ; Y = ( n | 0 ) < 0 ; n = r + 16 | 0 ; Z = j | 0 ; _ = j + 8 | 0 ; $ = t + 88 | 0 ; aa = g | 0 ; ab = g + 8 | 0 ; ac = t + 96 | 0 ; ad = t + 48 | 0 ; ae = t + 8 | 0 ; t = p + 48 | 0 ; af = p | 0 ; ag = f | 0 ; ah = f + 8 | 0 ; ai = p + 88 | 0 ; aj = p + 8 | 0 ; p = s + 4 | 0 ; ak = s | 0 ; s = 0 ; al = 0 ; am = 0 ; an = 0 ; ao = 0 ; ap = 0 ; aq = 1.0 ; ar = u ; u = K ; L9085 : while ( 1 ) { K = c [ 1054 ] | 0 ; as = ( a [ K + ( ar * 40 & - 1 ) | 0 ] & 1 ) == 0 ; L9087 : do { if ( ! as ) { at = c [ K + ( ar * 40 & - 1 ) + 36 >> 2 ] | 0 ; au = K + ( ar * 40 & - 1 ) + 32 | 0 ; av = c [ 10036 ] | 0 ; aw = 0 ; while ( 1 ) { if ( ( aw | 0 ) >= ( at | 0 ) ) { break } if ( ( a [ av + ( ( c [ au >> 2 ] | 0 ) + aw | 0 ) | 0 ] | 0 ) == ( a [ aw + 103664 | 0 ] | 0 ) ) { aw = aw + 1 | 0 } else { break L9087 } } if ( ( aw | 0 ) == 1 ) { ax = am ; ay = an ; az = ao ; aA = aq ; z = 6939 ; break L9085 } } } while ( 0 ) ; L9094 : do { if ( ( d | 0 ) == 3 ) { au = ( u | 0 ) > ( ar | 0 ) ; L9096 : do { if ( au ) { av = c [ K + ( ar * 40 & - 1 ) + 36 >> 2 ] | 0 ; at = K + ( ar * 40 & - 1 ) + 32 | 0 ; if ( as ) { aB = c [ at >> 2 ] | 0 ; aC = av ; z = 6764 ; break } C = c [ 10036 ] | 0 ; B = 0 ; while ( 1 ) { if ( ( B | 0 ) >= ( av | 0 ) ) { break } if ( ( a [ C + ( ( c [ at >> 2 ] | 0 ) + B | 0 ) | 0 ] | 0 ) == ( a [ B + 95280 | 0 ] | 0 ) ) { B = B + 1 | 0 } else { z = 6754 ; break L9096 } } if ( ( B | 0 ) == 2 ) { z = 6762 } else { z = 6754 } } else { z = 6754 } } while ( 0 ) ; L9105 : do { if ( ( z | 0 ) == 6754 ) { z = 0 ; aw = c [ K + ( ar * 40 & - 1 ) + 36 >> 2 ] | 0 ; at = c [ K + ( ar * 40 & - 1 ) + 32 >> 2 ] | 0 ; L9107 : do { if ( ( aw | 0 ) > 0 & ( as ^ 1 ) ) { C = c [ 10036 ] | 0 ; av = 0 ; aD = 0 ; aE = at ; while ( 1 ) { if ( ( a [ av + 185064 | 0 ] | 0 ) == ( a [ C + ( av + aE | 0 ) | 0 ] | 0 ) ) { aF = aE ; aG = aD } else { if ( ( av | 0 ) != 3 ) { break L9107 } aF = aE - 1 | 0 ; aG = 1 } aH = av + 1 | 0 ; if ( ( aH | 0 ) < ( aG + aw | 0 ) ) { av = aH ; aD = aG ; aE = aF } else { break } } if ( ( aG | 0 ) != 0 ) { z = 6762 ; break L9105 } if ( ( av | 0 ) == 2 | ( av | 0 ) == 6 ) { z = 6762 ; break L9105 } } } while ( 0 ) ; if ( au ) { aB = at ; aC = aw ; z = 6764 } else { aJ = aw ; aK = at } } } while ( 0 ) ; if ( ( z | 0 ) == 6762 ) { z = 0 ; c [ 13898 ] = ar + 1 ; dl ( aj , 0 ) ; aL = aq ; aM = ap ; aN = ao ; aO = an ; aP = am ; aQ = al ; aR = s ; break } L9120 : do { if ( ( z | 0 ) == 6764 ) { z = 0 ; if ( as ) { aS = ap ; aT = an ; aU = ar ; aV = u ; z = 6859 ; break L9094 } au = c [ 10036 ] | 0 ; B = 0 ; while ( 1 ) { if ( ( B | 0 ) >= ( aC | 0 ) ) { break } if ( ( a [ au + ( aB + B | 0 ) | 0 ] | 0 ) == ( a [ B + 130496 | 0 ] | 0 ) ) { B = B + 1 | 0 } else { aJ = aC ; aK = aB ; break L9120 } } if ( ( B |
function ut ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 , F = 0 , G = 0 , H = 0 , I = 0 , J = 0 , K = 0 , L = 0 , M = 0 , N = 0 , O = 0 , P = 0 , Q = 0 , R = 0 , S = 0 , T = 0 , U = 0 , V = 0 , W = 0 , X = 0 , Y = 0 , Z = 0 , _ = 0 , $ = 0 , aa = 0 , ab = 0 , ac = 0 , ad = 0 , ae = 0 , af = 0 , ag = 0 , ah = 0 , ai = 0 , aj = 0 , ak = 0 , al = 0 , am = 0 , an = 0 , ao = 0 , ap = 0 , aq = 0 , ar = 0 , as = 0 , at = 0 , au = 0 , av = 0 , aw = 0 , ax = 0 , ay = 0 , az = 0 , aA = 0 , aB = 0 , aC = 0 , aD = 0 , aE = 0 , aF = 0 , aG = 0 ; do { if ( a >>> 0 < 245 ) { if ( a >>> 0 < 11 ) { b = 16 } else { b = a + 11 & - 8 } d = b >>> 3 ; e = c [ 56330 ] | 0 ; f = e >>> ( d >>> 0 ) ; if ( ( f & 3 | 0 ) != 0 ) { g = ( f & 1 ^ 1 ) + d | 0 ; h = g << 1 ; i = 225360 + ( h << 2 ) | 0 ; j = 225360 + ( h + 2 << 2 ) | 0 ; h = c [ j >> 2 ] | 0 ; k = h + 8 | 0 ; l = c [ k >> 2 ] | 0 ; do { if ( ( i | 0 ) == ( l | 0 ) ) { c [ 56330 ] = e & ( 1 << g ^ - 1 ) } else { if ( l >>> 0 < ( c [ 56334 ] | 0 ) >>> 0 ) { ce ( ) ; return 0 ; return 0 } m = l + 12 | 0 ; if ( ( c [ m >> 2 ] | 0 ) == ( h | 0 ) ) { c [ m >> 2 ] = i ; c [ j >> 2 ] = l ; break } else { ce ( ) ; return 0 ; return 0 } } } while ( 0 ) ; l = g << 3 ; c [ h + 4 >> 2 ] = l | 3 ; j = h + ( l | 4 ) | 0 ; c [ j >> 2 ] = c [ j >> 2 ] | 1 ; n = k ; return n | 0 } if ( b >>> 0 <= ( c [ 56332 ] | 0 ) >>> 0 ) { o = b ; break } if ( ( f | 0 ) != 0 ) { j = 2 << d ; l = f << d & ( j | - j ) ; j = ( l & - l ) - 1 | 0 ; l = j >>> 12 & 16 ; i = j >>> ( l >>> 0 ) ; j = i >>> 5 & 8 ; m = i >>> ( j >>> 0 ) ; i = m >>> 2 & 4 ; p = m >>> ( i >>> 0 ) ; m = p >>> 1 & 2 ; q = p >>> ( m >>> 0 ) ; p = q >>> 1 & 1 ; r = ( j | l | i | m | p ) + ( q >>> ( p >>> 0 ) ) | 0 ; p = r << 1 ; q = 225360 + ( p << 2 ) | 0 ; m = 225360 + ( p + 2 << 2 ) | 0 ; p = c [ m >> 2 ] | 0 ; i = p + 8 | 0 ; l = c [ i >> 2 ] | 0 ; do { if ( ( q | 0 ) == ( l | 0 ) ) { c [ 56330 ] = e & ( 1 << r ^ - 1 ) } else { if ( l >>> 0 < ( c [ 56334 ] | 0 ) >>> 0 ) { ce ( ) ; return 0 ; return 0 } j = l + 12 | 0 ; if ( ( c [ j >> 2 ] | 0 ) == ( p | 0 ) ) { c [ j >> 2 ] = q ; c [ m >> 2 ] = l ; break } else { ce ( ) ; return 0 ; return 0 } } } while ( 0 ) ; l = r << 3 ; m = l - b | 0 ; c [ p + 4 >> 2 ] = b | 3 ; q = p ; e = q + b | 0 ; c [ q + ( b | 4 ) >> 2 ] = m | 1 ; c [ q + l >> 2 ] = m ; l = c [ 56332 ] | 0 ; if ( ( l | 0 ) != 0 ) { q = c [ 56335 ] | 0 ; d = l >>> 3 ; l = d << 1 ; f = 225360 + ( l << 2 ) | 0 ; k = c [ 56330 ] | 0 ; h = 1 << d ; do { if ( ( k & h | 0 ) == 0 ) { c [ 56330 ] = k | h ; s = f ; t = 225360 + ( l + 2 << 2 ) | 0 } else { d = 225360 + ( l + 2 << 2 ) | 0 ; g = c [ d >> 2 ] | 0 ; if ( g >>> 0 >= ( c [ 56334 ] | 0 ) >>> 0 ) { s = g ; t = d ; break } ce ( ) ; return 0 ; return 0 } } while ( 0 ) ; c [ t >> 2 ] = q ; c [ s + 12 >> 2 ] = q ; c [ q + 8 >> 2 ] = s ; c [ q + 12 >> 2 ] = f } c [ 56332 ] = m ; c [ 56335 ] = e ; n = i ; return n | 0 } l = c [ 56331 ] | 0 ; if ( ( l | 0 ) == 0 ) { o = b ; break } h = ( l & - l ) - 1 | 0 ; l = h >>> 12 & 16 ; k = h >>> ( l >>> 0 ) ; h = k >>> 5 & 8 ; p = k >>> ( h >>> 0 ) ; k = p >>> 2 & 4 ; r = p >>> ( k >>> 0 ) ; p = r >>> 1 & 2 ; d = r >>> ( p >>> 0 ) ; r = d >>> 1 & 1 ; g = c [ 225624 + ( ( h | l | k | p | r ) + ( d >>> ( r >>> 0 ) ) << 2 ) >> 2 ] | 0 ; r = g ; d = g ; p = ( c [ g + 4 >> 2 ] & - 8 ) - b | 0 ; while ( 1 ) { g = c [ r + 16 >> 2 ] | 0 ; if ( ( g | 0 ) == 0 ) { k = c [ r + 20 >> 2 ] | 0 ; if ( ( k | 0 ) == 0 ) { break } else { u = k } } else { u = g } g = ( c [ u + 4 >> 2 ] & - 8 ) - b | 0 ; k = g >>> 0 < p >>> 0 ; r = u ; d = k ? u : d ; p = k ? g : p } r = d ; i = c [ 56334 ] | 0 ; if ( r >>> 0 < i >>> 0 ) { ce ( ) ; return 0 ; return 0 } e = r + b | 0 ; m = e ; if ( r >>> 0 >= e >>> 0 ) { ce ( ) ; return 0 ; return 0 } e = c [ d + 24 >> 2 ] | 0 ; f = c [ d + 12 >> 2 ] | 0 ; do { if ( ( f | 0 ) == ( d | 0 ) ) { q = d + 20 | 0 ; g = c [ q >> 2 ] | 0 ; if ( ( g | 0 ) == 0 ) { k = d + 16 | 0 ; l = c [ k >> 2 ] | 0 ; if ( ( l | 0 ) == 0 ) { v = 0 ; break } else { w = l ; x = k } } else { w = g ; x = q } while ( 1 ) { q = w + 20 | 0 ; g = c [ q >> 2 ] | 0 ; if ( ( g | 0 ) != 0 ) { w = g ; x = q ; continue } q = w + 16 | 0 ; g = c [ q >> 2 ] | 0 ; if ( ( g | 0 ) == 0 ) { break } else { w = g ; x = q } } if ( x >>> 0 < i >>> 0 ) { ce ( ) ; return 0 ; return 0 } else { c [ x >> 2 ] = 0 ; v = w ; break } } else { q = c [ d + 8 >> 2 ] | 0 ; if ( q >>> 0 < i >>> 0 ) { ce ( ) ; return 0 ; return 0 } g = q + 12 | 0 ; if ( ( c [ g >> 2 ] | 0 ) != ( d | 0 ) ) { ce ( ) ; return 0 ; return 0 } k = f + 8 | 0 ; if ( ( c [ k >> 2 ] | 0 ) == ( d | 0 ) ) { c [ g >> 2 ] = f ; c [ k >> 2 ] = q ; v = f ; break } else { ce ( ) ; return 0 ; return 0 } } } while ( 0 ) ; L1026 : do { if ( ( e | 0 ) != 0 ) { f = d + 28 | 0 ; i = 225624 + ( c [ f >> 2 ] << 2 ) | 0 ; do { if ( ( d | 0 ) == ( c [ i >> 2 ] | 0 ) ) { c [ i >> 2 ] = v ; if ( ( v | 0 ) != 0 ) { break } c [ 56331 ] = c [ 56331 ] & ( 1 << c [ f >> 2 ] ^ - 1 ) ; break L1026 } else { if ( e >>> 0 < ( c [ 56334 ] | 0 ) >>> 0 ) { ce ( ) ; return 0 ; return 0 } q = e + 16 | 0 ; if ( ( c [ q >> 2 ] | 0 ) == ( d | 0 ) ) { c [ q >> 2 ] = v } else { c [ e + 20 >> 2 ] = v } if ( ( v | 0 ) == 0 ) { break L1026 } } } while ( 0 ) ; if ( v >>> 0 < ( c [ 56334 ] | 0 ) >>> 0 ) { ce ( ) ; return 0 ; return 0 } c [ v + 24 >> 2 ] = e ; f = c [ d + 16 >> 2 ] | 0 ; do { if ( ( f | 0 ) != 0 ) { if ( f >>> 0 < ( c [ 56334 ] | 0 ) >>> 0 ) { ce ( ) ; return 0 ; return 0 } else { c [ v + 16 >> 2 ] = f ; c [ f + 24 >> 2 ] = v ; break } } } while ( 0 ) ; f = c [ d + 20 >> 2 ] | 0 ; if ( ( f | 0 ) == 0 ) { break } if ( f >>> 0 < ( c [ 56334 ] | 0 ) >>> 0 ) { ce ( ) ; return 0 ; return 0 } else { c [ v + 20 >> 2 ] = f ; c [ f + 24 >> 2 ] = v ; break } } } while ( 0 ) ; if ( p >>> 0 < 16 ) { e = p + b | 0 ; c [ d + 4 >> 2 ] = e | 3 ; f = r + ( e + 4 | 0 ) | 0 ; c [ f >> 2 ] = c [ f >> 2 ] | 1 } else { c [ d + 4 >> 2 ] = b | 3 ; c [ r + ( b | 4 ) >> 2 ] = p | 1 ; c [ r + ( p + b | 0 ) >> 2 ] = p ; f = c [ 56332 ] | 0 ; if ( ( f | 0 ) != 0 ) { e = c [ 56335 ] | 0 ; i = f >>> 3 ; f = i << 1 ; q = 225360 + ( f << 2 ) | 0 ; k = c [ 56330 ] | 0 ; g = 1 << i ; do { if ( ( k & g | 0 ) == 0 ) { c [ 56330 ] = k | g ; y = q ; z = 225360 + ( f + 2 << 2 ) | 0 } else { i = 225360 + ( f + 2 << 2 ) | 0 ; l = c [ i >> 2 ] | 0 ; if ( l >>> 0 >= ( c [ 56334 ] | 0 ) >>> 0 ) { y = l ; z = i ; break } ce ( ) ; return 0 ; return 0 } } while ( 0 ) ; c [ z >> 2 ] = e ; c [ y + 12 >> 2 ] = e ; c [ e + 8 >> 2 ] = y ; c [ e + 12 >> 2 ] = q } c [ 56332 ] = p ; c [ 56335 ] = m } f = d + 8 | 0 ; if ( ( f | 0 ) == 0 ) { o = b ; break } else { n = f } return n | 0 } else { if ( a >>> 0 > 4294967231 ) { o = - 1 ; break } f = a + 11 | 0 ; g = f & - 8 ; k = c [ 56331 ] | 0 ; if ( ( k | 0 ) == 0 ) { o = g ; break } r = - g | 0 ; i = f >>> 8 ; do { if ( ( i | 0 ) == 0 ) { A = 0 } else { if ( g >>> 0 > 16777215 ) { A = 31 ; break } f = ( i + 1048320 |
// EMSCRIPTEN_END_FUNCS
var cI = [ vg , vg , sZ , vg , rC , vg , pN , vg , rM , vg , qN , vg , s1 , vg , l2 , vg , rd , vg , sn , vg , rc , vg , sC , vg , qP , vg , sF , vg , qk , vg , sW , vg , n6 , vg , pV , vg , sd , vg , oq , vg , r0 , vg , nK , vg , pw , vg , on , vg , lD , vg , nd , vg , mV , vg , pK , vg , vg , vg , vg , vg , vg , vg , vg , vg ] ; var cJ = [ vh , vh , nD , vh , mS , vh , qq , vh , n3 , vh , pW , vh , lH , vh , vh , vh ] ; var cK = [ vi , vi , qG , vi , s _ , vi , pM , vi , n7 , vi , lC , vi , sE , vi , ql , vi , o8 , vi , sG , vi , n5 , vi , qX , vi , of , vi , nf , vi , sY , vi , mR , vi , mW , vi , lA , vi , op , vi , pP , vi , nb , vi , qL , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi , vi ] ; var cL = [ vj , vj , hy , vj , uN , vj , dI , vj ] ; var cM = [ vk , vk , g5 , vk , iP , vk , kT , vk , th , vk , hg , vk , ku , vk , tm , vk , tn , vk , p4 , vk , qf , vk , rk , vk , m _ , vk , tb , vk , nu , vk , e0 , vk , rj , vk , rZ , vk , kP , vk , mi , vk , mz , vk , hd , vk , kh , vk , sT , vk , rJ , vk , k7 , vk , ff , vk , n8 , vk , mX , vk , tc , vk , kE , vk , rs , vk , ks , vk , kF , vk , gX , vk , kG , vk , g1 , vk , gY , vk , kM , vk , kn , vk , ou , vk , ke , vk , g6 , vk , pZ , vk , ta , vk , lP , vk , iN , vk , tk , vk , te , vk , uu , vk , gL , vk , lF , vk , eW , vk , kS , vk , tr , vk , kx , vk , kU , vk , hj , vk , eI , vk , kI , vk , o3 , vk , kR , vk , gZ , vk , kB , vk , gK , vk , m$ , vk , tp , vk , kC , vk , e5 , vk , qQ , vk , mN , vk , sa , vk , lB , vk , nH , vk , r2 , vk , dL , vk , kv , vk , ki , vk , oN , vk , l9 , vk , q9 , vk , kY , vk , kj , vk , g0 , vk , ph , vk , gM , vk , gW , vk , lU , vk , eJ , vk , s$ , vk , qD , vk , tl , vk , kz , vk , kg , vk , gJ , vk , k5 , vk , g$ , vk , qi , vk , kQ , vk , g9 , vk , e7 , vk , kf , vk , sz , vk , g _ , vk , g7 , vk , gN , vk , sH , vk , eZ , vk , g4 , vk , kl , vk , nY , vk , gP , vk , kZ , vk , k _ , vk , qs , vk , m7 , vk , gS , vk , e _ , vk , qV , vk , hb , vk , eG , vk , pI , vk , kq , vk , g2 , vk , he , vk , ky , vk , gV , vk , k3 , vk , pY , vk , eK , vk , qo , vk , e$ , vk , kX , vk , gG , vk , kk , vk , k1 , vk , jI , vk , ps , vk , kD , vk , hf , vk , to , vk , s8 , vk , gR , vk , pS , vk , gE , vk , rh , vk , gI , vk , ti , vk , g8 , vk , nh , vk , k0 , vk , k$ , vk , td , vk , k6 , vk , kJ , vk , tj , vk , gU , vk , km , vk , hc , vk , gH , vk , gF , vk , kH , vk , kO , vk , nE , vk , gO , vk , eF , vk , kL , vk , gQ , vk , gT , vk , hi , vk , oU , vk , k8 , vk , k2 , vk , kK , vk , hh , vk , s9 , vk , g3 , vk , kt , vk , uO , vk , qt , vk , eH , vk , mo , vk , os , vk , kN , vk , kw , vk , ha , vk , gD , vk , tq , vk , sl , vk , ko , vk , k4 , vk , kp , vk , ol , vk , kA , vk , ow , vk , tf , vk , pX , vk , lT , vk , tg , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk , vk ] ; var cN = [ vl , vl , sS , vl , oT , vl , rH , vl , pT , vl , ok , vl , pr , vl , qp , vl , oB , vl , nG , vl , pG , vl , oA , vl , px , vl , oS , vl , nW , vl , p2 , vl , qM , vl , l _ , vl , r3 , vl , oL , vl , m5 , vl , my , vl , rr , vl , oM , vl , nX , vl , l7 , vl , pf , vl , nn , vl , p3 , vl , sy , vl , mt , vl , qe , vl , n9 , vl , rY , vl , pg , vl , sR , vl , rI , vl , qd , vl , qR , vl , tM , vl , tU , vl , lZ , vl , py , vl , mh , vl , uP , vl , rX , vl , o2 , vl , qB , vl , l8 , vl , mY , vl , mL , vl , mg , vl , nO , vl , m6 , vl , ns , vl , r9 , vl , sx , vl , s0 , vl , rq , vl , pH , vl , sI , vl , oj , vl , nP , vl , lO , vl , ms , vl , mM , vl , q3 , vl , q2 , vl , mx , vl , rT , vl , sk , vl , qC , vl , nm , vl , r8 , vl , ot , vl , no , vl , o1 , vl , qW , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl , vl ] ; var cO = [ vm , vm , o5 , vm , e6 , vm , qZ , vm , nF , vm , pQ , vm , lv , vm , h2 , vm , pm , vm , uQ , vm , mP , vm , oW , vm , im , vm , pB , vm , oP , vm , q7 , vm , ia , vm , mI , vm , nZ , vm , sX , vm , h4 , vm , qm , vm , id , vm , ij , vm , r1 , vm , m8 , vm , q _ , vm , n1 , vm , ut , vm , uR , vm , mU , vm , l0 , vm , rx , vm , h8 , vm , sD , vm , sj , vm , sp , vm , hP , vm , pi , vm , ie , vm , pu , vm , oe , vm , o6 , vm , h5 , vm , ry , vm , pL , vm , ic , vm , od , vm , m9 , vm , or , vm , h9 , vm , uS , vm , h6 , vm , nc , vm , uT , vm , qa , vm , sL , vm , q6 , vm , rS , vm , oD , vm , h3 , vm , hX , vm , lw , vm , tC , vm , rv , vm , rQ , vm , p9 , vm , ik , vm , mQ , vm , nq , vm , sM , vm , o9 , vm , qj , vm , nr , vm , qz , vm , ii , vm , mD , vm , pC , vm , h7 , vm , lR , vm , lS , vm , uU , vm , mb , vm , qH , vm , pj , vm , rR , vm , h1 , vm , il , vm , qy , vm , sr , vm , n4 , vm , h0 , vm , n _ , vm , rP , vm , sK , vm , rw , vm , ng , vm , nC , vm , ig , vm , si , vm , sq , vm , ib , vm , qO , vm , ih , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm , vm ] ; var cP = [ vn , vn , lu , vn ] ; var cQ = [ vo , vo , uY , vo , uZ , vo , vo , vo ] ; var cR = [ vp , vp , tw , vp , pt , vp , uf , vp , lL , vp , sA , vp , rt , vp , r$ , vp , ri , vp , o4 , vp , rA , vp , pl , vp , p5 , vp , qF , vp , na , vp , qE , vp , o7 , vp , sB , vp , rB , vp , nv , vp , l$ , vp , ma , vp , oE , vp , tX , vp , sU , vp , n0 , vp , oO , vp , l1 , vp , rb , vp , ne , vp , ly , vp , mA , vp , nQ , vp , r _ , vp , qg , vp , mT , vp , mp , vp , tR , vp , hw , vp , mu , vp , mj , vp , rL , vp , sc , vp , tB , vp , lQ , vp , ra , vp , sV , vp , oo , vp , q4 , vp , oC , vp , rK , vp , n$ , vp , nJ , vp , sm , vp , oV , vp , nI , vp , om , vp , pJ , vp , pO , vp , mO , vp , pv , vp , qh , vp , tQ , vp , sb , vp ] ; var cS = [ vq , vq , m3 , vq , p7 , vq , mC , vq , mc , vq , dR , vq , pb , vq , rl , vq , p
// EMSCRIPTEN_END_ASM
( { "Math" : Math , "Int8Array" : Int8Array , "Int16Array" : Int16Array , "Int32Array" : Int32Array , "Uint8Array" : Uint8Array , "Uint16Array" : Uint16Array , "Uint32Array" : Uint32Array , "Float32Array" : Float32Array , "Float64Array" : Float64Array } , { "abort" : abort , "assert" : assert , "asmPrintInt" : asmPrintInt , "asmPrintFloat" : asmPrintFloat , "copyTempDouble" : copyTempDouble , "copyTempFloat" : copyTempFloat , "min" : Math _min , "invoke_viiiii" : invoke _viiiii , "invoke_viffiii" : invoke _viffiii , "invoke_vf" : invoke _vf , "invoke_i" : invoke _i , "invoke_vi" : invoke _vi , "invoke_vii" : invoke _vii , "invoke_ii" : invoke _ii , "invoke_iff" : invoke _iff , "invoke_iiii" : invoke _iiii , "invoke_viii" : invoke _viii , "invoke_v" : invoke _v , "invoke_vifiii" : invoke _vifiii , "invoke_iiiii" : invoke _iiiii , "invoke_fii" : invoke _fii , "invoke_iii" : invoke _iii , "_lseek" : _lseek , "__scanString" : _ _scanString , "_fclose" : _fclose , "_uname" : _uname , "_sleep" : _sleep , "__isFloat" : _ _isFloat , "_fflush" : _fflush , "_strtol" : _strtol , "_fputc" : _fputc , "_iconv" : _iconv , "___signgam" : _ _ _signgam , "_fwrite" : _fwrite , "_send" : _send , "_fputs" : _fputs , "_tmpnam" : _tmpnam , "_isspace" : _isspace , "_localtime" : _localtime , "_read" : _read , "_ceil" : _ceil , "_strstr" : _strstr , "_fileno" : _fileno , "_perror" : _perror , "_ctime" : _ctime , "_fsync" : _fsync , "_signal" : _signal , "_opendir" : _opendir , "_fmod" : _fmod , "_strcmp" : _strcmp , "_memchr" : _memchr , "_strncmp" : _strncmp , "_tmpfile" : _tmpfile , "_snprintf" : _snprintf , "_fgetc" : _fgetc , "_pclose" : _pclose , "_readdir" : _readdir , "_cosh" : _cosh , "_atexit" : _atexit , "_fgets" : _fgets , "_close" : _close , "_strchr" : _strchr , "_asin" : _asin , "_llvm_lifetime_start" : _llvm _lifetime _start , "___setErrNo" : _ _ _setErrNo , "_ftell" : _ftell , "_exit" : _exit , "_sprintf" : _sprintf , "_llvm_lifetime_end" : _llvm _lifetime _end , "_asctime" : _asctime , "_strrchr" : _strrchr , "_iconv_open" : _iconv _open , "_modf" : _modf , "_strcspn" : _strcspn , "_getcwd" : _getcwd , "_gmtime" : _gmtime , "_localtime_r" : _localtime _r , "_asctime_r" : _asctime _r , "_recv" : _recv , "_cos" : _cos , "_putchar" : _putchar , "_isalnum" : _isalnum , "_popen" : _popen , "_erfc" : _erfc , "__exit" : _ _exit , "_strftime" : _strftime , "_llvm_va_end" : _llvm _va _end , "_tzset" : _tzset , "_sinh" : _sinh , "_setlocale" : _setlocale , "_isprint" : _isprint , "_toupper" : _toupper , "_printf" : _printf , "_pread" : _pread , "_fopen" : _fopen , "_open" : _open , "_usleep" : _usleep , "_log" : _log , "_puts" : _puts , "_mktime" : _mktime , "_fdopen" : _fdopen , "_qsort" : _qsort , "_system" : _system , "_isalpha" : _isalpha , "_strdup" : _strdup , "_log10" : _log10 , "_closedir" : _closedir , "_isatty" : _isatty , "__formatString" : _ _formatString , "_getenv" : _getenv , "_gettimeofday" : _gettimeofday , "_atoi" : _atoi , "_vfprintf" : _vfprintf , "_chdir" : _chdir , "_llvm_pow_f64" : _llvm _pow _f64 , "_sbrk" : _sbrk , "_localeconv" : _localeconv , "___errno_location" : _ _ _errno _location , "_strerror" : _strerror , "_lgamma" : _lgamma , "_erf" : _erf , "_strspn" : _strspn , "__parseInt" : _ _parseInt , "_ungetc" : _ungetc , "_llvm_trap" : _llvm _trap , "_rename" : _rename , "_vsnprintf" : _vsnprintf , "_sscanf" : _sscanf , "_sysconf" : _sysconf , "_acos" : _acos , "_fread" : _fread , "_abort" : _abort , "_fprintf" : _fprintf , "___fpclassifyf" : _ _ _fpclassifyf , "_tan" : _tan , "___buildEnvironment" : _ _ _buildEnvironment , "_feof" : _feof , "_strncat" : _strncat , "_gmtime_r" : _gmtime _r , "_fabs" : _fabs , "_floor" : _floor , "__reallyNegative" : _ _reallyNegative , "_fseek" : _fseek , "_sqrt" : _sqrt , "_write" : _write , "_rewind" : _rewind , "_sin" : _sin , "_stat" : _stat , "_longjmp" : _longjmp , "_atan" : _atan , "_readdir_r" : _readdir _r , "_strpbrk" : _strpbrk , "_iconv_close" : _iconv _close , "_setbuf" : _setbuf , "_nl_langinfo" : _nl _langinfo , "_pwrite" : _pwrite , "_strerror_r" : _strerror _r , "_atan2" : _atan2 , "_exp" : _exp , "_time" : _time , "_setvbuf" : _setvbuf , "STACKTOP" : STACKTOP , "STACK_MAX" : STACK _MAX , "tempDoublePtr" : tempDoublePtr , "ABORT" : ABORT , "NaN" : NaN , "Infinity" : Infinity , "_stderr" : _stderr , "_stdout" : _stdout , "_stdin" : _stdin } , buffer ) ;
var _memcmp = Module [ "_memcmp" ] = asm [ "_memcmp" ] ;
var _saveSetjmp = Module [ "_saveSetjmp" ] = asm [ "_saveSetjmp" ] ;
var _strcat = Module [ "_strcat" ] = asm [ "_strcat" ] ;
var _free = Module [ "_free" ] = asm [ "_free" ] ;
var _main = Module [ "_main" ] = asm [ "_main" ] ;
var _testSetjmp = Module [ "_testSetjmp" ] = asm [ "_testSetjmp" ] ;
var _strncpy = Module [ "_strncpy" ] = asm [ "_strncpy" ] ;
var _memmove = Module [ "_memmove" ] = asm [ "_memmove" ] ;
var _tolower = Module [ "_tolower" ] = asm [ "_tolower" ] ;
var _memset = Module [ "_memset" ] = asm [ "_memset" ] ;
var _malloc = Module [ "_malloc" ] = asm [ "_malloc" ] ;
var _memcpy = Module [ "_memcpy" ] = asm [ "_memcpy" ] ;
var _strcasecmp = Module [ "_strcasecmp" ] = asm [ "_strcasecmp" ] ;
var _strlen = Module [ "_strlen" ] = asm [ "_strlen" ] ;
var _realloc = Module [ "_realloc" ] = asm [ "_realloc" ] ;
var _strncasecmp = Module [ "_strncasecmp" ] = asm [ "_strncasecmp" ] ;
var _strcpy = Module [ "_strcpy" ] = asm [ "_strcpy" ] ;
var dynCall _viiiii = Module [ "dynCall_viiiii" ] = asm [ "dynCall_viiiii" ] ;
var dynCall _viffiii = Module [ "dynCall_viffiii" ] = asm [ "dynCall_viffiii" ] ;
var dynCall _vf = Module [ "dynCall_vf" ] = asm [ "dynCall_vf" ] ;
var dynCall _i = Module [ "dynCall_i" ] = asm [ "dynCall_i" ] ;
var dynCall _vi = Module [ "dynCall_vi" ] = asm [ "dynCall_vi" ] ;
var dynCall _vii = Module [ "dynCall_vii" ] = asm [ "dynCall_vii" ] ;
var dynCall _ii = Module [ "dynCall_ii" ] = asm [ "dynCall_ii" ] ;
var dynCall _iff = Module [ "dynCall_iff" ] = asm [ "dynCall_iff" ] ;
var dynCall _iiii = Module [ "dynCall_iiii" ] = asm [ "dynCall_iiii" ] ;
var dynCall _viii = Module [ "dynCall_viii" ] = asm [ "dynCall_viii" ] ;
var dynCall _v = Module [ "dynCall_v" ] = asm [ "dynCall_v" ] ;
var dynCall _vifiii = Module [ "dynCall_vifiii" ] = asm [ "dynCall_vifiii" ] ;
var dynCall _iiiii = Module [ "dynCall_iiiii" ] = asm [ "dynCall_iiiii" ] ;
var dynCall _fii = Module [ "dynCall_fii" ] = asm [ "dynCall_fii" ] ;
var dynCall _iii = Module [ "dynCall_iii" ] = asm [ "dynCall_iii" ] ;
Runtime . stackAlloc = function ( size ) { return asm [ 'stackAlloc' ] ( size ) } ;
Runtime . stackSave = function ( ) { return asm [ 'stackSave' ] ( ) } ;
Runtime . stackRestore = function ( top ) { asm [ 'stackRestore' ] ( top ) } ;
// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included
var i64Math = null ;
// === Auto-generated postamble setup entry stuff ===
Module [ 'callMain' ] = function callMain ( args ) {
assert ( runDependencies == 0 , 'cannot call main when async dependencies remain! (listen on __ATMAIN__)' ) ;
assert ( ! Module [ 'preRun' ] || Module [ 'preRun' ] . length == 0 , 'cannot call main when preRun functions remain to be called' ) ;
args = args || [ ] ;
ensureInitRuntime ( ) ;
var argc = args . length + 1 ;
function pad ( ) {
for ( var i = 0 ; i < 4 - 1 ; i ++ ) {
argv . push ( 0 ) ;
}
}
var argv = [ allocate ( intArrayFromString ( "/bin/this.program" ) , 'i8' , ALLOC _NORMAL ) ] ;
pad ( ) ;
for ( var i = 0 ; i < argc - 1 ; i = i + 1 ) {
argv . push ( allocate ( intArrayFromString ( args [ i ] ) , 'i8' , ALLOC _NORMAL ) ) ;
pad ( ) ;
}
argv . push ( 0 ) ;
argv = allocate ( argv , 'i32' , ALLOC _NORMAL ) ;
var ret ;
var initialStackTop = STACKTOP ;
try {
ret = Module [ '_main' ] ( argc , argv , 0 ) ;
}
catch ( e ) {
if ( e . name == 'ExitStatus' ) {
return e . status ;
} else if ( e == 'SimulateInfiniteLoop' ) {
Module [ 'noExitRuntime' ] = true ;
} else {
throw e ;
}
} finally {
STACKTOP = initialStackTop ;
}
return ret ;
}
function run ( args ) {
args = args || Module [ 'arguments' ] ;
if ( runDependencies > 0 ) {
Module . printErr ( 'run() called, but dependencies remain, so not running' ) ;
return 0 ;
}
if ( Module [ 'preRun' ] ) {
if ( typeof Module [ 'preRun' ] == 'function' ) Module [ 'preRun' ] = [ Module [ 'preRun' ] ] ;
var toRun = Module [ 'preRun' ] ;
Module [ 'preRun' ] = [ ] ;
for ( var i = toRun . length - 1 ; i >= 0 ; i -- ) {
toRun [ i ] ( ) ;
}
if ( runDependencies > 0 ) {
// a preRun added a dependency, run will be called later
return 0 ;
}
}
function doRun ( ) {
ensureInitRuntime ( ) ;
preMain ( ) ;
var ret = 0 ;
calledRun = true ;
if ( Module [ '_main' ] && shouldRunNow ) {
ret = Module [ 'callMain' ] ( args ) ;
if ( ! Module [ 'noExitRuntime' ] ) {
exitRuntime ( ) ;
}
}
if ( Module [ 'postRun' ] ) {
if ( typeof Module [ 'postRun' ] == 'function' ) Module [ 'postRun' ] = [ Module [ 'postRun' ] ] ;
while ( Module [ 'postRun' ] . length > 0 ) {
Module [ 'postRun' ] . pop ( ) ( ) ;
}
}
return ret ;
}
if ( Module [ 'setStatus' ] ) {
Module [ 'setStatus' ] ( 'Running...' ) ;
setTimeout ( function ( ) {
setTimeout ( function ( ) {
Module [ 'setStatus' ] ( '' ) ;
} , 1 ) ;
if ( ! ABORT ) doRun ( ) ;
} , 1 ) ;
return 0 ;
} else {
return doRun ( ) ;
}
}
Module [ 'run' ] = Module . run = run ;
// {{PRE_RUN_ADDITIONS}}
if ( Module [ 'preInit' ] ) {
if ( typeof Module [ 'preInit' ] == 'function' ) Module [ 'preInit' ] = [ Module [ 'preInit' ] ] ;
while ( Module [ 'preInit' ] . length > 0 ) {
Module [ 'preInit' ] . pop ( ) ( ) ;
}
}
// shouldRunNow refers to calling main(), not run().
var shouldRunNow = false ;
if ( Module [ 'noInitialRun' ] ) {
shouldRunNow = false ;
}
run ( ) ;
// {{POST_RUN_ADDITIONS}}
// {{MODULE_ADDITIONS}}
shouldRunNow = true ;
self [ 'Runtime' ] = Runtime ;
self [ 'FS' ] = FS ;
} ;
gnuplot _create ( ) ;
// This is to avoid name mangling from closure compilers.
self [ 'FS' ] = FS ;
self [ 'FS' ] [ 'root' ] = FS . root ;
self [ 'FS' ] [ 'deleteFile' ] = FS . deleteFile ;
self [ 'FS' ] [ 'findObject' ] = FS . findObject ;
self [ 'FS' ] [ 'createDataFile' ] = FS . createDataFile ;
self [ 'FS' ] [ 'getFileContents' ] = function ( name ) {
var file = FS . findObject ( name ) ;
if ( ! file ) return null ;
return file . contents ;
} ;