From 382cebdf6bd0786a5ed631eb1c7fbf4b5e9b596f Mon Sep 17 00:00:00 2001 From: stropitek Date: Thu, 29 Jun 2017 23:24:50 +0200 Subject: [PATCH 1/5] util: map command to options --- src/util.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/util.js b/src/util.js index 2e92837..7f5dbf5 100644 --- a/src/util.js +++ b/src/util.js @@ -16,6 +16,12 @@ const mapOptionToCommand = { weight: 'w' }; +const mapCommandToOptions = {}; + +for(let key in mapOptionToCommand) { + mapCommandToOptions[mapOptionToCommand[key]] = key; +} + module.exports = { getCommand: function getCommand(options) { var str = ''; @@ -52,5 +58,19 @@ module.exports = { } return str; + }, + + getOptions(command) { + const options = {}; + command = command.split(' ').map(str => str.trim()).map(str => str.replace(/^-/, '')); + let i = 0; + while(i Date: Fri, 30 Jun 2017 00:04:44 +0200 Subject: [PATCH 2/5] start with command line options --- demos/containers/SVCConfig.js | 10 ++++++++-- demos/reducers/SVCPointsReducer.js | 16 ++++++++++++++-- demos/selectors/index.js | 3 ++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/demos/containers/SVCConfig.js b/demos/containers/SVCConfig.js index 012ab0c..898213e 100644 --- a/demos/containers/SVCConfig.js +++ b/demos/containers/SVCConfig.js @@ -1,17 +1,23 @@ import React, {Component} from 'react'; import {connect} from 'react-redux'; import {Field, reduxForm, formValueSelector} from 'redux-form'; +const util = require('../../src/util'); const KERNEL_TYPES = SVM.KERNEL_TYPES; -const initialValues = { +const initialOptions = util.getOptions('-c 1 -g 1 -t 0'); +const initialDefaultOptions = { type: SVM.SVM_TYPES.C_SVC, cost: 1, nu: 0.5, gamma: 1, degree: 3, - kernel: KERNEL_TYPES.RBF + kernel: KERNEL_TYPES.LINEAR }; +const initialValues = Object.assign({}, initialDefaultOptions, initialOptions); + +console.log(initialValues); + class SVCConfig extends Component { render() { const {gammaValue, costValue, kernelValue, nuValue, typeValue} = this.props; diff --git a/demos/reducers/SVCPointsReducer.js b/demos/reducers/SVCPointsReducer.js index c70a810..a8cc890 100644 --- a/demos/reducers/SVCPointsReducer.js +++ b/demos/reducers/SVCPointsReducer.js @@ -32,8 +32,20 @@ function SVCPointsReducer(state = defaultState, action) { case SVC_CLEAR_POINTS: { return { ...state, - points: [], - labels: [] + points: [ + [ + 0.27666666666666667, + 0.6866666666666666 + ], + [ + 0.6066666666666667, + 0.28 + ] + ], + labels: [ + 1, + 2 + ] }; } default: diff --git a/demos/selectors/index.js b/demos/selectors/index.js index c87aede..8e7b4b3 100644 --- a/demos/selectors/index.js +++ b/demos/selectors/index.js @@ -62,7 +62,8 @@ export const getSVCData = createSelector( } else { SVCConfig.weight = null; } - const svm = new SVM({...SVCConfig, quiet: true}); + const svm = new SVM({...SVCConfig, quiet: false}); + console.log(svm.getCommand()); svm.train(SVCPoints.points, SVCPoints.labels); SVs = svm.getSVIndices(); From 1d086a835f04493f6aa40fb6766ce6256b014f35 Mon Sep 17 00:00:00 2001 From: stropitek Date: Sat, 1 Jul 2017 01:17:44 +0200 Subject: [PATCH 3/5] compile libsvm toy example (glitch found!) The same examples are not behaving identically with the svm toy example from libsvm website and libsvm-js --- evaluation/Makefile | 15 +++ evaluation/js-interfaces.c | 215 +++++++++++++++++++++++++++++++++++++ evaluation/svm-toy.js | 64 +++++++++++ examples/evaluation.js | 22 ++++ 4 files changed, 316 insertions(+) create mode 100644 evaluation/Makefile create mode 100644 evaluation/js-interfaces.c create mode 100644 evaluation/svm-toy.js create mode 100644 examples/evaluation.js diff --git a/evaluation/Makefile b/evaluation/Makefile new file mode 100644 index 0000000..5616c7a --- /dev/null +++ b/evaluation/Makefile @@ -0,0 +1,15 @@ +CC = emcc +CXX = em++ + +CFLAGS = -Wall -Wconversion -O3 -fPIC --memory-init-file 0 + +all: libsvm-js-interfaces.js + +svm.o: svm.cpp svm.h + $(CXX) $(CFLAGS) -c svm.cpp + +libsvm-js-interfaces.js: js-interfaces.c svm.o svm.h + $(CC) $(CFLAGS) js-interfaces.c svm.o -o libsvm-js-interfaces.js -s EXPORTED_FUNCTIONS="['_parse_command_line', '_create_svm_nodes', '_add_instance', '_libsvm_train_for_toy', '_libsvm_predict_for_toy', '_get_svr_epsilon', '_svm_free_model_content', '_svm_get_svm_type', '_serialize_model']" + +clean: + rm -f *~ js-interfaces.o svm.o libsvm-js-interfaces.js \ No newline at end of file diff --git a/evaluation/js-interfaces.c b/evaluation/js-interfaces.c new file mode 100644 index 0000000..eacfa93 --- /dev/null +++ b/evaluation/js-interfaces.c @@ -0,0 +1,215 @@ +#include +#include +#include +#include +#include +#include "svm.h" +#define Malloc(type,n) (type *)malloc((n)*sizeof(type)) + +void print_null(const char *s) {} + +void exit_with_help(){exit(1);} + +#ifdef __cplusplus +extern "C" { +#endif + +void parse_command_line(const char* input_command, struct svm_parameter* param) +{ + void (*print_func)(const char*) = NULL; // default printing to stdout + char command[256]; + char *curr = NULL; + char *prev = NULL; + + strcpy(command, input_command); + curr = strtok(command," \t\n"); // label + + // default values + param->svm_type = C_SVC; + param->kernel_type = RBF; + param->degree = 3; + param->gamma = 0; // 1/num_features + param->coef0 = 0; + param->nu = 0.5; + param->cache_size = 100; + param->C = 1; + param->eps = 1e-3; + param->p = 0.1; + param->shrinking = 1; + param->probability = 0; + param->nr_weight = 0; + param->weight_label = NULL; + param->weight = NULL; + + if(curr == NULL) return; + + do + { + if(curr[0] != '-') break; + if(curr[1] == 'q') continue; // no quiet mode for toy + + prev = curr; + if((curr = strtok(NULL, " \t\n")) == NULL) + exit_with_help(); + switch(prev[1]) + { + case 's': + param->svm_type = atoi(curr); + break; + case 't': + param->kernel_type = atoi(curr); + break; + case 'd': + param->degree = atoi(curr); + break; + case 'g': + param->gamma = atof(curr); + break; + case 'r': + param->coef0 = atof(curr); + break; + case 'n': + param->nu = atof(curr); + break; + case 'm': + param->cache_size = atof(curr); + break; + case 'c': + param->C = atof(curr); + break; + case 'e': + param->eps = atof(curr); + break; + case 'p': + param->p = atof(curr); + break; + case 'h': + param->shrinking = atoi(curr); + break; + case 'b': + param->probability = atoi(curr); + break; + case 'w': + ++param->nr_weight; + param->weight_label = (int *)realloc(param->weight_label,sizeof(int)*param->nr_weight); + param->weight = (double *)realloc(param->weight,sizeof(double)*param->nr_weight); + param->weight_label[param->nr_weight-1] = atoi(&prev[2]); + param->weight[param->nr_weight-1] = atof(curr); + break; + default: + fprintf(stderr,"Unknown option: -%c\n", prev[1]); + exit_with_help(); + } + }while((curr = strtok(NULL, " \t\n")) != NULL); + + svm_set_print_string_function(print_func); +} + +struct svm_model* libsvm_train_for_toy(struct svm_problem* prob, const char* command) +{ + struct svm_parameter param; + parse_command_line(command, ¶m); + + if(param.svm_type == EPSILON_SVR || + param.svm_type == NU_SVR) + { + + for(int i = 0; i < prob->l; ++i) + { + prob->y[i] = prob->x[i][1].value; + prob->x[i][1].index = -1; + } + + if(param.gamma == 0) + param.gamma = .1; + } + else + { + if(param.gamma == 0) + param.gamma = .5; + } + + struct svm_model* model = svm_train(prob, ¶m); + + svm_destroy_param(¶m); + free(prob->y); + free(prob->x); + free(prob); + + return model; +} + +double libsvm_predict_for_toy(double f1, double f2, struct svm_model* model) +{ + static struct svm_node node[3]; + + if(model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) + { + node[0].index = 1; + node[0].value = f1; + node[1].index = -1; + } + else + { + node[0].index = 1; + node[0].value = f1; + node[1].index = 2; + node[1].value = f2; + node[2].index = -1; + } + + double result = svm_predict(model, node); + + return result; +} + +struct svm_problem* create_svm_nodes(int size) +{ + struct svm_problem* prob = Malloc(struct svm_problem, 1); + prob->l = size; + prob->y = Malloc(double,prob->l); + prob->x = Malloc(struct svm_node *, prob->l); + struct svm_node* x_space = NULL; + x_space = (struct svm_node*) realloc(x_space, sizeof(struct svm_node) * prob->l * 3); + + for(int i = 0; i < prob->l; ++i) + prob->x[i] = x_space + i*3; + + return prob; +} + +char* serialize_model(struct svm_model* model) +{ + int success = svm_save_model("testfile.txt", model); + if(success < 0) return NULL; + FILE *f = fopen("testfile.txt", "rb"); + fseek(f, 0, SEEK_END); + long fsize = ftell(f); + fseek(f, 0, SEEK_SET); //same as rewind(f); + + char *string = Malloc(char, fsize + 1); + fread(string, fsize, 1, f); + fclose(f); + + string[fsize] = 0; + return string; +} + +void add_instance(struct svm_problem* prob, int i, double y, double f1, double f2) +{ + prob->x[i][0].index = 1; + prob->x[i][0].value = f1; + prob->x[i][1].index = 2; + prob->x[i][1].value = f2; + prob->x[i][2].index = -1; + prob->y[i] = y; +} + +double get_svr_epsilon(struct svm_model* model) +{ + return model->param.p; +} + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/evaluation/svm-toy.js b/evaluation/svm-toy.js new file mode 100644 index 0000000..904c089 --- /dev/null +++ b/evaluation/svm-toy.js @@ -0,0 +1,64 @@ +Module = require('./libsvm-js-interfaces'); + +create_svm_nodes = Module.cwrap("create_svm_nodes", "number", ["number"]); +add_instance = Module.cwrap("add_instance", "", ["number", "number", "number", "number", "number"]); + +libsvm_train_for_toy = Module.cwrap("libsvm_train_for_toy", "number", ["number", "string"]); +libsvm_predict_for_toy = Module.cwrap("libsvm_predict_for_toy", "number", ["number", "number", "number"]); + +get_svr_epsilon = Module.cwrap("get_svr_epsilon", "number", ["number"]); + +svm_free_model_content = Module.cwrap("svm_free_model_content", "", ["number"]); +svm_get_svm_type = Module.cwrap("svm_get_svm_type", "number", ["number"]); +serialize_model = Module.cwrap("serialize_model", "string", ["number"]); + +var train_points = [ + [ + 1, + 0.27666666666666667, + 0.6866666666666666 + ], + [ + 2, + 0.6066666666666667, + 0.28 + ] +]; + + +function generateTrainData() +{ + var prob = create_svm_nodes(train_points.length); + for(i = 0; i < train_points.length; ++i) + { + var point = train_points[i]; + var index = point[0]; + var x = point[1]; + var y = point[2]; + add_instance(prob, i, index, x, y); + } + + return prob; +} + +function testPoints(model, test) +{ + for(var j =0; j Date: Sat, 1 Jul 2017 01:18:36 +0200 Subject: [PATCH 4/5] free memory only at the end. Values are needed by model. --- src/loadSVM.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/loadSVM.js b/src/loadSVM.js index 10efd73..aa23c0f 100644 --- a/src/loadSVM.js +++ b/src/loadSVM.js @@ -57,8 +57,6 @@ module.exports = function (libsvm) { const problem = createProblem(samples, labels); const command = this.getCommand(); this.model = train_problem(problem, command); - // Free the problem - free_problem(problem); } /** @@ -94,6 +92,7 @@ module.exports = function (libsvm) { */ free() { if (this.model !== null) { + free_problem(problem); svm_free_model(this.model); this.model = null; } From f940ed2d78ed86f32b5e5b3c3a24dc9109b2aaee Mon Sep 17 00:00:00 2001 From: stropitek Date: Sat, 1 Jul 2017 01:21:00 +0200 Subject: [PATCH 5/5] add files for toy example compilation --- evaluation/libsvm-js-interfaces.js | 17 + evaluation/svm.cpp | 3181 ++++++++++++++++++++++++++++ evaluation/svm.def | 21 + evaluation/svm.h | 104 + evaluation/svm.o | Bin 0 -> 202264 bytes 5 files changed, 3323 insertions(+) create mode 100644 evaluation/libsvm-js-interfaces.js create mode 100644 evaluation/svm.cpp create mode 100644 evaluation/svm.def create mode 100644 evaluation/svm.h create mode 100644 evaluation/svm.o diff --git a/evaluation/libsvm-js-interfaces.js b/evaluation/libsvm-js-interfaces.js new file mode 100644 index 0000000..c0ed014 --- /dev/null +++ b/evaluation/libsvm-js-interfaces.js @@ -0,0 +1,17 @@ +var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=console.log;if(!Module["printErr"])Module["printErr"]=console.warn;var nodeFS;var nodePath;Module["read"]=function read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return xhr.response}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.warn(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}if(!Module["quit"]){Module["quit"]=(function(status,toThrow){throw toThrow})}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var Runtime={setTempRet0:(function(value){tempRet0=value;return value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i>2];var end=(ret+size+15|0)&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=Runtime.stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;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;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(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>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){var __cxa_demangle_func=Module["___cxa_demangle"]||Module["__cxa_demangle"];if(__cxa_demangle_func){try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}return func}Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}Module["stackTrace"]=stackTrace;var HEAP;var buffer;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+7216;__ATINIT__.push();allocate([196,4,0,0,13,5,0,0,24,0,0,0,0,0,0,0,156,4,0,0,21,5,0,0,156,4,0,0,68,5,0,0,196,4,0,0,76,5,0,0,32,0,0,0,0,0,0,0,196,4,0,0,226,6,0,0,8,0,0,0,0,0,0,0,196,4,0,0,242,6,0,0,8,0,0,0,0,0,0,0,196,4,0,0,8,7,0,0,8,0,0,0,0,0,0,0,156,4,0,0,152,19,0,0,196,4,0,0,248,19,0,0,128,0,0,0,0,0,0,0,196,4,0,0,165,19,0,0,144,0,0,0,0,0,0,0,156,4,0,0,198,19,0,0,196,4,0,0,211,19,0,0,112,0,0,0,0,0,0,0,196,4,0,0,254,20,0,0,128,0,0,0,0,0,0,0,196,4,0,0,218,20,0,0,168,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,32,0,0,0,3,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,40,0,0,0,3,0,0,0,7,0,0,0,2,0,0,0,2,0,0,0,8,0,0,0,0,0,0,0,24,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,9,0,0,0,10,0,0,0,0,0,0,0,56,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,11,0,0,0,12,0,0,0,0,0,0,0,72,0,0,0,4,0,0,0,2,0,0,0,3,0,0,0,13,0,0,0,14,0,0,0,0,0,0,0,88,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,15,0,0,0,16,0,0,0,213,8,0,0,219,8,0,0,226,8,0,0,236,8,0,0,248,8,0,0,0,0,0,0,171,8,0,0,178,8,0,0,189,8,0,0,193,8,0,0,201,8,0,0,0,0,0,0,220,1,0,0,20,0,0,0,67,46,85,84,70,45,56,0,0,0,0,0,0,0,0,0,0,0,0,0,222,18,4,149,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,244,1,0,0,5,0,0,0,0,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,6,0,0,0,7,0,0,0,192,23,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,1,0,0,108,3,0,0,5,0,0,0,0,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,8,0,0,0,7,0,0,0,200,27,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,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,95,112,137,0,255,9,47,15,2,0,0,0,143,19,0,0,0,0,0,0,112,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,10,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,152,0,0,0,17,0,0,0,21,0,0,0,19,0,0,0,20,0,0,0,10,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,32,9,10,0,85,110,107,110,111,119,110,32,111,112,116,105,111,110,58,32,45,37,99,10,0,116,101,115,116,102,105,108,101,46,116,120,116,0,114,98,0,54,75,101,114,110,101,108,0,55,81,77,97,116,114,105,120,0,42,0,10,87,65,82,78,73,78,71,58,32,117,115,105,110,103,32,45,104,32,48,32,109,97,121,32,98,101,32,102,97,115,116,101,114,10,0,54,83,111,108,118,101,114,0,57,83,111,108,118,101,114,95,78,85,0,10,87,65,82,78,73,78,71,58,32,114,101,97,99,104,105,110,103,32,109,97,120,32,110,117,109,98,101,114,32,111,102,32,105,116,101,114,97,116,105,111,110,115,10,0,10,111,112,116,105,109,105,122,97,116,105,111,110,32,102,105,110,105,115,104,101,100,44,32,35,105,116,101,114,32,61,32,37,100,10,0,87,65,82,78,73,78,71,58,32,116,114,97,105,110,105,110,103,32,100,97,116,97,32,105,110,32,111,110,108,121,32,111,110,101,32,99,108,97,115,115,46,32,83,101,101,32,82,69,65,68,77,69,32,102,111,114,32,100,101,116,97,105,108,115,46,10,0,87,65,82,78,73,78,71,58,32,99,108,97,115,115,32,108,97,98,101,108,32,37,100,32,115,112,101,99,105,102,105,101,100,32,105,110,32,119,101,105,103,104,116,32,105,115,32,110,111,116,32,102,111,117,110,100,10,0,84,111,116,97,108,32,110,83,86,32,61,32,37,100,10,0,76,105,110,101,32,115,101,97,114,99,104,32,102,97,105,108,115,32,105,110,32,116,119,111,45,99,108,97,115,115,32,112,114,111,98,97,98,105,108,105,116,121,32,101,115,116,105,109,97,116,101,115,10,0,82,101,97,99,104,105,110,103,32,109,97,120,105,109,97,108,32,105,116,101,114,97,116,105,111,110,115,32,105,110,32,116,119,111,45,99,108,97,115,115,32,112,114,111,98,97,98,105,108,105,116,121,32,101,115,116,105,109,97,116,101,115,10,0,111,98,106,32,61,32,37,102,44,32,114,104,111,32,61,32,37,102,10,0,110,83,86,32,61,32,37,100,44,32,110,66,83,86,32,61,32,37,100,10,0,101,112,115,105,108,111,110,32,61,32,37,102,10,0,53,83,86,82,95,81,0,110,117,32,61,32,37,102,10,0,49,49,79,78,69,95,67,76,65,83,83,95,81,0,67,32,61,32,37,102,10,0,53,83,86,67,95,81,0,80,114,111,98,46,32,109,111,100,101,108,32,102,111,114,32,116,101,115,116,32,100,97,116,97,58,32,116,97,114,103,101,116,32,118,97,108,117,101,32,61,32,112,114,101,100,105,99,116,101,100,32,118,97,108,117,101,32,43,32,122,44,10,122,58,32,76,97,112,108,97,99,101,32,100,105,115,116,114,105,98,117,116,105,111,110,32,101,94,40,45,124,122,124,47,115,105,103,109,97,41,47,40,50,115,105,103,109,97,41,44,115,105,103,109,97,61,32,37,103,10,0,87,65,82,78,73,78,71,58,32,35,32,102,111,108,100,115,32,62,32,35,32,100,97,116,97,46,32,87,105,108,108,32,117,115,101,32,35,32,102,111,108,100,115,32,61,32,35,32,100,97,116,97,32,105,110,115,116,101,97,100,32,40,105,46,101,46,44,32,108,101,97,118,101,45,111,110,101,45,111,117,116,32,99,114,111,115,115,32,118,97,108,105,100,97,116,105,111,110,41,10,0,69,120,99,101,101,100,115,32,109,97,120,95,105,116,101,114,32,105,110,32,109,117,108,116,105,99,108,97,115,115,95,112,114,111,98,10,0,119,0,115,118,109,95,116,121,112,101,32,37,115,10,0,107,101,114,110,101,108,95,116,121,112,101,32,37,115,10,0,100,101,103,114,101,101,32,37,100,10,0,103,97,109,109,97,32,37,103,10,0,99,111,101,102,48,32,37,103,10,0,110,114,95,99,108,97,115,115,32,37,100,10,0,116,111,116,97,108,95,115,118,32,37,100,10,0,114,104,111,0,32,37,103,0,10,0,108,97,98,101,108,0,32,37,100,0,112,114,111,98,65,0,112,114,111,98,66,0,110,114,95,115,118,0,83,86,10,0,37,46,49,54,103,32,0,48,58,37,100,32,0,37,100,58,37,46,56,103,32,0,108,105,110,101,97,114,0,112,111,108,121,110,111,109,105,97,108,0,114,98,102,0,115,105,103,109,111,105,100,0,112,114,101,99,111,109,112,117,116,101,100,0,99,95,115,118,99,0,110,117,95,115,118,99,0,111,110,101,95,99,108,97,115,115,0,101,112,115,105,108,111,110,95,115,118,114,0,110,117,95,115,118,114,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,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,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,76,67,95,65,76,76,0,76,67,95,67,84,89,80,69,0,0,0,0,76,67,95,78,85,77,69,82,73,67,0,0,76,67,95,84,73,77,69,0,0,0,0,0,76,67,95,67,79,76,76,65,84,69,0,0,76,67,95,77,79,78,69,84,65,82,89,0,76,67,95,77,69,83,83,65,71,69,83,0,76,65,78,71,0,67,46,85,84,70,45,56,0,80,79,83,73,88,0,77,85,83,76,95,76,79,67,80,65,84,72,0,67,46,85,84,70,45,56,0,0,0,0,0,0,0,0,0,67,0,105,110,102,105,110,105,116,121,0,110,97,110,0,114,119,97,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,116,101,114,109,105,110,97,116,105,110,103,0,117,110,99,97,117,103,104,116,0,83,116,57,101,120,99,101,112,116,105,111,110,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,83,116,57,116,121,112,101,95,105,110,102,111,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;Module["_i64Subtract"]=_i64Subtract;Module["_i64Add"]=_i64Add;Module["_memset"]=_memset;Module["_bitshift64Shl"]=_bitshift64Shl;function _abort(){Module["abort"]()}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module["dynCall_v"](func);_pthread_once.seen[ptr]=1}function ___lock(){}function ___unlock(){}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}var PTHREAD_SPECIFIC_NEXT_KEY=1;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&146)>>1}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:(function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;if(flags in NODEFS.flagsToPermissionStringMap){return NODEFS.flagsToPermissionStringMap[flags]}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsToPermissionString(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;var nbuffer=new Buffer(length);var res;try{res=fs.readSync(stream.nfd,nbuffer,0,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(res>0){for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdirTree:(function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;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!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);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;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall91(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get();var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);SYSCALLS.doMsync(addr,stream,len,info.flags);FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function __exit(status){Module["exit"](status)}function _exit(status){__exit(status)}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21506:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["_bitshift64Lshr"]=_bitshift64Lshr;function ___cxa_pure_virtual(){ABORT=true;throw"Pure virtual function called!"}var _environ=STATICTOP;STATICTOP+=16;function ___buildEnvironment(env){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C";ENV["_"]=Module["thisProgram"];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]}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!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){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 ___map_file(pathname,size){___setErrNo(ERRNO_CODES.EPERM);return-1}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module["dynCall_vi"](info.destructor,ptr)}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___cxa_begin_catch(ptr){var info=EXCEPTIONS.infos[ptr];if(info&&!info.caught){info.caught=true;__ZSt18uncaught_exceptionv.uncaught_exception--}if(info)info.rethrown=false;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);Module["_llvm_cttz_i32"]=_llvm_cttz_i32;Module["___udivmoddi4"]=___udivmoddi4;Module["___udivdi3"]=___udivdi3;Module["___muldsi3"]=___muldsi3;Module["___muldi3"]=___muldi3;Module["_sbrk"]=_sbrk;function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(Runtime.setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(Runtime.setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(Runtime.setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(Runtime.setTempRet0(throwntype),thrown)|0}function ___gxx_personality_v0(){}Module["___uremdi3"]=___uremdi3;Module["_llvm_bswap_i32"]=_llvm_bswap_i32;function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}___buildEnvironment(ENV);DYNAMICTOP_PTR=allocate(1,"i32",ALLOC_STATIC);STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;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;Module["setThrew"](1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){try{Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_di(index,a1){try{return Module["dynCall_di"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_vi(index,a1){try{Module["dynCall_vi"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["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;Module["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;Module["setThrew"](1,0)}}function invoke_v(index){try{Module["dynCall_v"](index)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viiii(index,a1,a2,a3,a4){try{Module["dynCall_viiii"](index,a1,a2,a3,a4)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){try{Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_diii(index,a1,a2,a3){try{return Module["dynCall_diii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity};Module.asmLibraryArg={"abort":abort,"assert":assert,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"invoke_iiii":invoke_iiii,"invoke_viiiiii":invoke_viiiiii,"invoke_di":invoke_di,"invoke_vi":invoke_vi,"invoke_ii":invoke_ii,"invoke_viii":invoke_viii,"invoke_v":invoke_v,"invoke_viiii":invoke_viiii,"invoke_viiiii":invoke_viiiii,"invoke_diii":invoke_diii,"___syscall221":___syscall221,"_pthread_key_create":_pthread_key_create,"_abort":_abort,"___gxx_personality_v0":___gxx_personality_v0,"__ZSt18uncaught_exceptionv":__ZSt18uncaught_exceptionv,"___buildEnvironment":___buildEnvironment,"___setErrNo":___setErrNo,"___cxa_begin_catch":___cxa_begin_catch,"_emscripten_memcpy_big":_emscripten_memcpy_big,"___resumeException":___resumeException,"___cxa_find_matching_catch":___cxa_find_matching_catch,"__exit":__exit,"_pthread_getspecific":_pthread_getspecific,"___syscall91":___syscall91,"_pthread_once":_pthread_once,"_getenv":_getenv,"___map_file":___map_file,"___syscall54":___syscall54,"___unlock":___unlock,"_pthread_setspecific":_pthread_setspecific,"___lock":___lock,"___syscall6":___syscall6,"___syscall5":___syscall5,"___cxa_pure_virtual":___cxa_pure_virtual,"___syscall140":___syscall140,"_exit":_exit,"___syscall145":___syscall145,"___syscall146":___syscall146,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX,"cttz_i8":cttz_i8};// 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.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=env.cttz_i8|0;var o=0;var p=0;var q=0;var r=0;var s=global.NaN,t=global.Infinity;var u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0.0;var D=0;var E=global.Math.floor;var F=global.Math.abs;var G=global.Math.sqrt;var H=global.Math.pow;var I=global.Math.cos;var J=global.Math.sin;var K=global.Math.tan;var L=global.Math.acos;var M=global.Math.asin;var N=global.Math.atan;var O=global.Math.atan2;var P=global.Math.exp;var Q=global.Math.log;var R=global.Math.ceil;var S=global.Math.imul;var T=global.Math.min;var U=global.Math.max;var V=global.Math.clz32;var W=env.abort;var X=env.assert;var Y=env.enlargeMemory;var Z=env.getTotalMemory;var _=env.abortOnCannotGrowMemory;var $=env.invoke_iiii;var aa=env.invoke_viiiiii;var ba=env.invoke_di;var ca=env.invoke_vi;var da=env.invoke_ii;var ea=env.invoke_viii;var fa=env.invoke_v;var ga=env.invoke_viiii;var ha=env.invoke_viiiii;var ia=env.invoke_diii;var ja=env.___syscall221;var ka=env._pthread_key_create;var la=env._abort;var ma=env.___gxx_personality_v0;var na=env.__ZSt18uncaught_exceptionv;var oa=env.___buildEnvironment;var pa=env.___setErrNo;var qa=env.___cxa_begin_catch;var ra=env._emscripten_memcpy_big;var sa=env.___resumeException;var ta=env.___cxa_find_matching_catch;var ua=env.__exit;var va=env._pthread_getspecific;var wa=env.___syscall91;var xa=env._pthread_once;var ya=env._getenv;var za=env.___map_file;var Aa=env.___syscall54;var Ba=env.___unlock;var Ca=env._pthread_setspecific;var Da=env.___lock;var Ea=env.___syscall6;var Fa=env.___syscall5;var Ga=env.___cxa_pure_virtual;var Ha=env.___syscall140;var Ia=env._exit;var Ja=env.___syscall145;var Ka=env.___syscall146;var La=0.0; +// EMSCRIPTEN_START_FUNCS +function Wa(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Xa(){return l|0}function Ya(a){a=a|0;l=a}function Za(a,b){a=a|0;b=b|0;l=a;m=b}function _a(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function $a(a){a=a|0;D=a}function ab(){return D|0}function bb(){Ia(1)}function cb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=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.0;x=l;l=l+272|0;w=x;o=x+8|0;Wd(o,b)|0;b=bf(o,1252)|0;c[d>>2]=0;o=d+4|0;c[o>>2]=2;k=d+8|0;c[k>>2]=3;n=d+16|0;j=d+24|0;q=d+72|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;h[q>>3]=.5;i=d+32|0;h[i>>3]=100.0;g=d+48|0;h[g>>3]=1.0;m=d+40|0;h[m>>3]=.001;r=d+80|0;h[r>>3]=.1;t=d+88|0;c[t>>2]=1;s=d+92|0;c[s>>2]=0;p=d+56|0;c[p>>2]=0;v=d+60|0;c[v>>2]=0;u=d+64|0;c[u>>2]=0;if(!b){l=x;return}a:while(1){if((a[b>>0]|0)!=45){b=23;break}e=b+1|0;b:do if((a[e>>0]|0)!=113){f=bf(0,1252)|0;if(!f){b=6;break a}e=a[e>>0]|0;do switch(e|0){case 115:{c[d>>2]=Ue(f)|0;break b}case 116:{c[o>>2]=Ue(f)|0;break b}case 100:{c[k>>2]=Ue(f)|0;break b}case 103:{h[n>>3]=+Ze(f);break b}case 114:{h[j>>3]=+Ze(f);break b}case 110:{h[q>>3]=+Ze(f);break b}case 109:{h[i>>3]=+Ze(f);break b}case 99:{h[g>>3]=+Ze(f);break b}case 101:{h[m>>3]=+Ze(f);break b}case 112:{h[r>>3]=+Ze(f);break b}case 104:{c[t>>2]=Ue(f)|0;break b}case 98:{c[s>>2]=Ue(f)|0;break b}case 119:{e=(c[p>>2]|0)+1|0;c[p>>2]=e;c[v>>2]=ff(c[v>>2]|0,e<<2)|0;e=ff(c[u>>2]|0,c[p>>2]<<3)|0;c[u>>2]=e;b=Ue(b+2|0)|0;c[(c[v>>2]|0)+((c[p>>2]|0)+-1<<2)>>2]=b;y=+Ze(f);h[e+((c[p>>2]|0)+-1<<3)>>3]=y;break b}default:{b=21;break a}}while(0)}while(0);b=bf(0,1252)|0;if(!b){b=23;break}}if((b|0)==6)bb();else if((b|0)==21){x=c[218]|0;c[w>>2]=e;Ee(x,1256,w)|0;bb()}else if((b|0)==23){ed(0);l=x;return}}function db(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;i=l;l=l+96|0;g=i;cb(b,g);if(((c[g>>2]|0)+-3|0)>>>0<2){b=c[a>>2]|0;if((b|0)>0){d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=0;do{j=c[d+(f<<2)>>2]|0;h[e+(f<<3)>>3]=+h[j+24>>3];c[j+16>>2]=-1;f=f+1|0}while((f|0)<(b|0))}b=g+16|0;if(+h[b>>3]==0.0)h[b>>3]=.1}else{b=g+16|0;if(+h[b>>3]==0.0)h[b>>3]=.5}j=oc(a,g)|0;vc(g);df(c[a+4>>2]|0);df(c[a+8>>2]|0);df(a);l=i;return j|0}function eb(a,b,d){a=+a;b=+b;d=d|0;var e=0;e=c[d>>2]|0;c[1352]=1;h[677]=a;if((e+-3|0)>>>0<2)e=5424;else{c[1356]=2;h[679]=b;e=5440}c[e>>2]=-1;return +(+$c(d,5408))}function fb(a){a=a|0;var b=0,d=0,e=0,f=0;b=cf(12)|0;c[b>>2]=a;c[b+4>>2]=cf(a<<3)|0;d=cf(a<<2)|0;c[b+8>>2]=d;e=ff(0,a*48|0)|0;if((a|0)>0)f=0;else return b|0;do{c[d+(f<<2)>>2]=e+(f*3<<4);f=f+1|0}while((f|0)<(a|0));return b|0}function gb(b){b=b|0;var c=0,d=0;if((dd(1277,b)|0)<0){b=0;return b|0}d=Ne(1277,1290)|0;Ie(d,0,2)|0;c=Le(d)|0;Ie(d,0,0)|0;b=cf(c+1|0)|0;Pe(b,c,1,d)|0;ie(d)|0;a[b+c>>0]=0;return b|0}function hb(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0;g=c[(c[a+8>>2]|0)+(b<<2)>>2]|0;c[g>>2]=1;h[g+8>>3]=e;c[g+16>>2]=2;h[g+24>>3]=f;c[g+32>>2]=-1;h[(c[a+4>>2]|0)+(b<<3)>>3]=d;return}function ib(a){a=a|0;return +(+h[a+80>>3])}function jb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;h=g+8|0;e=g+4|0;f=g;c[h>>2]=a;c[e>>2]=b;c[f>>2]=d;b=c[h>>2]|0;nb((c[b+12>>2]|0)+(c[e>>2]<<2)|0,(c[b+12>>2]|0)+(c[f>>2]<<2)|0);if(!(c[b+16>>2]|0)){l=g;return}ob((c[b+16>>2]|0)+(c[e>>2]<<3)|0,(c[b+16>>2]|0)+(c[f>>2]<<3)|0);l=g;return}function kb(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=c[d>>2]|0;lb(a);lf(a);l=b;return}function lb(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;b=c[b>>2]|0;c[b>>2]=208;a=c[b+12>>2]|0;if(a|0)mf(a);a=c[b+16>>2]|0;if(!a){mb(b);l=d;return}mf(a);mb(b);l=d;return}function mb(a){a=a|0;var b=0;b=l;l=l+16|0;c[b>>2]=a;l=b;return}function nb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;f=d+8|0;c[g>>2]=a;c[e>>2]=b;c[f>>2]=c[c[g>>2]>>2];c[c[g>>2]>>2]=c[c[e>>2]>>2];c[c[e>>2]>>2]=c[f>>2];l=d;return}function ob(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+12|0;e=d+8|0;f=d;c[g>>2]=a;c[e>>2]=b;h[f>>3]=+h[c[g>>2]>>3];h[c[g>>2]>>3]=+h[c[e>>2]>>3];h[c[e>>2]>>3]=+h[f>>3];l=d;return}function pb(a){a=a|0;var b=0;b=l;l=l+16|0;c[b>>2]=a;l=b;return}function qb(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=c[d>>2]|0;pb(a);lf(a);l=b;return}function rb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=l;l=l+96|0;x=z+84|0;A=z+80|0;u=z+72|0;v=z+64|0;i=z+40|0;j=z+32|0;k=z+76|0;m=z+68|0;s=z+24|0;y=z+60|0;n=z+56|0;q=z+52|0;p=z+16|0;r=z+8|0;w=z;o=z+48|0;c[A>>2]=b;c[u>>2]=d;c[v>>2]=e;e=c[A>>2]|0;h[i>>3]=-t;h[j>>3]=-t;c[k>>2]=-1;c[m>>2]=-1;h[s>>3]=t;c[y>>2]=0;while(1){if((c[y>>2]|0)>=(c[e+4>>2]|0))break;d=c[y>>2]|0;if((a[(c[e+8>>2]|0)+(c[y>>2]|0)>>0]|0)==1){if(!(ub(e,d)|0)?-+h[(c[e+12>>2]|0)+(c[y>>2]<<3)>>3]>=+h[i>>3]:0){h[i>>3]=-+h[(c[e+12>>2]|0)+(c[y>>2]<<3)>>3];c[k>>2]=c[y>>2]}}else if(!(vb(e,d)|0)?+h[(c[e+12>>2]|0)+(c[y>>2]<<3)>>3]>=+h[i>>3]:0){h[i>>3]=+h[(c[e+12>>2]|0)+(c[y>>2]<<3)>>3];c[k>>2]=c[y>>2]}c[y>>2]=(c[y>>2]|0)+1}c[y>>2]=c[k>>2];c[n>>2]=0;if((c[y>>2]|0)!=-1){A=c[e+24>>2]|0;c[n>>2]=Ma[c[c[A>>2]>>2]&15](A,c[y>>2]|0,c[e+4>>2]|0)|0}c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[e+4>>2]|0))break;d=c[q>>2]|0;if((a[(c[e+8>>2]|0)+(c[q>>2]|0)>>0]|0)==1){if(!(vb(e,d)|0)){h[p>>3]=+h[i>>3]+ +h[(c[e+12>>2]|0)+(c[q>>2]<<3)>>3];if(+h[(c[e+12>>2]|0)+(c[q>>2]<<3)>>3]>=+h[j>>3])h[j>>3]=+h[(c[e+12>>2]|0)+(c[q>>2]<<3)>>3];if(+h[p>>3]>0.0){h[w>>3]=+h[(c[e+28>>2]|0)+(c[y>>2]<<3)>>3]+ +h[(c[e+28>>2]|0)+(c[q>>2]<<3)>>3]-+(a[(c[e+8>>2]|0)+(c[y>>2]|0)>>0]|0)*2.0*+g[(c[n>>2]|0)+(c[q>>2]<<2)>>2];f=-(+h[p>>3]*+h[p>>3]);if(+h[w>>3]>0.0)h[r>>3]=f/+h[w>>3];else h[r>>3]=f/1.0e-12;if(+h[r>>3]<=+h[s>>3]){c[m>>2]=c[q>>2];h[s>>3]=+h[r>>3]}}}}else if(!(ub(e,d)|0)){h[p>>3]=+h[i>>3]-+h[(c[e+12>>2]|0)+(c[q>>2]<<3)>>3];if(-+h[(c[e+12>>2]|0)+(c[q>>2]<<3)>>3]>=+h[j>>3])h[j>>3]=-+h[(c[e+12>>2]|0)+(c[q>>2]<<3)>>3];if(+h[p>>3]>0.0){h[w>>3]=+h[(c[e+28>>2]|0)+(c[y>>2]<<3)>>3]+ +h[(c[e+28>>2]|0)+(c[q>>2]<<3)>>3]+ +(a[(c[e+8>>2]|0)+(c[y>>2]|0)>>0]|0)*2.0*+g[(c[n>>2]|0)+(c[q>>2]<<2)>>2];f=-(+h[p>>3]*+h[p>>3]);if(+h[w>>3]>0.0)h[r>>3]=f/+h[w>>3];else h[r>>3]=f/1.0e-12;if(+h[r>>3]<=+h[s>>3]){c[m>>2]=c[q>>2];h[s>>3]=+h[r>>3]}}}c[q>>2]=(c[q>>2]|0)+1}if((c[m>>2]|0)==-1?1:+h[i>>3]+ +h[j>>3]<+h[e+32>>3]){c[x>>2]=1;c[o>>2]=1;A=c[x>>2]|0;l=z;return A|0}else{c[c[u>>2]>>2]=c[k>>2];c[c[v>>2]>>2]=c[m>>2];c[x>>2]=0;c[o>>2]=1;A=c[x>>2]|0;l=z;return A|0}return 0}function sb(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+64|0;n=m+48|0;g=m+32|0;f=m+44|0;j=m+24|0;e=m+16|0;i=m+8|0;d=m+40|0;k=m;c[n>>2]=b;b=c[n>>2]|0;c[f>>2]=0;h[j>>3]=t;h[e>>3]=-t;h[i>>3]=0.0;c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[b+4>>2]|0))break;h[k>>3]=+(a[(c[b+8>>2]|0)+(c[d>>2]|0)>>0]|0)*+h[(c[b+12>>2]|0)+(c[d>>2]<<3)>>3];do if(ub(b,c[d>>2]|0)|0)if((a[(c[b+8>>2]|0)+(c[d>>2]|0)>>0]|0)==-1){h[j>>3]=+Fb(+h[j>>3],+h[k>>3]);break}else{h[e>>3]=+Gb(+h[e>>3],+h[k>>3]);break}else{if(!(vb(b,c[d>>2]|0)|0)){c[f>>2]=(c[f>>2]|0)+1;h[i>>3]=+h[i>>3]+ +h[k>>3];break}if((a[(c[b+8>>2]|0)+(c[d>>2]|0)>>0]|0)==1){h[j>>3]=+Fb(+h[j>>3],+h[k>>3]);break}else{h[e>>3]=+Gb(+h[e>>3],+h[k>>3]);break}}while(0);c[d>>2]=(c[d>>2]|0)+1}if((c[f>>2]|0)>0){h[g>>3]=+h[i>>3]/+(c[f>>2]|0);o=+h[g>>3];l=m;return +o}else{h[g>>3]=(+h[j>>3]+ +h[e>>3])/2.0;o=+h[g>>3];l=m;return +o}return 0.0}function tb(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=l;l=l+32|0;i=j+16|0;d=j+20|0;g=j+24|0;e=j+8|0;f=j;c[d>>2]=b;d=c[d>>2]|0;h[e>>3]=-t;h[f>>3]=-t;c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[d+4>>2]|0))break;k=(a[(c[d+8>>2]|0)+(c[g>>2]|0)>>0]|0)==1;b=ub(d,c[g>>2]|0)|0;if(k){if(!b?-+h[(c[d+12>>2]|0)+(c[g>>2]<<3)>>3]>=+h[e>>3]:0)h[e>>3]=-+h[(c[d+12>>2]|0)+(c[g>>2]<<3)>>3];if(!(vb(d,c[g>>2]|0)|0)?+h[(c[d+12>>2]|0)+(c[g>>2]<<3)>>3]>=+h[f>>3]:0)h[f>>3]=+h[(c[d+12>>2]|0)+(c[g>>2]<<3)>>3]}else{if(!b?-+h[(c[d+12>>2]|0)+(c[g>>2]<<3)>>3]>=+h[f>>3]:0)h[f>>3]=-+h[(c[d+12>>2]|0)+(c[g>>2]<<3)>>3];if(!(vb(d,c[g>>2]|0)|0)?+h[(c[d+12>>2]|0)+(c[g>>2]<<3)>>3]>=+h[e>>3]:0)h[e>>3]=+h[(c[d+12>>2]|0)+(c[g>>2]<<3)>>3]}c[g>>2]=(c[g>>2]|0)+1}if((a[d+72>>0]&1|0)==0?+h[e>>3]+ +h[f>>3]<=+h[d+32>>3]*10.0:0){a[d+72>>0]=1;wb(d);c[d+4>>2]=c[d+68>>2];xb(1310,i)}c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[d+4>>2]|0))break;a:do if(yb(d,c[g>>2]|0,+h[e>>3],+h[f>>3])|0){do{k=d+4|0;c[k>>2]=(c[k>>2]|0)+-1;if((c[d+4>>2]|0)<=(c[g>>2]|0))break a}while(yb(d,c[d+4>>2]|0,+h[e>>3],+h[f>>3])|0);zb(d,c[g>>2]|0,c[d+4>>2]|0)}while(0);c[g>>2]=(c[g>>2]|0)+1}l=j;return}function ub(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g+4|0;e=g;c[f>>2]=b;c[e>>2]=d;l=g;return (a[(c[(c[f>>2]|0)+16>>2]|0)+(c[e>>2]|0)>>0]|0)==1|0}function vb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g+4|0;e=g;c[f>>2]=b;c[e>>2]=d;l=g;return (a[(c[(c[f>>2]|0)+16>>2]|0)+(c[e>>2]|0)>>0]|0)==0|0}function wb(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;j=k+8|0;m=k+24|0;e=k+28|0;f=k+20|0;i=k+16|0;b=k+12|0;d=k;c[m>>2]=a;a=c[m>>2]|0;if((c[a+4>>2]|0)==(c[a+68>>2]|0)){l=k;return}c[i>>2]=0;c[f>>2]=c[a+4>>2];while(1){if((c[f>>2]|0)>=(c[a+68>>2]|0))break;h[(c[a+12>>2]|0)+(c[f>>2]<<3)>>3]=+h[(c[a+64>>2]|0)+(c[f>>2]<<3)>>3]+ +h[(c[a+56>>2]|0)+(c[f>>2]<<3)>>3];c[f>>2]=(c[f>>2]|0)+1}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[a+4>>2]|0))break;if(Eb(a,c[f>>2]|0)|0)c[i>>2]=(c[i>>2]|0)+1;c[f>>2]=(c[f>>2]|0)+1}if((c[i>>2]<<1|0)<(c[a+4>>2]|0))xb(1312,j);m=S(c[i>>2]|0,c[a+68>>2]|0)|0;a:do if((m|0)>(S(c[a+4>>2]<<1,(c[a+68>>2]|0)-(c[a+4>>2]|0)|0)|0)){c[e>>2]=c[a+4>>2];while(1){if((c[e>>2]|0)>=(c[a+68>>2]|0))break a;m=c[a+24>>2]|0;c[b>>2]=Ma[c[c[m>>2]>>2]&15](m,c[e>>2]|0,c[a+4>>2]|0)|0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[a+4>>2]|0))break;if(Eb(a,c[f>>2]|0)|0){m=(c[a+12>>2]|0)+(c[e>>2]<<3)|0;h[m>>3]=+h[m>>3]+ +h[(c[a+20>>2]|0)+(c[f>>2]<<3)>>3]*+g[(c[b>>2]|0)+(c[f>>2]<<2)>>2]}c[f>>2]=(c[f>>2]|0)+1}c[e>>2]=(c[e>>2]|0)+1}}else{c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[a+4>>2]|0))break a;if(Eb(a,c[e>>2]|0)|0){m=c[a+24>>2]|0;c[b>>2]=Ma[c[c[m>>2]>>2]&15](m,c[e>>2]|0,c[a+68>>2]|0)|0;h[d>>3]=+h[(c[a+20>>2]|0)+(c[e>>2]<<3)>>3];c[f>>2]=c[a+4>>2];while(1){if((c[f>>2]|0)>=(c[a+68>>2]|0))break;m=(c[a+12>>2]|0)+(c[f>>2]<<3)|0;h[m>>3]=+h[m>>3]+ +h[d>>3]*+g[(c[b>>2]|0)+(c[f>>2]<<2)>>2];c[f>>2]=(c[f>>2]|0)+1}}c[e>>2]=(c[e>>2]|0)+1}}while(0);l=k;return}function xb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+1056|0;g=d+16|0;e=d+24|0;f=d;c[g>>2]=a;c[f>>2]=b;De(e,c[g>>2]|0,f)|0;Pa[c[64]&31](e);l=d;return}function yb(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;k=m+24|0;n=m+20|0;j=m+16|0;g=m+8|0;i=m;c[n>>2]=b;c[j>>2]=d;h[g>>3]=e;h[i>>3]=f;d=c[n>>2]|0;if(ub(d,c[j>>2]|0)|0){e=-+h[(c[d+12>>2]|0)+(c[j>>2]<<3)>>3];if((a[(c[d+8>>2]|0)+(c[j>>2]|0)>>0]|0)==1){a[k>>0]=e>+h[g>>3]&1;n=a[k>>0]|0;n=n&1;l=m;return n|0}else{a[k>>0]=e>+h[i>>3]&1;n=a[k>>0]|0;n=n&1;l=m;return n|0}}if(!(vb(d,c[j>>2]|0)|0)){a[k>>0]=0;n=a[k>>0]|0;n=n&1;l=m;return n|0}e=+h[(c[d+12>>2]|0)+(c[j>>2]<<3)>>3];if((a[(c[d+8>>2]|0)+(c[j>>2]|0)>>0]|0)==1){a[k>>0]=e>+h[i>>3]&1;n=a[k>>0]|0;n=n&1;l=m;return n|0}else{a[k>>0]=e>+h[g>>3]&1;n=a[k>>0]|0;n=n&1;l=m;return n|0}return 0}function zb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;a=c[h>>2]|0;d=c[a+24>>2]|0;Ra[c[(c[d>>2]|0)+8>>2]&7](d,c[g>>2]|0,c[f>>2]|0);Ab((c[a+8>>2]|0)+(c[g>>2]|0)|0,(c[a+8>>2]|0)+(c[f>>2]|0)|0);ob((c[a+12>>2]|0)+(c[g>>2]<<3)|0,(c[a+12>>2]|0)+(c[f>>2]<<3)|0);Bb((c[a+16>>2]|0)+(c[g>>2]|0)|0,(c[a+16>>2]|0)+(c[f>>2]|0)|0);ob((c[a+20>>2]|0)+(c[g>>2]<<3)|0,(c[a+20>>2]|0)+(c[f>>2]<<3)|0);ob((c[a+56>>2]|0)+(c[g>>2]<<3)|0,(c[a+56>>2]|0)+(c[f>>2]<<3)|0);Cb((c[a+60>>2]|0)+(c[g>>2]<<2)|0,(c[a+60>>2]|0)+(c[f>>2]<<2)|0);ob((c[a+64>>2]|0)+(c[g>>2]<<3)|0,(c[a+64>>2]|0)+(c[f>>2]<<3)|0);l=e;return}function Ab(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;g=e+8|0;c[h>>2]=b;c[f>>2]=d;a[g>>0]=a[c[h>>2]>>0]|0;a[c[h>>2]>>0]=a[c[f>>2]>>0]|0;a[c[f>>2]>>0]=a[g>>0]|0;l=e;return}function Bb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;g=e+8|0;c[h>>2]=b;c[f>>2]=d;a[g>>0]=a[c[h>>2]>>0]|0;a[c[h>>2]>>0]=a[c[f>>2]>>0]|0;a[c[f>>2]>>0]=a[g>>0]|0;l=e;return}function Cb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;f=d+8|0;c[g>>2]=a;c[e>>2]=b;c[f>>2]=c[c[g>>2]>>2];c[c[g>>2]>>2]=c[c[e>>2]>>2];c[c[e>>2]>>2]=c[f>>2];l=d;return}function Db(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;Qe(c[d>>2]|0,c[124]|0)|0;me(c[124]|0)|0;l=b;return}function Eb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g+4|0;e=g;c[f>>2]=b;c[e>>2]=d;l=g;return (a[(c[(c[f>>2]|0)+16>>2]|0)+(c[e>>2]|0)>>0]|0)==2|0}function Fb(a,b){a=+a;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;d=e+8|0;c=e;h[d>>3]=a;h[c>>3]=b;l=e;return +(+h[d>>3]<+h[c>>3]?+h[d>>3]:+h[c>>3])}function Gb(a,b){a=+a;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;d=e+8|0;c=e;h[d>>3]=a;h[c>>3]=b;l=e;return +(+h[d>>3]>+h[c>>3]?+h[d>>3]:+h[c>>3])}function Hb(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=c[d>>2]|0;pb(a);lf(a);l=b;return}function Ib(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=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;E=l;l=l+128|0;C=E+112|0;F=E+108|0;z=E+100|0;A=E+96|0;m=E+56|0;n=E+48|0;o=E+104|0;i=E+40|0;j=E+32|0;k=E+92|0;p=E+88|0;y=E+24|0;D=E+84|0;v=E+80|0;r=E+76|0;q=E+72|0;w=E+68|0;u=E+16|0;x=E+8|0;B=E;s=E+64|0;c[F>>2]=b;c[z>>2]=d;c[A>>2]=e;e=c[F>>2]|0;h[m>>3]=-t;h[n>>3]=-t;c[o>>2]=-1;h[i>>3]=-t;h[j>>3]=-t;c[k>>2]=-1;c[p>>2]=-1;h[y>>3]=t;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[e+4>>2]|0))break;d=c[D>>2]|0;if((a[(c[e+8>>2]|0)+(c[D>>2]|0)>>0]|0)==1){if(!(ub(e,d)|0)?-+h[(c[e+12>>2]|0)+(c[D>>2]<<3)>>3]>=+h[m>>3]:0){h[m>>3]=-+h[(c[e+12>>2]|0)+(c[D>>2]<<3)>>3];c[o>>2]=c[D>>2]}}else if(!(vb(e,d)|0)?+h[(c[e+12>>2]|0)+(c[D>>2]<<3)>>3]>=+h[i>>3]:0){h[i>>3]=+h[(c[e+12>>2]|0)+(c[D>>2]<<3)>>3];c[k>>2]=c[D>>2]}c[D>>2]=(c[D>>2]|0)+1}c[D>>2]=c[o>>2];c[v>>2]=c[k>>2];c[r>>2]=0;c[q>>2]=0;if((c[D>>2]|0)!=-1){F=c[e+24>>2]|0;c[r>>2]=Ma[c[c[F>>2]>>2]&15](F,c[D>>2]|0,c[e+4>>2]|0)|0}if((c[v>>2]|0)!=-1){F=c[e+24>>2]|0;c[q>>2]=Ma[c[c[F>>2]>>2]&15](F,c[v>>2]|0,c[e+4>>2]|0)|0}c[w>>2]=0;while(1){if((c[w>>2]|0)>=(c[e+4>>2]|0))break;d=c[w>>2]|0;if((a[(c[e+8>>2]|0)+(c[w>>2]|0)>>0]|0)==1){if(!(vb(e,d)|0)){h[u>>3]=+h[m>>3]+ +h[(c[e+12>>2]|0)+(c[w>>2]<<3)>>3];if(+h[(c[e+12>>2]|0)+(c[w>>2]<<3)>>3]>=+h[n>>3])h[n>>3]=+h[(c[e+12>>2]|0)+(c[w>>2]<<3)>>3];if(+h[u>>3]>0.0){h[B>>3]=+h[(c[e+28>>2]|0)+(c[D>>2]<<3)>>3]+ +h[(c[e+28>>2]|0)+(c[w>>2]<<3)>>3]-+g[(c[r>>2]|0)+(c[w>>2]<<2)>>2]*2.0;f=-(+h[u>>3]*+h[u>>3]);if(+h[B>>3]>0.0)h[x>>3]=f/+h[B>>3];else h[x>>3]=f/1.0e-12;if(+h[x>>3]<=+h[y>>3]){c[p>>2]=c[w>>2];h[y>>3]=+h[x>>3]}}}}else if(!(ub(e,d)|0)){h[u>>3]=+h[i>>3]-+h[(c[e+12>>2]|0)+(c[w>>2]<<3)>>3];if(-+h[(c[e+12>>2]|0)+(c[w>>2]<<3)>>3]>=+h[j>>3])h[j>>3]=-+h[(c[e+12>>2]|0)+(c[w>>2]<<3)>>3];if(+h[u>>3]>0.0){h[B>>3]=+h[(c[e+28>>2]|0)+(c[v>>2]<<3)>>3]+ +h[(c[e+28>>2]|0)+(c[w>>2]<<3)>>3]-+g[(c[q>>2]|0)+(c[w>>2]<<2)>>2]*2.0;f=-(+h[u>>3]*+h[u>>3]);if(+h[B>>3]>0.0)h[x>>3]=f/+h[B>>3];else h[x>>3]=f/1.0e-12;if(+h[x>>3]<=+h[y>>3]){c[p>>2]=c[w>>2];h[y>>3]=+h[x>>3]}}}c[w>>2]=(c[w>>2]|0)+1}f=+Gb(+h[m>>3]+ +h[n>>3],+h[i>>3]+ +h[j>>3]);if((c[p>>2]|0)==-1?1:f<+h[e+32>>3]){c[C>>2]=1;c[s>>2]=1;F=c[C>>2]|0;l=E;return F|0}if((a[(c[e+8>>2]|0)+(c[p>>2]|0)>>0]|0)==1)c[c[z>>2]>>2]=c[o>>2];else c[c[z>>2]>>2]=c[k>>2];c[c[A>>2]>>2]=c[p>>2];c[C>>2]=0;c[s>>2]=1;F=c[C>>2]|0;l=E;return F|0}function Jb(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,u=0.0;q=l;l=l+80|0;d=q+68|0;i=q+72|0;j=q+64|0;o=q+56|0;p=q+48|0;f=q+40|0;g=q+32|0;m=q+24|0;n=q+16|0;e=q+8|0;k=q;c[d>>2]=b;d=c[d>>2]|0;c[i>>2]=0;c[j>>2]=0;h[o>>3]=t;h[p>>3]=t;h[f>>3]=-t;h[g>>3]=-t;h[m>>3]=0.0;h[n>>3]=0.0;c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[d+4>>2]|0))break;r=(a[(c[d+8>>2]|0)+(c[e>>2]|0)>>0]|0)==1;b=ub(d,c[e>>2]|0)|0;do if(r){if(b){h[f>>3]=+Gb(+h[f>>3],+h[(c[d+12>>2]|0)+(c[e>>2]<<3)>>3]);break}if(vb(d,c[e>>2]|0)|0){h[o>>3]=+Fb(+h[o>>3],+h[(c[d+12>>2]|0)+(c[e>>2]<<3)>>3]);break}else{c[i>>2]=(c[i>>2]|0)+1;h[m>>3]=+h[m>>3]+ +h[(c[d+12>>2]|0)+(c[e>>2]<<3)>>3];break}}else{if(b){h[g>>3]=+Gb(+h[g>>3],+h[(c[d+12>>2]|0)+(c[e>>2]<<3)>>3]);break}if(vb(d,c[e>>2]|0)|0){h[p>>3]=+Fb(+h[p>>3],+h[(c[d+12>>2]|0)+(c[e>>2]<<3)>>3]);break}else{c[j>>2]=(c[j>>2]|0)+1;h[n>>3]=+h[n>>3]+ +h[(c[d+12>>2]|0)+(c[e>>2]<<3)>>3];break}}while(0);c[e>>2]=(c[e>>2]|0)+1}if((c[i>>2]|0)>0)h[e>>3]=+h[m>>3]/+(c[i>>2]|0);else h[e>>3]=(+h[o>>3]+ +h[f>>3])/2.0;if((c[j>>2]|0)>0){h[k>>3]=+h[n>>3]/+(c[j>>2]|0);s=+h[e>>3];u=+h[k>>3];u=s+u;u=u/2.0;r=d+76|0;r=c[r>>2]|0;r=r+32|0;h[r>>3]=u;u=+h[e>>3];s=+h[k>>3];s=u-s;s=s/2.0;l=q;return +s}else{h[k>>3]=(+h[p>>3]+ +h[g>>3])/2.0;u=+h[e>>3];s=+h[k>>3];s=u+s;s=s/2.0;r=d+76|0;r=c[r>>2]|0;r=r+32|0;h[r>>3]=s;s=+h[e>>3];u=+h[k>>3];u=s-u;u=u/2.0;l=q;return +u}return 0.0}function Kb(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;e=m+36|0;f=m+24|0;g=m+16|0;i=m+8|0;j=m;k=m+32|0;c[e>>2]=b;e=c[e>>2]|0;h[f>>3]=-t;h[g>>3]=-t;h[i>>3]=-t;h[j>>3]=-t;c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[e+4>>2]|0))break;do if(!(ub(e,c[k>>2]|0)|0)){d=-+h[(c[e+12>>2]|0)+(c[k>>2]<<3)>>3];if((a[(c[e+8>>2]|0)+(c[k>>2]|0)>>0]|0)==1){if(!(d>+h[f>>3]))break;h[f>>3]=-+h[(c[e+12>>2]|0)+(c[k>>2]<<3)>>3];break}else{if(!(d>+h[j>>3]))break;h[j>>3]=-+h[(c[e+12>>2]|0)+(c[k>>2]<<3)>>3];break}}while(0);do if(!(vb(e,c[k>>2]|0)|0)){d=+h[(c[e+12>>2]|0)+(c[k>>2]<<3)>>3];if((a[(c[e+8>>2]|0)+(c[k>>2]|0)>>0]|0)==1){if(!(d>+h[g>>3]))break;h[g>>3]=+h[(c[e+12>>2]|0)+(c[k>>2]<<3)>>3];break}else{if(!(d>+h[i>>3]))break;h[i>>3]=+h[(c[e+12>>2]|0)+(c[k>>2]<<3)>>3];break}}while(0);c[k>>2]=(c[k>>2]|0)+1}if((a[e+72>>0]&1|0)==0?(d=+Gb(+h[f>>3]+ +h[g>>3],+h[i>>3]+ +h[j>>3]),d<=+h[e+32>>3]*10.0):0){a[e+72>>0]=1;wb(e);c[e+4>>2]=c[e+68>>2]}c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[e+4>>2]|0))break;a:do if(Lb(e,c[k>>2]|0,+h[f>>3],+h[g>>3],+h[i>>3],+h[j>>3])|0){b=e;while(1){b=b+4|0;c[b>>2]=(c[b>>2]|0)+-1;if((c[e+4>>2]|0)<=(c[k>>2]|0))break a;if(Lb(e,c[e+4>>2]|0,+h[f>>3],+h[g>>3],+h[i>>3],+h[j>>3])|0)b=e;else break}zb(e,c[k>>2]|0,c[e+4>>2]|0)}while(0);c[k>>2]=(c[k>>2]|0)+1}l=m;return}function Lb(b,d,e,f,g,i){b=b|0;d=d|0;e=+e;f=+f;g=+g;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+48|0;p=q+40|0;r=q+36|0;o=q+32|0;j=q+24|0;k=q+16|0;m=q+8|0;n=q;c[r>>2]=b;c[o>>2]=d;h[j>>3]=e;h[k>>3]=f;h[m>>3]=g;h[n>>3]=i;d=c[r>>2]|0;if(ub(d,c[o>>2]|0)|0){e=-+h[(c[d+12>>2]|0)+(c[o>>2]<<3)>>3];if((a[(c[d+8>>2]|0)+(c[o>>2]|0)>>0]|0)==1){a[p>>0]=e>+h[j>>3]&1;r=a[p>>0]|0;r=r&1;l=q;return r|0}else{a[p>>0]=e>+h[n>>3]&1;r=a[p>>0]|0;r=r&1;l=q;return r|0}}if(!(vb(d,c[o>>2]|0)|0)){a[p>>0]=0;r=a[p>>0]|0;r=r&1;l=q;return r|0}e=+h[(c[d+12>>2]|0)+(c[o>>2]<<3)>>3];if((a[(c[d+8>>2]|0)+(c[o>>2]|0)>>0]|0)==1){a[p>>0]=e>+h[k>>3]&1;r=a[p>>0]|0;r=r&1;l=q;return r|0}else{a[p>>0]=e>+h[m>>3]&1;r=a[p>>0]|0;r=r&1;l=q;return r|0}return 0}function Mb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;a=c[h>>2]|0;c[a>>2]=c[g>>2];c[a+4>>2]=c[f>>2];c[a+8>>2]=ef(c[a>>2]|0,16)|0;d=a+4|0;c[d>>2]=((c[d>>2]|0)>>>0)/4|0;d=a+4|0;c[d>>2]=(c[d>>2]|0)-((c[a>>2]<<4>>>0)/4|0);c[a+4>>2]=Nb(c[a+4>>2]|0,c[a>>2]<<1)|0;d=a+12|0;c[a+12>>2]=d;c[a+12+4>>2]=d;l=e;return}function Nb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f+4|0;d=f;c[e>>2]=a;c[d>>2]=b;l=f;return ((c[e>>2]|0)>(c[d>>2]|0)?c[e>>2]|0:c[d>>2]|0)|0}function Ob(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;e=d;b=d+4|0;c[e>>2]=a;a=c[e>>2]|0;c[b>>2]=c[a+12+4>>2];while(1){if((c[b>>2]|0)==(a+12|0))break;df(c[(c[b>>2]|0)+8>>2]|0);c[b>>2]=c[(c[b>>2]|0)+4>>2]}df(c[a+8>>2]|0);l=d;return}function Pb(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[d+4>>2]=a;c[e>>2]=b;c[(c[c[e>>2]>>2]|0)+4>>2]=c[(c[e>>2]|0)+4>>2];c[c[(c[e>>2]|0)+4>>2]>>2]=c[c[e>>2]>>2];l=d;return}function Qb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=c[f>>2]|0;c[(c[e>>2]|0)+4>>2]=a+12;c[c[e>>2]>>2]=c[a+12>>2];c[(c[c[e>>2]>>2]|0)+4>>2]=c[e>>2];c[c[(c[e>>2]|0)+4>>2]>>2]=c[e>>2];l=d;return}function Rb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+32|0;n=k+20|0;m=k+12|0;f=k+4|0;h=k;g=k+24|0;i=k+16|0;j=k+8|0;c[n>>2]=a;c[m>>2]=b;c[f>>2]=d;c[h>>2]=e;d=c[n>>2]|0;c[g>>2]=(c[d+8>>2]|0)+(c[m>>2]<<4);if(c[(c[g>>2]|0)+12>>2]|0)Pb(d,c[g>>2]|0);c[i>>2]=(c[h>>2]|0)-(c[(c[g>>2]|0)+12>>2]|0);if((c[i>>2]|0)<=0){m=c[g>>2]|0;Qb(d,m);m=c[g>>2]|0;m=m+8|0;m=c[m>>2]|0;n=c[f>>2]|0;c[n>>2]=m;n=c[h>>2]|0;l=k;return n|0}while(1){if((c[d+4>>2]|0)>=(c[i>>2]|0))break;c[j>>2]=c[d+12+4>>2];Pb(d,c[j>>2]|0);df(c[(c[j>>2]|0)+8>>2]|0);n=d+4|0;c[n>>2]=(c[n>>2]|0)+(c[(c[j>>2]|0)+12>>2]|0);c[(c[j>>2]|0)+8>>2]=0;c[(c[j>>2]|0)+12>>2]=0}m=ff(c[(c[g>>2]|0)+8>>2]|0,c[h>>2]<<2)|0;c[(c[g>>2]|0)+8>>2]=m;m=d+4|0;c[m>>2]=(c[m>>2]|0)-(c[i>>2]|0);Cb((c[g>>2]|0)+12|0,h);m=c[g>>2]|0;Qb(d,m);m=c[g>>2]|0;m=m+8|0;m=c[m>>2]|0;n=c[f>>2]|0;c[n>>2]=m;n=c[h>>2]|0;l=k;return n|0}function Sb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;i=h+8|0;f=h+4|0;g=h;e=h+12|0;c[i>>2]=a;c[f>>2]=b;c[g>>2]=d;d=c[i>>2]|0;if((c[f>>2]|0)==(c[g>>2]|0)){l=h;return}if(c[(c[d+8>>2]|0)+(c[f>>2]<<4)+12>>2]|0)Pb(d,(c[d+8>>2]|0)+(c[f>>2]<<4)|0);if(c[(c[d+8>>2]|0)+(c[g>>2]<<4)+12>>2]|0)Pb(d,(c[d+8>>2]|0)+(c[g>>2]<<4)|0);Tb((c[d+8>>2]|0)+(c[f>>2]<<4)+8|0,(c[d+8>>2]|0)+(c[g>>2]<<4)+8|0);Cb((c[d+8>>2]|0)+(c[f>>2]<<4)+12|0,(c[d+8>>2]|0)+(c[g>>2]<<4)+12|0);if(c[(c[d+8>>2]|0)+(c[f>>2]<<4)+12>>2]|0)Qb(d,(c[d+8>>2]|0)+(c[f>>2]<<4)|0);if(c[(c[d+8>>2]|0)+(c[g>>2]<<4)+12>>2]|0)Qb(d,(c[d+8>>2]|0)+(c[g>>2]<<4)|0);if((c[f>>2]|0)>(c[g>>2]|0))Cb(f,g);c[e>>2]=c[d+12+4>>2];while(1){if((c[e>>2]|0)==(d+12|0))break;do if((c[(c[e>>2]|0)+12>>2]|0)>(c[f>>2]|0)){b=c[e>>2]|0;if((c[(c[e>>2]|0)+12>>2]|0)>(c[g>>2]|0)){Ub((c[b+8>>2]|0)+(c[f>>2]<<2)|0,(c[(c[e>>2]|0)+8>>2]|0)+(c[g>>2]<<2)|0);break}else{Pb(d,b);df(c[(c[e>>2]|0)+8>>2]|0);i=d+4|0;c[i>>2]=(c[i>>2]|0)+(c[(c[e>>2]|0)+12>>2]|0);c[(c[e>>2]|0)+8>>2]=0;c[(c[e>>2]|0)+12>>2]=0;break}}while(0);c[e>>2]=c[(c[e>>2]|0)+4>>2]}l=h;return}function Tb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;f=d+8|0;c[g>>2]=a;c[e>>2]=b;c[f>>2]=c[c[g>>2]>>2];c[c[g>>2]>>2]=c[c[e>>2]>>2];c[c[e>>2]>>2]=c[f>>2];l=d;return}function Ub(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d+4|0;e=d;f=d+8|0;c[h>>2]=a;c[e>>2]=b;g[f>>2]=+g[c[h>>2]>>2];g[c[h>>2]>>2]=+g[c[e>>2]>>2];g[c[e>>2]>>2]=+g[f>>2];l=d;return}function Vb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;k=l;l=l+32|0;n=k+12|0;g=k+8|0;i=k+4|0;m=k;f=k+16|0;c[n>>2]=a;c[g>>2]=b;c[i>>2]=d;c[m>>2]=e;a=c[n>>2]|0;Wb(a);c[a>>2]=208;c[a+20>>2]=c[(c[m>>2]|0)+4>>2];c[a+24>>2]=c[(c[m>>2]|0)+8>>2];h[a+32>>3]=+h[(c[m>>2]|0)+16>>3];h[a+40>>3]=+h[(c[m>>2]|0)+24>>3];switch(c[a+20>>2]|0){case 0:{b=2;e=0;j=6;break}case 1:{b=1;e=0;j=6;break}case 2:{b=3;e=0;j=6;break}case 3:{b=4;e=0;j=6;break}case 4:{b=5;e=0;j=6;break}default:{}}if((j|0)==6){n=a+4|0;c[n>>2]=b;c[n+4>>2]=e}ac(a+12|0,c[i>>2]|0,c[g>>2]|0);if((c[a+20>>2]|0)!=2){c[a+16>>2]=0;l=k;return}n=c[g>>2]|0;c[a+16>>2]=kf(n>>>0>536870911?-1:n<<3)|0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[g>>2]|0))break;o=+bc(c[(c[a+12>>2]|0)+(c[f>>2]<<2)>>2]|0,c[(c[a+12>>2]|0)+(c[f>>2]<<2)>>2]|0);h[(c[a+16>>2]|0)+(c[f>>2]<<3)>>3]=o;c[f>>2]=(c[f>>2]|0)+1}l=k;return}function Wb(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[c[d>>2]>>2]=296;l=b;return}function Xb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;h=f+4|0;g=f;c[i>>2]=a;c[h>>2]=b;c[g>>2]=d;a=c[i>>2]|0;e=+bc(c[(c[a+12>>2]|0)+(c[h>>2]<<2)>>2]|0,c[(c[a+12>>2]|0)+(c[g>>2]<<2)>>2]|0);l=f;return +e}function Yb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f+4|0;g=f;c[j>>2]=a;c[i>>2]=b;c[g>>2]=d;a=c[j>>2]|0;e=+h[a+32>>3];e=e*+bc(c[(c[a+12>>2]|0)+(c[i>>2]<<2)>>2]|0,c[(c[a+12>>2]|0)+(c[g>>2]<<2)>>2]|0);e=+dc(e+ +h[a+40>>3],c[a+24>>2]|0);l=f;return +e}function Zb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0.0,k=0;f=l;l=l+16|0;k=f+8|0;i=f+4|0;g=f;c[k>>2]=a;c[i>>2]=b;c[g>>2]=d;a=c[k>>2]|0;j=-+h[a+32>>3];e=+h[(c[a+16>>2]|0)+(c[i>>2]<<3)>>3]+ +h[(c[a+16>>2]|0)+(c[g>>2]<<3)>>3];e=+P(+(j*(e-+bc(c[(c[a+12>>2]|0)+(c[i>>2]<<2)>>2]|0,c[(c[a+12>>2]|0)+(c[g>>2]<<2)>>2]|0)*2.0)));l=f;return +e}function _b(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f+4|0;g=f;c[j>>2]=a;c[i>>2]=b;c[g>>2]=d;a=c[j>>2]|0;e=+h[a+32>>3];e=e*+bc(c[(c[a+12>>2]|0)+(c[i>>2]<<2)>>2]|0,c[(c[a+12>>2]|0)+(c[g>>2]<<2)>>2]|0);e=+af(e+ +h[a+40>>3]);l=f;return +e}function $b(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;g=l;l=l+16|0;i=g+8|0;f=g+4|0;e=g;c[i>>2]=a;c[f>>2]=b;c[e>>2]=d;a=c[i>>2]|0;l=g;return +(+h[(c[(c[a+12>>2]|0)+(c[f>>2]<<2)>>2]|0)+(~~+h[(c[(c[a+12>>2]|0)+(c[e>>2]<<2)>>2]|0)+8>>3]<<4)+8>>3])}function ac(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;b=c[f>>2]|0;b=kf(b>>>0>1073741823?-1:b<<2)|0;c[c[h>>2]>>2]=b;Wf(c[c[h>>2]>>2]|0,c[g>>2]|0,c[f>>2]<<2|0)|0;l=e;return}function bc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+12|0;e=g+8|0;f=g;c[d>>2]=a;c[e>>2]=b;h[f>>3]=0.0;while(1){if((c[c[d>>2]>>2]|0)==-1){a=9;break}if((c[c[e>>2]>>2]|0)==-1){a=9;break}a=c[d>>2]|0;if((c[c[d>>2]>>2]|0)==(c[c[e>>2]>>2]|0)){h[f>>3]=+h[f>>3]+ +h[a+8>>3]*+h[(c[e>>2]|0)+8>>3];c[d>>2]=(c[d>>2]|0)+16;c[e>>2]=(c[e>>2]|0)+16;continue}if((c[a>>2]|0)>(c[c[e>>2]>>2]|0)){c[e>>2]=(c[e>>2]|0)+16;continue}else{c[d>>2]=(c[d>>2]|0)+16;continue}}if((a|0)==9){l=g;return +(+h[f>>3])}return +(0.0)}function cc(a){a=a|0;qa(a|0)|0;Kf()}function dc(a,b){a=+a;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;g=l;l=l+32|0;j=g+8|0;i=g+28|0;f=g+16|0;d=g;e=g+24|0;h[j>>3]=a;c[i>>2]=b;h[f>>3]=+h[j>>3];h[d>>3]=1.0;c[e>>2]=c[i>>2];while(1){if((c[e>>2]|0)<=0)break;if(((c[e>>2]|0)%2|0|0)==1)h[d>>3]=+h[d>>3]*+h[f>>3];h[f>>3]=+h[f>>3]*+h[f>>3];c[e>>2]=(c[e>>2]|0)/2|0}l=g;return +(+h[d>>3])}function ec(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=c[d>>2]|0;mb(a);lf(a);l=b;return}function fc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;g=m+8|0;j=m+32|0;k=m+28|0;f=m+24|0;i=m+16|0;e=m;c[j>>2]=a;c[k>>2]=b;c[f>>2]=d;switch(c[(c[f>>2]|0)+4>>2]|0){case 0:{h[g>>3]=+bc(c[j>>2]|0,c[k>>2]|0);n=+h[g>>3];l=m;return +n}case 1:{h[g>>3]=+dc(+h[(c[f>>2]|0)+16>>3]*+bc(c[j>>2]|0,c[k>>2]|0)+ +h[(c[f>>2]|0)+24>>3],c[(c[f>>2]|0)+8>>2]|0);n=+h[g>>3];l=m;return +n}case 2:{h[i>>3]=0.0;while(1){if((c[c[j>>2]>>2]|0)==-1)break;if((c[c[k>>2]>>2]|0)==-1)break;if((c[c[j>>2]>>2]|0)==(c[c[k>>2]>>2]|0)){h[e>>3]=+h[(c[j>>2]|0)+8>>3]-+h[(c[k>>2]|0)+8>>3];h[i>>3]=+h[i>>3]+ +h[e>>3]*+h[e>>3];c[j>>2]=(c[j>>2]|0)+16;c[k>>2]=(c[k>>2]|0)+16;continue}if((c[c[j>>2]>>2]|0)>(c[c[k>>2]>>2]|0)){h[i>>3]=+h[i>>3]+ +h[(c[k>>2]|0)+8>>3]*+h[(c[k>>2]|0)+8>>3];c[k>>2]=(c[k>>2]|0)+16;continue}else{h[i>>3]=+h[i>>3]+ +h[(c[j>>2]|0)+8>>3]*+h[(c[j>>2]|0)+8>>3];c[j>>2]=(c[j>>2]|0)+16;continue}}while(1){if((c[c[j>>2]>>2]|0)==-1)break;h[i>>3]=+h[i>>3]+ +h[(c[j>>2]|0)+8>>3]*+h[(c[j>>2]|0)+8>>3];c[j>>2]=(c[j>>2]|0)+16}while(1){if((c[c[k>>2]>>2]|0)==-1)break;h[i>>3]=+h[i>>3]+ +h[(c[k>>2]|0)+8>>3]*+h[(c[k>>2]|0)+8>>3];c[k>>2]=(c[k>>2]|0)+16}h[g>>3]=+P(+(-+h[(c[f>>2]|0)+16>>3]*+h[i>>3]));n=+h[g>>3];l=m;return +n}case 3:{n=+h[(c[f>>2]|0)+16>>3];n=n*+bc(c[j>>2]|0,c[k>>2]|0);h[g>>3]=+af(n+ +h[(c[f>>2]|0)+24>>3]);n=+h[g>>3];l=m;return +n}case 4:{h[g>>3]=+h[(c[j>>2]|0)+(~~+h[(c[k>>2]|0)+8>>3]<<4)+8>>3];n=+h[g>>3];l=m;return +n}default:{h[g>>3]=0.0;n=+h[g>>3];l=m;return +n}}return 0.0}function gc(b,d,e,f,i,j,k,m,n,o,p){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=+k;m=+m;n=+n;o=o|0;p=p|0;var 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;U=l;l=l+208|0;S=U+128|0;R=U+120|0;Q=U+112|0;P=U+104|0;O=U+96|0;Y=U+184|0;H=U+180|0;u=U+176|0;X=U+168|0;W=U+164|0;y=U+160|0;t=U+72|0;s=U+64|0;V=U+56|0;M=U+156|0;L=U+148|0;D=U+188|0;v=U+172|0;z=U+88|0;E=U+80|0;F=U+152|0;A=U+136|0;w=U+144|0;x=U+140|0;q=U+48|0;r=U+40|0;I=U+32|0;J=U+24|0;K=U+16|0;B=U+8|0;C=U;N=U+192|0;G=U+132|0;c[Y>>2]=b;c[H>>2]=d;c[u>>2]=e;c[X>>2]=f;c[W>>2]=i;c[y>>2]=j;h[t>>3]=k;h[s>>3]=m;h[V>>3]=n;c[M>>2]=o;c[L>>2]=p;j=c[Y>>2]|0;c[j+68>>2]=c[H>>2];c[j+24>>2]=c[u>>2];i=c[u>>2]|0;c[j+28>>2]=Qa[c[(c[i>>2]|0)+4>>2]&7](i)|0;hc(j+56|0,c[X>>2]|0,c[H>>2]|0);ic(j+8|0,c[W>>2]|0,c[H>>2]|0);jc(j+20|0,c[y>>2]|0,c[H>>2]|0);h[j+40>>3]=+h[t>>3];h[j+48>>3]=+h[s>>3];h[j+32>>3]=+h[V>>3];a[j+72>>0]=0;i=c[H>>2]|0;c[j+16>>2]=kf((i|0)<0?-1:i)|0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[H>>2]|0))break;kc(j,c[D>>2]|0);c[D>>2]=(c[D>>2]|0)+1}Y=c[H>>2]|0;c[j+60>>2]=kf(Y>>>0>1073741823?-1:Y<<2)|0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[H>>2]|0))break;c[(c[j+60>>2]|0)+(c[D>>2]<<2)>>2]=c[D>>2];c[D>>2]=(c[D>>2]|0)+1}c[j+4>>2]=c[H>>2];Y=c[H>>2]|0;c[j+12>>2]=kf(Y>>>0>536870911?-1:Y<<3)|0;Y=c[H>>2]|0;c[j+64>>2]=kf(Y>>>0>536870911?-1:Y<<3)|0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[H>>2]|0))break;h[(c[j+12>>2]|0)+(c[D>>2]<<3)>>3]=+h[(c[j+56>>2]|0)+(c[D>>2]<<3)>>3];h[(c[j+64>>2]|0)+(c[D>>2]<<3)>>3]=0.0;c[D>>2]=(c[D>>2]|0)+1}c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[H>>2]|0))break;if(!(vb(j,c[D>>2]|0)|0)){Y=c[u>>2]|0;c[v>>2]=Ma[c[c[Y>>2]>>2]&15](Y,c[D>>2]|0,c[H>>2]|0)|0;h[z>>3]=+h[(c[j+20>>2]|0)+(c[D>>2]<<3)>>3];c[E>>2]=0;while(1){if((c[E>>2]|0)>=(c[H>>2]|0))break;Y=(c[j+12>>2]|0)+(c[E>>2]<<3)|0;h[Y>>3]=+h[Y>>3]+ +h[z>>3]*+g[(c[v>>2]|0)+(c[E>>2]<<2)>>2];c[E>>2]=(c[E>>2]|0)+1}a:do if(ub(j,c[D>>2]|0)|0){c[E>>2]=0;while(1){if((c[E>>2]|0)>=(c[H>>2]|0))break a;n=+lc(j,c[D>>2]|0);Y=(c[j+64>>2]|0)+(c[E>>2]<<3)|0;h[Y>>3]=+h[Y>>3]+n*+g[(c[v>>2]|0)+(c[E>>2]<<2)>>2];c[E>>2]=(c[E>>2]|0)+1}}while(0)}c[D>>2]=(c[D>>2]|0)+1}c[D>>2]=0;c[v>>2]=mc(1e7,(c[H>>2]|0)>21474836?2147483647:(c[H>>2]|0)*100|0)|0;c[z>>2]=(nc(c[H>>2]|0,1e3)|0)+1;do{if((c[D>>2]|0)>=(c[v>>2]|0))break;Y=(c[z>>2]|0)+-1|0;c[z>>2]=Y;if(!Y){c[z>>2]=nc(c[H>>2]|0,1e3)|0;if(c[L>>2]|0)Pa[c[(c[j>>2]|0)+16>>2]&31](j);xb(2831,O)}do if(Ma[c[(c[j>>2]|0)+8>>2]&15](j,E,F)|0){wb(j);c[j+4>>2]=c[H>>2];xb(1310,P);if(Ma[c[(c[j>>2]|0)+8>>2]&15](j,E,F)|0){c[A>>2]=21;break}else{c[z>>2]=1;T=32;break}}else T=32;while(0);if((T|0)==32){T=0;c[D>>2]=(c[D>>2]|0)+1;Y=c[u>>2]|0;c[w>>2]=Ma[c[c[Y>>2]>>2]&15](Y,c[E>>2]|0,c[j+4>>2]|0)|0;Y=c[u>>2]|0;c[x>>2]=Ma[c[c[Y>>2]>>2]&15](Y,c[F>>2]|0,c[j+4>>2]|0)|0;h[q>>3]=+lc(j,c[E>>2]|0);h[r>>3]=+lc(j,c[F>>2]|0);h[I>>3]=+h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3];h[J>>3]=+h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3];if((a[(c[j+8>>2]|0)+(c[E>>2]|0)>>0]|0)!=(a[(c[j+8>>2]|0)+(c[F>>2]|0)>>0]|0)){h[K>>3]=+h[(c[j+28>>2]|0)+(c[E>>2]<<3)>>3]+ +h[(c[j+28>>2]|0)+(c[F>>2]<<3)>>3]+ +g[(c[w>>2]|0)+(c[F>>2]<<2)>>2]*2.0;if(+h[K>>3]<=0.0)h[K>>3]=1.0e-12;h[B>>3]=(-+h[(c[j+12>>2]|0)+(c[E>>2]<<3)>>3]-+h[(c[j+12>>2]|0)+(c[F>>2]<<3)>>3])/+h[K>>3];h[C>>3]=+h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]-+h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3];e=(c[j+20>>2]|0)+(c[E>>2]<<3)|0;h[e>>3]=+h[e>>3]+ +h[B>>3];e=(c[j+20>>2]|0)+(c[F>>2]<<3)|0;h[e>>3]=+h[e>>3]+ +h[B>>3];e=c[j+20>>2]|0;if(+h[C>>3]>0.0){if(+h[e+(c[F>>2]<<3)>>3]<0.0){h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]=0.0;h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]=+h[C>>3]}}else if(+h[e+(c[E>>2]<<3)>>3]<0.0){h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]=0.0;h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]=-+h[C>>3]}e=c[j+20>>2]|0;if(+h[C>>3]>+h[q>>3]-+h[r>>3]){if(+h[e+(c[E>>2]<<3)>>3]>+h[q>>3]){h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]=+h[q>>3];h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]=+h[q>>3]-+h[C>>3]}}else if(+h[e+(c[F>>2]<<3)>>3]>+h[r>>3]){h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]=+h[r>>3];h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]=+h[r>>3]+ +h[C>>3]}}else{h[K>>3]=+h[(c[j+28>>2]|0)+(c[E>>2]<<3)>>3]+ +h[(c[j+28>>2]|0)+(c[F>>2]<<3)>>3]-+g[(c[w>>2]|0)+(c[F>>2]<<2)>>2]*2.0;if(+h[K>>3]<=0.0)h[K>>3]=1.0e-12;h[B>>3]=(+h[(c[j+12>>2]|0)+(c[E>>2]<<3)>>3]-+h[(c[j+12>>2]|0)+(c[F>>2]<<3)>>3])/+h[K>>3];h[C>>3]=+h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]+ +h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3];e=(c[j+20>>2]|0)+(c[E>>2]<<3)|0;h[e>>3]=+h[e>>3]-+h[B>>3];e=(c[j+20>>2]|0)+(c[F>>2]<<3)|0;h[e>>3]=+h[e>>3]+ +h[B>>3];e=c[j+20>>2]|0;if(+h[C>>3]>+h[q>>3]){if(+h[e+(c[E>>2]<<3)>>3]>+h[q>>3]){h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]=+h[q>>3];h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]=+h[C>>3]-+h[q>>3]}}else if(+h[e+(c[F>>2]<<3)>>3]<0.0){h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]=0.0;h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]=+h[C>>3]}e=c[j+20>>2]|0;if(+h[C>>3]>+h[r>>3]){if(+h[e+(c[F>>2]<<3)>>3]>+h[r>>3]){h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]=+h[r>>3];h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]=+h[C>>3]-+h[r>>3]}}else if(+h[e+(c[E>>2]<<3)>>3]<0.0){h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]=0.0;h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]=+h[C>>3]}}h[K>>3]=+h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3]-+h[I>>3];h[B>>3]=+h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]-+h[J>>3];c[C>>2]=0;while(1){if((c[C>>2]|0)>=(c[j+4>>2]|0))break;Y=(c[j+12>>2]|0)+(c[C>>2]<<3)|0;h[Y>>3]=+h[Y>>3]+(+g[(c[w>>2]|0)+(c[C>>2]<<2)>>2]*+h[K>>3]+ +g[(c[x>>2]|0)+(c[C>>2]<<2)>>2]*+h[B>>3]);c[C>>2]=(c[C>>2]|0)+1}c[A>>2]=22;a[C>>0]=(ub(j,c[E>>2]|0)|0)&1;a[N>>0]=(ub(j,c[F>>2]|0)|0)&1;kc(j,c[E>>2]|0);kc(j,c[F>>2]|0);Y=a[C>>0]&1;b:do if((Y|0)!=((ub(j,c[E>>2]|0)|0)&1|0)){Y=c[u>>2]|0;c[w>>2]=Ma[c[c[Y>>2]>>2]&15](Y,c[E>>2]|0,c[H>>2]|0)|0;Y=a[C>>0]&1;c[G>>2]=0;if(Y)while(1){if((c[G>>2]|0)>=(c[H>>2]|0))break b;Y=(c[j+64>>2]|0)+(c[G>>2]<<3)|0;h[Y>>3]=+h[Y>>3]-+h[q>>3]*+g[(c[w>>2]|0)+(c[G>>2]<<2)>>2];c[G>>2]=(c[G>>2]|0)+1}else while(1){if((c[G>>2]|0)>=(c[H>>2]|0))break b;Y=(c[j+64>>2]|0)+(c[G>>2]<<3)|0;h[Y>>3]=+h[Y>>3]+ +h[q>>3]*+g[(c[w>>2]|0)+(c[G>>2]<<2)>>2];c[G>>2]=(c[G>>2]|0)+1}}while(0);Y=a[N>>0]&1;c:do if((Y|0)!=((ub(j,c[F>>2]|0)|0)&1|0)){Y=c[u>>2]|0;c[x>>2]=Ma[c[c[Y>>2]>>2]&15](Y,c[F>>2]|0,c[H>>2]|0)|0;Y=a[N>>0]&1;c[G>>2]=0;if(Y)while(1){if((c[G>>2]|0)>=(c[H>>2]|0))break c;Y=(c[j+64>>2]|0)+(c[G>>2]<<3)|0;h[Y>>3]=+h[Y>>3]-+h[r>>3]*+g[(c[x>>2]|0)+(c[G>>2]<<2)>>2];c[G>>2]=(c[G>>2]|0)+1}else while(1){if((c[G>>2]|0)>=(c[H>>2]|0))break c;Y=(c[j+64>>2]|0)+(c[G>>2]<<3)|0;h[Y>>3]=+h[Y>>3]+ +h[r>>3]*+g[(c[x>>2]|0)+(c[G>>2]<<2)>>2];c[G>>2]=(c[G>>2]|0)+1}}while(0);c[A>>2]=0}}while((c[A>>2]|0)>>>0<1);if((c[D>>2]|0)>=(c[v>>2]|0)){if((c[j+4>>2]|0)<(c[H>>2]|0)){wb(j);c[j+4>>2]=c[H>>2];xb(1310,Q)}Ee(c[218]|0,1367,R)|0}n=+Oa[c[(c[j>>2]|0)+12>>2]&3](j);h[(c[M>>2]|0)+8>>3]=n;h[E>>3]=0.0;c[F>>2]=0;while(1){if((c[F>>2]|0)>=(c[H>>2]|0))break;h[E>>3]=+h[E>>3]+ +h[(c[j+20>>2]|0)+(c[F>>2]<<3)>>3]*(+h[(c[j+12>>2]|0)+(c[F>>2]<<3)>>3]+ +h[(c[j+56>>2]|0)+(c[F>>2]<<3)>>3]);c[F>>2]=(c[F>>2]|0)+1}h[c[M>>2]>>3]=+h[E>>3]/2.0;c[E>>2]=0;while(1){if((c[E>>2]|0)>=(c[H>>2]|0))break;h[(c[y>>2]|0)+(c[(c[j+60>>2]|0)+(c[E>>2]<<2)>>2]<<3)>>3]=+h[(c[j+20>>2]|0)+(c[E>>2]<<3)>>3];c[E>>2]=(c[E>>2]|0)+1}c[A>>2]=40;h[(c[M>>2]|0)+16>>3]=+h[t>>3];h[(c[M>>2]|0)+24>>3]=+h[s>>3];c[S>>2]=c[D>>2];xb(1412,S);e=c[j+56>>2]|0;if(e|0)mf(e);e=c[j+8>>2]|0;if(e|0)mf(e);e=c[j+20>>2]|0;if(e|0)mf(e);e=c[j+16>>2]|0;if(e|0)mf(e);e=c[j+60>>2]|0;if(e|0)mf(e);e=c[j+12>>2]|0;if(e|0)mf(e);e=c[j+64>>2]|0;if(!e){l=U;return}mf(e);l=U;return}function hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;b=c[f>>2]|0;b=kf(b>>>0>536870911?-1:b<<3)|0;c[c[h>>2]>>2]=b;Wf(c[c[h>>2]>>2]|0,c[g>>2]|0,c[f>>2]<<3|0)|0;l=e;return}function ic(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;b=c[f>>2]|0;b=kf((b|0)<0?-1:b)|0;c[c[h>>2]>>2]=b;Wf(c[c[h>>2]>>2]|0,c[g>>2]|0,c[f>>2]|0)|0;l=e;return}function jc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;b=c[f>>2]|0;b=kf(b>>>0>536870911?-1:b<<3)|0;c[c[h>>2]>>2]=b;Wf(c[c[h>>2]>>2]|0,c[g>>2]|0,c[f>>2]<<3|0)|0;l=e;return}function kc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0;f=l;l=l+16|0;i=f+4|0;e=f;c[i>>2]=b;c[e>>2]=d;d=c[i>>2]|0;g=+h[(c[d+20>>2]|0)+(c[e>>2]<<3)>>3];if(g>=+lc(d,c[e>>2]|0)){a[(c[d+16>>2]|0)+(c[e>>2]|0)>>0]=1;l=f;return}else{a[(c[d+16>>2]|0)+(c[e>>2]|0)>>0]=+h[(c[d+20>>2]|0)+(c[e>>2]<<3)>>3]<=0.0?0:2;l=f;return}}function lc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;g=f+4|0;e=f;c[g>>2]=b;c[e>>2]=d;b=c[g>>2]|0;l=f;return +(+h[((a[(c[b+8>>2]|0)+(c[e>>2]|0)>>0]|0)>0?b+40|0:b+48|0)>>3])}function mc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f+4|0;d=f;c[e>>2]=a;c[d>>2]=b;l=f;return ((c[e>>2]|0)>(c[d>>2]|0)?c[e>>2]|0:c[d>>2]|0)|0}function nc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f+4|0;d=f;c[e>>2]=a;c[d>>2]=b;l=f;return ((c[e>>2]|0)<(c[d>>2]|0)?c[e>>2]|0:c[d>>2]|0)|0}function oc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=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,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0;L=l;l=l+160|0;J=L+48|0;x=L+40|0;w=L+32|0;H=L+148|0;p=L+144|0;K=L+152|0;A=L+16|0;G=L+140|0;C=L+136|0;E=L+132|0;i=L+128|0;q=L+124|0;z=L+120|0;D=L+116|0;y=L+112|0;k=L+108|0;B=L+104|0;r=L+100|0;s=L+96|0;o=L+92|0;j=L+88|0;I=L+76|0;u=L+72|0;v=L+68|0;f=L+64|0;g=L+60|0;m=L+56|0;t=L;n=L+52|0;c[H>>2]=b;c[p>>2]=d;c[K>>2]=cf(144)|0;d=c[K>>2]|0;b=c[p>>2]|0;e=d+96|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(e|0));c[(c[K>>2]|0)+136>>2]=0;if(((c[c[p>>2]>>2]|0)!=2?(c[c[p>>2]>>2]|0)!=3:0)?(c[c[p>>2]>>2]|0)!=4:0){c[A>>2]=c[c[H>>2]>>2];c[C>>2]=0;c[E>>2]=0;c[i>>2]=0;c[q>>2]=cf(c[A>>2]<<2)|0;rc(c[H>>2]|0,G,C,E,i,c[q>>2]|0);if((c[G>>2]|0)==1)xb(1448,w);c[z>>2]=cf(c[A>>2]<<2)|0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[A>>2]|0))break;c[(c[z>>2]|0)+(c[D>>2]<<2)>>2]=c[(c[(c[H>>2]|0)+8>>2]|0)+(c[(c[q>>2]|0)+(c[D>>2]<<2)>>2]<<2)>>2];c[D>>2]=(c[D>>2]|0)+1}c[y>>2]=cf(c[G>>2]<<3)|0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[G>>2]|0))break;h[(c[y>>2]|0)+(c[D>>2]<<3)>>3]=+h[(c[p>>2]|0)+48>>3];c[D>>2]=(c[D>>2]|0)+1}c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[(c[p>>2]|0)+56>>2]|0))break;c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[G>>2]|0))break;if((c[(c[(c[p>>2]|0)+60>>2]|0)+(c[D>>2]<<2)>>2]|0)==(c[(c[C>>2]|0)+(c[k>>2]<<2)>>2]|0))break;c[k>>2]=(c[k>>2]|0)+1}if((c[k>>2]|0)==(c[G>>2]|0)){H=c[218]|0;c[x>>2]=c[(c[(c[p>>2]|0)+60>>2]|0)+(c[D>>2]<<2)>>2];Ee(H,1515,x)|0}else{H=(c[y>>2]|0)+(c[k>>2]<<3)|0;h[H>>3]=+h[H>>3]*+h[(c[(c[p>>2]|0)+64>>2]|0)+(c[D>>2]<<3)>>3]}c[D>>2]=(c[D>>2]|0)+1}c[k>>2]=cf(c[A>>2]|0)|0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[A>>2]|0))break;a[(c[k>>2]|0)+(c[D>>2]|0)>>0]=0;c[D>>2]=(c[D>>2]|0)+1}c[B>>2]=cf(((S(c[G>>2]|0,(c[G>>2]|0)-1|0)|0)/2|0)<<4)|0;c[r>>2]=0;c[s>>2]=0;if(c[(c[p>>2]|0)+92>>2]|0){c[r>>2]=cf(((S(c[G>>2]|0,(c[G>>2]|0)-1|0)|0)/2|0)<<3)|0;c[s>>2]=cf(((S(c[G>>2]|0,(c[G>>2]|0)-1|0)|0)/2|0)<<3)|0}c[o>>2]=0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[G>>2]|0))break;c[j>>2]=(c[D>>2]|0)+1;while(1){if((c[j>>2]|0)>=(c[G>>2]|0))break;c[u>>2]=c[(c[E>>2]|0)+(c[D>>2]<<2)>>2];c[v>>2]=c[(c[E>>2]|0)+(c[j>>2]<<2)>>2];c[f>>2]=c[(c[i>>2]|0)+(c[D>>2]<<2)>>2];c[g>>2]=c[(c[i>>2]|0)+(c[j>>2]<<2)>>2];c[I>>2]=(c[f>>2]|0)+(c[g>>2]|0);c[I+8>>2]=cf(c[I>>2]<<2)|0;c[I+4>>2]=cf(c[I>>2]<<3)|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[f>>2]|0))break;c[(c[I+8>>2]|0)+(c[m>>2]<<2)>>2]=c[(c[z>>2]|0)+((c[u>>2]|0)+(c[m>>2]|0)<<2)>>2];h[(c[I+4>>2]|0)+(c[m>>2]<<3)>>3]=1.0;c[m>>2]=(c[m>>2]|0)+1}c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[g>>2]|0))break;c[(c[I+8>>2]|0)+((c[f>>2]|0)+(c[m>>2]|0)<<2)>>2]=c[(c[z>>2]|0)+((c[v>>2]|0)+(c[m>>2]|0)<<2)>>2];h[(c[I+4>>2]|0)+((c[f>>2]|0)+(c[m>>2]|0)<<3)>>3]=-1.0;c[m>>2]=(c[m>>2]|0)+1}if(c[(c[p>>2]|0)+92>>2]|0)sc(I,c[p>>2]|0,+h[(c[y>>2]|0)+(c[D>>2]<<3)>>3],+h[(c[y>>2]|0)+(c[j>>2]<<3)>>3],(c[r>>2]|0)+(c[o>>2]<<3)|0,(c[s>>2]|0)+(c[o>>2]<<3)|0);qc(t,I,c[p>>2]|0,+h[(c[y>>2]|0)+(c[D>>2]<<3)>>3],+h[(c[y>>2]|0)+(c[j>>2]<<3)>>3]);H=(c[B>>2]|0)+(c[o>>2]<<4)|0;c[H>>2]=c[t>>2];c[H+4>>2]=c[t+4>>2];c[H+8>>2]=c[t+8>>2];c[H+12>>2]=c[t+12>>2];c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[f>>2]|0))break;if(!(a[(c[k>>2]|0)+((c[u>>2]|0)+(c[m>>2]|0))>>0]&1)?+F(+(+h[(c[(c[B>>2]|0)+(c[o>>2]<<4)>>2]|0)+(c[m>>2]<<3)>>3]))>0.0:0)a[(c[k>>2]|0)+((c[u>>2]|0)+(c[m>>2]|0))>>0]=1;c[m>>2]=(c[m>>2]|0)+1}c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[g>>2]|0))break;if(!(a[(c[k>>2]|0)+((c[v>>2]|0)+(c[m>>2]|0))>>0]&1)?+F(+(+h[(c[(c[B>>2]|0)+(c[o>>2]<<4)>>2]|0)+((c[f>>2]|0)+(c[m>>2]|0)<<3)>>3]))>0.0:0)a[(c[k>>2]|0)+((c[v>>2]|0)+(c[m>>2]|0))>>0]=1;c[m>>2]=(c[m>>2]|0)+1}df(c[I+8>>2]|0);df(c[I+4>>2]|0);c[o>>2]=(c[o>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+1}c[D>>2]=(c[D>>2]|0)+1}c[(c[K>>2]|0)+96>>2]=c[G>>2];H=cf(c[G>>2]<<2)|0;c[(c[K>>2]|0)+128>>2]=H;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[G>>2]|0))break;c[(c[(c[K>>2]|0)+128>>2]|0)+(c[D>>2]<<2)>>2]=c[(c[C>>2]|0)+(c[D>>2]<<2)>>2];c[D>>2]=(c[D>>2]|0)+1}H=cf(((S(c[G>>2]|0,(c[G>>2]|0)-1|0)|0)/2|0)<<3)|0;c[(c[K>>2]|0)+112>>2]=H;c[D>>2]=0;while(1){if((c[D>>2]|0)>=((S(c[G>>2]|0,(c[G>>2]|0)-1|0)|0)/2|0|0))break;h[(c[(c[K>>2]|0)+112>>2]|0)+(c[D>>2]<<3)>>3]=+h[(c[B>>2]|0)+(c[D>>2]<<4)+8>>3];c[D>>2]=(c[D>>2]|0)+1}a:do if(c[(c[p>>2]|0)+92>>2]|0){H=cf(((S(c[G>>2]|0,(c[G>>2]|0)-1|0)|0)/2|0)<<3)|0;c[(c[K>>2]|0)+116>>2]=H;H=cf(((S(c[G>>2]|0,(c[G>>2]|0)-1|0)|0)/2|0)<<3)|0;c[(c[K>>2]|0)+120>>2]=H;c[D>>2]=0;while(1){if((c[D>>2]|0)>=((S(c[G>>2]|0,(c[G>>2]|0)-1|0)|0)/2|0|0))break a;h[(c[(c[K>>2]|0)+116>>2]|0)+(c[D>>2]<<3)>>3]=+h[(c[r>>2]|0)+(c[D>>2]<<3)>>3];h[(c[(c[K>>2]|0)+120>>2]|0)+(c[D>>2]<<3)>>3]=+h[(c[s>>2]|0)+(c[D>>2]<<3)>>3];c[D>>2]=(c[D>>2]|0)+1}}else{c[(c[K>>2]|0)+116>>2]=0;c[(c[K>>2]|0)+120>>2]=0}while(0);c[j>>2]=0;c[I>>2]=cf(c[G>>2]<<2)|0;H=cf(c[G>>2]<<2)|0;c[(c[K>>2]|0)+132>>2]=H;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[G>>2]|0))break;c[u>>2]=0;c[v>>2]=0;while(1){if((c[v>>2]|0)>=(c[(c[i>>2]|0)+(c[D>>2]<<2)>>2]|0))break;if(a[(c[k>>2]|0)+((c[(c[E>>2]|0)+(c[D>>2]<<2)>>2]|0)+(c[v>>2]|0))>>0]&1){c[u>>2]=(c[u>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+1}c[v>>2]=(c[v>>2]|0)+1}c[(c[(c[K>>2]|0)+132>>2]|0)+(c[D>>2]<<2)>>2]=c[u>>2];c[(c[I>>2]|0)+(c[D>>2]<<2)>>2]=c[u>>2];c[D>>2]=(c[D>>2]|0)+1}c[J>>2]=c[j>>2];xb(1573,J);c[(c[K>>2]|0)+100>>2]=c[j>>2];H=cf(c[j>>2]<<2)|0;c[(c[K>>2]|0)+104>>2]=H;H=cf(c[j>>2]<<2)|0;c[(c[K>>2]|0)+124>>2]=H;c[o>>2]=0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[A>>2]|0))break;if(a[(c[k>>2]|0)+(c[D>>2]|0)>>0]&1){c[(c[(c[K>>2]|0)+104>>2]|0)+(c[o>>2]<<2)>>2]=c[(c[z>>2]|0)+(c[D>>2]<<2)>>2];w=(c[(c[q>>2]|0)+(c[D>>2]<<2)>>2]|0)+1|0;x=c[(c[K>>2]|0)+124>>2]|0;H=c[o>>2]|0;c[o>>2]=H+1;c[x+(H<<2)>>2]=w}c[D>>2]=(c[D>>2]|0)+1}c[J>>2]=cf(c[G>>2]<<2)|0;c[c[J>>2]>>2]=0;c[D>>2]=1;while(1){if((c[D>>2]|0)>=(c[G>>2]|0))break;c[(c[J>>2]|0)+(c[D>>2]<<2)>>2]=(c[(c[J>>2]|0)+((c[D>>2]|0)-1<<2)>>2]|0)+(c[(c[I>>2]|0)+((c[D>>2]|0)-1<<2)>>2]|0);c[D>>2]=(c[D>>2]|0)+1}H=cf((c[G>>2]|0)-1<<2)|0;c[(c[K>>2]|0)+108>>2]=H;c[D>>2]=0;while(1){if((c[D>>2]|0)>=((c[G>>2]|0)-1|0))break;H=cf(c[j>>2]<<3)|0;c[(c[(c[K>>2]|0)+108>>2]|0)+(c[D>>2]<<2)>>2]=H;c[D>>2]=(c[D>>2]|0)+1}c[o>>2]=0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[G>>2]|0))break;c[u>>2]=(c[D>>2]|0)+1;while(1){if((c[u>>2]|0)>=(c[G>>2]|0))break;c[v>>2]=c[(c[E>>2]|0)+(c[D>>2]<<2)>>2];c[f>>2]=c[(c[E>>2]|0)+(c[u>>2]<<2)>>2];c[g>>2]=c[(c[i>>2]|0)+(c[D>>2]<<2)>>2];c[m>>2]=c[(c[i>>2]|0)+(c[u>>2]<<2)>>2];c[t>>2]=c[(c[J>>2]|0)+(c[D>>2]<<2)>>2];c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[g>>2]|0))break;if(a[(c[k>>2]|0)+((c[v>>2]|0)+(c[n>>2]|0))>>0]&1){M=+h[(c[(c[B>>2]|0)+(c[o>>2]<<4)>>2]|0)+(c[n>>2]<<3)>>3];A=c[(c[(c[K>>2]|0)+108>>2]|0)+((c[u>>2]|0)-1<<2)>>2]|0;H=c[t>>2]|0;c[t>>2]=H+1;h[A+(H<<3)>>3]=M}c[n>>2]=(c[n>>2]|0)+1}c[t>>2]=c[(c[J>>2]|0)+(c[u>>2]<<2)>>2];c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[m>>2]|0))break;if(a[(c[k>>2]|0)+((c[f>>2]|0)+(c[n>>2]|0))>>0]&1){M=+h[(c[(c[B>>2]|0)+(c[o>>2]<<4)>>2]|0)+((c[g>>2]|0)+(c[n>>2]|0)<<3)>>3];A=c[(c[(c[K>>2]|0)+108>>2]|0)+(c[D>>2]<<2)>>2]|0;H=c[t>>2]|0;c[t>>2]=H+1;h[A+(H<<3)>>3]=M}c[n>>2]=(c[n>>2]|0)+1}c[o>>2]=(c[o>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+1}c[D>>2]=(c[D>>2]|0)+1}df(c[C>>2]|0);df(c[r>>2]|0);df(c[s>>2]|0);df(c[i>>2]|0);df(c[q>>2]|0);df(c[E>>2]|0);df(c[z>>2]|0);df(c[y>>2]|0);df(c[k>>2]|0);c[D>>2]=0;while(1){H=(c[D>>2]|0)<((S(c[G>>2]|0,(c[G>>2]|0)-1|0)|0)/2|0|0);d=c[B>>2]|0;if(!H)break;df(c[d+(c[D>>2]<<4)>>2]|0);c[D>>2]=(c[D>>2]|0)+1}df(d);df(c[I>>2]|0);df(c[J>>2]|0);K=c[K>>2]|0;l=L;return K|0}c[(c[K>>2]|0)+96>>2]=2;c[(c[K>>2]|0)+128>>2]=0;c[(c[K>>2]|0)+132>>2]=0;c[(c[K>>2]|0)+116>>2]=0;c[(c[K>>2]|0)+120>>2]=0;J=cf(4)|0;c[(c[K>>2]|0)+108>>2]=J;do if(c[(c[p>>2]|0)+92>>2]|0){if((c[c[p>>2]>>2]|0)!=3?(c[c[p>>2]>>2]|0)!=4:0)break;J=cf(8)|0;c[(c[K>>2]|0)+116>>2]=J;M=+pc(c[H>>2]|0,c[p>>2]|0);h[c[(c[K>>2]|0)+116>>2]>>3]=M}while(0);qc(A,c[H>>2]|0,c[p>>2]|0,0.0,0.0);J=cf(8)|0;c[(c[K>>2]|0)+112>>2]=J;h[c[(c[K>>2]|0)+112>>2]>>3]=+h[A+8>>3];c[G>>2]=0;c[C>>2]=0;while(1){if((c[C>>2]|0)>=(c[c[H>>2]>>2]|0))break;if(+F(+(+h[(c[A>>2]|0)+(c[C>>2]<<3)>>3]))>0.0)c[G>>2]=(c[G>>2]|0)+1;c[C>>2]=(c[C>>2]|0)+1}c[(c[K>>2]|0)+100>>2]=c[G>>2];J=cf(c[G>>2]<<2)|0;c[(c[K>>2]|0)+104>>2]=J;J=cf(c[G>>2]<<3)|0;c[c[(c[K>>2]|0)+108>>2]>>2]=J;J=cf(c[G>>2]<<2)|0;c[(c[K>>2]|0)+124>>2]=J;c[E>>2]=0;c[C>>2]=0;while(1){d=c[A>>2]|0;if((c[C>>2]|0)>=(c[c[H>>2]>>2]|0))break;if(+F(+(+h[d+(c[C>>2]<<3)>>3]))>0.0){c[(c[(c[K>>2]|0)+104>>2]|0)+(c[E>>2]<<2)>>2]=c[(c[(c[H>>2]|0)+8>>2]|0)+(c[C>>2]<<2)>>2];h[(c[c[(c[K>>2]|0)+108>>2]>>2]|0)+(c[E>>2]<<3)>>3]=+h[(c[A>>2]|0)+(c[C>>2]<<3)>>3];c[(c[(c[K>>2]|0)+124>>2]|0)+(c[E>>2]<<2)>>2]=(c[C>>2]|0)+1;c[E>>2]=(c[E>>2]|0)+1}c[C>>2]=(c[C>>2]|0)+1}df(d);K=c[K>>2]|0;l=L;return K|0}function pc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;p=l;l=l+144|0;n=p+112|0;k=p+136|0;d=p+128|0;i=p+140|0;f=p+132|0;o=p+124|0;j=p+104|0;e=p+8|0;m=p;g=p+120|0;c[k>>2]=a;c[d>>2]=b;c[f>>2]=5;c[o>>2]=cf(c[c[k>>2]>>2]<<3)|0;h[j>>3]=0.0;b=e;a=c[d>>2]|0;d=b+96|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));c[e+92>>2]=0;Yc(c[k>>2]|0,e,c[f>>2]|0,c[o>>2]|0);c[i>>2]=0;while(1){b=c[k>>2]|0;if((c[i>>2]|0)>=(c[c[k>>2]>>2]|0))break;h[(c[o>>2]|0)+(c[i>>2]<<3)>>3]=+h[(c[b+4>>2]|0)+(c[i>>2]<<3)>>3]-+h[(c[o>>2]|0)+(c[i>>2]<<3)>>3];q=+F(+(+h[(c[o>>2]|0)+(c[i>>2]<<3)>>3]));h[j>>3]=+h[j>>3]+q;c[i>>2]=(c[i>>2]|0)+1}h[j>>3]=+h[j>>3]/+(c[b>>2]|0);h[m>>3]=+G(+(+h[j>>3]*2.0*+h[j>>3]));c[g>>2]=0;h[j>>3]=0.0;c[i>>2]=0;while(1){if((c[i>>2]|0)>=(c[c[k>>2]>>2]|0))break;q=+F(+(+h[(c[o>>2]|0)+(c[i>>2]<<3)>>3]));if(q>+h[m>>3]*5.0)c[g>>2]=(c[g>>2]|0)+1;else{q=+F(+(+h[(c[o>>2]|0)+(c[i>>2]<<3)>>3]));h[j>>3]=+h[j>>3]+q}c[i>>2]=(c[i>>2]|0)+1}h[j>>3]=+h[j>>3]/+((c[c[k>>2]>>2]|0)-(c[g>>2]|0)|0);h[n>>3]=+h[j>>3];xb(1807,n);df(c[o>>2]|0);l=p;return +(+h[j>>3])}function qc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=+f;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+112|0;r=s+72|0;q=s+56|0;o=s+92|0;j=s+88|0;i=s+8|0;g=s;k=s+96|0;p=s+16|0;n=s+84|0;m=s+80|0;c[o>>2]=b;c[j>>2]=d;h[i>>3]=e;h[g>>3]=f;c[k>>2]=cf(c[c[o>>2]>>2]<<3)|0;switch(c[c[j>>2]>>2]|0){case 0:{yc(c[o>>2]|0,c[j>>2]|0,c[k>>2]|0,p,+h[i>>3],+h[g>>3]);break}case 1:{zc(c[o>>2]|0,c[j>>2]|0,c[k>>2]|0,p);break}case 2:{Ac(c[o>>2]|0,c[j>>2]|0,c[k>>2]|0,p);break}case 3:{Bc(c[o>>2]|0,c[j>>2]|0,c[k>>2]|0,p);break}case 4:{Cc(c[o>>2]|0,c[j>>2]|0,c[k>>2]|0,p);break}default:{}}e=+h[p+8>>3];h[q>>3]=+h[p>>3];h[q+8>>3]=e;xb(1707,q);c[q>>2]=0;c[n>>2]=0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[c[o>>2]>>2]|0))break;do if(+F(+(+h[(c[k>>2]|0)+(c[m>>2]<<3)>>3]))>0.0){c[q>>2]=(c[q>>2]|0)+1;f=+F(+(+h[(c[k>>2]|0)+(c[m>>2]<<3)>>3]));if(+h[(c[(c[o>>2]|0)+4>>2]|0)+(c[m>>2]<<3)>>3]>0.0){if(!(f>=+h[p+16>>3]))break;c[n>>2]=(c[n>>2]|0)+1;break}else{if(!(f>=+h[p+24>>3]))break;c[n>>2]=(c[n>>2]|0)+1;break}}while(0);c[m>>2]=(c[m>>2]|0)+1}o=c[n>>2]|0;c[r>>2]=c[q>>2];c[r+4>>2]=o;xb(1727,r);c[a>>2]=c[k>>2];h[a+8>>3]=+h[p+8>>3];l=s;return}function rc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=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;z=l;l=l+64|0;v=z+52|0;t=z+44|0;q=z+36|0;w=z+28|0;j=z+20|0;u=z+12|0;o=z+56|0;r=z+48|0;s=z+40|0;p=z+32|0;i=z+24|0;k=z+16|0;m=z+8|0;x=z+4|0;n=z;c[v>>2]=a;c[t>>2]=b;c[q>>2]=d;c[w>>2]=e;c[j>>2]=f;c[u>>2]=g;c[o>>2]=c[c[v>>2]>>2];c[r>>2]=16;c[s>>2]=0;c[p>>2]=cf(c[r>>2]<<2)|0;c[i>>2]=cf(c[r>>2]<<2)|0;c[k>>2]=cf(c[o>>2]<<2)|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[o>>2]|0))break;c[x>>2]=~~+h[(c[(c[v>>2]|0)+4>>2]|0)+(c[m>>2]<<3)>>3];c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[s>>2]|0))break;if((c[x>>2]|0)==(c[(c[p>>2]|0)+(c[n>>2]<<2)>>2]|0)){y=6;break}c[n>>2]=(c[n>>2]|0)+1}if((y|0)==6){y=0;e=(c[i>>2]|0)+(c[n>>2]<<2)|0;c[e>>2]=(c[e>>2]|0)+1}c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]=c[n>>2];if((c[n>>2]|0)==(c[s>>2]|0)){if((c[s>>2]|0)==(c[r>>2]|0)){c[r>>2]=c[r>>2]<<1;c[p>>2]=ff(c[p>>2]|0,c[r>>2]<<2)|0;c[i>>2]=ff(c[i>>2]|0,c[r>>2]<<2)|0}c[(c[p>>2]|0)+(c[s>>2]<<2)>>2]=c[x>>2];c[(c[i>>2]|0)+(c[s>>2]<<2)>>2]=1;c[s>>2]=(c[s>>2]|0)+1}c[m>>2]=(c[m>>2]|0)+1}a:do if(((c[s>>2]|0)==2?(c[c[p>>2]>>2]|0)==-1:0)?(c[(c[p>>2]|0)+4>>2]|0)==1:0){Cb(c[p>>2]|0,(c[p>>2]|0)+4|0);Cb(c[i>>2]|0,(c[i>>2]|0)+4|0);c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[o>>2]|0))break a;c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]=(c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]|0)==0?1:0;c[m>>2]=(c[m>>2]|0)+1}}while(0);c[x>>2]=cf(c[s>>2]<<2)|0;c[c[x>>2]>>2]=0;c[m>>2]=1;while(1){if((c[m>>2]|0)>=(c[s>>2]|0))break;c[(c[x>>2]|0)+(c[m>>2]<<2)>>2]=(c[(c[x>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0)+(c[(c[i>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0);c[m>>2]=(c[m>>2]|0)+1}c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[o>>2]|0))break;c[(c[u>>2]|0)+(c[(c[x>>2]|0)+(c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]<<2)>>2]<<2)>>2]=c[m>>2];y=(c[x>>2]|0)+(c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]<<2)|0;c[y>>2]=(c[y>>2]|0)+1;c[m>>2]=(c[m>>2]|0)+1}c[c[x>>2]>>2]=0;c[m>>2]=1;while(1){if((c[m>>2]|0)>=(c[s>>2]|0))break;c[(c[x>>2]|0)+(c[m>>2]<<2)>>2]=(c[(c[x>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0)+(c[(c[i>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0);c[m>>2]=(c[m>>2]|0)+1}c[c[t>>2]>>2]=c[s>>2];c[c[q>>2]>>2]=c[p>>2];c[c[w>>2]>>2]=c[x>>2];c[c[j>>2]>>2]=c[i>>2];df(c[k>>2]|0);l=z;return}function sc(a,b,d,e,f,g){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;var i=0,j=0,k=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;C=l;l=l+192|0;w=C+176|0;u=C+168|0;j=C+104|0;i=C+96|0;x=C+152|0;y=C+148|0;n=C+180|0;s=C+172|0;v=C+164|0;k=C+160|0;o=C+156|0;m=C+144|0;p=C+140|0;q=C+136|0;B=C+124|0;t=C+120|0;r=C+116|0;A=C;z=C+112|0;c[w>>2]=a;c[u>>2]=b;h[j>>3]=d;h[i>>3]=e;c[x>>2]=f;c[y>>2]=g;c[s>>2]=5;c[v>>2]=cf(c[c[w>>2]>>2]<<2)|0;c[k>>2]=cf(c[c[w>>2]>>2]<<3)|0;c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[c[w>>2]>>2]|0))break;c[(c[v>>2]|0)+(c[n>>2]<<2)>>2]=c[n>>2];c[n>>2]=(c[n>>2]|0)+1}c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[c[w>>2]>>2]|0))break;f=c[n>>2]|0;g=Te()|0;c[o>>2]=f+((g|0)%((c[c[w>>2]>>2]|0)-(c[n>>2]|0)|0)|0);Cb((c[v>>2]|0)+(c[n>>2]<<2)|0,(c[v>>2]|0)+(c[o>>2]<<2)|0);c[n>>2]=(c[n>>2]|0)+1}c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[s>>2]|0))break;g=S(c[n>>2]|0,c[c[w>>2]>>2]|0)|0;c[o>>2]=(g|0)/(c[s>>2]|0)|0;g=S((c[n>>2]|0)+1|0,c[c[w>>2]>>2]|0)|0;c[m>>2]=(g|0)/(c[s>>2]|0)|0;c[B>>2]=(c[c[w>>2]>>2]|0)-((c[m>>2]|0)-(c[o>>2]|0));c[B+8>>2]=cf(c[B>>2]<<2)|0;c[B+4>>2]=cf(c[B>>2]<<3)|0;c[q>>2]=0;c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[o>>2]|0))break;c[(c[B+8>>2]|0)+(c[q>>2]<<2)>>2]=c[(c[(c[w>>2]|0)+8>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<2)>>2];h[(c[B+4>>2]|0)+(c[q>>2]<<3)>>3]=+h[(c[(c[w>>2]|0)+4>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<3)>>3];c[q>>2]=(c[q>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+1}c[p>>2]=c[m>>2];while(1){if((c[p>>2]|0)>=(c[c[w>>2]>>2]|0))break;c[(c[B+8>>2]|0)+(c[q>>2]<<2)>>2]=c[(c[(c[w>>2]|0)+8>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<2)>>2];h[(c[B+4>>2]|0)+(c[q>>2]<<3)>>3]=+h[(c[(c[w>>2]|0)+4>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<3)>>3];c[q>>2]=(c[q>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+1}c[t>>2]=0;c[r>>2]=0;c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[q>>2]|0))break;if(+h[(c[B+4>>2]|0)+(c[p>>2]<<3)>>3]>0.0)c[t>>2]=(c[t>>2]|0)+1;else c[r>>2]=(c[r>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+1}a:do if((c[t>>2]|0)==0&(c[r>>2]|0)==0){c[p>>2]=c[o>>2];while(1){if((c[p>>2]|0)>=(c[m>>2]|0))break a;h[(c[k>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<3)>>3]=0.0;c[p>>2]=(c[p>>2]|0)+1}}else{if((c[t>>2]|0)>0&(c[r>>2]|0)==0){c[p>>2]=c[o>>2];while(1){if((c[p>>2]|0)>=(c[m>>2]|0))break a;h[(c[k>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<3)>>3]=1.0;c[p>>2]=(c[p>>2]|0)+1}}if((c[t>>2]|0)==0&(c[r>>2]|0)>0){c[p>>2]=c[o>>2];while(1){if((c[p>>2]|0)>=(c[m>>2]|0))break a;h[(c[k>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<3)>>3]=-1.0;c[p>>2]=(c[p>>2]|0)+1}}b=A;a=c[u>>2]|0;f=b+96|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(f|0));c[A+92>>2]=0;h[A+48>>3]=1.0;c[A+56>>2]=2;c[A+60>>2]=cf(8)|0;c[A+64>>2]=cf(16)|0;c[c[A+60>>2]>>2]=1;c[(c[A+60>>2]|0)+4>>2]=-1;h[c[A+64>>2]>>3]=+h[j>>3];h[(c[A+64>>2]|0)+8>>3]=+h[i>>3];c[z>>2]=oc(B,A)|0;c[p>>2]=c[o>>2];while(1){if((c[p>>2]|0)>=(c[m>>2]|0))break;+tc(c[z>>2]|0,c[(c[(c[w>>2]|0)+8>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<2)>>2]|0,(c[k>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<3)|0);g=(c[k>>2]|0)+(c[(c[v>>2]|0)+(c[p>>2]<<2)>>2]<<3)|0;h[g>>3]=+h[g>>3]*+(c[c[(c[z>>2]|0)+128>>2]>>2]|0);c[p>>2]=(c[p>>2]|0)+1}uc(z);vc(A)}while(0);df(c[B+8>>2]|0);df(c[B+4>>2]|0);c[n>>2]=(c[n>>2]|0)+1}wc(c[c[w>>2]>>2]|0,c[k>>2]|0,c[(c[w>>2]|0)+4>>2]|0,c[x>>2]|0,c[y>>2]|0);df(c[k>>2]|0);df(c[v>>2]|0);l=C;return}function tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=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;C=l;l=l+96|0;B=C+16|0;A=C+84|0;y=C+80|0;k=C+76|0;m=C+92|0;w=C+88|0;u=C+8|0;z=C+60|0;p=C+72|0;t=C+68|0;x=C+64|0;q=C+56|0;n=C+52|0;v=C;r=C+48|0;s=C+44|0;f=C+40|0;g=C+36|0;o=C+32|0;i=C+28|0;j=C+24|0;c[A>>2]=a;c[y>>2]=b;c[k>>2]=d;if(((c[c[A>>2]>>2]|0)!=2?(c[c[A>>2]>>2]|0)!=3:0)?(c[c[A>>2]>>2]|0)!=4:0){c[w>>2]=c[(c[A>>2]|0)+96>>2];c[u>>2]=c[(c[A>>2]|0)+100>>2];c[p>>2]=cf(c[u>>2]<<3)|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[u>>2]|0))break;e=+fc(c[y>>2]|0,c[(c[(c[A>>2]|0)+104>>2]|0)+(c[m>>2]<<2)>>2]|0,c[A>>2]|0);h[(c[p>>2]|0)+(c[m>>2]<<3)>>3]=e;c[m>>2]=(c[m>>2]|0)+1}c[t>>2]=cf(c[w>>2]<<2)|0;c[c[t>>2]>>2]=0;c[m>>2]=1;while(1){if((c[m>>2]|0)>=(c[w>>2]|0))break;c[(c[t>>2]|0)+(c[m>>2]<<2)>>2]=(c[(c[t>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0)+(c[(c[(c[A>>2]|0)+132>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0);c[m>>2]=(c[m>>2]|0)+1}c[x>>2]=cf(c[w>>2]<<2)|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[w>>2]|0))break;c[(c[x>>2]|0)+(c[m>>2]<<2)>>2]=0;c[m>>2]=(c[m>>2]|0)+1}c[q>>2]=0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[w>>2]|0))break;c[n>>2]=(c[m>>2]|0)+1;while(1){if((c[n>>2]|0)>=(c[w>>2]|0))break;h[v>>3]=0.0;c[r>>2]=c[(c[t>>2]|0)+(c[m>>2]<<2)>>2];c[s>>2]=c[(c[t>>2]|0)+(c[n>>2]<<2)>>2];c[f>>2]=c[(c[(c[A>>2]|0)+132>>2]|0)+(c[m>>2]<<2)>>2];c[g>>2]=c[(c[(c[A>>2]|0)+132>>2]|0)+(c[n>>2]<<2)>>2];c[i>>2]=c[(c[(c[A>>2]|0)+108>>2]|0)+((c[n>>2]|0)-1<<2)>>2];c[j>>2]=c[(c[(c[A>>2]|0)+108>>2]|0)+(c[m>>2]<<2)>>2];c[o>>2]=0;while(1){if((c[o>>2]|0)>=(c[f>>2]|0))break;h[v>>3]=+h[v>>3]+ +h[(c[i>>2]|0)+((c[r>>2]|0)+(c[o>>2]|0)<<3)>>3]*+h[(c[p>>2]|0)+((c[r>>2]|0)+(c[o>>2]|0)<<3)>>3];c[o>>2]=(c[o>>2]|0)+1}c[o>>2]=0;while(1){if((c[o>>2]|0)>=(c[g>>2]|0))break;h[v>>3]=+h[v>>3]+ +h[(c[j>>2]|0)+((c[s>>2]|0)+(c[o>>2]|0)<<3)>>3]*+h[(c[p>>2]|0)+((c[s>>2]|0)+(c[o>>2]|0)<<3)>>3];c[o>>2]=(c[o>>2]|0)+1}h[v>>3]=+h[v>>3]-+h[(c[(c[A>>2]|0)+112>>2]|0)+(c[q>>2]<<3)>>3];h[(c[k>>2]|0)+(c[q>>2]<<3)>>3]=+h[v>>3];y=c[x>>2]|0;y=+h[(c[k>>2]|0)+(c[q>>2]<<3)>>3]>0.0?y+(c[m>>2]<<2)|0:y+(c[n>>2]<<2)|0;c[y>>2]=(c[y>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+1}c[z>>2]=17;c[m>>2]=(c[m>>2]|0)+1}c[n>>2]=0;c[m>>2]=1;while(1){if((c[m>>2]|0)>=(c[w>>2]|0))break;if((c[(c[x>>2]|0)+(c[m>>2]<<2)>>2]|0)>(c[(c[x>>2]|0)+(c[n>>2]<<2)>>2]|0))c[n>>2]=c[m>>2];c[m>>2]=(c[m>>2]|0)+1}df(c[p>>2]|0);df(c[t>>2]|0);df(c[x>>2]|0);h[B>>3]=+(c[(c[(c[A>>2]|0)+128>>2]|0)+(c[n>>2]<<2)>>2]|0);c[z>>2]=1;e=+h[B>>3];l=C;return +e}c[w>>2]=c[c[(c[A>>2]|0)+108>>2]>>2];h[u>>3]=0.0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[(c[A>>2]|0)+100>>2]|0))break;e=+h[(c[w>>2]|0)+(c[m>>2]<<3)>>3];e=e*+fc(c[y>>2]|0,c[(c[(c[A>>2]|0)+104>>2]|0)+(c[m>>2]<<2)>>2]|0,c[A>>2]|0);h[u>>3]=+h[u>>3]+e;c[m>>2]=(c[m>>2]|0)+1}h[u>>3]=+h[u>>3]-+h[c[(c[A>>2]|0)+112>>2]>>3];h[c[k>>2]>>3]=+h[u>>3];e=+h[u>>3];if((c[c[A>>2]>>2]|0)==2){h[B>>3]=+((e>0.0?1:-1)|0);c[z>>2]=1}else{h[B>>3]=e;c[z>>2]=1}e=+h[B>>3];l=C;return +e}function uc(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;if(!(c[b>>2]|0)){l=d;return}if(!(c[c[b>>2]>>2]|0)){l=d;return}xc(c[c[b>>2]>>2]|0);df(c[c[b>>2]>>2]|0);c[c[b>>2]>>2]=0;l=d;return}function vc(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;df(c[(c[d>>2]|0)+60>>2]|0);df(c[(c[d>>2]|0)+64>>2]|0);l=b;return}function wc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=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,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=l;l=l+256|0;W=Y+216|0;V=Y+208|0;I=Y+252|0;u=Y+248|0;m=Y+240|0;o=Y+232|0;p=Y+228|0;j=Y+200|0;i=Y+192|0;G=Y+244|0;J=Y+236|0;K=Y+184|0;S=Y+176|0;w=Y+168|0;k=Y+160|0;n=Y+152|0;U=Y+224|0;x=Y+144|0;O=Y+136|0;R=Y+128|0;C=Y+120|0;E=Y+112|0;D=Y+104|0;z=Y+96|0;A=Y+88|0;v=Y+80|0;s=Y+72|0;t=Y+64|0;B=Y+56|0;T=Y+48|0;L=Y+40|0;M=Y+32|0;N=Y+24|0;q=Y+16|0;r=Y+8|0;H=Y+220|0;y=Y;c[I>>2]=a;c[u>>2]=b;c[m>>2]=d;c[o>>2]=e;c[p>>2]=f;h[j>>3]=0.0;h[i>>3]=0.0;c[G>>2]=0;while(1){if((c[G>>2]|0)>=(c[I>>2]|0))break;if(+h[(c[m>>2]|0)+(c[G>>2]<<3)>>3]>0.0)h[j>>3]=+h[j>>3]+1.0;else h[i>>3]=+h[i>>3]+1.0;c[G>>2]=(c[G>>2]|0)+1}c[J>>2]=100;h[K>>3]=1.0e-10;h[S>>3]=1.0e-12;h[w>>3]=1.0e-05;h[k>>3]=(+h[j>>3]+1.0)/(+h[j>>3]+2.0);h[n>>3]=1.0/(+h[i>>3]+2.0);c[U>>2]=cf(c[I>>2]<<3)|0;h[c[o>>2]>>3]=0.0;g=+Q(+((+h[i>>3]+1.0)/(+h[j>>3]+1.0)));h[c[p>>2]>>3]=g;h[y>>3]=0.0;c[G>>2]=0;while(1){if((c[G>>2]|0)>=(c[I>>2]|0))break;if(+h[(c[m>>2]|0)+(c[G>>2]<<3)>>3]>0.0){g=+h[k>>3];e=(c[U>>2]|0)+(c[G>>2]<<3)|0}else{g=+h[n>>3];e=(c[U>>2]|0)+(c[G>>2]<<3)|0}h[e>>3]=g;h[x>>3]=+h[(c[u>>2]|0)+(c[G>>2]<<3)>>3]*+h[c[o>>2]>>3]+ +h[c[p>>2]>>3];g=+h[(c[U>>2]|0)+(c[G>>2]<<3)>>3];if(+h[x>>3]>=0.0){g=g*+h[x>>3]+ +Q(+(+P(+-+h[x>>3])+1.0));h[y>>3]=+h[y>>3]+g}else{g=(g-1.0)*+h[x>>3]+ +Q(+(+P(+(+h[x>>3]))+1.0));h[y>>3]=+h[y>>3]+g}c[G>>2]=(c[G>>2]|0)+1}c[H>>2]=0;while(1){if((c[H>>2]|0)>=(c[J>>2]|0))break;h[C>>3]=+h[S>>3];h[E>>3]=+h[S>>3];h[D>>3]=0.0;h[z>>3]=0.0;h[A>>3]=0.0;c[G>>2]=0;while(1){if((c[G>>2]|0)>=(c[I>>2]|0))break;h[x>>3]=+h[(c[u>>2]|0)+(c[G>>2]<<3)>>3]*+h[c[o>>2]>>3]+ +h[c[p>>2]>>3];g=+h[x>>3];if(+h[x>>3]>=0.0){g=+P(+-g);h[O>>3]=g/(+P(+-+h[x>>3])+1.0);h[R>>3]=1.0/(+P(+-+h[x>>3])+1.0)}else{h[O>>3]=1.0/(+P(+g)+1.0);g=+P(+(+h[x>>3]));h[R>>3]=g/(+P(+(+h[x>>3]))+1.0)}h[r>>3]=+h[O>>3]*+h[R>>3];h[C>>3]=+h[C>>3]+ +h[(c[u>>2]|0)+(c[G>>2]<<3)>>3]*+h[(c[u>>2]|0)+(c[G>>2]<<3)>>3]*+h[r>>3];h[E>>3]=+h[E>>3]+ +h[r>>3];h[D>>3]=+h[D>>3]+ +h[(c[u>>2]|0)+(c[G>>2]<<3)>>3]*+h[r>>3];h[q>>3]=+h[(c[U>>2]|0)+(c[G>>2]<<3)>>3]-+h[O>>3];h[z>>3]=+h[z>>3]+ +h[(c[u>>2]|0)+(c[G>>2]<<3)>>3]*+h[q>>3];h[A>>3]=+h[A>>3]+ +h[q>>3];c[G>>2]=(c[G>>2]|0)+1}g=+F(+(+h[z>>3]));if(g<+h[w>>3]?(g=+F(+(+h[A>>3])),g<+h[w>>3]):0)break;h[v>>3]=+h[C>>3]*+h[E>>3]-+h[D>>3]*+h[D>>3];h[s>>3]=-(+h[E>>3]*+h[z>>3]-+h[D>>3]*+h[A>>3])/+h[v>>3];h[t>>3]=-(-+h[D>>3]*+h[z>>3]+ +h[C>>3]*+h[A>>3])/+h[v>>3];h[B>>3]=+h[z>>3]*+h[s>>3]+ +h[A>>3]*+h[t>>3];h[T>>3]=1.0;while(1){if(!(+h[T>>3]>=+h[K>>3]))break;h[L>>3]=+h[c[o>>2]>>3]+ +h[T>>3]*+h[s>>3];h[M>>3]=+h[c[p>>2]>>3]+ +h[T>>3]*+h[t>>3];h[N>>3]=0.0;c[G>>2]=0;while(1){if((c[G>>2]|0)>=(c[I>>2]|0))break;h[x>>3]=+h[(c[u>>2]|0)+(c[G>>2]<<3)>>3]*+h[L>>3]+ +h[M>>3];g=+h[(c[U>>2]|0)+(c[G>>2]<<3)>>3];if(+h[x>>3]>=0.0){g=g*+h[x>>3]+ +Q(+(+P(+-+h[x>>3])+1.0));h[N>>3]=+h[N>>3]+g}else{g=(g-1.0)*+h[x>>3]+ +Q(+(+P(+(+h[x>>3]))+1.0));h[N>>3]=+h[N>>3]+g}c[G>>2]=(c[G>>2]|0)+1}if(+h[N>>3]<+h[y>>3]+ +h[T>>3]*.0001*+h[B>>3]){X=35;break}h[T>>3]=+h[T>>3]/2.0}if((X|0)==35){X=0;h[c[o>>2]>>3]=+h[L>>3];h[c[p>>2]>>3]=+h[M>>3];h[y>>3]=+h[N>>3]}if(+h[T>>3]<+h[K>>3]){X=38;break}c[H>>2]=(c[H>>2]|0)+1}if((X|0)==38)xb(1589,V);if((c[H>>2]|0)<(c[J>>2]|0)){X=c[U>>2]|0;df(X);l=Y;return}xb(1643,W);X=c[U>>2]|0;df(X);l=Y;return}function xc(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=e+4|0;c[d>>2]=a;if((c[(c[d>>2]|0)+136>>2]|0?(c[(c[d>>2]|0)+100>>2]|0)>0:0)?c[(c[d>>2]|0)+104>>2]|0:0)df(c[c[(c[d>>2]|0)+104>>2]>>2]|0);if(c[(c[d>>2]|0)+108>>2]|0){c[b>>2]=0;while(1){if((c[b>>2]|0)>=((c[(c[d>>2]|0)+96>>2]|0)-1|0))break;df(c[(c[(c[d>>2]|0)+108>>2]|0)+(c[b>>2]<<2)>>2]|0);c[b>>2]=(c[b>>2]|0)+1}}df(c[(c[d>>2]|0)+104>>2]|0);c[(c[d>>2]|0)+104>>2]=0;df(c[(c[d>>2]|0)+108>>2]|0);c[(c[d>>2]|0)+108>>2]=0;df(c[(c[d>>2]|0)+112>>2]|0);c[(c[d>>2]|0)+112>>2]=0;df(c[(c[d>>2]|0)+128>>2]|0);c[(c[d>>2]|0)+128>>2]=0;df(c[(c[d>>2]|0)+116>>2]|0);c[(c[d>>2]|0)+116>>2]=0;df(c[(c[d>>2]|0)+120>>2]|0);c[(c[d>>2]|0)+120>>2]=0;df(c[(c[d>>2]|0)+124>>2]|0);c[(c[d>>2]|0)+124>>2]=0;df(c[(c[d>>2]|0)+132>>2]|0);c[(c[d>>2]|0)+132>>2]=0;l=e;return}function yc(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;i=+i;var j=0,k=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;x=l;l=l+208|0;u=x+160|0;r=x+192|0;q=x+184|0;m=x+176|0;t=x+168|0;k=x+72|0;j=x;o=x+196|0;p=x+188|0;v=x+180|0;n=x+172|0;w=x+80|0;s=x+8|0;c[r>>2]=b;c[q>>2]=d;c[m>>2]=e;c[t>>2]=f;h[k>>3]=g;h[j>>3]=i;c[o>>2]=c[c[r>>2]>>2];f=c[o>>2]|0;c[p>>2]=kf(f>>>0>536870911?-1:f<<3)|0;f=c[o>>2]|0;c[v>>2]=kf((f|0)<0?-1:f)|0;c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[o>>2]|0))break;h[(c[m>>2]|0)+(c[n>>2]<<3)>>3]=0.0;h[(c[p>>2]|0)+(c[n>>2]<<3)>>3]=-1.0;a[(c[v>>2]|0)+(c[n>>2]|0)>>0]=+h[(c[(c[r>>2]|0)+4>>2]|0)+(c[n>>2]<<3)>>3]>0.0?1:-1;c[n>>2]=(c[n>>2]|0)+1}Lc(w);f=c[o>>2]|0;Sc(s,c[r>>2]|0,c[q>>2]|0,c[v>>2]|0);gc(w,f,s,c[p>>2]|0,c[v>>2]|0,c[m>>2]|0,+h[k>>3],+h[j>>3],+h[(c[q>>2]|0)+40>>3],c[t>>2]|0,c[(c[q>>2]|0)+88>>2]|0);Tc(s);h[s>>3]=0.0;c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[o>>2]|0))break;h[s>>3]=+h[s>>3]+ +h[(c[m>>2]|0)+(c[n>>2]<<3)>>3];c[n>>2]=(c[n>>2]|0)+1}if(+h[k>>3]==+h[j>>3]){h[u>>3]=+h[s>>3]/(+h[k>>3]*+(c[c[r>>2]>>2]|0));xb(1769,u)}c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[o>>2]|0))break;u=(c[m>>2]|0)+(c[n>>2]<<3)|0;h[u>>3]=+h[u>>3]*+(a[(c[v>>2]|0)+(c[n>>2]|0)>>0]|0);c[n>>2]=(c[n>>2]|0)+1}j=c[p>>2]|0;if(j|0)mf(j);j=c[v>>2]|0;if(!j){pb(w);l=x;return}mf(j);pb(w);l=x;return}function zc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=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.0;w=l;l=l+208|0;s=w+168|0;n=w+200|0;m=w+192|0;g=w+188|0;p=w+180|0;i=w+204|0;j=w+196|0;k=w+160|0;t=w+184|0;r=w+152|0;q=w+144|0;u=w+176|0;v=w+64|0;o=w;c[n>>2]=b;c[m>>2]=d;c[g>>2]=e;c[p>>2]=f;c[j>>2]=c[c[n>>2]>>2];h[k>>3]=+h[(c[m>>2]|0)+72>>3];f=c[j>>2]|0;c[t>>2]=kf((f|0)<0?-1:f)|0;c[i>>2]=0;while(1){if((c[i>>2]|0)>=(c[j>>2]|0))break;a[(c[t>>2]|0)+(c[i>>2]|0)>>0]=+h[(c[(c[n>>2]|0)+4>>2]|0)+(c[i>>2]<<3)>>3]>0.0?1:-1;c[i>>2]=(c[i>>2]|0)+1}h[r>>3]=+h[k>>3]*+(c[j>>2]|0)/2.0;h[q>>3]=+h[k>>3]*+(c[j>>2]|0)/2.0;c[i>>2]=0;while(1){if((c[i>>2]|0)>=(c[j>>2]|0))break;if((a[(c[t>>2]|0)+(c[i>>2]|0)>>0]|0)==1){x=+Fb(1.0,+h[r>>3]);h[(c[g>>2]|0)+(c[i>>2]<<3)>>3]=x;h[r>>3]=+h[r>>3]-+h[(c[g>>2]|0)+(c[i>>2]<<3)>>3]}else{x=+Fb(1.0,+h[q>>3]);h[(c[g>>2]|0)+(c[i>>2]<<3)>>3]=x;h[q>>3]=+h[q>>3]-+h[(c[g>>2]|0)+(c[i>>2]<<3)>>3]}c[i>>2]=(c[i>>2]|0)+1}r=c[j>>2]|0;c[u>>2]=kf(r>>>0>536870911?-1:r<<3)|0;c[i>>2]=0;while(1){if((c[i>>2]|0)>=(c[j>>2]|0))break;h[(c[u>>2]|0)+(c[i>>2]<<3)>>3]=0.0;c[i>>2]=(c[i>>2]|0)+1}Dc(v);r=c[j>>2]|0;Sc(o,c[n>>2]|0,c[m>>2]|0,c[t>>2]|0);Fc(v,r,o,c[u>>2]|0,c[t>>2]|0,c[g>>2]|0,1.0,1.0,+h[(c[m>>2]|0)+40>>3],c[p>>2]|0,c[(c[m>>2]|0)+88>>2]|0);Tc(o);h[o>>3]=+h[(c[p>>2]|0)+32>>3];h[s>>3]=1.0/+h[o>>3];xb(1792,s);c[i>>2]=0;while(1){if((c[i>>2]|0)>=(c[j>>2]|0))break;s=(c[g>>2]|0)+(c[i>>2]<<3)|0;h[s>>3]=+h[s>>3]*(+(a[(c[t>>2]|0)+(c[i>>2]|0)>>0]|0)/+h[o>>3]);c[i>>2]=(c[i>>2]|0)+1}e=(c[p>>2]|0)+8|0;h[e>>3]=+h[e>>3]/+h[o>>3];e=c[p>>2]|0;h[e>>3]=+h[e>>3]/(+h[o>>3]*+h[o>>3]);h[(c[p>>2]|0)+16>>3]=1.0/+h[o>>3];h[(c[p>>2]|0)+24>>3]=1.0/+h[o>>3];e=c[t>>2]|0;if(e|0)mf(e);e=c[u>>2]|0;if(!e){pb(v);l=w;return}mf(e);pb(v);l=w;return}function Ac(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+176|0;n=t+164|0;m=t+156|0;g=t+148|0;p=t+140|0;j=t+168|0;q=t+160|0;r=t+152|0;i=t+144|0;k=t+136|0;s=t+56|0;o=t;c[n>>2]=b;c[m>>2]=d;c[g>>2]=e;c[p>>2]=f;c[j>>2]=c[c[n>>2]>>2];f=c[j>>2]|0;c[q>>2]=kf(f>>>0>536870911?-1:f<<3)|0;f=c[j>>2]|0;c[r>>2]=kf((f|0)<0?-1:f)|0;c[k>>2]=~~(+h[(c[m>>2]|0)+72>>3]*+(c[c[n>>2]>>2]|0));c[i>>2]=0;while(1){if((c[i>>2]|0)>=(c[k>>2]|0))break;h[(c[g>>2]|0)+(c[i>>2]<<3)>>3]=1.0;c[i>>2]=(c[i>>2]|0)+1}if((c[k>>2]|0)<(c[c[n>>2]>>2]|0))h[(c[g>>2]|0)+(c[k>>2]<<3)>>3]=+h[(c[m>>2]|0)+72>>3]*+(c[c[n>>2]>>2]|0)-+(c[k>>2]|0);c[i>>2]=(c[k>>2]|0)+1;while(1){if((c[i>>2]|0)>=(c[j>>2]|0))break;h[(c[g>>2]|0)+(c[i>>2]<<3)>>3]=0.0;c[i>>2]=(c[i>>2]|0)+1}c[i>>2]=0;while(1){if((c[i>>2]|0)>=(c[j>>2]|0))break;h[(c[q>>2]|0)+(c[i>>2]<<3)>>3]=0.0;a[(c[r>>2]|0)+(c[i>>2]|0)>>0]=1;c[i>>2]=(c[i>>2]|0)+1}Lc(s);e=c[j>>2]|0;Mc(o,c[n>>2]|0,c[m>>2]|0);gc(s,e,o,c[q>>2]|0,c[r>>2]|0,c[g>>2]|0,1.0,1.0,+h[(c[m>>2]|0)+40>>3],c[p>>2]|0,c[(c[m>>2]|0)+88>>2]|0);Nc(o);e=c[q>>2]|0;if(e|0)mf(e);e=c[r>>2]|0;if(!e){pb(s);l=t;return}mf(e);pb(s);l=t;return}function Bc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+208|0;q=u+160|0;n=u+196|0;m=u+188|0;g=u+180|0;p=u+172|0;k=u+200|0;i=u+192|0;r=u+184|0;s=u+176|0;j=u+168|0;t=u+80|0;o=u;c[n>>2]=b;c[m>>2]=d;c[g>>2]=e;c[p>>2]=f;c[k>>2]=c[c[n>>2]>>2];f=c[k>>2]<<1;c[i>>2]=kf(f>>>0>536870911?-1:f<<3)|0;f=c[k>>2]<<1;c[r>>2]=kf(f>>>0>536870911?-1:f<<3)|0;f=c[k>>2]<<1;c[s>>2]=kf((f|0)<0?-1:f)|0;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[k>>2]|0))break;h[(c[i>>2]|0)+(c[j>>2]<<3)>>3]=0.0;h[(c[r>>2]|0)+(c[j>>2]<<3)>>3]=+h[(c[m>>2]|0)+80>>3]-+h[(c[(c[n>>2]|0)+4>>2]|0)+(c[j>>2]<<3)>>3];a[(c[s>>2]|0)+(c[j>>2]|0)>>0]=1;h[(c[i>>2]|0)+((c[j>>2]|0)+(c[k>>2]|0)<<3)>>3]=0.0;h[(c[r>>2]|0)+((c[j>>2]|0)+(c[k>>2]|0)<<3)>>3]=+h[(c[m>>2]|0)+80>>3]+ +h[(c[(c[n>>2]|0)+4>>2]|0)+(c[j>>2]<<3)>>3];a[(c[s>>2]|0)+((c[j>>2]|0)+(c[k>>2]|0))>>0]=-1;c[j>>2]=(c[j>>2]|0)+1}Lc(t);f=c[k>>2]<<1;Ec(o,c[n>>2]|0,c[m>>2]|0);gc(t,f,o,c[r>>2]|0,c[s>>2]|0,c[i>>2]|0,+h[(c[m>>2]|0)+48>>3],+h[(c[m>>2]|0)+48>>3],+h[(c[m>>2]|0)+40>>3],c[p>>2]|0,c[(c[m>>2]|0)+88>>2]|0);Gc(o);h[o>>3]=0.0;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[k>>2]|0))break;h[(c[g>>2]|0)+(c[j>>2]<<3)>>3]=+h[(c[i>>2]|0)+(c[j>>2]<<3)>>3]-+h[(c[i>>2]|0)+((c[j>>2]|0)+(c[k>>2]|0)<<3)>>3];v=+F(+(+h[(c[g>>2]|0)+(c[j>>2]<<3)>>3]));h[o>>3]=+h[o>>3]+v;c[j>>2]=(c[j>>2]|0)+1}h[q>>3]=+h[o>>3]/(+h[(c[m>>2]|0)+48>>3]*+(c[k>>2]|0));xb(1769,q);e=c[i>>2]|0;if(e|0)mf(e);e=c[r>>2]|0;if(e|0)mf(e);e=c[s>>2]|0;if(!e){pb(t);l=u;return}mf(e);pb(t);l=u;return}function Cc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=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.0;w=l;l=l+224|0;o=w+176|0;j=w+212|0;i=w+208|0;p=w+200|0;m=w+192|0;s=w+216|0;g=w+168|0;q=w+204|0;t=w+196|0;u=w+188|0;r=w+184|0;n=w+160|0;v=w+80|0;k=w;c[j>>2]=b;c[i>>2]=d;c[p>>2]=e;c[m>>2]=f;c[s>>2]=c[c[j>>2]>>2];h[g>>3]=+h[(c[i>>2]|0)+48>>3];f=c[s>>2]<<1;c[q>>2]=kf(f>>>0>536870911?-1:f<<3)|0;f=c[s>>2]<<1;c[t>>2]=kf(f>>>0>536870911?-1:f<<3)|0;f=c[s>>2]<<1;c[u>>2]=kf((f|0)<0?-1:f)|0;h[n>>3]=+h[g>>3]*+h[(c[i>>2]|0)+72>>3]*+(c[s>>2]|0)/2.0;c[r>>2]=0;while(1){if((c[r>>2]|0)>=(c[s>>2]|0))break;x=+Fb(+h[n>>3],+h[g>>3]);h[(c[q>>2]|0)+((c[r>>2]|0)+(c[s>>2]|0)<<3)>>3]=x;h[(c[q>>2]|0)+(c[r>>2]<<3)>>3]=x;h[n>>3]=+h[n>>3]-+h[(c[q>>2]|0)+(c[r>>2]<<3)>>3];h[(c[t>>2]|0)+(c[r>>2]<<3)>>3]=-+h[(c[(c[j>>2]|0)+4>>2]|0)+(c[r>>2]<<3)>>3];a[(c[u>>2]|0)+(c[r>>2]|0)>>0]=1;h[(c[t>>2]|0)+((c[r>>2]|0)+(c[s>>2]|0)<<3)>>3]=+h[(c[(c[j>>2]|0)+4>>2]|0)+(c[r>>2]<<3)>>3];a[(c[u>>2]|0)+((c[r>>2]|0)+(c[s>>2]|0))>>0]=-1;c[r>>2]=(c[r>>2]|0)+1}Dc(v);n=c[s>>2]<<1;Ec(k,c[j>>2]|0,c[i>>2]|0);Fc(v,n,k,c[t>>2]|0,c[u>>2]|0,c[q>>2]|0,+h[g>>3],+h[g>>3],+h[(c[i>>2]|0)+40>>3],c[m>>2]|0,c[(c[i>>2]|0)+88>>2]|0);Gc(k);h[o>>3]=-+h[(c[m>>2]|0)+32>>3];xb(1748,o);c[r>>2]=0;while(1){g=c[q>>2]|0;if((c[r>>2]|0)>=(c[s>>2]|0))break;h[(c[p>>2]|0)+(c[r>>2]<<3)>>3]=+h[g+(c[r>>2]<<3)>>3]-+h[(c[q>>2]|0)+((c[r>>2]|0)+(c[s>>2]|0)<<3)>>3];c[r>>2]=(c[r>>2]|0)+1}if(g|0)mf(g);g=c[t>>2]|0;if(g|0)mf(g);g=c[u>>2]|0;if(!g){pb(v);l=w;return}mf(g);pb(v);l=w;return}function Dc(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=c[d>>2]|0;Lc(a);c[a>>2]=268;l=b;return}function Ec(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0;g=l;l=l+16|0;k=g+8|0;j=g+4|0;i=g;f=g+12|0;c[k>>2]=b;c[j>>2]=d;c[i>>2]=e;b=c[k>>2]|0;Vb(b,c[c[j>>2]>>2]|0,c[(c[j>>2]|0)+8>>2]|0,c[i>>2]|0);c[b>>2]=324;c[b+48>>2]=c[c[j>>2]>>2];d=jf(28)|0;Mb(d,c[b+48>>2]|0,~~(+h[(c[i>>2]|0)+32>>3]*1048576.0));c[b+52>>2]=d;d=c[b+48>>2]<<1;c[b+76>>2]=kf(d>>>0>536870911?-1:d<<3)|0;d=c[b+48>>2]<<1;c[b+56>>2]=kf((d|0)<0?-1:d)|0;d=c[b+48>>2]<<1;c[b+60>>2]=kf(d>>>0>1073741823?-1:d<<2)|0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[b+48>>2]|0))break;a[(c[b+56>>2]|0)+(c[f>>2]|0)>>0]=1;a[(c[b+56>>2]|0)+((c[f>>2]|0)+(c[b+48>>2]|0))>>0]=-1;c[(c[b+60>>2]|0)+(c[f>>2]<<2)>>2]=c[f>>2];c[(c[b+60>>2]|0)+((c[f>>2]|0)+(c[b+48>>2]|0)<<2)>>2]=c[f>>2];k=b+4|0;e=c[k>>2]|0;k=c[k+4>>2]|0;d=b+(k>>1)|0;if(k&1|0)e=c[(c[d>>2]|0)+e>>2]|0;m=+Va[e&7](d,c[f>>2]|0,c[f>>2]|0);h[(c[b+76>>2]|0)+(c[f>>2]<<3)>>3]=m;h[(c[b+76>>2]|0)+((c[f>>2]|0)+(c[b+48>>2]|0)<<3)>>3]=+h[(c[b+76>>2]|0)+(c[f>>2]<<3)>>3];c[f>>2]=(c[f>>2]|0)+1}k=c[b+48>>2]<<1;c[b+68>>2]=kf(k>>>0>1073741823?-1:k<<2)|0;k=c[b+48>>2]<<1;c[b+68+4>>2]=kf(k>>>0>1073741823?-1:k<<2)|0;c[b+64>>2]=0;l=g;return}function Fc(a,b,d,e,f,g,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=+i;j=+j;k=+k;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;o=l;l=l+64|0;z=o+52|0;y=o+48|0;x=o+44|0;w=o+40|0;v=o+36|0;u=o+32|0;t=o+16|0;s=o+8|0;r=o;q=o+28|0;p=o+24|0;c[z>>2]=a;c[y>>2]=b;c[x>>2]=d;c[w>>2]=e;c[v>>2]=f;c[u>>2]=g;h[t>>3]=i;h[s>>3]=j;h[r>>3]=k;c[q>>2]=m;c[p>>2]=n;f=c[z>>2]|0;c[f+76>>2]=c[q>>2];gc(f,c[y>>2]|0,c[x>>2]|0,c[w>>2]|0,c[v>>2]|0,c[u>>2]|0,+h[t>>3],+h[s>>3],+h[r>>3],c[q>>2]|0,c[p>>2]|0);l=o;return}function Gc(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;b=c[b>>2]|0;c[b>>2]=324;a=c[b+52>>2]|0;if(a|0){Ob(a);lf(a)}a=c[b+56>>2]|0;if(a|0)mf(a);a=c[b+60>>2]|0;if(a|0)mf(a);a=c[b+68>>2]|0;if(a|0)mf(a);a=c[b+68+4>>2]|0;if(a|0)mf(a);a=c[b+76>>2]|0;if(!a){lb(b);l=d;return}mf(a);lb(b);l=d;return}function Hc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;o=l;l=l+32|0;p=o+20|0;i=o+12|0;k=o+4|0;h=o+24|0;j=o+16|0;m=o+8|0;f=o;n=o+28|0;c[p>>2]=b;c[i>>2]=d;c[k>>2]=e;b=c[p>>2]|0;c[m>>2]=c[(c[b+60>>2]|0)+(c[i>>2]<<2)>>2];e=Rb(c[b+52>>2]|0,c[m>>2]|0,h,c[b+48>>2]|0)|0;a:do if((e|0)<(c[b+48>>2]|0)){c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[b+48>>2]|0))break a;p=b+4|0;d=c[p>>2]|0;p=c[p+4>>2]|0;e=b+(p>>1)|0;if(p&1|0)d=c[(c[e>>2]|0)+d>>2]|0;q=+Va[d&7](e,c[m>>2]|0,c[j>>2]|0);g[(c[h>>2]|0)+(c[j>>2]<<2)>>2]=q;c[j>>2]=(c[j>>2]|0)+1}}while(0);c[f>>2]=c[b+68+(c[b+64>>2]<<2)>>2];c[b+64>>2]=1-(c[b+64>>2]|0);a[n>>0]=a[(c[b+56>>2]|0)+(c[i>>2]|0)>>0]|0;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[k>>2]|0))break;g[(c[f>>2]|0)+(c[j>>2]<<2)>>2]=+(a[n>>0]|0)*+(a[(c[b+56>>2]|0)+(c[j>>2]|0)>>0]|0)*+g[(c[h>>2]|0)+(c[(c[b+60>>2]|0)+(c[j>>2]<<2)>>2]<<2)>>2];c[j>>2]=(c[j>>2]|0)+1}l=o;return c[f>>2]|0}function Ic(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;l=d;return c[(c[b>>2]|0)+76>>2]|0}function Jc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;a=c[h>>2]|0;Ab((c[a+56>>2]|0)+(c[g>>2]|0)|0,(c[a+56>>2]|0)+(c[f>>2]|0)|0);Cb((c[a+60>>2]|0)+(c[g>>2]<<2)|0,(c[a+60>>2]|0)+(c[f>>2]<<2)|0);ob((c[a+76>>2]|0)+(c[g>>2]<<3)|0,(c[a+76>>2]|0)+(c[f>>2]<<3)|0);l=e;return}function Kc(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=c[d>>2]|0;Gc(a);lf(a);l=b;return}function Lc(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[c[d>>2]>>2]=236;l=b;return}function Mc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0.0;g=l;l=l+16|0;j=g+8|0;f=g+4|0;i=g;e=g+12|0;c[j>>2]=a;c[f>>2]=b;c[i>>2]=d;a=c[j>>2]|0;Vb(a,c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+8>>2]|0,c[i>>2]|0);c[a>>2]=352;b=jf(28)|0;Mb(b,c[c[f>>2]>>2]|0,~~(+h[(c[i>>2]|0)+32>>3]*1048576.0));c[a+48>>2]=b;b=c[c[f>>2]>>2]|0;c[a+52>>2]=kf(b>>>0>536870911?-1:b<<3)|0;c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[c[f>>2]>>2]|0))break;j=a+4|0;d=c[j>>2]|0;j=c[j+4>>2]|0;b=a+(j>>1)|0;if(j&1|0)d=c[(c[b>>2]|0)+d>>2]|0;k=+Va[d&7](b,c[e>>2]|0,c[e>>2]|0);h[(c[a+52>>2]|0)+(c[e>>2]<<3)>>3]=k;c[e>>2]=(c[e>>2]|0)+1}l=g;return}function Nc(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;b=c[b>>2]|0;c[b>>2]=352;a=c[b+48>>2]|0;if(a|0){Ob(a);lf(a)}a=c[b+52>>2]|0;if(!a){lb(b);l=d;return}mf(a);lb(b);l=d;return}function Oc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0.0;k=l;l=l+32|0;m=k+16|0;h=k+8|0;j=k;f=k+20|0;e=k+12|0;i=k+4|0;c[m>>2]=a;c[h>>2]=b;c[j>>2]=d;a=c[m>>2]|0;d=Rb(c[a+48>>2]|0,c[h>>2]|0,f,c[j>>2]|0)|0;c[e>>2]=d;if((d|0)>=(c[j>>2]|0)){m=c[f>>2]|0;l=k;return m|0}c[i>>2]=c[e>>2];while(1){if((c[i>>2]|0)>=(c[j>>2]|0))break;m=a+4|0;b=c[m>>2]|0;m=c[m+4>>2]|0;d=a+(m>>1)|0;if(m&1|0)b=c[(c[d>>2]|0)+b>>2]|0;n=+Va[b&7](d,c[h>>2]|0,c[i>>2]|0);g[(c[f>>2]|0)+(c[i>>2]<<2)>>2]=n;c[i>>2]=(c[i>>2]|0)+1}m=c[f>>2]|0;l=k;return m|0}function Pc(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;l=d;return c[(c[b>>2]|0)+52>>2]|0}function Qc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;a=c[h>>2]|0;Sb(c[a+48>>2]|0,c[g>>2]|0,c[f>>2]|0);jb(a,c[g>>2]|0,c[f>>2]|0);ob((c[a+52>>2]|0)+(c[g>>2]<<3)|0,(c[a+52>>2]|0)+(c[f>>2]<<3)|0);l=e;return}function Rc(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=c[d>>2]|0;Nc(a);lf(a);l=b;return}function Sc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;i=l;l=l+32|0;m=i+12|0;g=i+8|0;j=i+4|0;k=i;f=i+16|0;c[m>>2]=a;c[g>>2]=b;c[j>>2]=d;c[k>>2]=e;a=c[m>>2]|0;Vb(a,c[c[g>>2]>>2]|0,c[(c[g>>2]|0)+8>>2]|0,c[j>>2]|0);c[a>>2]=380;ic(a+48|0,c[k>>2]|0,c[c[g>>2]>>2]|0);e=jf(28)|0;Mb(e,c[c[g>>2]>>2]|0,~~(+h[(c[j>>2]|0)+32>>3]*1048576.0));c[a+52>>2]=e;e=c[c[g>>2]>>2]|0;c[a+56>>2]=kf(e>>>0>536870911?-1:e<<3)|0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[g>>2]>>2]|0))break;m=a+4|0;d=c[m>>2]|0;m=c[m+4>>2]|0;b=a+(m>>1)|0;if(m&1|0)d=c[(c[b>>2]|0)+d>>2]|0;n=+Va[d&7](b,c[f>>2]|0,c[f>>2]|0);h[(c[a+56>>2]|0)+(c[f>>2]<<3)>>3]=n;c[f>>2]=(c[f>>2]|0)+1}l=i;return}function Tc(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;b=c[b>>2]|0;c[b>>2]=380;a=c[b+48>>2]|0;if(a|0)mf(a);a=c[b+52>>2]|0;if(a|0){Ob(a);lf(a)}a=c[b+56>>2]|0;if(!a){lb(b);l=d;return}mf(a);lb(b);l=d;return}function Uc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;o=n+16|0;j=n+8|0;m=n;i=n+20|0;h=n+12|0;k=n+4|0;c[o>>2]=b;c[j>>2]=d;c[m>>2]=e;b=c[o>>2]|0;e=Rb(c[b+52>>2]|0,c[j>>2]|0,i,c[m>>2]|0)|0;c[h>>2]=e;if((e|0)>=(c[m>>2]|0)){o=c[i>>2]|0;l=n;return o|0}c[k>>2]=c[h>>2];while(1){if((c[k>>2]|0)>=(c[m>>2]|0))break;f=+(S(a[(c[b+48>>2]|0)+(c[j>>2]|0)>>0]|0,a[(c[b+48>>2]|0)+(c[k>>2]|0)>>0]|0)|0);o=b+4|0;d=c[o>>2]|0;o=c[o+4>>2]|0;e=b+(o>>1)|0;if(o&1|0)d=c[(c[e>>2]|0)+d>>2]|0;f=f*+Va[d&7](e,c[j>>2]|0,c[k>>2]|0);g[(c[i>>2]|0)+(c[k>>2]<<2)>>2]=f;c[k>>2]=(c[k>>2]|0)+1}o=c[i>>2]|0;l=n;return o|0}function Vc(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;l=d;return c[(c[b>>2]|0)+56>>2]|0}function Wc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;a=c[h>>2]|0;Sb(c[a+52>>2]|0,c[g>>2]|0,c[f>>2]|0);jb(a,c[g>>2]|0,c[f>>2]|0);Ab((c[a+48>>2]|0)+(c[g>>2]|0)|0,(c[a+48>>2]|0)+(c[f>>2]|0)|0);ob((c[a+56>>2]|0)+(c[g>>2]<<3)|0,(c[a+56>>2]|0)+(c[f>>2]<<3)|0);l=e;return}function Xc(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=c[d>>2]|0;Tc(a);lf(a);l=b;return}function Yc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=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.0;A=l;l=l+96|0;w=A+76|0;u=A+68|0;t=A+60|0;y=A+52|0;m=A+80|0;k=A+72|0;q=A+64|0;v=A+56|0;s=A+48|0;x=A+44|0;r=A+40|0;g=A+36|0;j=A+32|0;f=A+20|0;n=A+16|0;o=A+12|0;i=A+8|0;p=A+4|0;c[w>>2]=a;c[u>>2]=b;c[t>>2]=d;c[y>>2]=e;c[q>>2]=c[c[w>>2]>>2];c[v>>2]=cf(c[q>>2]<<2)|0;if((c[t>>2]|0)>(c[q>>2]|0)){c[t>>2]=c[q>>2];Ee(c[218]|0,1929,A)|0}c[k>>2]=cf((c[t>>2]|0)+1<<2)|0;if((c[c[u>>2]>>2]|0)!=0?(c[c[u>>2]>>2]|0)!=1:0)z=35;else if((c[t>>2]|0)<(c[q>>2]|0)){c[x>>2]=0;c[r>>2]=0;c[g>>2]=0;rc(c[w>>2]|0,s,r,x,g,c[v>>2]|0);c[j>>2]=cf(c[t>>2]<<2)|0;c[n>>2]=cf(c[q>>2]<<2)|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[q>>2]|0))break;c[(c[n>>2]|0)+(c[m>>2]<<2)>>2]=c[(c[v>>2]|0)+(c[m>>2]<<2)>>2];c[m>>2]=(c[m>>2]|0)+1}c[f>>2]=0;while(1){e=(c[f>>2]|0)<(c[s>>2]|0);c[m>>2]=0;if(!e)break;while(1){if((c[m>>2]|0)>=(c[(c[g>>2]|0)+(c[f>>2]<<2)>>2]|0))break;a=c[m>>2]|0;e=Te()|0;c[o>>2]=a+((e|0)%((c[(c[g>>2]|0)+(c[f>>2]<<2)>>2]|0)-(c[m>>2]|0)|0)|0);Cb((c[n>>2]|0)+((c[(c[x>>2]|0)+(c[f>>2]<<2)>>2]|0)+(c[o>>2]|0)<<2)|0,(c[n>>2]|0)+((c[(c[x>>2]|0)+(c[f>>2]<<2)>>2]|0)+(c[m>>2]|0)<<2)|0);c[m>>2]=(c[m>>2]|0)+1}c[f>>2]=(c[f>>2]|0)+1}while(1){if((c[m>>2]|0)>=(c[t>>2]|0))break;c[(c[j>>2]|0)+(c[m>>2]<<2)>>2]=0;c[f>>2]=0;while(1){d=(c[m>>2]|0)+1|0;if((c[f>>2]|0)>=(c[s>>2]|0))break;b=S(d,c[(c[g>>2]|0)+(c[f>>2]<<2)>>2]|0)|0;a=S(c[m>>2]|0,c[(c[g>>2]|0)+(c[f>>2]<<2)>>2]|0)|0;e=(c[j>>2]|0)+(c[m>>2]<<2)|0;c[e>>2]=(c[e>>2]|0)+(((b|0)/(c[t>>2]|0)|0)-((a|0)/(c[t>>2]|0)|0));c[f>>2]=(c[f>>2]|0)+1}c[m>>2]=d}c[c[k>>2]>>2]=0;c[m>>2]=1;while(1){if((c[m>>2]|0)>(c[t>>2]|0))break;c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]=(c[(c[k>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0)+(c[(c[j>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0);c[m>>2]=(c[m>>2]|0)+1}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[s>>2]|0))break;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[t>>2]|0))break;e=S(c[m>>2]|0,c[(c[g>>2]|0)+(c[f>>2]<<2)>>2]|0)|0;c[o>>2]=(c[(c[x>>2]|0)+(c[f>>2]<<2)>>2]|0)+((e|0)/(c[t>>2]|0)|0);e=S((c[m>>2]|0)+1|0,c[(c[g>>2]|0)+(c[f>>2]<<2)>>2]|0)|0;c[i>>2]=(c[(c[x>>2]|0)+(c[f>>2]<<2)>>2]|0)+((e|0)/(c[t>>2]|0)|0);c[p>>2]=c[o>>2];while(1){if((c[p>>2]|0)>=(c[i>>2]|0))break;c[(c[v>>2]|0)+(c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]<<2)>>2]=c[(c[n>>2]|0)+(c[p>>2]<<2)>>2];e=(c[k>>2]|0)+(c[m>>2]<<2)|0;c[e>>2]=(c[e>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+1}c[m>>2]=(c[m>>2]|0)+1}c[f>>2]=(c[f>>2]|0)+1}c[c[k>>2]>>2]=0;c[m>>2]=1;while(1){if((c[m>>2]|0)>(c[t>>2]|0))break;c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]=(c[(c[k>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0)+(c[(c[j>>2]|0)+((c[m>>2]|0)-1<<2)>>2]|0);c[m>>2]=(c[m>>2]|0)+1}df(c[x>>2]|0);df(c[r>>2]|0);df(c[g>>2]|0);df(c[n>>2]|0);df(c[j>>2]|0)}else z=35;a:do if((z|0)==35){c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[q>>2]|0))break;c[(c[v>>2]|0)+(c[m>>2]<<2)>>2]=c[m>>2];c[m>>2]=(c[m>>2]|0)+1}c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[q>>2]|0))break;p=c[m>>2]|0;s=Te()|0;c[x>>2]=p+((s|0)%((c[q>>2]|0)-(c[m>>2]|0)|0)|0);Cb((c[v>>2]|0)+(c[m>>2]<<2)|0,(c[v>>2]|0)+(c[x>>2]<<2)|0);c[m>>2]=(c[m>>2]|0)+1}c[m>>2]=0;while(1){if((c[m>>2]|0)>(c[t>>2]|0))break a;s=S(c[m>>2]|0,c[q>>2]|0)|0;c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]=(s|0)/(c[t>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+1}}while(0);c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[t>>2]|0))break;c[x>>2]=c[(c[k>>2]|0)+(c[m>>2]<<2)>>2];c[r>>2]=c[(c[k>>2]|0)+((c[m>>2]|0)+1<<2)>>2];c[f>>2]=(c[q>>2]|0)-((c[r>>2]|0)-(c[x>>2]|0));c[f+8>>2]=cf(c[f>>2]<<2)|0;c[f+4>>2]=cf(c[f>>2]<<3)|0;c[j>>2]=0;c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[x>>2]|0))break;c[(c[f+8>>2]|0)+(c[j>>2]<<2)>>2]=c[(c[(c[w>>2]|0)+8>>2]|0)+(c[(c[v>>2]|0)+(c[g>>2]<<2)>>2]<<2)>>2];h[(c[f+4>>2]|0)+(c[j>>2]<<3)>>3]=+h[(c[(c[w>>2]|0)+4>>2]|0)+(c[(c[v>>2]|0)+(c[g>>2]<<2)>>2]<<3)>>3];c[j>>2]=(c[j>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+1}c[g>>2]=c[r>>2];while(1){if((c[g>>2]|0)>=(c[q>>2]|0))break;c[(c[f+8>>2]|0)+(c[j>>2]<<2)>>2]=c[(c[(c[w>>2]|0)+8>>2]|0)+(c[(c[v>>2]|0)+(c[g>>2]<<2)>>2]<<2)>>2];h[(c[f+4>>2]|0)+(c[j>>2]<<3)>>3]=+h[(c[(c[w>>2]|0)+4>>2]|0)+(c[(c[v>>2]|0)+(c[g>>2]<<2)>>2]<<3)>>3];c[j>>2]=(c[j>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+1}c[n>>2]=oc(f,c[u>>2]|0)|0;do if(c[(c[u>>2]|0)+92>>2]|0){if(c[c[u>>2]>>2]|0?(c[c[u>>2]>>2]|0)!=1:0){z=59;break}c[o>>2]=cf((Zc(c[n>>2]|0)|0)<<3)|0;c[g>>2]=c[x>>2];while(1){if((c[g>>2]|0)>=(c[r>>2]|0))break;B=+_c(c[n>>2]|0,c[(c[(c[w>>2]|0)+8>>2]|0)+(c[(c[v>>2]|0)+(c[g>>2]<<2)>>2]<<2)>>2]|0,c[o>>2]|0);h[(c[y>>2]|0)+(c[(c[v>>2]|0)+(c[g>>2]<<2)>>2]<<3)>>3]=B;c[g>>2]=(c[g>>2]|0)+1}df(c[o>>2]|0)}else z=59;while(0);b:do if((z|0)==59){z=0;c[g>>2]=c[x>>2];while(1){if((c[g>>2]|0)>=(c[r>>2]|0))break b;B=+$c(c[n>>2]|0,c[(c[(c[w>>2]|0)+8>>2]|0)+(c[(c[v>>2]|0)+(c[g>>2]<<2)>>2]<<2)>>2]|0);h[(c[y>>2]|0)+(c[(c[v>>2]|0)+(c[g>>2]<<2)>>2]<<3)>>3]=B;c[g>>2]=(c[g>>2]|0)+1}}while(0);uc(n);df(c[f+8>>2]|0);df(c[f+4>>2]|0);c[m>>2]=(c[m>>2]|0)+1}df(c[k>>2]|0);df(c[v>>2]|0);l=A;return}function Zc(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;l=d;return c[(c[b>>2]|0)+96>>2]|0}function _c(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+64|0;p=s+8|0;k=s+40|0;q=s+32|0;o=s+28|0;f=s+48|0;m=s+44|0;e=s+36|0;j=s;n=s+24|0;i=s+20|0;g=s+16|0;c[k>>2]=a;c[q>>2]=b;c[o>>2]=d;if(!((c[c[k>>2]>>2]|0)!=0?(c[c[k>>2]>>2]|0)!=1:0))r=3;if(((r|0)==3?c[(c[k>>2]|0)+116>>2]|0:0)?c[(c[k>>2]|0)+120>>2]|0:0){c[m>>2]=c[(c[k>>2]|0)+96>>2];c[e>>2]=cf(((S(c[m>>2]|0,(c[m>>2]|0)-1|0)|0)/2|0)<<3)|0;+tc(c[k>>2]|0,c[q>>2]|0,c[e>>2]|0);h[j>>3]=1.0e-07;c[n>>2]=cf(c[m>>2]<<2)|0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[m>>2]|0))break;r=cf(c[m>>2]<<3)|0;c[(c[n>>2]|0)+(c[f>>2]<<2)>>2]=r;c[f>>2]=(c[f>>2]|0)+1}c[i>>2]=0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[m>>2]|0))break;c[g>>2]=(c[f>>2]|0)+1;while(1){if((c[g>>2]|0)>=(c[m>>2]|0))break;t=+ad(+h[(c[e>>2]|0)+(c[i>>2]<<3)>>3],+h[(c[(c[k>>2]|0)+116>>2]|0)+(c[i>>2]<<3)>>3],+h[(c[(c[k>>2]|0)+120>>2]|0)+(c[i>>2]<<3)>>3]);t=+Gb(t,+h[j>>3]);t=+Fb(t,1.0-+h[j>>3]);h[(c[(c[n>>2]|0)+(c[f>>2]<<2)>>2]|0)+(c[g>>2]<<3)>>3]=t;h[(c[(c[n>>2]|0)+(c[g>>2]<<2)>>2]|0)+(c[f>>2]<<3)>>3]=1.0-+h[(c[(c[n>>2]|0)+(c[f>>2]<<2)>>2]|0)+(c[g>>2]<<3)>>3];c[i>>2]=(c[i>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+1}c[f>>2]=(c[f>>2]|0)+1}if((c[m>>2]|0)==2){h[c[o>>2]>>3]=+h[(c[c[n>>2]>>2]|0)+8>>3];h[(c[o>>2]|0)+8>>3]=+h[c[(c[n>>2]|0)+4>>2]>>3]}else bd(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0);c[g>>2]=0;c[f>>2]=1;while(1){if((c[f>>2]|0)>=(c[m>>2]|0))break;if(+h[(c[o>>2]|0)+(c[f>>2]<<3)>>3]>+h[(c[o>>2]|0)+(c[g>>2]<<3)>>3])c[g>>2]=c[f>>2];c[f>>2]=(c[f>>2]|0)+1}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[m>>2]|0))break;df(c[(c[n>>2]|0)+(c[f>>2]<<2)>>2]|0);c[f>>2]=(c[f>>2]|0)+1}df(c[e>>2]|0);df(c[n>>2]|0);h[p>>3]=+(c[(c[(c[k>>2]|0)+128>>2]|0)+(c[g>>2]<<2)>>2]|0);t=+h[p>>3];l=s;return +t}h[p>>3]=+$c(c[k>>2]|0,c[q>>2]|0);t=+h[p>>3];l=s;return +t}function $c(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;e=j+16|0;i=j+8|0;f=j+20|0;d=j+12|0;g=j;c[e>>2]=a;c[i>>2]=b;c[f>>2]=c[(c[e>>2]|0)+96>>2];if(((c[c[e>>2]>>2]|0)!=2?(c[c[e>>2]>>2]|0)!=3:0)?(c[c[e>>2]>>2]|0)!=4:0)c[d>>2]=cf(((S(c[f>>2]|0,(c[f>>2]|0)-1|0)|0)/2|0)<<3)|0;else c[d>>2]=cf(8)|0;h[g>>3]=+tc(c[e>>2]|0,c[i>>2]|0,c[d>>2]|0);df(c[d>>2]|0);l=j;return +(+h[g>>3])}function ad(a,b,d){a=+a;b=+b;d=+d;var e=0,f=0,g=0,i=0,j=0,k=0,m=0;i=l;l=l+48|0;g=i+24|0;m=i+16|0;k=i+8|0;j=i;f=i+32|0;e=i+40|0;h[m>>3]=a;h[k>>3]=b;h[j>>3]=d;h[f>>3]=+h[m>>3]*+h[k>>3]+ +h[j>>3];b=+h[f>>3];if(+h[f>>3]>=0.0){a=+P(+-b);h[g>>3]=a/(+P(+-+h[f>>3])+1.0);c[e>>2]=1;a=+h[g>>3];l=i;return +a}else{h[g>>3]=1.0/(+P(+b)+1.0);c[e>>2]=1;a=+h[g>>3];l=i;return +a}return 0.0}function bd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+80|0;q=v+32|0;t=v+68|0;p=v+60|0;n=v+52|0;u=v+72|0;j=v+64|0;i=v+56|0;m=v+48|0;r=v+44|0;s=v+40|0;o=v+24|0;f=v+16|0;k=v+8|0;g=v;e=v+36|0;c[t>>2]=a;c[p>>2]=b;c[n>>2]=d;c[i>>2]=0;c[m>>2]=mc(100,c[t>>2]|0)|0;c[r>>2]=cf(c[t>>2]<<2)|0;c[s>>2]=cf(c[t>>2]<<3)|0;h[f>>3]=.005/+(c[t>>2]|0);c[u>>2]=0;while(1){if((c[u>>2]|0)>=(c[t>>2]|0))break;h[(c[n>>2]|0)+(c[u>>2]<<3)>>3]=1.0/+(c[t>>2]|0);b=cf(c[t>>2]<<3)|0;c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]=b;h[(c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[u>>2]<<3)>>3]=0.0;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[u>>2]|0))break;b=(c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[u>>2]<<3)|0;h[b>>3]=+h[b>>3]+ +h[(c[(c[p>>2]|0)+(c[j>>2]<<2)>>2]|0)+(c[u>>2]<<3)>>3]*+h[(c[(c[p>>2]|0)+(c[j>>2]<<2)>>2]|0)+(c[u>>2]<<3)>>3];h[(c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[j>>2]<<3)>>3]=+h[(c[(c[r>>2]|0)+(c[j>>2]<<2)>>2]|0)+(c[u>>2]<<3)>>3];c[j>>2]=(c[j>>2]|0)+1}c[j>>2]=(c[u>>2]|0)+1;while(1){if((c[j>>2]|0)>=(c[t>>2]|0))break;b=(c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[u>>2]<<3)|0;h[b>>3]=+h[b>>3]+ +h[(c[(c[p>>2]|0)+(c[j>>2]<<2)>>2]|0)+(c[u>>2]<<3)>>3]*+h[(c[(c[p>>2]|0)+(c[j>>2]<<2)>>2]|0)+(c[u>>2]<<3)>>3];h[(c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[j>>2]<<3)>>3]=-+h[(c[(c[p>>2]|0)+(c[j>>2]<<2)>>2]|0)+(c[u>>2]<<3)>>3]*+h[(c[(c[p>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[j>>2]<<3)>>3];c[j>>2]=(c[j>>2]|0)+1}c[u>>2]=(c[u>>2]|0)+1}c[i>>2]=0;while(1){if((c[i>>2]|0)>=(c[m>>2]|0))break;h[o>>3]=0.0;c[u>>2]=0;while(1){if((c[u>>2]|0)>=(c[t>>2]|0))break;h[(c[s>>2]|0)+(c[u>>2]<<3)>>3]=0.0;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[t>>2]|0))break;p=(c[s>>2]|0)+(c[u>>2]<<3)|0;h[p>>3]=+h[p>>3]+ +h[(c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[j>>2]<<3)>>3]*+h[(c[n>>2]|0)+(c[j>>2]<<3)>>3];c[j>>2]=(c[j>>2]|0)+1}h[o>>3]=+h[o>>3]+ +h[(c[n>>2]|0)+(c[u>>2]<<3)>>3]*+h[(c[s>>2]|0)+(c[u>>2]<<3)>>3];c[u>>2]=(c[u>>2]|0)+1}h[k>>3]=0.0;c[u>>2]=0;while(1){if((c[u>>2]|0)>=(c[t>>2]|0))break;h[g>>3]=+F(+(+h[(c[s>>2]|0)+(c[u>>2]<<3)>>3]-+h[o>>3]));if(+h[g>>3]>+h[k>>3])h[k>>3]=+h[g>>3];c[u>>2]=(c[u>>2]|0)+1}if(+h[k>>3]<+h[f>>3])c[e>>2]=11;else{c[u>>2]=0;while(1){if((c[u>>2]|0)>=(c[t>>2]|0))break;h[g>>3]=(-+h[(c[s>>2]|0)+(c[u>>2]<<3)>>3]+ +h[o>>3])/+h[(c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[u>>2]<<3)>>3];p=(c[n>>2]|0)+(c[u>>2]<<3)|0;h[p>>3]=+h[p>>3]+ +h[g>>3];h[o>>3]=(+h[o>>3]+ +h[g>>3]*(+h[g>>3]*+h[(c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[u>>2]<<3)>>3]+ +h[(c[s>>2]|0)+(c[u>>2]<<3)>>3]*2.0))/(+h[g>>3]+1.0)/(+h[g>>3]+1.0);c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[t>>2]|0))break;h[(c[s>>2]|0)+(c[j>>2]<<3)>>3]=(+h[(c[s>>2]|0)+(c[j>>2]<<3)>>3]+ +h[g>>3]*+h[(c[(c[r>>2]|0)+(c[u>>2]<<2)>>2]|0)+(c[j>>2]<<3)>>3])/(+h[g>>3]+1.0);p=(c[n>>2]|0)+(c[j>>2]<<3)|0;h[p>>3]=+h[p>>3]/(+h[g>>3]+1.0);c[j>>2]=(c[j>>2]|0)+1}c[u>>2]=(c[u>>2]|0)+1}c[e>>2]=0}if((c[e>>2]|0)>>>0>=1)break;c[i>>2]=(c[i>>2]|0)+1}if((c[i>>2]|0)>=(c[m>>2]|0))xb(2030,q);c[u>>2]=0;while(1){e=c[r>>2]|0;if((c[u>>2]|0)>=(c[t>>2]|0))break;df(c[e+(c[u>>2]<<2)>>2]|0);c[u>>2]=(c[u>>2]|0)+1}df(e);df(c[s>>2]|0);l=v;return}function cd(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;c[b>>2]=a;l=d;return c[c[b>>2]>>2]|0}function dd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=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.0;M=l;l=l+256|0;K=M+216|0;J=M+200|0;I=M+192|0;H=M+184|0;G=M+176|0;F=M+168|0;E=M+160|0;D=M+152|0;C=M+144|0;B=M+136|0;A=M+128|0;y=M+120|0;x=M+112|0;w=M+104|0;v=M+96|0;u=M+88|0;t=M+80|0;s=M+72|0;r=M+64|0;q=M+56|0;p=M+48|0;o=M+40|0;n=M+32|0;L=M+24|0;z=M+16|0;m=M+8|0;k=M;j=M+240|0;N=M+232|0;f=M+224|0;e=M+244|0;d=M+220|0;g=M+236|0;i=M+228|0;c[N>>2]=a;c[f>>2]=b;c[e>>2]=Ne(c[N>>2]|0,2067)|0;if(!(c[e>>2]|0)){c[j>>2]=-1;c[d>>2]=1;N=c[j>>2]|0;l=M;return N|0}c[g>>2]=ge(6,0)|0;if(c[g>>2]|0)c[g>>2]=Se(c[g>>2]|0)|0;ge(6,4852)|0;c[i>>2]=c[f>>2];N=c[e>>2]|0;c[k>>2]=c[400+(c[c[i>>2]>>2]<<2)>>2];Ee(N,2069,k)|0;N=c[e>>2]|0;c[m>>2]=c[424+(c[(c[i>>2]|0)+4>>2]<<2)>>2];Ee(N,2082,m)|0;if((c[(c[i>>2]|0)+4>>2]|0)==1){N=c[e>>2]|0;c[z>>2]=c[(c[i>>2]|0)+8>>2];Ee(N,2098,z)|0}if(!(((c[(c[i>>2]|0)+4>>2]|0)!=1?(c[(c[i>>2]|0)+4>>2]|0)!=2:0)?(c[(c[i>>2]|0)+4>>2]|0)!=3:0)){N=c[e>>2]|0;h[L>>3]=+h[(c[i>>2]|0)+16>>3];Ee(N,2109,L)|0}if(!((c[(c[i>>2]|0)+4>>2]|0)!=1?(c[(c[i>>2]|0)+4>>2]|0)!=3:0)){N=c[e>>2]|0;h[n>>3]=+h[(c[i>>2]|0)+24>>3];Ee(N,2119,n)|0}c[m>>2]=c[(c[f>>2]|0)+96>>2];c[k>>2]=c[(c[f>>2]|0)+100>>2];N=c[e>>2]|0;c[o>>2]=c[m>>2];Ee(N,2129,o)|0;N=c[e>>2]|0;c[p>>2]=c[k>>2];Ee(N,2142,p)|0;Ee(c[e>>2]|0,2155,q)|0;c[q>>2]=0;while(1){if((c[q>>2]|0)>=((S(c[m>>2]|0,(c[m>>2]|0)-1|0)|0)/2|0|0))break;N=c[e>>2]|0;h[s>>3]=+h[(c[(c[f>>2]|0)+112>>2]|0)+(c[q>>2]<<3)>>3];Ee(N,2159,s)|0;c[q>>2]=(c[q>>2]|0)+1}c[d>>2]=2;Ee(c[e>>2]|0,2163,r)|0;if(c[(c[f>>2]|0)+128>>2]|0){Ee(c[e>>2]|0,2165,t)|0;c[t>>2]=0;while(1){if((c[t>>2]|0)>=(c[m>>2]|0))break;N=c[e>>2]|0;c[v>>2]=c[(c[(c[f>>2]|0)+128>>2]|0)+(c[t>>2]<<2)>>2];Ee(N,2171,v)|0;c[t>>2]=(c[t>>2]|0)+1}c[d>>2]=5;Ee(c[e>>2]|0,2163,u)|0}if(c[(c[f>>2]|0)+116>>2]|0){Ee(c[e>>2]|0,2175,w)|0;c[w>>2]=0;while(1){if((c[w>>2]|0)>=((S(c[m>>2]|0,(c[m>>2]|0)-1|0)|0)/2|0|0))break;N=c[e>>2]|0;h[y>>3]=+h[(c[(c[f>>2]|0)+116>>2]|0)+(c[w>>2]<<3)>>3];Ee(N,2159,y)|0;c[w>>2]=(c[w>>2]|0)+1}c[d>>2]=8;Ee(c[e>>2]|0,2163,x)|0}if(c[(c[f>>2]|0)+120>>2]|0){Ee(c[e>>2]|0,2181,A)|0;c[A>>2]=0;while(1){if((c[A>>2]|0)>=((S(c[m>>2]|0,(c[m>>2]|0)-1|0)|0)/2|0|0))break;N=c[e>>2]|0;h[C>>3]=+h[(c[(c[f>>2]|0)+120>>2]|0)+(c[A>>2]<<3)>>3];Ee(N,2159,C)|0;c[A>>2]=(c[A>>2]|0)+1}c[d>>2]=11;Ee(c[e>>2]|0,2163,B)|0}if(c[(c[f>>2]|0)+132>>2]|0){Ee(c[e>>2]|0,2187,D)|0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[m>>2]|0))break;N=c[e>>2]|0;c[F>>2]=c[(c[(c[f>>2]|0)+132>>2]|0)+(c[D>>2]<<2)>>2];Ee(N,2171,F)|0;c[D>>2]=(c[D>>2]|0)+1}c[d>>2]=14;Ee(c[e>>2]|0,2163,E)|0}Ee(c[e>>2]|0,2193,G)|0;c[G>>2]=c[(c[f>>2]|0)+108>>2];c[r>>2]=c[(c[f>>2]|0)+104>>2];c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[k>>2]|0))break;c[p>>2]=0;while(1){if((c[p>>2]|0)>=((c[m>>2]|0)-1|0))break;N=c[e>>2]|0;h[H>>3]=+h[(c[(c[G>>2]|0)+(c[p>>2]<<2)>>2]|0)+(c[q>>2]<<3)>>3];Ee(N,2197,H)|0;c[p>>2]=(c[p>>2]|0)+1}c[d>>2]=20;c[p>>2]=c[(c[r>>2]|0)+(c[q>>2]<<2)>>2];a:do if((c[(c[i>>2]|0)+4>>2]|0)==4){N=c[e>>2]|0;c[I>>2]=~~+h[(c[p>>2]|0)+8>>3];Ee(N,2204,I)|0}else while(1){if((c[c[p>>2]>>2]|0)==-1)break a;N=c[e>>2]|0;O=+h[(c[p>>2]|0)+8>>3];c[J>>2]=c[c[p>>2]>>2];h[J+8>>3]=O;Ee(N,2210,J)|0;c[p>>2]=(c[p>>2]|0)+16}while(0);Ee(c[e>>2]|0,2163,K)|0;c[q>>2]=(c[q>>2]|0)+1}c[d>>2]=17;ge(6,c[g>>2]|0)|0;df(c[g>>2]|0);if(!(Ce(c[e>>2]|0)|0)?!(ie(c[e>>2]|0)|0):0){c[j>>2]=0;c[d>>2]=1}else{c[j>>2]=-1;c[d>>2]=1}N=c[j>>2]|0;l=M;return N|0}function ed(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[64]=(c[d>>2]|0)==0?6:c[d>>2]|0;l=b;return}function fd(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=nd(c[a+60>>2]|0)|0;a=id(Ea(6,d|0)|0)|0;l=b;return a|0}function gd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=8;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Aa(54,f|0)|0):0)a[b+75>>0]=-1;f=md(b,d,e)|0;l=g;return f|0}function hd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((id(Ha(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function id(a){a=a|0;if(a>>>0>4294963200){c[(jd()|0)>>2]=0-a;a=-1}return a|0}function jd(){return (kd()|0)+64|0}function kd(){return ld()|0}function ld(){return 624}function md(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;i=n+16|0;f=n;e=n+32|0;j=a+28|0;g=c[j>>2]|0;c[e>>2]=g;k=a+20|0;g=(c[k>>2]|0)-g|0;c[e+4>>2]=g;c[e+8>>2]=b;c[e+12>>2]=d;g=g+d|0;h=a+60|0;c[f>>2]=c[h>>2];c[f+4>>2]=e;c[f+8>>2]=2;b=id(Ka(146,f|0)|0)|0;a:do if((g|0)!=(b|0)){f=2;while(1){if((b|0)<0)break;g=g-b|0;p=c[e+4>>2]|0;o=b>>>0>p>>>0;e=o?e+8|0:e;f=(o<<31>>31)+f|0;p=b-(o?p:0)|0;c[e>>2]=(c[e>>2]|0)+p;o=e+4|0;c[o>>2]=(c[o>>2]|0)-p;c[i>>2]=c[h>>2];c[i+4>>2]=e;c[i+8>>2]=f;b=id(Ka(146,i|0)|0)|0;if((g|0)==(b|0)){m=3;break a}}c[a+16>>2]=0;c[j>>2]=0;c[k>>2]=0;c[a>>2]=c[a>>2]|32;if((f|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[j>>2]=p;c[k>>2]=p}l=n;return d|0}function nd(a){a=a|0;return a|0}function od(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=id(Ja(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function pd(){return 5464}function qd(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24))do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));return (d&255)-(e&255)|0}function rd(a,b){a=a|0;b=b|0;return sd(a,b)|0}function sd(a,b){a=a|0;b=b|0;if(!b)b=0;else b=td(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function td(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=ud(c[b+8>>2]|0,o)|0;f=ud(c[b+12>>2]|0,o)|0;g=ud(c[b+16>>2]|0,o)|0;a:do if((h>>>0>>2>>>0?(n=d-(h<<2)|0,f>>>0>>0&g>>>0>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){k=h>>>1;j=l+k|0;i=j<<1;g=i+n|0;f=ud(c[b+(g<<2)>>2]|0,o)|0;g=ud(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=qd(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:j;h=f?k:h-k|0}}f=i+m|0;g=ud(c[b+(f<<2)>>2]|0,o)|0;f=ud(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function ud(a,b){a=a|0;b=b|0;var c=0;c=cg(a|0)|0;return ((b|0)==0?a:c)|0}function vd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=1e3;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){d=1;k=4}else{c[(jd()|0)>>2]=75;g=-1}else{g=b;k=4}if((k|0)==4){k=-2-g|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;h=m+20|0;c[h>>2]=g;c[m+44>>2]=g;g=g+k|0;d=m+16|0;c[d>>2]=g;c[m+28>>2]=g;g=wd(m,e,f)|0;if(k){e=c[h>>2]|0;a[e+(((e|0)==(c[d>>2]|0))<<31>>31)>>0]=0}}l=n;return g|0}function wd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;r=s+80|0;q=s;p=s+136|0;f=r;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((xd(0,d,n,q,r)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=yd(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;h=b+48|0;if(!(c[h>>2]|0)){g=b+44|0;e=c[g>>2]|0;c[g>>2]=p;i=b+28|0;c[i>>2]=p;k=b+20|0;c[k>>2]=p;c[h>>2]=80;j=b+16|0;c[j>>2]=p+80;f=xd(b,d,n,q,r)|0;if(e){Ma[c[b+36>>2]&15](b,0,0)|0;f=(c[k>>2]|0)==0?-1:f;c[g>>2]=e;c[h>>2]=0;c[j>>2]=0;c[i>>2]=0;c[k>>2]=0}}else f=xd(b,d,n,q,r)|0;e=c[b>>2]|0;c[b>>2]=e|m;if(o|0)zd(b);e=(e&32|0)==0?f:-1}l=s;return e|0}function xd(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=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,E=0,F=0,G=0,H=0;H=l;l=l+64|0;C=H+16|0;z=H;y=H+24|0;G=H+8|0;B=H+20|0;c[C>>2]=e;F=(d|0)!=0;x=y+40|0;E=x;y=y+39|0;A=G+4|0;q=e;e=0;j=0;n=0;a:while(1){do if((e|0)>-1)if((j|0)>(2147483647-e|0)){c[(jd()|0)>>2]=75;e=-1;break}else{e=j+e|0;break}while(0);j=a[q>>0]|0;if(!(j<<24>>24)){w=87;break}else k=q;b:while(1){switch(j<<24>>24){case 37:{j=k;w=9;break b}case 0:{j=k;break b}default:{}}v=k+1|0;c[C>>2]=v;j=a[v>>0]|0;k=v}c:do if((w|0)==9)while(1){w=0;if((a[j+1>>0]|0)!=37)break c;k=k+1|0;j=j+2|0;c[C>>2]=j;if((a[j>>0]|0)==37)w=9;else break}while(0);k=k-q|0;if(F)Ad(d,q,k);if(k|0){q=j;j=k;continue}m=j+1|0;k=(a[m>>0]|0)+-48|0;if(k>>>0<10){v=(a[j+2>>0]|0)==36;s=v?k:-1;p=v?1:n;m=v?j+3|0:m}else{s=-1;p=n}c[C>>2]=m;j=a[m>>0]|0;k=(j<<24>>24)+-32|0;d:do if(k>>>0<32){n=0;while(1){k=1<>2]=m;j=a[m>>0]|0;k=(j<<24>>24)+-32|0;if(k>>>0>=32){o=n;break}}}else o=0;while(0);if(j<<24>>24==42){k=m+1|0;j=(a[k>>0]|0)+-48|0;if(j>>>0<10?(a[m+2>>0]|0)==36:0){c[i+(j<<2)>>2]=10;n=1;j=m+3|0;k=c[g+((a[k>>0]|0)+-48<<3)>>2]|0}else{if(p|0){e=-1;break}if(F){n=(c[f>>2]|0)+(4-1)&~(4-1);v=c[n>>2]|0;c[f>>2]=n+4;n=0;j=k;k=v}else{n=0;j=k;k=0}}c[C>>2]=j;u=(k|0)<0;r=u?o|8192:o;v=n;u=u?0-k|0:k}else{k=Bd(C)|0;if((k|0)<0){e=-1;break}j=c[C>>2]|0;r=o;v=p;u=k}do if((a[j>>0]|0)==46){if((a[j+1>>0]|0)!=42){c[C>>2]=j+1;o=Bd(C)|0;j=c[C>>2]|0;break}m=j+2|0;k=(a[m>>0]|0)+-48|0;if(k>>>0<10?(a[j+3>>0]|0)==36:0){c[i+(k<<2)>>2]=10;o=c[g+((a[m>>0]|0)+-48<<3)>>2]|0;j=j+4|0;c[C>>2]=j;break}if(v|0){e=-1;break a}if(F){t=(c[f>>2]|0)+(4-1)&~(4-1);k=c[t>>2]|0;c[f>>2]=t+4}else k=0;c[C>>2]=m;j=m;o=k}else o=-1;while(0);p=0;while(1){if(((a[j>>0]|0)+-65|0)>>>0>57){e=-1;break a}t=j+1|0;c[C>>2]=t;k=a[(a[j>>0]|0)+-65+(2303+(p*58|0))>>0]|0;n=k&255;if((n+-1|0)>>>0<8){j=t;p=n}else break}if(!(k<<24>>24)){e=-1;break}m=(s|0)>-1;do if(k<<24>>24==19)if(m){e=-1;break a}else w=49;else{if(m){c[i+(s<<2)>>2]=n;n=g+(s<<3)|0;s=c[n+4>>2]|0;w=z;c[w>>2]=c[n>>2];c[w+4>>2]=s;w=49;break}if(!F){e=0;break a}Cd(z,n,f)}while(0);if((w|0)==49?(w=0,!F):0){q=t;j=0;n=v;continue}n=a[j>>0]|0;n=(p|0)!=0&(n&15|0)==3?n&-33:n;k=r&-65537;s=(r&8192|0)==0?r:k;e:do switch(n|0){case 110:switch((p&255)<<24>>24){case 0:{c[c[z>>2]>>2]=e;q=t;j=0;n=v;continue a}case 1:{c[c[z>>2]>>2]=e;q=t;j=0;n=v;continue a}case 2:{q=c[z>>2]|0;c[q>>2]=e;c[q+4>>2]=((e|0)<0)<<31>>31;q=t;j=0;n=v;continue a}case 3:{b[c[z>>2]>>1]=e;q=t;j=0;n=v;continue a}case 4:{a[c[z>>2]>>0]=e;q=t;j=0;n=v;continue a}case 6:{c[c[z>>2]>>2]=e;q=t;j=0;n=v;continue a}case 7:{q=c[z>>2]|0;c[q>>2]=e;c[q+4>>2]=((e|0)<0)<<31>>31;q=t;j=0;n=v;continue a}default:{q=t;j=0;n=v;continue a}}case 112:{j=s|8;k=o>>>0>8?o:8;n=120;w=61;break}case 88:case 120:{j=s;k=o;w=61;break}case 111:{r=z;q=c[r>>2]|0;r=c[r+4>>2]|0;p=Ed(q,r,x)|0;k=E-p|0;j=s;k=(s&8|0)==0|(o|0)>(k|0)?o:k+1|0;m=0;o=2767;w=67;break}case 105:case 100:{k=z;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)<0){j=Rf(0,0,j|0,k|0)|0;k=D;m=z;c[m>>2]=j;c[m+4>>2]=k;m=1;n=2767;w=66;break e}else{m=(s&2049|0)!=0&1;n=(s&2048|0)==0?((s&1|0)==0?2767:2769):2768;w=66;break e}}case 117:{k=z;j=c[k>>2]|0;k=c[k+4>>2]|0;m=0;n=2767;w=66;break}case 99:{a[y>>0]=c[z>>2];q=y;p=k;n=1;m=0;k=2767;j=x;break}case 109:{j=Gd(c[(jd()|0)>>2]|0)|0;w=71;break}case 115:{j=c[z>>2]|0;j=j|0?j:2777;w=71;break}case 67:{c[G>>2]=c[z>>2];c[A>>2]=0;c[z>>2]=G;j=G;o=-1;w=75;break}case 83:{j=c[z>>2]|0;if(!o){Id(d,32,u,0,s);j=0;w=84}else w=75;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{q=t;j=Kd(d,+h[z>>3],u,o,s,n)|0;n=v;continue a}default:{p=s;n=o;m=0;k=2767;j=x}}while(0);f:do if((w|0)==61){r=z;q=c[r>>2]|0;r=c[r+4>>2]|0;p=Dd(q,r,x,n&32)|0;o=(j&8|0)==0|(q|0)==0&(r|0)==0;m=o?0:2;o=o?2767:2767+(n>>4)|0;w=67}else if((w|0)==66){q=j;r=k;p=Fd(j,k,x)|0;j=s;k=o;o=n;w=67}else if((w|0)==71){w=0;s=Hd(j,0,o)|0;r=(s|0)==0;q=j;p=k;n=r?o:s-j|0;m=0;k=2767;j=r?j+o|0:s}else if((w|0)==75){w=0;m=0;k=0;p=j;while(1){n=c[p>>2]|0;if(!n)break;k=Jd(B,n)|0;if((k|0)<0|k>>>0>(o-m|0)>>>0)break;m=k+m|0;if(o>>>0>m>>>0)p=p+4|0;else break}if((k|0)<0){e=-1;break a}Id(d,32,u,m,s);if(!m){j=0;w=84}else{n=0;while(1){k=c[j>>2]|0;if(!k){j=m;w=84;break f}k=Jd(B,k)|0;n=k+n|0;if((n|0)>(m|0)){j=m;w=84;break f}Ad(d,B,k);if(n>>>0>=m>>>0){j=m;w=84;break}else j=j+4|0}}}while(0);if((w|0)==67){w=0;n=(q|0)!=0|(r|0)!=0;s=(k|0)!=0|n;n=((n^1)&1)+(E-p)|0;q=s?p:x;p=(k|0)>-1?j&-65537:j;n=s?((k|0)>(n|0)?k:n):k;k=o;j=x}else if((w|0)==84){w=0;Id(d,32,u,j,s^8192);q=t;j=(u|0)>(j|0)?u:j;n=v;continue}s=j-q|0;r=(n|0)<(s|0)?s:n;n=r+m|0;j=(u|0)<(n|0)?n:u;Id(d,32,j,n,p);Ad(d,k,m);Id(d,48,j,n,p^65536);Id(d,48,r,s,0);Ad(d,q,s);Id(d,32,j,n,p^8192);q=t;n=v}g:do if((w|0)==87)if(!d)if(!n)e=0;else{e=1;while(1){j=c[i+(e<<2)>>2]|0;if(!j)break;Cd(g+(e<<3)|0,j,f);e=e+1|0;if((e|0)>=10){e=1;break g}}while(1){if(c[i+(e<<2)>>2]|0){e=-1;break g}e=e+1|0;if((e|0)>=10){e=1;break}}}while(0);l=H;return e|0}function yd(a){a=a|0;return 0}function zd(a){a=a|0;return}function Ad(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))Sd(b,d,a)|0;return}function Bd(b){b=b|0;var d=0,e=0,f=0;d=c[b>>2]|0;e=(a[d>>0]|0)+-48|0;if(e>>>0<10){f=d;d=0;do{d=e+(d*10|0)|0;f=f+1|0;c[b>>2]=f;e=(a[f>>0]|0)+-48|0}while(e>>>0<10)}else d=0;return d|0}function Cd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function Dd(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[2815+(b&15)>>0]|0|f;b=Vf(b|0,c|0,4)|0;c=D}while(!((b|0)==0&(c|0)==0));return e|0}function Ed(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Vf(b|0,c|0,3)|0;c=D}while(!((b|0)==0&(c|0)==0));return d|0}function Fd(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)while(1){e=bg(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Zf(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=D}if(b)while(1){d=d+-1|0;a[d>>0]=(b>>>0)%10|0|48;if(b>>>0<10)break;else b=(b>>>0)/10|0}return d|0}function Gd(a){a=a|0;return Rd(a,c[(Qd()|0)+188>>2]|0)|0}function Hd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=S(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function Id(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;Tf(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{Ad(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}Ad(a,f,e)}l=g;return}function Jd(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Od(a,b,0)|0;return a|0} +function Kd(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;Ld(e)|0;if((D|0)<0){C=1;A=2784;e=-e}else{C=(h&2049|0)!=0&1;A=(h&2048|0)==0?((h&1|0)==0?2785:2790):2787}Ld(e)|0;B=D&2146435072;do if(B>>>0<2146435072|(B|0)==2146435072&0<0){r=+Md(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){s=i&32;q=(s|0)==0?A:A+9|0;p=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[q>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=Fd(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;k=G;while(1){C=~~e;j=k+1|0;a[k>>0]=d[2815+C>>0]|s;e=(e-+(C|0))*16.0;if((j-F|0)==1?!(n&(m&e==0.0)):0){a[j>>0]=46;j=k+2|0}if(!(e!=0.0))break;else k=j}C=j-F|0;F=E-o|0;E=(g|0)!=0&(C+-2|0)<(g|0)?g+2|0:C;j=F+p+E|0;Id(b,32,f,j,h);Ad(b,q,p);Id(b,48,f,j,h^65536);Ad(b,G,C);Id(b,48,E-C|0,0,0);Ad(b,o,F);Id(b,32,f,j,h^8192);break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{j=c[u>>2]|0;e=r}B=(j|0)<0?m:m+288|0;m=B;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=B;o=m;while(1){p=(j|0)<29?j:29;j=o+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Uf(c[j>>2]|0,0,p|0)|0;x=Sf(x|0,D|0,m|0,0)|0;y=D;v=bg(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Zf(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=o;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-p|0;c[u>>2]=j;if((j|0)>0)o=m;else break}}else n=B;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){p=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=S(y&p,o)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?B:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=B;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){o=n+9216|0;n=B+4+(((o|0)/9|0)+-1024<<2)|0;o=((o|0)%9|0)+1|0;if((o|0)<9){p=10;do{p=p*10|0;o=o+1|0}while((o|0)!=9)}else p=10;q=c[n>>2]|0;s=(q>>>0)%(p>>>0)|0;o=(n+4|0)==(g|0);if(!(o&(s|0)==0)){r=(((q>>>0)/(p>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(p|0)/2|0;e=s>>>0>>0?.5:o&(s|0)==(x|0)?1.0:1.5;if(C){x=(a[A>>0]|0)==45;r=x?-r:r;e=x?-e:e}o=q-s|0;c[n>>2]=o;if(r+e!=r){x=o+p|0;c[n>>2]=x;if(x>>>0>999999999){m=n;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}}w=n+4|0;x=j;j=g>>>0>w>>>0?w:g}else{x=j;j=g}w=j;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=((v^1)&1)+k|0;if((j|0)>(m|0)&(m|0)>-5){k=j+-1-m|0;o=i+-1|0}else{k=j+-1|0;o=i+-2|0}j=h&8;if(!j){if(u?(z=c[w+-4>>2]|0,(z|0)!=0):0)if(!((z>>>0)%10|0)){j=10;n=0;do{j=j*10|0;n=n+1|0}while(!((z>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){i=j-n|0;i=(i|0)>0?i:0;s=0;k=(k|0)<(i|0)?k:i;break}else{i=j+m-n|0;i=(i|0)>0?i:0;s=0;k=(k|0)<(i|0)?k:i;break}}else s=j}else{s=h&8;o=i}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=Fd(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;Id(b,32,f,j,h);Ad(b,A,C);Id(b,48,f,j,h^65536);if(q){p=x>>>0>B>>>0?B:x;s=G+9|0;q=s;o=G+8|0;n=p;do{m=Fd(c[n>>2]|0,0,s)|0;if((n|0)==(p|0)){if((m|0)==(s|0)){a[o>>0]=48;m=o}}else if(m>>>0>G>>>0){Tf(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}Ad(b,m,q-m|0);n=n+4|0}while(n>>>0<=B>>>0);if(t|0)Ad(b,2831,1);if(n>>>0>>0&(k|0)>0)while(1){m=Fd(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){Tf(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}Ad(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}Id(b,48,k+9|0,9,0)}else{u=u?w:x+4|0;if((k|0)>-1){t=G+9|0;g=(s|0)==0;s=t;o=0-F|0;q=G+8|0;p=x;do{m=Fd(c[p>>2]|0,0,t)|0;if((m|0)==(t|0)){a[q>>0]=48;m=q}do if((p|0)==(x|0)){n=m+1|0;Ad(b,m,1);if(g&(k|0)<1){m=n;break}Ad(b,2831,1);m=n}else{if(m>>>0<=G>>>0)break;Tf(G|0,48,m+o|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=s-m|0;Ad(b,m,(k|0)>(F|0)?F:k);k=k-F|0;p=p+4|0}while(p>>>0>>0&(k|0)>-1)}Id(b,48,k+18|0,18,0);Ad(b,v,E-v|0)}Id(b,32,f,j,h^8192)}else{G=(i&32|0)!=0;j=C+3|0;Id(b,32,f,j,h&-65537);Ad(b,A,C);Ad(b,e!=e|0.0!=0.0?(G?4863:2811):G?2803:2807,3);Id(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function Ld(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;D=c[j+4>>2]|0;return b|0}function Md(a,b){a=+a;b=b|0;return +(+Nd(a,b))}function Nd(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Vf(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+Nd(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function Od(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(Pd()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(jd()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(jd()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function Pd(){return ld()|0}function Qd(){return ld()|0}function Rd(b,e){b=b|0;e=e|0;var f=0,g=0;f=0;while(1){if((d[2833+f>>0]|0)==(b|0)){g=2;break}f=f+1|0;if((f|0)==87){f=87;b=2921;g=5;break}}if((g|0)==2)if(!f)f=2921;else{b=2921;g=5}if((g|0)==5)while(1){do{g=b;b=b+1|0}while((a[g>>0]|0)!=0);f=f+-1|0;if(!f){f=b;break}else g=5}return rd(f,c[e+20>>2]|0)|0}function Sd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=e+16|0;f=c[g>>2]|0;if(!f)if(!(Td(e)|0)){f=c[g>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;g=i;if((f-i|0)>>>0>>0){f=Ma[c[e+36>>2]&15](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=g;e=0;g=d;f=b;break b}f=i+-1|0;if((a[b+f>>0]|0)==10)break;else i=f}f=Ma[c[e+36>>2]&15](e,b,i)|0;if(f>>>0>>0)break a;h=c[j>>2]|0;e=i;g=d-i|0;f=b+i|0}else{h=g;e=0;g=d;f=b}while(0);Wf(h|0,f|0,g|0)|0;c[j>>2]=(c[j>>2]|0)+g;f=e+g|0}while(0);return f|0}function Td(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function Ud(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Wf(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function Vd(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3)){d=b;e=4}else{d=f;while(1){if(!(a[b>>0]|0))break a;b=b+1|0;d=b;if(!(d&3)){d=b;e=4;break}}}while(0);if((e|0)==4){while(1){b=c[d>>2]|0;if(!((b&-2139062144^-2139062144)&b+-16843009))d=d+4|0;else break}if((b&255)<<24>>24)do d=d+1|0;while((a[d>>0]|0)!=0)}return d-f|0}function Wd(a,b){a=a|0;b=b|0;Xd(a,b)|0;return a|0}function Xd(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(!(e&3))e=d;else while(1){e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0;if(!(d&3)){e=d;break}}d=c[e>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009)){f=b;b=e;while(1){e=b+4|0;b=f+4|0;c[f>>2]=d;d=c[e>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=e;break}else{f=b;b=e}}}else d=e;f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function Yd(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function Zd(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;ee();c[e>>2]=a;c[e+4>>2]=b;a=id(wa(91,e|0)|0)|0;l=d;return a|0}function _d(b,c){b=b|0;c=c|0;b=de(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function $d(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function ae(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;f=b+104|0;j=c[f>>2]|0;if((j|0)!=0?(c[b+108>>2]|0)>=(j|0):0)k=4;else{e=be(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){i=c[f>>2]|0;j=c[b+4>>2]|0;f=b+108|0;g=g-(c[f>>2]|0)|0;h=i;if((i-j|0)<(g|0)){i=h;g=j}else{i=j+(g+-1)|0;g=j}}else{h=c[f>>2]|0;i=h;g=c[b+4>>2]|0;f=b+108|0}c[b+100>>2]=i;if(h|0)c[f>>2]=h+1-g+(c[f>>2]|0);f=g+-1|0;if((d[f>>0]|0|0)!=(e|0))a[f>>0]=e}else k=4}if((k|0)==4){c[b+100>>2]=0;e=-1}return e|0}function be(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((ce(a)|0)==0?(Ma[c[a+32>>2]&15](a,b,1)|0)==1:0)b=d[b>>0]|0;else b=-1;l=e;return b|0}function ce(b){b=b|0;var d=0,e=0;e=b+74|0;d=a[e>>0]|0;a[e>>0]=d+255|d;e=b+20|0;d=b+28|0;if((c[e>>2]|0)>>>0>(c[d>>2]|0)>>>0)Ma[c[b+36>>2]&15](b,0,0)|0;c[b+16>>2]=0;c[d>>2]=0;c[e>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function de(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(Vd(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=S(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function ee(){return}function fe(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+272|0;n=p+8|0;o=p;do if(!(a[d>>0]|0)){d=ya(4725)|0;if(d|0?a[d>>0]|0:0)break;d=ya(4732+(b*12|0)|0)|0;if(d|0?a[d>>0]|0:0)break;d=ya(4804)|0;if(d|0?a[d>>0]|0:0)break;d=4809}while(0);e=0;a:do{switch(a[d+e>>0]|0){case 47:case 0:break a;default:{}}e=e+1|0}while(e>>>0<15);f=a[d>>0]|0;if(f<<24>>24!=46?(a[d+e>>0]|0)==0:0)if(f<<24>>24==67)m=15;else{k=d;m=16}else{d=4809;m=15}if((m|0)==15)if(!(a[d+1>>0]|0))m=18;else{k=d;m=16}b:do if((m|0)==16)if((qd(k,4809)|0)!=0?(qd(k,4817)|0)!=0:0){d=c[1382]|0;if(d|0)do{if(!(qd(k,d+8|0)|0))break b;d=c[d+24>>2]|0}while((d|0)!=0);Da(5532);d=c[1382]|0;c:do if(d|0){while(1){if(!(qd(k,d+8|0)|0))break;d=c[d+24>>2]|0;if(!d)break c}Ba(5532);break b}while(0);d:do if(((c[1368]|0)==0?(g=ya(4823)|0,(g|0)!=0):0)?(a[g>>0]|0)!=0:0){j=254-e|0;i=e+1|0;f=g;while(1){h=de(f,58)|0;d=a[h>>0]|0;g=((d<<24>>24!=0)<<31>>31)+(h-f)|0;if(g>>>0>>0){Wf(n|0,f|0,g|0)|0;f=n+g|0;a[f>>0]=47;Wf(f+1|0,k|0,e|0)|0;a[n+(i+g)>>0]=0;g=za(n|0,o|0)|0;if(g|0)break;d=a[h>>0]|0}f=h+(d<<24>>24!=0&1)|0;if(!(a[f>>0]|0)){m=41;break d}}d=cf(28)|0;f=c[o>>2]|0;if(!d){Zd(g,f)|0;m=41;break}else{c[d>>2]=g;c[d+4>>2]=f;o=d+8|0;Wf(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[1382];c[1382]=d;break}}else m=41;while(0);if((m|0)==41){d=cf(28)|0;if(d){c[d>>2]=c[112];c[d+4>>2]=c[113];o=d+8|0;Wf(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[1382];c[1382]=d}}Ba(5532);d=(b|0)==0&(d|0)==0?448:d}else{d=k;m=18}while(0);do if((m|0)==18){if((b|0)==0?(a[d+1>>0]|0)==46:0){d=448;break}d=0}while(0);l=p;return d|0}function ge(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;do if(b>>>0>6)b=0;else{Da(5540);if((b|0)!=6){b=he(b,d)|0;Ba(5540);break}if(!d){b=0;e=7112}else{b=h;e=4836;f=b+16|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));g=0;b=d;do{e=de(b,59)|0;f=e-b|0;if((f|0)<16){Wf(h|0,b|0,f|0)|0;a[h+f>>0]=0;b=(a[e>>0]|0)==0?b:e+1|0}he(g,h)|0;g=g+1|0}while((g|0)!=6);b=0;e=7112}do{d=c[5504+(b<<2)>>2]|0;d=d|0?d+8|0:4852;h=Vd(d)|0;Wf(e|0,d|0,h|0)|0;a[e+h>>0]=59;e=e+(h+1)|0;b=b+1|0}while((b|0)!=6);a[e+-1>>0]=0;Ba(5540);b=7112}while(0);l=i;return b|0}function he(a,b){a=a|0;b=b|0;if(!b)a=c[5504+(a<<2)>>2]|0;else{b=fe(a,b)|0;c[5504+(a<<2)>>2]=b;a=b}return (a|0?a+8|0:4852)|0}function ie(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=yd(a)|0;else f=0;je(a);g=(c[a>>2]&1|0)!=0;if(!g){e=ke()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;le()}d=me(a)|0;d=Qa[c[a+12>>2]&7](a)|0|d;b=c[a+92>>2]|0;if(b|0)df(b);if(g){if(f|0)zd(a)}else df(a);return d|0}function je(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(oe()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function ke(){Da(5548);return 5556}function le(){Ba(5548);return}function me(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=ne(a)|0;break}d=(yd(a)|0)==0;b=ne(a)|0;if(!d)zd(a)}else{if(!(c[217]|0))b=0;else b=me(c[217]|0)|0;a=c[(ke()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=yd(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=ne(a)|0|b;if(d|0)zd(a);a=c[a+56>>2]|0}while((a|0)!=0);le()}while(0);return b|0}function ne(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=a+20|0;g=a+28|0;if((c[h>>2]|0)>>>0>(c[g>>2]|0)>>>0?(Ma[c[a+36>>2]&15](a,0,0)|0,(c[h>>2]|0)==0):0)b=-1;else{f=a+4|0;b=c[f>>2]|0;e=a+8|0;d=c[e>>2]|0;if(b>>>0>>0)Ma[c[a+40>>2]&15](a,b-d|0,1)|0;c[a+16>>2]=0;c[g>>2]=0;c[h>>2]=0;c[e>>2]=0;c[f>>2]=0;b=0}return b|0}function oe(){return ld()|0}function pe(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;m=o+40|0;k=o+24|0;j=o+16|0;g=o;n=o+56|0;f=a[d>>0]|0;if(Hd(4867,f<<24>>24,4)|0){e=cf(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(_d(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(_d(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;ja(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=ja(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;ja(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[m>>2]=b,c[m+4>>2]=21523,c[m+8>>2]=n,(Aa(54,m|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=11;c[e+36>>2]=8;c[e+40>>2]=7;c[e+12>>2]=4;if(!(c[1367]|0))c[e+76>>2]=-1;qe(e)|0}}else{c[(jd()|0)>>2]=22;e=0}l=o;return e|0}function qe(a){a=a|0;var b=0,d=0;d=ke()|0;c[a+56>>2]=c[d>>2];b=c[d>>2]|0;if(b|0)c[b+52>>2]=a;c[d>>2]=a;le();return a|0}function re(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=24;m=-149;i=4;break}case 1:{l=53;m=-1074;i=4;break}case 2:{l=53;m=-1074;i=4;break}default:g=0.0}a:do if((i|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=ae(b)|0}while((Yd(e)|0)!=0);b:do switch(e|0){case 43:case 45:{h=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0;k=h;break b}else{e=ae(b)|0;k=h;break b}}default:k=1}while(0);h=e;e=0;do{if((h|32|0)!=(a[4854+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=ae(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{i=23;break}default:{j=(f|0)!=0;if(j&e>>>0>3)if((e|0)==8)break c;else{i=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[4863+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=ae(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=ae(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=ae(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!j){c[(jd()|0)>>2]=22;$d(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=ae(b)|0;if((e|32|0)==120){g=+se(b,l,m,k,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+te(b,e,l,m,k,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(jd()|0)>>2]=22;$d(b,0);g=0.0;break a}}}}while(0);if((i|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(k|0)*t}while(0);return +g}function se(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=a+4|0;i=c[w>>2]|0;v=a+100|0;if(i>>>0<(c[v>>2]|0)>>>0){c[w>>2]=i+1;i=d[i>>0]|0;k=0}else{i=ae(a)|0;k=0}a:while(1){switch(i|0){case 46:{o=8;break a}case 48:break;default:{u=0;n=0;q=0;j=0;r=k;t=0;s=0;m=1.0;k=0;h=0.0;break a}}i=c[w>>2]|0;if(i>>>0<(c[v>>2]|0)>>>0){c[w>>2]=i+1;i=d[i>>0]|0;k=1;continue}else{i=ae(a)|0;k=1;continue}}if((o|0)==8){i=c[w>>2]|0;if(i>>>0<(c[v>>2]|0)>>>0){c[w>>2]=i+1;i=d[i>>0]|0}else i=ae(a)|0;if((i|0)==48){k=0;j=0;do{i=c[w>>2]|0;if(i>>>0<(c[v>>2]|0)>>>0){c[w>>2]=i+1;i=d[i>>0]|0}else i=ae(a)|0;k=Sf(k|0,j|0,-1,-1)|0;j=D}while((i|0)==48);u=0;n=0;q=k;r=1;t=1;s=0;m=1.0;k=0;h=0.0}else{u=0;n=0;q=0;j=0;r=k;t=1;s=0;m=1.0;k=0;h=0.0}}while(1){p=i+-48|0;o=(i|0)==46;if(p>>>0>=10?!(o|((i|32)+-97|0)>>>0<6):0)break;if(o)if(!t){q=n;j=u;p=u;t=1;o=s;l=m}else{i=46;break}else{i=(i|0)>57?(i|32)+-87|0:p;do if(!((u|0)<0|(u|0)==0&n>>>0<8))if((u|0)<0|(u|0)==0&n>>>0<14){m=m*.0625;o=s;l=m;h=h+m*+(i|0);break}else{r=(s|0)!=0|(i|0)==0;o=r?s:1;l=m;h=r?h:h+m*.5;break}else{o=s;l=m;k=i+(k<<4)|0}while(0);n=Sf(n|0,u|0,1,0)|0;p=D;r=1}i=c[w>>2]|0;if(i>>>0<(c[v>>2]|0)>>>0){c[w>>2]=i+1;u=p;i=d[i>>0]|0;s=o;m=l;continue}else{u=p;i=ae(a)|0;s=o;m=l;continue}}do if(!r){i=c[v>>2]|0;j=(i|0)!=0;if(j)c[w>>2]=(c[w>>2]|0)+-1;if(g){if(j)c[w>>2]=(c[w>>2]|0)+-1;if(!((t|0)==0|(i|0)==0))c[w>>2]=(c[w>>2]|0)+-1}else $d(a,0);h=+(f|0)*0.0}else{o=(t|0)==0;p=o?n:q;o=o?u:j;if((u|0)<0|(u|0)==0&n>>>0<8){j=u;do{k=k<<4;n=Sf(n|0,j|0,1,0)|0;j=D}while((j|0)<0|(j|0)==0&n>>>0<8)}if((i|32|0)==112){j=ue(a,g)|0;i=D;if((j|0)==0&(i|0)==-2147483648){if(!g){$d(a,0);h=0.0;break}if(!(c[v>>2]|0)){j=0;i=0}else{c[w>>2]=(c[w>>2]|0)+-1;j=0;i=0}}}else if(!(c[v>>2]|0)){j=0;i=0}else{c[w>>2]=(c[w>>2]|0)+-1;j=0;i=0}w=Uf(p|0,o|0,2)|0;w=Sf(w|0,D|0,-32,-1)|0;i=Sf(w|0,D|0,j|0,i|0)|0;j=D;if(!k){h=+(f|0)*0.0;break}w=0-e|0;g=((w|0)<0)<<31>>31;if((j|0)>(g|0)|(j|0)==(g|0)&i>>>0>w>>>0){c[(jd()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}w=e+-106|0;g=((w|0)<0)<<31>>31;if((j|0)<(g|0)|(j|0)==(g|0)&i>>>0>>0){c[(jd()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((k|0)>-1){do{w=!(h>=.5);k=k<<1|(w^1)&1;h=h+(w?h:h+-1.0);i=Sf(i|0,j|0,-1,-1)|0;j=D}while((k|0)>-1);n=i;m=h}else{n=i;m=h}w=((b|0)<0)<<31>>31;i=Rf(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Sf(i|0,D|0,n|0,j|0)|0;e=D;if((w|0)>(e|0)|(w|0)==(e|0)&b>>>0>i>>>0)if((i|0)>0)o=59;else{j=0;i=84;o=61}else{i=b;o=59}if((o|0)==59)if((i|0)<53){j=i;i=84-i|0;o=61}else{l=0.0;h=+(f|0)}if((o|0)==61){h=+(f|0);l=+we(+ve(1.0,i),h);i=j}f=(k&1|0)==0&(m!=0.0&(i|0)<32);h=h*(f?0.0:m)+(l+h*+(((f&1)+k|0)>>>0))-l;if(!(h!=0.0))c[(jd()|0)>>2]=34;h=+ye(h,n)}while(0);return +h}function te(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;B=a+4|0;C=a+100|0;j=b;n=0;a:while(1){switch(j|0){case 46:{A=6;break a}case 48:break;default:{m=0;b=0;q=0;break a}}b=c[B>>2]|0;if(b>>>0<(c[C>>2]|0)>>>0){c[B>>2]=b+1;j=d[b>>0]|0;n=1;continue}else{j=ae(a)|0;n=1;continue}}if((A|0)==6){b=c[B>>2]|0;if(b>>>0<(c[C>>2]|0)>>>0){c[B>>2]=b+1;j=d[b>>0]|0}else j=ae(a)|0;if((j|0)==48){j=0;b=0;while(1){m=Sf(j|0,b|0,-1,-1)|0;b=D;j=c[B>>2]|0;if(j>>>0<(c[C>>2]|0)>>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=ae(a)|0;if((j|0)==48)j=m;else{n=1;q=1;break}}}else{m=0;b=0;q=1}}c[G>>2]=0;v=j+-48|0;o=(j|0)==46;b:do if(o|v>>>0<10){A=G+496|0;y=m;z=0;u=0;w=o;p=0;m=0;o=0;c:while(1){do if(w)if(!q){y=z;b=u;q=1}else break c;else{w=Sf(z|0,u|0,1,0)|0;u=D;x=(j|0)!=48;if((m|0)>=125){if(!x){z=w;break}c[A>>2]=c[A>>2]|1;z=w;break}n=G+(m<<2)|0;if(!p)j=v;else j=j+-48+((c[n>>2]|0)*10|0)|0;c[n>>2]=j;p=p+1|0;v=(p|0)==9;z=w;n=1;p=v?0:p;m=(v&1)+m|0;o=x?w:o}while(0);j=c[B>>2]|0;if(j>>>0<(c[C>>2]|0)>>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=ae(a)|0;v=j+-48|0;w=(j|0)==46;if(!(w|v>>>0<10)){w=y;v=z;A=29;break b}}v=z;q=y;j=(n|0)!=0;A=37}else{w=m;v=0;u=0;p=0;m=0;o=0;A=29}while(0);do if((A|0)==29){z=(q|0)==0;q=z?v:w;b=z?u:b;w=(n|0)!=0;if(!(w&(j|32|0)==101))if((j|0)>-1){j=w;A=37;break}else{n=u;j=w;A=39;break}n=ue(a,h)|0;j=D;if((n|0)==0&(j|0)==-2147483648){if(!h){$d(a,0);i=0.0;break}if(!(c[C>>2]|0)){n=0;j=0}else{c[B>>2]=(c[B>>2]|0)+-1;n=0;j=0}}y=Sf(n|0,j|0,q|0,b|0)|0;q=v;b=D;n=u;A=41}while(0);if((A|0)==37)if(c[C>>2]|0){c[B>>2]=(c[B>>2]|0)+-1;if(j){y=q;q=v;n=u;A=41}else A=40}else{n=u;A=39}if((A|0)==39)if(j){y=q;q=v;A=41}else A=40;do if((A|0)==40){c[(jd()|0)>>2]=22;$d(a,0);i=0.0}else if((A|0)==41){j=c[G>>2]|0;if(!j){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&q>>>0<10)&((y|0)==(q|0)&(b|0)==(n|0))?(e|0)>30|(j>>>e|0)==0:0){i=+(g|0)*+(j>>>0);break}a=(f|0)/-2|0;C=((a|0)<0)<<31>>31;if((b|0)>(C|0)|(b|0)==(C|0)&y>>>0>a>>>0){c[(jd()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;C=((a|0)<0)<<31>>31;if((b|0)<(C|0)|(b|0)==(C|0)&y>>>0>>0){c[(jd()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(p){if((p|0)<9){n=G+(m<<2)|0;b=p;j=c[n>>2]|0;do{j=j*10|0;b=b+1|0}while((b|0)!=9);c[n>>2]=j}m=m+1|0}if((o|0)<9?(o|0)<=(y|0)&(y|0)<18:0){b=c[G>>2]|0;if((y|0)==9){i=+(g|0)*+(b>>>0);break}if((y|0)<9){i=+(g|0)*+(b>>>0)/+(c[1124+(8-y<<2)>>2]|0);break}a=e+27+(S(y,-3)|0)|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[1124+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){n=0;b=0}else{u=(y|0)>-1?b:b+9|0;n=c[1124+(8-u<<2)>>2]|0;if(m){p=1e9/(n|0)|0;b=0;o=0;q=0;j=y;do{B=G+(q<<2)|0;C=c[B>>2]|0;a=((C>>>0)/(n>>>0)|0)+o|0;c[B>>2]=a;o=S(p,(C>>>0)%(n>>>0)|0)|0;a=(q|0)==(b|0)&(a|0)==0;j=a?j+-9|0:j;b=a?b+1&127:b;q=q+1|0}while((q|0)!=(m|0));if(o){c[G+(m<<2)>>2]=o;m=m+1|0}}else{b=0;j=y;m=0}n=b;b=0;y=9-u+j|0}d:while(1){v=(y|0)<18;w=(y|0)==18;u=G+(n<<2)|0;while(1){if(!v){if(!w){j=y;break d}if((c[u>>2]|0)>>>0>=9007199){j=18;break d}}o=0;j=m+127|0;x=m;while(1){q=j&127;p=G+(q<<2)|0;j=Uf(c[p>>2]|0,0,29)|0;j=Sf(j|0,D|0,o|0,0)|0;m=D;if(m>>>0>0|(m|0)==0&j>>>0>1e9){o=Zf(j|0,m|0,1e9,0)|0;j=bg(j|0,m|0,1e9,0)|0}else o=0;c[p>>2]=j;a=(q|0)==(n|0);x=(j|0)==0&(((q|0)!=(x+127&127|0)|a)^1)?q:x;if(a)break;else j=q+-1|0}b=b+-29|0;if(o|0)break;else m=x}n=n+127&127;m=x+127&127;j=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[j>>2]=c[j>>2]|c[G+(m<<2)>>2];else m=x;c[G+(n<<2)>>2]=o;y=y+9|0}e:while(1){x=m+1&127;y=G+((m+127&127)<<2)|0;v=j;while(1){p=(v|0)==18;w=(v|0)>27?9:1;z=n;while(1){j=0;while(1){n=j+z&127;if((n|0)==(m|0)){E=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[1156+(j<<2)>>2]|0;if(n>>>0>>0){E=2;A=88;break}if(n>>>0>o>>>0)break;j=j+1|0;if((j|0)>=2){E=j;A=88;break}}if((A|0)==88?(A=0,p&(E|0)==2):0){o=0;i=0.0;break e}b=w+b|0;if((z|0)==(m|0))z=m;else break}u=(1<>>w;n=z;p=0;o=z;j=v;do{B=G+(o<<2)|0;C=c[B>>2]|0;a=(C>>>w)+p|0;c[B>>2]=a;p=S(C&u,q)|0;a=(o|0)==(n|0)&(a|0)==0;j=a?j+-9|0:j;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(m|0));if(!p){v=j;continue}if((x|0)!=(n|0))break;c[y>>2]=c[y>>2]|1;v=j}c[G+(m<<2)>>2]=p;m=x}while(1){n=o+z&127;j=m+1&127;if((n|0)==(m|0))c[G+(j+-1<<2)>>2]=0;else j=m;i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0;if((o|0)==2)break;else m=j}t=+(g|0);k=t*i;n=b+53|0;q=n-f|0;p=(q|0)<(e|0);o=p?((q|0)>0?q:0):e;if((o|0)<53){K=+we(+ve(1.0,105-o|0),k);r=+xe(k,+ve(1.0,53-o|0));s=K;i=r;r=K+(k-r)}else{s=0.0;i=0.0;r=k}m=z+2&127;if((m|0)!=(j|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((z+3&127|0)==(j|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(z+3&127|0)==(j|0):0)break;i=t*.25+i}while(0);if((53-o|0)>1?!(+xe(i,1.0)!=0.0):0)k=i+1.0;else k=i}else k=i;i=r+k-s;do if((n&2147483647|0)>(-2-H|0)){H=!(+F(+i)>=9007199254740992.0);b=((H^1)&1)+b|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(k!=0.0&(p&((o|0)!=(q|0)|H))):0)break;c[(jd()|0)>>2]=34}while(0);i=+ye(i,b)}while(0);l=J;return +i}function ue(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=a+4|0;e=c[j>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[j>>2]=e+1;e=d[e>>0]|0}else e=ae(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[j>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[j>>2]=e+1;e=d[e>>0]|0}else e=ae(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0){c[j>>2]=(c[j>>2]|0)+-1;h=f}else h=f;break}default:h=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[j>>2]=(c[j>>2]|0)+-1;f=-2147483648;e=0}else{f=0;do{f=e+-48+(f*10|0)|0;e=c[j>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[j>>2]=e+1;e=d[e>>0]|0}else e=ae(a)|0}while((e+-48|0)>>>0<10&(f|0)<214748364);b=((f|0)<0)<<31>>31;if((e+-48|0)>>>0<10){do{b=$f(f|0,b|0,10,0)|0;f=D;e=Sf(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;f=Sf(e|0,D|0,b|0,f|0)|0;b=D;e=c[j>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[j>>2]=e+1;e=d[e>>0]|0}else e=ae(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&f>>>0<2061584302));g=f;f=e}else{g=f;f=e}e=c[i>>2]|0;if((f+-48|0)>>>0<10)do{f=c[j>>2]|0;if(f>>>0>>0){c[j>>2]=f+1;f=d[f>>0]|0}else{f=ae(a)|0;e=c[i>>2]|0}}while((f+-48|0)>>>0<10);if(e|0)c[j>>2]=(c[j>>2]|0)+-1;j=(h|0)!=0;e=Rf(0,0,g|0,b|0)|0;f=j?D:b;e=j?e:g}D=f;return e|0}function ve(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=b+1022|0;d=(e|0)<-1022;b=b+2044|0;b=d?((b|0)>-1022?b:-1022):e;a=d?a*2.2250738585072014e-308:a}}else{a=a*8988465674311579538646525.0e283;d=b+-1023|0;e=(d|0)>1023;b=b+-2046|0;b=e?((b|0)<1023?b:1023):d;a=e?a*8988465674311579538646525.0e283:a}d=Uf(b+1023|0,0,52)|0;e=D;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function we(a,b){a=+a;b=+b;return +(+Be(a,b))}function xe(a,b){a=+a;b=+b;return +(+ze(a,b))}function ye(a,b){a=+a;b=b|0;return +(+ve(a,b))}function ze(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;d=c[j>>2]|0;m=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Vf(d|0,m|0,52)|0;e=e&2047;i=Vf(n|0,o|0,52)|0;i=i&2047;p=m&-2147483648;l=Uf(n|0,o|0,1)|0;k=D;a:do if(!((l|0)==0&(k|0)==0)?(g=Ae(b)|0,f=D&2147483647,!((e|0)==2047|(f>>>0>2146435072|(f|0)==2146435072&g>>>0>0))):0){f=Uf(d|0,m|0,1)|0;g=D;if(!(g>>>0>k>>>0|(g|0)==(k|0)&f>>>0>l>>>0))return +((f|0)==(l|0)&(g|0)==(k|0)?a*0.0:a);if(!e){e=Uf(d|0,m|0,12)|0;f=D;if((f|0)>-1|(f|0)==-1&e>>>0>4294967295){g=e;e=0;do{e=e+-1|0;g=Uf(g|0,f|0,1)|0;f=D}while((f|0)>-1|(f|0)==-1&g>>>0>4294967295)}else e=0;d=Uf(d|0,m|0,1-e|0)|0;k=D}else k=m&1048575|1048576;if(!i){f=Uf(n|0,o|0,12)|0;g=D;if((g|0)>-1|(g|0)==-1&f>>>0>4294967295){i=0;do{i=i+-1|0;f=Uf(f|0,g|0,1)|0;g=D}while((g|0)>-1|(g|0)==-1&f>>>0>4294967295)}else i=0;n=Uf(n|0,o|0,1-i|0)|0;m=D}else m=o&1048575|1048576;l=Rf(d|0,k|0,n|0,m|0)|0;f=D;g=(f|0)>-1|(f|0)==-1&l>>>0>4294967295;b:do if((e|0)>(i|0)){while(1){if(g)if((l|0)==0&(f|0)==0)break;else d=l;else f=k;d=Uf(d|0,f|0,1)|0;k=D;e=e+-1|0;l=Rf(d|0,k|0,n|0,m|0)|0;f=D;g=(f|0)>-1|(f|0)==-1&l>>>0>4294967295;if((e|0)<=(i|0)){i=l;break b}}b=a*0.0;break a}else i=l;while(0);if(g)if((i|0)==0&(f|0)==0){b=a*0.0;break}else d=i;else f=k;if(f>>>0<1048576|(f|0)==1048576&d>>>0<0)do{d=Uf(d|0,f|0,1)|0;f=D;e=e+-1|0}while(f>>>0<1048576|(f|0)==1048576&d>>>0<0);if((e|0)>0){o=Sf(d|0,f|0,0,-1048576)|0;d=D;e=Uf(e|0,0,52)|0;d=d|D;e=o|e}else{e=Vf(d|0,f|0,1-e|0)|0;d=D}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function Ae(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;D=c[j+4>>2]|0;return b|0}function Be(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function Ce(a){a=a|0;var b=0,d=0;if((c[a+76>>2]|0)>-1){d=(yd(a)|0)==0;b=(c[a>>2]|0)>>>5&1;if(!d)zd(a)}else b=(c[a>>2]|0)>>>5&1;return b|0}function De(a,b,c){a=a|0;b=b|0;c=c|0;return vd(a,2147483647,b,c)|0}function Ee(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=wd(a,b,f)|0;l=e;return d|0}function Fe(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;h=b+16|0;g=c[h>>2]|0;if(!g)if(!(Td(b)|0)){g=c[h>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;h=c[i>>2]|0;if(h>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=h+1;a[h>>0]=k;break}if((Ma[c[b+36>>2]&15](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function Ge(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;f=a+20|0;e=a+28|0;if((c[f>>2]|0)>>>0>(c[e>>2]|0)>>>0?(Ma[c[a+36>>2]&15](a,0,0)|0,(c[f>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[e>>2]=0;c[f>>2]=0;if((Ma[c[a+40>>2]&15](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function He(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(yd(a)|0)==0;b=Ge(a,b,d)|0;if(!e)zd(a)}else b=Ge(a,b,d)|0;return b|0}function Ie(a,b,c){a=a|0;b=b|0;c=c|0;return He(a,b,c)|0}function Je(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Ma[c[a+40>>2]&15](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function Ke(a){a=a|0;var b=0,d=0;if((c[a+76>>2]|0)>-1){d=(yd(a)|0)==0;b=Je(a)|0;if(!d)zd(a)}else b=Je(a)|0;return b|0}function Le(a){a=a|0;return Ke(a)|0}function Me(b){b=b|0;var c=0,d=0,e=0;d=(_d(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(_d(b,120)|0)==0;d=e?d:d|128;b=(_d(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function Ne(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(Hd(4867,a[d>>0]|0,4)|0){f=Me(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=id(Fa(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;ja(221,g|0)|0}b=pe(e,d)|0;if(!b){c[h>>2]=e;Ea(6,h|0)|0;b=0}}else b=0}else{c[(jd()|0)>>2]=22;b=0}l=i;return b|0}function Oe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=S(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(yd(e)|0)==0;a=Sd(a,f,e)|0;if(!g)zd(e)}else a=Sd(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function Pe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=S(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=yd(f)|0;else j=0;h=f+74|0;g=a[h>>0]|0;a[h>>0]=g+255|g;h=f+4|0;g=c[h>>2]|0;m=(c[f+8>>2]|0)-g|0;i=m>>>0>>0?m:k;if((m|0)>0){Wf(b|0,g|0,i|0)|0;c[h>>2]=g+i;g=b+i|0;h=k-i|0}else{g=b;h=k}a:do if(!h)l=13;else{i=f+32|0;while(1){if(ce(f)|0)break;b=Ma[c[i>>2]&15](f,g,h)|0;if((b+1|0)>>>0<2)break;h=h-b|0;if(!h){l=13;break a}else g=g+b|0}if(j|0)zd(f);e=((k-h|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)zd(f);return e|0}function Qe(a,b){a=a|0;b=b|0;var c=0;c=Vd(a)|0;return ((Oe(a,1,c,b)|0)!=(c|0))<<31>>31|0}function Re(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=b&255;e=b&255;if((c[d+76>>2]|0)>=0?(yd(d)|0)!=0:0){if((e|0)!=(a[d+75>>0]|0)?(j=d+20|0,g=c[j>>2]|0,g>>>0<(c[d+16>>2]|0)>>>0):0){c[j>>2]=g+1;a[g>>0]=h}else e=Fe(d,b)|0;zd(d)}else k=3;do if((k|0)==3){if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,f=c[i>>2]|0,f>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=f+1;a[f>>0]=h;break}e=Fe(d,b)|0}while(0);return e|0}function Se(a){a=a|0;var b=0,c=0;c=(Vd(a)|0)+1|0;b=cf(c)|0;if(!b)b=0;else Wf(b|0,a|0,c|0)|0;return b|0}function Te(){var a=0,b=0,d=0;b=5456;b=$f(c[b>>2]|0,c[b+4>>2]|0,1284865837,1481765933)|0;b=Sf(b|0,D|0,1,0)|0;a=D;d=5456;c[d>>2]=b;c[d+4>>2]=a;a=Vf(b|0,a|0,33)|0;return a|0}function Ue(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;while(1){c=a[b>>0]|0;d=c<<24>>24;e=b+1|0;if(!(Yd(d)|0))break;else b=e}switch(d|0){case 45:{b=1;f=5;break}case 43:{b=0;f=5;break}default:{g=0;e=b}}if((f|0)==5){c=a[e>>0]|0;g=b}b=(c<<24>>24)+-48|0;if(b>>>0<10){d=b;b=0;c=e;do{c=c+1|0;b=(b*10|0)-d|0;d=(a[c>>0]|0)+-48|0}while(d>>>0<10)}else b=0;return (g|0?b:0-b|0)|0}function Ve(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+32|0;f=g;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;e=a[d>>0]|0;do if(!(e<<24>>24))d=0;else{if(!(a[d+1>>0]|0)){d=b;while(1)if((a[d>>0]|0)==e<<24>>24)d=d+1|0;else break;d=d-b|0;break}do{h=f+(((e&255)>>>5&255)<<2)|0;c[h>>2]=c[h>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;a:do if(!(d<<24>>24))d=b;else{e=d;d=b;do{if(!(c[f+(((e&255)>>>5&255)<<2)>>2]&1<<(e&31)))break a;d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0)}while(0);d=d-b|0}while(0);l=g;return d|0}function We(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;do{i=f+(((e&255)>>>5&255)<<2)|0;c[i>>2]=c[i>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);e=a[b>>0]|0;if(!(e<<24>>24))e=b;else{d=e;e=b;do{if(c[f+(((d&255)>>>5&255)<<2)>>2]&1<<(d&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)e=de(b,e<<24>>24)|0;l=h;return e-b|0}function Xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0;i=l;l=l+128|0;h=i;f=h;g=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;$d(h,0);e=+re(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=d|0?a+d|0:a;l=i;return +e}function Ye(a,b){a=a|0;b=b|0;return +(+Xe(a,b,1))}function Ze(a){a=a|0;return +(+Ye(a,0))}function _e(a){a=+a;var b=0.0,d=0,e=0.0,f=0,g=0.0,i=0,k=0,l=0.0;h[j>>3]=a;d=c[j+4>>2]|0;f=d&2147483647;d=Vf(c[j>>2]|0,d|0,63)|0;do if(f>>>0>1078159481){f=$e(a)|0;k=D&2147483647;if(!(k>>>0>2146435072|(k|0)==2146435072&f>>>0>0))if(!d)if(a>709.782712893384)a=a*8988465674311579538646525.0e283;else{b=.5;i=12}else a=-1.0}else{if(f>>>0<=1071001154)if(f>>>0<1016070144)break;else{g=0.0;d=0;i=15;break}d=(d|0)!=0;if(f>>>0>=1072734898){b=d?-.5:.5;i=12;break}if(d){a=a+.6931471803691238;d=-1;b=-1.9082149292705877e-10;i=13;break}else{a=a+-.6931471803691238;d=1;b=1.9082149292705877e-10;i=13;break}}while(0);if((i|0)==12){d=~~(a*1.4426950408889634+b);b=+(d|0);a=a-b*.6931471803691238;b=b*1.9082149292705877e-10;i=13}if((i|0)==13){e=a-b;g=a-e-b;a=e;i=15}a:do if((i|0)==15){e=a*.5;b=a*e;l=b*(b*(b*(b*(4.008217827329362e-06-b*2.0109921818362437e-07)+-7.93650757867488e-05)+1.5873015872548146e-03)+-.03333333333333313)+1.0;e=3.0-e*l;e=b*((l-e)/(6.0-a*e));if(!d){a=a-(a*e-b);break}e=a*(e-g)-g-b;switch(d|0){case -1:{a=(a-e)*.5+-.5;break a}case 1:if(a<-.25){a=(e-(a+.5))*-2.0;break a}else{a=(a-e)*2.0+1.0;break a}default:{i=Uf(d+1023|0,0,52)|0;k=D;c[j>>2]=i;c[j+4>>2]=k;b=+h[j>>3];if(d>>>0>56){a=a-e+1.0;a=((d|0)==1024?a*2.0*8988465674311579538646525.0e283:b*a)+-1.0;break a}else{f=Uf(1023-d|0,0,52)|0;i=D;k=(d|0)<20;c[j>>2]=f;c[j+4>>2]=i;l=+h[j>>3];a=b*((k?1.0-l:1.0)+(a-(k?e:l+e)));break a}}}}while(0);return +a}function $e(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;D=c[j+4>>2]|0;return b|0}function af(a){a=+a;var b=0,d=0;h[j>>3]=a;d=c[j+4>>2]|0;b=d&2147483647;c[j>>2]=c[j>>2];c[j+4>>2]=b;a=+h[j>>3];do if(b>>>0>1071748074)if(b>>>0>1077149696){a=1.0-0.0/a;break}else{a=1.0-2.0/(+_e(a*2.0)+2.0);break}else{if(b>>>0>1070618798){a=+_e(a*2.0);a=a/(a+2.0);break}if(b>>>0>1048575){a=+_e(a*-2.0);a=-a/(a+2.0)}}while(0);return +((d|0)<0?-a:a)}function bf(b,d){b=b|0;d=d|0;var e=0;if(!b){b=c[1390]|0;if(!b)b=0;else e=3}else e=3;do if((e|0)==3){e=b+(Ve(b,d)|0)|0;if(!(a[e>>0]|0)){c[1390]=0;b=0;break}b=e+(We(e,d)|0)|0;c[1390]=b;if(!(a[b>>0]|0)){c[1390]=0;b=e;break}else{c[1390]=b+1;a[b>>0]=0;b=e;break}}while(0);return b|0}function cf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=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;K=l;l=l+16|0;o=K;do if(a>>>0<245){p=a>>>0<11?16:a+11&-8;a=p>>>3;t=c[1391]|0;d=t>>>a;if(d&3|0){f=(d&1^1)+a|0;g=5604+(f<<1<<2)|0;a=g+8|0;d=c[a>>2]|0;h=d+8|0;e=c[h>>2]|0;do if((g|0)!=(e|0)){if(e>>>0<(c[1395]|0)>>>0)la();b=e+12|0;if((c[b>>2]|0)==(d|0)){c[b>>2]=g;c[a>>2]=e;break}else la()}else c[1391]=t&~(1<>2]=J|3;J=d+J+4|0;c[J>>2]=c[J>>2]|1;J=h;l=K;return J|0}s=c[1393]|0;if(p>>>0>s>>>0){if(d|0){e=2<>>12&16;e=e>>>i;b=e>>>5&8;e=e>>>b;g=e>>>2&4;e=e>>>g;a=e>>>1&2;e=e>>>a;d=e>>>1&1;d=(b|i|g|a|d)+(e>>>d)|0;e=5604+(d<<1<<2)|0;a=e+8|0;g=c[a>>2]|0;i=g+8|0;b=c[i>>2]|0;do if((e|0)!=(b|0)){if(b>>>0<(c[1395]|0)>>>0)la();f=b+12|0;if((c[f>>2]|0)==(g|0)){c[f>>2]=e;c[a>>2]=b;j=t;break}else la()}else{j=t&~(1<>2]=p|3;f=g+p|0;c[f+4>>2]=h|1;c[f+h>>2]=h;if(s|0){e=c[1396]|0;b=s>>>3;d=5604+(b<<1<<2)|0;b=1<>2]|0;if(a>>>0<(c[1395]|0)>>>0)la();else{k=b;m=a}}else{c[1391]=j|b;k=d+8|0;m=d}c[k>>2]=e;c[m+12>>2]=e;c[e+8>>2]=m;c[e+12>>2]=d}c[1393]=h;c[1396]=f;J=i;l=K;return J|0}k=c[1392]|0;if(k){a=(k&0-k)+-1|0;I=a>>>12&16;a=a>>>I;H=a>>>5&8;a=a>>>H;J=a>>>2&4;a=a>>>J;b=a>>>1&2;a=a>>>b;d=a>>>1&1;d=c[5868+((H|I|J|b|d)+(a>>>d)<<2)>>2]|0;a=(c[d+4>>2]&-8)-p|0;b=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!b){j=a;i=d}else{do{I=(c[b+4>>2]&-8)-p|0;J=I>>>0>>0;a=J?I:a;d=J?b:d;b=c[b+16+(((c[b+16>>2]|0)==0&1)<<2)>>2]|0}while((b|0)!=0);j=a;i=d}f=c[1395]|0;if(i>>>0>>0)la();h=i+p|0;if(i>>>0>=h>>>0)la();g=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){e=b+20|0;d=c[e>>2]|0;if(d|0){b=d;a=e;continue}e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}if(a>>>0>>0)la();else{c[a>>2]=0;n=b;break}}else{e=c[i+8>>2]|0;if(e>>>0>>0)la();b=e+12|0;if((c[b>>2]|0)!=(i|0))la();a=d+8|0;if((c[a>>2]|0)==(i|0)){c[b>>2]=d;c[a>>2]=e;n=d;break}else la()}while(0);a:do if(g|0){b=c[i+28>>2]|0;a=5868+(b<<2)|0;do if((i|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[1392]=k&~(1<>>0>=(c[1395]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(i|0)&1)<<2)>>2]=n;if(!n)break a;else break}else la();while(0);a=c[1395]|0;if(n>>>0>>0)la();c[n+24>>2]=g;b=c[i+16>>2]|0;do if(b|0)if(b>>>0>>0)la();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[i+20>>2]|0;if(b|0)if(b>>>0<(c[1395]|0)>>>0)la();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(j>>>0<16){J=j+p|0;c[i+4>>2]=J|3;J=i+J+4|0;c[J>>2]=c[J>>2]|1}else{c[i+4>>2]=p|3;c[h+4>>2]=j|1;c[h+j>>2]=j;if(s|0){e=c[1396]|0;b=s>>>3;d=5604+(b<<1<<2)|0;b=1<>2]|0;if(a>>>0<(c[1395]|0)>>>0)la();else{q=b;r=a}}else{c[1391]=t|b;q=d+8|0;r=d}c[q>>2]=e;c[r+12>>2]=e;c[e+8>>2]=r;c[e+12>>2]=d}c[1393]=j;c[1396]=h}J=i+8|0;l=K;return J|0}}}else if(a>>>0<=4294967231){a=a+11|0;p=a&-8;k=c[1392]|0;if(k){d=0-p|0;a=a>>>8;if(a)if(p>>>0>16777215)i=31;else{r=(a+1048320|0)>>>16&8;C=a<>>16&4;C=C<>>16&2;i=14-(q|r|i)+(C<>>15)|0;i=p>>>(i+7|0)&1|i<<1}else i=0;a=c[5868+(i<<2)>>2]|0;b:do if(!a){e=0;a=0;C=81}else{e=0;g=p<<((i|0)==31?0:25-(i>>>1)|0);h=a;a=0;while(1){f=(c[h+4>>2]&-8)-p|0;if(f>>>0>>0)if(!f){d=0;e=h;a=h;C=85;break b}else{d=f;a=h}f=c[h+20>>2]|0;h=c[h+16+(g>>>31<<2)>>2]|0;e=(f|0)==0|(f|0)==(h|0)?e:f;f=(h|0)==0;if(f){C=81;break}else g=g<<((f^1)&1)}}while(0);if((C|0)==81){if((e|0)==0&(a|0)==0){a=2<>>12&16;a=a>>>n;m=a>>>5&8;a=a>>>m;q=a>>>2&4;a=a>>>q;r=a>>>1&2;a=a>>>r;e=a>>>1&1;e=c[5868+((m|n|q|r|e)+(a>>>e)<<2)>>2]|0;a=0}if(!e){i=d;j=a}else C=85}if((C|0)==85)while(1){C=0;q=(c[e+4>>2]&-8)-p|0;r=q>>>0>>0;d=r?q:d;a=r?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){i=d;j=a;break}else C=85}if((j|0)!=0?i>>>0<((c[1393]|0)-p|0)>>>0:0){f=c[1395]|0;if(j>>>0>>0)la();h=j+p|0;if(j>>>0>=h>>>0)la();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){s=0;break}}while(1){e=b+20|0;d=c[e>>2]|0;if(d|0){b=d;a=e;continue}e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}if(a>>>0>>0)la();else{c[a>>2]=0;s=b;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)la();b=e+12|0;if((c[b>>2]|0)!=(j|0))la();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;s=d;break}else la()}while(0);c:do if(g){b=c[j+28>>2]|0;a=5868+(b<<2)|0;do if((j|0)==(c[a>>2]|0)){c[a>>2]=s;if(!s){t=k&~(1<>>0>=(c[1395]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=s;if(!s){t=k;break c}else break}else la();while(0);a=c[1395]|0;if(s>>>0>>0)la();c[s+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0>>0)la();else{c[s+16>>2]=b;c[b+24>>2]=s;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[1395]|0)>>>0)la();else{c[s+20>>2]=b;c[b+24>>2]=s;t=k;break}else t=k}else t=k;while(0);do if(i>>>0>=16){c[j+4>>2]=p|3;c[h+4>>2]=i|1;c[h+i>>2]=i;b=i>>>3;if(i>>>0<256){d=5604+(b<<1<<2)|0;a=c[1391]|0;b=1<>2]|0;if(a>>>0<(c[1395]|0)>>>0)la();else{x=b;y=a}}else{c[1391]=a|b;x=d+8|0;y=d}c[x>>2]=h;c[y+12>>2]=h;c[h+8>>2]=y;c[h+12>>2]=d;break}b=i>>>8;if(b)if(i>>>0>16777215)b=31;else{I=(b+1048320|0)>>>16&8;J=b<>>16&4;J=J<>>16&2;b=14-(H|I|b)+(J<>>15)|0;b=i>>>(b+7|0)&1|b<<1}else b=0;d=5868+(b<<2)|0;c[h+28>>2]=b;a=h+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}a=i<<((b|0)==31?0:25-(b>>>1)|0);e=c[d>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(i|0)){C=139;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=136;break}else{a=a<<1;e=b}}if((C|0)==136)if(d>>>0<(c[1395]|0)>>>0)la();else{c[d>>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;break}else if((C|0)==139){a=e+8|0;b=c[a>>2]|0;J=c[1395]|0;if(b>>>0>=J>>>0&e>>>0>=J>>>0){c[b+12>>2]=h;c[a>>2]=h;c[h+8>>2]=b;c[h+12>>2]=e;c[h+24>>2]=0;break}else la()}}else{J=i+p|0;c[j+4>>2]=J|3;J=j+J+4|0;c[J>>2]=c[J>>2]|1}while(0);J=j+8|0;l=K;return J|0}}}else p=-1;while(0);d=c[1393]|0;if(d>>>0>=p>>>0){a=d-p|0;b=c[1396]|0;if(a>>>0>15){J=b+p|0;c[1396]=J;c[1393]=a;c[J+4>>2]=a|1;c[J+a>>2]=a;c[b+4>>2]=p|3}else{c[1393]=0;c[1396]=0;c[b+4>>2]=d|3;J=b+d+4|0;c[J>>2]=c[J>>2]|1}J=b+8|0;l=K;return J|0}h=c[1394]|0;if(h>>>0>p>>>0){H=h-p|0;c[1394]=H;J=c[1397]|0;I=J+p|0;c[1397]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}if(!(c[1509]|0)){c[1511]=4096;c[1510]=4096;c[1512]=-1;c[1513]=-1;c[1514]=0;c[1502]=0;a=o&-16^1431655768;c[o>>2]=a;c[1509]=a;a=4096}else a=c[1511]|0;i=p+48|0;j=p+47|0;g=a+j|0;e=0-a|0;k=g&e;if(k>>>0<=p>>>0){J=0;l=K;return J|0}a=c[1501]|0;if(a|0?(x=c[1499]|0,y=x+k|0,y>>>0<=x>>>0|y>>>0>a>>>0):0){J=0;l=K;return J|0}d:do if(!(c[1502]&4)){d=c[1397]|0;e:do if(d){f=6012;while(1){a=c[f>>2]|0;if(a>>>0<=d>>>0?(w=f+4|0,(a+(c[w>>2]|0)|0)>>>0>d>>>0):0)break;a=c[f+8>>2]|0;if(!a){C=163;break e}else f=a}b=g-h&e;if(b>>>0<2147483647){a=ag(b|0)|0;if((a|0)==((c[f>>2]|0)+(c[w>>2]|0)|0)){if((a|0)!=(-1|0)){h=a;g=b;C=180;break d}}else{e=a;C=171}}else b=0}else C=163;while(0);do if((C|0)==163){d=ag(0)|0;if((d|0)!=(-1|0)?(b=d,u=c[1510]|0,v=u+-1|0,b=((v&b|0)==0?0:(v+b&0-u)-b|0)+k|0,u=c[1499]|0,v=b+u|0,b>>>0>p>>>0&b>>>0<2147483647):0){y=c[1501]|0;if(y|0?v>>>0<=u>>>0|v>>>0>y>>>0:0){b=0;break}a=ag(b|0)|0;if((a|0)==(d|0)){h=d;g=b;C=180;break d}else{e=a;C=171}}else b=0}while(0);do if((C|0)==171){d=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=e;g=b;C=180;break d}a=c[1511]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=e;g=b;C=180;break d}if((ag(a|0)|0)==(-1|0)){ag(d|0)|0;b=0;break}else{h=e;g=a+b|0;C=180;break d}}while(0);c[1502]=c[1502]|4;C=178}else{b=0;C=178}while(0);if(((C|0)==178?k>>>0<2147483647:0)?(z=ag(k|0)|0,y=ag(0)|0,B=y-z|0,A=B>>>0>(p+40|0)>>>0,!((z|0)==(-1|0)|A^1|z>>>0>>0&((z|0)!=(-1|0)&(y|0)!=(-1|0))^1)):0){h=z;g=A?B:b;C=180}if((C|0)==180){b=(c[1499]|0)+g|0;c[1499]=b;if(b>>>0>(c[1500]|0)>>>0)c[1500]=b;k=c[1397]|0;do if(k){f=6012;while(1){b=c[f>>2]|0;e=f+4|0;a=c[e>>2]|0;if((h|0)==(b+a|0)){C=190;break}d=c[f+8>>2]|0;if(!d)break;else f=d}if(((C|0)==190?(c[f+12>>2]&8|0)==0:0)?k>>>0>>0&k>>>0>=b>>>0:0){c[e>>2]=a+g;J=k+8|0;J=(J&7|0)==0?0:0-J&7;I=k+J|0;J=(c[1394]|0)+(g-J)|0;c[1397]=I;c[1394]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[1398]=c[1513];break}b=c[1395]|0;if(h>>>0>>0){c[1395]=h;i=h}else i=b;d=h+g|0;a=6012;while(1){if((c[a>>2]|0)==(d|0)){C=198;break}b=c[a+8>>2]|0;if(!b)break;else a=b}if((C|0)==198?(c[a+12>>2]&8|0)==0:0){c[a>>2]=h;n=a+4|0;c[n>>2]=(c[n>>2]|0)+g;n=h+8|0;n=h+((n&7|0)==0?0:0-n&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;m=n+p|0;j=b-n-p|0;c[n+4>>2]=p|3;do if((b|0)!=(k|0)){if((b|0)==(c[1396]|0)){J=(c[1393]|0)+j|0;c[1393]=J;c[1396]=m;c[m+4>>2]=J|1;c[m+J>>2]=J;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;f=a>>>3;f:do if(a>>>0>=256){g=c[b+24>>2]|0;e=c[b+12>>2]|0;do if((e|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){H=0;break}else f=e}else f=d;while(1){e=a+20|0;d=c[e>>2]|0;if(d|0){a=d;f=e;continue}e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;f=e}}if(f>>>0>>0)la();else{c[f>>2]=0;H=a;break}}else{f=c[b+8>>2]|0;if(f>>>0>>0)la();a=f+12|0;if((c[a>>2]|0)!=(b|0))la();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;H=e;break}else la()}while(0);if(!g)break;a=c[b+28>>2]|0;d=5868+(a<<2)|0;do if((b|0)!=(c[d>>2]|0))if(g>>>0>=(c[1395]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=H;if(!H)break f;else break}else la();else{c[d>>2]=H;if(H|0)break;c[1392]=c[1392]&~(1<>>0>>0)la();c[H+24>>2]=g;d=b+16|0;a=c[d>>2]|0;do if(a|0)if(a>>>0>>0)la();else{c[H+16>>2]=a;c[a+24>>2]=H;break}while(0);a=c[d+4>>2]|0;if(!a)break;if(a>>>0<(c[1395]|0)>>>0)la();else{c[H+20>>2]=a;c[a+24>>2]=H;break}}else{d=c[b+8>>2]|0;e=c[b+12>>2]|0;a=5604+(f<<1<<2)|0;do if((d|0)!=(a|0)){if(d>>>0>>0)la();if((c[d+12>>2]|0)==(b|0))break;la()}while(0);if((e|0)==(d|0)){c[1391]=c[1391]&~(1<>>0>>0)la();a=e+8|0;if((c[a>>2]|0)==(b|0)){E=a;break}la()}while(0);c[d+12>>2]=e;c[E>>2]=d}while(0);b=b+h|0;f=h+j|0}else f=j;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[m+4>>2]=f|1;c[m+f>>2]=f;b=f>>>3;if(f>>>0<256){d=5604+(b<<1<<2)|0;a=c[1391]|0;b=1<>2]|0;if(a>>>0>=(c[1395]|0)>>>0){I=b;J=a;break}la()}while(0);c[I>>2]=m;c[J+12>>2]=m;c[m+8>>2]=J;c[m+12>>2]=d;break}b=f>>>8;do if(!b)a=0;else{if(f>>>0>16777215){a=31;break}I=(b+1048320|0)>>>16&8;J=b<>>16&4;J=J<>>16&2;a=14-(H|I|a)+(J<>>15)|0;a=f>>>(a+7|0)&1|a<<1}while(0);e=5868+(a<<2)|0;c[m+28>>2]=a;b=m+16|0;c[b+4>>2]=0;c[b>>2]=0;b=c[1392]|0;d=1<>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}a=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){C=265;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=262;break}else{a=a<<1;e=b}}if((C|0)==262)if(d>>>0<(c[1395]|0)>>>0)la();else{c[d>>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}else if((C|0)==265){a=e+8|0;b=c[a>>2]|0;J=c[1395]|0;if(b>>>0>=J>>>0&e>>>0>=J>>>0){c[b+12>>2]=m;c[a>>2]=m;c[m+8>>2]=b;c[m+12>>2]=e;c[m+24>>2]=0;break}else la()}}else{J=(c[1394]|0)+j|0;c[1394]=J;c[1397]=m;c[m+4>>2]=J|1}while(0);J=n+8|0;l=K;return J|0}a=6012;while(1){b=c[a>>2]|0;if(b>>>0<=k>>>0?(D=b+(c[a+4>>2]|0)|0,D>>>0>k>>>0):0)break;a=c[a+8>>2]|0}f=D+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=k+16|0;a=a>>>0>>0?k:a;b=a+8|0;d=h+8|0;d=(d&7|0)==0?0:0-d&7;J=h+d|0;d=g+-40-d|0;c[1397]=J;c[1394]=d;c[J+4>>2]=d|1;c[J+d+4>>2]=40;c[1398]=c[1513];d=a+4|0;c[d>>2]=27;c[b>>2]=c[1503];c[b+4>>2]=c[1504];c[b+8>>2]=c[1505];c[b+12>>2]=c[1506];c[1503]=h;c[1504]=g;c[1506]=0;c[1505]=b;b=a+24|0;do{J=b;b=b+4|0;c[b>>2]=7}while((J+8|0)>>>0>>0);if((a|0)!=(k|0)){g=a-k|0;c[d>>2]=c[d>>2]&-2;c[k+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=5604+(b<<1<<2)|0;a=c[1391]|0;b=1<>2]|0;if(a>>>0<(c[1395]|0)>>>0)la();else{F=b;G=a}}else{c[1391]=a|b;F=d+8|0;G=d}c[F>>2]=k;c[G+12>>2]=k;c[k+8>>2]=G;c[k+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{I=(b+1048320|0)>>>16&8;J=b<>>16&4;J=J<>>16&2;d=14-(H|I|d)+(J<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=5868+(d<<2)|0;c[k+28>>2]=d;c[k+20>>2]=0;c[f>>2]=0;b=c[1392]|0;a=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(g|0)){C=292;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=289;break}else{a=a<<1;e=b}}if((C|0)==289)if(d>>>0<(c[1395]|0)>>>0)la();else{c[d>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((C|0)==292){a=e+8|0;b=c[a>>2]|0;J=c[1395]|0;if(b>>>0>=J>>>0&e>>>0>=J>>>0){c[b+12>>2]=k;c[a>>2]=k;c[k+8>>2]=b;c[k+12>>2]=e;c[k+24>>2]=0;break}else la()}}}else{J=c[1395]|0;if((J|0)==0|h>>>0>>0)c[1395]=h;c[1503]=h;c[1504]=g;c[1506]=0;c[1400]=c[1509];c[1399]=-1;b=0;do{J=5604+(b<<1<<2)|0;c[J+12>>2]=J;c[J+8>>2]=J;b=b+1|0}while((b|0)!=32);J=h+8|0;J=(J&7|0)==0?0:0-J&7;I=h+J|0;J=g+-40-J|0;c[1397]=I;c[1394]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[1398]=c[1513]}while(0);b=c[1394]|0;if(b>>>0>p>>>0){H=b-p|0;c[1394]=H;J=c[1397]|0;I=J+p|0;c[1397]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}}c[(jd()|0)>>2]=12;J=0;l=K;return J|0}function df(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;if(!a)return;d=a+-8|0;h=c[1395]|0;if(d>>>0>>0)la();a=c[a+-4>>2]|0;b=a&3;if((b|0)==1)la();e=a&-8;o=d+e|0;a:do if(!(a&1)){a=c[d>>2]|0;if(!b)return;k=d+(0-a)|0;j=a+e|0;if(k>>>0>>0)la();if((k|0)==(c[1396]|0)){b=o+4|0;a=c[b>>2]|0;if((a&3|0)!=3){m=k;r=k;f=j;break}c[1393]=j;c[b>>2]=a&-2;c[k+4>>2]=j|1;c[k+j>>2]=j;return}e=a>>>3;if(a>>>0<256){b=c[k+8>>2]|0;d=c[k+12>>2]|0;a=5604+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0>>0)la();if((c[b+12>>2]|0)!=(k|0))la()}if((d|0)==(b|0)){c[1391]=c[1391]&~(1<>>0>>0)la();a=d+8|0;if((c[a>>2]|0)==(k|0))g=a;else la()}else g=d+8|0;c[b+12>>2]=d;c[g>>2]=b;m=k;r=k;f=j;break}g=c[k+24>>2]|0;d=c[k+12>>2]|0;do if((d|0)==(k|0)){d=k+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){i=0;break}else e=d}else e=b;while(1){d=a+20|0;b=c[d>>2]|0;if(b|0){a=b;e=d;continue}d=a+16|0;b=c[d>>2]|0;if(!b)break;else{a=b;e=d}}if(e>>>0>>0)la();else{c[e>>2]=0;i=a;break}}else{e=c[k+8>>2]|0;if(e>>>0>>0)la();a=e+12|0;if((c[a>>2]|0)!=(k|0))la();b=d+8|0;if((c[b>>2]|0)==(k|0)){c[a>>2]=d;c[b>>2]=e;i=d;break}else la()}while(0);if(g){a=c[k+28>>2]|0;b=5868+(a<<2)|0;do if((k|0)==(c[b>>2]|0)){c[b>>2]=i;if(!i){c[1392]=c[1392]&~(1<>>0>=(c[1395]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(k|0)&1)<<2)>>2]=i;if(!i){m=k;r=k;f=j;break a}else break}else la();while(0);d=c[1395]|0;if(i>>>0>>0)la();c[i+24>>2]=g;b=k+16|0;a=c[b>>2]|0;do if(a|0)if(a>>>0>>0)la();else{c[i+16>>2]=a;c[a+24>>2]=i;break}while(0);a=c[b+4>>2]|0;if(a)if(a>>>0<(c[1395]|0)>>>0)la();else{c[i+20>>2]=a;c[a+24>>2]=i;m=k;r=k;f=j;break}else{m=k;r=k;f=j}}else{m=k;r=k;f=j}}else{m=d;r=d;f=e}while(0);if(m>>>0>=o>>>0)la();a=o+4|0;b=c[a>>2]|0;if(!(b&1))la();if(!(b&2)){a=c[1396]|0;if((o|0)==(c[1397]|0)){q=(c[1394]|0)+f|0;c[1394]=q;c[1397]=r;c[r+4>>2]=q|1;if((r|0)!=(a|0))return;c[1396]=0;c[1393]=0;return}if((o|0)==(a|0)){q=(c[1393]|0)+f|0;c[1393]=q;c[1396]=m;c[r+4>>2]=q|1;c[m+q>>2]=q;return}f=(b&-8)+f|0;e=b>>>3;b:do if(b>>>0>=256){g=c[o+24>>2]|0;a=c[o+12>>2]|0;do if((a|0)==(o|0)){d=o+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){n=0;break}else e=d}else e=b;while(1){d=a+20|0;b=c[d>>2]|0;if(b|0){a=b;e=d;continue}d=a+16|0;b=c[d>>2]|0;if(!b)break;else{a=b;e=d}}if(e>>>0<(c[1395]|0)>>>0)la();else{c[e>>2]=0;n=a;break}}else{b=c[o+8>>2]|0;if(b>>>0<(c[1395]|0)>>>0)la();d=b+12|0;if((c[d>>2]|0)!=(o|0))la();e=a+8|0;if((c[e>>2]|0)==(o|0)){c[d>>2]=a;c[e>>2]=b;n=a;break}else la()}while(0);if(g|0){a=c[o+28>>2]|0;b=5868+(a<<2)|0;do if((o|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[1392]=c[1392]&~(1<>>0>=(c[1395]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else la();while(0);d=c[1395]|0;if(n>>>0>>0)la();c[n+24>>2]=g;b=o+16|0;a=c[b>>2]|0;do if(a|0)if(a>>>0>>0)la();else{c[n+16>>2]=a;c[a+24>>2]=n;break}while(0);a=c[b+4>>2]|0;if(a|0)if(a>>>0<(c[1395]|0)>>>0)la();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{b=c[o+8>>2]|0;d=c[o+12>>2]|0;a=5604+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<(c[1395]|0)>>>0)la();if((c[b+12>>2]|0)!=(o|0))la()}if((d|0)==(b|0)){c[1391]=c[1391]&~(1<>>0<(c[1395]|0)>>>0)la();a=d+8|0;if((c[a>>2]|0)==(o|0))l=a;else la()}else l=d+8|0;c[b+12>>2]=d;c[l>>2]=b}while(0);c[r+4>>2]=f|1;c[m+f>>2]=f;if((r|0)==(c[1396]|0)){c[1393]=f;return}}else{c[a>>2]=b&-2;c[r+4>>2]=f|1;c[m+f>>2]=f}a=f>>>3;if(f>>>0<256){d=5604+(a<<1<<2)|0;b=c[1391]|0;a=1<>2]|0;if(b>>>0<(c[1395]|0)>>>0)la();else{p=a;q=b}}else{c[1391]=b|a;p=d+8|0;q=d}c[p>>2]=r;c[q+12>>2]=r;c[r+8>>2]=q;c[r+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)b=31;else{p=(a+1048320|0)>>>16&8;q=a<>>16&4;q=q<>>16&2;b=14-(o|p|b)+(q<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=5868+(b<<2)|0;c[r+28>>2]=b;c[r+20>>2]=0;c[r+16>>2]=0;a=c[1392]|0;d=1<>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=124;break}d=e+16+(b>>>31<<2)|0;a=c[d>>2]|0;if(!a){a=121;break}else{b=b<<1;e=a}}if((a|0)==121)if(d>>>0<(c[1395]|0)>>>0)la();else{c[d>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;break}else if((a|0)==124){b=e+8|0;a=c[b>>2]|0;q=c[1395]|0;if(a>>>0>=q>>>0&e>>>0>=q>>>0){c[a+12>>2]=r;c[b>>2]=r;c[r+8>>2]=a;c[r+12>>2]=e;c[r+24>>2]=0;break}else la()}}else{c[1392]=a|d;c[e>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r}while(0);r=(c[1399]|0)+-1|0;c[1399]=r;if(!r)a=6020;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[1399]=-1;return}function ef(a,b){a=a|0;b=b|0;var d=0;if(a){d=S(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;b=cf(d)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;Tf(b|0,0,d|0)|0;return b|0}function ff(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){a=cf(b)|0;return a|0}if(b>>>0>4294967231){c[(jd()|0)>>2]=12;a=0;return a|0}d=gf(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){a=d+8|0;return a|0}d=cf(b)|0;if(!d){a=0;return a|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;Wf(d|0,a|0,(e>>>0>>0?e:b)|0)|0;df(a);a=d;return a|0}function gf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=a+4|0;n=c[o>>2]|0;d=n&-8;k=a+d|0;i=c[1395]|0;e=n&3;if(!((e|0)!=1&a>>>0>=i>>>0&a>>>0>>0))la();f=c[k+4>>2]|0;if(!(f&1))la();if(!e){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[1511]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;m=a+b|0;c[o>>2]=n&1|b|2;c[m+4>>2]=d|3;b=m+d+4|0;c[b>>2]=c[b>>2]|1;hf(m,d);return a|0}if((k|0)==(c[1397]|0)){m=(c[1394]|0)+d|0;e=m-b|0;d=a+b|0;if(m>>>0<=b>>>0){a=0;return a|0}c[o>>2]=n&1|b|2;c[d+4>>2]=e|1;c[1397]=d;c[1394]=e;return a|0}if((k|0)==(c[1396]|0)){f=(c[1393]|0)+d|0;if(f>>>0>>0){a=0;return a|0}d=f-b|0;e=n&1;if(d>>>0>15){n=a+b|0;m=n+d|0;c[o>>2]=e|b|2;c[n+4>>2]=d|1;c[m>>2]=d;e=m+4|0;c[e>>2]=c[e>>2]&-2;e=n}else{c[o>>2]=e|f|2;e=a+f+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[1393]=d;c[1396]=e;return a|0}if(f&2|0){a=0;return a|0}l=(f&-8)+d|0;if(l>>>0>>0){a=0;return a|0}m=l-b|0;g=f>>>3;a:do if(f>>>0>=256){h=c[k+24>>2]|0;f=c[k+12>>2]|0;do if((f|0)==(k|0)){f=k+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){j=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}f=d+16|0;e=c[f>>2]|0;if(!e)break;else{d=e;g=f}}if(g>>>0>>0)la();else{c[g>>2]=0;j=d;break}}else{g=c[k+8>>2]|0;if(g>>>0>>0)la();d=g+12|0;if((c[d>>2]|0)!=(k|0))la();e=f+8|0;if((c[e>>2]|0)==(k|0)){c[d>>2]=f;c[e>>2]=g;j=f;break}else la()}while(0);if(h|0){d=c[k+28>>2]|0;e=5868+(d<<2)|0;do if((k|0)==(c[e>>2]|0)){c[e>>2]=j;if(!j){c[1392]=c[1392]&~(1<>>0>=(c[1395]|0)>>>0){c[h+16+(((c[h+16>>2]|0)!=(k|0)&1)<<2)>>2]=j;if(!j)break a;else break}else la();while(0);f=c[1395]|0;if(j>>>0>>0)la();c[j+24>>2]=h;e=k+16|0;d=c[e>>2]|0;do if(d|0)if(d>>>0>>0)la();else{c[j+16>>2]=d;c[d+24>>2]=j;break}while(0);d=c[e+4>>2]|0;if(d|0)if(d>>>0<(c[1395]|0)>>>0)la();else{c[j+20>>2]=d;c[d+24>>2]=j;break}}}else{e=c[k+8>>2]|0;f=c[k+12>>2]|0;d=5604+(g<<1<<2)|0;if((e|0)!=(d|0)){if(e>>>0>>0)la();if((c[e+12>>2]|0)!=(k|0))la()}if((f|0)==(e|0)){c[1391]=c[1391]&~(1<>>0>>0)la();d=f+8|0;if((c[d>>2]|0)==(k|0))h=d;else la()}else h=f+8|0;c[e+12>>2]=f;c[h>>2]=e}while(0);d=n&1;if(m>>>0<16){c[o>>2]=l|d|2;b=a+l+4|0;c[b>>2]=c[b>>2]|1;return a|0}else{n=a+b|0;c[o>>2]=d|b|2;c[n+4>>2]=m|3;b=n+m+4|0;c[b>>2]=c[b>>2]|1;hf(n,m);return a|0}return 0}function hf(a,b){a=a|0;b=b|0;var 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;o=a+b|0;d=c[a+4>>2]|0;a:do if(!(d&1)){e=c[a>>2]|0;if(!(d&3))return;l=a+(0-e)|0;k=e+b|0;i=c[1395]|0;if(l>>>0>>0)la();if((l|0)==(c[1396]|0)){a=o+4|0;d=c[a>>2]|0;if((d&3|0)!=3){r=l;f=k;break}c[1393]=k;c[a>>2]=d&-2;c[l+4>>2]=k|1;c[l+k>>2]=k;return}g=e>>>3;if(e>>>0<256){a=c[l+8>>2]|0;b=c[l+12>>2]|0;d=5604+(g<<1<<2)|0;if((a|0)!=(d|0)){if(a>>>0>>0)la();if((c[a+12>>2]|0)!=(l|0))la()}if((b|0)==(a|0)){c[1391]=c[1391]&~(1<>>0>>0)la();d=b+8|0;if((c[d>>2]|0)==(l|0))h=d;else la()}else h=b+8|0;c[a+12>>2]=b;c[h>>2]=a;r=l;f=k;break}g=c[l+24>>2]|0;b=c[l+12>>2]|0;do if((b|0)==(l|0)){b=l+16|0;a=b+4|0;d=c[a>>2]|0;if(!d){d=c[b>>2]|0;if(!d){j=0;break}else e=b}else e=a;while(1){b=d+20|0;a=c[b>>2]|0;if(a|0){d=a;e=b;continue}b=d+16|0;a=c[b>>2]|0;if(!a)break;else{d=a;e=b}}if(e>>>0>>0)la();else{c[e>>2]=0;j=d;break}}else{e=c[l+8>>2]|0;if(e>>>0>>0)la();d=e+12|0;if((c[d>>2]|0)!=(l|0))la();a=b+8|0;if((c[a>>2]|0)==(l|0)){c[d>>2]=b;c[a>>2]=e;j=b;break}else la()}while(0);if(g){d=c[l+28>>2]|0;a=5868+(d<<2)|0;do if((l|0)==(c[a>>2]|0)){c[a>>2]=j;if(!j){c[1392]=c[1392]&~(1<>>0>=(c[1395]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(l|0)&1)<<2)>>2]=j;if(!j){r=l;f=k;break a}else break}else la();while(0);b=c[1395]|0;if(j>>>0>>0)la();c[j+24>>2]=g;a=l+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0>>0)la();else{c[j+16>>2]=d;c[d+24>>2]=j;break}while(0);d=c[a+4>>2]|0;if(d)if(d>>>0<(c[1395]|0)>>>0)la();else{c[j+20>>2]=d;c[d+24>>2]=j;r=l;f=k;break}else{r=l;f=k}}else{r=l;f=k}}else{r=a;f=b}while(0);h=c[1395]|0;if(o>>>0>>0)la();d=o+4|0;a=c[d>>2]|0;if(!(a&2)){d=c[1396]|0;if((o|0)==(c[1397]|0)){q=(c[1394]|0)+f|0;c[1394]=q;c[1397]=r;c[r+4>>2]=q|1;if((r|0)!=(d|0))return;c[1396]=0;c[1393]=0;return}if((o|0)==(d|0)){q=(c[1393]|0)+f|0;c[1393]=q;c[1396]=r;c[r+4>>2]=q|1;c[r+q>>2]=q;return}f=(a&-8)+f|0;e=a>>>3;b:do if(a>>>0>=256){g=c[o+24>>2]|0;b=c[o+12>>2]|0;do if((b|0)==(o|0)){b=o+16|0;a=b+4|0;d=c[a>>2]|0;if(!d){d=c[b>>2]|0;if(!d){n=0;break}else e=b}else e=a;while(1){b=d+20|0;a=c[b>>2]|0;if(a|0){d=a;e=b;continue}b=d+16|0;a=c[b>>2]|0;if(!a)break;else{d=a;e=b}}if(e>>>0>>0)la();else{c[e>>2]=0;n=d;break}}else{e=c[o+8>>2]|0;if(e>>>0>>0)la();d=e+12|0;if((c[d>>2]|0)!=(o|0))la();a=b+8|0;if((c[a>>2]|0)==(o|0)){c[d>>2]=b;c[a>>2]=e;n=b;break}else la()}while(0);if(g|0){d=c[o+28>>2]|0;a=5868+(d<<2)|0;do if((o|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[1392]=c[1392]&~(1<>>0>=(c[1395]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else la();while(0);b=c[1395]|0;if(n>>>0>>0)la();c[n+24>>2]=g;a=o+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0>>0)la();else{c[n+16>>2]=d;c[d+24>>2]=n;break}while(0);d=c[a+4>>2]|0;if(d|0)if(d>>>0<(c[1395]|0)>>>0)la();else{c[n+20>>2]=d;c[d+24>>2]=n;break}}}else{a=c[o+8>>2]|0;b=c[o+12>>2]|0;d=5604+(e<<1<<2)|0;if((a|0)!=(d|0)){if(a>>>0>>0)la();if((c[a+12>>2]|0)!=(o|0))la()}if((b|0)==(a|0)){c[1391]=c[1391]&~(1<>>0>>0)la();d=b+8|0;if((c[d>>2]|0)==(o|0))m=d;else la()}else m=b+8|0;c[a+12>>2]=b;c[m>>2]=a}while(0);c[r+4>>2]=f|1;c[r+f>>2]=f;if((r|0)==(c[1396]|0)){c[1393]=f;return}}else{c[d>>2]=a&-2;c[r+4>>2]=f|1;c[r+f>>2]=f}d=f>>>3;if(f>>>0<256){b=5604+(d<<1<<2)|0;a=c[1391]|0;d=1<>2]|0;if(a>>>0<(c[1395]|0)>>>0)la();else{p=d;q=a}}else{c[1391]=a|d;p=b+8|0;q=b}c[p>>2]=r;c[q+12>>2]=r;c[r+8>>2]=q;c[r+12>>2]=b;return}d=f>>>8;if(d)if(f>>>0>16777215)a=31;else{p=(d+1048320|0)>>>16&8;q=d<>>16&4;q=q<>>16&2;a=14-(o|p|a)+(q<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=5868+(a<<2)|0;c[r+28>>2]=a;c[r+20>>2]=0;c[r+16>>2]=0;d=c[1392]|0;b=1<>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}a=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){d=121;break}b=e+16+(a>>>31<<2)|0;d=c[b>>2]|0;if(!d){d=118;break}else{a=a<<1;e=d}}if((d|0)==118){if(b>>>0<(c[1395]|0)>>>0)la();c[b>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}else if((d|0)==121){a=e+8|0;d=c[a>>2]|0;q=c[1395]|0;if(!(d>>>0>=q>>>0&e>>>0>=q>>>0))la();c[d+12>>2]=r;c[a>>2]=r;c[r+8>>2]=d;c[r+12>>2]=e;c[r+24>>2]=0;return}}function jf(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=cf(b)|0;if(a|0)break;a=Nf()|0;if(!a){a=0;break}Sa[a&3]()}return a|0}function kf(a){a=a|0;return jf(a)|0}function lf(a){a=a|0;df(a);return}function mf(a){a=a|0;lf(a);return}function nf(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=of()|0;if(a|0?(e=c[a>>2]|0,e|0):0){b=e+48|0;a=c[b>>2]|0;b=c[b+4>>2]|0;if(!((a&-256|0)==1126902528&(b|0)==1129074247)){c[d>>2]=c[292];pf(4957,d)}if((a|0)==1126902529&(b|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;e=Ma[c[(c[26]|0)+16>>2]&15](104,e,f)|0;b=c[292]|0;if(e){i=c[f>>2]|0;i=Qa[c[(c[i>>2]|0)+8>>2]&7](i)|0;c[g>>2]=b;c[g+4>>2]=a;c[g+8>>2]=i;pf(4871,g)}else{c[i>>2]=b;c[i+4>>2]=a;pf(4916,i)}}pf(4995,h)}function of(){var a=0,b=0;a=l;l=l+16|0;if(!(xa(6060,3)|0)){b=va(c[1516]|0)|0;l=a;return b|0}else pf(5146,a);return 0}function pf(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[218]|0;wd(b,a,d)|0;Re(10,b)|0;la()}function qf(a){a=a|0;return}function rf(a){a=a|0;qf(a);lf(a);return}function sf(a){a=a|0;return}function tf(a){a=a|0;return}function uf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;g=h;if(!(yf(a,b,0)|0))if((b|0)!=0?(f=Cf(b,128,112,0)|0,(f|0)!=0):0){b=g+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[g>>2]=f;c[g+8>>2]=a;c[g+12>>2]=-1;c[g+48>>2]=1;Ta[c[(c[f>>2]|0)+28>>2]&3](f,g,c[d>>2]|0,1);if((c[g+24>>2]|0)==1){c[d>>2]=c[g+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function vf(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(yf(a,c[b+8>>2]|0,g)|0)Bf(0,b,d,e,f);return}function wf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(yf(b,c[d+8>>2]|0,g)|0)){if(yf(b,c[d>>2]|0,g)|0){b=d+32|0;if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[b>>2]=f;c[h>>2]=e;f=d+40|0;c[f>>2]=(c[f>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[b>>2]=1}}else Af(0,d,e,f);while(0);return}function xf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(yf(a,c[b+8>>2]|0,0)|0)zf(0,b,d,e);return}function yf(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function zf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=d+16|0;b=c[g>>2]|0;h=d+36|0;i=d+24|0;do if(b){if((b|0)!=(e|0)){c[h>>2]=(c[h>>2]|0)+1;c[i>>2]=2;a[d+54>>0]=1;break}if((c[i>>2]|0)==2)c[i>>2]=f}else{c[g>>2]=e;c[i>>2]=f;c[h>>2]=1}while(0);return}function Af(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function Bf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;h=d+16|0;b=c[h>>2]|0;k=d+54|0;j=d+48|0;i=d+24|0;f=d+36|0;if(!b){c[h>>2]=e;c[i>>2]=g;c[f>>2]=1;if(!((c[j>>2]|0)==1&(g|0)==1))break;a[k>>0]=1;break}if((b|0)!=(e|0)){c[f>>2]=(c[f>>2]|0)+1;a[k>>0]=1;break}f=c[i>>2]|0;if((f|0)==2){c[i>>2]=g;f=g}if((c[j>>2]|0)==1&(f|0)==1)a[k>>0]=1}while(0);return}function Cf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;p=q;n=c[d>>2]|0;o=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[p>>2]=f;c[p+4>>2]=d;c[p+8>>2]=e;c[p+12>>2]=g;g=p+16|0;d=p+20|0;h=p+24|0;j=p+28|0;i=p+32|0;e=p+40|0;k=g;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[g+36>>1]=0;a[g+38>>0]=0;a:do if(yf(n,f,0)|0){c[p+48>>2]=1;Na[c[(c[n>>2]|0)+20>>2]&3](n,p,o,o,1,0);g=(c[h>>2]|0)==1?o:0}else{Ua[c[(c[n>>2]|0)+24>>2]&3](n,p,o,1,0);switch(c[p+36>>2]|0){case 0:{g=(c[e>>2]|0)==1&(c[j>>2]|0)==1&(c[i>>2]|0)==1?c[d>>2]|0:0;break a}case 1:break;default:{g=0;break a}}if((c[h>>2]|0)!=1?!((c[e>>2]|0)==0&(c[j>>2]|0)==1&(c[i>>2]|0)==1):0){g=0;break}g=c[g>>2]|0}while(0);l=q;return g|0}function Df(a){a=a|0;qf(a);lf(a);return}function Ef(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(yf(a,c[b+8>>2]|0,g)|0)Bf(0,b,d,e,f);else{a=c[a+8>>2]|0;Na[c[(c[a>>2]|0)+20>>2]&3](a,b,d,e,f,g)}return}function Ff(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;do if(!(yf(b,c[d+8>>2]|0,g)|0)){h=b+8|0;if(!(yf(b,c[d>>2]|0,g)|0)){j=c[h>>2]|0;Ua[c[(c[j>>2]|0)+24>>2]&3](j,d,e,f,g);break}b=d+32|0;if((c[d+16>>2]|0)!=(e|0)?(i=d+20|0,(c[i>>2]|0)!=(e|0)):0){c[b>>2]=f;f=d+44|0;if((c[f>>2]|0)==4)break;b=d+52|0;a[b>>0]=0;k=d+53|0;a[k>>0]=0;h=c[h>>2]|0;Na[c[(c[h>>2]|0)+20>>2]&3](h,d,e,e,1,g);if(a[k>>0]|0)if(!(a[b>>0]|0)){b=3;j=11}else b=3;else{b=4;j=11}if((j|0)==11){c[i>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[f>>2]=b;break}if((f|0)==1)c[b>>2]=1}else Af(0,d,e,f);while(0);return}function Gf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(yf(a,c[b+8>>2]|0,0)|0)zf(0,b,d,e);else{a=c[a+8>>2]|0;Ta[c[(c[a>>2]|0)+28>>2]&3](a,b,d,e)}return}function Hf(a){a=a|0;return}function If(){var a=0;a=l;l=l+16|0;if(!(ka(6064,22)|0)){l=a;return}else pf(5195,a)}function Jf(a){a=a|0;var b=0;b=l;l=l+16|0;df(a);if(!(Ca(c[1516]|0,0)|0)){l=b;return}else pf(5245,b)}function Kf(){var a=0,b=0;b=of()|0;if((b|0?(a=c[b>>2]|0,a|0):0)?(b=a+48|0,(c[b>>2]&-256|0)==1126902528?(c[b+4>>2]|0)==1129074247:0):0)Lf(c[a+12>>2]|0);Lf(Mf()|0)}function Lf(a){a=a|0;var b=0;b=l;l=l+16|0;Sa[a&3]();pf(5298,b)}function Mf(){var a=0;a=c[291]|0;c[291]=a+0;return a|0}function Nf(){var a=0;a=c[1517]|0;c[1517]=a+0;return a|0}function Of(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Ma[c[(c[a>>2]|0)+16>>2]&15](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Pf(a){a=a|0;if(!a)a=0;else a=(Cf(a,128,184,0)|0)!=0;return a&1|0}function Qf(){}function Rf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (D=d,a-c>>>0|0)|0}function Sf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (D=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Tf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function Uf(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b<>>32-c;return a<>>c;return a>>>c|(b&(1<>>c-32|0}function Wf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return ra(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function Xf(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Yf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (D=n,f)|0}else{if(!g){n=0;f=0;return (D=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (D=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(V(i|0)|0)-(V(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (D=n,f)|0}g=h-1|0;if(g&h|0){i=(V(h|0)|0)+33-(V(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (D=o,p)|0}else{p=Xf(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (D=o,p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (D=o,p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (D=o,p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((Xf(i|0)|0)>>>0);return (D=o,p)|0}g=(V(i|0)|0)-(V(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (D=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Sf(m|0,l|0,-1,-1)|0;d=D;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;Rf(k|0,d|0,e|0,n|0)|0;p=D;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Rf(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=D;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (D=o,p)|0}function Zf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Yf(a,b,c,d,0)|0}function _f(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=S(e,f)|0;d=a>>>16;a=(c>>>16)+(S(e,d)|0)|0;e=b>>>16;b=S(e,f)|0;return (D=(a>>>16)+(S(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function $f(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=_f(e,f)|0;a=D;return (D=(S(b,f)|0)+(S(d,e)|0)+a|a&0,c|0|0)|0}function ag(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){_()|0;pa(12);return -1}c[i>>2]=a;if((a|0)>(Z()|0)?(Y()|0)==0:0){pa(12);c[i>>2]=b;return -1}return b|0}function bg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Yf(a,b,d,e,f)|0;l=g;return (D=c[f+4>>2]|0,c[f>>2]|0)|0}function cg(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function dg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ma[a&15](b|0,c|0,d|0)|0}function eg(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Na[a&3](b|0,c|0,d|0,e|0,f|0,g|0)}function fg(a,b){a=a|0;b=b|0;return +Oa[a&3](b|0)}function gg(a,b){a=a|0;b=b|0;Pa[a&31](b|0)}function hg(a,b){a=a|0;b=b|0;return Qa[a&7](b|0)|0}function ig(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ra[a&7](b|0,c|0,d|0)}function jg(a){a=a|0;Sa[a&3]()}function kg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ta[a&3](b|0,c|0,d|0,e|0)}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ua[a&3](b|0,c|0,d|0,e|0,f|0)}function mg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Va[a&7](b|0,c|0,d|0)}function ng(a,b,c){a=a|0;b=b|0;c=c|0;W(0);return 0}function og(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;W(1)}function pg(a){a=a|0;W(2);return 0.0}function qg(a){a=a|0;W(3)}function rg(a){a=a|0;W(4);return 0}function sg(a,b,c){a=a|0;b=b|0;c=c|0;W(5)}function tg(){W(6)}function ug(){Ga()}function vg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(7)}function wg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;W(8)}function xg(a,b,c){a=a|0;b=b|0;c=c|0;W(9);return 0.0} + +// EMSCRIPTEN_END_FUNCS +var Ma=[ng,rb,Ib,Hc,Oc,Uc,gd,hd,md,Ud,uf,od,ng,ng,ng,ng];var Na=[og,vf,Ef,og];var Oa=[pg,sb,Jb,pg];var Pa=[qg,lb,kb,pb,qb,tb,Db,Hb,Kb,mb,ec,Gc,Kc,Nc,Rc,Tc,Xc,qf,rf,sf,tf,Df,Jf,qg,qg,qg,qg,qg,qg,qg,qg,qg];var Qa=[rg,Ic,Pc,Vc,fd,rg,rg,rg];var Ra=[sg,jb,Jc,Qc,Wc,sg,sg,sg];var Sa=[tg,ug,nf,If];var Ta=[vg,xf,Gf,vg];var Ua=[wg,wf,Ff,wg];var Va=[xg,Yb,Xb,Zb,_b,$b,xg,xg];return{_parse_command_line:cb,_svm_free_model_content:xc,_llvm_cttz_i32:Xf,_bitshift64Lshr:Vf,_get_svr_epsilon:ib,___udivmoddi4:Yf,_fflush:me,___cxa_is_pointer_type:Pf,_memset:Tf,_add_instance:hb,_sbrk:ag,_memcpy:Wf,_llvm_bswap_i32:cg,___muldi3:$f,_bitshift64Shl:Uf,___uremdi3:bg,_libsvm_train_for_toy:db,_i64Subtract:Rf,_serialize_model:gb,_i64Add:Sf,_emscripten_get_global_libc:pd,___udivdi3:Zf,___errno_location:jd,___muldsi3:_f,___cxa_can_catch:Of,_free:df,_libsvm_predict_for_toy:eb,_create_svm_nodes:fb,_malloc:cf,_svm_get_svm_type:cd,runPostSets:Qf,stackAlloc:Wa,stackSave:Xa,stackRestore:Ya,establishStackSpace:Za,setTempRet0:$a,getTempRet0:ab,setThrew:_a,stackAlloc:Wa,stackSave:Xa,stackRestore:Ya,establishStackSpace:Za,setThrew:_a,setTempRet0:$a,getTempRet0:ab,dynCall_iiii:dg,dynCall_viiiiii:eg,dynCall_di:fg,dynCall_vi:gg,dynCall_ii:hg,dynCall_viii:ig,dynCall_v:jg,dynCall_viiii:kg,dynCall_viiiii:lg,dynCall_diii:mg}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _parse_command_line=Module["_parse_command_line"]=asm["_parse_command_line"];var _svm_free_model_content=Module["_svm_free_model_content"]=asm["_svm_free_model_content"];var stackSave=Module["stackSave"]=asm["stackSave"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var _memset=Module["_memset"]=asm["_memset"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var setThrew=Module["setThrew"]=asm["setThrew"];var _get_svr_epsilon=Module["_get_svr_epsilon"]=asm["_get_svr_epsilon"];var _serialize_model=Module["_serialize_model"]=asm["_serialize_model"];var _fflush=Module["_fflush"]=asm["_fflush"];var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=asm["___cxa_is_pointer_type"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var _llvm_cttz_i32=Module["_llvm_cttz_i32"]=asm["_llvm_cttz_i32"];var _add_instance=Module["_add_instance"]=asm["_add_instance"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _libsvm_train_for_toy=Module["_libsvm_train_for_toy"]=asm["_libsvm_train_for_toy"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var ___udivmoddi4=Module["___udivmoddi4"]=asm["___udivmoddi4"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=asm["_emscripten_get_global_libc"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var ___muldsi3=Module["___muldsi3"]=asm["___muldsi3"];var ___cxa_can_catch=Module["___cxa_can_catch"]=asm["___cxa_can_catch"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var _libsvm_predict_for_toy=Module["_libsvm_predict_for_toy"]=asm["_libsvm_predict_for_toy"];var _create_svm_nodes=Module["_create_svm_nodes"]=asm["_create_svm_nodes"];var _malloc=Module["_malloc"]=asm["_malloc"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var _svm_get_svm_type=Module["_svm_get_svm_type"]=asm["_svm_get_svm_type"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];Runtime.stackAlloc=Module["stackAlloc"];Runtime.stackSave=Module["stackSave"];Runtime.stackRestore=Module["stackRestore"];Runtime.establishStackSpace=Module["establishStackSpace"];Runtime.setTempRet0=Module["setTempRet0"];Runtime.getTempRet0=Module["getTempRet0"];Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){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(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run() + + + + diff --git a/evaluation/svm.cpp b/evaluation/svm.cpp new file mode 100644 index 0000000..2bfae57 --- /dev/null +++ b/evaluation/svm.cpp @@ -0,0 +1,3181 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "svm.h" +int libsvm_version = LIBSVM_VERSION; +typedef float Qfloat; +typedef signed char schar; +#ifndef min +template static inline T min(T x,T y) { return (x static inline T max(T x,T y) { return (x>y)?x:y; } +#endif +template static inline void swap(T& x, T& y) { T t=x; x=y; y=t; } +template static inline void clone(T*& dst, S* src, int n) +{ + dst = new T[n]; + memcpy((void *)dst,(void *)src,sizeof(T)*n); +} +static inline double powi(double base, int times) +{ + double tmp = base, ret = 1.0; + + for(int t=times; t>0; t/=2) + { + if(t%2==1) ret*=tmp; + tmp = tmp * tmp; + } + return ret; +} +#define INF HUGE_VAL +#define TAU 1e-12 +#define Malloc(type,n) (type *)malloc((n)*sizeof(type)) + +static void print_string_stdout(const char *s) +{ + fputs(s,stdout); + fflush(stdout); +} +static void (*svm_print_string) (const char *) = &print_string_stdout; +#if 1 +static void info(const char *fmt,...) +{ + char buf[BUFSIZ]; + va_list ap; + va_start(ap,fmt); + vsprintf(buf,fmt,ap); + va_end(ap); + (*svm_print_string)(buf); +} +#else +static void info(const char *fmt,...) {} +#endif + +// +// Kernel Cache +// +// l is the number of total data items +// size is the cache size limit in bytes +// +class Cache +{ +public: + Cache(int l,long int size); + ~Cache(); + + // request data [0,len) + // return some position p where [p,len) need to be filled + // (p >= len if nothing needs to be filled) + int get_data(const int index, Qfloat **data, int len); + void swap_index(int i, int j); +private: + int l; + long int size; + struct head_t + { + head_t *prev, *next; // a circular list + Qfloat *data; + int len; // data[0,len) is cached in this entry + }; + + head_t *head; + head_t lru_head; + void lru_delete(head_t *h); + void lru_insert(head_t *h); +}; + +Cache::Cache(int l_,long int size_):l(l_),size(size_) +{ + head = (head_t *)calloc(l,sizeof(head_t)); // initialized to 0 + size /= sizeof(Qfloat); + size -= l * sizeof(head_t) / sizeof(Qfloat); + size = max(size, 2 * (long int) l); // cache must be large enough for two columns + lru_head.next = lru_head.prev = &lru_head; +} + +Cache::~Cache() +{ + for(head_t *h = lru_head.next; h != &lru_head; h=h->next) + free(h->data); + free(head); +} + +void Cache::lru_delete(head_t *h) +{ + // delete from current location + h->prev->next = h->next; + h->next->prev = h->prev; +} + +void Cache::lru_insert(head_t *h) +{ + // insert to last position + h->next = &lru_head; + h->prev = lru_head.prev; + h->prev->next = h; + h->next->prev = h; +} + +int Cache::get_data(const int index, Qfloat **data, int len) +{ + head_t *h = &head[index]; + if(h->len) lru_delete(h); + int more = len - h->len; + + if(more > 0) + { + // free old space + while(size < more) + { + head_t *old = lru_head.next; + lru_delete(old); + free(old->data); + size += old->len; + old->data = 0; + old->len = 0; + } + + // allocate new space + h->data = (Qfloat *)realloc(h->data,sizeof(Qfloat)*len); + size -= more; + swap(h->len,len); + } + + lru_insert(h); + *data = h->data; + return len; +} + +void Cache::swap_index(int i, int j) +{ + if(i==j) return; + + if(head[i].len) lru_delete(&head[i]); + if(head[j].len) lru_delete(&head[j]); + swap(head[i].data,head[j].data); + swap(head[i].len,head[j].len); + if(head[i].len) lru_insert(&head[i]); + if(head[j].len) lru_insert(&head[j]); + + if(i>j) swap(i,j); + for(head_t *h = lru_head.next; h!=&lru_head; h=h->next) + { + if(h->len > i) + { + if(h->len > j) + swap(h->data[i],h->data[j]); + else + { + // give up + lru_delete(h); + free(h->data); + size += h->len; + h->data = 0; + h->len = 0; + } + } + } +} + +// +// Kernel evaluation +// +// the static method k_function is for doing single kernel evaluation +// the constructor of Kernel prepares to calculate the l*l kernel matrix +// the member function get_Q is for getting one column from the Q Matrix +// +class QMatrix { +public: + virtual Qfloat *get_Q(int column, int len) const = 0; + virtual double *get_QD() const = 0; + virtual void swap_index(int i, int j) const = 0; + virtual ~QMatrix() {} +}; + +class Kernel: public QMatrix { +public: + Kernel(int l, svm_node * const * x, const svm_parameter& param); + virtual ~Kernel(); + + static double k_function(const svm_node *x, const svm_node *y, + const svm_parameter& param); + virtual Qfloat *get_Q(int column, int len) const = 0; + virtual double *get_QD() const = 0; + virtual void swap_index(int i, int j) const // no so const... + { + swap(x[i],x[j]); + if(x_square) swap(x_square[i],x_square[j]); + } +protected: + + double (Kernel::*kernel_function)(int i, int j) const; + +private: + const svm_node **x; + double *x_square; + + // svm_parameter + const int kernel_type; + const int degree; + const double gamma; + const double coef0; + + static double dot(const svm_node *px, const svm_node *py); + double kernel_linear(int i, int j) const + { + return dot(x[i],x[j]); + } + double kernel_poly(int i, int j) const + { + return powi(gamma*dot(x[i],x[j])+coef0,degree); + } + double kernel_rbf(int i, int j) const + { + return exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j]))); + } + double kernel_sigmoid(int i, int j) const + { + return tanh(gamma*dot(x[i],x[j])+coef0); + } + double kernel_precomputed(int i, int j) const + { + return x[i][(int)(x[j][0].value)].value; + } +}; + +Kernel::Kernel(int l, svm_node * const * x_, const svm_parameter& param) +:kernel_type(param.kernel_type), degree(param.degree), + gamma(param.gamma), coef0(param.coef0) +{ + switch(kernel_type) + { + case LINEAR: + kernel_function = &Kernel::kernel_linear; + break; + case POLY: + kernel_function = &Kernel::kernel_poly; + break; + case RBF: + kernel_function = &Kernel::kernel_rbf; + break; + case SIGMOID: + kernel_function = &Kernel::kernel_sigmoid; + break; + case PRECOMPUTED: + kernel_function = &Kernel::kernel_precomputed; + break; + } + + clone(x,x_,l); + + if(kernel_type == RBF) + { + x_square = new double[l]; + for(int i=0;iindex != -1 && py->index != -1) + { + if(px->index == py->index) + { + sum += px->value * py->value; + ++px; + ++py; + } + else + { + if(px->index > py->index) + ++py; + else + ++px; + } + } + return sum; +} + +double Kernel::k_function(const svm_node *x, const svm_node *y, + const svm_parameter& param) +{ + switch(param.kernel_type) + { + case LINEAR: + return dot(x,y); + case POLY: + return powi(param.gamma*dot(x,y)+param.coef0,param.degree); + case RBF: + { + double sum = 0; + while(x->index != -1 && y->index !=-1) + { + if(x->index == y->index) + { + double d = x->value - y->value; + sum += d*d; + ++x; + ++y; + } + else + { + if(x->index > y->index) + { + sum += y->value * y->value; + ++y; + } + else + { + sum += x->value * x->value; + ++x; + } + } + } + + while(x->index != -1) + { + sum += x->value * x->value; + ++x; + } + + while(y->index != -1) + { + sum += y->value * y->value; + ++y; + } + + return exp(-param.gamma*sum); + } + case SIGMOID: + return tanh(param.gamma*dot(x,y)+param.coef0); + case PRECOMPUTED: //x: test (validation), y: SV + return x[(int)(y->value)].value; + default: + return 0; // Unreachable + } +} + +// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918 +// Solves: +// +// min 0.5(\alpha^T Q \alpha) + p^T \alpha +// +// y^T \alpha = \delta +// y_i = +1 or -1 +// 0 <= alpha_i <= Cp for y_i = 1 +// 0 <= alpha_i <= Cn for y_i = -1 +// +// Given: +// +// Q, p, y, Cp, Cn, and an initial feasible point \alpha +// l is the size of vectors and matrices +// eps is the stopping tolerance +// +// solution will be put in \alpha, objective value will be put in obj +// +class Solver { +public: + Solver() {}; + virtual ~Solver() {}; + + struct SolutionInfo { + double obj; + double rho; + double upper_bound_p; + double upper_bound_n; + double r; // for Solver_NU + }; + + void Solve(int l, const QMatrix& Q, const double *p_, const schar *y_, + double *alpha_, double Cp, double Cn, double eps, + SolutionInfo* si, int shrinking); +protected: + int active_size; + schar *y; + double *G; // gradient of objective function + enum { LOWER_BOUND, UPPER_BOUND, FREE }; + char *alpha_status; // LOWER_BOUND, UPPER_BOUND, FREE + double *alpha; + const QMatrix *Q; + const double *QD; + double eps; + double Cp,Cn; + double *p; + int *active_set; + double *G_bar; // gradient, if we treat free variables as 0 + int l; + bool unshrink; // XXX + + double get_C(int i) + { + return (y[i] > 0)? Cp : Cn; + } + void update_alpha_status(int i) + { + if(alpha[i] >= get_C(i)) + alpha_status[i] = UPPER_BOUND; + else if(alpha[i] <= 0) + alpha_status[i] = LOWER_BOUND; + else alpha_status[i] = FREE; + } + bool is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; } + bool is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; } + bool is_free(int i) { return alpha_status[i] == FREE; } + void swap_index(int i, int j); + void reconstruct_gradient(); + virtual int select_working_set(int &i, int &j); + virtual double calculate_rho(); + virtual void do_shrinking(); +private: + bool be_shrunk(int i, double Gmax1, double Gmax2); +}; + +void Solver::swap_index(int i, int j) +{ + Q->swap_index(i,j); + swap(y[i],y[j]); + swap(G[i],G[j]); + swap(alpha_status[i],alpha_status[j]); + swap(alpha[i],alpha[j]); + swap(p[i],p[j]); + swap(active_set[i],active_set[j]); + swap(G_bar[i],G_bar[j]); +} + +void Solver::reconstruct_gradient() +{ + // reconstruct inactive elements of G from G_bar and free variables + + if(active_size == l) return; + + int i,j; + int nr_free = 0; + + for(j=active_size;j 2*active_size*(l-active_size)) + { + for(i=active_size;iget_Q(i,active_size); + for(j=0;jget_Q(i,l); + double alpha_i = alpha[i]; + for(j=active_size;jl = l; + this->Q = &Q; + QD=Q.get_QD(); + clone(p, p_,l); + clone(y, y_,l); + clone(alpha,alpha_,l); + this->Cp = Cp; + this->Cn = Cn; + this->eps = eps; + unshrink = false; + + // initialize alpha_status + { + alpha_status = new char[l]; + for(int i=0;iINT_MAX/100 ? INT_MAX : 100*l); + int counter = min(l,1000)+1; + + while(iter < max_iter) + { + // show progress and do shrinking + + if(--counter == 0) + { + counter = min(l,1000); + if(shrinking) do_shrinking(); + info("."); + } + + int i,j; + if(select_working_set(i,j)!=0) + { + // reconstruct the whole gradient + reconstruct_gradient(); + // reset active set size and check + active_size = l; + info("*"); + if(select_working_set(i,j)!=0) + break; + else + counter = 1; // do shrinking next iteration + } + + ++iter; + + // update alpha[i] and alpha[j], handle bounds carefully + + const Qfloat *Q_i = Q.get_Q(i,active_size); + const Qfloat *Q_j = Q.get_Q(j,active_size); + + double C_i = get_C(i); + double C_j = get_C(j); + + double old_alpha_i = alpha[i]; + double old_alpha_j = alpha[j]; + + if(y[i]!=y[j]) + { + double quad_coef = QD[i]+QD[j]+2*Q_i[j]; + if (quad_coef <= 0) + quad_coef = TAU; + double delta = (-G[i]-G[j])/quad_coef; + double diff = alpha[i] - alpha[j]; + alpha[i] += delta; + alpha[j] += delta; + + if(diff > 0) + { + if(alpha[j] < 0) + { + alpha[j] = 0; + alpha[i] = diff; + } + } + else + { + if(alpha[i] < 0) + { + alpha[i] = 0; + alpha[j] = -diff; + } + } + if(diff > C_i - C_j) + { + if(alpha[i] > C_i) + { + alpha[i] = C_i; + alpha[j] = C_i - diff; + } + } + else + { + if(alpha[j] > C_j) + { + alpha[j] = C_j; + alpha[i] = C_j + diff; + } + } + } + else + { + double quad_coef = QD[i]+QD[j]-2*Q_i[j]; + if (quad_coef <= 0) + quad_coef = TAU; + double delta = (G[i]-G[j])/quad_coef; + double sum = alpha[i] + alpha[j]; + alpha[i] -= delta; + alpha[j] += delta; + + if(sum > C_i) + { + if(alpha[i] > C_i) + { + alpha[i] = C_i; + alpha[j] = sum - C_i; + } + } + else + { + if(alpha[j] < 0) + { + alpha[j] = 0; + alpha[i] = sum; + } + } + if(sum > C_j) + { + if(alpha[j] > C_j) + { + alpha[j] = C_j; + alpha[i] = sum - C_j; + } + } + else + { + if(alpha[i] < 0) + { + alpha[i] = 0; + alpha[j] = sum; + } + } + } + + // update G + + double delta_alpha_i = alpha[i] - old_alpha_i; + double delta_alpha_j = alpha[j] - old_alpha_j; + + for(int k=0;k= max_iter) + { + if(active_size < l) + { + // reconstruct the whole gradient to calculate objective value + reconstruct_gradient(); + active_size = l; + info("*"); + } + fprintf(stderr,"\nWARNING: reaching max number of iterations\n"); + } + + // calculate rho + + si->rho = calculate_rho(); + + // calculate objective value + { + double v = 0; + int i; + for(i=0;iobj = v/2; + } + + // put back the solution + { + for(int i=0;iupper_bound_p = Cp; + si->upper_bound_n = Cn; + + info("\noptimization finished, #iter = %d\n",iter); + + delete[] p; + delete[] y; + delete[] alpha; + delete[] alpha_status; + delete[] active_set; + delete[] G; + delete[] G_bar; +} + +// return 1 if already optimal, return 0 otherwise +int Solver::select_working_set(int &out_i, int &out_j) +{ + // return i,j such that + // i: maximizes -y_i * grad(f)_i, i in I_up(\alpha) + // j: minimizes the decrease of obj value + // (if quadratic coefficeint <= 0, replace it with tau) + // -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha) + + double Gmax = -INF; + double Gmax2 = -INF; + int Gmax_idx = -1; + int Gmin_idx = -1; + double obj_diff_min = INF; + + for(int t=0;t= Gmax) + { + Gmax = -G[t]; + Gmax_idx = t; + } + } + else + { + if(!is_lower_bound(t)) + if(G[t] >= Gmax) + { + Gmax = G[t]; + Gmax_idx = t; + } + } + + int i = Gmax_idx; + const Qfloat *Q_i = NULL; + if(i != -1) // NULL Q_i not accessed: Gmax=-INF if i=-1 + Q_i = Q->get_Q(i,active_size); + + for(int j=0;j= Gmax2) + Gmax2 = G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[i]+QD[j]-2.0*y[i]*Q_i[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + else + { + if (!is_upper_bound(j)) + { + double grad_diff= Gmax-G[j]; + if (-G[j] >= Gmax2) + Gmax2 = -G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[i]+QD[j]+2.0*y[i]*Q_i[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + } + + if(Gmax+Gmax2 < eps || Gmin_idx == -1) + return 1; + + out_i = Gmax_idx; + out_j = Gmin_idx; + return 0; +} + +bool Solver::be_shrunk(int i, double Gmax1, double Gmax2) +{ + if(is_upper_bound(i)) + { + if(y[i]==+1) + return(-G[i] > Gmax1); + else + return(-G[i] > Gmax2); + } + else if(is_lower_bound(i)) + { + if(y[i]==+1) + return(G[i] > Gmax2); + else + return(G[i] > Gmax1); + } + else + return(false); +} + +void Solver::do_shrinking() +{ + int i; + double Gmax1 = -INF; // max { -y_i * grad(f)_i | i in I_up(\alpha) } + double Gmax2 = -INF; // max { y_i * grad(f)_i | i in I_low(\alpha) } + + // find maximal violating pair first + for(i=0;i= Gmax1) + Gmax1 = -G[i]; + } + if(!is_lower_bound(i)) + { + if(G[i] >= Gmax2) + Gmax2 = G[i]; + } + } + else + { + if(!is_upper_bound(i)) + { + if(-G[i] >= Gmax2) + Gmax2 = -G[i]; + } + if(!is_lower_bound(i)) + { + if(G[i] >= Gmax1) + Gmax1 = G[i]; + } + } + } + + if(unshrink == false && Gmax1 + Gmax2 <= eps*10) + { + unshrink = true; + reconstruct_gradient(); + active_size = l; + info("*"); + } + + for(i=0;i i) + { + if (!be_shrunk(active_size, Gmax1, Gmax2)) + { + swap_index(i,active_size); + break; + } + active_size--; + } + } +} + +double Solver::calculate_rho() +{ + double r; + int nr_free = 0; + double ub = INF, lb = -INF, sum_free = 0; + for(int i=0;i0) + r = sum_free/nr_free; + else + r = (ub+lb)/2; + + return r; +} + +// +// Solver for nu-svm classification and regression +// +// additional constraint: e^T \alpha = constant +// +class Solver_NU: public Solver +{ +public: + Solver_NU() {} + void Solve(int l, const QMatrix& Q, const double *p, const schar *y, + double *alpha, double Cp, double Cn, double eps, + SolutionInfo* si, int shrinking) + { + this->si = si; + Solver::Solve(l,Q,p,y,alpha,Cp,Cn,eps,si,shrinking); + } +private: + SolutionInfo *si; + int select_working_set(int &i, int &j); + double calculate_rho(); + bool be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4); + void do_shrinking(); +}; + +// return 1 if already optimal, return 0 otherwise +int Solver_NU::select_working_set(int &out_i, int &out_j) +{ + // return i,j such that y_i = y_j and + // i: maximizes -y_i * grad(f)_i, i in I_up(\alpha) + // j: minimizes the decrease of obj value + // (if quadratic coefficeint <= 0, replace it with tau) + // -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha) + + double Gmaxp = -INF; + double Gmaxp2 = -INF; + int Gmaxp_idx = -1; + + double Gmaxn = -INF; + double Gmaxn2 = -INF; + int Gmaxn_idx = -1; + + int Gmin_idx = -1; + double obj_diff_min = INF; + + for(int t=0;t= Gmaxp) + { + Gmaxp = -G[t]; + Gmaxp_idx = t; + } + } + else + { + if(!is_lower_bound(t)) + if(G[t] >= Gmaxn) + { + Gmaxn = G[t]; + Gmaxn_idx = t; + } + } + + int ip = Gmaxp_idx; + int in = Gmaxn_idx; + const Qfloat *Q_ip = NULL; + const Qfloat *Q_in = NULL; + if(ip != -1) // NULL Q_ip not accessed: Gmaxp=-INF if ip=-1 + Q_ip = Q->get_Q(ip,active_size); + if(in != -1) + Q_in = Q->get_Q(in,active_size); + + for(int j=0;j= Gmaxp2) + Gmaxp2 = G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[ip]+QD[j]-2*Q_ip[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + else + { + if (!is_upper_bound(j)) + { + double grad_diff=Gmaxn-G[j]; + if (-G[j] >= Gmaxn2) + Gmaxn2 = -G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[in]+QD[j]-2*Q_in[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + } + + if(max(Gmaxp+Gmaxp2,Gmaxn+Gmaxn2) < eps || Gmin_idx == -1) + return 1; + + if (y[Gmin_idx] == +1) + out_i = Gmaxp_idx; + else + out_i = Gmaxn_idx; + out_j = Gmin_idx; + + return 0; +} + +bool Solver_NU::be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4) +{ + if(is_upper_bound(i)) + { + if(y[i]==+1) + return(-G[i] > Gmax1); + else + return(-G[i] > Gmax4); + } + else if(is_lower_bound(i)) + { + if(y[i]==+1) + return(G[i] > Gmax2); + else + return(G[i] > Gmax3); + } + else + return(false); +} + +void Solver_NU::do_shrinking() +{ + double Gmax1 = -INF; // max { -y_i * grad(f)_i | y_i = +1, i in I_up(\alpha) } + double Gmax2 = -INF; // max { y_i * grad(f)_i | y_i = +1, i in I_low(\alpha) } + double Gmax3 = -INF; // max { -y_i * grad(f)_i | y_i = -1, i in I_up(\alpha) } + double Gmax4 = -INF; // max { y_i * grad(f)_i | y_i = -1, i in I_low(\alpha) } + + // find maximal violating pair first + int i; + for(i=0;i Gmax1) Gmax1 = -G[i]; + } + else if(-G[i] > Gmax4) Gmax4 = -G[i]; + } + if(!is_lower_bound(i)) + { + if(y[i]==+1) + { + if(G[i] > Gmax2) Gmax2 = G[i]; + } + else if(G[i] > Gmax3) Gmax3 = G[i]; + } + } + + if(unshrink == false && max(Gmax1+Gmax2,Gmax3+Gmax4) <= eps*10) + { + unshrink = true; + reconstruct_gradient(); + active_size = l; + } + + for(i=0;i i) + { + if (!be_shrunk(active_size, Gmax1, Gmax2, Gmax3, Gmax4)) + { + swap_index(i,active_size); + break; + } + active_size--; + } + } +} + +double Solver_NU::calculate_rho() +{ + int nr_free1 = 0,nr_free2 = 0; + double ub1 = INF, ub2 = INF; + double lb1 = -INF, lb2 = -INF; + double sum_free1 = 0, sum_free2 = 0; + + for(int i=0;i 0) + r1 = sum_free1/nr_free1; + else + r1 = (ub1+lb1)/2; + + if(nr_free2 > 0) + r2 = sum_free2/nr_free2; + else + r2 = (ub2+lb2)/2; + + si->r = (r1+r2)/2; + return (r1-r2)/2; +} + +// +// Q matrices for various formulations +// +class SVC_Q: public Kernel +{ +public: + SVC_Q(const svm_problem& prob, const svm_parameter& param, const schar *y_) + :Kernel(prob.l, prob.x, param) + { + clone(y,y_,prob.l); + cache = new Cache(prob.l,(long int)(param.cache_size*(1<<20))); + QD = new double[prob.l]; + for(int i=0;i*kernel_function)(i,i); + } + + Qfloat *get_Q(int i, int len) const + { + Qfloat *data; + int start, j; + if((start = cache->get_data(i,&data,len)) < len) + { + for(j=start;j*kernel_function)(i,j)); + } + return data; + } + + double *get_QD() const + { + return QD; + } + + void swap_index(int i, int j) const + { + cache->swap_index(i,j); + Kernel::swap_index(i,j); + swap(y[i],y[j]); + swap(QD[i],QD[j]); + } + + ~SVC_Q() + { + delete[] y; + delete cache; + delete[] QD; + } +private: + schar *y; + Cache *cache; + double *QD; +}; + +class ONE_CLASS_Q: public Kernel +{ +public: + ONE_CLASS_Q(const svm_problem& prob, const svm_parameter& param) + :Kernel(prob.l, prob.x, param) + { + cache = new Cache(prob.l,(long int)(param.cache_size*(1<<20))); + QD = new double[prob.l]; + for(int i=0;i*kernel_function)(i,i); + } + + Qfloat *get_Q(int i, int len) const + { + Qfloat *data; + int start, j; + if((start = cache->get_data(i,&data,len)) < len) + { + for(j=start;j*kernel_function)(i,j); + } + return data; + } + + double *get_QD() const + { + return QD; + } + + void swap_index(int i, int j) const + { + cache->swap_index(i,j); + Kernel::swap_index(i,j); + swap(QD[i],QD[j]); + } + + ~ONE_CLASS_Q() + { + delete cache; + delete[] QD; + } +private: + Cache *cache; + double *QD; +}; + +class SVR_Q: public Kernel +{ +public: + SVR_Q(const svm_problem& prob, const svm_parameter& param) + :Kernel(prob.l, prob.x, param) + { + l = prob.l; + cache = new Cache(l,(long int)(param.cache_size*(1<<20))); + QD = new double[2*l]; + sign = new schar[2*l]; + index = new int[2*l]; + for(int k=0;k*kernel_function)(k,k); + QD[k+l] = QD[k]; + } + buffer[0] = new Qfloat[2*l]; + buffer[1] = new Qfloat[2*l]; + next_buffer = 0; + } + + void swap_index(int i, int j) const + { + swap(sign[i],sign[j]); + swap(index[i],index[j]); + swap(QD[i],QD[j]); + } + + Qfloat *get_Q(int i, int len) const + { + Qfloat *data; + int j, real_i = index[i]; + if(cache->get_data(real_i,&data,l) < l) + { + for(j=0;j*kernel_function)(real_i,j); + } + + // reorder and copy + Qfloat *buf = buffer[next_buffer]; + next_buffer = 1 - next_buffer; + schar si = sign[i]; + for(j=0;jl; + double *minus_ones = new double[l]; + schar *y = new schar[l]; + + int i; + + for(i=0;iy[i] > 0) y[i] = +1; else y[i] = -1; + } + + Solver s; + s.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y, + alpha, Cp, Cn, param->eps, si, param->shrinking); + + double sum_alpha=0; + for(i=0;il)); + + for(i=0;il; + double nu = param->nu; + + schar *y = new schar[l]; + + for(i=0;iy[i]>0) + y[i] = +1; + else + y[i] = -1; + + double sum_pos = nu*l/2; + double sum_neg = nu*l/2; + + for(i=0;ieps, si, param->shrinking); + double r = si->r; + + info("C = %f\n",1/r); + + for(i=0;irho /= r; + si->obj /= (r*r); + si->upper_bound_p = 1/r; + si->upper_bound_n = 1/r; + + delete[] y; + delete[] zeros; +} + +static void solve_one_class( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) +{ + int l = prob->l; + double *zeros = new double[l]; + schar *ones = new schar[l]; + int i; + + int n = (int)(param->nu*prob->l); // # of alpha's at upper bound + + for(i=0;il) + alpha[n] = param->nu * prob->l - n; + for(i=n+1;ieps, si, param->shrinking); + + delete[] zeros; + delete[] ones; +} + +static void solve_epsilon_svr( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) +{ + int l = prob->l; + double *alpha2 = new double[2*l]; + double *linear_term = new double[2*l]; + schar *y = new schar[2*l]; + int i; + + for(i=0;ip - prob->y[i]; + y[i] = 1; + + alpha2[i+l] = 0; + linear_term[i+l] = param->p + prob->y[i]; + y[i+l] = -1; + } + + Solver s; + s.Solve(2*l, SVR_Q(*prob,*param), linear_term, y, + alpha2, param->C, param->C, param->eps, si, param->shrinking); + + double sum_alpha = 0; + for(i=0;iC*l)); + + delete[] alpha2; + delete[] linear_term; + delete[] y; +} + +static void solve_nu_svr( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) +{ + int l = prob->l; + double C = param->C; + double *alpha2 = new double[2*l]; + double *linear_term = new double[2*l]; + schar *y = new schar[2*l]; + int i; + + double sum = C * param->nu * l / 2; + for(i=0;iy[i]; + y[i] = 1; + + linear_term[i+l] = prob->y[i]; + y[i+l] = -1; + } + + Solver_NU s; + s.Solve(2*l, SVR_Q(*prob,*param), linear_term, y, + alpha2, C, C, param->eps, si, param->shrinking); + + info("epsilon = %f\n",-si->r); + + for(i=0;il); + Solver::SolutionInfo si; + switch(param->svm_type) + { + case C_SVC: + solve_c_svc(prob,param,alpha,&si,Cp,Cn); + break; + case NU_SVC: + solve_nu_svc(prob,param,alpha,&si); + break; + case ONE_CLASS: + solve_one_class(prob,param,alpha,&si); + break; + case EPSILON_SVR: + solve_epsilon_svr(prob,param,alpha,&si); + break; + case NU_SVR: + solve_nu_svr(prob,param,alpha,&si); + break; + } + + info("obj = %f, rho = %f\n",si.obj,si.rho); + + // output SVs + + int nSV = 0; + int nBSV = 0; + for(int i=0;il;i++) + { + if(fabs(alpha[i]) > 0) + { + ++nSV; + if(prob->y[i] > 0) + { + if(fabs(alpha[i]) >= si.upper_bound_p) + ++nBSV; + } + else + { + if(fabs(alpha[i]) >= si.upper_bound_n) + ++nBSV; + } + } + } + + info("nSV = %d, nBSV = %d\n",nSV,nBSV); + + decision_function f; + f.alpha = alpha; + f.rho = si.rho; + return f; +} + +// Platt's binary SVM Probablistic Output: an improvement from Lin et al. +static void sigmoid_train( + int l, const double *dec_values, const double *labels, + double& A, double& B) +{ + double prior1=0, prior0 = 0; + int i; + + for (i=0;i 0) prior1+=1; + else prior0+=1; + + int max_iter=100; // Maximal number of iterations + double min_step=1e-10; // Minimal step taken in line search + double sigma=1e-12; // For numerically strict PD of Hessian + double eps=1e-5; + double hiTarget=(prior1+1.0)/(prior1+2.0); + double loTarget=1/(prior0+2.0); + double *t=Malloc(double,l); + double fApB,p,q,h11,h22,h21,g1,g2,det,dA,dB,gd,stepsize; + double newA,newB,newf,d1,d2; + int iter; + + // Initial Point and Initial Fun Value + A=0.0; B=log((prior0+1.0)/(prior1+1.0)); + double fval = 0.0; + + for (i=0;i0) t[i]=hiTarget; + else t[i]=loTarget; + fApB = dec_values[i]*A+B; + if (fApB>=0) + fval += t[i]*fApB + log(1+exp(-fApB)); + else + fval += (t[i] - 1)*fApB +log(1+exp(fApB)); + } + for (iter=0;iter= 0) + { + p=exp(-fApB)/(1.0+exp(-fApB)); + q=1.0/(1.0+exp(-fApB)); + } + else + { + p=1.0/(1.0+exp(fApB)); + q=exp(fApB)/(1.0+exp(fApB)); + } + d2=p*q; + h11+=dec_values[i]*dec_values[i]*d2; + h22+=d2; + h21+=dec_values[i]*d2; + d1=t[i]-p; + g1+=dec_values[i]*d1; + g2+=d1; + } + + // Stopping Criteria + if (fabs(g1)= min_step) + { + newA = A + stepsize * dA; + newB = B + stepsize * dB; + + // New function value + newf = 0.0; + for (i=0;i= 0) + newf += t[i]*fApB + log(1+exp(-fApB)); + else + newf += (t[i] - 1)*fApB +log(1+exp(fApB)); + } + // Check sufficient decrease + if (newf=max_iter) + info("Reaching maximal iterations in two-class probability estimates\n"); + free(t); +} + +static double sigmoid_predict(double decision_value, double A, double B) +{ + double fApB = decision_value*A+B; + // 1-p used later; avoid catastrophic cancellation + if (fApB >= 0) + return exp(-fApB)/(1.0+exp(-fApB)); + else + return 1.0/(1+exp(fApB)) ; +} + +// Method 2 from the multiclass_prob paper by Wu, Lin, and Weng +static void multiclass_probability(int k, double **r, double *p) +{ + int t,j; + int iter = 0, max_iter=max(100,k); + double **Q=Malloc(double *,k); + double *Qp=Malloc(double,k); + double pQp, eps=0.005/k; + + for (t=0;tmax_error) + max_error=error; + } + if (max_error=max_iter) + info("Exceeds max_iter in multiclass_prob\n"); + for(t=0;tl); + double *dec_values = Malloc(double,prob->l); + + // random shuffle + for(i=0;il;i++) perm[i]=i; + for(i=0;il;i++) + { + int j = i+rand()%(prob->l-i); + swap(perm[i],perm[j]); + } + for(i=0;il/nr_fold; + int end = (i+1)*prob->l/nr_fold; + int j,k; + struct svm_problem subprob; + + subprob.l = prob->l-(end-begin); + subprob.x = Malloc(struct svm_node*,subprob.l); + subprob.y = Malloc(double,subprob.l); + + k=0; + for(j=0;jx[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + for(j=end;jl;j++) + { + subprob.x[k] = prob->x[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + int p_count=0,n_count=0; + for(j=0;j0) + p_count++; + else + n_count++; + + if(p_count==0 && n_count==0) + for(j=begin;j 0 && n_count == 0) + for(j=begin;j 0) + for(j=begin;jx[perm[j]],&(dec_values[perm[j]])); + // ensure +1 -1 order; reason not using CV subroutine + dec_values[perm[j]] *= submodel->label[0]; + } + svm_free_and_destroy_model(&submodel); + svm_destroy_param(&subparam); + } + free(subprob.x); + free(subprob.y); + } + sigmoid_train(prob->l,dec_values,prob->y,probA,probB); + free(dec_values); + free(perm); +} + +// Return parameter of a Laplace distribution +static double svm_svr_probability( + const svm_problem *prob, const svm_parameter *param) +{ + int i; + int nr_fold = 5; + double *ymv = Malloc(double,prob->l); + double mae = 0; + + svm_parameter newparam = *param; + newparam.probability = 0; + svm_cross_validation(prob,&newparam,nr_fold,ymv); + for(i=0;il;i++) + { + ymv[i]=prob->y[i]-ymv[i]; + mae += fabs(ymv[i]); + } + mae /= prob->l; + double std=sqrt(2*mae*mae); + int count=0; + mae=0; + for(i=0;il;i++) + if (fabs(ymv[i]) > 5*std) + count=count+1; + else + mae+=fabs(ymv[i]); + mae /= (prob->l-count); + info("Prob. model for test data: target value = predicted value + z,\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma= %g\n",mae); + free(ymv); + return mae; +} + + +// label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data +// perm, length l, must be allocated before calling this subroutine +static void svm_group_classes(const svm_problem *prob, int *nr_class_ret, int **label_ret, int **start_ret, int **count_ret, int *perm) +{ + int l = prob->l; + int max_nr_class = 16; + int nr_class = 0; + int *label = Malloc(int,max_nr_class); + int *count = Malloc(int,max_nr_class); + int *data_label = Malloc(int,l); + int i; + + for(i=0;iy[i]; + int j; + for(j=0;jparam = *param; + model->free_sv = 0; // XXX + + if(param->svm_type == ONE_CLASS || + param->svm_type == EPSILON_SVR || + param->svm_type == NU_SVR) + { + // regression or one-class-svm + model->nr_class = 2; + model->label = NULL; + model->nSV = NULL; + model->probA = NULL; model->probB = NULL; + model->sv_coef = Malloc(double *,1); + + if(param->probability && + (param->svm_type == EPSILON_SVR || + param->svm_type == NU_SVR)) + { + model->probA = Malloc(double,1); + model->probA[0] = svm_svr_probability(prob,param); + } + + decision_function f = svm_train_one(prob,param,0,0); + model->rho = Malloc(double,1); + model->rho[0] = f.rho; + + int nSV = 0; + int i; + for(i=0;il;i++) + if(fabs(f.alpha[i]) > 0) ++nSV; + model->l = nSV; + model->SV = Malloc(svm_node *,nSV); + model->sv_coef[0] = Malloc(double,nSV); + model->sv_indices = Malloc(int,nSV); + int j = 0; + for(i=0;il;i++) + if(fabs(f.alpha[i]) > 0) + { + model->SV[j] = prob->x[i]; + model->sv_coef[0][j] = f.alpha[i]; + model->sv_indices[j] = i+1; + ++j; + } + + free(f.alpha); + } + else + { + // classification + int l = prob->l; + int nr_class; + int *label = NULL; + int *start = NULL; + int *count = NULL; + int *perm = Malloc(int,l); + + // group training data of the same class + svm_group_classes(prob,&nr_class,&label,&start,&count,perm); + if(nr_class == 1) + info("WARNING: training data in only one class. See README for details.\n"); + + svm_node **x = Malloc(svm_node *,l); + int i; + for(i=0;ix[perm[i]]; + + // calculate weighted C + + double *weighted_C = Malloc(double, nr_class); + for(i=0;iC; + for(i=0;inr_weight;i++) + { + int j; + for(j=0;jweight_label[i] == label[j]) + break; + if(j == nr_class) + fprintf(stderr,"WARNING: class label %d specified in weight is not found\n", param->weight_label[i]); + else + weighted_C[j] *= param->weight[i]; + } + + // train k*(k-1)/2 models + + bool *nonzero = Malloc(bool,l); + for(i=0;iprobability) + { + probA=Malloc(double,nr_class*(nr_class-1)/2); + probB=Malloc(double,nr_class*(nr_class-1)/2); + } + + int p = 0; + for(i=0;iprobability) + svm_binary_svc_probability(&sub_prob,param,weighted_C[i],weighted_C[j],probA[p],probB[p]); + + f[p] = svm_train_one(&sub_prob,param,weighted_C[i],weighted_C[j]); + for(k=0;k 0) + nonzero[si+k] = true; + for(k=0;k 0) + nonzero[sj+k] = true; + free(sub_prob.x); + free(sub_prob.y); + ++p; + } + + // build output + + model->nr_class = nr_class; + + model->label = Malloc(int,nr_class); + for(i=0;ilabel[i] = label[i]; + + model->rho = Malloc(double,nr_class*(nr_class-1)/2); + for(i=0;irho[i] = f[i].rho; + + if(param->probability) + { + model->probA = Malloc(double,nr_class*(nr_class-1)/2); + model->probB = Malloc(double,nr_class*(nr_class-1)/2); + for(i=0;iprobA[i] = probA[i]; + model->probB[i] = probB[i]; + } + } + else + { + model->probA=NULL; + model->probB=NULL; + } + + int total_sv = 0; + int *nz_count = Malloc(int,nr_class); + model->nSV = Malloc(int,nr_class); + for(i=0;inSV[i] = nSV; + nz_count[i] = nSV; + } + + info("Total nSV = %d\n",total_sv); + + model->l = total_sv; + model->SV = Malloc(svm_node *,total_sv); + model->sv_indices = Malloc(int,total_sv); + p = 0; + for(i=0;iSV[p] = x[i]; + model->sv_indices[p++] = perm[i] + 1; + } + + int *nz_start = Malloc(int,nr_class); + nz_start[0] = 0; + for(i=1;isv_coef = Malloc(double *,nr_class-1); + for(i=0;isv_coef[i] = Malloc(double,total_sv); + + p = 0; + for(i=0;isv_coef[j-1][q++] = f[p].alpha[k]; + q = nz_start[j]; + for(k=0;ksv_coef[i][q++] = f[p].alpha[ci+k]; + ++p; + } + + free(label); + free(probA); + free(probB); + free(count); + free(perm); + free(start); + free(x); + free(weighted_C); + free(nonzero); + for(i=0;il; + int *perm = Malloc(int,l); + int nr_class; + if (nr_fold > l) + { + nr_fold = l; + fprintf(stderr,"WARNING: # folds > # data. Will use # folds = # data instead (i.e., leave-one-out cross validation)\n"); + } + fold_start = Malloc(int,nr_fold+1); + // stratified cv may not give leave-one-out rate + // Each class to l folds -> some folds may have zero elements + if((param->svm_type == C_SVC || + param->svm_type == NU_SVC) && nr_fold < l) + { + int *start = NULL; + int *label = NULL; + int *count = NULL; + svm_group_classes(prob,&nr_class,&label,&start,&count,perm); + + // random shuffle and then data grouped by fold using the array perm + int *fold_count = Malloc(int,nr_fold); + int c; + int *index = Malloc(int,l); + for(i=0;ix[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + for(j=end;jx[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + struct svm_model *submodel = svm_train(&subprob,param); + if(param->probability && + (param->svm_type == C_SVC || param->svm_type == NU_SVC)) + { + double *prob_estimates=Malloc(double,svm_get_nr_class(submodel)); + for(j=begin;jx[perm[j]],prob_estimates); + free(prob_estimates); + } + else + for(j=begin;jx[perm[j]]); + svm_free_and_destroy_model(&submodel); + free(subprob.x); + free(subprob.y); + } + free(fold_start); + free(perm); +} + + +int svm_get_svm_type(const svm_model *model) +{ + return model->param.svm_type; +} + +int svm_get_nr_class(const svm_model *model) +{ + return model->nr_class; +} + +void svm_get_labels(const svm_model *model, int* label) +{ + if (model->label != NULL) + for(int i=0;inr_class;i++) + label[i] = model->label[i]; +} + +void svm_get_sv_indices(const svm_model *model, int* indices) +{ + if (model->sv_indices != NULL) + for(int i=0;il;i++) + indices[i] = model->sv_indices[i]; +} + +int svm_get_nr_sv(const svm_model *model) +{ + return model->l; +} + +double svm_get_svr_probability(const svm_model *model) +{ + if ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) && + model->probA!=NULL) + return model->probA[0]; + else + { + fprintf(stderr,"Model doesn't contain information for SVR probability inference\n"); + return 0; + } +} + +double svm_predict_values(const svm_model *model, const svm_node *x, double* dec_values) +{ + int i; + if(model->param.svm_type == ONE_CLASS || + model->param.svm_type == EPSILON_SVR || + model->param.svm_type == NU_SVR) + { + double *sv_coef = model->sv_coef[0]; + double sum = 0; + for(i=0;il;i++) + sum += sv_coef[i] * Kernel::k_function(x,model->SV[i],model->param); + sum -= model->rho[0]; + *dec_values = sum; + + if(model->param.svm_type == ONE_CLASS) + return (sum>0)?1:-1; + else + return sum; + } + else + { + int nr_class = model->nr_class; + int l = model->l; + + double *kvalue = Malloc(double,l); + for(i=0;iSV[i],model->param); + + int *start = Malloc(int,nr_class); + start[0] = 0; + for(i=1;inSV[i-1]; + + int *vote = Malloc(int,nr_class); + for(i=0;inSV[i]; + int cj = model->nSV[j]; + + int k; + double *coef1 = model->sv_coef[j-1]; + double *coef2 = model->sv_coef[i]; + for(k=0;krho[p]; + dec_values[p] = sum; + + if(dec_values[p] > 0) + ++vote[i]; + else + ++vote[j]; + p++; + } + + int vote_max_idx = 0; + for(i=1;i vote[vote_max_idx]) + vote_max_idx = i; + + free(kvalue); + free(start); + free(vote); + return model->label[vote_max_idx]; + } +} + +double svm_predict(const svm_model *model, const svm_node *x) +{ + int nr_class = model->nr_class; + double *dec_values; + if(model->param.svm_type == ONE_CLASS || + model->param.svm_type == EPSILON_SVR || + model->param.svm_type == NU_SVR) + dec_values = Malloc(double, 1); + else + dec_values = Malloc(double, nr_class*(nr_class-1)/2); + double pred_result = svm_predict_values(model, x, dec_values); + free(dec_values); + return pred_result; +} + +double svm_predict_probability( + const svm_model *model, const svm_node *x, double *prob_estimates) +{ + if ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && + model->probA!=NULL && model->probB!=NULL) + { + int i; + int nr_class = model->nr_class; + double *dec_values = Malloc(double, nr_class*(nr_class-1)/2); + svm_predict_values(model, x, dec_values); + + double min_prob=1e-7; + double **pairwise_prob=Malloc(double *,nr_class); + for(i=0;iprobA[k],model->probB[k]),min_prob),1-min_prob); + pairwise_prob[j][i]=1-pairwise_prob[i][j]; + k++; + } + if (nr_class == 2) + { + prob_estimates[0] = pairwise_prob[0][1]; + prob_estimates[1] = pairwise_prob[1][0]; + } + else + multiclass_probability(nr_class,pairwise_prob,prob_estimates); + + int prob_max_idx = 0; + for(i=1;i prob_estimates[prob_max_idx]) + prob_max_idx = i; + for(i=0;ilabel[prob_max_idx]; + } + else + return svm_predict(model, x); +} + +static const char *svm_type_table[] = +{ + "c_svc","nu_svc","one_class","epsilon_svr","nu_svr",NULL +}; + +static const char *kernel_type_table[]= +{ + "linear","polynomial","rbf","sigmoid","precomputed",NULL +}; + +int svm_save_model(const char *model_file_name, const svm_model *model) +{ + FILE *fp = fopen(model_file_name,"w"); + if(fp==NULL) return -1; + + char *old_locale = setlocale(LC_ALL, NULL); + if (old_locale) { + old_locale = strdup(old_locale); + } + setlocale(LC_ALL, "C"); + + const svm_parameter& param = model->param; + + fprintf(fp,"svm_type %s\n", svm_type_table[param.svm_type]); + fprintf(fp,"kernel_type %s\n", kernel_type_table[param.kernel_type]); + + if(param.kernel_type == POLY) + fprintf(fp,"degree %d\n", param.degree); + + if(param.kernel_type == POLY || param.kernel_type == RBF || param.kernel_type == SIGMOID) + fprintf(fp,"gamma %g\n", param.gamma); + + if(param.kernel_type == POLY || param.kernel_type == SIGMOID) + fprintf(fp,"coef0 %g\n", param.coef0); + + int nr_class = model->nr_class; + int l = model->l; + fprintf(fp, "nr_class %d\n", nr_class); + fprintf(fp, "total_sv %d\n",l); + + { + fprintf(fp, "rho"); + for(int i=0;irho[i]); + fprintf(fp, "\n"); + } + + if(model->label) + { + fprintf(fp, "label"); + for(int i=0;ilabel[i]); + fprintf(fp, "\n"); + } + + if(model->probA) // regression has probA only + { + fprintf(fp, "probA"); + for(int i=0;iprobA[i]); + fprintf(fp, "\n"); + } + if(model->probB) + { + fprintf(fp, "probB"); + for(int i=0;iprobB[i]); + fprintf(fp, "\n"); + } + + if(model->nSV) + { + fprintf(fp, "nr_sv"); + for(int i=0;inSV[i]); + fprintf(fp, "\n"); + } + + fprintf(fp, "SV\n"); + const double * const *sv_coef = model->sv_coef; + const svm_node * const *SV = model->SV; + + for(int i=0;ivalue)); + else + while(p->index != -1) + { + fprintf(fp,"%d:%.8g ",p->index,p->value); + p++; + } + fprintf(fp, "\n"); + } + + setlocale(LC_ALL, old_locale); + free(old_locale); + + if (ferror(fp) != 0 || fclose(fp) != 0) return -1; + else return 0; +} + +static char *line = NULL; +static int max_line_len; + +static char* readline(FILE *input) +{ + int len; + + if(fgets(line,max_line_len,input) == NULL) + return NULL; + + while(strrchr(line,'\n') == NULL) + { + max_line_len *= 2; + line = (char *) realloc(line,max_line_len); + len = (int) strlen(line); + if(fgets(line+len,max_line_len-len,input) == NULL) + break; + } + return line; +} + +// +// FSCANF helps to handle fscanf failures. +// Its do-while block avoids the ambiguity when +// if (...) +// FSCANF(); +// is used +// +#define FSCANF(_stream, _format, _var) do{ if (fscanf(_stream, _format, _var) != 1) return false; }while(0) +bool read_model_header(FILE *fp, svm_model* model) +{ + svm_parameter& param = model->param; + // parameters for training only won't be assigned, but arrays are assigned as NULL for safety + param.nr_weight = 0; + param.weight_label = NULL; + param.weight = NULL; + + char cmd[81]; + while(1) + { + FSCANF(fp,"%80s",cmd); + + if(strcmp(cmd,"svm_type")==0) + { + FSCANF(fp,"%80s",cmd); + int i; + for(i=0;svm_type_table[i];i++) + { + if(strcmp(svm_type_table[i],cmd)==0) + { + param.svm_type=i; + break; + } + } + if(svm_type_table[i] == NULL) + { + fprintf(stderr,"unknown svm type.\n"); + return false; + } + } + else if(strcmp(cmd,"kernel_type")==0) + { + FSCANF(fp,"%80s",cmd); + int i; + for(i=0;kernel_type_table[i];i++) + { + if(strcmp(kernel_type_table[i],cmd)==0) + { + param.kernel_type=i; + break; + } + } + if(kernel_type_table[i] == NULL) + { + fprintf(stderr,"unknown kernel function.\n"); + return false; + } + } + else if(strcmp(cmd,"degree")==0) + FSCANF(fp,"%d",¶m.degree); + else if(strcmp(cmd,"gamma")==0) + FSCANF(fp,"%lf",¶m.gamma); + else if(strcmp(cmd,"coef0")==0) + FSCANF(fp,"%lf",¶m.coef0); + else if(strcmp(cmd,"nr_class")==0) + FSCANF(fp,"%d",&model->nr_class); + else if(strcmp(cmd,"total_sv")==0) + FSCANF(fp,"%d",&model->l); + else if(strcmp(cmd,"rho")==0) + { + int n = model->nr_class * (model->nr_class-1)/2; + model->rho = Malloc(double,n); + for(int i=0;irho[i]); + } + else if(strcmp(cmd,"label")==0) + { + int n = model->nr_class; + model->label = Malloc(int,n); + for(int i=0;ilabel[i]); + } + else if(strcmp(cmd,"probA")==0) + { + int n = model->nr_class * (model->nr_class-1)/2; + model->probA = Malloc(double,n); + for(int i=0;iprobA[i]); + } + else if(strcmp(cmd,"probB")==0) + { + int n = model->nr_class * (model->nr_class-1)/2; + model->probB = Malloc(double,n); + for(int i=0;iprobB[i]); + } + else if(strcmp(cmd,"nr_sv")==0) + { + int n = model->nr_class; + model->nSV = Malloc(int,n); + for(int i=0;inSV[i]); + } + else if(strcmp(cmd,"SV")==0) + { + while(1) + { + int c = getc(fp); + if(c==EOF || c=='\n') break; + } + break; + } + else + { + fprintf(stderr,"unknown text in model file: [%s]\n",cmd); + return false; + } + } + + return true; + +} + +svm_model *svm_load_model(const char *model_file_name) +{ + FILE *fp = fopen(model_file_name,"rb"); + if(fp==NULL) return NULL; + + char *old_locale = setlocale(LC_ALL, NULL); + if (old_locale) { + old_locale = strdup(old_locale); + } + setlocale(LC_ALL, "C"); + + // read parameters + + svm_model *model = Malloc(svm_model,1); + model->rho = NULL; + model->probA = NULL; + model->probB = NULL; + model->sv_indices = NULL; + model->label = NULL; + model->nSV = NULL; + + // read header + if (!read_model_header(fp, model)) + { + fprintf(stderr, "ERROR: fscanf failed to read model\n"); + setlocale(LC_ALL, old_locale); + free(old_locale); + free(model->rho); + free(model->label); + free(model->nSV); + free(model); + return NULL; + } + + // read sv_coef and SV + + int elements = 0; + long pos = ftell(fp); + + max_line_len = 1024; + line = Malloc(char,max_line_len); + char *p,*endptr,*idx,*val; + + while(readline(fp)!=NULL) + { + p = strtok(line,":"); + while(1) + { + p = strtok(NULL,":"); + if(p == NULL) + break; + ++elements; + } + } + elements += model->l; + + fseek(fp,pos,SEEK_SET); + + int m = model->nr_class - 1; + int l = model->l; + model->sv_coef = Malloc(double *,m); + int i; + for(i=0;isv_coef[i] = Malloc(double,l); + model->SV = Malloc(svm_node*,l); + svm_node *x_space = NULL; + if(l>0) x_space = Malloc(svm_node,elements); + + int j=0; + for(i=0;iSV[i] = &x_space[j]; + + p = strtok(line, " \t"); + model->sv_coef[0][i] = strtod(p,&endptr); + for(int k=1;ksv_coef[k][i] = strtod(p,&endptr); + } + + while(1) + { + idx = strtok(NULL, ":"); + val = strtok(NULL, " \t"); + + if(val == NULL) + break; + x_space[j].index = (int) strtol(idx,&endptr,10); + x_space[j].value = strtod(val,&endptr); + + ++j; + } + x_space[j++].index = -1; + } + free(line); + + setlocale(LC_ALL, old_locale); + free(old_locale); + + if (ferror(fp) != 0 || fclose(fp) != 0) + return NULL; + + model->free_sv = 1; // XXX + return model; +} + +void svm_free_model_content(svm_model* model_ptr) +{ + if(model_ptr->free_sv && model_ptr->l > 0 && model_ptr->SV != NULL) + free((void *)(model_ptr->SV[0])); + if(model_ptr->sv_coef) + { + for(int i=0;inr_class-1;i++) + free(model_ptr->sv_coef[i]); + } + + free(model_ptr->SV); + model_ptr->SV = NULL; + + free(model_ptr->sv_coef); + model_ptr->sv_coef = NULL; + + free(model_ptr->rho); + model_ptr->rho = NULL; + + free(model_ptr->label); + model_ptr->label= NULL; + + free(model_ptr->probA); + model_ptr->probA = NULL; + + free(model_ptr->probB); + model_ptr->probB= NULL; + + free(model_ptr->sv_indices); + model_ptr->sv_indices = NULL; + + free(model_ptr->nSV); + model_ptr->nSV = NULL; +} + +void svm_free_and_destroy_model(svm_model** model_ptr_ptr) +{ + if(model_ptr_ptr != NULL && *model_ptr_ptr != NULL) + { + svm_free_model_content(*model_ptr_ptr); + free(*model_ptr_ptr); + *model_ptr_ptr = NULL; + } +} + +void svm_destroy_param(svm_parameter* param) +{ + free(param->weight_label); + free(param->weight); +} + +const char *svm_check_parameter(const svm_problem *prob, const svm_parameter *param) +{ + // svm_type + + int svm_type = param->svm_type; + if(svm_type != C_SVC && + svm_type != NU_SVC && + svm_type != ONE_CLASS && + svm_type != EPSILON_SVR && + svm_type != NU_SVR) + return "unknown svm type"; + + // kernel_type, degree + + int kernel_type = param->kernel_type; + if(kernel_type != LINEAR && + kernel_type != POLY && + kernel_type != RBF && + kernel_type != SIGMOID && + kernel_type != PRECOMPUTED) + return "unknown kernel type"; + + if(param->gamma < 0) + return "gamma < 0"; + + if(param->degree < 0) + return "degree of polynomial kernel < 0"; + + // cache_size,eps,C,nu,p,shrinking + + if(param->cache_size <= 0) + return "cache_size <= 0"; + + if(param->eps <= 0) + return "eps <= 0"; + + if(svm_type == C_SVC || + svm_type == EPSILON_SVR || + svm_type == NU_SVR) + if(param->C <= 0) + return "C <= 0"; + + if(svm_type == NU_SVC || + svm_type == ONE_CLASS || + svm_type == NU_SVR) + if(param->nu <= 0 || param->nu > 1) + return "nu <= 0 or nu > 1"; + + if(svm_type == EPSILON_SVR) + if(param->p < 0) + return "p < 0"; + + if(param->shrinking != 0 && + param->shrinking != 1) + return "shrinking != 0 and shrinking != 1"; + + if(param->probability != 0 && + param->probability != 1) + return "probability != 0 and probability != 1"; + + if(param->probability == 1 && + svm_type == ONE_CLASS) + return "one-class SVM probability output not supported yet"; + + + // check whether nu-svc is feasible + + if(svm_type == NU_SVC) + { + int l = prob->l; + int max_nr_class = 16; + int nr_class = 0; + int *label = Malloc(int,max_nr_class); + int *count = Malloc(int,max_nr_class); + + int i; + for(i=0;iy[i]; + int j; + for(j=0;jnu*(n1+n2)/2 > min(n1,n2)) + { + free(label); + free(count); + return "specified nu is infeasible"; + } + } + } + free(label); + free(count); + } + + return NULL; +} + +int svm_check_probability_model(const svm_model *model) +{ + return ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && + model->probA!=NULL && model->probB!=NULL) || + ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) && + model->probA!=NULL); +} + +void svm_set_print_string_function(void (*print_func)(const char *)) +{ + if(print_func == NULL) + svm_print_string = &print_string_stdout; + else + svm_print_string = print_func; +} diff --git a/evaluation/svm.def b/evaluation/svm.def new file mode 100644 index 0000000..6bd1750 --- /dev/null +++ b/evaluation/svm.def @@ -0,0 +1,21 @@ +LIBRARY libsvm +EXPORTS + svm_train @1 + svm_cross_validation @2 + svm_save_model @3 + svm_load_model @4 + svm_get_svm_type @5 + svm_get_nr_class @6 + svm_get_labels @7 + svm_get_svr_probability @8 + svm_predict_values @9 + svm_predict @10 + svm_predict_probability @11 + svm_free_model_content @12 + svm_free_and_destroy_model @13 + svm_destroy_param @14 + svm_check_parameter @15 + svm_check_probability_model @16 + svm_set_print_string_function @17 + svm_get_sv_indices @18 + svm_get_nr_sv @19 diff --git a/evaluation/svm.h b/evaluation/svm.h new file mode 100644 index 0000000..9251ea8 --- /dev/null +++ b/evaluation/svm.h @@ -0,0 +1,104 @@ +#ifndef _LIBSVM_H +#define _LIBSVM_H + +#define LIBSVM_VERSION 322 + +#ifdef __cplusplus +extern "C" { +#endif + +extern int libsvm_version; + +struct svm_node +{ + int index; + double value; +}; + +struct svm_problem +{ + int l; + double *y; + struct svm_node **x; +}; + +enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */ +enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */ + +struct svm_parameter +{ + int svm_type; + int kernel_type; + int degree; /* for poly */ + double gamma; /* for poly/rbf/sigmoid */ + double coef0; /* for poly/sigmoid */ + + /* these are for training only */ + double cache_size; /* in MB */ + double eps; /* stopping criteria */ + double C; /* for C_SVC, EPSILON_SVR and NU_SVR */ + int nr_weight; /* for C_SVC */ + int *weight_label; /* for C_SVC */ + double* weight; /* for C_SVC */ + double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */ + double p; /* for EPSILON_SVR */ + int shrinking; /* use the shrinking heuristics */ + int probability; /* do probability estimates */ +}; + +// +// svm_model +// +struct svm_model +{ + struct svm_parameter param; /* parameter */ + int nr_class; /* number of classes, = 2 in regression/one class svm */ + int l; /* total #SV */ + struct svm_node **SV; /* SVs (SV[l]) */ + double **sv_coef; /* coefficients for SVs in decision functions (sv_coef[k-1][l]) */ + double *rho; /* constants in decision functions (rho[k*(k-1)/2]) */ + double *probA; /* pariwise probability information */ + double *probB; + int *sv_indices; /* sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set */ + + /* for classification only */ + + int *label; /* label of each class (label[k]) */ + int *nSV; /* number of SVs for each class (nSV[k]) */ + /* nSV[0] + nSV[1] + ... + nSV[k-1] = l */ + /* XXX */ + int free_sv; /* 1 if svm_model is created by svm_load_model*/ + /* 0 if svm_model is created by svm_train */ +}; + +struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param); +void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target); + +int svm_save_model(const char *model_file_name, const struct svm_model *model); +struct svm_model *svm_load_model(const char *model_file_name); + +int svm_get_svm_type(const struct svm_model *model); +int svm_get_nr_class(const struct svm_model *model); +void svm_get_labels(const struct svm_model *model, int *label); +void svm_get_sv_indices(const struct svm_model *model, int *sv_indices); +int svm_get_nr_sv(const struct svm_model *model); +double svm_get_svr_probability(const struct svm_model *model); + +double svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values); +double svm_predict(const struct svm_model *model, const struct svm_node *x); +double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates); + +void svm_free_model_content(struct svm_model *model_ptr); +void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr); +void svm_destroy_param(struct svm_parameter *param); + +const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param); +int svm_check_probability_model(const struct svm_model *model); + +void svm_set_print_string_function(void (*print_func)(const char *)); + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBSVM_H */ diff --git a/evaluation/svm.o b/evaluation/svm.o new file mode 100644 index 0000000000000000000000000000000000000000..76cb84cdfa0cc179cd63c0eb2ba225a10104267a GIT binary patch literal 202264 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 f(}Egvmlm*TwIv2(#e~