summaryrefslogtreecommitdiff
path: root/docs/demo
diff options
context:
space:
mode:
Diffstat (limited to 'docs/demo')
-rw-r--r--docs/demo/custom.css161
-rw-r--r--docs/demo/index.html45
-rw-r--r--docs/demo/libwabt.js43
-rw-r--r--docs/demo/third_party/codemirror/LICENSE21
-rw-r--r--docs/demo/third_party/codemirror/codemirror.css340
-rw-r--r--docs/demo/third_party/codemirror/codemirror.js9331
-rw-r--r--docs/demo/third_party/codemirror/javascript.js847
-rw-r--r--docs/demo/third_party/codemirror/simple-mode.js213
-rw-r--r--docs/demo/third_party/split/horizontal.pngbin0 -> 104 bytes
-rw-r--r--docs/demo/third_party/split/split.min.js5
-rw-r--r--docs/demo/third_party/split/vertical.pngbin0 -> 91 bytes
-rw-r--r--docs/demo/wasm2wat/demo.js109
-rw-r--r--docs/demo/wasm2wat/examples.js55
-rw-r--r--docs/demo/wasm2wat/index.html73
-rw-r--r--docs/demo/wast-mode.js37
-rw-r--r--docs/demo/wat2wasm/demo.js180
-rw-r--r--docs/demo/wat2wasm/examples.js183
-rw-r--r--docs/demo/wat2wasm/index.html94
18 files changed, 11737 insertions, 0 deletions
diff --git a/docs/demo/custom.css b/docs/demo/custom.css
new file mode 100644
index 00000000..88fc0a2b
--- /dev/null
+++ b/docs/demo/custom.css
@@ -0,0 +1,161 @@
+html {
+ font-size: 80%;
+ line-height: 1.3;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: sans-serif;
+ font-size: 1rem;
+ line-height: 1.3125rem;
+ margin: 0;
+}
+
+h1 {
+ font-size: 2.375rem;
+ line-height: 2.625rem;
+ margin-top: 1.3125rem;
+ margin-bottom: 1.3125rem;
+}
+
+h2 {
+ font-size: 1.75rem;
+ line-height: 2.625rem;
+ margin-top: 1.3125rem;
+ margin-bottom: 1.3125rem;
+}
+
+h3 {
+ font-size: 1.3125rem;
+ line-height: 1.3125rem;
+ margin-top: 1.3125rem;
+ margin-bottom: 0rem;
+}
+
+h4 {
+ font-size: 1rem;
+ line-height: 1.3125rem;
+ margin-top: 1.3125rem;
+ margin-bottom: 0rem;
+}
+
+h5 {
+ font-size: 1rem;
+ line-height: 1.3125rem;
+ margin-top: 1.3125rem;
+ margin-bottom: 0rem;
+}
+
+p, ul {
+ padding-left: 0;
+ margin-top: 0rem;
+ margin-bottom: 1.3125rem;
+}
+
+ul ul, ol ol, ul ol, ol ul {
+ margin-top: 0rem;
+ margin-bottom: 0rem;
+}
+
+pre {
+ margin: 0;
+}
+
+.right {
+ float: right;
+ white-space: nowrap;
+}
+
+.hidden {
+ display: none;
+}
+
+#split-grid {
+ position: absolute;
+ height: 100%;
+ left: 0;
+ right: 0;
+ top: 0;
+}
+
+.CodeMirror, .output {
+ position: absolute;
+ height: calc(100% - 2.625rem);
+ top: 2.625rem;
+ left: 0;
+ right: 0;
+}
+
+.output {
+ padding: 0.3125rem;
+ overflow: auto;
+}
+
+.toolbar {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ color: #555;
+ background-color: #eee;
+ z-index: 9;
+ height: 2.625rem;
+ line-height: 2rem;
+ padding: 0.3125rem 0.3125rem 0;
+ box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3);
+}
+
+.split-horizontal, .gutter-horizontal {
+ height: 100%;
+ float: left;
+}
+
+.gutter-horizontal {
+ cursor: ew-resize;
+ background-image: url('third_party/split/vertical.png');
+}
+
+.gutter-vertical {
+ cursor: ns-resize;
+ background-image: url('third_party/split/horizontal.png');
+}
+
+.gutter {
+ touch-action: none;
+ user-select: none;
+ background-color: #ddd;
+ background-repeat: no-repeat;
+ background-position: 50%;
+ z-index: 0;
+}
+
+.split {
+ position: relative;
+ overflow: hidden;
+}
+
+
+body {
+ display: flex;
+ min-height: 100vh;
+ flex-direction: column;
+}
+
+main {
+ flex: 1;
+ position: relative;
+}
+
+header {
+ padding: 0 1em;
+ z-index: 10;
+ box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3);
+}
+
+ul {
+ margin: 1em;
+ list-style: none;
+}
diff --git a/docs/demo/index.html b/docs/demo/index.html
new file mode 100644
index 00000000..fea01a2c
--- /dev/null
+++ b/docs/demo/index.html
@@ -0,0 +1,45 @@
+<!--
+ Copyright 2017 WebAssembly Community Group participants
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+ <title>wabt demos</title>
+ <link href="custom.css" rel="stylesheet">
+</head>
+<body>
+ <header>
+ <h1>wabt demos</h1>
+ </header>
+ <main>
+ <ul>
+ <li>
+ <a href="wat2wasm/index.html">wat2wasm demo</a>
+ <p>
+ Example showing converting text to binary.
+ </p>
+ </li>
+ <li>
+ <a href="wasm2wat/index.html">wasm2wat demo</a>
+ <p>
+ Example showing converting binary to text.
+ </p>
+ </li>
+ </ul>
+ </main>
+</body>
+</html>
diff --git a/docs/demo/libwabt.js b/docs/demo/libwabt.js
new file mode 100644
index 00000000..4a767810
--- /dev/null
+++ b/docs/demo/libwabt.js
@@ -0,0 +1,43 @@
+
+var WabtModule = (function() {
+ var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
+ return (
+function(WabtModule) {
+ WabtModule = WabtModule || {};
+
+var Module=typeof WabtModule!=="undefined"?WabtModule:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);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};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}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){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}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);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{var success=_emscripten_resize_heap(end);if(!success)return 0}return ret}function getNativeTypeSize(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 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var jsCallStartIndex=1;var functionPointers=new Array(10);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var GLOBAL_BASE=8;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);ret=convertReturnValue(ret);if(stack!==0)stackRestore(stack);return ret}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?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)}}var ALLOC_NONE=3;function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&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(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}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=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 len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function demangle(func){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:y+" ["+x+"]"})}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 alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STACK_BASE=354992,DYNAMIC_BASE=5597872,DYNAMICTOP_PTR=354736;var TOTAL_STACK=5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}Module["buffer"]=buffer}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){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)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}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["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}__ATINIT__.push({func:function(){___emscripten_environ_constructor()}});memoryInitializer="data:application/octet-stream;base64,AAAAAAAAAAAyCgUAwZkEAFAKBQB1CQUAZgkFANkJBQBEkAQAhgkFALEJBQCUCQUAzQkFAFQJBQDGDAUAbwoFACsKBQAOCgUA/QkFAAAAAAAAAAAAAAAAAEGSBABbkgQAc5IEAIqSBAChkgQAuZIEANCSBADmkgQA/pIEABmTBAAzkwQASpMEAGaTBAAAAAAAAAAAAAAAAAD3kwQAApQEAAyUBAAdlAQAKZQEADaUBABBlAQASJQEAE6UBABRlAQAVpQEAF6UBABmlAQAa5QEAHiUBACAlAQAhpQEAI6UBACTlAQAnZQEAKeUBACqlAQAr5QEALiUBADBlAQAypQEAM+UBADalAQA45QEAO6UBAD5lAQABJUEAA+VBAATlQQAHZUEACWVBAAtlQQANJUEAD+VBABSlQQAWZUEAGSVBABylQQAfJUEAIKVBACMlQQAlZUEAJ+VBAColQQAspUEALyVBADFlQQAzZUEANOVBADXlQQA3ZUEAAoMBQDA////wP///8D////A////AAAAAAAAAAAAAAAAAAAAAJgLBQDA////wP///8D////A////AAAAAAAAAAABAAAAAQAAACoNBQDA////wP///8D////A////AAAAAAAAAAACAAAAAgAAABoOBQDA////wP///8D////A////AAAAAAAAAAADAAAAAwAAAB8OBQDA////wP///8D////A////AAAAAAAAAAAEAAAABAAAADkLBQDA////wP///8D////A////AAAAAAAAAAAFAAAABQAAADIOBQDA////wP///8D////A////AAAAAAAAAAAGAAAABgAAAAkLBQDA////wP///8D////A////AAAAAAAAAAAHAAAABwAAAJIOBQDA////wP///8D////A////AAAAAAAAAAAIAAAACAAAAIoOBQDA////wP///8D////A////AAAAAAAAAAAJAAAACQAAADkNBQDA////wP///8D////A////AAAAAAAAAAAKAAAACgAAAD4LBQDA////wP///8D////A////AAAAAAAAAAALAAAACwAAADANBQDA////wP///8D////A////AAAAAAAAAAAMAAAADAAAADMNBQDA////wP///8D////A////AAAAAAAAAAANAAAADQAAAHkNBQDA////wP///8D////A////AAAAAAAAAAAOAAAADgAAAJgOBQDA////wP///8D////A////AAAAAAAAAAAPAAAADwAAAL8NBQDA////wP///8D////A////AAAAAAAAAAAQAAAAEAAAAMQNBQDA////wP///8D////A////AAAAAAAAAAARAAAAEQAAANINBQDA////wP///8D////A////AAAAAAAAAAASAAAAEgAAAN4NBQDA////wP///8D////A////AAAAAAAAAAATAAAAEwAAAP0NBQDA////wP///8D////A////AAAAAAAAAAAaAAAAGgAAAJ8OBQDA////wP///8D////A////AAAAAAAAAAAbAAAAGwAAAFILBQDA////wP///8D////A////AAAAAAAAAAAgAAAAIAAAAEsOBQDA////wP///8D////A////AAAAAAAAAAAhAAAAIQAAAFUOBQDA////wP///8D////A////AAAAAAAAAAAiAAAAIgAAAEILBQDA////wP///8D////A////AAAAAAAAAAAjAAAAIwAAAEAOBQDA////wP///8D////A////AAAAAAAAAAAkAAAAJAAAAH6lBAD//////////8D////A////BAAAAAAAAAAoAAAAKAAAAHWlBAD+/////////8D////A////CAAAAAAAAAApAAAAKQAAAGylBAD9/////////8D////A////BAAAAAAAAAAqAAAAKgAAAGOlBAD8/////////8D////A////CAAAAAAAAAArAAAAKwAAAN2qBAD//////////8D////A////AQAAAAAAAAAsAAAALAAAAPWqBAD//////////8D////A////AQAAAAAAAAAtAAAALQAAALilBAD//////////8D////A////AgAAAAAAAAAuAAAALgAAANulBAD//////////8D////A////AgAAAAAAAAAvAAAALwAAANGqBAD+/////////8D////A////AQAAAAAAAAAwAAAAMAAAAOmqBAD+/////////8D////A////AQAAAAAAAAAxAAAAMQAAAKulBAD+/////////8D////A////AgAAAAAAAAAyAAAAMgAAAM6lBAD+/////////8D////A////AgAAAAAAAAAzAAAAMwAAAEKoBAD+/////////8D////A////BAAAAAAAAAA0AAAANAAAAFmoBAD+/////////8D////A////BAAAAAAAAAA1AAAANQAAACmlBADA///////////////A////BAAAAAAAAAA2AAAANgAAAB+lBADA//////////7////A////CAAAAAAAAAA3AAAANwAAABWlBADA//////////3////A////BAAAAAAAAAA4AAAAOAAAAAulBADA//////////z////A////CAAAAAAAAAA5AAAAOQAAAJ6qBADA///////////////A////AQAAAAAAAAA6AAAAOgAAAIesBADA///////////////A////AgAAAAAAAAA7AAAAOwAAAJOqBADA//////////7////A////AQAAAAAAAAA8AAAAPAAAAHusBADA//////////7////A////AgAAAAAAAAA9AAAAPQAAADOlBADA//////////7////A////BAAAAAAAAAA+AAAAPgAAAIwLBQD/////wP///8D////A////AAAAAAAAAAA/AAAAPwAAAHQLBQD//////////8D////A////AAAAAAAAAABAAAAAQAAAANmkBAD/////wP///8D////A////AAAAAAAAAABBAAAAQQAAAM+kBAD+////wP///8D////A////AAAAAAAAAABCAAAAQgAAAMWkBAD9////wP///8D////A////AAAAAAAAAABDAAAAQwAAALukBAD8////wP///8D////A////AAAAAAAAAABEAAAARAAAAO+rBAD//////////8D////A////AAAAAAAAAABFAAAARQAAAPe0BAD////////////////A////AAAAAAAAAABGAAAARgAAAF6kBAD////////////////A////AAAAAAAAAABHAAAARwAAAJKjBAD////////////////A////AAAAAAAAAABIAAAASAAAAKSjBAD////////////////A////AAAAAAAAAABJAAAASQAAAPGtBAD////////////////A////AAAAAAAAAABKAAAASgAAAA2uBAD////////////////A////AAAAAAAAAABLAAAASwAAALajBAD////////////////A////AAAAAAAAAABMAAAATAAAAMijBAD////////////////A////AAAAAAAAAABNAAAATQAAAB+uBAD////////////////A////AAAAAAAAAABOAAAATgAAADGuBAD////////////////A////AAAAAAAAAABPAAAATwAAAOerBAD//////v///8D////A////AAAAAAAAAABQAAAAUAAAAPC0BAD//////v////7////A////AAAAAAAAAABRAAAAUQAAAFekBAD//////v////7////A////AAAAAAAAAABSAAAAUgAAAImjBAD//////v////7////A////AAAAAAAAAABTAAAAUwAAAJujBAD//////v////7////A////AAAAAAAAAABUAAAAVAAAAOitBAD//////v////7////A////AAAAAAAAAABVAAAAVQAAAASuBAD//////v////7////A////AAAAAAAAAABWAAAAVgAAAK2jBAD//////v////7////A////AAAAAAAAAABXAAAAVwAAAL+jBAD//////v////7////A////AAAAAAAAAABYAAAAWAAAABauBAD//////v////7////A////AAAAAAAAAABZAAAAWQAAACiuBAD//////v////7////A////AAAAAAAAAABaAAAAWgAAANq0BAD//////f////3////A////AAAAAAAAAABbAAAAWwAAAFCkBAD//////f////3////A////AAAAAAAAAABcAAAAXAAAAESjBAD//////f////3////A////AAAAAAAAAABdAAAAXQAAAA6tBAD//////f////3////A////AAAAAAAAAABeAAAAXgAAAFKjBAD//////f////3////A////AAAAAAAAAABfAAAAXwAAAG2tBAD//////f////3////A////AAAAAAAAAABgAAAAYAAAANO0BAD//////P////z////A////AAAAAAAAAABhAAAAYQAAAEmkBAD//////P////z////A////AAAAAAAAAABiAAAAYgAAAD2jBAD//////P////z////A////AAAAAAAAAABjAAAAYwAAAAetBAD//////P////z////A////AAAAAAAAAABkAAAAZAAAAEujBAD//////P////z////A////AAAAAAAAAABlAAAAZQAAAGatBAD//////P////z////A////AAAAAAAAAABmAAAAZgAAAG2kBAD//////////8D////A////AAAAAAAAAABnAAAAZwAAAO2jBAD//////////8D////A////AAAAAAAAAABoAAAAaAAAAMG1BAD//////////8D////A////AAAAAAAAAABpAAAAaQAAACGkBAD////////////////A////AAAAAAAAAABqAAAAagAAAIGjBAD////////////////A////AAAAAAAAAABrAAAAawAAAKGkBAD////////////////A////AAAAAAAAAABsAAAAbAAAAO2kBAD////////////////A////AAAAAAAAAABtAAAAbQAAAAGlBAD////////////////A////AAAAAAAAAABuAAAAbgAAANujBAD////////////////A////AAAAAAAAAABvAAAAbwAAAP+jBAD////////////////A////AAAAAAAAAABwAAAAcAAAADGkBAD////////////////A////AAAAAAAAAABxAAAAcQAAAP6rBAD////////////////A////AAAAAAAAAAByAAAAcgAAADiwBAD////////////////A////AAAAAAAAAABzAAAAcwAAACavBAD////////////////A////AAAAAAAAAAB0AAAAdAAAANmuBAD////////////////A////AAAAAAAAAAB1AAAAdQAAAO2uBAD////////////////A////AAAAAAAAAAB2AAAAdgAAAEilBAD////////////////A////AAAAAAAAAAB3AAAAdwAAAFqlBAD////////////////A////AAAAAAAAAAB4AAAAeAAAAGWkBAD+/////v///8D////A////AAAAAAAAAAB5AAAAeQAAAOWjBAD+/////v///8D////A////AAAAAAAAAAB6AAAAegAAALa1BAD+/////v///8D////A////AAAAAAAAAAB7AAAAewAAABmkBAD+/////v////7////A////AAAAAAAAAAB8AAAAfAAAAHmjBAD+/////v////7////A////AAAAAAAAAAB9AAAAfQAAAJmkBAD+/////v////7////A////AAAAAAAAAAB+AAAAfgAAAOOkBAD+/////v////7////A////AAAAAAAAAAB/AAAAfwAAAPekBAD+/////v////7////A////AAAAAAAAAACAAAAAgAAAANGjBAD+/////v////7////A////AAAAAAAAAACBAAAAgQAAAPWjBAD+/////v////7////A////AAAAAAAAAACCAAAAggAAACmkBAD+/////v////7////A////AAAAAAAAAACDAAAAgwAAAPerBAD+/////v////7////A////AAAAAAAAAACEAAAAhAAAADCwBAD+/////v////7////A////AAAAAAAAAACFAAAAhQAAAB6vBAD+/////v////7////A////AAAAAAAAAACGAAAAhgAAAM+uBAD+/////v////7////A////AAAAAAAAAACHAAAAhwAAAOOuBAD+/////v////7////A////AAAAAAAAAACIAAAAiAAAAD+lBAD+/////v////7////A////AAAAAAAAAACJAAAAiQAAAFGlBAD+/////v////7////A////AAAAAAAAAACKAAAAigAAAGGjBAD9/////f////3////A////AAAAAAAAAACLAAAAiwAAAAqwBAD9/////f////3////A////AAAAAAAAAACMAAAAjAAAALKkBAD9/////f////3////A////AAAAAAAAAACNAAAAjQAAAFytBAD9/////f////3////A////AAAAAAAAAACOAAAAjgAAAH+kBAD9/////f////3////A////AAAAAAAAAACPAAAAjwAAAP2lBAD9/////f////3////A////AAAAAAAAAACQAAAAkAAAAGisBAD9/////f////3////A////AAAAAAAAAACRAAAAkQAAABGkBAD9/////f////3////A////AAAAAAAAAACSAAAAkgAAAHGjBAD9/////f////3////A////AAAAAAAAAACTAAAAkwAAAJGkBAD9/////f////3////A////AAAAAAAAAACUAAAAlAAAAJmlBAD9/////f////3////A////AAAAAAAAAACVAAAAlQAAAEGkBAD9/////f////3////A////AAAAAAAAAACWAAAAlgAAAOSzBAD9/////f////3////A////AAAAAAAAAACXAAAAlwAAAGe5BAD9/////f////3////A////AAAAAAAAAACYAAAAmAAAAFmjBAD8/////P////z////A////AAAAAAAAAACZAAAAmQAAAAKwBAD8/////P////z////A////AAAAAAAAAACaAAAAmgAAAKmkBAD8/////P////z////A////AAAAAAAAAACbAAAAmwAAAFKtBAD8/////P////z////A////AAAAAAAAAACcAAAAnAAAAHWkBAD8/////P////z////A////AAAAAAAAAACdAAAAnQAAAPGlBAD8/////P////z////A////AAAAAAAAAACeAAAAngAAAF+sBAD8/////P////z////A////AAAAAAAAAACfAAAAnwAAAAmkBAD8/////P////z////A////AAAAAAAAAACgAAAAoAAAAGmjBAD8/////P////z////A////AAAAAAAAAAChAAAAoQAAAImkBAD8/////P////z////A////AAAAAAAAAACiAAAAogAAAJGlBAD8/////P////z////A////AAAAAAAAAACjAAAAowAAADmkBAD8/////P////z////A////AAAAAAAAAACkAAAApAAAANyzBAD8/////P////z////A////AAAAAAAAAAClAAAApQAAAFq5BAD8/////P////z////A////AAAAAAAAAACmAAAApgAAACG3BAD//////v///8D////A////AAAAAAAAAACnAAAApwAAACinBAD//////f///8D////A////AAAAAAAAAACoAAAAqAAAAEinBAD//////f///8D////A////AAAAAAAAAACpAAAAqQAAAOaoBAD//////P///8D////A////AAAAAAAAAACqAAAAqgAAAAapBAD//////P///8D////A////AAAAAAAAAACrAAAAqwAAAEGvBAD+/////////8D////A////AAAAAAAAAACsAAAArAAAAFKvBAD+/////////8D////A////AAAAAAAAAACtAAAArQAAABinBAD+/////f///8D////A////AAAAAAAAAACuAAAArgAAADinBAD+/////f///8D////A////AAAAAAAAAACvAAAArwAAANaoBAD+/////P///8D////A////AAAAAAAAAACwAAAAsAAAAPaoBAD+/////P///8D////A////AAAAAAAAAACxAAAAsQAAAIGqBAD9/////////8D////A////AAAAAAAAAACyAAAAsgAAAHGrBAD9/////////8D////A////AAAAAAAAAACzAAAAswAAABOrBAD9/////v///8D////A////AAAAAAAAAAC0AAAAtAAAAKWsBAD9/////v///8D////A////AAAAAAAAAAC1AAAAtQAAABapBAD9/////P///8D////A////AAAAAAAAAAC2AAAAtgAAAG+qBAD8/////////8D////A////AAAAAAAAAAC3AAAAtwAAAF+rBAD8/////////8D////A////AAAAAAAAAAC4AAAAuAAAAAGrBAD8/////v///8D////A////AAAAAAAAAAC5AAAAuQAAAJOsBAD8/////v///8D////A////AAAAAAAAAAC6AAAAugAAAN+yBAD8/////f///8D////A////AAAAAAAAAAC7AAAAuwAAALi2BAD//////f///8D////A////AAAAAAAAAAC8AAAAvAAAAA23BAD+/////P///8D////A////AAAAAAAAAAC9AAAAvQAAAI+xBAD9/////////8D////A////AAAAAAAAAAC+AAAAvgAAAO+yBAD8/////v///8D////A////AAAAAAAAAAC/AAAAvwAAACaxBAD//////////8D////A////AAAAAAAAAADAAAAAwAAAACGwBAD//////////8D////A////AAAAAAAAAADBAAAAwQAAABixBAD+/////v///8D////A////AAAAAAAAAADCAAAAwgAAABKwBAD+/////v///8D////A////AAAAAAAAAADDAAAAwwAAAAOvBAD+/////v///8D////A////AAAAAAAAAADEAAAAxAAAAOyVBADA////wP///8D////A////AAAAAAAAAADgAAAA4AAAAPOVBADA////wP///8D////A////AAAAAAAAAADhAAAA4QAAAP2VBADA////wP///8D////A////AAAAAAAAAADiAAAA4gAAAO8JBQDA////wP///8D////A////AAAAAAAAAADjAAAA4wAAAAeWBADA////wP///8D////A////AAAAAAAAAADkAAAA5AAAABmsBAD//////f///8D////A////AAAAAPwAAAAAAAAAAPwAAEGsBAD//////f///8D////A////AAAAAPwAAAABAAAAAfwAAJmwBAD//////P///8D////A////AAAAAPwAAAACAAAAAvwAAMGwBAD//////P///8D////A////AAAAAPwAAAADAAAAA/wAAAWsBAD+/////f///8D////A////AAAAAPwAAAAEAAAABPwAAC2sBAD+/////f///8D////A////AAAAAPwAAAAFAAAABfwAAIWwBAD+/////P///8D////A////AAAAAPwAAAAGAAAABvwAAK2wBAD+/////P///8D////A////AAAAAPwAAAAHAAAAB/wAAIALBQDA////////////////////AAAAAPwAAAAIAAAACPwAACULBQDA////wP///8D////A////AAAAAPwAAAAJAAAACfwAAFwLBQDA////////////////////AAAAAPwAAAAKAAAACvwAAGgLBQDA////////////////////AAAAAPwAAAALAAAAC/wAAOYLBQDA////////////////////AAAAAPwAAAAMAAAADPwAAC8LBQDA////wP///8D////A////AAAAAPwAAAANAAAADfwAANsLBQDA////////////////////AAAAAPwAAAAOAAAADvwAAF8OBQDA////wP///8D////A////AAAAAAAAAAAlAAAAJQAAAGkOBQDA////wP///8D////A////AAAAAAAAAAAmAAAAJgAAAHMOBQDA////wP///8D////A////AAAAAPwAAAAPAAAAD/wAAPELBQDA////wP///8D////A////AAAAAPwAAAAQAAAAEPwAAKULBQDA////wP///8D////A////AAAAAAAAAADQAAAA0AAAAH4OBQDA////wP///8D////A////AAAAAAAAAADRAAAA0QAAAJwLBQDA////wP///8D////A////AAAAAAAAAADSAAAA0gAAAE+oBAD7/////////8D////A////EAAAAP0AAAAAAAAAAP0AAMWmBADA//////////v////A////EAAAAP0AAAABAAAAAf0AAFGmBAD7////wP///8D////A////AAAAAP0AAAACAAAAAv0AAGO2BAD7/////////8D////A////AAAAAP0AAAAEAAAABP0AAM63BAD/////+////8D////A////AAAAAP0AAAAFAAAABf0AAOO3BAD/////+////8D////A////AAAAAP0AAAAGAAAABv0AADa4BAD7////+//////////A////AAAAAP0AAAAHAAAAB/0AAEa3BAD7/////////8D////A////AAAAAP0AAAAIAAAACP0AANK4BAD/////+////8D////A////AAAAAP0AAAAJAAAACf0AAOe4BAD/////+////8D////A////AAAAAP0AAAAKAAAACv0AADi5BAD7////+//////////A////AAAAAP0AAAALAAAAC/0AAHSyBAD7/////////8D////A////AAAAAP0AAAAMAAAADP0AAPC1BAD/////+////8D////A////AAAAAP0AAAANAAAADf0AAIK2BAD7////+//////////A////AAAAAP0AAAAOAAAADv0AABKvBAD7/////v///8D////A////AAAAAP0AAAAPAAAAD/0AAMyyBAD+////+////8D////A////AAAAAP0AAAAQAAAAEP0AAEW0BAD7////+/////7////A////AAAAAP0AAAARAAAAEf0AAF6yBAD7/////f///8D////A////AAAAAP0AAAASAAAAEv0AAMy1BAD9////+////8D////A////AAAAAP0AAAATAAAAE/0AAG+2BAD7////+/////3////A////AAAAAP0AAAAUAAAAFP0AAPeuBAD7/////P///8D////A////AAAAAP0AAAAVAAAAFf0AAKiyBAD8////+////8D////A////AAAAAP0AAAAWAAAAFv0AACe0BAD7////+/////z////A////AAAAAP0AAAAXAAAAF/0AAHS5BAD7////+/////v////A////AAAAAP0AAAAYAAAAGP0AADquBAD7////+/////v////A////AAAAAP0AAAAZAAAAGf0AAH2uBAD7////+/////v////A////AAAAAP0AAAAaAAAAGv0AAIiuBAD7////+/////v////A////AAAAAP0AAAAbAAAAG/0AABy0BAD7////+/////v////A////AAAAAP0AAAAcAAAAHP0AADq0BAD7////+/////v////A////AAAAAP0AAAAdAAAAHf0AAJOuBAD7////+/////v////A////AAAAAP0AAAAeAAAAHv0AAJ6uBAD7////+/////v////A////AAAAAP0AAAAfAAAAH/0AAFi0BAD7////+/////v////A////AAAAAP0AAAAgAAAAIP0AAGO0BAD7////+/////v////A////AAAAAP0AAAAhAAAAIf0AAIm5BAD7////+/////v////A////AAAAAP0AAAAiAAAAIv0AAHywBAD7////+/////v////A////AAAAAP0AAAAjAAAAI/0AAOywBAD7////+/////v////A////AAAAAP0AAAAkAAAAJP0AAPewBAD7////+/////v////A////AAAAAP0AAAAlAAAAJf0AADe2BAD7////+/////v////A////AAAAAP0AAAAmAAAAJv0AAEK2BAD7////+/////v////A////AAAAAP0AAAAnAAAAJ/0AAAKxBAD7////+/////v////A////AAAAAP0AAAAoAAAAKP0AAA2xBAD7////+/////v////A////AAAAAP0AAAApAAAAKf0AAE22BAD7////+/////v////A////AAAAAP0AAAAqAAAAKv0AAFi2BAD7////+/////v////A////AAAAAP0AAAArAAAAK/0AAAG4BAD7////+/////v////A////AAAAAP0AAAAsAAAALP0AAHqpBAD7////+/////v////A////AAAAAP0AAAAtAAAALf0AABSqBAD7////+/////v////A////AAAAAP0AAAAuAAAALv0AADWqBAD7////+/////v////A////AAAAAP0AAAAvAAAAL/0AAGyvBAD7////+/////v////A////AAAAAP0AAAAwAAAAMP0AAHevBAD7////+/////v////A////AAAAAP0AAAAxAAAAMf0AAECqBAD7////+/////v////A////AAAAAP0AAAAyAAAAMv0AAEuqBAD7////+/////v////A////AAAAAP0AAAAzAAAAM/0AAIKvBAD7////+/////v////A////AAAAAP0AAAA0AAAANP0AAJavBAD7////+/////v////A////AAAAAP0AAAA1AAAANf0AAPi3BAD7////+/////v////A////AAAAAP0AAABAAAAAQP0AAFqpBAD7////+/////v////A////AAAAAP0AAABBAAAAQf0AAIOpBAD7////+/////v////A////AAAAAP0AAABCAAAAQv0AAC6vBAD7////+/////v////A////AAAAAP0AAABDAAAAQ/0AAAGqBAD7////+/////v////A////AAAAAP0AAABEAAAARP0AAGOvBAD7////+/////v////A////AAAAAP0AAABFAAAARf0AAK+2BAD7////+/////v////A////AAAAAP0AAABGAAAARv0AAMWlBAD7////+/////v////A////AAAAAP0AAABHAAAAR/0AAOilBAD7////+/////v////A////AAAAAP0AAABIAAAASP0AACWrBAD7////+/////v////A////AAAAAP0AAABJAAAASf0AAAmmBAD7////+/////v////A////AAAAAP0AAABKAAAASv0AAFarBAD7////+/////v////A////AAAAAP0AAABLAAAAS/0AABymBAD7////+////8D////A////AAAAAP0AAABMAAAATP0AAKOmBAD7////+/////v////A////AAAAAP0AAABNAAAATf0AANCmBAD7////+/////v////A////AAAAAP0AAABOAAAATv0AAI2vBAD7////+/////v////A////AAAAAP0AAABPAAAAT/0AAKymBAD7////+/////v////7////AAAAAP0AAABQAAAAUP0AALO3BAD7////+////8D////A////AAAAAP0AAABRAAAAUf0AAEm4BAD/////+////8D////A////AAAAAP0AAABSAAAAUv0AAK2xBAD/////+////8D////A////AAAAAP0AAABTAAAAU/0AAHC3BAD7////+//////////A////AAAAAP0AAABUAAAAVP0AAC63BAD7////+//////////A////AAAAAP0AAABVAAAAVf0AADq3BAD7////+//////////A////AAAAAP0AAABWAAAAVv0AAKGvBAD7////+/////v////A////AAAAAP0AAABXAAAAV/0AAF6zBAD7////+/////v////A////AAAAAP0AAABYAAAAWP0AAHOzBAD7////+/////v////A////AAAAAP0AAABZAAAAWf0AAPqtBAD7////+/////v////A////AAAAAP0AAABaAAAAWv0AAGWxBAD7////+/////v////A////AAAAAP0AAABbAAAAW/0AAHqxBAD7////+/////v////A////AAAAAP0AAABcAAAAXP0AADevBAD7////+/////v////A////AAAAAP0AAABdAAAAXf0AAIm4BAD7////+////8D////A////AAAAAP0AAABiAAAAYv0AAEu5BAD/////+////8D////A////AAAAAP0AAABjAAAAY/0AAOG0BAD/////+////8D////A////AAAAAP0AAABkAAAAZP0AAHC4BAD7////+//////////A////AAAAAP0AAABlAAAAZf0AAFi4BAD7////+//////////A////AAAAAP0AAABmAAAAZv0AAGS4BAD7////+//////////A////AAAAAP0AAABnAAAAZ/0AAGqyBAD7////+/////v////A////AAAAAP0AAABoAAAAaP0AAAO2BAD7////+/////v////A////AAAAAP0AAABpAAAAaf0AABi2BAD7////+/////v////A////AAAAAP0AAABqAAAAav0AAGqwBAD7////+/////v////A////AAAAAP0AAABrAAAAa/0AAKm0BAD7////+/////v////A////AAAAAP0AAABsAAAAbP0AAL60BAD7////+/////v////A////AAAAAP0AAABtAAAAbf0AAKOxBAD7////+/////v////A////AAAAAP0AAABuAAAAbv0AAKy1BAD7////+////8D////A////AAAAAP0AAABzAAAAc/0AAJW2BAD/////+////8D////A////AAAAAP0AAAB0AAAAdP0AAEOtBAD/////+////8D////A////AAAAAP0AAAB1AAAAdf0AAES1BAD7////+//////////A////AAAAAP0AAAB2AAAAdv0AACy1BAD7////+//////////A////AAAAAP0AAAB3AAAAd/0AADi1BAD7////+//////////A////AAAAAP0AAAB4AAAAeP0AAMeqBAD7////+/////v////A////AAAAAP0AAAB5AAAAef0AADmpBAD7////+/////v////A////AAAAAP0AAAB8AAAAfP0AALOqBAD7////+/////v////A////AAAAAP0AAAB/AAAAf/0AAIqyBAD7////+////8D////A////AAAAAP0AAACEAAAAhP0AAG60BAD/////+////8D////A////AAAAAP0AAACFAAAAhf0AAFaqBAD/////+////8D////A////AAAAAP0AAACGAAAAhv0AALyxBAD7////+//////////A////AAAAAP0AAACHAAAAh/0AAE2xBAD7////+//////////A////AAAAAP0AAACIAAAAiP0AAFmxBAD7////+//////////A////AAAAAP0AAACJAAAAif0AAA6nBAD7////+/////v////A////AAAAAP0AAACKAAAAiv0AAKGlBAD7////+/////v////A////AAAAAP0AAACNAAAAjf0AAGWqBAD7////+////8D////A////AAAAAP0AAACVAAAAlf0AAKK1BAD7////+////8D////A////AAAAAP0AAACWAAAAlv0AAAOzBAD7////+////8D////A////AAAAAP0AAACXAAAAl/0AAL2qBAD7////+/////v////A////AAAAAP0AAACaAAAAmv0AAC+pBAD7////+/////v////A////AAAAAP0AAACbAAAAm/0AAKmqBAD7////+/////v////A////AAAAAP0AAACcAAAAnP0AAFWsBAD7////+/////v////A////AAAAAP0AAACdAAAAnf0AAAqqBAD7////+/////v////A////AAAAAP0AAACeAAAAnv0AAGa3BAD7////+/////v////A////AAAAAP0AAACfAAAAn/0AAGamBAD7////+////8D////A////AAAAAP0AAACgAAAAoP0AAICyBAD7////+////8D////A////AAAAAP0AAAChAAAAof0AAKuvBAD7////+////8D////A////AAAAAP0AAACiAAAAov0AAASnBAD7////+/////v////A////AAAAAP0AAAClAAAApf0AAIelBAD7////+/////v////A////AAAAAP0AAACmAAAApv0AALumBAD7////+/////v////A////AAAAAP0AAACnAAAAp/0AACWpBAD7////+/////v////A////AAAAAP0AAACoAAAAqP0AABKmBAD7////+/////v////A////AAAAAP0AAACpAAAAqf0AAC22BAD7////+/////v////A////AAAAAP0AAACqAAAAqv0AAE61BAD7////+////8D////A////AAAAAP0AAACrAAAAq/0AAGa1BAD7////+////8D////A////AAAAAP0AAACsAAAArP0AAIizBAD7////+////8D////A////AAAAAP0AAACtAAAArf0AAKCzBAD7////+////8D////A////AAAAAP0AAACuAAAArv0AAIe3BAD7////+////8D////A////AAAAAP0AAACvAAAAr/0AAJ23BAD7////+////8D////A////AAAAAP0AAACwAAAAsP0AAAq4BAD7////+////8D////A////AAAAAP0AAACxAAAAsf0AACC4BAD7////+////8D////A////AAAAAP0AAACyAAAAsv0AADSxBAD7////+/////v////A////AAAAAP0AAADAAAAAwP0AAMcLBQD7////+/////v////A////AAAAAP0AAADBAAAAwf0AAL23BAD7/////////8D////A////AQAAAP0AAADCAAAAwv0AAJO4BAD7/////////8D////A////AgAAAP0AAADDAAAAw/0AAN+1BAD7/////////8D////A////BAAAAP0AAADEAAAAxP0AALuyBAD7/////////8D////A////CAAAAP0AAADFAAAAxf0AAPy4BAD////////////////A////BAAAAP4AAAAAAAAAAP4AAICmBAD////////////////+////BAAAAP4AAAABAAAAAf4AAHCmBAD///////////7////+////CAAAAP4AAAACAAAAAv4AAPKnBAD//////////8D////A////BAAAAP4AAAAQAAAAEP4AAOKnBAD+/////////8D////A////CAAAAP4AAAARAAAAEf4AAFauBAD//////////8D////A////AQAAAP4AAAASAAAAEv4AAEKrBAD//////////8D////A////AgAAAP4AAAATAAAAE/4AAEOuBAD+/////////8D////A////AQAAAP4AAAAUAAAAFP4AAC6rBAD+/////////8D////A////AgAAAP4AAAAVAAAAFf4AAGmuBAD+/////////8D////A////BAAAAP4AAAAWAAAAFv4AAECmBADA///////////////A////BAAAAP4AAAAXAAAAF/4AAC+mBADA//////////7////A////CAAAAP4AAAAYAAAAGP4AAJC1BADA///////////////A////AQAAAP4AAAAZAAAAGf4AALyuBADA///////////////A////AgAAAP4AAAAaAAAAGv4AAH61BADA//////////7////A////AQAAAP4AAAAbAAAAG/4AAKmuBADA//////////7////A////AgAAAP4AAAAcAAAAHP4AAJCmBADA//////////7////A////BAAAAP4AAAAdAAAAHf4AAMOoBAD////////////////A////BAAAAP4AAAAeAAAAHv4AALCoBAD+//////////7////A////CAAAAP4AAAAfAAAAH/4AAG6nBAD////////////////A////AQAAAP4AAAAgAAAAIP4AAPCsBAD////////////////A////AgAAAP4AAAAhAAAAIf4AAFinBAD+//////////7////A////AQAAAP4AAAAiAAAAIv4AANmsBAD+//////////7////A////AgAAAP4AAAAjAAAAI/4AAEOpBAD+//////////7////A////BAAAAP4AAAAkAAAAJP4AAJ2oBAD////////////////A////BAAAAP4AAAAlAAAAJf4AAIqoBAD+//////////7////A////CAAAAP4AAAAmAAAAJv4AAO6mBAD////////////////A////AQAAAP4AAAAnAAAAJ/4AAJqrBAD////////////////A////AgAAAP4AAAAoAAAAKP4AANimBAD+//////////7////A////AQAAAP4AAAApAAAAKf4AAIOrBAD+//////////7////A////AgAAAP4AAAAqAAAAKv4AALCnBAD+//////////7////A////BAAAAP4AAAArAAAAK/4AAO6pBAD////////////////A////BAAAAP4AAAAsAAAALP4AANupBAD+//////////7////A////CAAAAP4AAAAtAAAALf4AAJqnBAD////////////////A////AQAAAP4AAAAuAAAALv4AACytBAD////////////////A////AgAAAP4AAAAvAAAAL/4AAISnBAD+//////////7////A////AQAAAP4AAAAwAAAAMP4AABWtBAD+//////////7////A////AgAAAP4AAAAxAAAAMf4AAGOpBAD+//////////7////A////BAAAAP4AAAAyAAAAMv4AAHioBAD////////////////A////BAAAAP4AAAAzAAAAM/4AAGaoBAD+//////////7////A////CAAAAP4AAAA0AAAANP4AAFWwBAD////////////////A////AQAAAP4AAAA1AAAANf4AANKtBAD////////////////A////AgAAAP4AAAA2AAAANv4AAECwBAD+//////////7////A////AQAAAP4AAAA3AAAAN/4AALytBAD+//////////7////A////AgAAAP4AAAA4AAAAOP4AAB+qBAD+//////////7////A////BAAAAP4AAAA5AAAAOf4AAPO2BAD////////////////A////BAAAAP4AAAA6AAAAOv4AAOC2BAD+//////////7////A////CAAAAP4AAAA7AAAAO/4AAJO0BAD////////////////A////AQAAAP4AAAA8AAAAPP4AABW1BAD////////////////A////AgAAAP4AAAA9AAAAPf4AAH20BAD+//////////7////A////AQAAAP4AAAA+AAAAPv4AAP60BAD+//////////7////A////AgAAAP4AAAA/AAAAP/4AANWwBAD+//////////7////A////BAAAAP4AAABAAAAAQP4AAKa5BAD////////////////A////BAAAAP4AAABBAAAAQf4AAJK5BAD+//////////7////A////CAAAAP4AAABCAAAAQv4AALu4BAD////////////////A////AQAAAP4AAABDAAAAQ/4AAAS0BAD////////////////A////AgAAAP4AAABEAAAARP4AAKS4BAD+//////////7////A////AQAAAP4AAABFAAAARf4AAOyzBAD+//////////7////A////AgAAAP4AAABGAAAARv4AALavBAD+//////////7////A////BAAAAP4AAABHAAAAR/4AACG5BAD/////////////////////BAAAAP4AAABIAAAASP4AAAq5BAD+//////////7////+////CAAAAP4AAABJAAAASf4AAOivBAD/////////////////////AQAAAP4AAABKAAAASv4AAMyrBAD/////////////////////AgAAAP4AAABLAAAAS/4AAM6vBAD+//////////7////+////AQAAAP4AAABMAAAATP4AALGrBAD+//////////7////+////AgAAAP4AAABNAAAATf4AAMenBAD+//////////7////+////BAAAAP4AAABOAAAATv4AABGWBADA////wP///8D////A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAQEBAQAAAQEAAQEBDQ0NDQ0NDQ0NDQEAAQEBAQEFBQUFBQUBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEBAQcHBwcHBwMDAwMDAwMDAwMDAwMDAwMDAwMDAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHCQArAEgHDgAKAI8ACQA4AcoAkgAaAeUBVwBIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAcJAAkAPwAMAAkAFgAPAAkAPQEqAgwADQAJACwACgAaAD8ApwHTAS4ACQAJAAsAVgAnAJIBMwIRAEgHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAcAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEwMTIzNDU2Nzg5YWJjZGVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQEBAQEAAAEBAAEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAVAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAXAAAAGAAAABkAAAAaAAAAzAAAAM0AAAAAAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAJQAAACVAAAAlgAAAJcAAACYAAAAmQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAANEAAADSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAC5AAAAugAAALsAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9AAAAvgAAAL8AAADAAAAAwQAAAMIAAADDAAAAxAAAAMUAAADGAAAAxwAAAMgAAADJAAAAygAAAMsAAADOAAAAzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0wAAANQAAADVAAAAAAAAANYAAADXAAAA2AAAANkAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBAAAJAQAACgEAAAsBAAAMAQAADQEAAA4BAAAPAQAAEAEAABEBAAASAQAAEwEAABQBAAAVAQAAFgEAABcBAAAYAQAAGQEAABoBAAAbAQAAHAEAAB0BAAAeAQAAHwEAACABAAAhAQAAIgEAACMBAAAkAQAAJQEAAAAAAAAAAAAAAAAAAAAAAAAmAQAAJwEAACgBAAApAQAAKgEAACsBAAAsAQAALQEAAC4BAAAvAQAAMAEAADEBAAAyAQAAAAAAAAAAAAAAAAAAAAAAADMBAAA0AQAANQEAADYBAAA3AQAAOAEAADkBAAAAAAAAAAAAADoBAAAAAAAAAAAAADsBAAAAAAAAAAAAAAAAAAAAAAAAPAEAAD0BAAA+AQAAPwEAAEABAABBAQAAQgEAAAAAAAAAAAAAQwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAQAARQEAAEYBAAAAAAAAAAAAAEcBAABIAQAASQEAAEoBAABLAQAATAEAAE0BAABOAQAATwEAAAAAAAAAAAAAUAEAAFEBAABSAQAAUwEAAFQBAABVAQAAVgEAAFcBAABYAQAAWQEAAFoBAABbAQAAXAEAAF0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgEAAF8BAABgAQAAYQEAAGIBAABjAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQBAABlAQAAZgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnAQAAaAEAAGkBAABqAQAAawEAAGwBAABtAQAAbgEAAG8BAABwAQAAcQEAAHIBAABzAQAAdAEAAHUBAAB2AQAAdwEAAHgBAAB5AQAAegEAAHsBAAB8AQAAfQEAAH4BAAB/AQAAgAEAAIEBAACCAQAAgwEAAIQBAACFAQAAhgEAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAI0BAACOAQAAjwEAAJABAACRAQAAkgEAAJMBAACUAQAAlQEAAJYBAACXAQAAmAEAAJkBAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAACgAQAAoQEAAKIBAACjAQAApAEAAKUBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAkFAFQJBQBmCQUAdQkFAIYJBQCUCQUAsQkFAM0JBQDZCQUA6wkFAO8JBQD0CQUA+QkFAP0JBQADCgUAxgwFAAoKBQAOCgUAFQoFABwKBQAjCgUAKQoFACsKBQAyCgUAOQoFAD0KBQBECgUASgoFAFAKBQBZCgUAYAoFAGIKBQBpCgUAbwoFAHUKBQB6CgUAfwoFAIUKBQCLCgUAkQoFAJcKBQCdCgUAowoFAKkKBQCtCgUAsQoFAL0KBQDLCgUA1goFAOkKBQD2CgUAAgsFACoNBQAwDQUAMw0FADkNBQB5DQUAvw0FAMQNBQAJCwUADwsFABcLBQAdCwUAJQsFAP0NBQAvCwUAOQsFAD4LBQBCCwUAQA4FAB8OBQBNCwUAUgsFAEsOBQBVDgUAGg4FAFwLBQBoCwUAdAsFAIALBQCMCwUAmAsFAJwLBQB+DgUApQsFAIoOBQDeDQUA0g0FAJgOBQCfDgUArgsFALkLBQDHCwUA1QsFANsLBQBfDgUAcw4FAOYLBQBpDgUA8QsFAPwLBQCSDgUAMg4FAAQMBQAKDAUAFgwFAB0MBQAoDAUAMAwFADkMBQA+DAUAQgwFABEOBQAqDQUAGg4FAB8OBQAiDgUAMg4FADYOBQAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRlQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fAAAAAAAAAAAAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE5vIGVycm9yIGluZm9ybWF0aW9uAAAAAAAACgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUAAAAAAgAAAAMAAAAFAAAABwAAAAsAAAANAAAAEQAAABMAAAAXAAAAHQAAAB8AAAAlAAAAKQAAACsAAAAvAAAANQAAADsAAAA9AAAAQwAAAEcAAABJAAAATwAAAFMAAABZAAAAYQAAAGUAAABnAAAAawAAAG0AAABxAAAAfwAAAIMAAACJAAAAiwAAAJUAAACXAAAAnQAAAKMAAACnAAAArQAAALMAAAC1AAAAvwAAAMEAAADFAAAAxwAAANMAAAABAAAACwAAAA0AAAARAAAAEwAAABcAAAAdAAAAHwAAACUAAAApAAAAKwAAAC8AAAA1AAAAOwAAAD0AAABDAAAARwAAAEkAAABPAAAAUwAAAFkAAABhAAAAZQAAAGcAAABrAAAAbQAAAHEAAAB5AAAAfwAAAIMAAACJAAAAiwAAAI8AAACVAAAAlwAAAJ0AAACjAAAApwAAAKkAAACtAAAAswAAALUAAAC7AAAAvwAAAMEAAADFAAAAxwAAANEAAADIdAQAGXUEAEBUBAAAAAAAyHQEADx1BABQVAQAAAAAAKB0BABedQQAyHQEAIKJBADgXAQAAAAAAMh0BAB8dQQAeFQEAAAAAADIdAQAjnUEAIhUBAAAAAAA8HQEALN1BAAAAAAAAQAAAKBUBAACBAAAoHQEAMB1BADIdAQA6HUEALhUBAAAAAAAyHQEAAt2BACIVAQAAAAAAMh0BAAwdgQA2FQEAAAAAADIdAQASnYEAOhUBAAAAAAA8HQEAH92BAAAAAAAAQAAAABVBAACBAAAoHQEAJR2BADIdAQAMXcEABhVBAAAAAAAyHQEAFF3BADoVAQAAAAAAMh0BACFdwQAOFUEAAAAAADIdAQApXcEAOhUBAAAAAAAyHQEAP93BABYVQQAAAAAAMh0BAApeAQAiFQEAAAAAADIdAQATngEAHhVBAAAAAAAyHQEAGl4BACIVAQAAAAAAMh0BACOeAQAmFUEAAAAAADIdAQApngEAIhUBAAAAAAAyHQEAOV4BACIVAQAAAAAAMh0BAAKeQQAyFUEAAAAAADIdAQAMXkEAIhUBAAAAAAAyHQEAFZ5BADoVQQAAAAAAMh0BAB9eQQAiFQEAAAAAADIdAQAonkEAAhWBAAAAAAAyHQEALJ5BACIVAQAAAAAAMh0BADXeQQAKFYEAAAAAADIdAQA+nkEAIhUBAAAAAAAyHQEAB96BABIVgQAAAAAAMh0BABJegQAiFQEAAAAAADIdAQAbnoEAIhUBAAAAAAAyHQEAJN6BAB4VgQAAAAAAMh0BACzegQAiFQEAAAAAADIdAQA2HoEAJhWBAAAAAAAyHQEAPt6BACIVAQAAAAAAMh0BAAgewQAiFQEAAAAAADIdAQARXsEAIhUBAAAAAAAyHQEAGp7BACIVAQAAAAAAMh0BACPewQAiFQEAAAAAADIdAQAtHsEAIhUBAAAAAAAyHQEANl7BAAIVwQAAAAAAMh0BAD8ewQAiFQEAAAAAADIdAQAIXwEAChXBAAAAAAAyHQEAER8BACIVAQAAAAAAMh0BABpfAQASFcEAAAAAADIdAQAjHwEAIhUBAAAAAAAyHQEALF8BABoVwQAAAAAAMh0BADUfAQAiFQEAAAAAADIdAQA+XwEAIhXBAAAAAAAyHQEABx9BACIVAQAAAAAAMh0BABBfQQAqFcEAAAAAADIdAQAZH0EAIhUBAAAAAAAyHQEAIl9BACIVAQAAAAAAMh0BACufQQAiFQEAAAAAADIdAQA030EAOhXBAAAAAAAyHQEAPZ9BACIVAQAAAAAAMh0BAAbfgQAiFQEAAAAAADIdAQAQH4EAIhUBAAAAAAAyHQEAGV+BAAoWAQAAAAAAMh0BACIfgQAiFQEAAAAAADIdAQArX4EAIhUBAAAAAAAyHQEANJ+BABYWAQAAAAAAMh0BAD8fgQAiFQEAAAAAADIdAQAIX8EAHhYBAAAAAAAyHQEAER/BACIVAQAAAAAAMh0BABpfwQAmFgEAAAAAADIdAQAjH8EAIhUBAAAAAAAyHQEALF/BAC4WAQAAAAAAMh0BADUfwQAiFQEAAAAAADIdAQA+X8EANhYBAAAAAAAyHQEACOABACIVAQAAAAAAMh0BABIgAQA+FgEAAAAAADIdAQAV4AEAIhUBAAAAAAAyHQEAHyABAAYWQQAAAAAAMh0BACfgAQAiFQEAAAAAADIdAQA6IAEAIhUBAAAAAAAyHQEAA2BBABIWQQAAAAAAMh0BAA0gQQAiFQEAAAAAADIdAQAWYEEAGhZBAAAAAAAyHQEAICBBACIVAQAAAAAAMh0BADLgQQAiFkEAAAAAADIdAQA5YEEAIhUBAAAAAAAyHQEAAqCBACoWQQAAAAAAMh0BAAtggQAiFQEAAAAAADIdAQAUoIEAMhZBAAAAAAAyHQEAGeCBACIVAQAAAAAAMh0BACMggQA6FkEAAAAAADIdAQAoYIEAIhUBAAAAAAAyHQEAMaCBAAIWgQAAAAAAMh0BADoggQAiFQEAAAAAADIdAQADIMEAChaBAAAAAAAyHQEAC6DBACIVAQAAAAAAMh0BABSgwQASFoEAAAAAADIdAQAe4MEAIhUBAAAAAAAyHQEAJ+DBABoWgQAAAAAAMh0BADFgwQAiFQEAAAAAADIdAQA6YMEAIhaBAAAAAAAyHQEABKEBACIVAQAAAAAAMh0BAA2hAQAqFoEAAAAAADIdAQAX4QEAIhUBAAAAAAAyHQEAIOEBADIWgQAAAAAAMh0BACshAQAiFQEAAAAAADIdAQA0IQEAOhaBAAAAAAAyHQEAPmEBACIVAQAAAAAAMh0BAAdhQQACFsEAAAAAADIdAQARoUEAIhUBAAAAAAAyHQEAGqFBAAoWwQAAAAAAMh0BACThQQAiFQEAAAAAADIdAQAt4UEAEhbBAAAAAAAyHQEANGFBADoVAQAAAAAAMh0BAAFhgQAaFsEAAAAAADIdAQAIIYEAOhUBAAAAAAAyHQEAFSGBACIWwQAAAAAAMh0BABvhgQA6FQEAAAAAADIdAQAo4YEAKhbBAAAAAAAyHQEAL6GBADoVAQAAAAAAMh0BADyhgQAyFsEAAAAAADIdAQADIcEAOhUBAAAAAAAyHQEAECHBADoWwQAAAAAAMh0BABZhwQA6FQEAAAAAADIdAQAjYcEAAhcBAAAAAAAyHQEAKiHBADoVAQAAAAAAMh0BADrhwQAMFwEAAAAAACgdAQA3IcEAMh0BAAAiAQAKFwEAAAAAADIdAQALIgEAFBcBAAAAAAAyHQEAEKIBAAoXAQAAAAAAMh0BABuiAQAcFwEAAAAAADIdAQAhIgEAChcBAAAAAAAyHQEALCIBACQXAQAAAAAAMh0BADFiAQAKFwEAAAAAADIdAQA8YgEALBcBAAAAAAAyHQEAAWJBAAoXAQAAAAAAMh0BAAxiQQA0FwEAAAAAADIdAQATokEAOhUBAAAAAAAyHQEAKiJBADwXAQAAAAAAKB0BADBiQQAyHQEABORBAAQXQQAAAAAAKB0BABhkAQAoHQEAPSRBADIdAQA0pMEAEBUBAAAAAAAyHQEAJaWBABAXQQAAAAAAKB0BAA2lgQAoHQEAFeXBADIdAQAKpgEAEBdBAAAAAAAoHQEANKXBADIdAQAPZkEAEBUBAAAAAAAyHQEAGGZBACAXQQAAAAAAKB0BAB3mQQAyHQEACaeBABAXQQAAAAAAKB0BAC5nQQAyHQEAF6gBAC4XQQAAAAAAKB0BADinwQAoHQEAAWhBADIdAQA+KIEAFBUBAAAAAAAyHQEADm9BABAVAQAAAAAAMh0BAAfvgQA8F0EAAAAAADIdAQANr4EAABeBAAAAAAAoHQEAGK+BADIdAQAcr4EABheBAAAAAAAyHQEAIy+BAAoXgQAAAAAAKB0BADCvgQAyHQEANi+BABAXgQAAAAAAMh0BAANvwQAKF4EAAAAAADIdAQAQ78EAGBeBAAAAAAAyHQEAHi/BAAoXgQAAAAAAMh0BAC4vwQAgF4EAAAAAADIdAQA0b8EAABeBAAAAAAAyHQEAP2/BACgXgQAAAAAAMh0BAAPwAQAsF4EAAAAAACgdAQAOcAEAMh0BABIwAQAyF4EAAAAAADIdAQAXsAEALBeBAAAAAAAyHQEAIjABADoXgQAAAAAAMh0BAC5wAQAAF4EAAAAAADIdAQA5cAEAAhfBAAAAAAAyHQEABjBBAAAXgQAAAAAAMh0BABEwQQAKF8EAAAAAADIdAQAesEEAABeBAAAAAAAyHQEAKfBBABIXwQAAAAAAMh0BADawQQAAF4EAAAAAADIdAQABsIEAGhfBAAAAAAAyHQEADfCBAAAXgQAAAAAAMh0BABjwgQAiF8EAAAAAADIdAQAlMIEAABeBAAAAAAAyHQEAMDCBACoXwQAAAAAAMh0BADdwgQAAF4EAAAAAADIdAQACcMEAMhfBAAAAAAAyHQEADzDBAAAXgQAAAAAAMh0BABowwQA6F8EAAAAAADIdAQAm8MEAABeBAAAAAAAyHQEAMfDBAAIYAQAAAAAAMh0BAD9wwQAAF4EAAAAAADIdAQAqMQEAFBUBAAAAAAAyHQEAC8JBQDwXAQAAAAAAMh0BACmDwUASGAEAAAAAADIdAQAUw8FAFhgBAAAAAAAoHQEAHQPBQDIdAQAgQ8FADhgBAAAAAAAyHQEAMgPBQA4YAQAAAAAAAAAAAAwVAQACwAAAAwAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAAAAAABYVAQADQAAAA4AAABJAAAACwAAAEoAAAALAAAACwAAAAsAAAAMAAAASwAAAEwAAAALAAAADQAAAE0AAABOAAAADAAAAAwAAAALAAAADQAAAAwAAAAOAAAADgAAAE8AAABQAAAADAAAAA8AAABRAAAAUgAAAA0AAAAQAAAAUwAAAFQAAAANAAAAEQAAAFUAAABWAAAADgAAAFcAAABYAAAAWQAAABIAAABaAAAAWwAAAAsAAAATAAAAXAAAAF0AAAAUAAAAXgAAAF8AAAAOAAAAYAAAAA8AAABhAAAAFQAAAGIAAABjAAAADwAAABAAAAARAAAAZAAAABIAAABlAAAAZgAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAAGcAAABoAAAAaQAAAGoAAAATAAAAFgAAAGsAAAAUAAAAFgAAAGwAAABtAAAAFwAAABgAAAAZAAAAGgAAAG4AAAAVAAAAbwAAAHAAAABxAAAAcgAAABYAAABzAAAAFwAAAHQAAAB1AAAAdgAAAHcAAAAbAAAAeAAAABwAAAAdAAAAeQAAAB4AAAAfAAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AAAAIAAAACEAAAAiAAAAIwAAACQAAACAAAAAFwAAACUAAAAYAAAAgQAAAIIAAACDAAAAhAAAACYAAACFAAAAJwAAABkAAAAYAAAAGgAAAIYAAACHAAAADAAAAIgAAACJAAAAGQAAAIoAAAAaAAAAiwAAACgAAACMAAAAjQAAABsAAACOAAAAjwAAABwAAACQAAAAKQAAAJEAAACSAAAAKgAAAJMAAAAdAAAAlAAAAB4AAACVAAAAGwAAAB8AAACWAAAAHAAAACAAAAArAAAAlwAAAB0AAAANAAAALAAAAJgAAAAOAAAAmQAAAJoAAAAtAAAAmwAAAJwAAAAhAAAADQAAAA8AAAAQAAAAIgAAABEAAACdAAAAEgAAAJ4AAAAeAAAAnwAAACMAAAAfAAAALgAAAKAAAAChAAAAIAAAAC8AAAAhAAAAJAAAACIAAAAjAAAAJAAAACUAAAAAAAAAaFQEAA8AAAAQAAAAAAAAAKhUBAARAAAAEgAAAAAAAADIVAQAEwAAABQAAAAAAAAACFUEABUAAAAWAAAAAAAAAChVBAAXAAAAGAAAAAAAAABIVQQADwAAABkAAAAAAAAAaFUEAA8AAAAaAAAAAAAAAIhVBAAPAAAAGwAAAAAAAACoVQQADwAAABwAAAAAAAAAuFUEAA8AAAAdAAAAAAAAANhVBAAPAAAAHgAAAAAAAAD4VQQAHwAAACAAAAAAAAAAGFYEACEAAAAiAAAAAAAAADhWBAAPAAAAIwAAAAAAAABYVgQADwAAACQAAAAAAAAAaFYEACUAAAAmAAAAAAAAAIhWBAAnAAAAKAAAAAAAAACoVgQADwAAACkAAAAAAAAAuFYEAA8AAAAqAAAAAAAAAMhWBAAPAAAAKwAAAAAAAADYVgQADwAAACwAAAAAAAAA6FYEAA8AAAAtAAAAAAAAAPhWBAAuAAAALwAAAAAAAAAYVwQAMAAAADEAAAAAAAAAOFcEADIAAAAzAAAAAAAAAFhXBAA0AAAANQAAAAAAAAB4VwQANgAAADcAAAAAAAAAmFcEADgAAAA5AAAAAAAAALhXBAAPAAAAOgAAAAAAAADIVwQADwAAADsAAAAAAAAA2FcEADwAAAA9AAAAAAAAAPhXBAAPAAAAPgAAAAAAAAAIWAQADwAAAD8AAAAAAAAAGFgEAEAAAABBAAAAAAAAADhYBAAPAAAAQgAAAAAAAABIWAQAQwAAAEQAAAAAAAAAaFgEAEUAAABGAAAAAAAAAIhYBABHAAAASAAAAAAAAACoWAQASQAAAEoAAAAAAAAAyFgEAA8AAABLAAAAAAAAAOhYBABMAAAATQAAAAAAAAAIWQQATgAAAE8AAAAAAAAAKFkEAA8AAABQAAAAAAAAADhZBAAPAAAAUQAAAAAAAABYWQQADwAAAFIAAAAAAAAAeFkEAFMAAABUAAAAAAAAAJhZBABVAAAAVgAAAAAAAAC4WQQAVwAAAFgAAAAAAAAA2FkEAFkAAABaAAAAAAAAAPhZBABbAAAAXAAAAAAAAAAYWgQAXQAAAF4AAAAAAAAAOFoEAF8AAABgAAAAAAAAAFhaBAAPAAAAYQAAAAAAAAB4WgQADwAAAGIAAAAAAAAAmFoEAA8AAABjAAAAAAAAALhaBAAPAAAAZAAAAAAAAADYWgQADwAAAGUAAAAAAAAA+FoEAA8AAABmAAAAAAAAABhbBAAPAAAAZwAAAAAAAAA4WwQAaAAAAGkAAAAAAAAAWFsEAGoAAABrAAAAAAAAAHhbBABsAAAAbQAAAAAAAACYWwQAbgAAAG8AAAAAAAAAuFsEAHAAAABxAAAAAAAAANhbBAByAAAAcwAAAAAAAAAYXAQAdAAAAHUAAAAAAAAA+FsEAHYAAAB3AAAAAAAAAChcBAB4AAAAeQAAAAAAAABAXAQAegAAAHsAAAAAAAAAYFwEAHwAAAB9AAAAAAAAAIBcBAB+AAAAfwAAAAAAAACgXAQAgAAAAIEAAAAAAAAAwFwEAIIAAACDAAAAAAAAAPhcBACEAAAAhQAAADAAAAAMAAAAhgAAAIcAAACiAAAAowAAADEAAAAAAAAAGF0EAIgAAACJAAAACwAAAKQAAAClAAAApgAAAKcAAACoAAAAqQAAAKoAAACrAAAAFAAAABUAAAAWAAAAFwAAAKwAAACtAAAArgAAABsAAACvAAAAHQAAALAAAACxAAAAsgAAALMAAAC0AAAAIwAAALUAAAAlAAAAJgAAALYAAAAoAAAAKQAAALcAAAC4AAAAuQAAALoAAAC7AAAAvAAAADAAAAAxAAAAMgAAADMAAAC9AAAAvgAAADYAAAA3AAAAOAAAADkAAAC/AAAAOwAAAMAAAADBAAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAAAAAAAAYF0EAIoAAACLAAAACwAAAMIAAADDAAAAxAAAAMUAAADGAAAAxwAAAMgAAADJAAAAFAAAABUAAAAWAAAAFwAAAMoAAADLAAAAzAAAABsAAADNAAAAHQAAAM4AAADPAAAA0AAAANEAAADSAAAAIwAAANMAAAAlAAAAJgAAANQAAAAoAAAAKQAAANUAAADWAAAA1wAAANgAAADZAAAA2gAAADAAAAAxAAAAMgAAADMAAADbAAAA3AAAADYAAAA3AAAAOAAAADkAAADdAAAAOwAAAN4AAADfAAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAAAAAAAASF0EAIwAAACNAAAAMgAAAA0AAACOAAAAjwAAAAsAAADgAAAAMwAAAAAAAAAoXQQAjAAAAJAAAAA0AAAADgAAAJEAAACSAAAADAAAAOEAAAA1AAAAAAAAAHBdBACTAAAAlAAAACYAAAAnAAAAAAAAAMBdBACVAAAAlgAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAAAAAAKBdBACXAAAAmAAAADYAAAAPAAAAmQAAAJoAAAAQAAAAIAEAADcAAAAAAAAAiF0EAIwAAACbAAAAOAAAABEAAACcAAAAnQAAAA0AAAAhAQAAOQAAAAAAAADQXQQAngAAAJ8AAAALAAAAIgEAAKUAAACmAAAApwAAAKgAAACpAAAAqgAAACMBAAAUAAAAFQAAABYAAAAXAAAArAAAAK0AAAAkAQAAGwAAAK8AAAAdAAAAsAAAALEAAACyAAAAJQEAALQAAAAjAAAAtQAAACUAAAAmAAAAtgAAACgAAAApAAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAMAAAADEAAAAyAAAAMwAAAL0AAAAmAQAANgAAADcAAAA4AAAAOQAAACcBAAA7AAAAwAAAAMEAAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAAAAAADgXQQAoAAAAKEAAAAAAAAAUF4EAKIAAACjAAAAOgAAAAAAAAAwXgQApAAAAKUAAAA7AAAAAAAAAAheBACmAAAApwAAADwAAAAAAAAA2F4EAKgAAACpAAAAAAAAAHBeBACqAAAAqwAAAAAAAACwXgQArAAAAK0AAAAAAAAAuF4EAK4AAACvAAAAAAAAAJBeBACsAAAAsAAAAAAAAAD4XgQAsQAAALIAAAAAAAAAOF8EALMAAAC0AAAAAAAAABhfBAC1AAAAtgAAAAAAAABYXwQAtwAAALgAAAAAAAAAeF8EALkAAAC6AAAAAAAAAJhfBAC7AAAAvAAAAAAAAAC4XwQAvQAAAL4AAAAAAAAA2F8EAL8AAADAAAAAAAAAAPhfBADBAAAAwgAAAAAAAAAYYAQAngAAAMMAAAAoAQAAKQEAACoBAAArAQAALAEAAC0BAAAuAQAALwEAADABAAAxAQAAMgEAADMBAAA0AQAANQEAADYBAAA3AQAAOAEAADkBAAA6AQAAOwEAADwBAAA9AQAAPgEAAD8BAABAAQAAQQEAAEIBAABDAQAARAEAAEUBAABGAQAARwEAAEgBAABJAQAASgEAAEsBAABMAQAATQEAAE4BAABPAQAAUAEAAFEBAABSAQAAUwEAAFQBAABVAQAAVgEAAFcBAABYAQAAWQEAAFoBAABbAQAAXAEAAF0BAABeAQAAXwEAAGABAABhAQAAYgEAAGMBAABkAQAAZQEAAAAAAAAoYAQAxAAAAMUAAABmAQAAEgAAAGcBAAA9AAAAKAAAACUAAAA+AAAAaAEAAGkBAAAPAAAAPwAAAGoBAABrAQAAKQAAABAAAAAOAAAAEQAAAA8AAAASAAAAQAAAAGwBAABtAQAAJgAAAEEAAABuAQAAbwEAACoAAABCAAAAcAEAAHEBAAAnAAAAQwAAAHIBAABzAQAAKwAAAHQBAAB1AQAAdgEAAEQAAAB3AQAAeAEAABMAAABFAAAAeQEAAHoBAABGAAAAewEAAHwBAAAoAAAAfQEAACwAAAB+AQAARwAAAH8BAACAAQAAKQAAACoAAAArAAAAgQEAACwAAACCAQAAgwEAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAAIQBAACFAQAAhgEAAIcBAAAtAAAAMwAAAIgBAAAuAAAASAAAAIkBAACKAQAASQAAAEoAAABLAAAATAAAAIsBAAAvAAAAjAEAAI0BAACOAQAAjwEAADAAAACQAQAANAAAAJEBAACSAQAAkwEAAJQBAABNAAAAlQEAAE4AAABPAAAAlgEAAFAAAABRAAAAlwEAAJgBAACZAQAAmgEAAJsBAACcAQAAUgAAAFMAAABUAAAAVQAAAFYAAACdAQAAMQAAAFcAAAA1AAAAngEAAJ8BAACgAQAAoQEAAFgAAACiAQAAWQAAADYAAAAyAAAANwAAAKMBAACkAQAAFAAAAKUBAACmAQAAMwAAAKcBAAA0AAAAqAEAAFoAAACpAQAAqgEAADgAAACrAQAArAEAADkAAACtAQAAWwAAAK4BAACvAQAAXAAAALABAAA6AAAAsQEAADsAAACyAQAANQAAADwAAACzAQAANgAAAD0AAABdAAAAtAEAADcAAAAVAAAAXgAAALUBAAAWAAAAtgEAALcBAABfAAAAuAEAALkBAAA+AAAAEAAAABcAAAAYAAAAPwAAABkAAAC6AQAAGgAAALsBAAA4AAAAvAEAAEAAAAA5AAAAYAAAAL0BAAC+AQAAOgAAAGEAAAA7AAAAQQAAADwAAAA9AAAAPgAAAEIAAAAFAAAAAAAAAAAAAABiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAQAAAAJ1pBQAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9wiQD/CS8PAAAAADhgBADGAAAAxwAAAMgAAADJAAAAQgAAAAsAAAALAAAACwAAAAAAAABgYAQAxgAAAMoAAADIAAAAyQAAAEIAAAAMAAAADAAAAAwAAAAAAAAAcGAEAMYAAADLAAAAyAAAAMkAAABCAAAADQAAAA0AAAANAAAAPGJpbmFyeT4ATjR3YWJ0MTJfR0xPQkFMX19OXzExMU5hbWVBcHBsaWVyRQBONHdhYnQxMUV4cHJWaXNpdG9yMTFEZWxlZ2F0ZU5vcEUATjR3YWJ0MTFFeHByVmlzaXRvcjhEZWxlZ2F0ZUUATjR3YWJ0OUNvbnN0RXhwckUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTE1RUVFAE40d2FidDRFeHByRQBONHdhYnQxOWludHJ1c2l2ZV9saXN0X2Jhc2VJTlNfNEV4cHJFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUUxOEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMThFRUUATjR3YWJ0MTZFdmVudE1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTEwRUVFAE40d2FidDExTW9kdWxlRmllbGRFAE40d2FidDE5aW50cnVzaXZlX2xpc3RfYmFzZUlOU18xMU1vZHVsZUZpZWxkRUVFAGV4cGVjdGVkIGxvY2FsIG5hbWUgY291bnQgKCV1KSA8PSBsb2NhbCBjb3VudCAoJXUpAGV4cGVjdGVkIGZ1bmN0aW9uIG5hbWUgY291bnQgKCV1KSA8PSBmdW5jdGlvbiBjb3VudCAoJXpkKQBONHdhYnQyMkRhdGFTZWdtZW50TW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFOEVFRQBONHdhYnQyMkVsZW1TZWdtZW50TW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFNkVFRQBhY2Nlc3Npbmcgc3RhY2sgZGVwdGg6ICV1ID49IG1heDogJXpkAE40d2FidDEzTG9hZFN0b3JlRXhwcklMTlNfOEV4cHJUeXBlRTQyRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU0MkVFRQBONHdhYnQxN1NpbWRTaHVmZmxlT3BFeHByRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDFFRUUATjR3YWJ0MTRTaW1kTGFuZU9wRXhwckUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTQwRUVFAHBvcHBpbmcgZW1wdHkgbGFiZWwgc3RhY2sATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTU1RUVFAE40d2FidDEwT3Bjb2RlRXhwcklMTlNfOEV4cHJUeXBlRTUxRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU1MUVFRQBONHdhYnQxME9wY29kZUV4cHJJTE5TXzhFeHByVHlwZUU1NEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNTRFRUUATjR3YWJ0N1RyeUV4cHJFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU1M0VFRQBONHdhYnQ3VmFyRXhwcklMTlNfOEV4cHJUeXBlRTUyRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU1MkVFRQBONHdhYnQxM0xvYWRTdG9yZUV4cHJJTE5TXzhFeHByVHlwZUU0M0VFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDNFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTM5RUVFAE40d2FidDIyUmV0dXJuQ2FsbEluZGlyZWN0RXhwckUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTM4RUVFAE40d2FidDdWYXJFeHBySUxOU184RXhwclR5cGVFMzdFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTM3RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzNkVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMzVFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTMyRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzM0VFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMzRFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0OUVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDlFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0OEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDhFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU1MEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNTBFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0N0VFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDdFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0NkVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDZFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0NUVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDVFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTQ0RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzMUVFRQBONHdhYnQ3VmFyRXhwcklMTlNfOEV4cHJUeXBlRTMwRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzMEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjlFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTI4RUVFAE40d2FidDdWYXJFeHBySUxOU184RXhwclR5cGVFMjdFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTI3RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUyNkVFRQBONHdhYnQxM0Jsb2NrRXhwckJhc2VJTE5TXzhFeHByVHlwZUUyNUVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjVFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUUyNEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjRFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUUyM0VFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjNFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUUyMkVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjJFRUUATjR3YWJ0MTNMb2FkU3RvcmVFeHBySUxOU184RXhwclR5cGVFMjFFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTIxRUVFAE40d2FidDZJZkV4cHJFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUyMEVFRQBONHdhYnQ3VmFyRXhwcklMTlNfOEV4cHJUeXBlRTE5RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUxOUVFRQBlbHNlIGV4cHJlc3Npb24gd2l0aG91dCBtYXRjaGluZyBpZgBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMTdFRUUATjR3YWJ0MTBPcGNvZGVFeHBySUxOU184RXhwclR5cGVFMTZFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTE2RUVFAE40d2FidDEwT3Bjb2RlRXhwcklMTlNfOEV4cHJUeXBlRTE0RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUxNEVFRQBjYXRjaCBleHByZXNzaW9uIHdpdGhvdXQgbWF0Y2hpbmcgdHJ5AE40d2FidDE2Q2FsbEluZGlyZWN0RXhwckUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTEzRUVFAE40d2FidDdWYXJFeHBySUxOU184RXhwclR5cGVFMTJFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTEyRUVFAE40d2FidDExQnJUYWJsZUV4cHJFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUxMUVFRQBONHdhYnQxMUJyT25FeG5FeHByRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMTBFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU5RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU5RUVFAE40d2FidDdWYXJFeHBySUxOU184RXhwclR5cGVFOEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFOEVFRQBONHdhYnQxM0Jsb2NrRXhwckJhc2VJTE5TXzhFeHByVHlwZUU3RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU3RUVFAE40d2FidDEwT3Bjb2RlRXhwcklMTlNfOEV4cHJUeXBlRTZFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTZFRUUATjR3YWJ0MTNMb2FkU3RvcmVFeHBySUxOU184RXhwclR5cGVFNEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNEVFRQBONHdhYnQxM0xvYWRTdG9yZUV4cHJJTE5TXzhFeHByVHlwZUU1RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU1RUVFAE40d2FidDEzTG9hZFN0b3JlRXhwcklMTlNfOEV4cHJUeXBlRTJFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTJFRUUATjR3YWJ0MTNMb2FkU3RvcmVFeHBySUxOU184RXhwclR5cGVFMUVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMUVFRQBONHdhYnQxM0xvYWRTdG9yZUV4cHJJTE5TXzhFeHByVHlwZUUzRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzRUVFAE40d2FidDEzTG9hZFN0b3JlRXhwcklMTlNfOEV4cHJUeXBlRTBFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTBFRUUATjR3YWJ0MTZTdGFydE1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTlFRUUATjR3YWJ0MTdFeHBvcnRNb2R1bGVGaWVsZEUATjR3YWJ0MTZNb2R1bGVGaWVsZE1peGluSUxOU18xNU1vZHVsZUZpZWxkVHlwZUUzRUVFAE40d2FidDE3R2xvYmFsTW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFMUVFRQBONHdhYnQxN01lbW9yeU1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTdFRUUATjR3YWJ0MTZUYWJsZU1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTVFRUUATjR3YWJ0MTVGdW5jTW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFMEVFRQBONHdhYnQxN0ltcG9ydE1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTJFRUUATjR3YWJ0NkltcG9ydEUATjR3YWJ0MTFFdmVudEltcG9ydEUATjR3YWJ0MTFJbXBvcnRNaXhpbklMTlNfMTJFeHRlcm5hbEtpbmRFNEVFRQBONHdhYnQxMkdsb2JhbEltcG9ydEUATjR3YWJ0MTFJbXBvcnRNaXhpbklMTlNfMTJFeHRlcm5hbEtpbmRFM0VFRQBONHdhYnQxMk1lbW9yeUltcG9ydEUATjR3YWJ0MTFJbXBvcnRNaXhpbklMTlNfMTJFeHRlcm5hbEtpbmRFMkVFRQBONHdhYnQxMVRhYmxlSW1wb3J0RQBONHdhYnQxMUltcG9ydE1peGluSUxOU18xMkV4dGVybmFsS2luZEUxRUVFAE40d2FidDEwRnVuY0ltcG9ydEUATjR3YWJ0MTFJbXBvcnRNaXhpbklMTlNfMTJFeHRlcm5hbEtpbmRFMEVFRQBONHdhYnQxOUZ1bmNUeXBlTW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFNEVFRQBONHdhYnQxMl9HTE9CQUxfX05fMTE0QmluYXJ5UmVhZGVySVJFAE40d2FidDE1QmluYXJ5UmVhZGVyTm9wRQBONHdhYnQyMEJpbmFyeVJlYWRlckRlbGVnYXRlRQBwcmVmaXgAbGltaXRzOiBmbGFncwBsaW1pdHM6IGluaXRpYWwAbGltaXRzOiBtYXgAV0FTTV9CSU5BUllfTUFHSUMAV0FTTV9CSU5BUllfVkVSU0lPTgBudW0gdHlwZXMARklYVVAgc2VjdGlvbiBzaXplADsgJXMgJWQKAG51bSBwYXJhbXMAbnVtIHJlc3VsdHMAbnVtIGltcG9ydHMAaW1wb3J0IGhlYWRlcgBudW0gZnVuY3Rpb25zAGZ1bmN0aW9uICV6ZCBzaWduYXR1cmUgaW5kZXgAbnVtIHRhYmxlcwBudW0gbWVtb3JpZXMAbnVtIGdsb2JhbHMAbnVtIGV4cG9ydHMAZXhwb3J0IG5hbWUAZXhwb3J0IGZ1bmMgaW5kZXgAZXhwb3J0IHRhYmxlIGluZGV4AGV4cG9ydCBtZW1vcnkgaW5kZXgAZXhwb3J0IGdsb2JhbCBpbmRleABleHBvcnQgZXZlbnQgaW5kZXgAc3RhcnQgZnVuYyBpbmRleABudW0gZWxlbSBzZWdtZW50cwBlbGVtIHNlZ21lbnQgaGVhZGVyAG51bSBlbGVtIGV4cHJzAGVsZW0gZXhwciBmdW5jdGlvbiBpbmRleABmdW5jdGlvbiBib2R5AGZ1bmMgYm9keSBzaXplIChndWVzcykAbG9jYWwgZGVjbCBjb3VudABGSVhVUCBmdW5jIGJvZHkgc2l6ZQBudW0gZGF0YSBzZWdtZW50cwBkYXRhIHNlZ21lbnQgaGVhZGVyAGRhdGEgc2VnbWVudCBzaXplAG1vZHVsZSBuYW1lIHR5cGUAc3Vic2VjdGlvbiBzaXplIChndWVzcykARklYVVAgc3Vic2VjdGlvbiBzaXplAGZ1bmN0aW9uIG5hbWUgdHlwZQBmdW5jIG5hbWUgJXpkAGxvY2FsIG5hbWUgdHlwZQBudW0gbG9jYWxzAGxvY2FsIG5hbWUgJXpkAGxvY2FsIGluZGV4AG1ldGFkYXRhIHZlcnNpb24Ac3ltYm9sIHRhYmxlAG51bSBzeW1ib2xzAHN5bWJvbCB0eXBlAHN5bWJvbCBmbGFncwBlbGVtZW50IGluZGV4AGdsb2JhbCBuYW1lACVzLiVzAHJlbG9jIHNlY3Rpb24gaW5kZXgAbnVtIHJlbG9jcwByZWxvYyB0eXBlAHJlbG9jIG9mZnNldAByZWxvYyBpbmRleAByZWxvYyBhZGRlbmQAc2VjdGlvbiAiJXMiADsgJXMKAHNlY3Rpb24gc2l6ZSAoZ3Vlc3MpAGN1c3RvbSBzZWN0aW9uIG5hbWUAYWxpZ25tZW50AGJyZWFrIGRlcHRoAG51bSB0YXJnZXRzAGJyZWFrIGRlcHRoIGZvciBkZWZhdWx0AHNpZ25hdHVyZSBpbmRleABpMzIgbGl0ZXJhbABpNjQgbGl0ZXJhbABmMzIgbGl0ZXJhbABmNjQgbGl0ZXJhbAB2MTI4IGxpdGVyYWwAZ2xvYmFsIGluZGV4AG1lbW9yeS5jb3B5IHJlc2VydmVkAGRhdGEuZHJvcCBzZWdtZW50AG1lbW9yeS5maWxsIHJlc2VydmVkAG1lbW9yeS5pbml0IHNlZ21lbnQAbWVtb3J5LmluaXQgcmVzZXJ2ZWQAdGFibGUuY29weSByZXNlcnZlZABlbGVtLmRyb3Agc2VnbWVudAB0YWJsZS5pbml0IHNlZ21lbnQAdGFibGUuaW5pdCByZXNlcnZlZAB0YWJsZS5nZXQgdGFibGUgaW5kZXgAdGFibGUuc2V0IHRhYmxlIGluZGV4AHRhYmxlLmdyb3cgdGFibGUgaW5kZXgAdGFibGUuc2l6ZSB0YWJsZSBpbmRleAB0aHJvdyBldmVudABTaW1kIExhbmUgbGl0ZXJhbABTaW1kIExhbmVbMTZdIGxpdGVyYWwAYmxvY2sgdHlwZSBmdW5jdGlvbiBpbmRleABzZWN0aW9uICIlcyIgKCV1KQB7InNvdXJjZV9maWxlbmFtZSI6IAAsCiAiY29tbWFuZHMiOiBbCgAKACAgewAiJXMiOiAAIiVzIgBsaW5lAGZpbGVuYW1lAGV4cGVjdGVkACIldSIAYXMAdGV4dAB9AF19CgB7AHZhbHVlACIlbGx1IgBtb2R1bGVfdHlwZQBmaWVsZABhcmdzAGFzc2VydF91bmluc3RhbnRpYWJsZQBcdSUwNHgAWk40d2FidDIxV3JpdGVCaW5hcnlTcGVjU2NyaXB0RVBOU182U3RyZWFtRVBOU182U2NyaXB0RU5TXzExc3RyaW5nX3ZpZXdFUzRfUktOU18xOFdyaXRlQmluYXJ5T3B0aW9uc0VQTlN0M19fMjZ2ZWN0b3JJTlNfMjRGaWxlbmFtZU1lbW9yeVN0cmVhbVBhaXJFTlM4XzlhbGxvY2F0b3JJU0FfRUVFRVMxX0UzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpONHdhYnQyMVdyaXRlQmluYXJ5U3BlY1NjcmlwdEVQTlMyXzZTdHJlYW1FUE5TMl82U2NyaXB0RU5TMl8xMXN0cmluZ192aWV3RVM3X1JLTlMyXzE4V3JpdGVCaW5hcnlPcHRpb25zRVBOU182dmVjdG9ySU5TMl8yNEZpbGVuYW1lTWVtb3J5U3RyZWFtUGFpckVOU185YWxsb2NhdG9ySVNDX0VFRUVTNF9FMyRfME5TRF9JU0hfRUVGUzRfUzdfRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZQTjR3YWJ0NlN0cmVhbUVOUzJfMTFzdHJpbmdfdmlld0VFRUUARk9SQ0VfQ09MT1IAUl9XQVNNX0ZVTkNUSU9OX0lOREVYX0xFQgBSX1dBU01fVEFCTEVfSU5ERVhfU0xFQgBSX1dBU01fVEFCTEVfSU5ERVhfSTMyAFJfV0FTTV9NRU1PUllfQUREUl9MRUIAUl9XQVNNX01FTU9SWV9BRERSX1NMRUIAUl9XQVNNX01FTU9SWV9BRERSX0kzMgBSX1dBU01fVFlQRV9JTkRFWF9MRUIAUl9XQVNNX0dMT0JBTF9JTkRFWF9MRUIAUl9XQVNNX0ZVTkNUSU9OX09GRlNFVF9JMzIAUl9XQVNNX1NFQ1RJT05fT0ZGU0VUX0kzMgBSX1dBU01fRVZFTlRfSU5ERVhfTEVCAFJfV0FTTV9NRU1PUllfQUREUl9SRUxfU0xFQgBSX1dBU01fVEFCTEVfSU5ERVhfUkVMX1NMRUIAG1sxbQAlZDolZDogABtbMzFtADogABtbMG0AG1szMm0ALndhc20ALndhdAAkZwAkdAAkZgAkVAAkTQAkZQAkZAAkcAAkbAAkTAAkSQAkQgBONHdhYnQxMl9HTE9CQUxfX05fMTEzTmFtZUdlbmVyYXRvckUAQXRvbWljTG9hZABBdG9taWNSbXcAQXRvbWljUm13Q21weGNoZwBBdG9taWNTdG9yZQBBdG9taWNOb3RpZnkAQXRvbWljV2FpdABCaW5hcnkAQmxvY2sAQnIAQnJJZgBCck9uRXhuAEJyVGFibGUAQ2FsbABDYWxsSW5kaXJlY3QAQ29tcGFyZQBDb25zdABDb252ZXJ0AERyb3AAR2xvYmFsR2V0AEdsb2JhbFNldABJZgBMb2FkAExvY2FsR2V0AExvY2FsU2V0AExvY2FsVGVlAExvb3AATWVtb3J5Q29weQBEYXRhRHJvcABNZW1vcnlGaWxsAE1lbW9yeUdyb3cATWVtb3J5SW5pdABNZW1vcnlTaXplAE5vcABSZWZJc051bGwAUmVmTnVsbABSZXRocm93AFJldHVybgBSZXR1cm5DYWxsAFJldHVybkNhbGxJbmRpcmVjdABTZWxlY3QAU2ltZExhbmVPcABTaW1kU2h1ZmZsZU9wAExvYWRTcGxhdABTdG9yZQBUYWJsZUNvcHkARWxlbURyb3AAVGFibGVJbml0AFRhYmxlR2V0AFRhYmxlR3JvdwBUYWJsZVNpemUAVGFibGVTZXQAVGVybmFyeQBUaHJvdwBUcnkAVW5hcnkAVW5yZWFjaGFibGUAKzAAYWxsb2NhAGJyX3VubGVzcwBjYWxsX2hvc3QAZHJvcF9rZWVwADxpbnZhbGlkPgB1bmRlZmluZWQgJXMgdmFyaWFibGUgIiVzIgBaTjR3YWJ0MTJfR0xPQkFMX19OXzExMk5hbWVSZXNvbHZlcjlWaXNpdEZ1bmNFUE5TXzRGdW5jRUUzJF8xAHBhcmFtZXRlcgByZWRlZmluaXRpb24gb2YgJXMgIiVzIgBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjR3YWJ0MTJfR0xPQkFMX19OXzExMk5hbWVSZXNvbHZlcjlWaXNpdEZ1bmNFUE5TMl80RnVuY0VFMyRfMU5TXzlhbGxvY2F0b3JJUzdfRUVGdlJLTlNfNHBhaXJJS05TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TOF9JY0VFRUVOUzJfN0JpbmRpbmdFRUVTS19FRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZSS05TXzRwYWlySUtOU18xMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFTjR3YWJ0N0JpbmRpbmdFRUVTRV9FRUUAWk40d2FidDEyX0dMT0JBTF9fTl8xMTJOYW1lUmVzb2x2ZXIyMkNoZWNrRHVwbGljYXRlQmluZGluZ3NFUEtOU18xMUJpbmRpbmdIYXNoRVBLY0UzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpONHdhYnQxMl9HTE9CQUxfX05fMTEyTmFtZVJlc29sdmVyMjJDaGVja0R1cGxpY2F0ZUJpbmRpbmdzRVBLTlMyXzExQmluZGluZ0hhc2hFUEtjRTMkXzBOU185YWxsb2NhdG9ySVNBX0VFRnZSS05TXzRwYWlySUtOU18xMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU0JfSWNFRUVFTlMyXzdCaW5kaW5nRUVFU05fRUVFAGVsZW0gc2VnbWVudABkYXRhIHNlZ21lbnQAdW5kZWZpbmVkIGxhYmVsIHZhcmlhYmxlICIlcyIATjR3YWJ0MTJfR0xPQkFMX19OXzExMk5hbWVSZXNvbHZlckUATjR3YWJ0MTJNZW1vcnlTdHJlYW1FAE40d2FidDZTdHJlYW1FACUwN3p4OiAAJTAyeAAgIDsgJXMAOyBtb3ZlIGRhdGE6IFslengsICV6eCkgLT4gWyV6eCwgJXp4KQoAYWN0aW9uAGV4cGVjdGVkIDEgcmVzdWx0LCBnb3QgJXpkAHR5cGUgbWlzbWF0Y2ggYXQgJXMuIGdvdCAlcywgZXhwZWN0ZWQgZjMyIG9yIGY2NAB0eXBlIG1pc21hdGNoIGZvciAlcyAldSBvZiAlcy4gZ290ICVzLCBleHBlY3RlZCAlcwBleHBlY3RlZCAlemQgcmVzdWx0cywgZ290ICV6ZAB1bmtub3duIG1vZHVsZQB1bmtub3duIGZ1bmN0aW9uIGV4cG9ydCAiJXMiAG1hbnkAZmV3AHRvbyAlcyBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiBnb3QgJXpkLCBleHBlY3RlZCAlemQAYXJndW1lbnQAdW5rbm93biBnbG9iYWwgZXhwb3J0ICIlcyIAJXMgdmFyaWFibGUgb3V0IG9mIHJhbmdlIChtYXggJXUpAGVsZW0gc2VnbWVudCBvZmZzZXQAZGF0YSBzZWdtZW50IG9mZnNldABmdW5jdGlvbiB0eXBlAEV2ZW50IHNpZ25hdHVyZSBtdXN0IGhhdmUgMCByZXN1bHRzLgBtdWx0aXBsZSByZXN1bHQgdmFsdWVzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgBnbG9iYWwgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbgBtdXRhYmxlIGdsb2JhbHMgY2Fubm90IGJlIGltcG9ydGVkAG11dGFibGUgZ2xvYmFscyBjYW5ub3QgYmUgZXhwb3J0ZWQAb25seSBvbmUgc3RhcnQgZnVuY3Rpb24gYWxsb3dlZABzdGFydCBmdW5jdGlvbiBtdXN0IGJlIG51bGxhcnkAc3RhcnQgZnVuY3Rpb24gbXVzdCBub3QgcmV0dXJuIGFueXRoaW5nAG9ubHkgb25lIG1lbW9yeSBibG9jayBhbGxvd2VkAHBhZ2VzAGluaXRpYWwgJXMgKCVsbHUpIG11c3QgYmUgPD0gKCVsbHUpAG1heCAlcyAoJWxsdSkgbXVzdCBiZSA8PSAoJWxsdSkAbWF4ICVzICglbGx1KSBtdXN0IGJlID49IGluaXRpYWwgJXMgKCVsbHUpAG1lbW9yaWVzIG1heSBub3QgYmUgc2hhcmVkAHNoYXJlZCBtZW1vcmllcyBtdXN0IGhhdmUgbWF4IHNpemVzAG9ubHkgb25lIHRhYmxlIGFsbG93ZWQAZWxlbXMAdGFibGVzIG11c3QgaGF2ZSBhbnlyZWYgdHlwZQB0YWJsZXMgbXVzdCBoYXZlIGFueXJlZiBvciBmdW5jcmVmIHR5cGUAZXhwZWN0ZWQgJXpkICVzcywgZ290ICV6ZABaTjR3YWJ0MTJfR0xPQkFMX19OXzE5VmFsaWRhdG9yMjhDaGVja0R1cGxpY2F0ZUV4cG9ydEJpbmRpbmdzRVBLTlNfNk1vZHVsZUVFMyRfMQByZWRlZmluaXRpb24gb2YgZXhwb3J0ICIlcyIATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk40d2FidDEyX0dMT0JBTF9fTl8xOVZhbGlkYXRvcjI4Q2hlY2tEdXBsaWNhdGVFeHBvcnRCaW5kaW5nc0VQS05TMl82TW9kdWxlRUUzJF8xTlNfOWFsbG9jYXRvcklTOF9FRUZ2UktOU180cGFpcklLTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlM5X0ljRUVFRU5TMl83QmluZGluZ0VFRVNMX0VFRQBpbnZhbGlkICVzLCBtdXN0IGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbjsgZWl0aGVyICouY29uc3Qgb3IgZ2xvYmFsLmdldC4AaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBjYW4gb25seSByZWZlcmVuY2UgYW4gaW1wb3J0ZWQgZ2xvYmFsAGluaXRpYWxpemVyIGV4cHJlc3Npb24gY2Fubm90IHJlZmVyZW5jZSBhIG11dGFibGUgZ2xvYmFsAHR5cGUgbWlzbWF0Y2ggYXQgJXMuIGdvdCAlcywgZXhwZWN0ZWQgJXMAWk40d2FidDEyX0dMT0JBTF9fTl8xOVZhbGlkYXRvckMxRVBOU3QzX18yNnZlY3RvcklOU181RXJyb3JFTlMyXzlhbGxvY2F0b3JJUzRfRUVFRVBLTlNfNlNjcmlwdEVSS05TXzE1VmFsaWRhdGVPcHRpb25zRUUzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpONHdhYnQxMl9HTE9CQUxfX05fMTlWYWxpZGF0b3JDMUVQTlNfNnZlY3RvcklOUzJfNUVycm9yRU5TXzlhbGxvY2F0b3JJUzZfRUVFRVBLTlMyXzZTY3JpcHRFUktOUzJfMTVWYWxpZGF0ZU9wdGlvbnNFRTMkXzBOUzdfSVNIX0VFRnZQS2NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZQS2NFRUUAJXMgcmVxdWlyZXMgYW4gaW1wb3J0ZWQgb3IgZGVmaW5lZCBtZW1vcnkuAGFsaWdubWVudCBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiBuYXR1cmFsIGFsaWdubWVudCAoJXUpACVzIHJlcXVpcmVzIG1lbW9yeSB0byBiZSBzaGFyZWQuAGFsaWdubWVudCBtdXN0IGJlIGVxdWFsIHRvIG5hdHVyYWwgYWxpZ25tZW50ICgldSkAJXMgcGFyYW1zIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgBtdWx0aXBsZSAlcyByZXN1bHRzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgAlcyByZXF1aXJlcyB0YWJsZSAlZCB0byBiZSBhbiBpbXBvcnRlZCBvciBkZWZpbmVkIHRhYmxlLgBlbGVtX3NlZ21lbnQAZGF0YV9zZWdtZW50AHVuZGVmaW5lZCBsb2NhbCB2YXJpYWJsZSAiJXMiAGxvY2FsIHZhcmlhYmxlIG91dCBvZiByYW5nZSAobWF4ICV1KQBjYW4ndCBnbG9iYWwuc2V0IG9uIGltbXV0YWJsZSBnbG9iYWwgYXQgaW5kZXggJXUuAE40d2FidDEyX0dMT0JBTF9fTl8xOVZhbGlkYXRvckUAdW5leHBlY3RlZCBjaGFyAEVPRiBpbiBibG9jayBjb21tZW50AGY2NC5sdABmMzIubHQAZjY0LmxlAGYzMi5sZQBmNjQuYWJzAGYzMi5hYnMAZjY0LnN1YgBmMzIuc3ViAGk2NC5zdWIAaTMyLnN1YgBpNjQubHRfcwBpMzIubHRfcwBpNjQubHRfdQBpMzIubHRfdQBpNjQubGVfcwBpMzIubGVfcwBpNjQubGVfdQBpMzIubGVfdQBpNjQucmVtX3MAaTMyLnJlbV9zAGk2NC5jdHoAaTMyLmN0egBpNjQucmVtX3UAaTMyLnJlbV91AGY2NC5hZGQAZjMyLmFkZABpNjQuYWRkAGkzMi5hZGQAaTY0LmFuZABpMzIuYW5kAGY2NC5taW4AZjMyLm1pbgBmNjQubmUAZjMyLm5lAGk2NC5uZQBpMzIubmUAaTY0LmNsegBpMzIuY2x6AGY2NC50cnVuYwBmMzIudHJ1bmMAZjY0Lm11bABmMzIubXVsAGk2NC5tdWwAaTMyLm11bABmNjQuY2VpbABmMzIuY2VpbABmNjQuY29uc3QAZjMyLmNvbnN0AGk2NC5jb25zdABpMzIuY29uc3QAaTY0LmRpdl9zAGkzMi5kaXZfcwBpNjQuZGl2X3UAaTMyLmRpdl91AGY2NC5zdG9yZQBmMzIuc3RvcmUAaTY0LnN0b3JlAGkzMi5zdG9yZQBpNjQuc3RvcmUzMgBpNjQucm90bABpMzIucm90bABpNjQucm90cgBpMzIucm90cgBmNjQubG9hZABmMzIubG9hZABpNjQubG9hZABpMzIubG9hZABmNjR4Mi5zdWIAZjY0LmRpdgBmMzIuZGl2AGk2NHgyLnN1YgBpNjQubG9hZDE2X3MAaTMyLmxvYWQxNl9zAGY2NHgyLm5lAGk2NC5sb2FkMTZfdQBpMzIubG9hZDE2X3UAZjY0eDIubHQAZjY0Lm5lYXJlc3QAZjMyLm5lYXJlc3QAZjY0eDIubGUAZjY0eDIubWluAHYxMjgubm90AHNldF9sb2NhbABpNjQuYXRvbWljLnN0b3JlAGkzMi5hdG9taWMuc3RvcmUAdjEyOC5jb25zdAB0ZWVfbG9jYWwAZjY0eDIuYWJzAGk2NC5hdG9taWMud2FpdABpMzIuYXRvbWljLndhaXQAaTY0LmF0b21pYy5zdG9yZTMyAHYxMjguYW5kAHYxMjguYml0c2VsZWN0AGY2NHgyLm11bAB2MTI4LnN0b3JlAHYxMjgub3IAaTY0LmF0b21pYy5ybXc4LnN1Yl91AGkzMi5hdG9taWMucm13OC5zdWJfdQBmNjR4Mi5hZGQAaTY0eDIuYWRkAGk2NC50cnVuY19mMzJfcwBpMzIudHJ1bmNfZjMyX3MAaTY0LnRydW5jX2YzMl91AGkzMi50cnVuY19mMzJfdQBpNjQuYXRvbWljLnJtdzguYWRkX3UAaTMyLmF0b21pYy5ybXc4LmFkZF91AGk2NC5hdG9taWMucm13OC5hbmRfdQBpMzIuYXRvbWljLnJtdzguYW5kX3UAaTY0LmF0b21pYy5ybXczMi5zdWJfdQBpNjQuYXRvbWljLnJtdzMyLmNtcHhjaGdfdQBpNjQuYXRvbWljLmxvYWQAaTMyLmF0b21pYy5sb2FkAGk2NC50cnVuY19zL2YzMgBpMzIudHJ1bmNfcy9mMzIAaTY0LnRydW5jX3UvZjMyAGkzMi50cnVuY191L2YzMgBpNjQubG9hZDMyX3MAdjEyOC5sb2FkAGk2NC5sb2FkMzJfdQBpNjQuYXRvbWljLnJtdy5vcgBpMzIuYXRvbWljLnJtdy5vcgBpNjQuYXRvbWljLnJtdy5zdWIAaTMyLmF0b21pYy5ybXcuc3ViAGk2NC5hdG9taWMucm13LmFkZABpMzIuYXRvbWljLnJtdy5hZGQAaTY0LnRydW5jX2Y2NF9zAGkzMi50cnVuY19mNjRfcwBpNjQudHJ1bmNfZjY0X3UAaTMyLnRydW5jX2Y2NF91AGYzMi5kZW1vdGVfZjY0AGY2NHgyLmRpdgBmMzJ4NC5zdWIAaTMyeDQuc3ViAGk2NC5hdG9taWMucm13MzIuYWRkX3UAZjMyeDQubmUAaTY0LmF0b21pYy5ybXczMi5hbmRfdQBpMzJ4NC5uZQBmMzJ4NC5sdABpNjQudHJ1bmNfcy9mNjQAaTMyLnRydW5jX3MvZjY0AGk2NC50cnVuY191L2Y2NABpMzIudHJ1bmNfdS9mNjQAZjMyLmRlbW90ZS9mNjQAaTY0LmF0b21pYy5ybXcuYW5kAGkzMi5hdG9taWMucm13LmFuZABmMzJ4NC5sZQBmMzJ4NC5taW4AaTMyeDQubHRfcwBpNjQuYXRvbWljLnJtdzMyLm9yX3UAaTMyeDQubHRfdQBpMzJ4NC5sZV9zAGkzMng0LmxlX3UAaTY0eDIuYWxsX3RydWUAZjMyeDQuYWJzAGY2NC5jb252ZXJ0X2kzMl9zAGYzMi5jb252ZXJ0X2kzMl9zAGk2NC5zdG9yZTgAaTMyLnN0b3JlOABmMzJ4NC5tdWwAaTMyeDQubXVsAGYzMng0LmFkZABpMzJ4NC5hZGQAaTY0LmxvYWQ4X3MAaTMyLmxvYWQ4X3MAaTY0LmxvYWQ4X3UAaTMyLmxvYWQ4X3UAZjY0LmNvbnZlcnRfaTY0X3MAZjMyLmNvbnZlcnRfaTY0X3MAZjY0eDIuZ3QAaTY0LmF0b21pYy5sb2FkMTZfdQBpMzIuYXRvbWljLmxvYWQxNl91AGY2NHgyLmdlAGY2NC5jb252ZXJ0X2kzMl91AGYzMi5jb252ZXJ0X2kzMl91AGk2NC5hdG9taWMucm13MTYuc3ViX3UAaTMyLmF0b21pYy5ybXcxNi5zdWJfdQBpNjQuYXRvbWljLnJtdzE2LmNtcHhjaGdfdQBpMzIuYXRvbWljLnJtdzE2LmNtcHhjaGdfdQBpNjQuZXF6AGkzMi5lcXoAaTY0Lm9yAGkzMi5vcgBpNjQudHJ1bmNfc2F0X2YzMl9zAGkzMi50cnVuY19zYXRfZjMyX3MAaTY0LnRydW5jX3NhdF9mMzJfdQBpMzIudHJ1bmNfc2F0X2YzMl91AGYzMng0LmRpdgBmNjQuc3FydABmMzIuc3FydABnZXRfbG9jYWwAaTY0LnN0b3JlMTYAaTMyLnN0b3JlMTYAZjY0LmNvbnZlcnRfaTY0X3UAZjMyLmNvbnZlcnRfaTY0X3UAaTY0LmV4dGVuZF9zL2kzMgBpNjQuZXh0ZW5kX3UvaTMyAGk2NC5hdG9taWMucm13MTYuYWRkX3UAaTMyLmF0b21pYy5ybXcxNi5hZGRfdQBmNjQuZ3QAZjMyLmd0AGk2NC5hdG9taWMucm13MTYuYW5kX3UAaTMyLmF0b21pYy5ybXcxNi5hbmRfdQBpMzJ4NC5hbGxfdHJ1ZQBmNjQuZmxvb3IAZjMyLmZsb29yAGY2NC5nZQBmMzIuZ2UAZjY0LmNvbnZlcnRfcy9pMzIAZjMyLmNvbnZlcnRfcy9pMzIAZjY0LmNvbnZlcnRfdS9pMzIAZjMyLmNvbnZlcnRfdS9pMzIAaTY0LmF0b21pYy5ybXcxNi5vcl91AGkzMi5hdG9taWMucm13MTYub3JfdQBpNjQuZ3RfcwBpMzIuZ3RfcwBpOHgxNi5zdWIAaTY0Lmd0X3UAaTMyLmd0X3UAaTY0LmdlX3MAaTMyLmdlX3MAaTY0LmdlX3UAaTMyLmdlX3UAaTh4MTYubmUAaTY0LmF0b21pYy5sb2FkOF91AGkzMi5hdG9taWMubG9hZDhfdQBpNjQuYXRvbWljLmxvYWQzMl91AGk4eDE2Lmx0X3MAaTh4MTYubHRfdQBpOHgxNi5sZV9zAGk4eDE2LmxlX3UAaTY0LmF0b21pYy5zdG9yZTE2AGkzMi5hdG9taWMuc3RvcmUxNgBpNjQuc2hyX3MAaTMyLnNocl9zAGk2NC5zaHJfdQBpMzIuc2hyX3UAZjY0eDIuc3BsYXQAaTY0LmV4dGVuZDMyX3MAaTY0eDIuc3BsYXQAaTY0LnNobABpMzIuc2hsAGYzMng0Lmd0AGk4eDE2Lm11bABpNjQuZXh0ZW5kX2kzMl9zAGk2NC5leHRlbmRfaTMyX3UAZjMyeDQuZ2UAaTMyeDQuZ3RfcwBpMzJ4NC5ndF91AGkzMng0LmdlX3MAdjEyOC54b3IAaTMyeDQuZ2VfdQBpOHgxNi5hZGQAZjY0eDIuc3FydABpNjQuYXRvbWljLnJtdzMyLnhjaGdfdQBpNjQuYXRvbWljLnJtdzguY21weGNoZ191AGkzMi5hdG9taWMucm13OC5jbXB4Y2hnX3UAZjY0Lm5lZwBmMzIubmVnAGk2NC5leHRlbmQxNl9zAGkzMi5leHRlbmQxNl9zAGk2NC54b3IAaTMyLnhvcgBpNjQuYXRvbWljLnJtdzgub3JfdQBpMzIuYXRvbWljLnJtdzgub3JfdQBpMTZ4OC5zdWIAYW55ZnVuYwBpMTZ4OC5uZQBpNjQudHJ1bmNfc2F0X2Y2NF9zAGkzMi50cnVuY19zYXRfZjY0X3MAaTY0LnRydW5jX3NhdF9mNjRfdQBpMzIudHJ1bmNfc2F0X2Y2NF91AGk2NC5hdG9taWMucm13MzIueG9yX3UAaTE2eDgubHRfcwBpMTZ4OC5sdF91AGkxNng4LmxlX3MAaTE2eDgubGVfdQBpNjQuZXh0ZW5kOF9zAGkzMi5leHRlbmQ4X3MAdjh4MTYuc3dpenpsZQBzZXRfZ2xvYmFsAGk2NHgyLnNocl9zAGk2NHgyLnNocl91AGk4eDE2LnN1Yl9zYXR1cmF0ZV9zAGk4eDE2LnN1Yl9zYXR1cmF0ZV91AGYzMi5yZWludGVycHJldF9pMzIAaTE2eDgubXVsAGk4eDE2LmFsbF90cnVlAGk2NHgyLnNobABpNjQudHJ1bmNfczpzYXQvZjMyAGkzMi50cnVuY19zOnNhdC9mMzIAaTY0LnRydW5jX3U6c2F0L2YzMgBpMzIudHJ1bmNfdTpzYXQvZjMyAGY2NC5jb252ZXJ0X3MvaTY0AGYzMi5jb252ZXJ0X3MvaTY0AGY2NC5jb252ZXJ0X3UvaTY0AGYzMi5jb252ZXJ0X3UvaTY0AGYzMng0LnNwbGF0AGkxNng4LmFkZABpMzJ4NC5zcGxhdABmNjR4Mi5uZWcAaTY0eDIubmVnAGYzMi5yZWludGVycHJldC9pMzIAZjY0eDIuZXh0cmFjdF9sYW5lAGk2NHgyLmxvYWRfc3BsYXQAaTY0eDIuZXh0cmFjdF9sYW5lAGY2NC5wcm9tb3RlX2YzMgBmNjQucmVpbnRlcnByZXRfaTY0AGYzMng0LnNxcnQAaTY0LnRydW5jX3M6c2F0L2Y2NABpMzIudHJ1bmNfczpzYXQvZjY0AGk2NC50cnVuY191OnNhdC9mNjQAaTMyLnRydW5jX3U6c2F0L2Y2NABpOHgxNi5hZGRfc2F0dXJhdGVfcwBpOHgxNi5hZGRfc2F0dXJhdGVfdQBpNjR4Mi50cnVuY19zYXRfZjY0eDJfcwBpNjR4Mi50cnVuY19zYXRfZjY0eDJfdQBmNjQucHJvbW90ZS9mMzIAZjY0LnJlaW50ZXJwcmV0L2k2NABmNjQubWF4AGYzMi5tYXgAaTY0LmF0b21pYy5ybXcxNi54Y2hnX3UAaTMyLmF0b21pYy5ybXcxNi54Y2hnX3UAaTh4MTYuZ3RfcwBmNjR4Mi5yZXBsYWNlX2xhbmUAaTh4MTYuZ3RfdQBpNjR4Mi5yZXBsYWNlX2xhbmUAaTh4MTYuZ2VfcwBpOHgxNi5nZV91AGk2NHgyLmFueV90cnVlAGk2NC5hdG9taWMucm13OC54b3JfdQBpMzIuYXRvbWljLnJtdzgueG9yX3UAaTE2eDguc3ViX3NhdHVyYXRlX3MAaTE2eDguc3ViX3NhdHVyYXRlX3UAZjY0LmVxAGYzMi5lcQBpMTZ4OC5hbGxfdHJ1ZQBpNjQuZXEAaTMyLmVxAGk2NC5hdG9taWMucm13MTYueG9yX3UAaTMyLmF0b21pYy5ybXcxNi54b3JfdQBpMzJ4NC5zaHJfcwBpMzJ4NC5zaHJfdQBpMzJ4NC5zaGwAaTMyeDQudHJ1bmNfc2F0X2YzMng0X3MAaTMyeDQudHJ1bmNfc2F0X2YzMng0X3UAaTY0LmF0b21pYy5zdG9yZTgAaTMyLmF0b21pYy5zdG9yZTgAZjMyeDQubmVnAGkzMng0Lm5lZwBpNjQucG9wY250AGkzMi5wb3BjbnQAZjMyeDQuZXh0cmFjdF9sYW5lAGkzMng0LmxvYWRfc3BsYXQAaTMyeDQuZXh0cmFjdF9sYW5lAGkxNng4LmFkZF9zYXR1cmF0ZV9zAGkxNng4LmFkZF9zYXR1cmF0ZV91AGY2NHgyLm1heABpMTZ4OC5ndF9zAGkxNng4Lmd0X3UAaTE2eDguZ2VfcwBpMTZ4OC5nZV91AGk4eDE2LnNwbGF0AGYzMng0LnJlcGxhY2VfbGFuZQBpMzJ4NC5yZXBsYWNlX2xhbmUAaTMyeDQuYW55X3RydWUAZ2V0X2dsb2JhbABmNjR4Mi5lcQBpMzIucmVpbnRlcnByZXRfZjMyAGkzMi5yZWludGVycHJldC9mMzIAaTY0LmF0b21pYy5ybXcueG9yAGkzMi5hdG9taWMucm13LnhvcgBiaW5hcnkAaTY0LnJlaW50ZXJwcmV0X2Y2NABpMzIud3JhcF9pNjQAaTh4MTYuc2hyX3MAaTh4MTYuc2hyX3UAaTE2eDguc3BsYXQAaTY0LnJlaW50ZXJwcmV0L2Y2NABmMzJ4NC5tYXgAaTh4MTYuc2hsAGkzMi53cmFwL2k2NABmMzJ4NC5jb252ZXJ0X2kzMng0X3MAZjMyeDQuY29udmVydF9pMzJ4NF91AGk4eDE2Lm5lZwBpOHgxNi5sb2FkX3NwbGF0AGk4eDE2LmV4dHJhY3RfbGFuZV9zAGk4eDE2LmV4dHJhY3RfbGFuZV91AGYzMng0LmVxAGkzMng0LmVxAGY2NHgyLmNvbnZlcnRfaTY0eDJfcwBmNjR4Mi5jb252ZXJ0X2k2NHgyX3UAaTh4MTYucmVwbGFjZV9sYW5lAGk4eDE2LmFueV90cnVlAGkxNng4LnNocl9zAGkxNng4LnNocl91AGkxNng4LnNobABjdXJyZW50X21lbW9yeQBpMTZ4OC5uZWcAaTE2eDgubG9hZF9zcGxhdABpNjQuYXRvbWljLnJtdzgueGNoZ191AGkzMi5hdG9taWMucm13OC54Y2hnX3UAaTE2eDguZXh0cmFjdF9sYW5lX3MAaTE2eDguZXh0cmFjdF9sYW5lX3UAYXRvbWljLm5vdGlmeQBpNjQuYXRvbWljLnJtdy5jbXB4Y2hnAGkzMi5hdG9taWMucm13LmNtcHhjaGcAaTE2eDgucmVwbGFjZV9sYW5lAGkxNng4LmFueV90cnVlAGY2NC5jb3B5c2lnbgBmMzIuY29weXNpZ24AaTh4MTYuZXEAZ3Jvd19tZW1vcnkAaTE2eDguZXEAaTY0LmF0b21pYy5ybXcueGNoZwBpMzIuYXRvbWljLnJtdy54Y2hnAG5ld2xpbmUgaW4gc3RyaW5nAGJhZCBlc2NhcGUgIiUuKnMiAGFubm90YXRpb25zIG5vdCBlbmFibGVkOiAlcwB1bmV4cGVjdGVkIHRva2VuICVzLCBleHBlY3RlZCAlcy4AdW5leHBlY3RlZCB0b2tlbiAlcy4Ab3Bjb2RlIG5vdCBhbGxvd2VkOiAlcwAgb3IgACAoZS5nLiAAdW5leHBlY3RlZCB0b2tlbiAiJXMiJXMuAGludmFsaWQgaW50ICIlLipzIgBhIG51bWVyaWMgaW5kZXgAYSBuYW1lADEyIG9yICRmb28AYW4gb2Zmc2V0IGV4cHIAKGkzMi5jb25zdCAxMjMpAGFuIGV4cHIAdGhlbiBibG9jawAodGhlbiAuLi4pAHVuZXhwZWN0ZWQgbGFiZWwgIiVzIgBtaXNtYXRjaGluZyBsYWJlbCAiJXMiICE9ICIlcyIAYSBuYXR1cmFsIG51bWJlciBpbiByYW5nZSBbMCwgMzIpAGludmFsaWQgbGl0ZXJhbCAiJS4qcyIAc2h1ZmZsZSBpbmRleCAiJS4qcyIgb3V0LW9mLXJhbmdlIFswLCAzMikAYSBuYXR1cmFsIG51bWJlcgAxMjMAYSBudW1lcmljIGxpdGVyYWwAMTIzLCAtNDUsIDYuN2U4AFVuZXhwZWN0ZWQgdHlwZSBhdCBzdGFydCBvZiBzaW1kIGNvbnN0YW50LiBFeHBlY3RlZCBvbmUgb2Y6IGk4eDE2LCBpMTZ4OCwgaTMyeDQsIGk2NHgyLCBmMzJ4NCwgZjY0eDIuIEZvdW5kICIlcyIuAGEgTmF0IG9yIEludGVnZXIgbGl0ZXJhbABhIEZsb2F0IGxpdGVyYWwANDIuMABpbnZhbGlkIGFsaWdubWVudCAiJS4qcyIAYWxpZ25tZW50IG11c3QgYmUgcG93ZXItb2YtdHdvAGludmFsaWQgb2Zmc2V0ICIlLipzIgBvZmZzZXQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMHhmZmZmZmZmZgB2YWx1ZSB0eXBlIG5vdCBhbGxvd2VkOiAlcwBhIHF1b3RlZCBzdHJpbmcAImZvbyIAcXVvdGVkIHN0cmluZyBoYXMgYW4gaW52YWxpZCB1dGYtOCBlbmNvZGluZwBhIG1vZHVsZSBmaWVsZABONHdhYnQxMl9HTE9CQUxfX05fMTM1UmVzb2x2ZUZ1bmNUeXBlc0V4cHJWaXNpdG9yRGVsZWdhdGVFAGltcG9ydHMgbXVzdCBvY2N1ciBiZWZvcmUgYWxsIG5vbi1pbXBvcnQgZGVmaW5pdGlvbnMAYW4gZXh0ZXJuYWwga2luZAA8dGV4dD4AZXJyb3IgaW4gYmluYXJ5IG1vZHVsZTogJXMAZXJyb3IgaW4gYmluYXJ5IG1vZHVsZTogQDB4JTA4eng6ICVzAGEgYmluYXJ5IG1vZHVsZQBhIHRleHQgbW9kdWxlAE40d2FidDEzTW9kdWxlQ29tbWFuZEUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFMEVFRQBONHdhYnQ3Q29tbWFuZEUATjR3YWJ0MTZUZXh0U2NyaXB0TW9kdWxlRQBONHdhYnQxN1NjcmlwdE1vZHVsZU1peGluSUxOU18xNlNjcmlwdE1vZHVsZVR5cGVFMEVFRQBONHdhYnQxMlNjcmlwdE1vZHVsZUUATjR3YWJ0MTZEYXRhU2NyaXB0TW9kdWxlSUxOU18xNlNjcmlwdE1vZHVsZVR5cGVFMkVFRQBONHdhYnQxN1NjcmlwdE1vZHVsZU1peGluSUxOU18xNlNjcmlwdE1vZHVsZVR5cGVFMkVFRQBONHdhYnQxNkRhdGFTY3JpcHRNb2R1bGVJTE5TXzE2U2NyaXB0TW9kdWxlVHlwZUUxRUVFAE40d2FidDE3U2NyaXB0TW9kdWxlTWl4aW5JTE5TXzE2U2NyaXB0TW9kdWxlVHlwZUUxRUVFAGEgY29tbWFuZABONHdhYnQxNVJlZ2lzdGVyQ29tbWFuZEUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFMkVFRQBONHdhYnQ5R2V0QWN0aW9uRQBONHdhYnQxMUFjdGlvbk1peGluSUxOU18xMEFjdGlvblR5cGVFMUVFRQBONHdhYnQ2QWN0aW9uRQBONHdhYnQxMkludm9rZUFjdGlvbkUATjR3YWJ0MTFBY3Rpb25NaXhpbklMTlNfMTBBY3Rpb25UeXBlRTBFRUUATjR3YWJ0MTdBY3Rpb25Db21tYW5kQmFzZUlMTlNfMTFDb21tYW5kVHlwZUUxRUVFAE40d2FidDEyQ29tbWFuZE1peGluSUxOU18xMUNvbW1hbmRUeXBlRTFFRUUATjR3YWJ0MTlBc3NlcnRNb2R1bGVDb21tYW5kSUxOU18xMUNvbW1hbmRUeXBlRTVFRUUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFNUVFRQBONHdhYnQyMUFzc2VydFRyYXBDb21tYW5kQmFzZUlMTlNfMTFDb21tYW5kVHlwZUUxMEVFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUUxMEVFRQBONHdhYnQxOUFzc2VydE1vZHVsZUNvbW1hbmRJTE5TXzExQ29tbWFuZFR5cGVFNkVFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUU2RUVFAE40d2FidDE3QWN0aW9uQ29tbWFuZEJhc2VJTE5TXzExQ29tbWFuZFR5cGVFOEVFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUU4RUVFAE40d2FidDE3QWN0aW9uQ29tbWFuZEJhc2VJTE5TXzExQ29tbWFuZFR5cGVFOUVFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUU5RUVFAE40d2FidDE5QXNzZXJ0UmV0dXJuQ29tbWFuZEUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFN0VFRQBONHdhYnQxOUFzc2VydE1vZHVsZUNvbW1hbmRJTE5TXzExQ29tbWFuZFR5cGVFM0VFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUUzRUVFAE40d2FidDE5QXNzZXJ0TW9kdWxlQ29tbWFuZElMTlNfMTFDb21tYW5kVHlwZUU0RUVFAE40d2FidDEyQ29tbWFuZE1peGluSUxOU18xMUNvbW1hbmRUeXBlRTRFRUUATjR3YWJ0MjFBc3NlcnRUcmFwQ29tbWFuZEJhc2VJTE5TXzExQ29tbWFuZFR5cGVFMTFFRUUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFMTFFRUUAKDsldTspACVsbHUAb2Zmc2V0PSV1AGFsaWduPSV1ACAldQAgOzsgbGFiZWwgPSBAJXUAJWxsZAAoOz0lZzspAGkzMng0IDB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eAAldSAoO0AldTspACV1ICg7IElOVkFMSUQgOykATjR3YWJ0MTJfR0xPQkFMX19OXzE5V2F0V3JpdGVyMTlFeHByVmlzaXRvckRlbGVnYXRlRQBJbnZhbGlkIE9wY29kZSBmb3IgZXhwciB0eXBlOiAlcwoAYmFkIGV4cHIgdHlwZTogJXMKAERhdGEAQ29kZQBEYXRhQ291bnQARWxlbQBTdGFydABFeHBvcnQARXZlbnQAR2xvYmFsAE1lbW9yeQBUYWJsZQBGdW5jdGlvbgBJbXBvcnQAVHlwZQBDdXN0b20AbWFnaWMAdWludDMyX3QAdW5hYmxlIHRvIHJlYWQgJXM6ICVzAGJhZCBtYWdpYyB2YWx1ZQB2ZXJzaW9uAGJhZCB3YXNtIGZpbGUgdmVyc2lvbjogJSN4IChleHBlY3RlZCAlI3gpAEJlZ2luTW9kdWxlIGNhbGxiYWNrIGZhaWxlZABmdW5jdGlvbiBzaWduYXR1cmUgY291bnQgIT0gZnVuY3Rpb24gYm9keSBjb3VudABFbmRNb2R1bGUgY2FsbGJhY2sgZmFpbGVkAHNlY3Rpb24gY29kZQB1bmFibGUgdG8gcmVhZCB1MzIgbGViMTI4OiAlcwBzZWN0aW9uIHNpemUAaW52YWxpZCBzZWN0aW9uIGNvZGU6ICV1AGludmFsaWQgc2VjdGlvbiBzaXplOiBleHRlbmRzIHBhc3QgZW5kAHNlY3Rpb24gJXMgb3V0IG9mIG9yZGVyACVzIHNlY3Rpb24gY2FuIG5vdCBvY2N1ciBhZnRlciBOYW1lIHNlY3Rpb24AQmVnaW5TZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABzZWN0aW9uIG5hbWUAQmVnaW5DdXN0b21TZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABuYW1lAEJlZ2luTmFtZXNTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABuYW1lIHR5cGUAZHVwbGljYXRlIHN1Yi1zZWN0aW9uAG91dC1vZi1vcmRlciBzdWItc2VjdGlvbgBzdWJzZWN0aW9uIHNpemUAaW52YWxpZCBzdWItc2VjdGlvbiBzaXplOiBleHRlbmRzIHBhc3QgZW5kAE9uTW9kdWxlTmFtZVN1YnNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAG1vZHVsZSBuYW1lAE9uTW9kdWxlTmFtZSBjYWxsYmFjayBmYWlsZWQAT25GdW5jdGlvbk5hbWVTdWJzZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABuYW1lIGNvdW50AGludmFsaWQgJXMgJXUsIG9ubHkgJXpkIGJ5dGVzIGxlZnQgaW4gc2VjdGlvbgBPbkZ1bmN0aW9uTmFtZXNDb3VudCBjYWxsYmFjayBmYWlsZWQAZnVuY3Rpb24gaW5kZXgAZHVwbGljYXRlIGZ1bmN0aW9uIG5hbWU6ICV1AGZ1bmN0aW9uIGluZGV4IG91dCBvZiBvcmRlcjogJXUAaW52YWxpZCBmdW5jdGlvbiBpbmRleDogJXUAZnVuY3Rpb24gbmFtZQBPbkZ1bmN0aW9uTmFtZSBjYWxsYmFjayBmYWlsZWQAT25Mb2NhbE5hbWVTdWJzZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABmdW5jdGlvbiBjb3VudABPbkxvY2FsTmFtZUZ1bmN0aW9uQ291bnQgY2FsbGJhY2sgZmFpbGVkAGxvY2FscyBmdW5jdGlvbiBpbmRleCBvdXQgb2Ygb3JkZXI6ICV1AGxvY2FsIGNvdW50AE9uTG9jYWxOYW1lTG9jYWxDb3VudCBjYWxsYmFjayBmYWlsZWQAbmFtZWQgaW5kZXgAZHVwbGljYXRlIGxvY2FsIGluZGV4OiAldQBsb2NhbCBpbmRleCBvdXQgb2Ygb3JkZXI6ICV1AE9uTG9jYWxOYW1lIGNhbGxiYWNrIGZhaWxlZAB1bmZpbmlzaGVkIHN1Yi1zZWN0aW9uIChleHBlY3RlZCBlbmQ6IDB4JXp4KQBFbmROYW1lc1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGR5bGluawBCZWdpbkR5bGlua1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAG1lbV9zaXplAG1lbV9hbGlnbgB0YWJsZV9zaXplAHRhYmxlX2FsaWduAE9uRHlsaW5rSW5mbyBjYWxsYmFjayBmYWlsZWQAbmVlZGVkX2R5bmxpYnMAT25EeWxpbmtOZWVkZWRDb3VudCBjYWxsYmFjayBmYWlsZWQAZHlsaWIgc29fbmFtZQBPbkR5bGlua05lZWRlZCBjYWxsYmFjayBmYWlsZWQARW5kRHlsaW5rU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAcmVsb2MAQmVnaW5SZWxvY1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAHNlY3Rpb24gaW5kZXgAcmVsb2NhdGlvbiBjb3VudABPblJlbG9jQ291bnQgY2FsbGJhY2sgZmFpbGVkAHJlbG9jYXRpb24gdHlwZQBpbmRleABhZGRlbmQAdW5hYmxlIHRvIHJlYWQgaTMyIGxlYjEyODogJXMAT25SZWxvYyBjYWxsYmFjayBmYWlsZWQARW5kUmVsb2NTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABsaW5raW5nAEJlZ2luTGlua2luZ1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGludmFsaWQgbGlua2luZyBtZXRhZGF0YSB2ZXJzaW9uOiAldQBzeW0gY291bnQAT25TeW1ib2xDb3VudCBjYWxsYmFjayBmYWlsZWQAc3ltIHR5cGUAc3ltIGZsYWdzAE9uU3ltYm9sIGNhbGxiYWNrIGZhaWxlZABzeW1ib2wgbmFtZQBPbkZ1bmN0aW9uU3ltYm9sIGNhbGxiYWNrIGZhaWxlZABPbkdsb2JhbFN5bWJvbCBjYWxsYmFjayBmYWlsZWQAT25FdmVudFN5bWJvbCBjYWxsYmFjayBmYWlsZWQAc2VnbWVudABzaXplAE9uRGF0YVN5bWJvbCBjYWxsYmFjayBmYWlsZWQAT25TZWN0aW9uU3ltYm9sIGNhbGxiYWNrIGZhaWxlZABpbmZvIGNvdW50AE9uU2VnbWVudEluZm9Db3VudCBjYWxsYmFjayBmYWlsZWQAc2VnbWVudCBuYW1lAHNlZ21lbnQgYWxpZ25tZW50AHNlZ21lbnQgZmxhZ3MAT25TZWdtZW50SW5mbyBjYWxsYmFjayBmYWlsZWQAT25Jbml0RnVuY3Rpb25Db3VudCBjYWxsYmFjayBmYWlsZWQAcHJpb3JpdHkAT25Jbml0RnVuY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGNvdW50AE9uQ29tZGF0Q291bnQgY2FsbGJhY2sgZmFpbGVkAGNvbWRhdCBuYW1lAGZsYWdzAGVudHJ5IGNvdW50AE9uQ29tZGF0QmVnaW4gY2FsbGJhY2sgZmFpbGVkAGtpbmQAT25Db21kYXRFbnRyeSBjYWxsYmFjayBmYWlsZWQARW5kTGlua2luZ1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEVuZEN1c3RvbVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luVHlwZVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAHR5cGUgY291bnQAT25UeXBlQ291bnQgY2FsbGJhY2sgZmFpbGVkAHR5cGUgZm9ybQAtAHVuZXhwZWN0ZWQgdHlwZSBmb3JtIChnb3QgJXMlI3gpAGZ1bmN0aW9uIHBhcmFtIGNvdW50AGZ1bmN0aW9uIHBhcmFtIHR5cGUAZXhwZWN0ZWQgdmFsaWQgcGFyYW0gdHlwZSAoZ290ICVzJSN4KQBmdW5jdGlvbiByZXN1bHQgY291bnQAcmVzdWx0IGNvdW50IG11c3QgYmUgMCBvciAxAGZ1bmN0aW9uIHJlc3VsdCB0eXBlAGV4cGVjdGVkIHZhbGlkIHJlc3VsdCB0eXBlIChnb3QgJXMlI3gpAE9uVHlwZSBjYWxsYmFjayBmYWlsZWQARW5kVHlwZVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luSW1wb3J0U2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAaW1wb3J0IGNvdW50AE9uSW1wb3J0Q291bnQgY2FsbGJhY2sgZmFpbGVkAGltcG9ydCBtb2R1bGUgbmFtZQBpbXBvcnQgZmllbGQgbmFtZQBpbXBvcnQga2luZAB1aW50OF90AGltcG9ydCBzaWduYXR1cmUgaW5kZXgAaW52YWxpZCBpbXBvcnQgc2lnbmF0dXJlIGluZGV4AE9uSW1wb3J0IGNhbGxiYWNrIGZhaWxlZABPbkltcG9ydEZ1bmMgY2FsbGJhY2sgZmFpbGVkAE9uSW1wb3J0VGFibGUgY2FsbGJhY2sgZmFpbGVkAE9uSW1wb3J0TWVtb3J5IGNhbGxiYWNrIGZhaWxlZABPbkltcG9ydEdsb2JhbCBjYWxsYmFjayBmYWlsZWQAaW52YWxpZCBpbXBvcnQgZXZlbnQga2luZDogZXhjZXB0aW9ucyBub3QgYWxsb3dlZABPbkltcG9ydEV2ZW50IGNhbGxiYWNrIGZhaWxlZABFbmRJbXBvcnRTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABCZWdpbkZ1bmN0aW9uU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAZnVuY3Rpb24gc2lnbmF0dXJlIGNvdW50AE9uRnVuY3Rpb25Db3VudCBjYWxsYmFjayBmYWlsZWQAZnVuY3Rpb24gc2lnbmF0dXJlIGluZGV4AGludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGluZGV4OiAldQBPbkZ1bmN0aW9uIGNhbGxiYWNrIGZhaWxlZABFbmRGdW5jdGlvblNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luVGFibGVTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZAB0YWJsZSBjb3VudAB0YWJsZSBjb3VudCAoJXUpIG11c3QgYmUgMCBvciAxAE9uVGFibGVDb3VudCBjYWxsYmFjayBmYWlsZWQAT25UYWJsZSBjYWxsYmFjayBmYWlsZWQARW5kVGFibGVTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABCZWdpbk1lbW9yeVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAG1lbW9yeSBjb3VudABtZW1vcnkgY291bnQgbXVzdCBiZSAwIG9yIDEAT25NZW1vcnlDb3VudCBjYWxsYmFjayBmYWlsZWQAT25NZW1vcnkgY2FsbGJhY2sgZmFpbGVkAEVuZE1lbW9yeVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luR2xvYmFsU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAZ2xvYmFsIGNvdW50AE9uR2xvYmFsQ291bnQgY2FsbGJhY2sgZmFpbGVkAEJlZ2luR2xvYmFsIGNhbGxiYWNrIGZhaWxlZABCZWdpbkdsb2JhbEluaXRFeHByIGNhbGxiYWNrIGZhaWxlZABFbmRHbG9iYWxJbml0RXhwciBjYWxsYmFjayBmYWlsZWQARW5kR2xvYmFsIGNhbGxiYWNrIGZhaWxlZABFbmRHbG9iYWxTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABCZWdpbkV4cG9ydFNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGV4cG9ydCBjb3VudABPbkV4cG9ydENvdW50IGNhbGxiYWNrIGZhaWxlZABleHBvcnQgaXRlbSBuYW1lAGV4cG9ydCBraW5kAGludmFsaWQgZXhwb3J0IGV4dGVybmFsIGtpbmQ6ICVkAGV4cG9ydCBpdGVtIGluZGV4AGludmFsaWQgZXhwb3J0IGZ1bmMgaW5kZXg6ICV1AGludmFsaWQgZXhwb3J0IHRhYmxlIGluZGV4OiAldQBpbnZhbGlkIGV4cG9ydCBtZW1vcnkgaW5kZXg6ICV1AGludmFsaWQgZXhwb3J0IGdsb2JhbCBpbmRleDogJXUAaW52YWxpZCBleHBvcnQgZXZlbnQga2luZDogZXhjZXB0aW9ucyBub3QgYWxsb3dlZABpbnZhbGlkIGV4cG9ydCBldmVudCBpbmRleDogJXUAT25FeHBvcnQgY2FsbGJhY2sgZmFpbGVkAEVuZEV4cG9ydFNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luU3RhcnRTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABzdGFydCBmdW5jdGlvbiBpbmRleABpbnZhbGlkIHN0YXJ0IGZ1bmN0aW9uIGluZGV4OiAldQBPblN0YXJ0RnVuY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEVuZFN0YXJ0U2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAQmVnaW5FbGVtU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAZWxlbSBzZWdtZW50IGNvdW50AE9uRWxlbVNlZ21lbnRDb3VudCBjYWxsYmFjayBmYWlsZWQAZWxlbSBzZWN0aW9uIHdpdGhvdXQgdGFibGUgc2VjdGlvbgBlbGVtIHNlZ21lbnQgZmxhZ3MAaW52YWxpZCBlbGVtIHNlZ21lbnQgZmxhZ3MAZWxlbSBzZWdtZW50IHRhYmxlIGluZGV4AHRhYmxlIGVsZW0gdHlwZQBzZWdtZW50IGVsZW0gdHlwZSBtdXN0IGJ5IGZ1bmNyZWYgb3IgYW55cmVmAEJlZ2luRWxlbVNlZ21lbnQgY2FsbGJhY2sgZmFpbGVkAEJlZ2luRWxlbVNlZ21lbnRJbml0RXhwciBjYWxsYmFjayBmYWlsZWQARW5kRWxlbVNlZ21lbnRJbml0RXhwciBjYWxsYmFjayBmYWlsZWQAZWxlbSBleHByIGNvdW50AE9uRWxlbVNlZ21lbnRFbGVtRXhwckNvdW50IGNhbGxiYWNrIGZhaWxlZABlbGVtIGV4cHIgb3Bjb2RlAGVsZW0gZXhwciBmdW5jIGluZGV4AGV4cGVjdGVkIHJlZi5udWxsIG9yIHJlZi5mdW5jIGluIHBhc3NpdmUgZWxlbWVudCBzZWdtZW50AG9wY29kZQBPbkVsZW1TZWdtZW50RWxlbUV4cHJfUmVmRnVuYyBjYWxsYmFjayBmYWlsZWQAT25FbGVtU2VnbWVudEVsZW1FeHByX1JlZk51bGwgY2FsbGJhY2sgZmFpbGVkAGV4cGVjdGVkIEVORCBvcGNvZGUgYWZ0ZXIgZWxlbWVudCBleHByZXNzaW9uAEVuZEVsZW1TZWdtZW50IGNhbGxiYWNrIGZhaWxlZABFbmRFbGVtU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAQmVnaW5Db2RlU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAZnVuY3Rpb24gYm9keSBjb3VudABPbkZ1bmN0aW9uQm9keUNvdW50IGNhbGxiYWNrIGZhaWxlZABmdW5jdGlvbiBib2R5IHNpemUAQmVnaW5GdW5jdGlvbkJvZHkgY2FsbGJhY2sgZmFpbGVkAGxvY2FsIGRlY2xhcmF0aW9uIGNvdW50AE9uTG9jYWxEZWNsQ291bnQgY2FsbGJhY2sgZmFpbGVkAGxvY2FsIHR5cGUgY291bnQAbG9jYWwgY291bnQgbXVzdCBiZSA8IDB4MTAwMDAwMDAAbG9jYWwgdHlwZQBleHBlY3RlZCB2YWxpZCBsb2NhbCB0eXBlAE9uTG9jYWxEZWNsIGNhbGxiYWNrIGZhaWxlZABFbmRGdW5jdGlvbkJvZHkgY2FsbGJhY2sgZmFpbGVkAEVuZENvZGVTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABCZWdpbkRhdGFTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABkYXRhIHNlZ21lbnQgY291bnQAT25EYXRhU2VnbWVudENvdW50IGNhbGxiYWNrIGZhaWxlZABkYXRhIHNlY3Rpb24gd2l0aG91dCBtZW1vcnkgc2VjdGlvbgBkYXRhIHNlZ21lbnQgY291bnQgZG9lcyBub3QgZXF1YWwgY291bnQgaW4gRGF0YUNvdW50IHNlY3Rpb24AZGF0YSBzZWdtZW50IGZsYWdzAGludmFsaWQgZGF0YSBzZWdtZW50IGZsYWdzAGRhdGEgc2VnbWVudCBtZW1vcnkgaW5kZXgAQmVnaW5EYXRhU2VnbWVudCBjYWxsYmFjayBmYWlsZWQAQmVnaW5EYXRhU2VnbWVudEluaXRFeHByIGNhbGxiYWNrIGZhaWxlZABFbmREYXRhU2VnbWVudEluaXRFeHByIGNhbGxiYWNrIGZhaWxlZABkYXRhIHNlZ21lbnQgZGF0YQBkYXRhIHNpemUAdW5hYmxlIHRvIHJlYWQgZGF0YTogJXMAT25EYXRhU2VnbWVudERhdGEgY2FsbGJhY2sgZmFpbGVkAEVuZERhdGFTZWdtZW50IGNhbGxiYWNrIGZhaWxlZABFbmREYXRhU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAQmVnaW5FdmVudFNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGV2ZW50IGNvdW50AE9uRXZlbnRDb3VudCBjYWxsYmFjayBmYWlsZWQAT25FdmVudFR5cGUgY2FsbGJhY2sgZmFpbGVkAEVuZEV2ZW50U2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAQmVnaW5EYXRhQ291bnRTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABkYXRhIGNvdW50AE9uRGF0YUNvdW50IGNhbGxiYWNrIGZhaWxlZABFbmREYXRhQ291bnRTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZAB1bmZpbmlzaGVkIHNlY3Rpb24gKGV4cGVjdGVkIGVuZDogMHglengpAE9uT3Bjb2RlIGNhbGxiYWNrIGZhaWxlZABPblVucmVhY2hhYmxlRXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVCYXJlIGNhbGxiYWNrIGZhaWxlZABibG9jayBzaWduYXR1cmUgdHlwZQBleHBlY3RlZCB2YWxpZCBibG9jayBzaWduYXR1cmUgdHlwZQBPbkJsb2NrRXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVCbG9ja1NpZyBjYWxsYmFjayBmYWlsZWQAbG9vcCBzaWduYXR1cmUgdHlwZQBPbkxvb3BFeHByIGNhbGxiYWNrIGZhaWxlZABpZiBzaWduYXR1cmUgdHlwZQBPbklmRXhwciBjYWxsYmFjayBmYWlsZWQAT25FbHNlRXhwciBjYWxsYmFjayBmYWlsZWQAT25TZWxlY3RFeHByIGNhbGxiYWNrIGZhaWxlZABiciBkZXB0aABPbkJyRXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVJbmRleCBjYWxsYmFjayBmYWlsZWQAYnJfaWYgZGVwdGgAT25CcklmRXhwciBjYWxsYmFjayBmYWlsZWQAYnJfdGFibGUgdGFyZ2V0IGNvdW50AGJyX3RhYmxlIHRhcmdldCBkZXB0aABicl90YWJsZSBkZWZhdWx0IHRhcmdldCBkZXB0aABPbkJyVGFibGVFeHByIGNhbGxiYWNrIGZhaWxlZABPblJldHVybkV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uTm9wRXhwciBjYWxsYmFjayBmYWlsZWQAT25Ecm9wRXhwciBjYWxsYmFjayBmYWlsZWQAT25FbmRGdW5jIGNhbGxiYWNrIGZhaWxlZABPbkVuZEV4cHIgY2FsbGJhY2sgZmFpbGVkAGkzMi5jb25zdCB2YWx1ZQBPbkkzMkNvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVVaW50MzIgY2FsbGJhY2sgZmFpbGVkAGk2NC5jb25zdCB2YWx1ZQB1bmFibGUgdG8gcmVhZCBpNjQgbGViMTI4OiAlcwBPbkk2NENvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVVaW50NjQgY2FsbGJhY2sgZmFpbGVkAGYzMi5jb25zdCB2YWx1ZQBmbG9hdABPbkYzMkNvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVGMzIgY2FsbGJhY2sgZmFpbGVkAGY2NC5jb25zdCB2YWx1ZQBkb3VibGUAT25GNjRDb25zdEV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uT3Bjb2RlRjY0IGNhbGxiYWNrIGZhaWxlZAB2MTI4LmNvbnN0IHZhbHVlAE9uVjEyOENvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVWMTI4IGNhbGxiYWNrIGZhaWxlZABnbG9iYWwuZ2V0IGdsb2JhbCBpbmRleABPbkdsb2JhbEdldEV4cHIgY2FsbGJhY2sgZmFpbGVkAGxvY2FsLmdldCBsb2NhbCBpbmRleABPbkxvY2FsR2V0RXhwciBjYWxsYmFjayBmYWlsZWQAZ2xvYmFsLnNldCBnbG9iYWwgaW5kZXgAT25HbG9iYWxTZXRFeHByIGNhbGxiYWNrIGZhaWxlZABsb2NhbC5zZXQgbG9jYWwgaW5kZXgAT25Mb2NhbFNldEV4cHIgY2FsbGJhY2sgZmFpbGVkAGNhbGwgZnVuY3Rpb24gaW5kZXgAaW52YWxpZCBjYWxsIGZ1bmN0aW9uIGluZGV4OiAldQBPbkNhbGxFeHByIGNhbGxiYWNrIGZhaWxlZABjYWxsX2luZGlyZWN0IHNpZ25hdHVyZSBpbmRleABpbnZhbGlkIGNhbGxfaW5kaXJlY3Qgc2lnbmF0dXJlIGluZGV4AGNhbGxfaW5kaXJlY3QgdGFibGUgaW5kZXgAaW52YWxpZCBjYWxsX2luZGlyZWN0IHRhYmxlIGluZGV4AGNhbGxfaW5kaXJlY3QgcmVzZXJ2ZWQAY2FsbF9pbmRpcmVjdCByZXNlcnZlZCB2YWx1ZSBtdXN0IGJlIDAAT25DYWxsSW5kaXJlY3RFeHByIGNhbGxiYWNrIGZhaWxlZABPbk9wY29kZVVpbnQzMlVpbnQzMiBjYWxsYmFjayBmYWlsZWQAaW52YWxpZCByZXR1cm5fY2FsbCBmdW5jdGlvbiBpbmRleDogJXUAT25SZXR1cm5DYWxsRXhwciBjYWxsYmFjayBmYWlsZWQAaW52YWxpZCByZXR1cm5fY2FsbF9pbmRpcmVjdCBzaWduYXR1cmUgaW5kZXgAcmV0dXJuX2NhbGxfaW5kaXJlY3QgdGFibGUgaW5kZXgAaW52YWxpZCByZXR1cm5fY2FsbF9pbmRpcmVjdCB0YWJsZSBpbmRleAByZXR1cm5fY2FsbF9pbmRpcmVjdCByZXNlcnZlZAByZXR1cm5fY2FsbF9pbmRpcmVjdCByZXNlcnZlZCB2YWx1ZSBtdXN0IGJlIDAAT25SZXR1cm5DYWxsSW5kaXJlY3RFeHByIGNhbGxiYWNrIGZhaWxlZABsb2NhbC50ZWUgbG9jYWwgaW5kZXgAT25Mb2NhbFRlZUV4cHIgY2FsbGJhY2sgZmFpbGVkAGxvYWQgYWxpZ25tZW50AGxvYWQgb2Zmc2V0AE9uTG9hZEV4cHIgY2FsbGJhY2sgZmFpbGVkAHN0b3JlIGFsaWdubWVudABzdG9yZSBvZmZzZXQAT25TdG9yZUV4cHIgY2FsbGJhY2sgZmFpbGVkAG1lbW9yeS5zaXplIHJlc2VydmVkAG1lbW9yeS5zaXplIHJlc2VydmVkIHZhbHVlIG11c3QgYmUgMABPbk1lbW9yeVNpemVFeHByIGNhbGxiYWNrIGZhaWxlZABtZW1vcnkuZ3JvdyByZXNlcnZlZABtZW1vcnkuZ3JvdyByZXNlcnZlZCB2YWx1ZSBtdXN0IGJlIDAAT25NZW1vcnlHcm93RXhwciBjYWxsYmFjayBmYWlsZWQAT25CaW5hcnlFeHByIGNhbGxiYWNrIGZhaWxlZABPbkNvbXBhcmVFeHByIGNhbGxiYWNrIGZhaWxlZABPblVuYXJ5RXhwciBjYWxsYmFjayBmYWlsZWQAT25UZXJuYXJ5RXhwciBjYWxsYmFjayBmYWlsZWQATGFuZSBpZHgAT25TaW1kTGFuZU9wRXhwciBjYWxsYmFjayBmYWlsZWQATGFuZSBpZHggWzE2XQBPblNpbWRTaHVmZmxlT3BFeHByIGNhbGxiYWNrIGZhaWxlZABPbkxvYWRTcGxhdEV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uQ29udmVydEV4cHIgY2FsbGJhY2sgZmFpbGVkAHRyeSBzaWduYXR1cmUgdHlwZQBPblRyeUV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uQ2F0Y2hFeHByIGNhbGxiYWNrIGZhaWxlZABPblJldGhyb3dFeHByIGNhbGxiYWNrIGZhaWxlZABldmVudCBpbmRleABPblRocm93RXhwciBjYWxsYmFjayBmYWlsZWQAYnJfb25fZXhuIGRlcHRoAE9uQnJPbkV4bkV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uT3Bjb2RlSW5kZXhJbmRleCBjYWxsYmFjayBmYWlsZWQAT25BdG9taWNOb3RpZnlFeHByIGNhbGxiYWNrIGZhaWxlZABPbkF0b21pY1dhaXRFeHByIGNhbGxiYWNrIGZhaWxlZABPbkF0b21pY0xvYWRFeHByIGNhbGxiYWNrIGZhaWxlZABPbkF0b21pY1N0b3JlRXhwciBjYWxsYmFjayBmYWlsZWQAbWVtb3J5IGFsaWdubWVudABtZW1vcnkgb2Zmc2V0AE9uQXRvbWljUm13RXhwciBjYWxsYmFjayBmYWlsZWQAT25BdG9taWNSbXdDbXB4Y2hnRXhwciBjYWxsYmFjayBmYWlsZWQAZWxlbSBzZWdtZW50IGluZGV4AHJlc2VydmVkIHRhYmxlIGluZGV4AHJlc2VydmVkIHZhbHVlIG11c3QgYmUgMABPblRhYmxlSW5pdEV4cHIgY2FsbGJhY2sgZmFpbGVkAHJlc2VydmVkIG1lbW9yeSBpbmRleABPbk1lbW9yeUluaXRFeHByIGNhbGxiYWNrIGZhaWxlZABzZWdtZW50IGluZGV4AE9uRGF0YURyb3BFeHByIGNhbGxiYWNrIGZhaWxlZABPbkVsZW1Ecm9wRXhwciBjYWxsYmFjayBmYWlsZWQAT25NZW1vcnlGaWxsRXhwciBjYWxsYmFjayBmYWlsZWQAT25NZW1vcnlDb3B5RXhwciBjYWxsYmFjayBmYWlsZWQAT25UYWJsZUNvcHlFeHByIGNhbGxiYWNrIGZhaWxlZAB0YWJsZSBpbmRleABPblRhYmxlR2V0RXhwciBjYWxsYmFjayBmYWlsZWQAT25UYWJsZVNldEV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uVGFibGVHcm93RXhwciBjYWxsYmFjayBmYWlsZWQAT25UYWJsZVNpemVFeHByIGNhbGxiYWNrIGZhaWxlZABPblJlZk51bGxFeHByIGNhbGxiYWNrIGZhaWxlZABPblJlZklzTnVsbEV4cHIgY2FsbGJhY2sgZmFpbGVkAGZ1bmN0aW9uIGJvZHkgbG9uZ2VyIHRoYW4gZ2l2ZW4gc2l6ZQBmdW5jdGlvbiBib2R5IG11c3QgZW5kIHdpdGggRU5EIG9wY29kZQB1bmV4cGVjdGVkIG9wY29kZQA6ACAweCV4AGluaXRfZXhwciBpMzIuY29uc3QgdmFsdWUAT25Jbml0RXhwckkzMkNvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAaW5pdF9leHByIGk2NC5jb25zdCB2YWx1ZQBPbkluaXRFeHBySTY0Q29uc3RFeHByIGNhbGxiYWNrIGZhaWxlZABpbml0X2V4cHIgZjMyLmNvbnN0IHZhbHVlAE9uSW5pdEV4cHJGMzJDb25zdEV4cHIgY2FsbGJhY2sgZmFpbGVkAGluaXRfZXhwciBmNjQuY29uc3QgdmFsdWUAT25Jbml0RXhwckY2NENvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAaW5pdF9leHByIHYxMjguY29uc3QgdmFsdWUAT25Jbml0RXhwclYxMjhDb25zdEV4cHIgY2FsbGJhY2sgZmFpbGVkAGluaXRfZXhwciBnbG9iYWwuZ2V0IGluZGV4AE9uSW5pdEV4cHJHbG9iYWxHZXRFeHByIGNhbGxiYWNrIGZhaWxlZABpbiBpbml0aWFsaXplciBleHByZXNzaW9uAGV4cGVjdGVkIGkzMiBpbml0X2V4cHIAZXhwZWN0ZWQgRU5EIG9wY29kZSBhZnRlciBpbml0aWFsaXplciBleHByZXNzaW9uAGV2ZW50IGF0dHJpYnV0ZQBldmVudCBhdHRyaWJ1dGUgbXVzdCBiZSAwAGV2ZW50IHNpZ25hdHVyZSBpbmRleABpbnZhbGlkIGV2ZW50IHNpZ25hdHVyZSBpbmRleABnbG9iYWwgdHlwZQBpbnZhbGlkIGdsb2JhbCB0eXBlOiAlI3gAZ2xvYmFsIG11dGFiaWxpdHkAZ2xvYmFsIG11dGFiaWxpdHkgbXVzdCBiZSAwIG9yIDEAbWVtb3J5IGZsYWdzAG1lbW9yeSBpbml0aWFsIHBhZ2UgY291bnQAaW52YWxpZCBtZW1vcnkgaW5pdGlhbCBzaXplAHNoYXJlZCBtZW1vcnkgbXVzdCBoYXZlIGEgbWF4IHNpemUAbWVtb3J5IG1heCBwYWdlIGNvdW50AGludmFsaWQgbWVtb3J5IG1heCBzaXplAG1lbW9yeSBpbml0aWFsIHNpemUgbXVzdCBiZSA8PSBtYXggc2l6ZQB0YWJsZSBlbGVtIHR5cGUgbXVzdCBieSBmdW5jcmVmIG9yIGFueXJlZgB0YWJsZSBmbGFncwB0YWJsZSBpbml0aWFsIGVsZW0gY291bnQAdGFibGVzIG1heSBub3QgYmUgc2hhcmVkAHRhYmxlIG1heCBlbGVtIGNvdW50AHRhYmxlIGluaXRpYWwgZWxlbSBjb3VudCBtdXN0IGJlIDw9IG1heCBlbGVtIGNvdW50AHN0cmluZyBsZW5ndGgAdW5hYmxlIHRvIHJlYWQgc3RyaW5nOiAlcwBpbnZhbGlkIHV0Zi04IGVuY29kaW5nOiAlcwBlcnJvcgB3YXJuaW5nACUwN3p4OiAlczogJXMKAE9uSW5pdEV4cHJJNjRDb25zdEV4cHIoaW5kZXg6ICV1LCB2YWx1ZTogJWxsdSkKAE9uSW5pdEV4cHJJMzJDb25zdEV4cHIoaW5kZXg6ICV1LCB2YWx1ZTogJXUpCgBPbkluaXRFeHByR2xvYmFsR2V0RXhwcihpbmRleDogJXUsIGdsb2JhbF9pbmRleDogJXUpCgBPbkluaXRFeHByVjEyOENvbnN0RXhwcihpbmRleDogJXUgdmFsdWU6ICggMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4KSkKAE9uSW5pdEV4cHJGNjRDb25zdEV4cHIoaW5kZXg6ICV1IHZhbHVlOiAlZyAoMHgwOCVsbHgpKQoAT25Jbml0RXhwckYzMkNvbnN0RXhwcihpbmRleDogJXUsIHZhbHVlOiAlZyAoMHgwNCV4KSkKAEVuZEV2ZW50U2VjdGlvbgoAT25FdmVudFR5cGUoaW5kZXg6ICV1LCBzaWdfaW5kZXg6ICV1KQoAT25FdmVudENvdW50KCV1KQoAQmVnaW5FdmVudFNlY3Rpb24oJXpkKQoARW5kTGlua2luZ1NlY3Rpb24KAE9uQ29tZGF0RW50cnkoa2luZDogJWQsIGluZGV4OiAldSkKAE9uQ29tZGF0QmVnaW4oJS4qcywgZmxhZ3M6ICVkLCBjb3VudDogJXUpCgBPbkNvbWRhdENvdW50KCV1KQoAT25Jbml0RnVuY3Rpb24oJWQgcHJpb3JpdHk6ICVkKQoAT25Jbml0RnVuY3Rpb25Db3VudCgldSkKAE9uU2VnbWVudEluZm8oJWQgbmFtZTogJS4qcywgYWxpZ25tZW50OiAlZCwgZmxhZ3M6IDB4JXgpCgBPblNlZ21lbnRJbmZvQ291bnQoJXUpCgBPbkV2ZW50U3ltYm9sKG5hbWU6ICUuKnMgZmxhZ3M6IDB4JXggaW5kZXg6ICV1KQoAT25TZWN0aW9uU3ltYm9sKGZsYWdzOiAweCV4IGluZGV4OiAldSkKAE9uR2xvYmFsU3ltYm9sKG5hbWU6ICUuKnMgZmxhZ3M6IDB4JXggaW5kZXg6ICV1KQoAT25GdW5jdGlvblN5bWJvbChuYW1lOiAlLipzIGZsYWdzOiAweCV4IGluZGV4OiAldSkKAE9uRGF0YVN5bWJvbChuYW1lOiAlLipzIGZsYWdzOiAweCV4KQoAPGVycm9yX3N5bWJvbF90eXBlPgBzZWN0aW9uAE9uU3ltYm9sKHR5cGU6ICVzIGZsYWdzOiAweCV4KQoAT25TeW1ib2xDb3VudCgldSkKAEJlZ2luTGlua2luZ1NlY3Rpb24oJXpkKQoARW5kRHlsaW5rU2VjdGlvbgoAT25EeWxpbmtOZWVkZWQobmFtZTogJS4qcykKAE9uRHlsaW5rTmVlZGVkQ291bnQoJXUpCgBPbkR5bGlua0luZm8obWVtX3NpemU6ICV1LCBtZW1fYWxpZ246ICV1LCB0YWJsZV9zaXplOiAldSwgdGFibGVfYWxpZ246ICV1KQoAQmVnaW5EeWxpbmtTZWN0aW9uKCV6ZCkKAEVuZFJlbG9jU2VjdGlvbgoAPGVycm9yX3JlbG9jX3R5cGU+AE9uUmVsb2ModHlwZTogJXMsIG9mZnNldDogJXpkLCBpbmRleDogJXUsIGFkZGVuZDogJWQpCgBPblJlbG9jQ291bnQoY291bnQ6ICV1LCBzZWN0aW9uOiAldSkKAEJlZ2luUmVsb2NTZWN0aW9uKCV6ZCkKAEVuZE5hbWVzU2VjdGlvbgoAT25Mb2NhbE5hbWUoZnVuY19pbmRleDogJXUsIGxvY2FsX2luZGV4OiAldSwgbmFtZTogIiUuKnMiKQoAT25Mb2NhbE5hbWVMb2NhbENvdW50KGluZGV4OiAldSwgY291bnQ6ICV1KQoAT25Mb2NhbE5hbWVGdW5jdGlvbkNvdW50KCV1KQoAT25Mb2NhbE5hbWVTdWJzZWN0aW9uKGluZGV4OiV1LCBuYW1ldHlwZToldSwgc2l6ZTolemQpCgBPbkZ1bmN0aW9uTmFtZShpbmRleDogJXUsIG5hbWU6ICIlLipzIikKAE9uRnVuY3Rpb25OYW1lc0NvdW50KCV1KQoAT25GdW5jdGlvbk5hbWVTdWJzZWN0aW9uKGluZGV4OiV1LCBuYW1ldHlwZToldSwgc2l6ZTolemQpCgBPbk1vZHVsZU5hbWUobmFtZTogIiUuKnMiKQoAT25Nb2R1bGVOYW1lU3Vic2VjdGlvbihpbmRleDoldSwgbmFtZXR5cGU6JXUsIHNpemU6JXpkKQoAQmVnaW5OYW1lc1NlY3Rpb24oJXpkKQoARW5kRGF0YUNvdW50U2VjdGlvbgoAT25EYXRhQ291bnQoJXUpCgBCZWdpbkRhdGFDb3VudFNlY3Rpb24oJXpkKQoARW5kRGF0YVNlY3Rpb24KAEVuZERhdGFTZWdtZW50KCV1KQoAT25EYXRhU2VnbWVudERhdGEoaW5kZXg6JXUsIHNpemU6JXUpCgBFbmREYXRhU2VnbWVudEluaXRFeHByKCV1KQoAQmVnaW5EYXRhU2VnbWVudEluaXRFeHByKCV1KQoAdHJ1ZQBmYWxzZQBCZWdpbkRhdGFTZWdtZW50KGluZGV4OiAldSwgbWVtb3J5X2luZGV4OiAldSwgcGFzc2l2ZTogJXMpCgBPbkRhdGFTZWdtZW50Q291bnQoJXUpCgBCZWdpbkRhdGFTZWN0aW9uKCV6ZCkKAEVuZEVsZW1TZWN0aW9uCgBFbmRFbGVtU2VnbWVudCgldSkKAE9uRWxlbVNlZ21lbnRFbGVtRXhwcl9SZWZGdW5jKGluZGV4OiAldSwgZnVuY19pbmRleDogJXUpCgBPbkVsZW1TZWdtZW50RWxlbUV4cHJfUmVmTnVsbCgldSkKAE9uRWxlbVNlZ21lbnRFbGVtRXhwckNvdW50KGluZGV4OiAldSwgY291bnQ6ICV1KQoARW5kRWxlbVNlZ21lbnRJbml0RXhwcigldSkKAEJlZ2luRWxlbVNlZ21lbnRJbml0RXhwcigldSkKAEJlZ2luRWxlbVNlZ21lbnQoaW5kZXg6ICV1LCB0YWJsZV9pbmRleDogJXUsIHBhc3NpdmU6ICVzLCBlbGVtX3R5cGU6ICVzKQoAT25FbGVtU2VnbWVudENvdW50KCV1KQoAQmVnaW5FbGVtU2VjdGlvbiglemQpCgBPbkxvYWRTcGxhdEV4cHIob3Bjb2RlOiAiJXMiICgldSksIGFsaWduIGxvZzI6ICV1LCBvZmZzZXQ6ICV1KQoAT25TaW1kU2h1ZmZsZU9wRXhwciAobGFuZTogMHglMDh4ICUwOHggJTA4eCAlMDh4KQoAT25TaW1kTGFuZU9wRXhwciAobGFuZTogJWxsdSkKAEVuZENvZGVTZWN0aW9uCgBFbmRGdW5jdGlvbkJvZHkoJXUpCgBPblVucmVhY2hhYmxlRXhwcgoAT25UZXJuYXJ5RXhwcigiJXMiICgldSkpCgBPblVuYXJ5RXhwcigiJXMiICgldSkpCgBPblRyeUV4cHIoc2lnOiAAKQoAZnVuY2lkeFslZF0AT25UaHJvd0V4cHIoZXZlbnRfaW5kZXg6ICV1KQoAT25TdG9yZUV4cHIob3Bjb2RlOiAiJXMiICgldSksIGFsaWduIGxvZzI6ICV1LCBvZmZzZXQ6ICV1KQoAT25TZWxlY3RFeHByCgBPblJldHVybkNhbGxJbmRpcmVjdEV4cHIoc2lnX2luZGV4OiAldSwgdGFibGVfaW5kZXg6ICV1KQoAT25SZXR1cm5DYWxsRXhwcihmdW5jX2luZGV4OiAldSkKAE9uUmV0dXJuRXhwcgoAT25SZXRocm93RXhwcgoAT25Ob3BFeHByCgBPblJlZklzTnVsbEV4cHIKAE9uUmVmTnVsbEV4cHIKAE9uVGFibGVTaXplRXhwcigldSkKAE9uVGFibGVHcm93RXhwcigldSkKAE9uVGFibGVTZXRFeHByKCV1KQoAT25UYWJsZUdldEV4cHIoJXUpCgBPblRhYmxlSW5pdEV4cHIoJXUpCgBPbkVsZW1Ecm9wRXhwcigldSkKAE9uVGFibGVDb3B5RXhwcgoAT25NZW1vcnlTaXplRXhwcgoAT25NZW1vcnlJbml0RXhwcigldSkKAE9uTWVtb3J5R3Jvd0V4cHIKAE9uTWVtb3J5RmlsbEV4cHIKAE9uRGF0YURyb3BFeHByKCV1KQoAT25NZW1vcnlDb3B5RXhwcgoAT25Mb29wRXhwcihzaWc6IABPbkxvY2FsVGVlRXhwcihpbmRleDogJXUpCgBPbkxvY2FsU2V0RXhwcihpbmRleDogJXUpCgBPbkxvY2FsR2V0RXhwcihpbmRleDogJXUpCgBPbkxvYWRFeHByKG9wY29kZTogIiVzIiAoJXUpLCBhbGlnbiBsb2cyOiAldSwgb2Zmc2V0OiAldSkKAE9uSWZFeHByKHNpZzogAE9uSTY0Q29uc3RFeHByKCVsbHUgKDB4JWxseCkpCgBPbkkzMkNvbnN0RXhwcigldSAoMHgleCkpCgBPbkdsb2JhbFNldEV4cHIoaW5kZXg6ICV1KQoAT25HbG9iYWxHZXRFeHByKGluZGV4OiAldSkKAE9uVjEyOENvbnN0RXhwcigweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHgpCgBPbkY2NENvbnN0RXhwciglZyAoMHgwOCVsbHgpKQoAT25GMzJDb25zdEV4cHIoJWcgKDB4MDQleCkpCgBPbkVuZEV4cHIKAE9uRWxzZUV4cHIKAE9uRHJvcEV4cHIKAE9uQ29udmVydEV4cHIoIiVzIiAoJXUpKQoAT25Db21wYXJlRXhwcigiJXMiICgldSkpCgBPbkNhdGNoRXhwcgoAT25DYWxsSW5kaXJlY3RFeHByKHNpZ19pbmRleDogJXUsIHRhYmxlX2luZGV4OiAldSkKAE9uQ2FsbEV4cHIoZnVuY19pbmRleDogJXUpCgBPbkJyVGFibGVFeHByKG51bV90YXJnZXRzOiAldSwgZGVwdGhzOiBbAF0sIGRlZmF1bHQ6ICV1KQoAT25Cck9uRXhuRXhwcihkZXB0aDogJXUsIGV2ZW50X2luZGV4OiAldSkKAE9uQnJJZkV4cHIoZGVwdGg6ICV1KQoAT25CckV4cHIoZGVwdGg6ICV1KQoAT25CbG9ja0V4cHIoc2lnOiAAT25CaW5hcnlFeHByKCIlcyIgKCV1KSkKAE9uQXRvbWljTm90aWZ5RXhwcihvcGNvZGU6ICIlcyIgKCV1KSwgYWxpZ24gbG9nMjogJXUsIG9mZnNldDogJXUpCgBPbkF0b21pY1dhaXRFeHByKG9wY29kZTogIiVzIiAoJXUpLCBhbGlnbiBsb2cyOiAldSwgb2Zmc2V0OiAldSkKAE9uQXRvbWljUm13Q21weGNoZ0V4cHIob3Bjb2RlOiAiJXMiICgldSksIGFsaWduIGxvZzI6ICV1LCBvZmZzZXQ6ICV1KQoAT25BdG9taWNSbXdFeHByKG9wY29kZTogIiVzIiAoJXUpLCBhbGlnbiBsb2cyOiAldSwgb2Zmc2V0OiAldSkKAE9uQXRvbWljU3RvcmVFeHByKG9wY29kZTogIiVzIiAoJXUpLCBhbGlnbiBsb2cyOiAldSwgb2Zmc2V0OiAldSkKAE9uQXRvbWljTG9hZEV4cHIob3Bjb2RlOiAiJXMiICgldSksIGFsaWduIGxvZzI6ICV1LCBvZmZzZXQ6ICV1KQoAT25Mb2NhbERlY2woaW5kZXg6ICV1LCBjb3VudDogJXUsIHR5cGU6ICVzKQoAT25Mb2NhbERlY2xDb3VudCgldSkKAEJlZ2luRnVuY3Rpb25Cb2R5KCV1LCBzaXplOiV6ZCkKAE9uRnVuY3Rpb25Cb2R5Q291bnQoJXUpCgBCZWdpbkNvZGVTZWN0aW9uKCV6ZCkKAEVuZFN0YXJ0U2VjdGlvbgoAT25TdGFydEZ1bmN0aW9uKCV1KQoAQmVnaW5TdGFydFNlY3Rpb24oJXpkKQoARW5kRXhwb3J0U2VjdGlvbgoAPGVycm9yX2tpbmQ+AE9uRXhwb3J0KGluZGV4OiAldSwga2luZDogJXMsIGl0ZW1faW5kZXg6ICV1LCBuYW1lOiAiJS4qcyIpCgBPbkV4cG9ydENvdW50KCV1KQoAQmVnaW5FeHBvcnRTZWN0aW9uKCV6ZCkKAEVuZEdsb2JhbFNlY3Rpb24KAEVuZEdsb2JhbCgldSkKAEVuZEdsb2JhbEluaXRFeHByKCV1KQoAQmVnaW5HbG9iYWxJbml0RXhwcigldSkKAEJlZ2luR2xvYmFsKGluZGV4OiAldSwgdHlwZTogJXMsIG11dGFibGU6ICVzKQoAT25HbG9iYWxDb3VudCgldSkKAEJlZ2luR2xvYmFsU2VjdGlvbiglemQpCgBFbmRNZW1vcnlTZWN0aW9uCgBpbml0aWFsOiAlbGx1LCBtYXg6ICVsbHUAaW5pdGlhbDogJWxsdQBPbk1lbW9yeShpbmRleDogJXUsICVzKQoAT25NZW1vcnlDb3VudCgldSkKAEJlZ2luTWVtb3J5U2VjdGlvbiglemQpCgBFbmRUYWJsZVNlY3Rpb24KAE9uVGFibGUoaW5kZXg6ICV1LCBlbGVtX3R5cGU6ICVzLCAlcykKAE9uVGFibGVDb3VudCgldSkKAEJlZ2luVGFibGVTZWN0aW9uKCV6ZCkKAEVuZEZ1bmN0aW9uU2VjdGlvbgoAT25GdW5jdGlvbihpbmRleDogJXUsIHNpZ19pbmRleDogJXUpCgBPbkZ1bmN0aW9uQ291bnQoJXUpCgBCZWdpbkZ1bmN0aW9uU2VjdGlvbiglemQpCgBFbmRJbXBvcnRTZWN0aW9uCgBPbkltcG9ydEV2ZW50KGltcG9ydF9pbmRleDogJXUsIGV2ZW50X2luZGV4OiAldSwgc2lnX2luZGV4OiAldSkKAE9uSW1wb3J0R2xvYmFsKGltcG9ydF9pbmRleDogJXUsIGdsb2JhbF9pbmRleDogJXUsIHR5cGU6ICVzLCBtdXRhYmxlOiAlcykKAE9uSW1wb3J0TWVtb3J5KGltcG9ydF9pbmRleDogJXUsIG1lbW9yeV9pbmRleDogJXUsICVzKQoAT25JbXBvcnRUYWJsZShpbXBvcnRfaW5kZXg6ICV1LCB0YWJsZV9pbmRleDogJXUsIGVsZW1fdHlwZTogJXMsICVzKQoAT25JbXBvcnRGdW5jKGltcG9ydF9pbmRleDogJXUsIGZ1bmNfaW5kZXg6ICV1LCBzaWdfaW5kZXg6ICV1KQoAT25JbXBvcnQoaW5kZXg6ICV1LCBtb2R1bGU6ICIlLipzIiwgZmllbGQ6ICIlLipzIikKAE9uSW1wb3J0Q291bnQoJXUpCgBCZWdpbkltcG9ydFNlY3Rpb24oJXpkKQoARW5kVHlwZVNlY3Rpb24KAE9uVHlwZShpbmRleDogJXUsIHBhcmFtczogAFsALCByZXN1bHRzOiAAT25UeXBlQ291bnQoJXUpCgBCZWdpblR5cGVTZWN0aW9uKCV6ZCkKAEVuZEN1c3RvbVNlY3Rpb24KAEJlZ2luQ3VzdG9tU2VjdGlvbignJS4qcycsIHNpemU6ICV6ZCkKAEVuZE1vZHVsZQoAQmVnaW5Nb2R1bGUodmVyc2lvbjogJXUpCgBONHdhYnQxOUJpbmFyeVJlYWRlckxvZ2dpbmdFAEludmFsaWQAYXNzZXJ0X2V4aGF1c3Rpb24AYXNzZXJ0X2ludmFsaWQAYXNzZXJ0X21hbGZvcm1lZABhc3NlcnRfcmV0dXJuAGFzc2VydF9yZXR1cm5fYXJpdGhtZXRpY19uYW4AYXNzZXJ0X3JldHVybl9jYW5vbmljYWxfbmFuAGFzc2VydF90cmFwAGFzc2VydF91bmxpbmthYmxlAGJpbgBkYXRhAGVsZW0ARU9GAGV2ZW50AGV4cG9ydABnZXQAZ2xvYmFsAGltcG9ydABpbnZva2UAbG9jYWwAKABtZW1vcnkAbW9kdWxlAG11dABvZmZzZXQAcGFyYW0AcXVvdGUAcmVnaXN0ZXIAcmVzdWx0ACkAc2hhcmVkAHN0YXJ0AHRhYmxlAHRoZW4AdHlwZQBpOHgxNgBpMTZ4OABpMzJ4NABpNjR4MgBmMzJ4NABmNjR4MgBGTE9BVABJTlQATkFUAEFUT01JQ19MT0FEAEFUT01JQ19OT1RJRlkAQVRPTUlDX1JNVwBBVE9NSUNfUk1XX0NNUFhDSEcAQVRPTUlDX1NUT1JFAEFUT01JQ19XQUlUAEJJTkFSWQBjYXRjaABDT01QQVJFAENPTlNUAENPTlZFUlQAZGF0YS5kcm9wAGVsZW0uZHJvcABlbHNlAGVuZABnbG9iYWwuZ2V0AExPQUQAbG9jYWwuZ2V0AG1lbW9yeS5jb3B5AG1lbW9yeS5maWxsAG1lbW9yeS5ncm93AG1lbW9yeS5pbml0AG1lbW9yeS5zaXplAG5vcAByZWYuZnVuYwByZWYubnVsbABTSU1ETEFORU9QAFNJTURMT0FEU1BMQVQAdjh4MTYuc2h1ZmZsZQBTVE9SRQB0YWJsZS5jb3B5AHRhYmxlLmluaXQAdGFibGUuc2l6ZQBURVJOQVJZAFVOQVJZAHVucmVhY2hhYmxlAGFsaWduPQBBbm5vdGF0aW9uAG9mZnNldD0AUmVzZXJ2ZWQAVEVYVABWQVIAVkFMVUVUWVBFAC4uLgBpbnZhbGlkIGRlcHRoOiAldSAobWF4ICV6ZCkAdHlwZSBtaXNtYXRjaCBpbiAALCBleHBlY3RlZCAAIGJ1dCBnb3QgAC4uLiAAJXMAXQA8dHlwZV9pbmRleD4AYW55cmVmAGFueQB2b2lkAGV4Y2VwdF9yZWYAZnVuYwBmdW5jcmVmAHYxMjgAZjY0AGYzMgBpNjQAaTMyACwgAHJldHVybiBzaWduYXR1cmVzIGhhdmUgaW5jb25zaXN0ZW50IHR5cGVzOiBleHBlY3RlZCAlcywgZ290ICVzAGJsb2NrAGJyAGJyX2lmAGJyX29uX2V4bgBicl9vbl9leG4gaGFzIGluY29uc2lzdGVudCB0eXBlczogZXhwZWN0ZWQgJXMsIGdvdCAlcwBicl90YWJsZQBicl90YWJsZSBsYWJlbHMgaGF2ZSBpbmNvbnNpc3RlbnQgdHlwZXM6IGV4cGVjdGVkICVzLCBnb3QgJXMAY2FsbABjYWxsX2luZGlyZWN0AHJldHVybl9jYWxsAHJldHVybl9jYWxsX2luZGlyZWN0AHRyeSBibG9jawBkcm9wAGlmIHRydWUgYnJhbmNoAGZ1bmN0aW9uAGxvb3AAaWYAaWYgZmFsc2UgYnJhbmNoAHRyeQB0cnkgY2F0Y2gAZ2xvYmFsLnNldABsb2NhbC5zZXQAbG9jYWwudGVlAHRhYmxlLmdldAB0YWJsZS5zZXQAdGFibGUuZ3JvdwByZWYuaXNfbnVsbAByZXRocm93AHRocm93AHJldHVybgBzZWxlY3QAbGFuZSBpbmRleCBtdXN0IGJlIGxlc3MgdGhhbiAlZCAoZ290ICVsbHUpAGxhbmUgaW5kZXggbXVzdCBiZSBsZXNzIHRoYW4gMzIgKGdvdCAlZCkAaW1wbGljaXQgcmV0dXJuAC0rICAgMFgweAAobnVsbCkALTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYATkFOAC4AaW5maW5pdHkAbmFuACVkACV1ACVsdQBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMjFfX3ZtaV9jbGFzc190eXBlX2luZm9F";var tempDoublePtr=354976;var ENV={};function ___buildEnvironment(environ){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.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=getMemory(TOTAL_ENV_SIZE);envPtr=getMemory(MAX_ENV_VALUES*4);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<strings.length;i++){var line=strings[i];writeAsciiToMemory(line,poolPtr);HEAP32[envPtr+i*ptrSize>>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var SYSCALLS={buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};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;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 flush_NO_FILESYSTEM(){var fflush=Module["_fflush"];if(fflush)fflush(0);var buffers=SYSCALLS.buffers;if(buffers[1].length)SYSCALLS.printChar(1,10);if(buffers[2].length)SYSCALLS.printChar(2,10)}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j<len;j++){SYSCALLS.printChar(stream,HEAPU8[ptr+j])}ret+=len}return ret}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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}}function _abort(){Module["abort"]()}function _emscripten_get_heap_size(){return TOTAL_MEMORY}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function emscripten_realloc_buffer(size){try{var newBuffer=new ArrayBuffer(size);if(newBuffer.byteLength!=size)return false;new Int8Array(newBuffer).set(HEAP8)}catch(e){return false}Module["_emscripten_replace_memory"](newBuffer);HEAP8=new Int8Array(newBuffer);HEAP16=new Int16Array(newBuffer);HEAP32=new Int32Array(newBuffer);HEAPU8=new Uint8Array(newBuffer);HEAPU16=new Uint16Array(newBuffer);HEAPU32=new Uint32Array(newBuffer);HEAPF32=new Float32Array(newBuffer);HEAPF64=new Float64Array(newBuffer);buffer=newBuffer;return newBuffer}function _emscripten_resize_heap(requestedSize){var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=16777216;var LIMIT=2147483648-PAGE_MULTIPLE;if(requestedSize>LIMIT){return false}var MIN_TOTAL_MEMORY=16777216;var newSize=Math.max(oldSize,MIN_TOTAL_MEMORY);while(newSize<requestedSize){if(newSize<=536870912){newSize=alignUp(2*newSize,PAGE_MULTIPLE)}else{newSize=Math.min(alignUp((3*newSize+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=emscripten_realloc_buffer(newSize);if(!replacement||replacement.byteLength!=newSize){return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();TOTAL_MEMORY=newSize;HEAPU32[DYNAMICTOP_PTR>>2]=requestedSize;return true}function _getenv(name){if(name===0)return 0;name=UTF8ToString(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE==="boolean"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,"base64")}catch(_){buf=new Buffer(s,"base64")}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}function jsCall_ii(index,a1){return functionPointers[index](a1)}function jsCall_iii(index,a1,a2){return functionPointers[index](a1,a2)}function jsCall_iiii(index,a1,a2,a3){return functionPointers[index](a1,a2,a3)}function jsCall_iiiii(index,a1,a2,a3,a4){return functionPointers[index](a1,a2,a3,a4)}function jsCall_iiiiii(index,a1,a2,a3,a4,a5){return functionPointers[index](a1,a2,a3,a4,a5)}function jsCall_iiiiiii(index,a1,a2,a3,a4,a5,a6){return functionPointers[index](a1,a2,a3,a4,a5,a6)}function jsCall_iiiiiiii(index,a1,a2,a3,a4,a5,a6,a7){return functionPointers[index](a1,a2,a3,a4,a5,a6,a7)}function jsCall_v(index){functionPointers[index]()}function jsCall_vi(index,a1){functionPointers[index](a1)}function jsCall_vii(index,a1,a2){functionPointers[index](a1,a2)}function jsCall_viii(index,a1,a2,a3){functionPointers[index](a1,a2,a3)}function jsCall_viiii(index,a1,a2,a3,a4){functionPointers[index](a1,a2,a3,a4)}function jsCall_viiiii(index,a1,a2,a3,a4,a5){functionPointers[index](a1,a2,a3,a4,a5)}function jsCall_viiiiii(index,a1,a2,a3,a4,a5,a6){functionPointers[index](a1,a2,a3,a4,a5,a6)}var asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,Infinity:Infinity};var asmLibraryArg={"a":abort,"b":setTempRet0,"c":getTempRet0,"d":jsCall_ii,"e":jsCall_iii,"f":jsCall_iiii,"g":jsCall_iiiii,"h":jsCall_iiiiii,"i":jsCall_iiiiiii,"j":jsCall_iiiiiiii,"k":jsCall_v,"l":jsCall_vi,"m":jsCall_vii,"n":jsCall_viii,"o":jsCall_viiii,"p":jsCall_viiiii,"q":jsCall_viiiiii,"r":___buildEnvironment,"s":___setErrNo,"t":___syscall140,"u":___syscall146,"v":___syscall54,"w":___syscall6,"x":_abort,"y":_emscripten_get_heap_size,"z":_emscripten_memcpy_big,"A":_emscripten_resize_heap,"B":_getenv,"C":abortOnCannotGrowMemory,"D":emscripten_realloc_buffer,"E":flush_NO_FILESYSTEM,"F":tempDoublePtr,"G":DYNAMICTOP_PTR};// EMSCRIPTEN_START_ASM
+var asm=(/** @suppress {uselessCode} */ function(global,env,buffer) {
+"almost asm";var a=new global.Int8Array(buffer),b=new global.Int16Array(buffer),c=new global.Int32Array(buffer),d=new global.Uint8Array(buffer),e=new global.Uint16Array(buffer),f=new global.Float32Array(buffer),g=new global.Float64Array(buffer),h=env.F|0,i=env.G|0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=global.NaN,s=global.Infinity,t=global.Math.abs,u=global.Math.ceil,v=global.Math.imul,w=global.Math.clz32,x=env.a,y=env.b,z=env.c,A=env.d,B=env.e,C=env.f,D=env.g,E=env.h,F=env.i,G=env.j,H=env.k,I=env.l,J=env.m,K=env.n,L=env.o,M=env.p,N=env.q,O=env.r,P=env.s,Q=env.t,R=env.u,S=env.v,T=env.w,U=env.x,V=env.y,W=env.z,X=env.A,Y=env.B,Z=env.C,_=env.D,$=env.E,aa=354992,ba=5597872,ca=0.0;function da(newBuffer){a=new Int8Array(newBuffer);d=new Uint8Array(newBuffer);b=new Int16Array(newBuffer);e=new Uint16Array(newBuffer);c=new Int32Array(newBuffer);f=new Float32Array(newBuffer);g=new Float64Array(newBuffer);buffer=newBuffer;return true}
+// EMSCRIPTEN_START_FUNCS
+function Up(b,e){b=b|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,p=0,q=0;q=aa;aa=aa+64|0;o=q+32|0;n=q+12|0;l=q;p=e+36|0;f=c[p>>2]|0;g=f;m=c[e+24>>2]|0;if(((m>>>0>g>>>0?(h=g+1|0,c[p>>2]=h,(a[g>>0]|0)==105&h>>>0<m>>>0):0)?(i=g+2|0,c[p>>2]=i,(a[h>>0]|0)==110&i>>>0<m>>>0):0)?(j=g+3|0,c[p>>2]=j,(a[i>>0]|0)==102):0){g=j;f=j;h=j;k=0;while(1){i=h>>>0<m>>>0;if(i)j=d[h>>0]|0;else j=-1;if(!(a[15616+(j+1)>>0]&1))break;if(i){h=h+1|0;c[p>>2]=h;g=h;f=h}k=k+1|0}if(!k){i=e+4|0;j=a[i+11>>0]|0;h=j<<24>>24<0;j=h?c[e+8>>2]|0:j&255;k=c[e+16>>2]|0;p=c[e+32>>2]|0;e=c[e+28>>2]|0;m=p-e+1|0;e=f-e+1|0;c[n>>2]=h?c[i>>2]|0:i;c[n+4>>2]=j;c[n+8>>2]=k;c[n+12>>2]=(m|0)>1?m:1;c[n+16>>2]=(e|0)>1?e:1;c[l>>2]=3;c[l+4>>2]=p;c[l+8>>2]=f-p;c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];oy(b,o,42,l);aa=q;return}a:while(1){h=g>>>0<m>>>0;if(h)f=d[g>>0]|0;else f=-1;while(1){if(!(a[15616+(f+1)>>0]&1))break a;if(h)break;else f=-1}l=g+1|0;c[p>>2]=l;g=l}m=g;i=e+4|0;j=a[i+11>>0]|0;h=j<<24>>24<0;j=h?c[e+8>>2]|0:j&255;k=c[e+16>>2]|0;p=c[e+32>>2]|0;e=c[e+28>>2]|0;l=p-e+1|0;e=m-e+1|0;c[n>>2]=h?c[i>>2]|0:i;c[n+4>>2]=j;c[n+8>>2]=k;c[n+12>>2]=(l|0)>1?l:1;c[n+16>>2]=(e|0)>1?e:1;c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];my(b,o,108,p,m-p|0);aa=q;return}c[p>>2]=f;Zp(b,e);aa=q;return}function Vp(b,e){b=b|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,p=0,q=0,r=0,s=0,t=0;t=aa;aa=aa+64|0;o=t+32|0;p=t+12|0;r=t;q=e+36|0;h=c[q>>2]|0;k=h;n=c[e+24>>2]|0;a:do if(((n>>>0>k>>>0?(i=k+1|0,c[q>>2]=i,(a[k>>0]|0)==110&i>>>0<n>>>0):0)?(j=k+2|0,c[q>>2]=j,(a[i>>0]|0)==97&j>>>0<n>>>0):0)?(f=k+3|0,c[q>>2]=f,g=f,(a[j>>0]|0)==110):0){if(f>>>0<n>>>0?(a[f>>0]|0)==58:0){g=k+4|0;c[q>>2]=g;f=g;if((g>>>0<n>>>0?(l=k+5|0,c[q>>2]=l,(a[g>>0]|0)==48&l>>>0<n>>>0):0)?(m=k+6|0,c[q>>2]=m,(a[l>>0]|0)==120):0){f=m;g=m;while(1){h=g>>>0<n>>>0;if(h)i=(d[g>>0]|0)+1|0;else i=0;if(!(a[15616+i>>0]&4))break a;if(h){f=g+1|0;c[q>>2]=f;g=f}do if(g>>>0<n>>>0){h=a[g>>0]|0;if(h<<24>>24==95){g=g+1|0;c[q>>2]=g;f=g;break}else{h=(h&255)+1|0;s=17;break}}else{h=0;s=17}while(0);if((s|0)==17){s=0;if(!(a[15616+h>>0]&4))break}}j=0;while(1){h=g>>>0<n>>>0;if(h)i=d[g>>0]|0;else i=-1;if(!(a[15616+(i+1)>>0]&1))break;if(h){g=g+1|0;c[q>>2]=g;f=g}j=j+1|0}if(j|0)break;l=e+4|0;m=a[l+11>>0]|0;k=m<<24>>24<0;m=k?c[e+8>>2]|0:m&255;n=c[e+16>>2]|0;s=c[e+32>>2]|0;e=c[e+28>>2]|0;q=s-e+1|0;e=f-e+1|0;c[p>>2]=k?c[l>>2]|0:l;c[p+4>>2]=m;c[p+8>>2]=n;c[p+12>>2]=(q|0)>1?q:1;c[p+16>>2]=(e|0)>1?e:1;c[r>>2]=4;c[r+4>>2]=s;c[r+8>>2]=f-s;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,42,r);aa=t;return}c[q>>2]=f;break}j=0;while(1){h=f>>>0<n>>>0;if(h)i=d[f>>0]|0;else i=-1;if(!(a[15616+(i+1)>>0]&1))break;if(h){f=f+1|0;c[q>>2]=f;g=f}j=j+1|0}if(!j){l=e+4|0;m=a[l+11>>0]|0;k=m<<24>>24<0;m=k?c[e+8>>2]|0:m&255;n=c[e+16>>2]|0;s=c[e+32>>2]|0;e=c[e+28>>2]|0;q=s-e+1|0;e=g-e+1|0;c[p>>2]=k?c[l>>2]|0:l;c[p+4>>2]=m;c[p+8>>2]=n;c[p+12>>2]=(q|0)>1?q:1;c[p+16>>2]=(e|0)>1?e:1;c[r>>2]=4;c[r+4>>2]=s;c[r+8>>2]=g-s;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,42,r);aa=t;return}}else s=3;while(0);if((s|0)==3)c[q>>2]=h;Zp(b,e);aa=t;return}function Wp(b,e,f){b=b|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,q=0,r=0;r=aa;aa=aa+64|0;o=r+32|0;p=r+12|0;m=r;q=e+36|0;g=c[q>>2]|0;n=c[e+24>>2]|0;a:do if(g>>>0<n>>>0){while(1){if(((d[g>>0]|0)+-48|0)>>>0>=10)break a;j=g+1|0;c[q>>2]=j;if(j>>>0>=n>>>0){k=28;break}i=a[j>>0]|0;if(i<<24>>24!=95)if(((i&255)+-48|0)>>>0<10)g=j;else{k=9;break}else{g=g+2|0;c[q>>2]=g}if(g>>>0>=n>>>0)break a}do if((k|0)==9){h=j;if(i<<24>>24==46){g=g+2|0;c[q>>2]=g;h=g;if(g>>>0<n>>>0?((d[g>>0]|0)+-48|0)>>>0<10:0){do{i=g+1|0;c[q>>2]=i;if(i>>>0>=n>>>0){k=27;break}h=a[i>>0]|0;if(h<<24>>24!=95)if(((h&255)+-48|0)>>>0<10)g=i;else{k=27;break}else{g=g+2|0;c[q>>2]=g}if(g>>>0>=n>>>0)break}while(((d[g>>0]|0)+-48|0)>>>0<10);if((k|0)==27){g=i;h=i;i=42;break}b:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break b;if(i)break;else h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;f=e+4|0;k=a[f+11>>0]|0;j=k<<24>>24<0;k=j?c[e+8>>2]|0:k&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[f>>2]|0:f;c[p+4>>2]=k;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}else i=42}else{g=j;i=f}}else if((k|0)==28){g=j;h=j;i=f}while(0);c:do if(g>>>0<n>>>0){switch(a[g>>0]|0){case 69:case 101:break;default:break c}h=g+1|0;c[q>>2]=h;d:do if(h>>>0<n>>>0){switch(a[h>>0]|0){case 45:case 43:break;default:{g=h;break d}}g=g+2|0;c[q>>2]=g}else g=h;while(0);e:do if(g>>>0<n>>>0){while(1){if(((d[g>>0]|0)+-48|0)>>>0>=10)break e;i=g+1|0;c[q>>2]=i;if(i>>>0>=n>>>0)break;h=a[i>>0]|0;if(h<<24>>24!=95)if(((h&255)+-48|0)>>>0<10)g=i;else break;else{g=g+2|0;c[q>>2]=g}if(g>>>0>=n>>>0)break e}g=i;h=i;i=42;break c}while(0);f:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break f;if(i)break;else h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;f=e+4|0;k=a[f+11>>0]|0;j=k<<24>>24<0;k=j?c[e+8>>2]|0:k&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[f>>2]|0:f;c[p+4>>2]=k;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}while(0);k=h;j=h;l=0;while(1){h=g>>>0<n>>>0;if(h)f=d[g>>0]|0;else f=-1;if(!(a[15616+(f+1)>>0]&1))break;if(h){g=g+1|0;c[q>>2]=g;j=g;h=j}else h=k;k=h;l=l+1|0}if(!l)if((i|0)==42){j=e+4|0;f=a[j+11>>0]|0;i=f<<24>>24<0;f=i?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;n=q-e+1|0;e=k-e+1|0;c[p>>2]=i?c[j>>2]|0:j;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(n|0)>1?n:1;c[p+16>>2]=(e|0)>1?e:1;c[m>>2]=1;c[m+4>>2]=q;c[m+8>>2]=k-q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,42,m);aa=r;return}else{f=e+4|0;k=a[f+11>>0]|0;h=k<<24>>24<0;k=h?c[e+8>>2]|0:k&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;n=q-e+1|0;e=j-e+1|0;c[p>>2]=h?c[f>>2]|0:f;c[p+4>>2]=k;c[p+8>>2]=l;c[p+12>>2]=(n|0)>1?n:1;c[p+16>>2]=(e|0)>1?e:1;c[m>>2]=0;c[m+4>>2]=q;c[m+8>>2]=j-q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,i,m);aa=r;return}}while(0);g:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break g;if(i)break;h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;f=e+4|0;k=a[f+11>>0]|0;j=k<<24>>24<0;k=j?c[e+8>>2]|0:k&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[f>>2]|0:f;c[p+4>>2]=k;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}function Xp(b,e){b=b|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,p=0;p=aa;aa=aa+48|0;m=p+20|0;n=p;o=e+36|0;f=c[o>>2]|0;l=c[e+24>>2]|0;if(f>>>0<l>>>0){f=f+1|0;c[o>>2]=f}g=f;j=g;h=f;k=0;while(1){f=h>>>0<l>>>0;if(f)i=d[h>>0]|0;else i=-1;if(!(a[15616+(i+1)>>0]&1))break;if(f){h=h+1|0;c[o>>2]=h;g=h;f=g}else f=j;j=f;k=k+1|0}if(!k){h=e+4|0;i=a[h+11>>0]|0;g=i<<24>>24<0;i=g?c[e+8>>2]|0:i&255;k=c[e+16>>2]|0;o=c[e+32>>2]|0;e=c[e+28>>2]|0;l=o-e+1|0;e=j-e+1|0;c[n>>2]=g?c[h>>2]|0:h;c[n+4>>2]=i;c[n+8>>2]=k;c[n+12>>2]=(l|0)>1?l:1;c[n+16>>2]=(e|0)>1?e:1;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];my(b,m,108,o,j-o|0);aa=p;return}else{i=e+4|0;j=a[i+11>>0]|0;h=j<<24>>24<0;j=h?c[e+8>>2]|0:j&255;k=c[e+16>>2]|0;o=c[e+32>>2]|0;e=c[e+28>>2]|0;l=o-e+1|0;e=g-e+1|0;c[n>>2]=h?c[i>>2]|0:i;c[n+4>>2]=j;c[n+8>>2]=k;c[n+12>>2]=(l|0)>1?l:1;c[n+16>>2]=(e|0)>1?e:1;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];my(b,m,110,o,g-o|0);aa=p;return}}function Yp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=aa;aa=aa+48|0;q=t+20|0;r=t;s=e+36|0;j=c[s>>2]|0;n=f+g|0;i=j;p=c[e+24>>2]|0;do if(g){k=j;while(1){l=a[f>>0]|0;if(i>>>0<p>>>0){k=i+1|0;c[s>>2]=k;m=k;i=d[i>>0]|0}else{m=i;i=-1}f=f+1|0;if((i|0)!=(l<<24>>24|0)){m=7;break}if((f|0)==(n|0)){m=8;break}else i=m}if((m|0)==7){c[s>>2]=j;break}else if((m|0)==8){i=k;j=k;m=9;break}}else m=9;while(0);a:do if((m|0)==9){if(i>>>0>=p>>>0){c[s>>2]=j;break}f=i+1|0;c[s>>2]=f;if((a[i>>0]|0)==48&f>>>0<p>>>0?(o=i+2|0,c[s>>2]=o,(a[f>>0]|0)==120):0){i=o;j=o;l=o;while(1){f=l>>>0<p>>>0;if(f)k=(d[l>>0]|0)+1|0;else k=0;if(!(a[15616+k>>0]&4))break a;if(f){j=l+1|0;c[s>>2]=j;i=j;l=j}do if(l>>>0<p>>>0){f=a[l>>0]|0;if(f<<24>>24==95){i=l+1|0;c[s>>2]=i;j=i;f=i;break}else{f=(f&255)+1|0;m=20;break}}else{f=0;m=20}while(0);if((m|0)==20){m=0;if(!(a[15616+f>>0]&4))break;else f=l}l=f}l=0;while(1){f=i>>>0<p>>>0;if(f)k=d[i>>0]|0;else k=-1;if(!(a[15616+(k+1)>>0]&1))break;if(f){i=i+1|0;c[s>>2]=i;j=i}l=l+1|0}if(l|0)break;m=e+4|0;n=a[m+11>>0]|0;l=n<<24>>24<0;n=l?c[e+8>>2]|0:n&255;o=c[e+16>>2]|0;s=c[e+32>>2]|0;e=c[e+28>>2]|0;p=s-e+1|0;e=j-e+1|0;c[r>>2]=l?c[m>>2]|0:m;c[r+4>>2]=n;c[r+8>>2]=o;c[r+12>>2]=(p|0)>1?p:1;c[r+16>>2]=(e|0)>1?e:1;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];my(b,q,h,s+g|0,j-(s+g)|0);aa=t;return}c[s>>2]=j;while(1){if(((d[i>>0]|0)+-48|0)>>>0>=10)break a;f=i+1|0;c[s>>2]=f;if(f>>>0>=p>>>0)break;j=a[f>>0]|0;if(j<<24>>24!=95)if(((j&255)+-48|0)>>>0<10)i=f;else break;else{i=i+2|0;c[s>>2]=i}if(i>>>0>=p>>>0)break a}i=f;j=f;l=0;while(1){f=i>>>0<p>>>0;if(f)k=d[i>>0]|0;else k=-1;if(!(a[15616+(k+1)>>0]&1))break;if(f){i=i+1|0;c[s>>2]=i;j=i}l=l+1|0}if(!l){m=e+4|0;n=a[m+11>>0]|0;l=n<<24>>24<0;n=l?c[e+8>>2]|0:n&255;o=c[e+16>>2]|0;s=c[e+32>>2]|0;e=c[e+28>>2]|0;p=s-e+1|0;e=j-e+1|0;c[r>>2]=l?c[m>>2]|0:m;c[r+4>>2]=n;c[r+8>>2]=o;c[r+12>>2]=(p|0)>1?p:1;c[r+16>>2]=(e|0)>1?e:1;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];my(b,q,h,s+g|0,j-(s+g)|0);aa=t;return}}while(0);Zp(b,e);aa=t;return}function Zp(b,f){b=b|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,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+80|0;t=u+60|0;p=u;r=u+40|0;s=u+20|0;q=f+36|0;h=c[f+24>>2]|0;j=c[q>>2]|0;a:while(1){i=j>>>0<h>>>0;if(i)g=d[j>>0]|0;else g=-1;while(1){if(!(a[15616+(g+1)>>0]&1))break a;if(i)break;else g=-1}n=j+1|0;c[q>>2]=n;j=n}n=f+32|0;k=c[n>>2]|0;j=j-k|0;if((a[354128]|0)==0?eC()|0:0){c[82940]=354708;c[82943]=354708;c[82946]=354708;c[82949]=354708;c[82952]=354708;c[82955]=354708;c[82958]=354708;c[82961]=354708;c[82964]=354708;c[82967]=354708;c[82970]=354708;c[82973]=354708;c[82976]=354708;c[82979]=354708;c[82982]=354708;c[82985]=354708;c[82988]=354708;c[82991]=354708;c[82994]=354708;c[82997]=354708;c[83e3]=354708;c[83003]=354708;c[83006]=354708;c[83009]=331295;c[83010]=70;c[83011]=4;c[83012]=354708;c[83015]=354708;c[83018]=354708;c[83021]=354708;c[83024]=354708;c[83027]=354708;c[83030]=330968;c[83031]=111;c[83032]=-4;c[83033]=330297;c[83034]=24;c[83036]=330972;c[83037]=111;c[83038]=-3;c[83039]=330976;c[83040]=111;c[83041]=-2;c[83042]=354708;c[83045]=330980;c[83046]=111;c[83047]=-1;c[83048]=354708;c[83051]=354708;c[83054]=354708;c[83057]=354708;c[83060]=354708;c[83063]=354708;c[83066]=354708;c[83069]=330553;c[83070]=66;c[83071]=5;c[83072]=330228;c[83073]=11;c[83075]=354708;c[83078]=354708;c[83081]=354708;c[83084]=330950;c[83085]=15;c[83087]=354708;c[83090]=330351;c[83091]=33;c[83093]=354708;c[83096]=303933;c[83097]=60;c[83098]=86;c[83099]=303940;c[83100]=60;c[83101]=80;c[83102]=330357;c[83103]=34;c[83105]=330237;c[83106]=13;c[83108]=354708;c[83111]=354708;c[83114]=354708;c[83117]=354708;c[83120]=331056;c[83121]=53;c[83122]=12;c[83123]=354708;c[83126]=330558;c[83127]=67;c[83128]=11;c[83129]=354708;c[83132]=303947;c[83133]=60;c[83134]=88;c[83135]=303954;c[83136]=60;c[83137]=82;c[83138]=354708;c[83141]=303961;c[83142]=103;c[83143]=140;c[83144]=303969;c[83145]=103;c[83146]=126;c[83147]=303977;c[83148]=51;c[83149]=148;c[83150]=303985;c[83151]=51;c[83152]=134;c[83153]=354708;c[83156]=303993;c[83157]=51;c[83158]=112;c[83159]=304001;c[83160]=51;c[83161]=94;c[83162]=354708;c[83165]=304009;c[83166]=60;c[83167]=70;c[83168]=304018;c[83169]=60;c[83170]=59;c[83171]=354708;c[83174]=330290;c[83175]=23;c[83177]=304027;c[83178]=60;c[83179]=71;c[83180]=304036;c[83181]=60;c[83182]=60;c[83183]=304045;c[83184]=60;c[83185]=74;c[83186]=304054;c[83187]=60;c[83188]=63;c[83189]=354708;c[83192]=330955;c[83193]=111;c[83194]=-16;c[83195]=304063;c[83196]=60;c[83197]=75;c[83198]=304072;c[83199]=60;c[83200]=64;c[83201]=354708;c[83204]=354708;c[83207]=330329;c[83208]=29;c[83210]=331369;c[83211]=98;c[83212]=205;c[83213]=304081;c[83214]=51;c[83215]=116;c[83216]=304091;c[83217]=51;c[83218]=98;c[83219]=304101;c[83220]=103;c[83221]=109;c[83222]=304109;c[83223]=103;c[83224]=91;c[83225]=304117;c[83226]=51;c[83227]=117;c[83228]=304127;c[83229]=51;c[83230]=99;c[83231]=330345;c[83232]=32;c[83234]=330223;c[83235]=10;c[83237]=331423;c[83238]=89;c[83239]=21;c[83240]=354708;c[83243]=331199;c[83244]=57;c[83245]=16;c[83246]=330737;c[83247]=99;c[83248]=207;c[83249]=304137;c[83250]=51;c[83251]=147;c[83252]=304145;c[83253]=51;c[83254]=133;c[83255]=330301;c[83256]=25;c[83258]=304153;c[83259]=51;c[83260]=111;c[83261]=304161;c[83262]=51;c[83263]=93;c[83264]=330726;c[83265]=97;c[83266]=201;c[83267]=354708;c[83270]=304169;c[83271]=51;c[83272]=118;c[83273]=304177;c[83274]=51;c[83275]=100;c[83276]=330275;c[83277]=20;c[83279]=354708;c[83282]=354708;c[83285]=304185;c[83286]=51;c[83287]=151;c[83288]=304193;c[83289]=51;c[83290]=137;c[83291]=304201;c[83292]=60;c[83293]=85;c[83294]=304208;c[83295]=60;c[83296]=79;c[83297]=354708;c[83300]=304215;c[83301]=60;c[83302]=69;c[83303]=304222;c[83304]=60;c[83305]=58;c[83306]=331416;c[83307]=88;c[83308]=15;c[83309]=331339;c[83310]=73;c[83311]=23;c[83312]=354708;c[83315]=354708;c[83318]=354708;c[83321]=331129;c[83322]=56;c[83323]=14;c[83324]=304229;c[83325]=103;c[83326]=108;c[83327]=304237;c[83328]=103;c[83329]=90;c[83330]=354708;c[83333]=330338;c[83334]=31;c[83336]=354708;c[83339]=331050;c[83340]=52;c[83341]=2;c[83342]=354708;c[83345]=331349;c[83346]=74;c[83347]=24;c[83348]=354708;c[83351]=354708;c[83354]=354708;c[83357]=304245;c[83358]=103;c[83359]=144;c[83360]=304255;c[83361]=103;c[83362]=130;c[83363]=354708;c[83366]=354708;c[83369]=354708;c[83372]=354708;c[83375]=354708;c[83378]=354708;c[83381]=354708;c[83384]=354708;c[83387]=354708;c[83390]=304265;c[83391]=51;c[83392]=149;c[83393]=304273;c[83394]=51;c[83395]=135;c[83396]=354708;c[83399]=304281;c[83400]=51;c[83401]=113;c[83402]=304289;c[83403]=51;c[83404]=95;c[83405]=354708;c[83408]=354708;c[83411]=354708;c[83414]=354708;c[83417]=354708;c[83420]=354708;c[83423]=354708;c[83426]=354708;c[83429]=304297;c[83430]=103;c[83431]=142;c[83432]=304306;c[83433]=103;c[83434]=128;c[83435]=304315;c[83436]=61;c[83437]=55;c[83438]=304325;c[83439]=61;c[83440]=54;c[83441]=354708;c[83444]=304335;c[83445]=61;c[83446]=53;c[83447]=304345;c[83448]=61;c[83449]=52;c[83450]=304355;c[83451]=51;c[83452]=114;c[83453]=304365;c[83454]=51;c[83455]=96;c[83456]=354708;c[83459]=354708;c[83462]=304375;c[83463]=51;c[83464]=115;c[83465]=304385;c[83466]=51;c[83467]=97;c[83468]=330397;c[83469]=41;c[83471]=354708;c[83474]=330268;c[83475]=19;c[83477]=330385;c[83478]=39;c[83480]=354708;c[83483]=354708;c[83486]=354708;c[83489]=354708;c[83492]=304395;c[83493]=93;c[83494]=44;c[83495]=304405;c[83496]=93;c[83497]=43;c[83498]=354708;c[83501]=304415;c[83502]=93;c[83503]=42;c[83504]=304425;c[83505]=93;c[83506]=41;c[83507]=331204;c[83508]=58;c[83509]=17;c[83510]=354708;c[83513]=354708;c[83516]=354708;c[83519]=354708;c[83522]=304435;c[83523]=93;c[83524]=49;c[83525]=354708;c[83528]=354708;c[83531]=354708;c[83534]=304447;c[83535]=51;c[83536]=124;c[83537]=304456;c[83538]=51;c[83539]=106;c[83540]=354708;c[83543]=354708;c[83546]=304465;c[83547]=51;c[83548]=125;c[83549]=304474;c[83550]=51;c[83551]=107;c[83552]=354708;c[83555]=354708;c[83558]=304483;c[83559]=71;c[83560]=30;c[83561]=304492;c[83562]=71;c[83563]=29;c[83564]=354708;c[83567]=304501;c[83568]=71;c[83569]=28;c[83570]=304510;c[83571]=71;c[83572]=27;c[83573]=354708;c[83576]=331402;c[83577]=85;c[83578]=9;c[83579]=354708;c[83582]=354708;c[83585]=354708;c[83588]=354708;c[83591]=354708;c[83594]=354708;c[83597]=354708;c[83600]=354708;c[83603]=354708;c[83606]=331390;c[83607]=83;c[83608]=209;c[83609]=304519;c[83610]=51;c[83611]=337;c[83612]=304529;c[83613]=51;c[83614]=150;c[83615]=304537;c[83616]=51;c[83617]=136;c[83618]=304545;c[83619]=51;c[83620]=323;c[83621]=354708;c[83624]=354708;c[83627]=354708;c[83630]=354708;c[83633]=354708;c[83636]=304555;c[83637]=71;c[83638]=37;c[83639]=304568;c[83640]=71;c[83641]=33;c[83642]=304581;c[83643]=60;c[83644]=271;c[83645]=354708;c[83648]=304590;c[83649]=71;c[83650]=38;c[83651]=304603;c[83652]=71;c[83653]=34;c[83654]=354708;c[83657]=354708;c[83660]=304616;c[83661]=60;c[83662]=272;c[83663]=354708;c[83666]=354708;c[83669]=354708;c[83672]=354708;c[83675]=354708;c[83678]=354708;c[83681]=354708;c[83684]=354708;c[83687]=304625;c[83688]=103;c[83689]=145;c[83690]=304637;c[83691]=103;c[83692]=131;c[83693]=354708;c[83696]=304649;c[83697]=60;c[83698]=274;c[83699]=304658;c[83700]=51;c[83701]=340;c[83702]=304668;c[83703]=103;c[83704]=276;c[83705]=354708;c[83708]=354708;c[83711]=354708;c[83714]=354708;c[83717]=354708;c[83720]=304677;c[83721]=73;c[83722]=23;c[83723]=354708;c[83726]=354708;c[83729]=304687;c[83730]=49;c[83731]=367;c[83732]=304704;c[83733]=49;c[83734]=366;c[83735]=304721;c[83736]=61;c[83737]=213;c[83738]=304732;c[83739]=74;c[83740]=24;c[83741]=354708;c[83744]=354708;c[83747]=330661;c[83748]=84;c[83749]=208;c[83750]=331218;c[83751]=87;c[83752]=18;c[83753]=354708;c[83756]=304742;c[83757]=103;c[83758]=333;c[83759]=354708;c[83762]=304752;c[83763]=50;c[83764]=358;c[83765]=304768;c[83766]=50;c[83767]=357;c[83768]=354708;c[83771]=354708;c[83774]=354708;c[83777]=304784;c[83778]=49;c[83779]=372;c[83780]=304803;c[83781]=51;c[83782]=277;c[83783]=304812;c[83784]=100;c[83785]=280;c[83786]=330118;c[83787]=4;c[83789]=354708;c[83792]=354708;c[83795]=354708;c[83798]=354708;c[83801]=354708;c[83804]=304827;c[83805]=51;c[83806]=338;c[83807]=354708;c[83810]=354708;c[83813]=304837;c[83814]=93;c[83815]=212;c[83816]=354708;c[83819]=354708;c[83822]=354708;c[83825]=354708;c[83828]=354708;c[83831]=354708;c[83834]=354708;c[83837]=354708;c[83840]=354708;c[83843]=304848;c[83844]=51;c[83845]=278;c[83846]=354708;c[83849]=354708;c[83852]=304856;c[83853]=47;c[83854]=384;c[83855]=304878;c[83856]=47;c[83857]=382;c[83858]=354708;c[83861]=354708;c[83864]=304900;c[83865]=51;c[83866]=336;c[83867]=354708;c[83870]=354708;c[83873]=304910;c[83874]=51;c[83875]=322;c[83876]=354708;c[83879]=354708;c[83882]=330086;c[83883]=2;c[83885]=354708;c[83888]=354708;c[83891]=354708;c[83894]=354708;c[83897]=304920;c[83898]=62;c[83899]=161;c[83900]=304936;c[83901]=62;c[83902]=155;c[83903]=304952;c[83904]=62;c[83905]=162;c[83906]=304968;c[83907]=62;c[83908]=156;c[83909]=354708;c[83912]=354708;c[83915]=354708;c[83918]=354708;c[83921]=354708;c[83924]=304984;c[83925]=47;c[83926]=377;c[83927]=305006;c[83928]=47;c[83929]=375;c[83930]=354708;c[83933]=330201;c[83934]=8;c[83936]=305028;c[83937]=47;c[83938]=391;c[83939]=305050;c[83940]=47;c[83941]=389;c[83942]=354708;c[83945]=354708;c[83948]=331230;c[83949]=86;c[83950]=19;c[83951]=305072;c[83952]=47;c[83953]=386;c[83954]=330250;c[83955]=16;c[83957]=354708;c[83960]=305095;c[83961]=48;c[83962]=421;c[83963]=354708;c[83966]=354708;c[83969]=305122;c[83970]=45;c[83971]=360;c[83972]=305138;c[83973]=45;c[83974]=359;c[83975]=330391;c[83976]=40;c[83978]=354708;c[83981]=354708;c[83984]=330379;c[83985]=38;c[83987]=354708;c[83990]=354708;c[83993]=354708;c[83996]=331059;c[83997]=54;c[83998]=13;c[83999]=305154;c[84e3]=62;c[84001]=161;c[84002]=305170;c[84003]=62;c[84004]=155;c[84005]=305186;c[84006]=62;c[84007]=162;c[84008]=305202;c[84009]=62;c[84010]=156;c[84011]=354708;c[84014]=354708;c[84017]=354708;c[84020]=330101;c[84021]=3;c[84023]=305218;c[84024]=71;c[84025]=39;c[84026]=305231;c[84027]=71;c[84028]=211;c[84029]=354708;c[84032]=354708;c[84035]=305241;c[84036]=71;c[84037]=40;c[84038]=305254;c[84039]=47;c[84040]=395;c[84041]=305272;c[84042]=47;c[84043]=394;c[84044]=305290;c[84045]=47;c[84046]=381;c[84047]=305309;c[84048]=47;c[84049]=380;c[84050]=354708;c[84053]=305328;c[84054]=47;c[84055]=374;c[84056]=305347;c[84057]=47;c[84058]=373;c[84059]=354708;c[84062]=354708;c[84065]=354708;c[84068]=354708;c[84071]=305366;c[84072]=62;c[84073]=163;c[84074]=305382;c[84075]=62;c[84076]=157;c[84077]=305398;c[84078]=62;c[84079]=164;c[84080]=305414;c[84081]=62;c[84082]=158;c[84083]=354708;c[84086]=330963;c[84087]=111;c[84088]=-5;c[84089]=305430;c[84090]=62;c[84091]=169;c[84092]=354708;c[84095]=305445;c[84096]=51;c[84097]=339;c[84098]=354708;c[84101]=354708;c[84104]=354708;c[84107]=354708;c[84110]=354708;c[84113]=354708;c[84116]=354708;c[84119]=305455;c[84120]=51;c[84121]=328;c[84122]=354708;c[84125]=354708;c[84128]=305465;c[84129]=51;c[84130]=314;c[84131]=354708;c[84134]=331359;c[84135]=95;c[84136]=204;c[84137]=354708;c[84140]=354708;c[84143]=354708;c[84146]=305475;c[84147]=47;c[84148]=379;c[84149]=354708;c[84152]=305498;c[84153]=60;c[84154]=265;c[84155]=354708;c[84158]=305507;c[84159]=47;c[84160]=393;c[84161]=305530;c[84162]=60;c[84163]=255;c[84164]=354708;c[84167]=354708;c[84170]=305539;c[84171]=60;c[84172]=266;c[84173]=305548;c[84174]=62;c[84175]=163;c[84176]=305564;c[84177]=62;c[84178]=157;c[84179]=305580;c[84180]=62;c[84181]=164;c[84182]=305596;c[84183]=62;c[84184]=158;c[84185]=354708;c[84188]=354708;c[84191]=305612;c[84192]=62;c[84193]=169;c[84194]=354708;c[84197]=305627;c[84198]=47;c[84199]=388;c[84200]=305646;c[84201]=47;c[84202]=387;c[84203]=354708;c[84206]=305665;c[84207]=60;c[84208]=268;c[84209]=305674;c[84210]=51;c[84211]=331;c[84212]=305684;c[84213]=60;c[84214]=256;c[84215]=305695;c[84216]=47;c[84217]=400;c[84218]=305717;c[84219]=60;c[84220]=257;c[84221]=354708;c[84224]=354708;c[84227]=354708;c[84230]=305728;c[84231]=60;c[84232]=260;c[84233]=330578;c[84234]=72;c[84235]=22;c[84236]=305739;c[84237]=60;c[84238]=261;c[84239]=354708;c[84242]=305750;c[84243]=103;c[84244]=318;c[84245]=330652;c[84246]=82;c[84247]=210;c[84248]=354708;c[84251]=354708;c[84254]=354708;c[84257]=354708;c[84260]=354708;c[84263]=354708;c[84266]=305765;c[84267]=103;c[84268]=324;c[84269]=354708;c[84272]=354708;c[84275]=354708;c[84278]=354708;c[84281]=305775;c[84282]=62;c[84283]=170;c[84284]=305793;c[84285]=62;c[84286]=165;c[84287]=354708;c[84290]=354708;c[84293]=330362;c[84294]=35;c[84296]=354708;c[84299]=354708;c[84302]=354708;c[84305]=305811;c[84306]=93;c[84307]=47;c[84308]=305822;c[84309]=93;c[84310]=45;c[84311]=354708;c[84314]=305833;c[84315]=51;c[84316]=329;c[84317]=354708;c[84320]=354708;c[84323]=305843;c[84324]=51;c[84325]=315;c[84326]=354708;c[84329]=354708;c[84332]=354708;c[84335]=354708;c[84338]=354708;c[84341]=354708;c[84344]=330261;c[84345]=18;c[84347]=354708;c[84350]=354708;c[84353]=330243;c[84354]=14;c[84356]=354708;c[84359]=354708;c[84362]=354708;c[84365]=354708;c[84368]=354708;c[84371]=354708;c[84374]=305853;c[84375]=51;c[84376]=327;c[84377]=354708;c[84380]=354708;c[84383]=305863;c[84384]=51;c[84385]=313;c[84386]=354708;c[84389]=354708;c[84392]=354708;c[84395]=354708;c[84398]=330254;c[84399]=17;c[84401]=354708;c[84404]=331328;c[84405]=69;c[84406]=26;c[84407]=354708;c[84410]=305873;c[84411]=71;c[84412]=35;c[84413]=305885;c[84414]=71;c[84415]=31;c[84416]=354708;c[84419]=354708;c[84422]=305897;c[84423]=71;c[84424]=36;c[84425]=305909;c[84426]=71;c[84427]=32;c[84428]=330320;c[84429]=28;c[84431]=354708;c[84434]=354708;c[84437]=354708;c[84440]=354708;c[84443]=331410;c[84444]=101;c[84445]=8;c[84446]=354708;c[84449]=354708;c[84452]=354708;c[84455]=354708;c[84458]=305921;c[84459]=62;c[84460]=172;c[84461]=305939;c[84462]=62;c[84463]=167;c[84464]=354708;c[84467]=354708;c[84470]=330308;c[84471]=26;c[84473]=354708;c[84476]=331261;c[84477]=64;c[84478]=20;c[84479]=305957;c[84480]=60;c[84481]=273;c[84482]=331379;c[84483]=96;c[84484]=206;c[84485]=354708;c[84488]=305966;c[84489]=45;c[84490]=364;c[84491]=305986;c[84492]=45;c[84493]=362;c[84494]=354708;c[84497]=354708;c[84500]=330161;c[84501]=6;c[84503]=354708;c[84506]=354708;c[84509]=354708;c[84512]=354708;c[84515]=306006;c[84516]=60;c[84517]=275;c[84518]=306015;c[84519]=62;c[84520]=171;c[84521]=306033;c[84522]=62;c[84523]=166;c[84524]=354708;c[84527]=306051;c[84528]=47;c[84529]=385;c[84530]=306074;c[84531]=47;c[84532]=383;c[84533]=354708;c[84536]=306097;c[84537]=48;c[84538]=420;c[84539]=306124;c[84540]=48;c[84541]=418;c[84542]=331290;c[84543]=75;c[84544]=3;c[84545]=354708;c[84548]=354708;c[84551]=354708;c[84554]=306151;c[84555]=62;c[84556]=67;c[84557]=306159;c[84558]=62;c[84559]=56;c[84560]=354708;c[84563]=354708;c[84566]=306167;c[84567]=51;c[84568]=119;c[84569]=306174;c[84570]=51;c[84571]=101;c[84572]=354708;c[84575]=354708;c[84578]=306181;c[84579]=62;c[84580]=193;c[84581]=306201;c[84582]=62;c[84583]=189;c[84584]=354708;c[84587]=354708;c[84590]=306221;c[84591]=62;c[84592]=194;c[84593]=306241;c[84594]=62;c[84595]=190;c[84596]=354708;c[84599]=354708;c[84602]=354708;c[84605]=306261;c[84606]=51;c[84607]=330;c[84608]=354708;c[84611]=354708;c[84614]=354708;c[84617]=330314;c[84618]=27;c[84620]=354708;c[84623]=354708;c[84626]=354708;c[84629]=354708;c[84632]=354708;c[84635]=354708;c[84638]=306271;c[84639]=103;c[84640]=146;c[84641]=306280;c[84642]=103;c[84643]=132;c[84644]=306289;c[84645]=72;c[84646]=22;c[84647]=354708;c[84650]=354708;c[84653]=331065;c[84654]=55;c[84655]=10;c[84656]=354708;c[84659]=354708;c[84662]=354708;c[84665]=354708;c[84668]=354708;c[84671]=354708;c[84674]=306299;c[84675]=93;c[84676]=48;c[84677]=306311;c[84678]=93;c[84679]=46;c[84680]=354708;c[84683]=354708;c[84686]=354708;c[84689]=354708;c[84692]=354708;c[84695]=306323;c[84696]=62;c[84697]=173;c[84698]=306341;c[84699]=62;c[84700]=168;c[84701]=354708;c[84704]=354708;c[84707]=330505;c[84708]=59;c[84709]=7;c[84710]=354708;c[84713]=306359;c[84714]=62;c[84715]=159;c[84716]=354708;c[84719]=306376;c[84720]=62;c[84721]=160;c[84722]=306393;c[84723]=47;c[84724]=378;c[84725]=306416;c[84726]=47;c[84727]=376;c[84728]=306439;c[84729]=60;c[84730]=87;c[84731]=306446;c[84732]=60;c[84733]=81;c[84734]=306453;c[84735]=47;c[84736]=392;c[84737]=306476;c[84738]=47;c[84739]=390;c[84740]=354708;c[84743]=354708;c[84746]=354708;c[84749]=354708;c[84752]=306499;c[84753]=103;c[84754]=309;c[84755]=354708;c[84758]=306514;c[84759]=103;c[84760]=143;c[84761]=306524;c[84762]=103;c[84763]=129;c[84764]=306534;c[84765]=60;c[84766]=89;c[84767]=306541;c[84768]=60;c[84769]=83;c[84770]=354708;c[84773]=354708;c[84776]=354708;c[84779]=306548;c[84780]=62;c[84781]=170;c[84782]=306566;c[84783]=62;c[84784]=165;c[84785]=306584;c[84786]=62;c[84787]=171;c[84788]=306602;c[84789]=62;c[84790]=166;c[84791]=306620;c[84792]=47;c[84793]=399;c[84794]=306642;c[84795]=47;c[84796]=397;c[84797]=306664;c[84798]=60;c[84799]=72;c[84800]=306673;c[84801]=60;c[84802]=61;c[84803]=354708;c[84806]=306682;c[84807]=51;c[84808]=290;c[84809]=306692;c[84810]=60;c[84811]=73;c[84812]=306701;c[84813]=60;c[84814]=62;c[84815]=306710;c[84816]=60;c[84817]=76;c[84818]=306719;c[84819]=60;c[84820]=65;c[84821]=354708;c[84824]=354708;c[84827]=306728;c[84828]=60;c[84829]=77;c[84830]=306737;c[84831]=60;c[84832]=66;c[84833]=354708;c[84836]=354708;c[84839]=306746;c[84840]=60;c[84841]=235;c[84842]=354708;c[84845]=354708;c[84848]=354708;c[84851]=306755;c[84852]=45;c[84853]=363;c[84854]=306774;c[84855]=45;c[84856]=361;c[84857]=354708;c[84860]=354708;c[84863]=354708;c[84866]=306793;c[84867]=45;c[84868]=365;c[84869]=354708;c[84872]=354708;c[84875]=354708;c[84878]=354708;c[84881]=354708;c[84884]=354708;c[84887]=354708;c[84890]=306813;c[84891]=60;c[84892]=236;c[84893]=354708;c[84896]=306824;c[84897]=60;c[84898]=237;c[84899]=354708;c[84902]=354708;c[84905]=354708;c[84908]=306835;c[84909]=60;c[84910]=240;c[84911]=354708;c[84914]=306846;c[84915]=60;c[84916]=241;c[84917]=330923;c[84918]=111;c[84919]=-17;c[84920]=354708;c[84923]=354708;c[84926]=354708;c[84929]=330636;c[84930]=80;c[84931]=50;c[84932]=306857;c[84933]=49;c[84934]=371;c[84935]=306876;c[84936]=49;c[84937]=369;c[84938]=306895;c[84939]=51;c[84940]=122;c[84941]=306905;c[84942]=51;c[84943]=104;c[84944]=330624;c[84945]=79;c[84946]=197;c[84947]=354708;c[84950]=306915;c[84951]=51;c[84952]=123;c[84953]=306925;c[84954]=51;c[84955]=105;c[84956]=354708;c[84959]=354708;c[84962]=354708;c[84965]=306935;c[84966]=103;c[84967]=231;c[84968]=306947;c[84969]=103;c[84970]=183;c[84971]=354708;c[84974]=306962;c[84975]=103;c[84976]=225;c[84977]=306974;c[84978]=51;c[84979]=121;c[84980]=306982;c[84981]=51;c[84982]=103;c[84983]=354708;c[84986]=354708;c[84989]=306990;c[84990]=60;c[84991]=267;c[84992]=354708;c[84995]=354708;c[84998]=354708;c[85001]=306999;c[85002]=51;c[85003]=293;c[85004]=354708;c[85007]=354708;c[85010]=307009;c[85011]=62;c[85012]=159;c[85013]=354708;c[85016]=354708;c[85019]=354708;c[85022]=307026;c[85023]=62;c[85024]=160;c[85025]=307043;c[85026]=60;c[85027]=269;c[85028]=354708;c[85031]=307052;c[85032]=60;c[85033]=258;c[85034]=354708;c[85037]=307063;c[85038]=60;c[85039]=259;c[85040]=354708;c[85043]=354708;c[85046]=354708;c[85049]=307074;c[85050]=60;c[85051]=262;c[85052]=307085;c[85053]=51;c[85054]=279;c[85055]=307094;c[85056]=60;c[85057]=263;c[85058]=354708;c[85061]=307105;c[85062]=51;c[85063]=287;c[85064]=354708;c[85067]=354708;c[85070]=354708;c[85073]=307115;c[85074]=103;c[85075]=335;c[85076]=354708;c[85079]=354708;c[85082]=354708;c[85085]=354708;c[85088]=354708;c[85091]=354708;c[85094]=354708;c[85097]=354708;c[85100]=354708;c[85103]=330600;c[85104]=77;c[85105]=200;c[85106]=354708;c[85109]=354708;c[85112]=354708;c[85115]=354708;c[85118]=354708;c[85121]=354708;c[85124]=354708;c[85127]=307126;c[85128]=47;c[85129]=414;c[85130]=354708;c[85133]=307150;c[85134]=48;c[85135]=419;c[85136]=307176;c[85137]=48;c[85138]=417;c[85139]=354708;c[85142]=354708;c[85145]=354708;c[85148]=354708;c[85151]=307202;c[85152]=103;c[85153]=141;c[85154]=307210;c[85155]=103;c[85156]=127;c[85157]=307218;c[85158]=103;c[85159]=182;c[85160]=307233;c[85161]=103;c[85162]=180;c[85163]=354708;c[85166]=354708;c[85169]=354708;c[85172]=354708;c[85175]=354708;c[85178]=307248;c[85179]=51;c[85180]=120;c[85181]=307256;c[85182]=51;c[85183]=102;c[85184]=330762;c[85185]=104;c[85186]=0;c[85187]=307264;c[85188]=47;c[85189]=398;c[85190]=307285;c[85191]=47;c[85192]=396;c[85193]=354708;c[85196]=354708;c[85199]=354708;c[85202]=354708;c[85205]=354708;c[85208]=354708;c[85211]=354708;c[85214]=354708;c[85217]=354708;c[85220]=354708;c[85223]=307306;c[85224]=51;c[85225]=303;c[85226]=354708;c[85229]=307316;c[85230]=111;c[85231]=-16;c[85232]=354708;c[85235]=354708;c[85238]=354708;c[85241]=330367;c[85242]=36;c[85244]=354708;c[85247]=354708;c[85250]=354708;c[85253]=354708;c[85256]=307324;c[85257]=60;c[85258]=245;c[85259]=354708;c[85262]=307333;c[85263]=62;c[85264]=195;c[85265]=307353;c[85266]=62;c[85267]=191;c[85268]=354708;c[85271]=330068;c[85272]=1;c[85274]=307373;c[85275]=62;c[85276]=196;c[85277]=307393;c[85278]=62;c[85279]=192;c[85280]=354708;c[85283]=354708;c[85286]=307413;c[85287]=47;c[85288]=407;c[85289]=354708;c[85292]=354708;c[85295]=354708;c[85298]=354708;c[85301]=354708;c[85304]=354708;c[85307]=307436;c[85308]=60;c[85309]=246;c[85310]=354708;c[85313]=307447;c[85314]=60;c[85315]=247;c[85316]=354708;c[85319]=354708;c[85322]=354708;c[85325]=307458;c[85326]=60;c[85327]=250;c[85328]=330562;c[85329]=68;c[85330]=25;c[85331]=307469;c[85332]=60;c[85333]=251;c[85334]=354708;c[85337]=354708;c[85340]=354708;c[85343]=354708;c[85346]=354708;c[85349]=354708;c[85352]=307480;c[85353]=103;c[85354]=181;c[85355]=307494;c[85356]=103;c[85357]=179;c[85358]=354708;c[85361]=307508;c[85362]=51;c[85363]=350;c[85364]=307522;c[85365]=69;c[85366]=26;c[85367]=354708;c[85370]=354708;c[85373]=307533;c[85374]=51;c[85375]=320;c[85376]=354708;c[85379]=354708;c[85382]=354708;c[85385]=307545;c[85386]=51;c[85387]=321;c[85388]=354708;c[85391]=354708;c[85394]=354708;c[85397]=354708;c[85400]=307557;c[85401]=51;c[85402]=291;c[85403]=354708;c[85406]=307578;c[85407]=51;c[85408]=292;c[85409]=354708;c[85412]=307599;c[85413]=62;c[85414]=177;c[85415]=354708;c[85418]=307619;c[85419]=51;c[85420]=306;c[85421]=354708;c[85424]=354708;c[85427]=354708;c[85430]=307629;c[85431]=103;c[85432]=283;c[85433]=354708;c[85436]=354708;c[85439]=307644;c[85440]=51;c[85441]=319;c[85442]=307654;c[85443]=62;c[85444]=193;c[85445]=307674;c[85446]=62;c[85447]=189;c[85448]=307694;c[85449]=62;c[85450]=194;c[85451]=307714;c[85452]=62;c[85453]=190;c[85454]=354708;c[85457]=354708;c[85460]=307734;c[85461]=62;c[85462]=172;c[85463]=307752;c[85464]=62;c[85465]=167;c[85466]=307770;c[85467]=62;c[85468]=173;c[85469]=307788;c[85470]=62;c[85471]=168;c[85472]=354708;c[85475]=307806;c[85476]=103;c[85477]=228;c[85478]=307818;c[85479]=51;c[85480]=300;c[85481]=354708;c[85484]=307828;c[85485]=103;c[85486]=222;c[85487]=354708;c[85490]=354708;c[85493]=354708;c[85496]=354708;c[85499]=354708;c[85502]=307840;c[85503]=103;c[85504]=334;c[85505]=354708;c[85508]=354708;c[85511]=307850;c[85512]=103;c[85513]=316;c[85514]=307860;c[85515]=62;c[85516]=177;c[85517]=354708;c[85520]=307880;c[85521]=90;c[85522]=232;c[85523]=354708;c[85526]=307899;c[85527]=71;c[85528]=355;c[85529]=307916;c[85530]=90;c[85531]=226;c[85532]=354708;c[85535]=354708;c[85538]=354708;c[85541]=354708;c[85544]=307935;c[85545]=62;c[85546]=174;c[85547]=354708;c[85550]=354708;c[85553]=354708;c[85556]=354708;c[85559]=354708;c[85562]=354708;c[85565]=330648;c[85566]=81;c[85567]=1;c[85568]=354708;c[85571]=354708;c[85574]=354708;c[85577]=354708;c[85580]=307951;c[85581]=62;c[85582]=178;c[85583]=307971;c[85584]=103;c[85585]=326;c[85586]=354708;c[85589]=354708;c[85592]=354708;c[85595]=354708;c[85598]=354708;c[85601]=354708;c[85604]=354708;c[85607]=354708;c[85610]=354708;c[85613]=307982;c[85614]=62;c[85615]=195;c[85616]=308002;c[85617]=62;c[85618]=191;c[85619]=308022;c[85620]=62;c[85621]=196;c[85622]=308042;c[85623]=62;c[85624]=192;c[85625]=308062;c[85626]=51;c[85627]=288;c[85628]=354708;c[85631]=308083;c[85632]=51;c[85633]=289;c[85634]=308104;c[85635]=103;c[85636]=344;c[85637]=354708;c[85640]=308128;c[85641]=103;c[85642]=345;c[85643]=354708;c[85646]=308152;c[85647]=62;c[85648]=174;c[85649]=354708;c[85652]=354708;c[85655]=354708;c[85658]=354708;c[85661]=354708;c[85664]=354708;c[85667]=354708;c[85670]=354708;c[85673]=354708;c[85676]=354708;c[85679]=354708;c[85682]=308168;c[85683]=62;c[85684]=178;c[85685]=354708;c[85688]=354708;c[85691]=354708;c[85694]=308188;c[85695]=51;c[85696]=152;c[85697]=308196;c[85698]=51;c[85699]=138;c[85700]=354708;c[85703]=308204;c[85704]=47;c[85705]=413;c[85706]=308228;c[85707]=47;c[85708]=411;c[85709]=308252;c[85710]=60;c[85711]=238;c[85712]=308263;c[85713]=90;c[85714]=233;c[85715]=308282;c[85716]=60;c[85717]=239;c[85718]=354708;c[85721]=308293;c[85722]=90;c[85723]=227;c[85724]=330132;c[85725]=5;c[85727]=308312;c[85728]=60;c[85729]=242;c[85730]=354708;c[85733]=308323;c[85734]=60;c[85735]=243;c[85736]=354708;c[85739]=354708;c[85742]=354708;c[85745]=308334;c[85746]=103;c[85747]=317;c[85748]=354708;c[85751]=354708;c[85754]=354708;c[85757]=354708;c[85760]=354708;c[85763]=354708;c[85766]=354708;c[85769]=354708;c[85772]=308349;c[85773]=47;c[85774]=405;c[85775]=308371;c[85776]=47;c[85777]=403;c[85778]=354708;c[85781]=354708;c[85784]=354708;c[85787]=354708;c[85790]=354708;c[85793]=354708;c[85796]=354708;c[85799]=354708;c[85802]=354708;c[85805]=354708;c[85808]=354708;c[85811]=354708;c[85814]=354708;c[85817]=308393;c[85818]=51;c[85819]=304;c[85820]=354708;c[85823]=308414;c[85824]=51;c[85825]=305;c[85826]=354708;c[85829]=354708;c[85832]=354708;c[85835]=354708;c[85838]=354708;c[85841]=308435;c[85842]=60;c[85843]=84;c[85844]=308442;c[85845]=60;c[85846]=78;c[85847]=308449;c[85848]=103;c[85849]=296;c[85850]=308464;c[85851]=60;c[85852]=68;c[85853]=308471;c[85854]=60;c[85855]=57;c[85856]=354708;c[85859]=354708;c[85862]=308478;c[85863]=47;c[85864]=406;c[85865]=308501;c[85866]=47;c[85867]=404;c[85868]=354708;c[85871]=354708;c[85874]=354708;c[85877]=354708;c[85880]=354708;c[85883]=308524;c[85884]=51;c[85885]=311;c[85886]=354708;c[85889]=354708;c[85892]=354708;c[85895]=308536;c[85896]=51;c[85897]=312;c[85898]=330373;c[85899]=37;c[85901]=354708;c[85904]=354708;c[85907]=354708;c[85910]=354708;c[85913]=354708;c[85916]=354708;c[85919]=354708;c[85922]=354708;c[85925]=354708;c[85928]=354708;c[85931]=354708;c[85934]=354708;c[85937]=354708;c[85940]=354708;c[85943]=354708;c[85946]=354708;c[85949]=308548;c[85950]=51;c[85951]=310;c[85952]=354708;c[85955]=354708;c[85958]=354708;c[85961]=354708;c[85964]=354708;c[85967]=354708;c[85970]=308558;c[85971]=103;c[85972]=342;c[85973]=330189;c[85974]=7;c[85976]=308582;c[85977]=103;c[85978]=343;c[85979]=354708;c[85982]=354708;c[85985]=354708;c[85988]=308606;c[85989]=49;c[85990]=370;c[85991]=308624;c[85992]=49;c[85993]=368;c[85994]=354708;c[85997]=354708;c[86e3]=354708;c[86003]=354708;c[86006]=354708;c[86009]=354708;c[86012]=308642;c[86013]=103;c[86014]=325;c[86015]=354708;c[86018]=354708;c[86021]=308652;c[86022]=103;c[86023]=307;c[86024]=308662;c[86025]=103;c[86026]=110;c[86027]=308673;c[86028]=103;c[86029]=92;c[86030]=308684;c[86031]=90;c[86032]=229;c[86033]=354708;c[86036]=308703;c[86037]=71;c[86038]=354;c[86039]=308720;c[86040]=90;c[86041]=223;c[86042]=308739;c[86043]=51;c[86044]=301;c[86045]=354708;c[86048]=308760;c[86049]=51;c[86050]=302;c[86051]=354708;c[86054]=354708;c[86057]=354708;c[86060]=354708;c[86063]=354708;c[86066]=354708;c[86069]=354708;c[86072]=354708;c[86075]=354708;c[86078]=354708;c[86081]=354708;c[86084]=354708;c[86087]=354708;c[86090]=354708;c[86093]=354708;c[86096]=354708;c[86099]=330612;c[86100]=78;c[86101]=51;c[86102]=354708;c[86105]=354708;c[86108]=308781;c[86109]=51;c[86110]=341;c[86111]=354708;c[86114]=354708;c[86117]=330543;c[86118]=65;c[86119]=202;c[86120]=330533;c[86121]=63;c[86122]=198;c[86123]=354708;c[86126]=308791;c[86127]=60;c[86128]=248;c[86129]=354708;c[86132]=308802;c[86133]=60;c[86134]=249;c[86135]=354708;c[86138]=354708;c[86141]=354708;c[86144]=308813;c[86145]=60;c[86146]=252;c[86147]=354708;c[86150]=308824;c[86151]=60;c[86152]=253;c[86153]=354708;c[86156]=354708;c[86159]=354708;c[86162]=308835;c[86163]=103;c[86164]=214;c[86165]=354708;c[86168]=354708;c[86171]=354708;c[86174]=354708;c[86177]=354708;c[86180]=354708;c[86183]=354708;c[86186]=354708;c[86189]=354708;c[86192]=354708;c[86195]=354708;c[86198]=354708;c[86201]=354708;c[86204]=354708;c[86207]=354708;c[86210]=354708;c[86213]=354708;c[86216]=354708;c[86219]=354708;c[86222]=308847;c[86223]=90;c[86224]=230;c[86225]=354708;c[86228]=354708;c[86231]=308866;c[86232]=90;c[86233]=224;c[86234]=354708;c[86237]=354708;c[86240]=354708;c[86243]=354708;c[86246]=354708;c[86249]=354708;c[86252]=354708;c[86255]=308885;c[86256]=103;c[86257]=308;c[86258]=354708;c[86261]=330715;c[86262]=94;c[86263]=203;c[86264]=354708;c[86267]=354708;c[86270]=354708;c[86273]=354708;c[86276]=354708;c[86279]=354708;c[86282]=354708;c[86285]=354708;c[86288]=308900;c[86289]=68;c[86290]=25;c[86291]=354708;c[86294]=354708;c[86297]=354708;c[86300]=354708;c[86303]=354708;c[86306]=354708;c[86309]=354708;c[86312]=354708;c[86315]=354708;c[86318]=354708;c[86321]=308911;c[86322]=60;c[86323]=270;c[86324]=354708;c[86327]=354708;c[86330]=354708;c[86333]=308920;c[86334]=62;c[86335]=175;c[86336]=354708;c[86339]=354708;c[86342]=354708;c[86345]=354708;c[86348]=354708;c[86351]=354708;c[86354]=331314;c[86355]=102;c[86356]=6;c[86357]=354708;c[86360]=354708;c[86363]=354708;c[86366]=354708;c[86369]=354708;c[86372]=354708;c[86375]=354708;c[86378]=354708;c[86381]=354708;c[86384]=354708;c[86387]=354708;c[86390]=354708;c[86393]=354708;c[86396]=354708;c[86399]=354708;c[86402]=354708;c[86405]=354708;c[86408]=354708;c[86411]=354708;c[86414]=354708;c[86417]=354708;c[86420]=354708;c[86423]=330283;c[86424]=22;c[86426]=354708;c[86429]=354708;c[86432]=354708;c[86435]=308940;c[86436]=62;c[86437]=175;c[86438]=308960;c[86439]=47;c[86440]=402;c[86441]=308979;c[86442]=47;c[86443]=401;c[86444]=354708;c[86447]=354708;c[86450]=354708;c[86453]=354708;c[86456]=354708;c[86459]=354708;c[86462]=354708;c[86465]=354708;c[86468]=354708;c[86471]=354708;c[86474]=354708;c[86477]=308998;c[86478]=9;c[86480]=354708;c[86483]=354708;c[86486]=354708;c[86489]=354708;c[86492]=354708;c[86495]=354708;c[86498]=354708;c[86501]=309005;c[86502]=62;c[86503]=176;c[86504]=354708;c[86507]=354708;c[86510]=354708;c[86513]=354708;c[86516]=354708;c[86519]=354708;c[86522]=354708;c[86525]=354708;c[86528]=354708;c[86531]=309025;c[86532]=62;c[86533]=154;c[86534]=354708;c[86537]=354708;c[86540]=354708;c[86543]=354708;c[86546]=354708;c[86549]=354708;c[86552]=354708;c[86555]=354708;c[86558]=354708;c[86561]=309038;c[86562]=51;c[86563]=285;c[86564]=354708;c[86567]=354708;c[86570]=354708;c[86573]=309050;c[86574]=51;c[86575]=286;c[86576]=354708;c[86579]=309062;c[86580]=103;c[86581]=218;c[86582]=354708;c[86585]=354708;c[86588]=354708;c[86591]=354708;c[86594]=354708;c[86597]=354708;c[86600]=354708;c[86603]=309074;c[86604]=62;c[86605]=176;c[86606]=354708;c[86609]=354708;c[86612]=354708;c[86615]=354708;c[86618]=309094;c[86619]=51;c[86620]=332;c[86621]=354708;c[86624]=354708;c[86627]=309104;c[86628]=51;c[86629]=284;c[86630]=354708;c[86633]=309114;c[86634]=62;c[86635]=154;c[86636]=354708;c[86639]=354708;c[86642]=354708;c[86645]=354708;c[86648]=354708;c[86651]=354708;c[86654]=354708;c[86657]=354708;c[86660]=354708;c[86663]=354708;c[86666]=354708;c[86669]=354708;c[86672]=309127;c[86673]=103;c[86674]=346;c[86675]=354708;c[86678]=309149;c[86679]=103;c[86680]=347;c[86681]=354708;c[86684]=354708;c[86687]=354708;c[86690]=354708;c[86693]=354708;c[86696]=354708;c[86699]=309171;c[86700]=103;c[86701]=281;c[86702]=354708;c[86705]=354708;c[86708]=354708;c[86711]=354708;c[86714]=309181;c[86715]=71;c[86716]=352;c[86717]=354708;c[86720]=354708;c[86723]=354708;c[86726]=354708;c[86729]=354708;c[86732]=309198;c[86733]=90;c[86734]=215;c[86735]=354708;c[86738]=309219;c[86739]=90;c[86740]=216;c[86741]=354708;c[86744]=354708;c[86747]=354708;c[86750]=354708;c[86753]=354708;c[86756]=354708;c[86759]=354708;c[86762]=354708;c[86765]=354708;c[86768]=354708;c[86771]=354708;c[86774]=354708;c[86777]=354708;c[86780]=354708;c[86783]=354708;c[86786]=354708;c[86789]=354708;c[86792]=354708;c[86795]=354708;c[86798]=354708;c[86801]=354708;c[86804]=354708;c[86807]=354708;c[86810]=354708;c[86813]=354708;c[86816]=354708;c[86819]=354708;c[86822]=354708;c[86825]=354708;c[86828]=354708;c[86831]=309240;c[86832]=60;c[86833]=264;c[86834]=354708;c[86837]=354708;c[86840]=309249;c[86841]=60;c[86842]=254;c[86843]=354708;c[86846]=354708;c[86849]=309258;c[86850]=103;c[86851]=348;c[86852]=354708;c[86855]=309280;c[86856]=103;c[86857]=349;c[86858]=354708;c[86861]=354708;c[86864]=354708;c[86867]=354708;c[86870]=354708;c[86873]=354708;c[86876]=354708;c[86879]=330695;c[86880]=92;c[86881]=351;c[86882]=354708;c[86885]=354708;c[86888]=354708;c[86891]=354708;c[86894]=354708;c[86897]=354708;c[86900]=354708;c[86903]=354708;c[86906]=354708;c[86909]=309302;c[86910]=90;c[86911]=217;c[86912]=354708;c[86915]=354708;c[86918]=354708;c[86921]=354708;c[86924]=354708;c[86927]=354708;c[86930]=354708;c[86933]=309321;c[86934]=103;c[86935]=282;c[86936]=354708;c[86939]=354708;c[86942]=354708;c[86945]=354708;c[86948]=354708;c[86951]=354708;c[86954]=354708;c[86957]=354708;c[86960]=354708;c[86963]=354708;c[86966]=354708;c[86969]=354708;c[86972]=354708;c[86975]=354708;c[86978]=309336;c[86979]=51;c[86980]=298;c[86981]=354708;c[86984]=354708;c[86987]=354708;c[86990]=309348;c[86991]=51;c[86992]=299;c[86993]=354708;c[86996]=354708;c[86999]=354708;c[87002]=354708;c[87005]=354708;c[87008]=354708;c[87011]=354708;c[87014]=354708;c[87017]=354708;c[87020]=354708;c[87023]=354708;c[87026]=354708;c[87029]=354708;c[87032]=354708;c[87035]=354708;c[87038]=354708;c[87041]=354708;c[87044]=309360;c[87045]=51;c[87046]=297;c[87047]=354708;c[87050]=354708;c[87053]=354708;c[87056]=354708;c[87059]=354708;c[87062]=354708;c[87065]=354708;c[87068]=354708;c[87071]=309370;c[87072]=80;c[87073]=50;c[87074]=354708;c[87077]=354708;c[87080]=354708;c[87083]=354708;c[87086]=354708;c[87089]=354708;c[87092]=354708;c[87095]=354708;c[87098]=354708;c[87101]=354708;c[87104]=354708;c[87107]=354708;c[87110]=354708;c[87113]=354708;c[87116]=309385;c[87117]=103;c[87118]=294;c[87119]=354708;c[87122]=354708;c[87125]=354708;c[87128]=354708;c[87131]=309395;c[87132]=71;c[87133]=353;c[87134]=354708;c[87137]=309412;c[87138]=47;c[87139]=412;c[87140]=309435;c[87141]=47;c[87142]=410;c[87143]=354708;c[87146]=354708;c[87149]=309458;c[87150]=90;c[87151]=219;c[87152]=354708;c[87155]=309479;c[87156]=90;c[87157]=220;c[87158]=309500;c[87159]=46;c[87160]=356;c[87161]=354708;c[87164]=354708;c[87167]=354708;c[87170]=354708;c[87173]=354708;c[87176]=354708;c[87179]=354708;c[87182]=354708;c[87185]=354708;c[87188]=354708;c[87191]=354708;c[87194]=354708;c[87197]=354708;c[87200]=354708;c[87203]=354708;c[87206]=354708;c[87209]=354708;c[87212]=354708;c[87215]=354708;c[87218]=354708;c[87221]=354708;c[87224]=354708;c[87227]=354708;c[87230]=309514;c[87231]=48;c[87232]=416;c[87233]=309537;c[87234]=48;c[87235]=415;c[87236]=354708;c[87239]=354708;c[87242]=354708;c[87245]=354708;c[87248]=354708;c[87251]=354708;c[87254]=354708;c[87257]=354708;c[87260]=354708;c[87263]=354708;c[87266]=354708;c[87269]=354708;c[87272]=354708;c[87275]=354708;c[87278]=354708;c[87281]=354708;c[87284]=354708;c[87287]=354708;c[87290]=354708;c[87293]=354708;c[87296]=354708;c[87299]=354708;c[87302]=354708;c[87305]=354708;c[87308]=354708;c[87311]=354708;c[87314]=354708;c[87317]=354708;c[87320]=354708;c[87323]=354708;c[87326]=309560;c[87327]=90;c[87328]=221;c[87329]=354708;c[87332]=354708;c[87335]=354708;c[87338]=354708;c[87341]=354708;c[87344]=354708;c[87347]=354708;c[87350]=309579;c[87351]=103;c[87352]=295;c[87353]=354708;c[87356]=354708;c[87359]=354708;c[87362]=354708;c[87365]=354708;c[87368]=354708;c[87371]=354708;c[87374]=354708;c[87377]=309594;c[87378]=51;c[87379]=153;c[87380]=309607;c[87381]=51;c[87382]=139;c[87383]=354708;c[87386]=354708;c[87389]=354708;c[87392]=354708;c[87395]=354708;c[87398]=354708;c[87401]=354708;c[87404]=354708;c[87407]=354708;c[87410]=354708;c[87413]=354708;c[87416]=354708;c[87419]=354708;c[87422]=354708;c[87425]=354708;c[87428]=354708;c[87431]=354708;c[87434]=354708;c[87437]=354708;c[87440]=354708;c[87443]=354708;c[87446]=354708;c[87449]=354708;c[87452]=354708;c[87455]=354708;c[87458]=354708;c[87461]=354708;c[87464]=354708;c[87467]=354708;c[87470]=354708;c[87473]=354708;c[87476]=354708;c[87479]=354708;c[87482]=354708;c[87485]=354708;c[87488]=354708;c[87491]=354708;c[87494]=354708;c[87497]=354708;c[87500]=354708;c[87503]=354708;c[87506]=354708;c[87509]=354708;c[87512]=354708;c[87515]=354708;c[87518]=309620;c[87519]=60;c[87520]=234;c[87521]=354708;c[87524]=354708;c[87527]=354708;c[87530]=354708;c[87533]=354708;c[87536]=354708;c[87539]=354708;c[87542]=354708;c[87545]=354708;c[87548]=354708;c[87551]=354708;c[87554]=354708;c[87557]=354708;c[87560]=354708;c[87563]=354708;c[87566]=354708;c[87569]=354708;c[87572]=354708;c[87575]=354708;c[87578]=354708;c[87581]=354708;c[87584]=354708;c[87587]=354708;c[87590]=354708;c[87593]=354708;c[87596]=354708;c[87599]=354708;c[87602]=354708;c[87605]=354708;c[87608]=354708;c[87611]=354708;c[87614]=354708;c[87617]=354708;c[87620]=354708;c[87623]=354708;c[87626]=354708;c[87629]=354708;c[87632]=354708;c[87635]=354708;c[87638]=354708;c[87641]=354708;c[87644]=354708;c[87647]=354708;c[87650]=354708;c[87653]=354708;c[87656]=354708;c[87659]=354708;c[87662]=354708;c[87665]=354708;c[87668]=354708;c[87671]=354708;c[87674]=354708;c[87677]=354708;c[87680]=354708;c[87683]=354708;c[87686]=354708;c[87689]=354708;c[87692]=354708;c[87695]=354708;c[87698]=354708;c[87701]=354708;c[87704]=354708;c[87707]=354708;c[87710]=354708;c[87713]=354708;c[87716]=354708;c[87719]=354708;c[87722]=354708;c[87725]=354708;c[87728]=354708;c[87731]=354708;c[87734]=354708;c[87737]=354708;c[87740]=354708;c[87743]=354708;c[87746]=354708;c[87749]=354708;c[87752]=354708;c[87755]=354708;c[87758]=354708;c[87761]=354708;c[87764]=354708;c[87767]=354708;c[87770]=354708;c[87773]=354708;c[87776]=354708;c[87779]=354708;c[87782]=354708;c[87785]=354708;c[87788]=354708;c[87791]=354708;c[87794]=354708;c[87797]=354708;c[87800]=354708;c[87803]=354708;c[87806]=354708;c[87809]=354708;c[87812]=309629;c[87813]=78;c[87814]=51;c[87815]=354708;c[87818]=354708;c[87821]=354708;c[87824]=354708;c[87827]=354708;c[87830]=354708;c[87833]=354708;c[87836]=354708;c[87839]=354708;c[87842]=354708;c[87845]=354708;c[87848]=354708;c[87851]=354708;c[87854]=354708;c[87857]=354708;c[87860]=354708;c[87863]=354708;c[87866]=354708;c[87869]=354708;c[87872]=354708;c[87875]=354708;c[87878]=354708;c[87881]=354708;c[87884]=354708;c[87887]=354708;c[87890]=354708;c[87893]=354708;c[87896]=354708;c[87899]=354708;c[87902]=354708;c[87905]=354708;c[87908]=354708;c[87911]=354708;c[87914]=354708;c[87917]=354708;c[87920]=354708;c[87923]=354708;c[87926]=354708;c[87929]=354708;c[87932]=354708;c[87935]=309641;c[87936]=60;c[87937]=244;c[87938]=354708;c[87941]=354708;c[87944]=354708;c[87947]=354708;c[87950]=354708;c[87953]=354708;c[87956]=354708;c[87959]=354708;c[87962]=354708;c[87965]=354708;c[87968]=354708;c[87971]=354708;c[87974]=354708;c[87977]=354708;c[87980]=354708;c[87983]=354708;c[87986]=354708;c[87989]=354708;c[87992]=354708;c[87995]=354708;c[87998]=354708;c[88001]=354708;c[88004]=354708;c[88007]=354708;c[88010]=354708;c[88013]=354708;c[88016]=354708;c[88019]=354708;c[88022]=354708;c[88025]=354708;c[88028]=354708;c[88031]=354708;c[88034]=354708;c[88037]=354708;c[88040]=354708;c[88043]=354708;c[88046]=354708;c[88049]=354708;c[88052]=354708;c[88055]=354708;c[88058]=354708;c[88061]=354708;c[88064]=354708;c[88067]=354708;c[88070]=354708;c[88073]=354708;c[88076]=354708;c[88079]=354708;c[88082]=354708;c[88085]=354708;c[88088]=354708;c[88091]=354708;c[88094]=354708;c[88097]=354708;c[88100]=354708;c[88103]=354708;c[88106]=354708;c[88109]=354708;c[88112]=354708;c[88115]=354708;c[88118]=354708;c[88121]=354708;c[88124]=354708;c[88127]=354708;c[88130]=354708;c[88133]=354708;c[88136]=354708;c[88139]=354708;c[88142]=354708;c[88145]=354708;c[88148]=354708;c[88151]=354708;c[88154]=354708;c[88157]=354708;c[88160]=354708;c[88163]=354708;c[88166]=354708;c[88169]=354708;c[88172]=354708;c[88175]=354708;c[88178]=354708;c[88181]=354708;c[88184]=354708;c[88187]=354708;c[88190]=354708;c[88193]=354708;c[88196]=354708;c[88199]=354708;c[88202]=354708;c[88205]=354708;c[88208]=354708;c[88211]=354708;c[88214]=354708;c[88217]=354708;c[88220]=354708;c[88223]=354708;c[88226]=354708;c[88229]=354708;c[88232]=354708;c[88235]=354708;c[88238]=354708;c[88241]=354708;c[88244]=354708;c[88247]=354708;c[88250]=354708;c[88253]=354708;c[88256]=354708;c[88259]=354708;c[88262]=354708;c[88265]=354708;c[88268]=354708;c[88271]=354708;c[88274]=354708;c[88277]=354708;c[88280]=354708;c[88283]=354708;c[88286]=354708;c[88289]=354708;c[88292]=354708;c[88295]=354708;c[88298]=354708;c[88301]=354708;c[88304]=354708;c[88307]=354708;c[88310]=354708;c[88313]=354708;c[88316]=354708;c[88319]=354708;c[88322]=354708;c[88325]=354708;c[88328]=354708;c[88331]=354708;c[88334]=354708;c[88337]=354708;c[88340]=354708;c[88343]=354708;c[88346]=354708;c[88349]=354708;c[88352]=354708;c[88355]=354708;c[88358]=354708;c[88361]=354708;c[88364]=354708;c[88367]=354708;c[88370]=330588;c[88371]=76;c[88372]=199;c[88373]=354708;c[88376]=354708;c[88379]=354708;c[88382]=354708;c[88385]=354708;c[88388]=354708;c[88391]=354708;c[88394]=354708;c[88397]=354708;c[88400]=354708;c[88403]=354708;c[88406]=354708;c[88409]=354708;c[88412]=354708;c[88415]=354708;c[88418]=354708;c[88421]=354708;c[88424]=354708;c[88427]=354708;c[88430]=354708;c[88433]=354708;c[88436]=354708;c[88439]=354708;c[88442]=354708;c[88445]=354708;c[88448]=354708;c[88451]=354708;c[88454]=354708;c[88457]=354708;c[88460]=354708;c[88463]=354708;c[88466]=354708;c[88469]=354708;c[88472]=354708;c[88475]=354708;c[88478]=354708;c[88481]=354708;c[88484]=354708;c[88487]=354708;c[88490]=354708;c[88493]=354708;c[88496]=354708;c[88499]=354708;c[88502]=354708;c[88505]=354708;c[88508]=354708;c[88511]=354708;c[88514]=354708;c[88517]=354708;c[88520]=354708;c[88523]=354708;c[88526]=309650;c[88527]=47;c[88528]=409;c[88529]=309670;c[88530]=47;c[88531]=408}if((j+-2|0)>>>0<27){switch(j|0){case 18:{g=18;l=14;break}case 17:{g=17;l=15;break}case 16:{g=16;l=16;break}case 14:case 15:{g=j;l=17;break}case 13:{g=13;l=18;break}case 12:{g=12;l=19;break}case 11:{g=11;l=20;break}case 9:case 10:{g=j;l=21;break}case 8:{g=8;l=22;break}case 7:{g=7;l=23;break}case 6:{g=6;l=24;break}case 5:{g=5;l=25;break}case 3:case 4:{g=j;l=26;break}case 2:{h=2;break}default:{g=j+(e[15888+(d[k+18>>0]<<1)>>1]|0)|0;l=14}}if((l|0)==14){g=g+(e[15888+(d[k+17>>0]<<1)>>1]|0)|0;l=15}if((l|0)==15){g=g+(e[15888+(((a[k+16>>0]|0)+1&255)<<1)>>1]|0)|0;l=16}if((l|0)==16){g=g+(e[15888+(d[k+15>>0]<<1)>>1]|0)|0;l=17}if((l|0)==17){g=g+(e[15888+(d[k+13>>0]<<1)>>1]|0)|0;l=18}if((l|0)==18){g=g+(e[15888+(d[k+12>>0]<<1)>>1]|0)|0;l=19}if((l|0)==19){g=g+(e[15888+(d[k+11>>0]<<1)>>1]|0)|0;l=20}if((l|0)==20){g=g+(e[15888+(d[k+10>>0]<<1)>>1]|0)|0;l=21}if((l|0)==21){g=g+(e[15888+(d[k+8>>0]<<1)>>1]|0)|0;l=22}if((l|0)==22){g=g+(e[15888+(d[k+7>>0]<<1)>>1]|0)|0;l=23}if((l|0)==23){g=g+(e[15888+(d[k+6>>0]<<1)>>1]|0)|0;l=24}if((l|0)==24){g=g+(e[15888+(d[k+5>>0]<<1)>>1]|0)|0;l=25}if((l|0)==25){g=g+(e[15888+(((a[k+4>>0]|0)+1&255)<<1)>>1]|0)|0;l=26}if((l|0)==26)h=g+(e[15888+(d[k+2>>0]<<1)>>1]|0)|0;g=a[k>>0]|0;i=j+-1|0;m=h+(e[15888+((g&255)<<1)>>1]|0)+(e[15888+(d[k+i>>0]<<1)>>1]|0)|0;if(((m>>>0<1864?(o=c[331760+(m*12|0)>>2]|0,g<<24>>24==(a[o>>0]|0)):0)?(wA(k+1|0,o+1|0,i)|0)==0:0)?(a[o+j>>0]|0)==0:0){l=c[331760+(m*12|0)+4>>2]|0;if(l>>>0<42){k=f+4|0;m=a[k+11>>0]|0;j=m<<24>>24<0;m=j?c[f+8>>2]|0:m&255;o=c[f+16>>2]|0;s=c[f+28>>2]|0;r=(c[n>>2]|0)-s+1|0;s=(c[q>>2]|0)-s+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=m;c[p+8>>2]=o;c[p+12>>2]=(r|0)>1?r:1;c[p+16>>2]=(s|0)>1?s:1;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];ky(b,t,l);aa=u;return}h=f+4|0;k=a[h+11>>0]|0;p=k<<24>>24<0;k=p?c[f+8>>2]|0:k&255;j=c[f+16>>2]|0;g=c[f+28>>2]|0;i=(c[n>>2]|0)-g+1|0;i=(i|0)>1?i:1;g=(c[q>>2]|0)-g+1|0;g=(g|0)>1?g:1;h=p?c[h>>2]|0:h;if((l|0)==111){c[r>>2]=h;c[r+4>>2]=k;c[r+8>>2]=j;c[r+12>>2]=i;c[r+16>>2]=g;s=c[331760+(m*12|0)+8>>2]|0;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[t+16>>2]=c[r+16>>2];ly(b,t,111,s);aa=u;return}else{c[s>>2]=h;c[s+4>>2]=k;c[s+8>>2]=j;c[s+12>>2]=i;c[s+16>>2]=g;r=c[331760+(m*12|0)+8>>2]|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];c[t+16>>2]=c[s+16>>2];ny(b,t,l,r);aa=u;return}}}l=f+4|0;m=a[l+11>>0]|0;k=m<<24>>24<0;m=k?c[f+8>>2]|0:m&255;o=c[f+16>>2]|0;s=c[n>>2]|0;n=c[f+28>>2]|0;f=s-n+1|0;r=c[q>>2]|0;q=r-n+1|0;c[p>>2]=k?c[l>>2]|0:l;c[p+4>>2]=m;c[p+8>>2]=o;c[p+12>>2]=(f|0)>1?f:1;c[p+16>>2]=(q|0)>1?q:1;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];my(b,t,108,s,r-s|0);aa=u;return}function _p(b,e,f){b=b|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,q=0,r=0;r=aa;aa=aa+64|0;o=r+32|0;p=r+12|0;m=r;q=e+36|0;g=c[q>>2]|0;n=c[e+24>>2]|0;j=g;i=j;while(1){h=g>>>0<n>>>0;if(h)k=(d[g>>0]|0)+1|0;else k=0;if(!(a[15616+k>>0]&4))break;if(h){g=g+1|0;c[q>>2]=g;j=g;i=j}k=g>>>0<n>>>0;do if(k){h=a[g>>0]|0;if(h<<24>>24==95){g=g+1|0;c[q>>2]=g;j=g;i=j;break}else{h=(h&255)+1|0;l=11;break}}else{h=0;l=11}while(0);if((l|0)==11){l=0;if(!(a[15616+h>>0]&4)){l=13;break}}}if((l|0)==13){a:do if(k?(a[g>>0]|0)==46:0){h=g+1|0;c[q>>2]=h;j=h;if(h>>>0<n>>>0)g=(d[h>>0]|0)+1|0;else g=0;if(!(a[15616+g>>0]&4)){i=j;k=42}else{i=j;k=j;while(1){g=h>>>0<n>>>0;if(g)j=(d[h>>0]|0)+1|0;else j=0;if(!(a[15616+j>>0]&4))break;if(g){h=h+1|0;c[q>>2]=h;j=h;i=j}else j=k;do if(h>>>0<n>>>0){g=a[h>>0]|0;if(g<<24>>24==95){h=h+1|0;c[q>>2]=h;g=h;i=g;break}else{g=(g&255)+1|0;l=28;break}}else{g=0;l=28}while(0);if((l|0)==28){l=0;if(!(a[15616+g>>0]&4)){k=42;break a}else g=j}k=g}b:while(1){i=h>>>0<n>>>0;if(i)g=d[h>>0]|0;else g=-1;while(1){if(!(a[15616+(g+1)>>0]&1))break b;if(i)break;else g=-1}m=h+1|0;c[q>>2]=m;h=m}n=h;k=e+4|0;f=a[k+11>>0]|0;j=f<<24>>24<0;f=j?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}}else{h=g;k=f}while(0);c:do if(h>>>0<n>>>0){switch(a[h>>0]|0){case 80:case 112:break;default:{g=h;h=j;l=k;break c}}g=h+1|0;c[q>>2]=g;d:do if(g>>>0<n>>>0){switch(a[g>>0]|0){case 45:case 43:break;default:break d}g=h+2|0;c[q>>2]=g}while(0);e:do if(g>>>0<n>>>0){while(1){if(((d[g>>0]|0)+-48|0)>>>0>=10)break e;i=g+1|0;c[q>>2]=i;if(i>>>0>=n>>>0)break;h=a[i>>0]|0;if(h<<24>>24!=95)if(((h&255)+-48|0)>>>0<10)g=i;else break;else{g=g+2|0;c[q>>2]=g}if(g>>>0>=n>>>0)break e}h=i;g=i;i=h;l=42;break c}while(0);f:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break f;if(i)break;else h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;k=e+4|0;f=a[k+11>>0]|0;j=f<<24>>24<0;f=j?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}else{g=h;h=j;l=k}while(0);f=0;while(1){j=g>>>0<n>>>0;if(j)k=d[g>>0]|0;else k=-1;if(!(a[15616+(k+1)>>0]&1))break;if(j){g=g+1|0;c[q>>2]=g;h=g;i=h}f=f+1|0}if(!f)if((l|0)==42){k=e+4|0;f=a[k+11>>0]|0;j=f<<24>>24<0;f=j?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;n=q-e+1|0;e=i-e+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(n|0)>1?n:1;c[p+16>>2]=(e|0)>1?e:1;c[m>>2]=2;c[m+4>>2]=q;c[m+8>>2]=i-q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,42,m);aa=r;return}else{j=e+4|0;k=a[j+11>>0]|0;i=k<<24>>24<0;k=i?c[e+8>>2]|0:k&255;f=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;n=q-e+1|0;e=h-e+1|0;c[p>>2]=i?c[j>>2]|0:j;c[p+4>>2]=k;c[p+8>>2]=f;c[p+12>>2]=(n|0)>1?n:1;c[p+16>>2]=(e|0)>1?e:1;c[m>>2]=0;c[m+4>>2]=q;c[m+8>>2]=h-q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,l,m);aa=r;return}}g:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break g;if(i)break;else h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;k=e+4|0;f=a[k+11>>0]|0;j=f<<24>>24<0;f=j?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}function $p(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+48|0;n=p+24|0;o=p;m=p+4|0;l=b+36|0;f=c[l>>2]|0;k=c[b+24>>2]|0;a:do if(f>>>0<k>>>0){e=b+16|0;g=b+28|0;h=1;b:while(1){i=f+1|0;c[l>>2]=i;j=i;switch(a[f>>0]|0){case 10:{c[e>>2]=(c[e>>2]|0)+1;c[g>>2]=j;f=i;break}case 59:{if(i>>>0<k>>>0?(a[i>>0]|0)==41:0){i=f+2|0;c[l>>2]=i;h=h+-1|0;if(!h){e=1;break b}else{f=i;j=i}}else f=i;break}case 40:{if(i>>>0<k>>>0?(a[i>>0]|0)==59:0){j=f+2|0;c[l>>2]=j;f=j;h=h+1|0}else f=i;break}default:f=i}if(f>>>0>=k>>>0){f=j;break a}}aa=p;return e|0}else{g=b+28|0;e=b+16|0}while(0);i=b+4|0;j=a[i+11>>0]|0;h=j<<24>>24<0;j=h?c[b+8>>2]|0:j&255;k=c[e>>2]|0;g=c[g>>2]|0;l=(c[b+32>>2]|0)-g+1|0;b=f-g+1|0;c[m>>2]=h?c[i>>2]|0:i;c[m+4>>2]=j;c[m+8>>2]=k;c[m+12>>2]=(l|0)>1?l:1;c[m+16>>2]=(b|0)>1?b:1;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];aq(d,n,303912,o);o=0;aa=p;return o|0}function aq(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;j=aa;aa=aa+176|0;k=j+144|0;f=j+128|0;g=j;h=j+164|0;i=j+160|0;c[k>>2]=e;c[f>>2]=c[k>>2];c[h>>2]=g;e=(Vz(g,128,d,k)|0)+1|0;if(e>>>0>128){g=aa;aa=aa+((1*e|0)+15&-16)|0;c[h>>2]=g;Vz(g,e,d,f)|0}e=c[a+8>>2]|0;c[i>>2]=1;d=e+4|0;f=c[d>>2]|0;if(f>>>0<(c[e+8>>2]|0)>>>0){k=Uz(g)|0;c[f>>2]=1;i=f+4|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];c[i+16>>2]=c[b+16>>2];Wn(f+24|0,g,k);c[d>>2]=(c[d>>2]|0)+36;aa=j;return}else{bq(e,i,b,h);aa=j;return}}function bq(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,n=0,o=0;o=aa;aa=aa+32|0;i=o;m=b+4|0;g=c[b>>2]|0;k=((c[m>>2]|0)-g|0)/36|0;h=k+1|0;if(h>>>0>119304647)HB();n=b+8|0;l=((c[n>>2]|0)-g|0)/36|0;g=l<<1;g=l>>>0<59652323?(g>>>0<h>>>0?h:g):119304647;do if(g)if(g>>>0>119304647)U();else{j=_A(g*36|0)|0;break}else j=0;while(0);h=j+(k*36|0)|0;l=j+(g*36|0)|0;g=c[d>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];d=c[f>>2]|0;f=Uz(d)|0;c[h>>2]=g;g=j+(k*36|0)+4|0;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];Wn(j+(k*36|0)+24|0,d,f);f=h+36|0;d=c[b>>2]|0;g=c[m>>2]|0;if((g|0)==(d|0)){e=d;g=d}else{do{j=h;h=h+-36|0;k=g;g=g+-36|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];j=j+-12|0;k=k+-12|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0}while((g|0)!=(d|0));e=c[b>>2]|0;g=c[m>>2]|0}c[b>>2]=h;c[m>>2]=f;c[n>>2]=l;d=e;if((g|0)!=(d|0))do{h=g+-12|0;g=g+-36|0;if((a[h+11>>0]|0)<0)$A(c[h>>2]|0)}while((g|0)!=(d|0));if(!e){aa=o;return}$A(e);aa=o;return}function cq(b,d){b=b|0;d=d|0;var 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;s=aa;aa=aa+144|0;p=s+96|0;r=s;l=s+40|0;k=s+76|0;n=s+4|0;o=b+88|0;if((c[o>>2]|0)>>>0>d>>>0){r=b+92|0;r=c[r>>2]|0;d=r+d|0;d=d&1;b=b+16+(d*36|0)+20|0;b=c[b>>2]|0;aa=s;return b|0}q=l+20|0;m=b+12|0;e=b+92|0;j=n+11|0;do{Sp(l,c[b>>2]|0,b);a:do if((c[q>>2]|0)==106){if(!(a[(c[m>>2]|0)+10>>0]|0)){c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];c[k+16>>2]=c[l+16>>2];py(n,l);c[r>>2]=(a[j>>0]|0)<0?c[n>>2]|0:n;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];c[p+12>>2]=c[k+12>>2];c[p+16>>2]=c[k+16>>2];aq(b,p,309726,r);if((a[j>>0]|0)<0)$A(c[n>>2]|0);c[p>>2]=c[l>>2];c[p+4>>2]=c[l+4>>2];c[p+8>>2]=c[l+8>>2];c[p+12>>2]=c[l+12>>2];c[p+16>>2]=c[l+16>>2];ky(n,p,0);g=c[o>>2]|0;c[o>>2]=g+1;g=b+16+(((c[e>>2]|0)+g&1)*36|0)|0;h=n;i=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));break}f=1;while(1){Sp(p,c[b>>2]|0,b);g=l;h=p;i=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));switch(c[q>>2]|0){case 106:case 21:{f=f+1|0;break}case 30:{f=f+-1|0;break}default:{}}if((f|0)<=0){f=15;break a}}}else{g=c[o>>2]|0;c[o>>2]=g+1;g=b+16+(((c[e>>2]|0)+g&1)*36|0)|0;h=l;i=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));f=15}while(0);if((f|0)==15)f=0}while((c[o>>2]|0)>>>0<=d>>>0);r=c[e>>2]|0;d=r+d|0;d=d&1;b=b+16+(d*36|0)+20|0;b=c[b>>2]|0;aa=s;return b|0}function dq(a){a=a|0;switch(a|0){case 92:case 90:case 100:case 50:case 46:case 48:case 47:case 49:case 45:case 83:case 84:case 85:case 101:case 99:case 96:case 98:case 95:case 97:case 65:case 94:case 80:case 79:case 78:case 77:case 63:case 76:case 62:case 60:case 51:case 103:case 61:case 93:case 71:case 69:case 68:case 74:case 73:case 72:case 58:case 57:case 86:case 87:case 88:case 56:case 55:case 54:case 53:case 89:case 64:case 81:case 104:{a=1;break}default:a=0}return a|0}function eq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+96|0;f=m+76|0;k=m;j=m+40|0;e=m+8|0;i=m+28|0;if((cq(b,0)|0)==(d|0)){o=b+92|0;n=b+16+((c[o>>2]&1)*36|0)|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[o>>2]=c[o>>2]&1^1;o=b+88|0;c[o>>2]=(c[o>>2]|0)+-1;o=0;aa=m;return o|0}h=b+92|0;g=b+16+((c[h>>2]&1)*36|0)|0;l=j;n=g;o=l+36|0;do{c[l>>2]=c[n>>2];l=l+4|0;n=n+4|0}while((l|0)<(o|0));c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h>>2]=c[h>>2]&1^1;o=b+88|0;c[o>>2]=(c[o>>2]|0)+-1;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];qy(i,j);o=i+11|0;l=(a[o>>0]|0)<0?c[i>>2]|0:i;n=jy(d)|0;c[k>>2]=l;c[k+4>>2]=n;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];aq(b,f,309754,k);if((a[o>>0]|0)<0)$A(c[i>>2]|0);o=1;aa=m;return o|0}function fq(b,d){b=b|0;d=d|0;var 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;u=aa;aa=aa+112|0;h=u+80|0;q=u;f=u+72|0;o=u+36|0;g=u+4|0;m=u+24|0;j=f+4|0;k=b+92|0;n=b+88|0;p=o+20|0;e=m+11|0;l=0;while(1){t=cq(b,0)|0;c[f>>2]=t;t=cq(b,1)|0;c[j>>2]=t;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];if(ea[d&127](h)|0){e=0;f=8;break}i=b+16+((c[k>>2]&1)*36|0)|0;r=o;s=i;t=r+36|0;do{c[r>>2]=c[s>>2];r=r+4|0;s=s+4|0}while((r|0)<(t|0));c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[k>>2]=c[k>>2]&1^1;c[n>>2]=(c[n>>2]|0)+-1;if((c[p>>2]|0)==108?(c[g>>2]=c[o>>2],c[g+4>>2]=c[o+4>>2],c[g+8>>2]=c[o+8>>2],c[g+12>>2]=c[o+12>>2],c[g+16>>2]=c[o+16>>2],qy(m,o),c[q>>2]=(a[e>>0]|0)<0?c[m>>2]|0:m,c[h>>2]=c[g>>2],c[h+4>>2]=c[g+4>>2],c[h+8>>2]=c[g+8>>2],c[h+12>>2]=c[g+12>>2],c[h+16>>2]=c[g+16>>2],aq(b,h,309788,q),(a[e>>0]|0)<0):0)$A(c[m>>2]|0);l=l+1|0;if(l>>>0>=10){e=1;f=8;break}}if((f|0)==8){aa=u;return e|0}return 0}function gq(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,p=0,q=0,r=0;q=aa;aa=aa+112|0;m=q+88|0;p=q;k=q+52|0;n=q+40|0;l=q+8|0;o=q+28|0;g=b+92|0;f=b+16+((c[g>>2]&1)*36|0)|0;h=k;i=f;j=h+36|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|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[g>>2]=c[g>>2]&1^1;g=b+88|0;c[g>>2]=(c[g>>2]|0)+-1;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;g=d+4|0;if((c[d>>2]|0)!=(c[g>>2]|0)){qB(n,330878)|0;f=(c[g>>2]|0)-(c[d>>2]|0)|0;if(f|0){h=0;f=(f|0)/12|0;do{do if(h|0)if((h|0)==(f+-1|0)){vB(n,309832)|0;break}else{vB(n,330984)|0;break}while(0);j=c[d>>2]|0;r=j+(h*12|0)|0;f=a[r+11>>0]|0;i=f<<24>>24<0;uB(n,i?c[r>>2]|0:r,i?c[j+(h*12|0)+4>>2]|0:f&255)|0;h=h+1|0;f=((c[g>>2]|0)-(c[d>>2]|0)|0)/12|0}while(h>>>0<f>>>0)}if(e|0){vB(n,309837)|0;vB(n,e)|0;vB(n,330336)|0}};c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];c[l+8>>2]=c[k+8>>2];c[l+12>>2]=c[k+12>>2];c[l+16>>2]=c[k+16>>2];qy(o,k);r=o+11|0;f=n+11|0;k=(a[f>>0]|0)<0?c[n>>2]|0:n;c[p>>2]=(a[r>>0]|0)<0?c[o>>2]|0:o;c[p+4>>2]=k;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];c[m+16>>2]=c[l+16>>2];aq(b,m,309845,p);if((a[r>>0]|0)<0)$A(c[o>>2]|0);if((a[f>>0]|0)>=0){aa=q;return}$A(c[n>>2]|0);aa=q;return}function hq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+96|0;m=n+52|0;h=n+8|0;l=n+16|0;g=n;if((cq(b,0)|0)==44){f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;i=l;j=e;k=i+36|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;e=b+88|0;c[e>>2]=(c[e>>2]|0)+-1;e=c[l+28>>2]|0;f=c[l+32>>2]|0;k=g;c[k>>2]=-1;c[k+4>>2]=0;if((om(e,e+f|0,g)|0)==1){c[h>>2]=f;c[h+4>>2]=e;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];c[m+16>>2]=c[l+16>>2];aq(b,m,309870,h)}El(m,c[g>>2]|0,l);Hl(d,m)|0;Ml(m);m=0;aa=n;return m|0}if((cq(b,0)|0)==110){f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;i=m;j=e;k=i+36|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;b=b+88|0;c[b>>2]=(c[b>>2]|0)+-1;Fl(l,c[m+24>>2]|0,c[m+28>>2]|0,m);Hl(d,l)|0;Ml(l);m=0;aa=n;return m|0}h=_A(16)|0;c[l>>2]=h;c[l+8>>2]=-2147483632;c[l+4>>2]=15;i=h;j=309889;k=i+15|0;do{a[i>>0]=a[j>>0]|0;i=i+1|0;j=j+1|0}while((i|0)<(k|0));a[h+15>>0]=0;k=l+12|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;a[k+11>>0]=6;a[k>>0]=a[309905]|0;a[k+1>>0]=a[309906]|0;a[k+2>>0]=a[309907]|0;a[k+3>>0]=a[309908]|0;a[k+4>>0]=a[309909]|0;a[k+5>>0]=a[309910]|0;a[k+6>>0]=0;f=m+4|0;g=_A(24)|0;c[m>>2]=g;d=g+24|0;c[m+8>>2]=d;cB(g,l);e=g+12|0;cB(e,k);c[f>>2]=d;gq(b,m,309912);if((a[g+23>>0]|0)<0)$A(c[e>>2]|0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);$A(h);m=1;aa=n;return m|0}function iq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+32|0;h=j+12|0;i=j;if(jq(b,d)|0){b=0;aa=j;return b|0}g=_A(16)|0;c[i>>2]=g;c[i+8>>2]=-2147483632;c[i+4>>2]=14;d=g;e=309923;f=d+14|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));a[g+14>>0]=0;d=h+4|0;e=_A(12)|0;c[h>>2]=e;f=e+12|0;c[h+8>>2]=f;cB(e,i);c[d>>2]=f;gq(b,h,309938);if((a[e+11>>0]|0)<0)$A(c[e>>2]|0);c[d>>2]=e;$A(e);$A(g);b=1;aa=j;return b|0}function jq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((cq(a,0)|0)==21?(cq(a,1)|0)==25:0){e=a+92|0;f=a+16+((c[e>>2]&1)*36|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;f=c[e>>2]&1^1;c[e>>2]=f;d=a+88|0;c[d>>2]=(c[d>>2]|0)+-1;f=a+16+(f*36|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[e>>2]=c[e>>2]&1^1;c[d>>2]=(c[d>>2]|0)+-1;if((kq(a,b)|0)==1){f=1;return f|0}eq(a,30)|0;f=1;return f|0}f=cq(a,0)|0;d=cq(a,1)|0;if((f|0)!=21){f=0;return f|0}a:do if(!(dq(d)|0)){switch(d|0){case 102:case 70:case 75:case 52:break a;default:d=0}return d|0}while(0);lq(a,b)|0;f=1;return f|0}function kq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+64|0;g=l+24|0;k=l+12|0;e=l;i=rq(b,d)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+11>>0]=8;h=e;c[h>>2]=1763733089;c[h+4>>2]=1920234350;a[e+8>>0]=0;h=k+4|0;j=_A(12)|0;c[k>>2]=j;f=j+12|0;c[k+8>>2]=f;cB(j,e);c[h>>2]=f;if((cq(b,0)|0)==21){d=b+92|0;e=b+16+((c[d>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[d>>2]=c[d>>2]&1^1;e=b+88|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){Sp(g,c[b>>2]|0,b);f=c[e>>2]|0;c[e>>2]=f+1;f=b+16+(((c[d>>2]|0)+f&1)*36|0)|0;d=g;e=f+36|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0))}gq(b,k,0);d=1}else d=0;if((a[j+11>>0]|0)>=0){c[h>>2]=j;$A(j);b=d?1:i;aa=l;return b|0}$A(c[j>>2]|0);c[h>>2]=j;$A(j);b=d?1:i;aa=l;return b|0}function lq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=aa;aa=aa+96|0;C=D+60|0;h=D+24|0;m=D+40|0;B=D;g=D+28|0;if((cq(b,0)|0)!=21){aa=D;return 1}if(dq(cq(b,1)|0)|0){e=b+92|0;f=b+16+((c[e>>2]&1)*36|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[e>>2]=c[e>>2]&1^1;f=b+88|0;c[f>>2]=(c[f>>2]|0)+-1;c[m>>2]=0;if((mq(b,m)|0)==1){e=c[m>>2]|0;c[m>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);aa=D;return 1}if((nq(b,d)|0)==1){e=c[m>>2]|0;c[m>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);aa=D;return 1}c[g+8>>2]=117440512;a[g>>0]=a[309954]|0;a[g+1>>0]=a[309955]|0;a[g+2>>0]=a[309956]|0;a[g+3>>0]=a[309957]|0;a[g+4>>0]=a[309958]|0;a[g+5>>0]=a[309959]|0;a[g+6>>0]=a[309960]|0;a[g+7>>0]=0;h=B+4|0;i=_A(12)|0;c[B>>2]=i;A=i+12|0;c[B+8>>2]=A;cB(i,g);c[h>>2]=A;if((cq(b,0)|0)==21){A=b+16+((c[e>>2]&1)*36|0)|0;c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;c[A+16>>2]=0;c[A+20>>2]=0;c[e>>2]=c[e>>2]&1^1;A=(c[f>>2]|0)+-1|0;c[f>>2]=A;if(!A){Sp(C,c[b>>2]|0,b);k=c[f>>2]|0;c[f>>2]=k+1;k=b+16+(((c[e>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}gq(b,B,0);e=1}else e=0;if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);c[h>>2]=i;$A(i);g=c[m>>2]|0;c[m>>2]=0;if(e){if(g|0)ma[c[(c[g>>2]|0)+4>>2]&255](g);aa=D;return 1}f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[g+8>>2]=e;e=e+4|0}c[e>>2]=g;c[f>>2]=g;d=d+8|0;c[d>>2]=(c[d>>2]|0)+1;b=eq(b,30)|0;b=(b|0)==1;b=b&1;aa=D;return b|0}A=b+88|0;if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;e=b+92|0;k=b+16+(((c[e>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}else e=b+92|0;y=b+16+((c[e>>2]&1)*36|0)|0;c[m>>2]=c[y>>2];c[m+4>>2]=c[y+4>>2];c[m+8>>2]=c[y+8>>2];c[m+12>>2]=c[y+12>>2];c[m+16>>2]=c[y+16>>2];a:do switch(cq(b,1)|0){case 52:{g=b+92|0;h=b+16+((c[g>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;h=c[g>>2]&1^1;c[g>>2]=h;c[A>>2]=(c[A>>2]|0)+-1;h=b+16+(h*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;g=_A(144)|0;c[g+4>>2]=0;h=g+8|0;c[h>>2]=0;e=g+12|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];c[g+32>>2]=7;c[g>>2]=288732;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;El(g+52|0,-1,C);k=g+88|0;l=k+56|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[h>>2]=e;e=e+4|0}c[e>>2]=g;e=f;z=126;break}case 75:{g=b+92|0;h=b+16+((c[g>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;h=c[g>>2]&1^1;c[g>>2]=h;c[A>>2]=(c[A>>2]|0)+-1;h=b+16+(h*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;g=_A(144)|0;c[g+4>>2]=0;h=g+8|0;c[h>>2]=0;e=g+12|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];c[g+32>>2]=25;c[g>>2]=288476;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;El(g+52|0,-1,C);k=g+88|0;l=k+56|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[h>>2]=e;e=e+4|0}c[e>>2]=g;e=f;z=126;break}case 70:{w=b+92|0;g=b+16+((c[w>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;g=c[w>>2]&1^1;c[w>>2]=g;c[A>>2]=(c[A>>2]|0)+-1;g=b+16+(g*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[w>>2]=c[w>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;g=_A(176)|0;c[g+4>>2]=0;y=g+8|0;c[y>>2]=0;e=g+12|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];c[g+32>>2]=20;c[g>>2]=288556;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;El(g+52|0,-1,C);k=g+88|0;l=k+88|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);b:do if((qq(b,g+48|0)|0)!=1){v=cq(b,0)|0;e=cq(b,1)|0;c:do if((v|0)==21){if(!(dq(e)|0))switch(e|0){case 102:case 70:case 75:case 52:break;default:break c}c[C>>2]=0;t=C+4|0;c[t>>2]=0;v=C+8|0;c[v>>2]=0;if((lq(b,C)|0)!=1){h=c[C>>2]|0;f=h;if(!h){e=f;f=0}else{s=d+4|0;u=d+8|0;r=c[s>>2]|0;e=f;k=f;n=c[t>>2]|0;q=c[v>>2]|0;p=c[u>>2]|0;while(1){o=r;r=h;h=c[r+4>>2]|0;do if((k|0)!=(n|0)){f=r+8|0;m=c[f>>2]|0;i=r+4|0;l=m;if(!m){j=h;c[C>>2]=h;e=j;k=j}else{c[m+4>>2]=h;j=c[i>>2]|0}if(!j){c[t>>2]=l;j=m;break}else{c[j+8>>2]=l;j=n;break}}else{c[t>>2]=0;c[C>>2]=0;e=0;k=0;j=0;i=r+4|0;f=r+8|0}while(0);c[f>>2]=0;c[i>>2]=0;q=q+-1|0;if(!o)f=d;else{c[r+8>>2]=o;f=o+4|0}c[f>>2]=r;p=p+1|0;if(!h)break;else n=j}c[v>>2]=q;c[s>>2]=r;c[u>>2]=p;f=0}}else{e=c[C>>2]|0;f=1}if(e|0)do{v=e;e=c[e+4>>2]|0;ma[c[(c[v>>2]|0)+4>>2]&255](v)}while((e|0)!=0);if(f|0)break b}while(0);if((cq(b,0)|0)==21?(cq(b,1)|0)==34:0){B=b+16+((c[w>>2]&1)*36|0)|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;B=c[w>>2]&1^1;c[w>>2]=B;c[A>>2]=(c[A>>2]|0)+-1;B=b+16+(B*36|0)|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[w>>2]=c[w>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;if((kq(b,g+112|0)|0)==1)break;if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[w>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}v=b+16+((c[w>>2]&1)*36|0)|0;B=g+124|0;c[B>>2]=c[v>>2];c[B+4>>2]=c[v+4>>2];c[B+8>>2]=c[v+8>>2];c[B+12>>2]=c[v+12>>2];c[B+16>>2]=c[v+16>>2];if((eq(b,30)|0)==1)break;if((cq(b,0)|0)==21?(cq(b,1)|0)==66:0){B=b+16+((c[w>>2]&1)*36|0)|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;B=c[w>>2]&1^1;c[w>>2]=B;c[A>>2]=(c[A>>2]|0)+-1;B=b+16+(B*36|0)|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[w>>2]=c[w>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;if((kq(b,g+144|0)|0)==1)break;if((eq(b,30)|0)==1)break}else z=75;d:do if((z|0)==75?(B=cq(b,0)|0,x=cq(b,1)|0,(B|0)==21):0){if(!(dq(x)|0))switch(x|0){case 102:case 70:case 75:case 52:break;default:break d}if((lq(b,g+144|0)|0)==1)break b}while(0);if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[w>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}B=b+16+((c[w>>2]&1)*36|0)|0;C=g+156|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];c[C+16>>2]=c[B+16>>2]}else z=82;e:do if((z|0)==82){z=cq(b,0)|0;e=cq(b,1)|0;f:do if((z|0)==21){if(!(dq(e)|0))switch(e|0){case 102:case 70:case 75:case 52:break;default:break f}if((lq(b,g+112|0)|0)==1)break b;if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[w>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}e=b+16+((c[w>>2]&1)*36|0)|0;B=g+124|0;c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];c[B+16>>2]=c[e+16>>2];B=cq(b,0)|0;e=cq(b,1)|0;if((B|0)!=21)break e;if(!(dq(e)|0))switch(e|0){case 102:case 70:case 75:case 52:break;default:break e}if((lq(b,g+144|0)|0)==1)break b;if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[w>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}B=b+16+((c[w>>2]&1)*36|0)|0;C=g+156|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];c[C+16>>2]=c[B+16>>2];break e}while(0);if((cq(b,0)|0)==21){d=b+16+((c[w>>2]&1)*36|0)|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[w>>2]=c[w>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1}a[B+11>>0]=10;k=B;j=309962;l=k+10|0;do{a[k>>0]=a[j>>0]|0;k=k+1|0;j=j+1|0}while((k|0)<(l|0));a[B+10>>0]=0;e=C+4|0;f=_A(12)|0;c[C>>2]=f;d=f+12|0;c[C+8>>2]=d;cB(f,B);c[e>>2]=d;gq(b,C,309973);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);break b}while(0);f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[y>>2]=e;e=e+4|0}c[e>>2]=g;e=f;z=126;break a}while(0);ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break}case 102:{f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;e=c[f>>2]&1^1;c[f>>2]=e;c[A>>2]=(c[A>>2]|0)+-1;z=b+16+(e*36|0)|0;c[B>>2]=c[z>>2];c[B+4>>2]=c[z+4>>2];c[B+8>>2]=c[z+8>>2];c[B+12>>2]=c[z+12>>2];c[B+16>>2]=c[z+16>>2];c[B+20>>2]=c[z+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(C,e);c[h>>2]=c[C>>2];c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];c[C+16>>2]=c[B+16>>2];aq(b,C,309809,h)}g=_A(156)|0;c[g+4>>2]=0;h=g+8|0;c[h>>2]=0;e=g+12|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];c[g+32>>2]=53;c[g>>2]=288092;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;El(g+52|0,-1,C);k=g+88|0;l=k+68|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((qq(b,g+48|0)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if((rq(b,g+112|0)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[f>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}B=b+16+((c[f>>2]&1)*36|0)|0;C=g+124|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];c[C+16>>2]=c[B+16>>2];if((eq(b,21)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if((eq(b,59)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if((kq(b,g+144|0)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if((eq(b,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[h>>2]=e;e=e+4|0}c[e>>2]=g;e=f;z=126;break}default:z=125}while(0);if((z|0)==125){aa=D;return 1}else if((z|0)==126){c[e>>2]=g;d=d+8|0;c[d>>2]=(c[d>>2]|0)+1;b=eq(b,30)|0;b=(b|0)==1;b=b&1;aa=D;return b|0}return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=aa;aa=aa+480|0;V=W+336|0;O=W+328|0;N=W+320|0;H=W+312|0;G=W+304|0;F=W+296|0;E=W+288|0;D=W+280|0;B=W+272|0;A=W+264|0;z=W+256|0;y=W+248|0;x=W+240|0;w=W+232|0;v=W+224|0;u=W+216|0;t=W+208|0;s=W+200|0;q=W+192|0;p=W+184|0;o=W+176|0;n=W+168|0;m=W+160|0;l=W+152|0;k=W+144|0;j=W+136|0;i=W+128|0;h=W+120|0;C=W+112|0;r=W+104|0;g=W+96|0;f=W+88|0;S=W+48|0;R=W;U=W+384|0;I=W+440|0;J=W+404|0;Q=W+24|0;P=W+372|0;T=b+88|0;if(!(c[T>>2]|0)){Sp(V,c[b>>2]|0,b);K=c[T>>2]|0;c[T>>2]=K+1;e=b+92|0;K=b+16+(((c[e>>2]|0)+K&1)*36|0)|0;L=V;M=K+36|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0}while((K|0)<(M|0))}else e=b+92|0;M=b+16+((c[e>>2]&1)*36|0)|0;c[U>>2]=c[M>>2];c[U+4>>2]=c[M+4>>2];c[U+8>>2]=c[M+8>>2];c[U+12>>2]=c[M+12>>2];c[U+16>>2]=c[M+16>>2];do switch(cq(b,0)|0){case 104:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=55;c[V>>2]=288044;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 81:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=32;c[V>>2]=288220;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 64:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=17;c[V>>2]=288588;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 89:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=39;c[V>>2]=288140;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 53:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=8;c[b>>2]=288716;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 54:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=9;c[b>>2]=288700;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 55:{f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;f=_A(108)|0;c[f+4>>2]=0;c[f+8>>2]=0;e=f+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[f+32>>2]=10;c[f>>2]=288684;U=f+36|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(U,-1,V);e=f+72|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(e,-1,V);if((hq(b,U)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=W;return d|0}if((hq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=W;return d|0}e=c[d>>2]|0;c[d>>2]=f;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 56:{g=b+92|0;e=b+16+((c[g>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;g=_A(84)|0;c[g+4>>2]=0;c[g+8>>2]=0;e=g+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[g+32>>2]=11;c[g>>2]=288668;U=g+36|0;c[U>>2]=0;e=g+40|0;c[e>>2]=0;c[g+44>>2]=0;f=g+48|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(f,-1,V);if((Aq(b,U)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}Jl(f,(c[e>>2]|0)+-36|0)|0;V=(c[e>>2]|0)+-36|0;Ml(V);c[e>>2]=V;e=c[d>>2]|0;c[d>>2]=g;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 88:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=36;c[V>>2]=288188;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 57:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=12;c[b>>2]=288652;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 58:{g=b+92|0;e=b+16+((c[g>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;g=_A(136)|0;c[g+4>>2]=0;c[g+8>>2]=0;e=g+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[g+32>>2]=13;c[g>>2]=288636;U=g+36|0;a[U>>0]=0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(g+40|0,-1,V);e=g+76|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;f=g+100|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(f,-1,V);if((wq(b,U)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}if((xq(b,26,e)|0)!=1?(xq(b,29,g+88|0)|0)!=1:0){c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(I,0,V);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(f,I)|0;else hq(b,f)|0;Ml(I);e=c[d>>2]|0;c[d>>2]=g;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}case 87:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[f>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,f)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=37;c[b>>2]=288172;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 86:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[g>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,g)}g=_A(136)|0;c[g+4>>2]=0;c[g+8>>2]=0;e=g+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[g+32>>2]=38;c[g>>2]=288156;U=g+36|0;a[U>>0]=0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(g+40|0,-1,V);e=g+76|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;f=g+100|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(f,-1,V);if((wq(b,U)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}if((xq(b,26,e)|0)!=1?(xq(b,29,g+88|0)|0)!=1:0){c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(J,0,V);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(f,J)|0;else hq(b,f)|0;Ml(J);e=c[d>>2]|0;c[d>>2]=g;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}case 72:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=22;c[b>>2]=288524;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 73:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=23;c[b>>2]=288508;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 74:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=24;c[b>>2]=288492;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 68:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=18;c[b>>2]=287932;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 69:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=19;c[b>>2]=288572;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 71:{e=b+92|0;Q=c[e>>2]&1;P=b+16+(Q*36|0)|0;Q=c[b+16+(Q*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[e>>2]=c[e>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;e=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;V=b+12|0;c[V>>2]=c[R>>2];c[V+4>>2]=c[R+4>>2];c[V+8>>2]=c[R+8>>2];c[V+12>>2]=c[R+12>>2];c[V+16>>2]=c[R+16>>2];c[b+32>>2]=21;c[b>>2]=288540;c[b+36>>2]=Q;c[b+40>>2]=U;c[b+44>>2]=e;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 93:{e=b+92|0;Q=c[e>>2]&1;P=b+16+(Q*36|0)|0;Q=c[b+16+(Q*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[e>>2]=c[e>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;e=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;V=b+12|0;c[V>>2]=c[R>>2];c[V+4>>2]=c[R+4>>2];c[V+8>>2]=c[R+8>>2];c[V+12>>2]=c[R+12>>2];c[V+16>>2]=c[R+16>>2];c[b+32>>2]=43;c[b>>2]=288124;c[b+36>>2]=Q;c[b+40>>2]=U;c[b+44>>2]=e;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 61:{c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;Nl(S,0,V);if((Dq(b,S)|0)==1){d=1;aa=W;return d|0}f=_A(80)|0;c[f+4>>2]=0;c[f+8>>2]=0;K=f+12|0;c[K>>2]=c[U>>2];c[K+4>>2]=c[U+4>>2];c[K+8>>2]=c[U+8>>2];c[K+12>>2]=c[U+12>>2];c[K+16>>2]=c[U+16>>2];c[f+32>>2]=15;c[f>>2]=287916;K=f+40|0;L=S;M=K+40|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0}while((K|0)<(M|0));e=c[d>>2]|0;c[d>>2]=f;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 103:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[r>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,r)}V=_A(40)|0;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=54;c[V>>2]=288076;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 51:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[C>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,C)}V=_A(40)|0;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=6;c[V>>2]=288748;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 60:{V=_A(40)|0;S=b+92|0;e=c[S>>2]&1;R=b+16+(e*36|0)|0;e=c[b+16+(e*36|0)+24>>2]|0;c[R>>2]=0;c[R+4>>2]=0;c[R+8>>2]=0;c[R+12>>2]=0;c[R+16>>2]=0;c[R+20>>2]=0;c[S>>2]=c[S>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=14;c[V>>2]=288620;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 62:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[h>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,h)}V=_A(40)|0;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=16;c[V>>2]=288604;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 76:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[i>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,i)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=26;c[V>>2]=288460;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 77:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[j>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,j)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=28;c[V>>2]=288428;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 63:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[k>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,k)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=27;c[b>>2]=288444;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 79:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[l>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,l)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=30;c[b>>2]=288396;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 80:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=31;c[V>>2]=288380;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 78:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=29;c[V>>2]=288412;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 94:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[m>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,m)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=44;c[V>>2]=288364;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 65:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[n>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,n)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=45;c[b>>2]=288348;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 97:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[o>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,o)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=46;c[b>>2]=288332;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 95:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[p>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,p)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=47;c[b>>2]=288316;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 98:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[q>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,q)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=50;c[b>>2]=288300;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 96:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[s>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,s)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=48;c[b>>2]=288284;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 99:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[t>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,t)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=49;c[b>>2]=288268;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 84:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[u>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,u)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=34;c[V>>2]=288252;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 83:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[v>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,v)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=33;c[V>>2]=288236;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 101:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[w>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,w)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=52;c[b>>2]=288108;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 85:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[x>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,x)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=35;c[V>>2]=288204;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 46:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[y>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,y)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=4;c[b>>2]=288764;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 50:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[z>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,z)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=5;c[b>>2]=288780;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 45:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[A>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,A)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=0;c[b>>2]=288844;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 49:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[B>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,B)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=3;c[b>>2]=288828;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 47:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[D>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,D)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=1;c[b>>2]=288812;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 48:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[E>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,E)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=2;c[b>>2]=288796;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 100:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[F>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,F)}V=_A(40)|0;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=51;c[V>>2]=288060;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 90:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[G>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,G)}if((Eq(b,V)|0)==1){d=1;aa=W;return d|0}b=_A(48)|0;T=c[V>>2]|0;V=c[V+4>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;S=b+12|0;c[S>>2]=c[U>>2];c[S+4>>2]=c[U+4>>2];c[S+8>>2]=c[U+8>>2];c[S+12>>2]=c[U+12>>2];c[S+16>>2]=c[U+16>>2];c[b+32>>2]=40;c[b>>2]=288028;c[b+36>>2]=e;e=b+40|0;c[e>>2]=T;c[e+4>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 92:{i=b+92|0;j=c[i>>2]&1;M=b+16+(j*36|0)|0;c[S>>2]=c[M>>2];c[S+4>>2]=c[M+4>>2];c[S+8>>2]=c[M+8>>2];c[S+12>>2]=c[M+12>>2];c[S+16>>2]=c[M+16>>2];c[S+20>>2]=c[M+20>>2];j=c[b+16+(j*36|0)+24>>2]|0;c[M>>2]=0;c[M+4>>2]=0;c[M+8>>2]=0;c[M+12>>2]=0;c[M+16>>2]=0;c[M+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(j,c[b+12>>2]|0)|0)){Am(V,j);c[H>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,H)}h=0;while(1){if(!(c[T>>2]|0)){Sp(V,c[b>>2]|0,b);K=c[T>>2]|0;c[T>>2]=K+1;K=b+16+(((c[i>>2]|0)+K&1)*36|0)|0;L=V;M=K+36|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0}while((K|0)<(M|0))}S=b+16+((c[i>>2]&1)*36|0)|0;c[Q>>2]=c[S>>2];c[Q+4>>2]=c[S+4>>2];c[Q+8>>2]=c[S+8>>2];c[Q+12>>2]=c[S+12>>2];c[Q+16>>2]=c[S+16>>2];if((cq(b,0)|0)!=44){h=245;break}g=c[i>>2]&1;S=b+16+(g*36|0)|0;f=c[b+16+(g*36|0)+28>>2]|0;g=c[b+16+(g*36|0)+32>>2]|0;c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;c[S+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[P>>2]=0;if((sm(f,f+g|0,P,0)|0)==1){h=249;break}e=c[P>>2]|0;if(e>>>0>31){h=251;break}a[R+h>>0]=e;h=h+1|0;if(h>>>0>=16){h=254;break}}if((h|0)==245){g=_A(48)|0;c[P>>2]=g;c[P+8>>2]=-2147483600;c[P+4>>2]=33;K=g;L=310037;M=K+33|0;do{a[K>>0]=a[L>>0]|0;K=K+1|0;L=L+1|0}while((K|0)<(M|0));a[g+33>>0]=0;e=V+4|0;f=_A(12)|0;c[V>>2]=f;d=f+12|0;c[V+8>>2]=d;cB(f,P);c[e>>2]=d;gq(b,V,0);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g)}else if((h|0)==249){c[N>>2]=g;c[N+4>>2]=f;c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,310071,N);h=252}else if((h|0)==251){c[O>>2]=g;c[O+4>>2]=f;c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,310094,O);h=252}else if((h|0)==254){V=_A(56)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=41;c[V>>2]=288012;c[V+36>>2]=j;e=V+40|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}d=1;aa=W;return d|0}default:{d=1;aa=W;return d|0}}while(0);return 0}
+function ou(b,e){b=b|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,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0;ce=aa;aa=aa+1872|0;R=ce+1744|0;G=ce+1856|0;be=ce+1736|0;ae=ce+1728|0;Ed=ce+1720|0;Dd=ce+1712|0;Bd=ce+1704|0;Ad=ce+1696|0;zd=ce+1688|0;yd=ce+1680|0;wd=ce+1672|0;vd=ce+1664|0;ud=ce+1656|0;td=ce+1648|0;sd=ce+1640|0;qd=ce+1632|0;pd=ce+1624|0;od=ce+1616|0;nd=ce+1608|0;md=ce+1600|0;ld=ce+1592|0;kd=ce+1584|0;jd=ce+1576|0;id=ce+1568|0;hd=ce+1560|0;gd=ce+1552|0;fd=ce+1544|0;dd=ce+1536|0;cd=ce+1528|0;bd=ce+1520|0;ad=ce+1512|0;$c=ce+1504|0;_c=ce+1496|0;Zc=ce+1488|0;Yc=ce+1480|0;Wc=ce+1472|0;Vc=ce+1464|0;Uc=ce+1456|0;Tc=ce+1448|0;Sc=ce+1440|0;Rc=ce+1432|0;Qc=ce+1424|0;Pc=ce+1416|0;Nc=ce+1408|0;Mc=ce+1400|0;Lc=ce+1392|0;Kc=ce+1384|0;Jc=ce+1376|0;Ic=ce+1368|0;Hc=ce+1360|0;Gc=ce+1352|0;Fc=ce+1344|0;Ec=ce+1336|0;Dc=ce+1328|0;Bc=ce+1320|0;Ac=ce+1312|0;zc=ce+1304|0;yc=ce+1296|0;xc=ce+1288|0;wc=ce+1280|0;vc=ce+1272|0;uc=ce+1264|0;sc=ce+1256|0;rc=ce+1248|0;qc=ce+1240|0;pc=ce+1232|0;oc=ce+1224|0;nc=ce+1216|0;mc=ce+1208|0;lc=ce+1200|0;jc=ce+1192|0;ic=ce+1184|0;hc=ce+1176|0;gc=ce+1168|0;fc=ce+1160|0;ec=ce+1152|0;dc=ce+1144|0;cc=ce+1136|0;bc=ce+1128|0;$b=ce+1120|0;_b=ce+1112|0;Zb=ce+1104|0;Yb=ce+1096|0;Xb=ce+1088|0;Wb=ce+1080|0;Vb=ce+1072|0;Ub=ce+1064|0;Tb=ce+1056|0;Rb=ce+1048|0;Qb=ce+1040|0;Pb=ce+1032|0;Ob=ce+1024|0;Mb=ce+1016|0;Lb=ce+1008|0;Kb=ce+1e3|0;Jb=ce+992|0;Ib=ce+984|0;Gb=ce+976|0;Fb=ce+968|0;Eb=ce+960|0;Db=ce+952|0;Cb=ce+944|0;Bb=ce+936|0;Ab=ce+928|0;yb=ce+920|0;xb=ce+912|0;wb=ce+904|0;vb=ce+896|0;ub=ce+888|0;tb=ce+880|0;sb=ce+872|0;rb=ce+864|0;qb=ce+856|0;pb=ce+848|0;nb=ce+840|0;mb=ce+832|0;lb=ce+824|0;kb=ce+816|0;jb=ce+808|0;ib=ce+800|0;hb=ce+792|0;gb=ce+784|0;fb=ce+776|0;eb=ce+768|0;db=ce+760|0;cb=ce+752|0;ab=ce+744|0;$a=ce+736|0;_a=ce+728|0;Za=ce+720|0;Ya=ce+712|0;Xa=ce+704|0;Wa=ce+696|0;Va=ce+688|0;Ua=ce+680|0;Sa=ce+672|0;Ra=ce+664|0;Qa=ce+656|0;Pa=ce+648|0;Oa=ce+640|0;Na=ce+632|0;Ma=ce+624|0;Ka=ce+616|0;Ja=ce+608|0;Ia=ce+600|0;Ha=ce+592|0;Ga=ce+584|0;Fa=ce+576|0;Ea=ce+568|0;Da=ce+560|0;Ba=ce+552|0;Aa=ce+544|0;za=ce+536|0;ya=ce+528|0;xa=ce+520|0;wa=ce+512|0;va=ce+504|0;ua=ce+496|0;ta=ce+488|0;sa=ce+480|0;ra=ce+472|0;qa=ce+464|0;pa=ce+456|0;na=ce+448|0;ma=ce+440|0;la=ce+432|0;ka=ce+424|0;ja=ce+416|0;ia=ce+408|0;da=ce+400|0;ca=ce+392|0;$=ce+384|0;_=ce+376|0;Z=ce+368|0;Y=ce+360|0;_d=ce+352|0;Zd=ce+344|0;Yd=ce+336|0;Xd=ce+328|0;Vd=ce+320|0;Ud=ce+312|0;Td=ce+304|0;Sd=ce+296|0;Rd=ce+288|0;Qd=ce+280|0;Pd=ce+272|0;Od=ce+264|0;Nd=ce+256|0;Ld=ce+248|0;Kd=ce+240|0;Jd=ce+232|0;Id=ce+224|0;Hd=ce+216|0;Gd=ce+208|0;Fd=ce+200|0;Cd=ce+192|0;rd=ce+184|0;ed=ce+176|0;Xc=ce+168|0;Oc=ce+160|0;Cc=ce+152|0;tc=ce+144|0;kc=ce+136|0;ac=ce+128|0;Sb=ce+120|0;Hb=ce+112|0;zb=ce+104|0;ob=ce+96|0;bb=ce+88|0;Ta=ce+80|0;La=ce+72|0;Ca=ce+64|0;oa=ce+56|0;ba=ce+48|0;Wd=ce+40|0;Md=ce+32|0;xd=ce+24|0;Nb=ce+16|0;X=ce+8|0;W=ce;V=ce+1776|0;S=ce+1852|0;U=ce+1760|0;y=ce+1848|0;z=ce+1844|0;A=ce+1840|0;B=ce+1836|0;C=ce+1832|0;D=ce+1828|0;E=ce+1824|0;F=ce+1820|0;H=ce+1816|0;I=ce+1812|0;J=ce+1808|0;K=ce+1804|0;L=ce+1800|0;M=ce+1796|0;N=ce+1792|0;O=ce+1788|0;P=ce+1784|0;Q=ce+1780|0;T=b+12|0;g=c[T>>2]|0;a:do if(g>>>0<e>>>0){m=b+36|0;o=b+76|0;l=b+4|0;t=b+64|0;k=b+68|0;u=b+96|0;v=b+116|0;n=b+88|0;w=b+100|0;x=b+120|0;f=0;b:while(1){if((nu(b,V,317907)|0)==1)break;i=c[m>>2]|0;h=c[(c[i>>2]|0)+212>>2]|0;j=c[V>>2]|0;c[S>>2]=j;c[R>>2]=c[S>>2];if(fa[h&511](i,R)|0){$d=5;break}if(!(Dm(j,c[o>>2]|0)|0)){$d=7;break}c:do switch(j|0){case 0:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+496>>2]&127](j)|0){$d=10;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=12;break b}break}case 2:{c[R>>2]=0;g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=14;break b}c[T>>2]=(c[T>>2]|0)+g;h=c[R>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{g=(c[o>>2]|0)+4|0;$d=19;break}case -24:{g=c[o>>2]|0;$d=19;break}case -17:{g=(c[o>>2]|0)+9|0;$d=19;break}default:{p=0;$d=20}}if(($d|0)==19){p=(a[g>>0]|0)!=0;$d=20}if(($d|0)==20?($d=0,!((h|0)==-64|p)):0){if(!((h|0)>-1?(a[(c[o>>2]|0)+6>>0]|0)!=0:0)){$d=23;break b}if((c[n>>2]|0)>>>0<=h>>>0){$d=23;break b}}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+284>>2]&511](j,h)|0){$d=25;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+252>>2]&511](j,h)|0){$d=27;break b}break}case 3:{c[R>>2]=0;g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=29;break b}c[T>>2]=(c[T>>2]|0)+g;h=c[R>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{g=(c[o>>2]|0)+4|0;$d=34;break}case -24:{g=c[o>>2]|0;$d=34;break}case -17:{g=(c[o>>2]|0)+9|0;$d=34;break}default:{r=0;$d=35}}if(($d|0)==34){r=(a[g>>0]|0)!=0;$d=35}if(($d|0)==35?($d=0,!((h|0)==-64|r)):0){if(!((h|0)>-1?(a[(c[o>>2]|0)+6>>0]|0)!=0:0)){$d=38;break b}if((c[n>>2]|0)>>>0<=h>>>0){$d=38;break b}}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+388>>2]&511](j,h)|0){$d=40;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+252>>2]&511](j,h)|0){$d=42;break b}break}case 4:{c[R>>2]=0;g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=44;break b}c[T>>2]=(c[T>>2]|0)+g;h=c[R>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{g=(c[o>>2]|0)+4|0;$d=49;break}case -24:{g=c[o>>2]|0;$d=49;break}case -17:{g=(c[o>>2]|0)+9|0;$d=49;break}default:{s=0;$d=50}}if(($d|0)==49){s=(a[g>>0]|0)!=0;$d=50}if(($d|0)==50?($d=0,!((h|0)==-64|s)):0){if(!((h|0)>-1?(a[(c[o>>2]|0)+6>>0]|0)!=0:0)){$d=53;break b}if((c[n>>2]|0)>>>0<=h>>>0){$d=53;break b}}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+368>>2]&511](j,h)|0){$d=55;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+252>>2]&511](j,h)|0){$d=57;break b}break}case 5:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+328>>2]&127](j)|0){$d=59;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=61;break b}break}case 21:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+472>>2]&127](j)|0){$d=63;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=65;break b}break}case 12:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=67;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+288>>2]&511](j,g)|0){$d=69;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=71;break b}break}case 13:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=73;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+292>>2]&511](j,g)|0){$d=75;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=77;break b}break}case 14:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=79;break b}g=(c[T>>2]|0)+g|0;c[T>>2]=g;j=c[R>>2]|0;h=c[t>>2]|0;i=(c[k>>2]|0)-h>>2;if(j>>>0<=i>>>0){if(j>>>0<i>>>0)c[k>>2]=h+(j<<2);if(!j)h=1;else $d=85}else{qu(t,j-i|0);g=c[T>>2]|0;$d=85}if(($d|0)==85){$d=0;h=0;while(1){i=c[l>>2]|0;g=_l(i+g|0,i+(c[b>>2]|0)|0,R)|0;if(!g){$d=88;break b}g=(c[T>>2]|0)+g|0;c[T>>2]=g;c[(c[t>>2]|0)+(h<<2)>>2]=c[R>>2];h=h+1|0;if(h>>>0>=j>>>0){h=0;break}}}i=c[l>>2]|0;g=_l(i+g|0,i+(c[b>>2]|0)|0,R)|0;if(!g){$d=90;break b}c[T>>2]=(c[T>>2]|0)+g;if(h)g=0;else g=c[t>>2]|0;i=c[m>>2]|0;if(ha[c[(c[i>>2]|0)+300>>2]&127](i,j,g,c[R>>2]|0)|0){$d=94;break b}break}case 15:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+460>>2]&127](j)|0){$d=96;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=98;break b}break}case 1:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+452>>2]&127](j)|0){$d=100;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=102;break b}break}case 20:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+324>>2]&127](j)|0){$d=104;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=106;break b}break}case 11:{g=c[m>>2]|0;h=c[g>>2]|0;if((c[T>>2]|0)==(e|0))if(!(ea[c[h+336>>2]&127](g)|0)){f=1;break c}else{$d=109;break b}else if(!(ea[c[h+332>>2]&127](g)|0))break c;else{$d=111;break b}}case 52:{g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=113;break b}c[T>>2]=(c[T>>2]|0)+g;j=c[m>>2]|0;g=c[R>>2]|0;if(fa[c[(c[j>>2]|0)+360>>2]&511](j,g)|0){$d=115;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+220>>2]&511](j,g)|0){$d=117;break b}break}case 53:{g=c[l>>2]|0;g=am(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=120;break b}c[T>>2]=(c[T>>2]|0)+g;j=c[m>>2]|0;h=R;g=c[h>>2]|0;h=c[h+4>>2]|0;if(ga[c[(c[j>>2]|0)+364>>2]&127](j,g,h)|0){$d=122;break b}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+236>>2]&127](j,g,h)|0){$d=124;break b}break}case 54:{g=c[T>>2]|0;h=g+4|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=127;break b}g=(c[l>>2]|0)+g|0;g=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[T>>2]=h;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+340>>2]&511](j,g)|0){$d=129;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+240>>2]&511](j,g)|0){$d=131;break b}break}case 55:{g=c[T>>2]|0;i=g+8|0;if(i>>>0>(c[b>>2]|0)>>>0){$d=133;break b}h=(c[l>>2]|0)+g|0;g=h;g=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;h=h+4|0;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;c[T>>2]=i;j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+344>>2]&127](j,g,h)|0){$d=135;break b}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+244>>2]&127](j,g,h)|0){$d=137;break b}break}case 213:{c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;g=c[T>>2]|0;h=g+16|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=139;break b}j=G;g=(c[l>>2]|0)+g|0;i=j+16|0;do{a[j>>0]=a[g>>0]|0;j=j+1|0;g=g+1|0}while((j|0)<(i|0));c[T>>2]=h;j=c[m>>2]|0;i=c[(c[j>>2]|0)+348>>2]|0;c[R>>2]=c[G>>2];c[R+4>>2]=c[G+4>>2];c[R+8>>2]=c[G+8>>2];c[R+12>>2]=c[G+12>>2];if(fa[i&511](j,R)|0){$d=141;break b}j=c[m>>2]|0;i=c[(c[j>>2]|0)+248>>2]|0;c[R>>2]=c[G>>2];c[R+4>>2]=c[G+4>>2];c[R+8>>2]=c[G+8>>2];c[R+12>>2]=c[G+12>>2];if(fa[i&511](j,R)|0){$d=143;break b}break}case 25:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=146;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+352>>2]&511](j,g)|0){$d=148;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=150;break b}break}case 22:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=152;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+376>>2]&511](j,g)|0){$d=154;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=156;break b}break}case 26:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=158;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+356>>2]&511](j,g)|0){$d=160;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=162;break b}break}case 23:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=164;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+380>>2]&511](j,g)|0){$d=166;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=168;break b}break}case 16:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=170;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;if(g>>>0>=((c[v>>2]|0)+(c[u>>2]|0)|0)>>>0){$d=172;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+304>>2]&511](j,g)|0){$d=174;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=176;break b}break}case 17:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=178;break b}g=(c[T>>2]|0)+g|0;c[T>>2]=g;i=c[R>>2]|0;if(i>>>0>=(c[n>>2]|0)>>>0){$d=180;break b}if(!(a[(c[o>>2]|0)+9>>0]|0)){h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=187;break b}j=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(!(j<<24>>24))g=0;else{$d=189;break b}}else{j=c[l>>2]|0;g=_l(j+g|0,j+(c[b>>2]|0)|0,R)|0;if(!g){$d=183;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;if(g>>>0>=((c[x>>2]|0)+(c[w>>2]|0)|0)>>>0){$d=185;break b}}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+308>>2]&127](j,i,g)|0){$d=191;break b}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+232>>2]&127](j,i,g)|0){$d=193;break b}break}case 18:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=195;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;if(g>>>0>=((c[v>>2]|0)+(c[u>>2]|0)|0)>>>0){$d=197;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+464>>2]&511](j,g)|0){$d=199;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=201;break b}break}case 19:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=203;break b}g=(c[T>>2]|0)+g|0;c[T>>2]=g;i=c[R>>2]|0;if(i>>>0>=(c[n>>2]|0)>>>0){$d=205;break b}if(!(a[(c[o>>2]|0)+9>>0]|0)){h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=212;break b}j=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(!(j<<24>>24))g=0;else{$d=214;break b}}else{j=c[l>>2]|0;g=_l(j+g|0,j+(c[b>>2]|0)|0,R)|0;if(!g){$d=208;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;if(g>>>0>=((c[x>>2]|0)+(c[w>>2]|0)|0)>>>0){$d=210;break b}}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+468>>2]&127](j,i,g)|0){$d=216;break b}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+232>>2]&127](j,i,g)|0){$d=218;break b}break}case 24:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=220;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+384>>2]&511](j,g)|0){$d=222;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=224;break b}break}case 211:case 30:case 29:case 28:case 27:case 40:case 39:case 38:case 37:case 36:case 35:case 34:case 33:case 32:case 31:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=226;break b}i=(c[T>>2]|0)+g|0;c[T>>2]=i;g=c[l>>2]|0;g=_l(g+i|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=228;break b}c[T>>2]=(c[T>>2]|0)+g;i=c[m>>2]|0;de=c[(c[i>>2]|0)+372>>2]|0;c[y>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[y>>2];if(ha[de&127](i,R,g,h)|0){$d=230;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=232;break b}break}case 212:case 44:case 43:case 42:case 41:case 49:case 48:case 47:case 46:case 45:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=236;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=238;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+476>>2]|0;c[z>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[z>>2];if(ha[i&127](de,R,g,h)|0){$d=240;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=242;break b}break}case 50:{g=c[T>>2]|0;h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=246;break b}de=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=248;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+412>>2]&127](de)|0){$d=250;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,0)|0){$d=252;break b}break}case 51:{g=c[T>>2]|0;h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=254;break b}de=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=256;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+404>>2]&127](de)|0){$d=258;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,0)|0){$d=260;break b}break}case 350:case 338:case 329:case 339:case 330:case 337:case 328:case 336:case 327:case 341:case 332:case 340:case 331:case 279:case 278:case 277:case 321:case 320:case 312:case 311:case 299:case 298:case 286:case 285:case 319:case 310:case 297:case 284:case 305:case 304:case 292:case 291:case 302:case 301:case 289:case 288:case 315:case 306:case 293:case 323:case 314:case 303:case 290:case 322:case 313:case 300:case 287:case 153:case 152:case 151:case 150:case 149:case 148:case 147:case 139:case 138:case 137:case 136:case 135:case 134:case 133:case 124:case 125:case 122:case 123:case 121:case 120:case 119:case 118:case 117:case 116:case 115:case 114:case 113:case 112:case 111:case 106:case 107:case 104:case 105:case 103:case 102:case 101:case 100:case 99:case 98:case 97:case 96:case 95:case 94:case 93:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+280>>2]|0;c[A>>2]=j;c[R>>2]=c[A>>2];if(fa[i&511](de,R)|0){$d=262;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=264;break b}break}case 275:case 269:case 263:case 262:case 253:case 252:case 243:case 242:case 273:case 267:case 259:case 258:case 249:case 248:case 239:case 238:case 274:case 268:case 261:case 260:case 251:case 250:case 241:case 240:case 272:case 266:case 257:case 256:case 247:case 246:case 237:case 236:case 271:case 265:case 255:case 245:case 235:case 270:case 264:case 254:case 244:case 234:case 89:case 87:case 88:case 86:case 85:case 84:case 83:case 81:case 82:case 80:case 79:case 78:case 77:case 73:case 76:case 72:case 75:case 71:case 74:case 70:case 69:case 68:case 66:case 62:case 65:case 61:case 64:case 60:case 63:case 59:case 58:case 57:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+316>>2]|0;c[B>>2]=j;c[R>>2]=c[B>>2];if(fa[i&511](de,R)|0){$d=266;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=268;break b}break}case 335:case 326:case 333:case 324:case 334:case 325:case 318:case 309:case 296:case 283:case 317:case 308:case 295:case 282:case 276:case 316:case 307:case 294:case 281:case 231:case 228:case 225:case 222:case 218:case 214:case 146:case 145:case 144:case 143:case 142:case 141:case 140:case 132:case 131:case 130:case 129:case 128:case 127:case 126:case 110:case 109:case 108:case 92:case 91:case 90:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+488>>2]|0;c[C>>2]=j;c[R>>2]=c[C>>2];if(fa[i&511](de,R)|0){$d=270;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=272;break b}break}case 280:{de=c[m>>2]|0;j=c[(c[de>>2]|0)+492>>2]|0;c[D>>2]=280;c[R>>2]=c[D>>2];if(fa[j&511](de,R)|0){$d=274;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=276;break b}break}case 233:case 230:case 227:case 224:case 221:case 217:case 232:case 229:case 226:case 223:case 220:case 219:case 216:case 215:{g=c[T>>2]|0;h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=278;break b}g=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;de=c[m>>2]|0;i=c[(c[de>>2]|0)+508>>2]|0;c[E>>2]=j;g=g&255;c[R>>2]=c[E>>2];if(ha[i&127](de,R,g,0)|0){$d=280;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+236>>2]&127](de,g,0)|0){$d=282;break b}break}case 351:{g=c[T>>2]|0;h=g+16|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=284;break b}j=U;g=(c[l>>2]|0)+g|0;i=j+16|0;do{a[j>>0]=a[g>>0]|0;j=j+1|0;g=g+1|0}while((j|0)<(i|0));c[T>>2]=h;de=c[m>>2]|0;j=c[(c[de>>2]|0)+512>>2]|0;c[F>>2]=351;c[G>>2]=c[F>>2];c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];if(ga[j&127](de,G,R)|0){$d=286;break b}de=c[m>>2]|0;j=c[(c[de>>2]|0)+248>>2]|0;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];if(fa[j&511](de,R)|0){$d=288;break b}break}case 355:case 354:case 353:case 352:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=291;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=293;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+516>>2]|0;c[H>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[H>>2];if(ha[i&127](de,R,g,h)|0){$d=295;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=297;break b}break}case 345:case 344:case 343:case 342:case 349:case 348:case 347:case 346:case 67:case 56:case 176:case 175:case 178:case 174:case 173:case 172:case 171:case 170:case 177:case 169:case 168:case 167:case 166:case 165:case 160:case 159:case 164:case 162:case 163:case 161:case 154:case 158:case 156:case 157:case 155:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+320>>2]|0;c[I>>2]=j;c[R>>2]=c[I>>2];if(fa[i&511](de,R)|0){$d=301;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=303;break b}break}case 6:{c[R>>2]=0;g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=305;break b}c[T>>2]=(c[T>>2]|0)+g;h=c[R>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{g=(c[o>>2]|0)+4|0;$d=310;break}case -24:{g=c[o>>2]|0;$d=310;break}case -17:{g=(c[o>>2]|0)+9|0;$d=310;break}default:{q=0;$d=311}}if(($d|0)==310){q=(a[g>>0]|0)!=0;$d=311}if(($d|0)==311?($d=0,!((h|0)==-64|q)):0){if(!((h|0)>-1?(a[(c[o>>2]|0)+6>>0]|0)!=0:0)){$d=314;break b}if((c[n>>2]|0)>>>0<=h>>>0){$d=314;break b}}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+484>>2]&511](de,h)|0){$d=316;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+252>>2]&511](de,h)|0){$d=318;break b}break}case 7:{de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+312>>2]&127](de)|0){$d=320;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=322;break b}break}case 9:{de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+456>>2]&127](de)|0){$d=324;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=326;break b}break}case 8:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=328;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+480>>2]&511](de,g)|0){$d=330;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+224>>2]&511](de,g)|0){$d=332;break b}break}case 10:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=334;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;h=c[R>>2]|0;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=336;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+296>>2]&127](de,h,g)|0){$d=338;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+228>>2]&127](de,h,g)|0){$d=340;break b}break}case 183:case 182:case 181:case 180:case 179:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+488>>2]|0;c[J>>2]=j;c[R>>2]=c[J>>2];if(fa[i&511](de,R)|0){$d=342;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=344;break b}break}case 196:case 195:case 194:case 193:case 192:case 191:case 190:case 189:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+320>>2]|0;c[K>>2]=j;c[R>>2]=c[K>>2];if(fa[i&511](de,R)|0){$d=346;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=348;break b}break}case 356:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=350;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=352;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;j=c[(c[de>>2]|0)+276>>2]|0;c[L>>2]=356;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[L>>2];if(ha[j&127](de,R,g,h)|0){$d=354;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=356;break b}break}case 358:case 357:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=360;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=362;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+272>>2]|0;c[M>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[M>>2];if(ha[i&127](de,R,g,h)|0){$d=364;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=366;break b}break}case 360:case 359:case 365:case 364:case 363:case 362:case 361:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=370;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=372;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+256>>2]|0;c[N>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[N>>2];if(ha[i&127](de,R,g,h)|0){$d=374;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=376;break b}break}case 367:case 366:case 372:case 371:case 370:case 369:case 368:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=380;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=382;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+260>>2]|0;c[O>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[O>>2];if(ha[i&127](de,R,g,h)|0){$d=384;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=386;break b}break}case 414:case 413:case 412:case 411:case 410:case 409:case 408:case 407:case 406:case 405:case 404:case 403:case 402:case 401:case 400:case 399:case 398:case 397:case 396:case 395:case 394:case 393:case 392:case 391:case 390:case 389:case 388:case 387:case 386:case 385:case 384:case 383:case 382:case 381:case 380:case 379:case 378:case 377:case 376:case 375:case 374:case 373:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=390;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=392;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+264>>2]|0;c[P>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[P>>2];if(ha[i&127](de,R,g,h)|0){$d=394;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=396;break b}break}case 421:case 420:case 419:case 418:case 417:case 416:case 415:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=400;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=402;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+268>>2]|0;c[Q>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[Q>>2];if(ha[i&127](de,R,g,h)|0){$d=404;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=406;break b}break}case 201:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=410;break b}i=(c[T>>2]|0)+g|0;c[T>>2]=i;g=c[R>>2]|0;h=i+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=412;break b}de=a[(c[l>>2]|0)+i>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=414;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+424>>2]&511](de,g)|0){$d=416;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,0)|0){$d=418;break b}break}case 197:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=420;break b}i=(c[T>>2]|0)+g|0;c[T>>2]=i;g=c[R>>2]|0;h=i+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=422;break b}de=a[(c[l>>2]|0)+i>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=424;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+408>>2]&511](de,g)|0){$d=426;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,0)|0){$d=428;break b}break}case 202:case 198:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=430;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;h=c[m>>2]|0;i=c[h>>2]|0;if((j|0)==198){if(fa[c[i+396>>2]&511](h,g)|0){$d=433;break b}}else if(fa[c[i+420>>2]&511](h,g)|0){$d=435;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=437;break b}break}case 200:{g=c[T>>2]|0;h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=439;break b}de=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=441;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+400>>2]&127](de)|0){$d=443;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,0)|0){$d=445;break b}break}case 199:{g=c[T>>2]|0;j=g+1|0;h=c[b>>2]|0;if(j>>>0>h>>>0){$d=447;break b}i=c[l>>2]|0;de=a[i+g>>0]|0;c[T>>2]=j;if(de<<24>>24){$d=449;break b}g=g+2|0;if(g>>>0>h>>>0){$d=451;break b}de=a[i+j>>0]|0;c[T>>2]=g;if(de<<24>>24){$d=453;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+392>>2]&127](de)|0){$d=455;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,0,0)|0){$d=457;break b}break}case 203:{g=c[T>>2]|0;j=g+1|0;h=c[b>>2]|0;if(j>>>0>h>>>0){$d=459;break b}i=c[l>>2]|0;de=a[i+g>>0]|0;c[T>>2]=j;if(de<<24>>24){$d=461;break b}g=g+2|0;if(g>>>0>h>>>0){$d=463;break b}de=a[i+j>>0]|0;c[T>>2]=g;if(de<<24>>24){$d=465;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+416>>2]&127](de)|0){$d=467;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,0,0)|0){$d=469;break b}break}case 204:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=471;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+428>>2]&511](de,g)|0){$d=473;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=475;break b}break}case 205:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=477;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+432>>2]&511](de,g)|0){$d=479;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=481;break b}break}case 206:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=483;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+436>>2]&511](de,g)|0){$d=485;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=487;break b}break}case 207:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=489;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+440>>2]&511](de,g)|0){$d=491;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=493;break b}break}case 208:{de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+444>>2]&127](de)|0){$d=495;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=497;break b}break}case 209:{de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+448>>2]&127](de)|0){$d=499;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=501;break b}break}default:{$d=502;break b}}while(0);g=c[T>>2]|0;if(g>>>0>=e>>>0)break a}switch($d|0){case 5:{eu(b,319296,W);break}case 7:{pu(b,j,0);break}case 10:{eu(b,319321,X);break}case 12:{eu(b,319355,Nb);break}case 14:{c[xd>>2]=319384;eu(b,314399,xd);break}case 23:{eu(b,319405,Md);break}case 25:{eu(b,319441,Wd);break}case 27:{eu(b,319469,ba);break}case 29:{c[oa>>2]=319502;eu(b,314399,oa);break}case 38:{eu(b,319405,Ca);break}case 40:{eu(b,319522,La);break}case 42:{eu(b,319469,Ta);break}case 44:{c[bb>>2]=319549;eu(b,314399,bb);break}case 53:{eu(b,319405,ob);break}case 55:{eu(b,319567,zb);break}case 57:{eu(b,319469,Hb);break}case 59:{eu(b,319592,Sb);break}case 61:{eu(b,319355,ac);break}case 63:{eu(b,319619,kc);break}case 65:{eu(b,319355,tc);break}case 67:{c[Cc>>2]=319648;eu(b,312904,Cc);break}case 69:{eu(b,319657,Oc);break}case 71:{eu(b,319682,Xc);break}case 73:{c[ed>>2]=319712;eu(b,312904,ed);break}case 75:{eu(b,319724,rd);break}case 77:{eu(b,319682,Cd);break}case 79:{c[Fd>>2]=319751;eu(b,312904,Fd);break}case 88:{c[Gd>>2]=319773;eu(b,312904,Gd);break}case 90:{c[Hd>>2]=319795;eu(b,312904,Hd);break}case 94:{eu(b,319825,Id);break}case 96:{eu(b,319855,Jd);break}case 98:{eu(b,319355,Kd);break}case 100:{eu(b,319884,Ld);break}case 102:{eu(b,319355,Nd);break}case 104:{eu(b,319910,Od);break}case 106:{eu(b,319355,Pd);break}case 109:{eu(b,319937,Qd);break}case 111:{eu(b,319963,Rd);break}case 113:{c[Sd>>2]=319989;eu(b,314399,Sd);break}case 115:{eu(b,320005,Td);break}case 117:{eu(b,320036,Ud);break}case 120:{c[Vd>>2]=320067;eu(b,320083,Vd);break}case 122:{eu(b,320113,Xd);break}case 124:{eu(b,320144,Yd);break}case 127:{c[Zd>>2]=320191;c[Zd+4>>2]=320175;eu(b,312701,Zd);break}case 129:{eu(b,320197,_d);break}case 131:{eu(b,320228,Y);break}case 133:{c[Z>>2]=320272;c[Z+4>>2]=320256;eu(b,312701,Z);break}case 135:{eu(b,320279,_);break}case 137:{eu(b,320310,$);break}case 139:{c[ca>>2]=330963;c[ca+4>>2]=320338;eu(b,312701,ca);break}case 141:{eu(b,320355,da);break}case 143:{eu(b,320387,ia);break}case 146:{c[ja>>2]=320416;eu(b,312904,ja);break}case 148:{eu(b,320440,ka);break}case 150:{eu(b,319682,la);break}case 152:{c[ma>>2]=320472;eu(b,312904,ma);break}case 154:{eu(b,320494,na);break}case 156:{eu(b,319682,pa);break}case 158:{c[qa>>2]=320525;eu(b,312904,qa);break}case 160:{eu(b,320549,ra);break}case 162:{eu(b,319682,sa);break}case 164:{c[ta>>2]=320581;eu(b,312904,ta);break}case 166:{eu(b,320603,ua);break}case 168:{eu(b,319682,va);break}case 170:{c[wa>>2]=320634;eu(b,312904,wa);break}case 172:{c[xa>>2]=g;eu(b,320654,xa);break}case 174:{eu(b,320686,ya);break}case 176:{eu(b,319682,za);break}case 178:{c[Aa>>2]=320713;eu(b,312904,Aa);break}case 180:{eu(b,320743,Ba);break}case 183:{c[Da>>2]=320781;eu(b,312904,Da);break}case 185:{eu(b,320807,Ea);break}case 187:{c[Fa>>2]=315712;c[Fa+4>>2]=320841;eu(b,312701,Fa);break}case 189:{eu(b,320864,Ga);break}case 191:{eu(b,320903,Ha);break}case 193:{eu(b,320938,Ia);break}case 195:{c[Ja>>2]=331218;eu(b,312904,Ja);break}case 197:{c[Ka>>2]=g;eu(b,320975,Ka);break}case 199:{eu(b,321014,Ma);break}case 201:{eu(b,319682,Na);break}case 203:{c[Oa>>2]=331230;eu(b,312904,Oa);break}case 205:{eu(b,321047,Pa);break}case 208:{c[Qa>>2]=321092;eu(b,312904,Qa);break}case 210:{eu(b,321125,Ra);break}case 212:{c[Sa>>2]=315712;c[Sa+4>>2]=321166;eu(b,312701,Sa);break}case 214:{eu(b,321196,Ua);break}case 216:{eu(b,321242,Va);break}case 218:{eu(b,320938,Wa);break}case 220:{c[Xa>>2]=321283;eu(b,312904,Xa);break}case 222:{eu(b,321305,Ya);break}case 224:{eu(b,319682,Za);break}case 226:{c[_a>>2]=321336;eu(b,312904,_a);break}case 228:{c[$a>>2]=321351;eu(b,312904,$a);$d=233;break}case 230:{eu(b,321363,ab);$d=233;break}case 232:{eu(b,320938,cb);$d=233;break}case 236:{c[db>>2]=321390;eu(b,312904,db);break}case 238:{c[eb>>2]=321406;eu(b,312904,eb);$d=243;break}case 240:{eu(b,321419,fb);$d=243;break}case 242:{eu(b,320938,gb);$d=243;break}case 246:{c[hb>>2]=315712;c[hb+4>>2]=321447;eu(b,312701,hb);break}case 248:{eu(b,321468,ib);break}case 250:{eu(b,321505,jb);break}case 252:{eu(b,320036,kb);break}case 254:{c[lb>>2]=315712;c[lb+4>>2]=321538;eu(b,312701,lb);break}case 256:{eu(b,321559,mb);break}case 258:{eu(b,321596,nb);break}case 260:{eu(b,320036,pb);break}case 262:{eu(b,321629,qb);break}case 264:{eu(b,319355,rb);break}case 266:{eu(b,321658,sb);break}case 268:{eu(b,319355,tb);break}case 270:{eu(b,321688,ub);break}case 272:{eu(b,319355,vb);break}case 274:{eu(b,321716,wb);break}case 276:{eu(b,319355,xb);break}case 278:{c[yb>>2]=315712;c[yb+4>>2]=321746;eu(b,312701,yb);break}case 280:{eu(b,321755,Ab);break}case 282:{eu(b,320144,Bb);break}case 284:{c[Cb>>2]=330963;c[Cb+4>>2]=321788;eu(b,312701,Cb);break}case 286:{eu(b,321802,Db);break}case 288:{eu(b,320387,Eb);break}case 291:{c[Fb>>2]=321336;eu(b,312904,Fb);break}case 293:{c[Gb>>2]=321351;eu(b,312904,Gb);$d=298;break}case 295:{eu(b,321838,Ib);$d=298;break}case 297:{eu(b,320938,Jb);$d=298;break}case 301:{eu(b,321870,Kb);break}case 303:{eu(b,319355,Lb);break}case 305:{c[Mb>>2]=321900;eu(b,314399,Mb);break}case 314:{eu(b,319405,Ob);break}case 316:{eu(b,321919,Pb);break}case 318:{eu(b,319469,Qb);break}case 320:{eu(b,321945,Rb);break}case 322:{eu(b,319355,Tb);break}case 324:{eu(b,321973,Ub);break}case 326:{eu(b,319355,Vb);break}case 328:{c[Wb>>2]=322003;eu(b,312904,Wb);break}case 330:{eu(b,322015,Xb);break}case 332:{eu(b,319682,Yb);break}case 334:{c[Zb>>2]=322043;eu(b,312904,Zb);break}case 336:{c[_b>>2]=322003;eu(b,312904,_b);break}case 338:{eu(b,322059,$b);break}case 340:{eu(b,322089,bc);break}case 342:{eu(b,321688,cc);break}case 344:{eu(b,319355,dc);break}case 346:{eu(b,321870,ec);break}case 348:{eu(b,319355,fc);break}case 350:{c[gc>>2]=321336;eu(b,312904,gc);break}case 352:{c[hc>>2]=321351;eu(b,312904,hc);$d=357;break}case 354:{eu(b,322124,ic);$d=357;break}case 356:{eu(b,320938,jc);$d=357;break}case 360:{c[lc>>2]=321336;eu(b,312904,lc);break}case 362:{c[mc>>2]=321351;eu(b,312904,mc);$d=367;break}case 364:{eu(b,322159,nc);$d=367;break}case 366:{eu(b,320938,oc);$d=367;break}case 370:{c[pc>>2]=321336;eu(b,312904,pc);break}case 372:{c[qc>>2]=321351;eu(b,312904,qc);$d=377;break}case 374:{eu(b,322192,rc);$d=377;break}case 376:{eu(b,320938,sc);$d=377;break}case 380:{c[uc>>2]=321390;eu(b,312904,uc);break}case 382:{c[vc>>2]=321406;eu(b,312904,vc);$d=387;break}case 384:{eu(b,322225,wc);$d=387;break}case 386:{eu(b,320938,xc);$d=387;break}case 390:{c[yc>>2]=322259;eu(b,312904,yc);break}case 392:{c[zc>>2]=322276;eu(b,312904,zc);$d=397;break}case 394:{eu(b,322290,Ac);$d=397;break}case 396:{eu(b,320938,Bc);$d=397;break}case 400:{c[Dc>>2]=322259;eu(b,312904,Dc);break}case 402:{c[Ec>>2]=322276;eu(b,312904,Ec);$d=407;break}case 404:{eu(b,322322,Fc);$d=407;break}case 406:{eu(b,320938,Gc);$d=407;break}case 410:{c[Hc>>2]=322361;eu(b,312904,Hc);break}case 412:{c[Ic>>2]=315712;c[Ic+4>>2]=322380;eu(b,312701,Ic);break}case 414:{eu(b,322401,Jc);break}case 416:{eu(b,322426,Kc);break}case 418:{eu(b,320938,Lc);break}case 420:{c[Mc>>2]=322361;eu(b,312904,Mc);break}case 422:{c[Nc>>2]=315712;c[Nc+4>>2]=322458;eu(b,312701,Nc);break}case 424:{eu(b,322401,Pc);break}case 426:{eu(b,322480,Qc);break}case 428:{eu(b,320938,Rc);break}case 430:{c[Sc>>2]=322513;eu(b,312904,Sc);break}case 433:{eu(b,322527,Tc);break}case 435:{eu(b,322558,Uc);break}case 437:{eu(b,320036,Vc);break}case 439:{c[Wc>>2]=315712;c[Wc+4>>2]=322458;eu(b,312701,Wc);break}case 441:{eu(b,322401,Yc);break}case 443:{eu(b,322589,Zc);break}case 445:{eu(b,320036,_c);break}case 447:{c[$c>>2]=315712;c[$c+4>>2]=322458;eu(b,312701,$c);break}case 449:{eu(b,322401,ad);break}case 451:{c[bd>>2]=315712;c[bd+4>>2]=322458;eu(b,312701,bd);break}case 453:{eu(b,322401,cd);break}case 455:{eu(b,322622,dd);break}case 457:{eu(b,320938,fd);break}case 459:{c[gd>>2]=315712;c[gd+4>>2]=322380;eu(b,312701,gd);break}case 461:{eu(b,322401,hd);break}case 463:{c[id>>2]=315712;c[id+4>>2]=322380;eu(b,312701,id);break}case 465:{eu(b,322401,jd);break}case 467:{eu(b,322655,kd);break}case 469:{eu(b,320938,ld);break}case 471:{c[md>>2]=322687;eu(b,312904,md);break}case 473:{eu(b,322699,nd);break}case 475:{eu(b,320036,od);break}case 477:{c[pd>>2]=322687;eu(b,312904,pd);break}case 479:{eu(b,322730,qd);break}case 481:{eu(b,320036,sd);break}case 483:{c[td>>2]=322687;eu(b,312904,td);break}case 485:{eu(b,322761,ud);break}case 487:{eu(b,320036,vd);break}case 489:{c[wd>>2]=322687;eu(b,312904,wd);break}case 491:{eu(b,322793,yd);break}case 493:{eu(b,320036,zd);break}case 495:{eu(b,322825,Ad);break}case 497:{eu(b,319355,Bd);break}case 499:{eu(b,322855,Dd);break}case 501:{eu(b,319355,Ed);break}case 502:{pu(b,j,0);break}}de=1;aa=ce;return de|0}else f=0;while(0);if((g|0)!=(e|0)){eu(b,322887,ae);de=1;aa=ce;return de|0}if(f){de=0;aa=ce;return de|0}eu(b,322924,be);de=1;aa=ce;return de|0}function pu(b,e,f){b=b|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,q=0,r=0;q=aa;aa=aa+48|0;n=q+8|0;p=q;o=q+36|0;k=q+24|0;m=q+12|0;g=_A(32)|0;c[o>>2]=g;c[o+8>>2]=-2147483616;c[o+4>>2]=17;h=g;i=322963;j=h+17|0;do{a[h>>0]=a[i>>0]|0;h=h+1|0;i=i+1|0}while((h|0)<(j|0));a[g+17>>0]=0;if(f|0){wB(o,32);vB(o,f)|0}vB(o,322981)|0;Fm(k,e);l=c[k>>2]|0;j=k+4|0;g=c[j>>2]|0;if((l|0)!=(g|0)){h=m+11|0;i=m+4|0;f=l;do{c[n>>2]=d[f>>0];Ij(m,322983,n);r=a[h>>0]|0;k=r<<24>>24<0;e=c[m>>2]|0;uB(o,k?e:m,k?c[i>>2]|0:r&255)|0;if(k)$A(e);f=f+1|0}while((f|0)!=(g|0))}g=o+11|0;c[p>>2]=(a[g>>0]|0)<0?c[o>>2]|0:o;eu(b,330905,p);if(l|0){c[j>>2]=l;$A(l)}if((a[g>>0]|0)>=0){aa=q;return}$A(c[o>>2]|0);aa=q;return}function qu(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;k=a+8|0;e=c[k>>2]|0;j=a+4|0;d=c[j>>2]|0;if(e-d>>2>>>0>=b>>>0){uC(d|0,0,b<<2|0)|0;c[j>>2]=d+(b<<2);return}i=c[a>>2]|0;g=d-i|0;f=g>>2;d=f+b|0;if(d>>>0>1073741823)HB();m=e-i|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{l=_A(e<<2)|0;h=l;break}else{h=0;l=0}while(0);d=l+(f<<2)|0;uC(d|0,0,b<<2|0)|0;if((g|0)>0)sC(h|0,i|0,g|0)|0;c[a>>2]=l;c[j>>2]=d+(b<<2);c[k>>2]=l+(e<<2);if(!i)return;$A(i);return}function ru(a){a=a|0;return}function su(a){a=a|0;$A(a);return}function tu(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+8>>2]&511](a,b)|0}function uu(a,b){a=a|0;b=b|0;c[a+4>>2]=b;a=c[a+12>>2]|0;na[c[(c[a>>2]|0)+12>>2]&31](a,b);return}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,330005,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;b=fa[c[(c[h>>2]|0)+16>>2]&511](h,b)|0;aa=i;return b|0}function wu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329994,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+20>>2]&127](g)|0;aa=h;return g|0}function xu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+12>>2]|0;return ha[c[(c[a>>2]|0)+24>>2]&127](a,b,d,e)|0}function yu(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;k=aa;aa=aa+32|0;j=k+8|0;h=k;i=a+16|0;e=c[i>>2]|0;if(e>>>0<=142){f=a+8|0;if(!e)e=f;else g=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[i>>2]|0;g=6}if((g|0)==6){Qn(c[f>>2]|0,17104,e,0,0);e=f}f=c[e>>2]|0;g=c[d>>2]|0;c[j>>2]=c[d+4>>2];c[j+4>>2]=g;c[j+8>>2]=b;Pn(f,329955,j);c[i>>2]=(c[i>>2]|0)+2;a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+28>>2]|0;f=d;g=c[f+4>>2]|0;d=h;c[d>>2]=c[f>>2];c[d+4>>2]=g;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];j=ga[i&127](a,b,j)|0;aa=k;return j|0}function zu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329937,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+32>>2]&127](g)|0;aa=h;return g|0}function Au(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329914,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+36>>2]&511](h,b)|0;aa=i;return h|0}function Bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329897,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+40>>2]&511](h,b)|0;aa=i;return h|0}function Cu(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 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;v=aa;aa=aa+80|0;u=v+64|0;t=v+56|0;s=v+48|0;r=v+40|0;q=v+32|0;p=v+24|0;o=v+16|0;n=v+8|0;m=v;j=a+16|0;h=c[j>>2]|0;if(h>>>0<=142){i=a+8|0;if(!h)l=i;else k=6}else{i=a+8|0;do{Qn(c[i>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[j>>2]|0;k=6}if((k|0)==6){Qn(c[i>>2]|0,17104,h,0,0);l=i}k=c[l>>2]|0;c[m>>2]=b;Pn(k,329856,m);Pn(c[l>>2]|0,329883,n);if(d|0){i=d+-1|0;j=a+8|0;h=0;do{_x(c[j>>2]|0,c[e+(h<<2)>>2]|0);if((h|0)!=(i|0))Pn(c[l>>2]|0,330984,o);h=h+1|0}while((h|0)!=(d|0))}Pn(c[l>>2]|0,330908,p);Pn(c[l>>2]|0,329885,q);Pn(c[l>>2]|0,329883,r);if(!f){s=c[l>>2]|0;Pn(s,330908,t);t=c[l>>2]|0;Pn(t,326855,u);u=a+12|0;u=c[u>>2]|0;t=c[u>>2]|0;t=t+44|0;t=c[t>>2]|0;u=ja[t&31](u,b,d,e,f,g)|0;aa=v;return u|0}i=f+-1|0;j=a+8|0;h=0;do{_x(c[j>>2]|0,c[g+(h<<2)>>2]|0);if((h|0)!=(i|0))Pn(c[l>>2]|0,330984,s);h=h+1|0}while((h|0)!=(f|0));s=c[l>>2]|0;Pn(s,330908,t);t=c[l>>2]|0;Pn(t,326855,u);u=a+12|0;u=c[u>>2]|0;t=c[u>>2]|0;t=t+44|0;t=c[t>>2]|0;u=ja[t&31](u,b,d,e,f,g)|0;aa=v;return u|0}function Du(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329840,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+48>>2]&127](g)|0;aa=h;return g|0}function Eu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329815,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+52>>2]&511](h,b)|0;aa=i;return h|0}function Fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329796,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+56>>2]&511](h,b)|0;aa=i;return h|0}function Gu(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,l=0,m=0,n=0,o=0;n=aa;aa=aa+48|0;m=n+16|0;l=n+40|0;j=n+8|0;k=n;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;o=c[d+4>>2]|0;f=c[d>>2]|0;h=c[e+4>>2]|0;g=c[e>>2]|0;c[m>>2]=b;c[m+4>>2]=o;c[m+8>>2]=f;c[m+12>>2]=h;c[m+16>>2]=g;Pn(i,329744,m);a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+60>>2]|0;g=d;d=c[g+4>>2]|0;h=j;c[h>>2]=c[g>>2];c[h+4>>2]=d;h=e;e=c[h+4>>2]|0;d=k;c[d>>2]=c[h>>2];c[d+4>>2]=e;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];m=ha[i&127](a,b,l,m)|0;aa=n;return m|0}function Hu(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 h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+48|0;o=p+16|0;n=p+32|0;l=p+8|0;m=p;j=a+16|0;i=c[j>>2]|0;if(i>>>0<=142){h=a+8|0;if(i)k=6}else{h=a+8|0;do{Qn(c[h>>2]|0,17104,142,0,0);i=i+-142|0}while(i>>>0>142);i=c[j>>2]|0;k=6}if((k|0)==6)Qn(c[h>>2]|0,17104,i,0,0);k=c[h>>2]|0;c[o>>2]=b;c[o+4>>2]=f;c[o+8>>2]=g;Pn(k,329681,o);a=c[a+12>>2]|0;k=c[(c[a>>2]|0)+64>>2]|0;i=d;d=c[i+4>>2]|0;j=l;c[j>>2]=c[i>>2];c[j+4>>2]=d;j=e;e=c[j+4>>2]|0;d=m;c[d>>2]=c[j>>2];c[d+4>>2]=e;c[n>>2]=c[l>>2];c[n+4>>2]=c[l+4>>2];c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];o=ja[k&31](a,b,n,o,f,g)|0;aa=p;return o|0}function Iu(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var 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;t=aa;aa=aa+176|0;s=t+144|0;r=t+160|0;m=t+136|0;l=t+120|0;q=t;o=t+112|0;p=t+104|0;k=i;j=c[k>>2]|0;k=c[k+4>>2]|0;if(!(a[i+16>>0]|0)){l=m;c[l>>2]=j;c[l+4>>2]=k;Sz(q,100,329111,m)|0}else{u=i+8|0;v=c[u>>2]|0;u=c[u+4>>2]|0;m=l;c[m>>2]=j;c[m+4>>2]=k;m=l+8|0;c[m>>2]=v;c[m+4>>2]=u;Sz(q,100,329086,l)|0}l=b+16|0;k=c[l>>2]|0;if(k>>>0<=142){j=b+8|0;if(k)n=9}else{j=b+8|0;do{Qn(c[j>>2]|0,17104,142,0,0);k=k+-142|0}while(k>>>0>142);k=c[l>>2]|0;n=9}if((n|0)==9)Qn(c[j>>2]|0,17104,k,0,0);j=c[j>>2]|0;do switch(h|0){case -1:{k=330980;break}case -2:{k=330976;break}case -3:{k=330972;break}case -4:{k=330968;break}case -5:{k=330963;break}case -16:{k=330955;break}case -32:{k=330950;break}case -24:{k=330939;break}case -64:{k=330934;break}case 0:{k=330930;break}case -17:{k=330923;break}default:k=330910}while(0);c[s>>2]=d;c[s+4>>2]=g;c[s+8>>2]=k;c[s+12>>2]=q;Pn(j,329612,s);v=c[b+12>>2]|0;u=c[(c[v>>2]|0)+68>>2]|0;q=e;b=c[q+4>>2]|0;e=o;c[e>>2]=c[q>>2];c[e+4>>2]=b;e=c[f+4>>2]|0;b=p;c[b>>2]=c[f>>2];c[b+4>>2]=e;c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];v=ka[u&31](v,d,r,s,g,h,i)|0;aa=t;return v|0}function Ju(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var 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;s=aa;aa=aa+176|0;r=s+144|0;q=s+160|0;l=s+136|0;k=s+120|0;p=s;n=s+112|0;o=s+104|0;j=h;i=c[j>>2]|0;j=c[j+4>>2]|0;if(!(a[h+16>>0]|0)){k=l;c[k>>2]=i;c[k+4>>2]=j;Sz(p,100,329111,l)|0}else{t=h+8|0;u=c[t>>2]|0;t=c[t+4>>2]|0;l=k;c[l>>2]=i;c[l+4>>2]=j;l=k+8|0;c[l>>2]=u;c[l+4>>2]=t;Sz(p,100,329086,k)|0}k=b+16|0;j=c[k>>2]|0;if(j>>>0<=142){i=b+8|0;if(j)m=9}else{i=b+8|0;do{Qn(c[i>>2]|0,17104,142,0,0);j=j+-142|0}while(j>>>0>142);j=c[k>>2]|0;m=9}if((m|0)==9)Qn(c[i>>2]|0,17104,j,0,0);u=c[i>>2]|0;c[r>>2]=d;c[r+4>>2]=g;c[r+8>>2]=p;Pn(u,329556,r);u=c[b+12>>2]|0;t=c[(c[u>>2]|0)+72>>2]|0;p=e;b=c[p+4>>2]|0;e=n;c[e>>2]=c[p>>2];c[e+4>>2]=b;e=c[f+4>>2]|0;b=o;c[b>>2]=c[f>>2];c[b+4>>2]=e;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];u=ja[t&31](u,d,q,r,g,h)|0;aa=s;return u|0}function Ku(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+48|0;p=q+16|0;o=q+32|0;m=q+8|0;n=q;k=a+16|0;j=c[k>>2]|0;if(j>>>0<=142){i=a+8|0;if(j)l=6}else{i=a+8|0;do{Qn(c[i>>2]|0,17104,142,0,0);j=j+-142|0}while(j>>>0>142);j=c[k>>2]|0;l=6}if((l|0)==6)Qn(c[i>>2]|0,17104,j,0,0);i=c[i>>2]|0;do switch(g|0){case -1:{j=330980;break}case -2:{j=330976;break}case -3:{j=330972;break}case -4:{j=330968;break}case -5:{j=330963;break}case -16:{j=330955;break}case -32:{j=330950;break}case -24:{j=330939;break}case -64:{j=330934;break}case 0:{j=330930;break}case -17:{j=330923;break}default:j=330910}while(0);c[p>>2]=b;c[p+4>>2]=f;c[p+8>>2]=j;c[p+12>>2]=h?326111:326116;Pn(i,329481,p);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+76>>2]|0;j=d;d=c[j+4>>2]|0;k=m;c[k>>2]=c[j>>2];c[k+4>>2]=d;k=e;e=c[k+4>>2]|0;d=n;c[d>>2]=c[k>>2];c[d+4>>2]=e;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];g=ka[l&31](a,b,o,p,f,g,h)|0;aa=q;return g|0}function Lu(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 h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+48|0;o=p+16|0;n=p+32|0;l=p+8|0;m=p;j=a+16|0;i=c[j>>2]|0;if(i>>>0<=142){h=a+8|0;if(i)k=6}else{h=a+8|0;do{Qn(c[h>>2]|0,17104,142,0,0);i=i+-142|0}while(i>>>0>142);i=c[j>>2]|0;k=6}if((k|0)==6)Qn(c[h>>2]|0,17104,i,0,0);k=c[h>>2]|0;c[o>>2]=b;c[o+4>>2]=f;c[o+8>>2]=g;Pn(k,329416,o);a=c[a+12>>2]|0;k=c[(c[a>>2]|0)+80>>2]|0;i=d;d=c[i+4>>2]|0;j=l;c[j>>2]=c[i>>2];c[j+4>>2]=d;j=e;e=c[j+4>>2]|0;d=m;c[d>>2]=c[j>>2];c[d+4>>2]=e;c[n>>2]=c[l>>2];c[n+4>>2]=c[l+4>>2];c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];o=ja[k&31](a,b,n,o,f,g)|0;aa=p;return o|0}function Mu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329398,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+84>>2]&127](g)|0;aa=h;return g|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329371,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+88>>2]&511](h,b)|0;aa=i;return h|0}function Ou(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329350,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+92>>2]&511](h,b)|0;aa=i;return h|0}function Pu(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,329312,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+96>>2]&127](i,b,d)|0;aa=j;return i|0}function Qu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329292,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+100>>2]&127](g)|0;aa=h;return g|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329268,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+104>>2]&511](h,b)|0;aa=i;return h|0}function Su(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329250,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+108>>2]&511](h,b)|0;aa=i;return h|0}function Tu(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,n=0,o=0,p=0;n=aa;aa=aa+144|0;m=n+128|0;j=n+120|0;i=n+104|0;l=n;h=f;g=c[h>>2]|0;h=c[h+4>>2]|0;if(!(a[f+16>>0]|0)){i=j;c[i>>2]=g;c[i+4>>2]=h;Sz(l,100,329111,j)|0}else{o=f+8|0;p=c[o>>2]|0;o=c[o+4>>2]|0;j=i;c[j>>2]=g;c[j+4>>2]=h;j=i+8|0;c[j>>2]=p;c[j+4>>2]=o;Sz(l,100,329086,i)|0}i=b+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=b+8|0;if(h)k=9}else{g=b+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;k=9}if((k|0)==9)Qn(c[g>>2]|0,17104,h,0,0);g=c[g>>2]|0;do switch(e|0){case -1:{h=330980;break}case -2:{h=330976;break}case -3:{h=330972;break}case -4:{h=330968;break}case -5:{h=330963;break}case -16:{h=330955;break}case -32:{h=330950;break}case -24:{h=330939;break}case -64:{h=330934;break}case 0:{h=330930;break}case -17:{h=330923;break}default:h=330910}while(0);c[m>>2]=d;c[m+4>>2]=h;c[m+8>>2]=l;Pn(g,329211,m);p=c[b+12>>2]|0;p=ha[c[(c[p>>2]|0)+112>>2]&127](p,d,e,f)|0;aa=n;return p|0}function Uu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329194,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+116>>2]&127](g)|0;aa=h;return g|0}function Vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329169,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+120>>2]&511](h,b)|0;aa=i;return h|0}function Wu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329150,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+124>>2]&511](h,b)|0;aa=i;return h|0}function Xu(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;m=aa;aa=aa+144|0;l=m+128|0;i=m+120|0;h=m+104|0;k=m;g=e;f=c[g>>2]|0;g=c[g+4>>2]|0;if(!(a[e+16>>0]|0)){h=i;c[h>>2]=f;c[h+4>>2]=g;Sz(k,100,329111,i)|0}else{n=e+8|0;o=c[n>>2]|0;n=c[n+4>>2]|0;i=h;c[i>>2]=f;c[i+4>>2]=g;i=h+8|0;c[i>>2]=o;c[i+4>>2]=n;Sz(k,100,329086,h)|0}h=b+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=b+8|0;if(g)j=9}else{f=b+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;j=9}if((j|0)==9)Qn(c[f>>2]|0,17104,g,0,0);o=c[f>>2]|0;c[l>>2]=d;c[l+4>>2]=k;Pn(o,329125,l);o=c[b+12>>2]|0;o=ga[c[(c[o>>2]|0)+128>>2]&127](o,d,e)|0;aa=m;return o|0}function Yu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329068,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+132>>2]&127](g)|0;aa=h;return g|0}function Zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329043,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+136>>2]&511](h,b)|0;aa=i;return h|0}function _u(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329024,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+140>>2]&511](h,b)|0;aa=i;return h|0}function $u(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);f=c[f>>2]|0;do switch(d|0){case -1:{g=330980;break}case -2:{g=330976;break}case -3:{g=330972;break}case -4:{g=330968;break}case -5:{g=330963;break}case -16:{g=330955;break}case -32:{g=330950;break}case -24:{g=330939;break}case -64:{g=330934;break}case 0:{g=330930;break}case -17:{g=330923;break}default:g=330910}while(0);c[j>>2]=b;c[j+4>>2]=g;c[j+8>>2]=e?326111:326116;Pn(f,328977,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+144>>2]&127](j,b,d,e)|0;aa=k;return j|0}function av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328952,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+148>>2]&511](h,b)|0;aa=i;return h|0}function bv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328929,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+152>>2]&511](h,b)|0;aa=i;return h|0}function cv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328914,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+156>>2]&511](h,b)|0;aa=i;return h|0}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,328896,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+160>>2]&127](g)|0;aa=h;return g|0}function ev(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,328871,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+164>>2]&511](h,b)|0;aa=i;return h|0}function fv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328852,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+168>>2]&511](h,b)|0;aa=i;return h|0}function gv(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;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);g=c[g>>2]|0;if((d|0)<5)h=c[64+(d<<2)>>2]|0;else h=328778;i=c[f+4>>2]|0;j=c[f>>2]|0;c[l>>2]=b;c[l+4>>2]=h;c[l+8>>2]=e;c[l+12>>2]=i;c[l+16>>2]=j;Pn(g,328791,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+172>>2]|0;h=f;i=c[h+4>>2]|0;f=k;c[f>>2]=c[h>>2];c[f+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,d,e,l)|0;aa=m;return l|0}function hv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,328760,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+176>>2]&127](g)|0;aa=h;return g|0}function iv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,328736,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+180>>2]&511](h,b)|0;aa=i;return h|0}function jv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328715,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+184>>2]&511](h,b)|0;aa=i;return h|0}function kv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,328698,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+188>>2]&127](g)|0;aa=h;return g|0}function lv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,328675,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+192>>2]&511](h,b)|0;aa=i;return h|0}function mv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328650,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+196>>2]&511](h,b)|0;aa=i;return h|0}function nv(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,328617,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+200>>2]&127](i,b,d)|0;aa=j;return i|0}function ov(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328595,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+204>>2]&511](h,b)|0;aa=i;return h|0}function pv(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);f=c[f>>2]|0;do switch(e|0){case -1:{g=330980;break}case -2:{g=330976;break}case -3:{g=330972;break}case -4:{g=330968;break}case -5:{g=330963;break}case -16:{g=330955;break}case -32:{g=330950;break}case -24:{g=330939;break}case -64:{g=330934;break}case 0:{g=330930;break}case -17:{g=330923;break}default:g=330910}while(0);c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=g;Pn(f,328550,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+208>>2]&127](j,b,d,e)|0;aa=k;return j|0}function qv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=aa;aa=aa+16|0;e=d+4|0;g=d;a=c[a+12>>2]|0;f=c[(c[a>>2]|0)+212>>2]|0;c[g>>2]=c[b>>2];c[e>>2]=c[g>>2];a=fa[f&511](a,e)|0;aa=d;return a|0}function rv(a){a=a|0;a=c[a+12>>2]|0;return ea[c[(c[a>>2]|0)+216>>2]&127](a)|0}function sv(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+220>>2]&511](a,b)|0}function tv(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+224>>2]&511](a,b)|0}function uv(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+12>>2]|0;return ga[c[(c[a>>2]|0)+228>>2]&127](a,b,d)|0}function vv(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+12>>2]|0;return ga[c[(c[a>>2]|0)+232>>2]&127](a,b,d)|0}function wv(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+12>>2]|0;return ga[c[(c[a>>2]|0)+236>>2]&127](a,b,d)|0}function xv(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+240>>2]&511](a,b)|0}function yv(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+12>>2]|0;return ga[c[(c[a>>2]|0)+244>>2]&127](a,b,d)|0}function zv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=aa;aa=aa+16|0;e=d;a=c[a+12>>2]|0;f=c[(c[a>>2]|0)+248>>2]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];b=fa[f&511](a,e)|0;aa=d;return b|0}function Av(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+252>>2]&511](a,b)|0}function Bv(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,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328485,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+256>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Cv(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,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328419,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+260>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Dv(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,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328355,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+264>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Ev(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,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328284,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+268>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Fv(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,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328219,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+272>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Gv(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,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328152,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+276>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Hv(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;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,328127,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+280>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Iv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);Pn(c[d>>2]|0,328109,h);_x(c[d>>2]|0,b);Pn(c[d>>2]|0,326855,i);i=c[a+12>>2]|0;i=fa[c[(c[i>>2]|0)+284>>2]&511](i,b)|0;aa=j;return i|0}function Jv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328088,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+288>>2]&511](h,b)|0;aa=i;return h|0}function Kv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328065,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+292>>2]&511](h,b)|0;aa=i;return h|0}function Lv(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,328022,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+296>>2]&127](i,b,d)|0;aa=j;return i|0}function Mv(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,l=0,m=0,n=0;n=aa;aa=aa+32|0;l=n+24|0;k=n+16|0;m=n+8|0;j=n;h=a+16|0;f=c[h>>2]|0;if(f>>>0<=142){g=a+8|0;if(f)i=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[g>>2]|0,17104,f,0,0);f=c[g>>2]|0;c[j>>2]=b;Pn(f,327964,j);f=c[g>>2]|0;if(b){i=b+-1|0;h=0;do{c[k>>2]=c[d+(h<<2)>>2];Pn(f,331596,k);if((h|0)!=(i|0))Pn(c[g>>2]|0,330984,l);h=h+1|0;f=c[g>>2]|0}while((h|0)!=(b|0))}c[m>>2]=e;Pn(f,328005,m);m=c[a+12>>2]|0;m=ha[c[(c[m>>2]|0)+300>>2]&127](m,b,d,e)|0;aa=n;return m|0}function Nv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327936,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+304>>2]&511](h,b)|0;aa=i;return h|0}function Ov(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,327884,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+308>>2]&127](i,b,d)|0;aa=j;return i|0}function Pv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327871,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+312>>2]&127](g)|0;aa=h;return g|0}function Qv(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;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,327845,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+316>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Rv(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;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,327819,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+320>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Sv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327807,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+324>>2]&127](g)|0;aa=h;return g|0}function Tv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327795,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+328>>2]&127](g)|0;aa=h;return g|0}function Uv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327784,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+332>>2]&127](g)|0;aa=h;return g|0}function Vv(a){a=a|0;a=c[a+12>>2]|0;return ea[c[(c[a>>2]|0)+336>>2]&127](a)|0}function Wv(a,b){a=a|0;b=b|0;var d=0,e=0,i=0,j=0,k=0.0,l=0,m=0;m=aa;aa=aa+16|0;l=m;k=(c[h>>2]=b,+f[h>>2]);i=a+16|0;e=c[i>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)j=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[d>>2]|0,17104,e,0,0);j=c[d>>2]|0;g[l>>3]=k;c[l+8>>2]=b;Pn(j,327755,l);l=c[a+12>>2]|0;l=fa[c[(c[l>>2]|0)+340>>2]&511](l,b)|0;aa=m;return l|0}function Xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0,j=0,k=0.0,l=0,m=0;m=aa;aa=aa+16|0;l=m;c[h>>2]=b;c[h+4>>2]=d;k=+g[h>>3];i=a+16|0;f=c[i>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)j=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[e>>2]|0,17104,f,0,0);j=c[e>>2]|0;g[l>>3]=k;i=l+8|0;c[i>>2]=b;c[i+4>>2]=d;Pn(j,327724,l);l=c[a+12>>2]|0;l=ga[c[(c[l>>2]|0)+344>>2]&127](l,b,d)|0;aa=m;return l|0}function Yv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;d=c[b+4>>2]|0;e=c[b+8>>2]|0;f=c[b+12>>2]|0;c[h>>2]=c[b>>2];c[h+4>>2]=d;c[h+8>>2]=e;c[h+12>>2]=f;Pn(g,327678,h);a=c[a+12>>2]|0;g=c[(c[a>>2]|0)+348>>2]|0;c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];h=fa[g&511](a,h)|0;aa=i;return h|0}function Zv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327650,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+352>>2]&511](h,b)|0;aa=i;return h|0}function _v(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327622,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+356>>2]&511](h,b)|0;aa=i;return h|0}function $v(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;c[h+4>>2]=b;Pn(g,327595,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+360>>2]&511](h,b)|0;aa=i;return h|0}function aw(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;g=i;c[g>>2]=b;c[g+4>>2]=d;g=i+8|0;c[g>>2]=b;c[g+4>>2]=d;Pn(h,327564,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+364>>2]&127](i,b,d)|0;aa=j;return i|0}function bw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);Pn(c[d>>2]|0,327549,h);_x(c[d>>2]|0,b);Pn(c[d>>2]|0,326855,i);i=c[a+12>>2]|0;i=fa[c[(c[i>>2]|0)+368>>2]&511](i,b)|0;aa=j;return i|0}function cw(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,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,327490,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+372>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function dw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327463,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+376>>2]&511](h,b)|0;aa=i;return h|0}function ew(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327436,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+380>>2]&511](h,b)|0;aa=i;return h|0}function fw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327409,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+384>>2]&511](h,b)|0;aa=i;return h|0}function gw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);Pn(c[d>>2]|0,327392,h);_x(c[d>>2]|0,b);Pn(c[d>>2]|0,326855,i);i=c[a+12>>2]|0;i=fa[c[(c[i>>2]|0)+388>>2]&511](i,b)|0;aa=j;return i|0}function hw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327374,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+392>>2]&127](g)|0;aa=h;return g|0}function iw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327354,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+396>>2]&511](h,b)|0;aa=i;return h|0}function jw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327336,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+400>>2]&127](g)|0;aa=h;return g|0}function kw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327318,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+404>>2]&127](g)|0;aa=h;return g|0}function lw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327296,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+408>>2]&511](h,b)|0;aa=i;return h|0}function mw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327278,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+412>>2]&127](g)|0;aa=h;return g|0}function nw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327261,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+416>>2]&127](g)|0;aa=h;return g|0}function ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327241,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+420>>2]&511](h,b)|0;aa=i;return h|0}function pw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327220,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+424>>2]&511](h,b)|0;aa=i;return h|0}function qw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327200,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+428>>2]&511](h,b)|0;aa=i;return h|0}function rw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327180,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+432>>2]&511](h,b)|0;aa=i;return h|0}function sw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327159,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+436>>2]&511](h,b)|0;aa=i;return h|0}function tw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327138,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+440>>2]&511](h,b)|0;aa=i;return h|0}function uw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327123,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+444>>2]&127](g)|0;aa=h;return g|0}function vw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327106,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+448>>2]&127](g)|0;aa=h;return g|0}function ww(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327095,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+452>>2]&127](g)|0;aa=h;return g|0}function xw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327080,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+456>>2]&127](g)|0;aa=h;return g|0}function yw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327066,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+460>>2]&127](g)|0;aa=h;return g|0}function zw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327032,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+464>>2]&511](h,b)|0;aa=i;return h|0}function Aw(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,326974,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+468>>2]&127](i,b,d)|0;aa=j;return i|0}function Bw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,326960,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+472>>2]&127](g)|0;aa=h;return g|0}function Cw(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,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,326900,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+476>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Dw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326870,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+480>>2]&511](h,b)|0;aa=i;return h|0}function Ew(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);Pn(c[d>>2]|0,326839,h);_x(c[d>>2]|0,b);Pn(c[d>>2]|0,326855,i);i=c[a+12>>2]|0;i=fa[c[(c[i>>2]|0)+484>>2]&511](i,b)|0;aa=j;return i|0}function Fw(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;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,326815,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+488>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Gw(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;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,326789,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+492>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Hw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,326770,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+496>>2]&127](g)|0;aa=h;return g|0}function Iw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326749,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+500>>2]&511](h,b)|0;aa=i;return h|0}function Jw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,326733,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+504>>2]&127](g)|0;aa=h;return g|0}function Kw(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,l=0;l=aa;aa=aa+16|0;k=l;j=l+8|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;h=k;c[h>>2]=d;c[h+4>>2]=e;Pn(i,326702,k);a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+508>>2]|0;c[j>>2]=c[b>>2];c[k>>2]=c[j>>2];a=ha[i&127](a,k,d,e)|0;aa=l;return a|0}function Lw(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,l=0;l=aa;aa=aa+32|0;k=l;j=l+20|0;i=l+16|0;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;e=c[d+4>>2]|0;f=c[d+8>>2]|0;g=c[d+12>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=e;c[k+8>>2]=f;c[k+12>>2]=g;Pn(h,326651,k);a=c[a+12>>2]|0;h=c[(c[a>>2]|0)+512>>2]|0;c[i>>2]=c[b>>2];c[j>>2]=c[i>>2];c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];k=ga[h&127](a,j,k)|0;aa=l;return k|0}function Mw(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,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,326587,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+516>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Nw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,326564,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+520>>2]&511](h,b)|0;aa=i;return h|0}function Ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326540,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+524>>2]&511](h,b)|0;aa=i;return h|0}function Pw(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;l=aa;aa=aa+16|0;k=l;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);g=c[g>>2]|0;h=e?326111:326116;do switch(f|0){case -1:{i=330980;break}case -2:{i=330976;break}case -3:{i=330972;break}case -4:{i=330968;break}case -5:{i=330963;break}case -16:{i=330955;break}case -32:{i=330950;break}case -24:{i=330939;break}case -64:{i=330934;break}case 0:{i=330930;break}case -17:{i=330923;break}default:i=330910}while(0);c[k>>2]=b;c[k+4>>2]=d;c[k+8>>2]=h;c[k+12>>2]=i;Pn(g,326466,k);k=c[a+12>>2]|0;k=ia[c[(c[k>>2]|0)+528>>2]&31](k,b,d,e,f)|0;aa=l;return k|0}function Qw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326436,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+532>>2]&511](h,b)|0;aa=i;return h|0}function Rw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326408,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+536>>2]&511](h,b)|0;aa=i;return h|0}function Sw(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,326358,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+540>>2]&127](i,b,d)|0;aa=j;return i|0}function Tw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326323,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+544>>2]&511](h,b)|0;aa=i;return h|0}function Uw(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,326265,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+548>>2]&127](i,b,d)|0;aa=j;return i|0}function Vw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326245,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+552>>2]&511](h,b)|0;aa=i;return h|0}function Ww(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,326229,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+556>>2]&127](g)|0;aa=h;return g|0}function Xw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,326206,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+560>>2]&511](h,b)|0;aa=i;return h|0}function Yw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326182,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+564>>2]&511](h,b)|0;aa=i;return h|0}function Zw(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=e?326111:326116;Pn(i,326122,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+568>>2]&127](j,b,d,e)|0;aa=k;return j|0}function _w(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326081,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+572>>2]&511](h,b)|0;aa=i;return h|0}function $w(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326053,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+576>>2]&511](h,b)|0;aa=i;return h|0}function ax(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=e;Pn(i,326015,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+580>>2]&127](j,b,d,e)|0;aa=k;return j|0}function bx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325995,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+584>>2]&511](h,b)|0;aa=i;return h|0}function cx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325979,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+588>>2]&127](g)|0;aa=h;return g|0}function dx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325951,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+592>>2]&511](h,b)|0;aa=i;return h|0}function ex(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325934,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+596>>2]&511](h,b)|0;aa=i;return h|0}function fx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325913,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+600>>2]&127](g)|0;aa=h;return g|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325889,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+604>>2]&511](h,b)|0;aa=i;return h|0}function hx(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=e;Pn(i,325832,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+608>>2]&127](j,b,d,e)|0;aa=k;return j|0}function ix(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;e=c[b>>2]|0;c[i>>2]=c[b+4>>2];c[i+4>>2]=e;Pn(g,325804,i);a=c[a+12>>2]|0;g=c[(c[a>>2]|0)+612>>2]|0;e=b;f=c[e+4>>2]|0;b=h;c[b>>2]=c[e>>2];c[b+4>>2]=f;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];i=fa[g&511](a,i)|0;aa=j;return i|0}function jx(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=e;Pn(i,325745,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+616>>2]&127](j,b,d,e)|0;aa=k;return j|0}function kx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325719,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+620>>2]&511](h,b)|0;aa=i;return h|0}function lx(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;k=aa;aa=aa+32|0;j=k+8|0;i=k;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;g=c[d+4>>2]|0;f=c[d>>2]|0;c[j>>2]=b;c[j+4>>2]=g;c[j+8>>2]=f;Pn(h,325678,j);a=c[a+12>>2]|0;h=c[(c[a>>2]|0)+624>>2]|0;f=d;g=c[f+4>>2]|0;d=i;c[d>>2]=c[f>>2];c[d+4>>2]=g;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];j=ga[h&127](a,b,j)|0;aa=k;return j|0}function mx(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=e;Pn(i,325622,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+628>>2]&127](j,b,d,e)|0;aa=k;return j|0}function nx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325592,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+632>>2]&511](h,b)|0;aa=i;return h|0}function ox(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,325547,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+636>>2]&127](i,b,d)|0;aa=j;return i|0}function px(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,l=0;l=aa;aa=aa+32|0;k=l+8|0;j=l;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;h=c[e+4>>2]|0;g=c[e>>2]|0;c[k>>2]=b;c[k+4>>2]=d;c[k+8>>2]=h;c[k+12>>2]=g;Pn(i,325487,k);a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+640>>2]|0;g=e;h=c[g+4>>2]|0;e=j;c[e>>2]=c[g>>2];c[e+4>>2]=h;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];k=ha[i&127](a,b,d,k)|0;aa=l;return k|0}function qx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325470,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+644>>2]&127](g)|0;aa=h;return g|0}function rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325446,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+648>>2]&511](h,b)|0;aa=i;return h|0}function sx(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,325408,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+652>>2]&127](i,b,d)|0;aa=j;return i|0}function tx(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;l=aa;aa=aa+16|0;k=l;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);g=c[g>>2]|0;if((b|0)<13)h=c[96+(b<<2)>>2]|0;else h=325334;c[k>>2]=h;c[k+4>>2]=d;c[k+8>>2]=e;c[k+12>>2]=f;Pn(g,325353,k);k=c[a+12>>2]|0;k=ia[c[(c[k>>2]|0)+656>>2]&31](k,b,d,e,f)|0;aa=l;return k|0}function ux(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325317,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+660>>2]&127](g)|0;aa=h;return g|0}function vx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325292,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+664>>2]&511](h,b)|0;aa=i;return h|0}function wx(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;l=aa;aa=aa+16|0;k=l;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;c[k>>2]=b;c[k+4>>2]=d;c[k+8>>2]=e;c[k+12>>2]=f;Pn(j,325216,k);k=c[a+12>>2]|0;k=ia[c[(c[k>>2]|0)+668>>2]&31](k,b,d,e,f)|0;aa=l;return k|0}function xx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325191,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+672>>2]&511](h,b)|0;aa=i;return h|0}function yx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;e=c[b>>2]|0;c[i>>2]=c[b+4>>2];c[i+4>>2]=e;Pn(g,325163,i);a=c[a+12>>2]|0;g=c[(c[a>>2]|0)+676>>2]|0;e=b;f=c[e+4>>2]|0;b=h;c[b>>2]=c[e>>2];c[b+4>>2]=f;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];i=fa[g&511](a,i)|0;aa=j;return i|0}function zx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325145,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+680>>2]&127](g)|0;aa=h;return g|0}function Ax(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325119,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+684>>2]&511](h,b)|0;aa=i;return h|0}function Bx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325100,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+688>>2]&511](h,b)|0;aa=i;return h|0}function Cx(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);f=c[f>>2]|0;switch(d|0){case 0:{g=330950;break}case 2:{g=330254;break}case 1:{g=330223;break}case 3:{g=325060;break}case 4:{g=330237;break}default:g=325040}c[j>>2]=g;c[j+4>>2]=e;Pn(f,325068,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+692>>2]&127](j,b,d,e)|0;aa=k;return j|0}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+32|0;n=o+8|0;m=o;k=a+16|0;j=c[k>>2]|0;if(j>>>0<=142){i=a+8|0;if(j)l=6}else{i=a+8|0;do{Qn(c[i>>2]|0,17104,142,0,0);j=j+-142|0}while(j>>>0>142);j=c[k>>2]|0;l=6}if((l|0)==6)Qn(c[i>>2]|0,17104,j,0,0);l=c[i>>2]|0;j=c[e>>2]|0;c[n>>2]=c[e+4>>2];c[n+4>>2]=j;c[n+8>>2]=d;Pn(l,325002,n);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+696>>2]|0;j=e;k=c[j+4>>2]|0;e=m;c[e>>2]=c[j>>2];c[e+4>>2]=k;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];n=ka[l&31](a,b,d,n,f,g,h)|0;aa=o;return n|0}
+function Ex(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;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;h=c[e>>2]|0;c[l>>2]=c[e+4>>2];c[l+4>>2]=h;c[l+8>>2]=d;c[l+12>>2]=f;Pn(j,324950,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+700>>2]|0;h=e;i=c[h+4>>2]|0;e=k;c[e>>2]=c[h>>2];c[e+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,d,l,f)|0;aa=m;return l|0}function Fx(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;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;h=c[e>>2]|0;c[l>>2]=c[e+4>>2];c[l+4>>2]=h;c[l+8>>2]=d;c[l+12>>2]=f;Pn(j,324900,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+704>>2]|0;h=e;i=c[h+4>>2]|0;e=k;c[e>>2]=c[h>>2];c[e+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,d,l,f)|0;aa=m;return l|0}function Gx(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=d;c[j+4>>2]=e;Pn(i,324860,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+708>>2]&127](j,b,d,e)|0;aa=k;return j|0}function Hx(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;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;h=c[e>>2]|0;c[l>>2]=c[e+4>>2];c[l+4>>2]=h;c[l+8>>2]=d;c[l+12>>2]=f;Pn(j,324811,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+712>>2]|0;h=e;i=c[h+4>>2]|0;e=k;c[e>>2]=c[h>>2];c[e+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,d,l,f)|0;aa=m;return l|0}function Ix(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,324787,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+716>>2]&511](h,b)|0;aa=i;return h|0}function Jx(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;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;i=c[d+4>>2]|0;h=c[d>>2]|0;c[l>>2]=b;c[l+4>>2]=i;c[l+8>>2]=h;c[l+12>>2]=e;c[l+16>>2]=f;Pn(j,324729,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+720>>2]|0;h=d;i=c[h+4>>2]|0;d=k;c[d>>2]=c[h>>2];c[d+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,l,e,f)|0;aa=m;return l|0}function Kx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,324704,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+724>>2]&511](h,b)|0;aa=i;return h|0}function Lx(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=d;c[i+4>>2]=b;Pn(h,324671,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+728>>2]&127](i,b,d)|0;aa=j;return i|0}function Mx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,324652,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+732>>2]&511](h,b)|0;aa=i;return h|0}function Nx(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,l=0;l=aa;aa=aa+32|0;k=l+8|0;j=l;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;g=c[b>>2]|0;c[k>>2]=c[b+4>>2];c[k+4>>2]=g;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,324609,k);a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+736>>2]|0;g=b;h=c[g+4>>2]|0;b=j;c[b>>2]=c[g>>2];c[b+4>>2]=h;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];k=ha[i&127](a,k,d,e)|0;aa=l;return k|0}function Ox(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,324573,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+740>>2]&127](i,b,d)|0;aa=j;return i|0}function Px(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,324554,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+744>>2]&127](g)|0;aa=h;return g|0}function Qx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,324530,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+748>>2]&511](h,b)|0;aa=i;return h|0}function Rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,324512,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+752>>2]&511](h,b)|0;aa=i;return h|0}function Sx(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,324473,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+756>>2]&127](i,b,d)|0;aa=j;return i|0}function Tx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,324456,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+760>>2]&127](g)|0;aa=h;return g|0}function Ux(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,i=0,j=0,k=0,l=0.0,m=0,n=0;n=aa;aa=aa+32|0;m=n;l=(c[h>>2]=d,+f[h>>2]);j=a+16|0;i=c[j>>2]|0;if(i>>>0<=142){e=a+8|0;if(i)k=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);i=i+-142|0}while(i>>>0>142);i=c[j>>2]|0;k=6}if((k|0)==6)Qn(c[e>>2]|0,17104,i,0,0);k=c[e>>2]|0;c[m>>2]=b;g[m+8>>3]=l;c[m+16>>2]=d;Pn(k,324401,m);m=c[a+12>>2]|0;m=ga[c[(c[m>>2]|0)+764>>2]&127](m,b,d)|0;aa=n;return m|0}function Vx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,l=0.0,m=0,n=0;n=aa;aa=aa+32|0;m=n;c[h>>2]=d;c[h+4>>2]=e;l=+g[h>>3];j=a+16|0;i=c[j>>2]|0;if(i>>>0<=142){f=a+8|0;if(i)k=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);i=i+-142|0}while(i>>>0>142);i=c[j>>2]|0;k=6}if((k|0)==6)Qn(c[f>>2]|0,17104,i,0,0);k=c[f>>2]|0;c[m>>2]=b;g[m+8>>3]=l;j=m+16|0;c[j>>2]=d;c[j+4>>2]=e;Pn(k,324345,m);m=c[a+12>>2]|0;m=ha[c[(c[m>>2]|0)+768>>2]&127](m,b,d,e)|0;aa=n;return m|0}function Wx(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;j=aa;aa=aa+32|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;k=c[d>>2]|0;e=c[d+4>>2]|0;f=c[d+8>>2]|0;g=c[d+12>>2]|0;c[i>>2]=b;c[i+4>>2]=k;c[i+8>>2]=e;c[i+12>>2]=f;c[i+16>>2]=g;Pn(h,324271,i);a=c[a+12>>2]|0;h=c[(c[a>>2]|0)+772>>2]|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];i=ga[h&127](a,b,i)|0;aa=j;return i|0}function Xx(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,324217,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+776>>2]&127](i,b,d)|0;aa=j;return i|0}function Yx(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;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,324171,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+780>>2]&127](i,b,d)|0;aa=j;return i|0}function Zx(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;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;h=j+8|0;c[h>>2]=d;c[h+4>>2]=e;Pn(i,324123,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+784>>2]&127](j,b,d,e)|0;aa=k;return j|0}function _x(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f+8|0;d=f;if((b|0)>-1){c[d>>2]=b;Pn(a,326858,d);aa=f;return}do switch(b|0){case -1:{b=330980;break}case -2:{b=330976;break}case -3:{b=330972;break}case -4:{b=330968;break}case -5:{b=330963;break}case -16:{b=330955;break}case -32:{b=330950;break}case -24:{b=330939;break}case -64:{b=330934;break}case -17:{b=330923;break}default:b=330910}while(0);c[e>>2]=b;Pn(a,330905,e);aa=f;return}function $x(a,b,d){a=a|0;b=b|0;d=d|0;c[a+4>>2]=0;c[a>>2]=290948;c[a+8>>2]=b;c[a+12>>2]=d;c[a+16>>2]=0;return}function ay(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;e=h+24|0;g=h;if(!(c[a+12>>2]|0)){aa=h;return}c[e>>2]=0;f=e+4|0;c[f>>2]=0;c[e+8>>2]=0;by(a,e);d=c[e>>2]|0;cy(d,c[f>>2]|0);a=c[b+16>>2]|0;do if(a)if((b|0)==(a|0)){b=g+16|0;c[b>>2]=g;na[c[(c[a>>2]|0)+12>>2]&31](a,g);a=b;break}else{b=ea[c[(c[a>>2]|0)+8>>2]&127](a)|0;a=g+16|0;c[a>>2]=b;break}else{a=g+16|0;c[a>>2]=0}while(0);dy(e,g);a=c[a>>2]|0;if((g|0)!=(a|0)){if(a|0)ma[c[(c[a>>2]|0)+20>>2]&255](a)}else ma[c[(c[a>>2]|0)+16>>2]&255](a);if(d|0){c[f>>2]=d;$A(d)}aa=h;return}function by(b,d){b=b|0;d=d|0;var 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;s=aa;aa=aa+16|0;r=s;b=c[b+8>>2]|0;e=c[b>>2]|0;if(!e){aa=s;return}p=d+4|0;q=d+8|0;m=1;o=e;while(1){i=b;l=i+8|0;h=o;n=h+8|0;f=a[l+11>>0]|0;k=f<<24>>24<0;f=f&255;i=k?c[i+12>>2]|0:f;j=a[n+11>>0]|0;e=j<<24>>24<0;a:do if((i|0)==((e?c[h+12>>2]|0:j&255)|0)){g=c[l>>2]|0;j=k?g:l;e=e?c[n>>2]|0:n;h=(i|0)==0;g=g&255;b:do if(k){if(!h?Tz(j,e,i)|0:0){b=o;e=1;break a}}else if(!h){if((a[e>>0]|0)!=g<<24>>24){b=o;e=1;break a}g=l;while(1){f=f+-1|0;g=g+1|0;if(!f)break b;e=e+1|0;if((a[g>>0]|0)!=(a[e>>0]|0)){b=o;e=1;break a}}}while(0);if(m){c[r>>2]=l;e=c[p>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[e>>2]=l;c[p>>2]=(c[p>>2]|0)+4}else hy(d,r)}c[r>>2]=n;e=c[p>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[e>>2]=n;c[p>>2]=(c[p>>2]|0)+4}else hy(d,r);e=0}else{b=o;e=1}while(0);o=c[o>>2]|0;if(!o)break;else m=e}aa=s;return}function cy(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,s=0;a:while(1){r=b;d=b+-4|0;q=b+-8|0;b:while(1){p=a;f=r-p|0;e=f>>2;switch(e|0){case 2:{q=4;break a}case 3:{q=8;break a}case 4:{q=26;break a}case 5:{q=27;break a}case 1:case 0:{q=144;break a}default:{}}if((f|0)<124){q=29;break a}m=a+(((e|0)/2|0)<<2)|0;do if((f|0)>3996){e=(e|0)/4|0;e=fy(a,a+(e<<2)|0,m,m+(e<<2)|0,d)|0}else{h=c[m>>2]|0;n=c[a>>2]|0;i=c[h+20>>2]|0;l=n+20|0;e=c[l>>2]|0;k=h;o=n;if((i|0)>=(e|0))if((i|0)==(e|0))g=(c[h+24>>2]|0)<(c[n+24>>2]|0);else g=0;else g=1;e=c[d>>2]|0;f=c[e+20>>2]|0;j=e;if((f|0)>=(i|0))if((f|0)==(i|0))e=(c[e+24>>2]|0)<(c[h+24>>2]|0);else e=0;else e=1;if(!g){if(!e){e=0;break}c[m>>2]=j;c[d>>2]=k;e=c[m>>2]|0;f=c[a>>2]|0;g=c[e+20>>2]|0;h=c[f+20>>2]|0;i=f;j=e;if((g|0)>=(h|0)){if((g|0)!=(h|0)){e=1;break}if((c[e+24>>2]|0)>=(c[f+24>>2]|0)){e=1;break}}c[a>>2]=j;c[m>>2]=i;e=2;break}if(e){c[a>>2]=j;c[d>>2]=o;e=1;break}c[a>>2]=k;c[m>>2]=o;g=c[d>>2]|0;h=c[g+20>>2]|0;e=c[l>>2]|0;f=g;if((h|0)>=(e|0)){if((h|0)!=(e|0)){e=1;break}if((c[g+24>>2]|0)>=(c[n+24>>2]|0)){e=1;break}}c[m>>2]=f;c[d>>2]=o;e=2}while(0);l=c[a>>2]|0;f=c[m>>2]|0;n=c[l+20>>2]|0;j=c[f+20>>2]|0;k=l;do if((n|0)<(j|0))g=d;else{if((n|0)==(j|0)?(c[l+24>>2]|0)<(c[f+24>>2]|0):0){g=d;break}if((a|0)==(q|0)){i=q;q=87;break b}i=f+24|0;g=q;while(1){f=c[g>>2]|0;h=c[f+20>>2]|0;if((h|0)<(j|0))break;if((h|0)==(j|0)?(c[f+24>>2]|0)<(c[i>>2]|0):0)break;g=g+-4|0;if((a|0)==(g|0)){i=a;q=87;break b}}c[a>>2]=f;c[g>>2]=k;e=e+1|0}while(0);f=a+4|0;c:do if(f>>>0<g>>>0)while(1){k=c[m>>2]|0;j=c[k+20>>2]|0;k=k+24|0;l=f;while(1){f=c[l>>2]|0;h=c[f+20>>2]|0;if((h|0)>=(j|0)){if((h|0)!=(j|0))break;if((c[f+24>>2]|0)>=(c[k>>2]|0))break}l=l+4|0}h=g+-4|0;i=c[h>>2]|0;g=c[i+20>>2]|0;d:do if((g|0)>=(j|0))do{if((g|0)==(j|0)?(c[i+24>>2]|0)<(c[k>>2]|0):0)break d;h=h+-4|0;i=c[h>>2]|0;g=c[i+20>>2]|0}while((g|0)>=(j|0));while(0);if(l>>>0>h>>>0){f=l;break c}c[l>>2]=c[h>>2];c[h>>2]=f;f=l+4|0;g=h;m=(m|0)==(l|0)?h:m;e=e+1|0}while(0);do if((f|0)!=(m|0)){g=c[m>>2]|0;h=c[f>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0))break;if((c[g+24>>2]|0)>=(c[h+24>>2]|0))break}c[f>>2]=l;c[m>>2]=k;e=e+1|0}while(0);if(!e){g=gy(a,f)|0;e=f+4|0;if(gy(e,b)|0){q=137;break}if(g){a=e;d=2;q=142;break}}o=f;if((o-p|0)>=(r-o|0)){q=141;break}cy(a,f);a=f+4|0}e:do if((q|0)==87){a=i+4|0;e=c[d>>2]|0;f=c[e+20>>2]|0;h=e;do if((n|0)>=(f|0)){if((n|0)==(f|0)?(c[l+24>>2]|0)<(c[e+24>>2]|0):0)break;if((a|0)==(d|0)){q=144;break a}g=l+24|0;while(1){e=c[a>>2]|0;f=c[e+20>>2]|0;if((n|0)<(f|0))break;if((n|0)==(f|0)?(c[g>>2]|0)<(c[e+24>>2]|0):0)break;a=a+4|0;if((a|0)==(d|0)){q=144;break a}}c[a>>2]=h;c[d>>2]=e;a=a+4|0}while(0);if((a|0)==(d|0)){q=144;break a}while(1){g=c[i>>2]|0;f=c[a>>2]|0;h=c[g+20>>2]|0;e=c[f+20>>2]|0;g=g+24|0;f:do if((h|0)>=(e|0))do{if((h|0)==(e|0)?(c[g>>2]|0)<(c[f+24>>2]|0):0)break f;a=a+4|0;f=c[a>>2]|0;e=c[f+20>>2]|0}while((h|0)>=(e|0));while(0);while(1){d=d+-4|0;e=c[d>>2]|0;f=c[e+20>>2]|0;if((h|0)>=(f|0)){if((h|0)!=(f|0))break;if((c[g>>2]|0)>=(c[e+24>>2]|0))break}}if(a>>>0>=d>>>0){d=4;q=142;break e}r=c[a>>2]|0;c[a>>2]=e;c[d>>2]=r;a=a+4|0}}else if((q|0)==137){b=g?b:f;d=g?1:2;q=142}else if((q|0)==141){q=0;cy(f+4|0,b);b=f}while(0);if((q|0)==142)switch(d&7){case 2:case 4:case 0:break;default:{q=144;break a}}}if((q|0)==4){b=c[d>>2]|0;e=c[a>>2]|0;f=c[b+20>>2]|0;g=c[e+20>>2]|0;h=e;i=b;if((f|0)>=(g|0)){if((f|0)!=(g|0))return;if((c[b+24>>2]|0)>=(c[e+24>>2]|0))return}c[a>>2]=i;c[d>>2]=h;return}else if((q|0)==8){n=a+4|0;i=c[n>>2]|0;m=c[a>>2]|0;f=c[i+20>>2]|0;k=m+20|0;b=c[k>>2]|0;j=i;l=m;if((f|0)>=(b|0))if((f|0)==(b|0))g=(c[i+24>>2]|0)<(c[m+24>>2]|0);else g=0;else g=1;b=c[d>>2]|0;e=c[b+20>>2]|0;h=b;if((e|0)>=(f|0))if((e|0)==(f|0))b=(c[b+24>>2]|0)<(c[i+24>>2]|0);else b=0;else b=1;if(!g){if(!b)return;c[n>>2]=h;c[d>>2]=j;b=c[n>>2]|0;d=c[a>>2]|0;e=c[b+20>>2]|0;f=c[d+20>>2]|0;g=d;h=b;if((e|0)>=(f|0)){if((e|0)!=(f|0))return;if((c[b+24>>2]|0)>=(c[d+24>>2]|0))return}c[a>>2]=h;c[n>>2]=g;return}if(b){c[a>>2]=h;c[d>>2]=l;return}c[a>>2]=j;c[n>>2]=l;e=c[d>>2]|0;f=c[e+20>>2]|0;a=c[k>>2]|0;b=e;if((f|0)>=(a|0)){if((f|0)!=(a|0))return;if((c[e+24>>2]|0)>=(c[m+24>>2]|0))return}c[n>>2]=b;c[d>>2]=l;return}else if((q|0)==26){ey(a,a+4|0,a+8|0,d)|0;return}else if((q|0)==27){fy(a,a+4|0,a+8|0,a+12|0,d)|0;return}else if((q|0)==29){i=a+8|0;o=a+4|0;d=c[o>>2]|0;p=c[a>>2]|0;h=c[d+20>>2]|0;k=p+20|0;e=c[k>>2]|0;f=d;m=p;if((h|0)>=(e|0))if((h|0)==(e|0))g=(c[d+24>>2]|0)<(c[p+24>>2]|0);else g=0;else g=1;n=c[i>>2]|0;j=n+20|0;e=c[j>>2]|0;l=n;if((e|0)>=(h|0))if((e|0)==(h|0))e=(c[n+24>>2]|0)<(c[d+24>>2]|0);else e=0;else e=1;do if(!g)if(e){c[o>>2]=l;c[i>>2]=f;g=c[j>>2]|0;e=c[k>>2]|0;if((g|0)>=(e|0)){if((g|0)!=(e|0))break;if((c[n+24>>2]|0)>=(c[p+24>>2]|0))break}c[a>>2]=l;c[o>>2]=m}else{f=l;d=n}else{if(e){c[a>>2]=l;c[i>>2]=m;f=m;d=p;break}c[a>>2]=f;c[o>>2]=m;e=c[j>>2]|0;d=c[k>>2]|0;if((e|0)>=(d|0)){if((e|0)!=(d|0)){f=l;d=n;break}if((c[n+24>>2]|0)>=(c[p+24>>2]|0)){f=l;d=n;break}}c[o>>2]=l;c[i>>2]=m;f=m;d=p}while(0);e=a+12|0;if((e|0)==(b|0))return;m=e;while(1){e=c[m>>2]|0;k=e+20|0;g=c[k>>2]|0;h=c[d+20>>2]|0;l=e;if((g|0)>=(h|0)){if((g|0)==(h|0)?(s=e+24|0,(c[s>>2]|0)<(c[d+24>>2]|0)):0){j=s;q=53}}else{j=e+24|0;q=53}if((q|0)==53){q=0;c[m>>2]=f;g:do if((i|0)==(a|0))d=a;else{e=i;while(1){d=e;e=e+-4|0;f=c[e>>2]|0;g=c[k>>2]|0;h=c[f+20>>2]|0;i=f;if((g|0)>=(h|0)){if((g|0)!=(h|0))break g;if((c[j>>2]|0)>=(c[f+24>>2]|0))break g}c[d>>2]=i;if((e|0)==(a|0)){d=a;break}}}while(0);c[d>>2]=l}e=m+4|0;if((e|0)==(b|0))break;f=c[m>>2]|0;i=m;d=f;m=e}return}else if((q|0)==144)return}function dy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=c[b>>2]|0;p=b+4|0;o=c[p>>2]|0;if((f|0)==(o|0))return;n=d+16|0;d=f;e=o;while(1){a:do if((d|0)!=(e|0)){l=c[f>>2]|0;m=a[l+11>>0]|0;k=m<<24>>24<0;m=k?c[l+4>>2]|0:m&255;g=(m|0)==0;if(k){if(g)while(1){l=c[d>>2]|0;m=a[l+11>>0]|0;if(!((m<<24>>24<0?c[l+4>>2]|0:m&255)|0)){e=d;break a}d=d+4|0;if((d|0)==(e|0))break a}do{h=c[d>>2]|0;j=a[h+11>>0]|0;k=j<<24>>24<0;j=j&255;do if(((k?c[h+4>>2]|0:j)|0)==(m|0)){i=c[h>>2]|0;g=c[l>>2]|0;if(k)if(!(Tz(i,g,m)|0)){e=d;break a}else break;if((a[g>>0]|0)==(i&255)<<24>>24){i=j;do{i=i+-1|0;h=h+1|0;if(!i){e=d;break a}g=g+1|0}while((a[h>>0]|0)==(a[g>>0]|0))}}while(0);d=d+4|0}while((d|0)!=(e|0))}else{if(g)while(1){l=c[d>>2]|0;m=a[l+11>>0]|0;if(!((m<<24>>24<0?c[l+4>>2]|0:m&255)|0)){e=d;break a}d=d+4|0;if((d|0)==(e|0))break a}do{g=c[d>>2]|0;i=a[g+11>>0]|0;j=i<<24>>24<0;i=i&255;do if(((j?c[g+4>>2]|0:i)|0)==(m|0)){h=c[g>>2]|0;if(j)if(!(Tz(h,l,m)|0)){e=d;break a}else break;if((a[l>>0]|0)==(h&255)<<24>>24){h=l;do{i=i+-1|0;g=g+1|0;if(!i){e=d;break a}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);d=d+4|0}while((d|0)!=(e|0))}}while(0);if((e|0)!=(f|0)){d=c[n>>2]|0;if(!d){d=34;break}oa[c[(c[d>>2]|0)+24>>2]&15](d,c[e>>2]|0,c[f>>2]|0)}f=f+4|0;if((f|0)==(o|0)){d=3;break}d=c[b>>2]|0;e=c[p>>2]|0}if((d|0)==3)return;else if((d|0)==34)U()}function ey(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,l=0,m=0,n=0,o=0,p=0,q=0;n=c[b>>2]|0;m=c[a>>2]|0;f=n+20|0;h=c[f>>2]|0;q=m+20|0;g=c[q>>2]|0;p=n;o=m;if((h|0)>=(g|0))if((h|0)==(g|0))i=(c[n+24>>2]|0)<(c[m+24>>2]|0);else i=0;else i=1;k=c[d>>2]|0;l=k+20|0;g=c[l>>2]|0;j=k;if((g|0)>=(h|0))if((g|0)==(h|0))g=(c[k+24>>2]|0)<(c[n+24>>2]|0);else g=0;else g=1;do if(!i)if(g){c[b>>2]=j;c[d>>2]=p;g=c[b>>2]|0;h=c[a>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0)){k=n;j=p;m=1;break}if((c[g+24>>2]|0)>=(c[h+24>>2]|0)){k=n;j=p;m=1;break}}c[a>>2]=l;c[b>>2]=k;f=c[d>>2]|0;k=f;j=f;f=f+20|0;m=2}else{f=l;m=0}else{if(g){c[a>>2]=j;c[d>>2]=o;k=m;j=o;f=q;m=1;break}c[a>>2]=p;c[b>>2]=o;g=c[d>>2]|0;f=g+20|0;h=c[f>>2]|0;i=c[q>>2]|0;j=g;if((h|0)>=(i|0)){if((h|0)!=(i|0)){k=g;m=1;break}if((c[g+24>>2]|0)>=(c[m+24>>2]|0)){k=g;m=1;break}}c[b>>2]=j;c[d>>2]=o;k=m;j=o;f=q;m=2}while(0);h=c[e>>2]|0;i=c[h+20>>2]|0;f=c[f>>2]|0;g=h;if((i|0)>=(f|0)){if((i|0)!=(f|0)){b=m;return b|0}if((c[h+24>>2]|0)>=(c[k+24>>2]|0)){b=m;return b|0}}c[d>>2]=g;c[e>>2]=j;l=m+1|0;f=c[d>>2]|0;g=c[b>>2]|0;h=c[f+20>>2]|0;i=c[g+20>>2]|0;j=g;k=f;if((h|0)>=(i|0)){if((h|0)!=(i|0)){b=l;return b|0}if((c[f+24>>2]|0)>=(c[g+24>>2]|0)){b=l;return b|0}}c[b>>2]=k;c[d>>2]=j;l=m+2|0;f=c[b>>2]|0;g=c[a>>2]|0;h=c[f+20>>2]|0;i=c[g+20>>2]|0;j=g;k=f;if((h|0)>=(i|0)){if((h|0)!=(i|0)){b=l;return b|0}if((c[f+24>>2]|0)>=(c[g+24>>2]|0)){b=l;return b|0}}c[a>>2]=k;c[b>>2]=j;b=m+3|0;return b|0}function fy(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;m=ey(a,b,d,e)|0;g=c[f>>2]|0;h=c[e>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0))return m|0;if((c[g+24>>2]|0)>=(c[h+24>>2]|0))return m|0}c[e>>2]=l;c[f>>2]=k;f=m+1|0;k=c[e>>2]|0;l=c[d>>2]|0;g=c[k+20>>2]|0;h=c[l+20>>2]|0;i=l;j=k;if((g|0)>=(h|0)){if((g|0)!=(h|0)){m=f;return m|0}if((c[k+24>>2]|0)>=(c[l+24>>2]|0)){m=f;return m|0}}c[d>>2]=j;c[e>>2]=i;f=m+2|0;g=c[d>>2]|0;h=c[b>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0)){m=f;return m|0}if((c[g+24>>2]|0)>=(c[h+24>>2]|0)){m=f;return m|0}}c[b>>2]=l;c[d>>2]=k;f=m+3|0;g=c[b>>2]|0;h=c[a>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0)){m=f;return m|0}if((c[g+24>>2]|0)>=(c[h+24>>2]|0)){m=f;return m|0}}c[a>>2]=l;c[b>>2]=k;m=m+4|0;return m|0}function gy(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;switch(b-a>>2|0){case 2:{j=b+-4|0;d=c[j>>2]|0;e=c[a>>2]|0;f=c[d+20>>2]|0;g=c[e+20>>2]|0;h=e;i=d;if((f|0)>=(g|0)){if((f|0)!=(g|0)){a=1;return a|0}if((c[d+24>>2]|0)>=(c[e+24>>2]|0)){a=1;return a|0}}c[a>>2]=i;c[j>>2]=h;a=1;return a|0}case 3:{o=a+4|0;n=b+-4|0;i=c[o>>2]|0;m=c[a>>2]|0;f=c[i+20>>2]|0;k=m+20|0;d=c[k>>2]|0;j=i;l=m;if((f|0)>=(d|0))if((f|0)==(d|0))h=(c[i+24>>2]|0)<(c[m+24>>2]|0);else h=0;else h=1;d=c[n>>2]|0;e=c[d+20>>2]|0;g=d;if((e|0)>=(f|0))if((e|0)==(f|0))d=(c[d+24>>2]|0)<(c[i+24>>2]|0);else d=0;else d=1;if(!h){if(!d){a=1;return a|0}c[o>>2]=g;c[n>>2]=j;d=c[o>>2]|0;e=c[a>>2]|0;f=c[d+20>>2]|0;g=c[e+20>>2]|0;h=e;i=d;if((f|0)>=(g|0)){if((f|0)!=(g|0)){a=1;return a|0}if((c[d+24>>2]|0)>=(c[e+24>>2]|0)){a=1;return a|0}}c[a>>2]=i;c[o>>2]=h;a=1;return a|0}if(d){c[a>>2]=g;c[n>>2]=l;a=1;return a|0}c[a>>2]=j;c[o>>2]=l;f=c[n>>2]|0;g=c[f+20>>2]|0;d=c[k>>2]|0;e=f;if((g|0)>=(d|0)){if((g|0)!=(d|0)){a=1;return a|0}if((c[f+24>>2]|0)>=(c[m+24>>2]|0)){a=1;return a|0}}c[o>>2]=e;c[n>>2]=l;a=1;return a|0}case 4:{ey(a,a+4|0,a+8|0,b+-4|0)|0;a=1;return a|0}case 5:{fy(a,a+4|0,a+8|0,a+12|0,b+-4|0)|0;a=1;return a|0}case 1:case 0:{a=1;return a|0}default:{e=a+8|0;o=a+4|0;d=c[o>>2]|0;p=c[a>>2]|0;h=c[d+20>>2]|0;k=p+20|0;f=c[k>>2]|0;g=d;m=p;if((h|0)>=(f|0))if((h|0)==(f|0))i=(c[d+24>>2]|0)<(c[p+24>>2]|0);else i=0;else i=1;n=c[e>>2]|0;j=n+20|0;f=c[j>>2]|0;l=n;if((f|0)>=(h|0))if((f|0)==(h|0))f=(c[n+24>>2]|0)<(c[d+24>>2]|0);else f=0;else f=1;do if(!i)if(f){c[o>>2]=l;c[e>>2]=g;h=c[j>>2]|0;f=c[k>>2]|0;if((h|0)>=(f|0)){if((h|0)!=(f|0))break;if((c[n+24>>2]|0)>=(c[p+24>>2]|0))break}c[a>>2]=l;c[o>>2]=m}else{g=l;d=n}else{if(f){c[a>>2]=l;c[e>>2]=m;g=m;d=p;break}c[a>>2]=g;c[o>>2]=m;f=c[j>>2]|0;d=c[k>>2]|0;if((f|0)>=(d|0)){if((f|0)!=(d|0)){g=l;d=n;break}if((c[n+24>>2]|0)>=(c[p+24>>2]|0)){g=l;d=n;break}}c[o>>2]=l;c[e>>2]=m;g=m;d=p}while(0);f=a+12|0;if((f|0)==(b|0)){a=1;return a|0}k=d;d=0;while(1){h=c[f>>2]|0;m=h+20|0;i=c[m>>2]|0;j=c[k+20>>2]|0;n=h;if((i|0)>=(j|0)){if((i|0)==(j|0)?(q=h+24|0,(c[q>>2]|0)<(c[k+24>>2]|0)):0){l=q;r=50}}else{l=h+24|0;r=50}if((r|0)==50){r=0;c[f>>2]=g;a:do if((e|0)!=(a|0)){g=e;while(1){e=g;g=g+-4|0;h=c[g>>2]|0;i=c[m>>2]|0;j=c[h+20>>2]|0;k=h;if((i|0)>=(j|0)){if((i|0)!=(j|0))break a;if((c[l>>2]|0)>=(c[h+24>>2]|0))break a}c[e>>2]=k;if((g|0)==(a|0)){e=a;break}}}while(0);c[e>>2]=n;d=d+1|0;if((d|0)==8)break}e=f+4|0;if((e|0)==(b|0)){d=1;r=60;break}g=c[f>>2]|0;p=f;k=g;f=e;e=p}if((r|0)==60)return d|0;a=(f+4|0)==(b|0);return a|0}}return 0}function hy(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function iy(a,b){a=a|0;b=b|0;do if((c[b+20>>2]|0)==1){a=Lg(a,b+24|0)|0;if(!a){b=-1;return b|0}else{a=a+40|0;break}}else a=b+24|0;while(0);b=c[a>>2]|0;return b|0}function jy(a){a=a|0;if((a|0)>=112){a=330060;return a|0}a=c[279392+(a<<2)>>2]|0;return a|0}function ky(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;return}function ly(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;c[a+24>>2]=e;return}function my(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;c[a+24>>2]=e;c[a+28>>2]=f;return}function ny(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;c[a+24>>2]=e;return}function oy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;d=a+24|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];return}function py(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;e=h;f=c[d+20>>2]|0;if(f>>>0<42){e=c[279392+(f<<2)>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Uz(e)|0;if(f>>>0>4294967279)aB();if(f>>>0<11){a[b+11>>0]=f;if(f)g=7}else{d=f+16&-16;g=_A(d)|0;c[b>>2]=g;c[b+8>>2]=d|-2147483648;c[b+4>>2]=f;b=g;g=7}if((g|0)==7)sC(b|0,e|0,f|0)|0;a[b+f>>0]=0;aa=h;return}if((f+-42|0)>>>0<3){Wn(b,c[d+28>>2]|0,c[d+32>>2]|0);aa=h;return}if((f+-45|0)>>>0<60){Am(e,c[d+24>>2]|0);e=c[e>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Uz(e)|0;if(f>>>0>4294967279)aB();if(f>>>0<11){a[b+11>>0]=f;if(f)g=17}else{d=f+16&-16;g=_A(d)|0;c[b>>2]=g;c[b+8>>2]=d|-2147483648;c[b+4>>2]=f;b=g;g=17}if((g|0)==17)sC(b|0,e|0,f|0)|0;a[b+f>>0]=0;aa=h;return}e=d+24|0;if((f+-105|0)>>>0<6){Wn(b,c[e>>2]|0,c[d+28>>2]|0);aa=h;return}do switch(c[e>>2]|0){case -1:{e=330980;break}case -2:{e=330976;break}case -3:{e=330972;break}case -4:{e=330968;break}case -5:{e=330963;break}case -16:{e=330955;break}case -32:{e=330950;break}case -24:{e=330939;break}case -64:{e=330934;break}case 0:{e=330930;break}case -17:{e=330923;break}default:e=330910}while(0);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Uz(e)|0;if(f>>>0>4294967279)aB();if(f>>>0<11){a[b+11>>0]=f;if(f)g=38}else{d=f+16&-16;g=_A(d)|0;c[b>>2]=g;c[b+8>>2]=d|-2147483648;c[b+4>>2]=f;b=g;g=38}if((g|0)==38)sC(b|0,e|0,f|0)|0;a[b+f>>0]=0;aa=h;return}function qy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+32|0;f=g+12|0;e=g;py(f,d);h=a[f+11>>0]|0;d=h<<24>>24<0;if((d?c[f+4>>2]|0:h&255)>>>0<=80){c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;aa=g;return}jB(e,f,0,77);vB(e,330828)|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;if(!d){aa=g;return}$A(c[f>>2]|0);aa=g;return}function ry(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,l=0,m=0;c[b>>2]=d;i=b+4|0;c[i>>2]=0;m=b+8|0;c[m>>2]=0;h=b+12|0;c[h>>2]=0;k=e+4|0;d=(c[k>>2]|0)-(c[e>>2]|0)|0;j=d>>2;if(d|0){if(j>>>0>1073741823)HB();l=_A(d)|0;c[m>>2]=l;c[i>>2]=l;c[h>>2]=l+(j<<2);h=c[e>>2]|0;d=(c[k>>2]|0)-h|0;if((d|0)>0){sC(l|0,h|0,d|0)|0;c[m>>2]=l+(d>>>2<<2)}}i=b+16|0;c[i>>2]=0;e=b+20|0;c[e>>2]=0;h=b+24|0;c[h>>2]=0;k=f+4|0;d=(c[k>>2]|0)-(c[f>>2]|0)|0;j=d>>2;if(!d){f=b+28|0;c[f>>2]=g;b=b+32|0;a[b>>0]=0;return}if(j>>>0>1073741823)HB();l=_A(d)|0;c[e>>2]=l;c[i>>2]=l;c[h>>2]=l+(j<<2);h=c[f>>2]|0;d=(c[k>>2]|0)-h|0;if((d|0)<=0){f=b+28|0;c[f>>2]=g;b=b+32|0;a[b>>0]=0;return}sC(l|0,h|0,d|0)|0;c[e>>2]=l+(d>>>2<<2);f=b+28|0;c[f>>2]=g;b=b+32|0;a[b>>0]=0;return}function sy(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;j=aa;aa=aa+176|0;i=j+160|0;f=j+144|0;h=j+128|0;e=j;g=a+16|0;if(!(c[g>>2]|0)){aa=j;return}c[f>>2]=d;c[h>>2]=c[f>>2];a=(Vz(e,128,b,f)|0)+1|0;if(a>>>0>128){e=aa;aa=aa+((1*a|0)+15&-16)|0;Vz(e,a,b,h)|0}c[i>>2]=e;e=c[g>>2]|0;if(!e)U();na[c[(c[e>>2]|0)+24>>2]&31](e,i);aa=j;return}function ty(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,l=0,m=0,n=0,o=0;m=b+4|0;h=c[b>>2]|0;j=((c[m>>2]|0)-h|0)/36|0;i=j+1|0;if(i>>>0>119304647)HB();n=b+8|0;l=((c[n>>2]|0)-h|0)/36|0;h=l<<1;h=l>>>0<59652323?(h>>>0<i>>>0?i:h):119304647;do if(h)if(h>>>0>119304647)U();else{k=_A(h*36|0)|0;break}else k=0;while(0);i=k+(j*36|0)|0;l=k+(h*36|0)|0;ry(i,c[d>>2]|0,e,f,c[g>>2]|0);d=i+36|0;j=c[b>>2]|0;h=c[m>>2]|0;if((h|0)==(j|0)){h=i;k=j;i=j}else{do{f=h;h=h+-36|0;c[i+-36>>2]=c[h>>2];g=i+-32|0;e=f+-32|0;c[g>>2]=0;k=i+-28|0;c[k>>2]=0;o=i+-24|0;c[o>>2]=0;c[g>>2]=c[e>>2];g=f+-28|0;c[k>>2]=c[g>>2];k=f+-24|0;c[o>>2]=c[k>>2];c[k>>2]=0;c[g>>2]=0;c[e>>2]=0;e=i+-20|0;g=f+-20|0;c[e>>2]=0;k=i+-16|0;c[k>>2]=0;o=i+-12|0;c[o>>2]=0;c[e>>2]=c[g>>2];e=f+-16|0;c[k>>2]=c[e>>2];k=f+-12|0;c[o>>2]=c[k>>2];c[k>>2]=0;c[e>>2]=0;c[g>>2]=0;g=i+-8|0;f=f+-8|0;c[g>>2]=c[f>>2];a[g+4>>0]=a[f+4>>0]|0;i=i+-36|0}while((h|0)!=(j|0));h=i;k=c[b>>2]|0;i=c[m>>2]|0}c[b>>2]=h;c[m>>2]=d;c[n>>2]=l;j=k;if((i|0)!=(j|0))do{h=c[i+-20>>2]|0;if(h|0){c[i+-16>>2]=h;$A(h)}h=c[i+-32>>2]|0;if(h|0){c[i+-28>>2]=h;$A(h)}i=i+-36|0}while((i|0)!=(j|0));if(!k)return;$A(k);return}function uy(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,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=aa;aa=aa+64|0;s=y+16|0;x=y+8|0;h=y;u=y+48|0;w=y+36|0;v=y+24|0;if(!d){aa=y;return}r=b+36|0;p=b+40|0;d=c[r>>2]|0;t=(c[p>>2]|0)-d|0;g=(t|0)/36|0;if(!t){c[h>>2]=0;c[h+4>>2]=g+-1;sy(b,330832,h);d=0}else d=c[d+((g+-1|0)*36|0)+28>>2]|0;c[u>>2]=0;t=u+4|0;c[t>>2]=0;n=u+8|0;c[n>>2]=0;o=b+24|0;m=b+28|0;q=((c[m>>2]|0)-(c[o>>2]|0)>>2)-d|0;l=(c[f+4>>2]|0)-(c[f>>2]|0)|0;k=l>>2;k=(l|0)==0?(q>>>0<4?q:4):q>>>0<k>>>0?q:k;q=(k|0)==(q|0);if(k|0){l=0;do{j=k-l|0;d=c[r>>2]|0;i=(c[p>>2]|0)-d|0;h=(i|0)/36|0;do if(i){g=c[o>>2]|0;i=(c[m>>2]|0)-g>>2;if((j+-1+(c[d+((h+-1|0)*36|0)+28>>2]|0)|0)>>>0<i>>>0){g=c[g+(i-j<<2)>>2]|0;c[w>>2]=g;break}else{c[w>>2]=0;g=0;break}}else{c[s>>2]=0;c[s+4>>2]=h+-1;sy(b,330832,s);g=0}while(0);d=c[t>>2]|0;if((d|0)==(c[n>>2]|0))fo(u,w);else{c[d>>2]=g;c[t>>2]=d+4}l=l+1|0}while((l|0)!=(k|0))}d=_A(32)|0;c[w>>2]=d;c[w+8>>2]=-2147483616;c[w+4>>2]=17;g=d;h=330860;i=g+17|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(i|0));a[d+17>>0]=0;vB(w,e)|0;vB(w,330878)|0;vy(v,f,0);f=v+11|0;e=a[f>>0]|0;s=e<<24>>24<0;uB(w,s?c[v>>2]|0:v,s?c[v+4>>2]|0:e&255)|0;if((a[f>>0]|0)<0)$A(c[v>>2]|0);vB(w,330890)|0;vy(v,u,q?0:330900);f=v+11|0;e=a[f>>0]|0;s=e<<24>>24<0;uB(w,s?c[v>>2]|0:v,s?c[v+4>>2]|0:e&255)|0;if((a[f>>0]|0)<0)$A(c[v>>2]|0);v=w+11|0;c[x>>2]=(a[v>>0]|0)<0?c[w>>2]|0:w;sy(b,330905,x);if((a[v>>0]|0)<0)$A(c[w>>2]|0);d=c[u>>2]|0;if(d|0){c[t>>2]=d;$A(d)}aa=y;return}function vy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a[b+11>>0]=1;a[b>>0]=91;a[b+1>>0]=0;if(e|0)vB(b,e)|0;h=d+4|0;e=c[d>>2]|0;if((c[h>>2]|0)==(e|0)){vB(b,330908)|0;return}g=0;do{do switch(c[e+(g<<2)>>2]|0){case -1:{e=330980;break}case -2:{e=330976;break}case -3:{e=330972;break}case -4:{e=330968;break}case -5:{e=330963;break}case -16:{e=330955;break}case -32:{e=330950;break}case -24:{e=330939;break}case -64:{e=330934;break}case 0:{e=330930;break}case -17:{e=330923;break}default:e=330910}while(0);vB(b,e)|0;e=c[d>>2]|0;f=(c[h>>2]|0)-e>>2;if(g>>>0<(f+-1|0)>>>0){vB(b,330984)|0;f=c[d>>2]|0;e=f;f=(c[h>>2]|0)-f>>2}g=g+1|0}while(g>>>0<f>>>0);vB(b,330908)|0;return}function wy(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,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=aa;aa=aa+16|0;u=v;p=d+4|0;f=c[p>>2]|0;g=c[d>>2]|0;h=f-g|0;if(!h){u=0;uy(b,u,e,d);aa=v;return u|0}s=b+36|0;q=b+40|0;t=b+24|0;r=b+28|0;m=f;o=0;f=0;h=h>>2;do{l=h-o|0;n=c[g+(o<<2)>>2]|0;h=c[s>>2]|0;k=(c[q>>2]|0)-h|0;i=(k|0)/36|0;do if(k){k=i+-1|0;i=c[t>>2]|0;j=(c[r>>2]|0)-i>>2;if((l+-1+(c[h+(k*36|0)+28>>2]|0)|0)>>>0<j>>>0){i=c[i+(j-l<<2)>>2]|0;h=0;break}else{i=0;h=(a[h+(k*36|0)+32>>0]|0)==0;break}}else{c[u>>2]=0;c[u+4>>2]=i+-1;sy(b,330832,u);m=c[p>>2]|0;g=c[d>>2]|0;i=0;h=1}while(0);f=((f|0)==1|(h|(i|0)!=0&((n|0)!=0&(i|0)!=(n|0))))&1;o=o+1|0;h=m-g>>2}while(h>>>0>o>>>0);uy(b,f,e,d);aa=v;return f|0}function xy(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,p=0;n=aa;aa=aa+32|0;m=n;k=n+20|0;l=n+8|0;h=c[d>>2]|0;f=(c[d+4>>2]|0)-h|0;j=f>>2;g=c[e>>2]|0;i=g;if((j|0)==((c[e+4>>2]|0)-g>>2|0)){if(!f){m=0;aa=n;return m|0}g=0;f=0;while(1){o=c[h+(g<<2)>>2]|0;p=c[i+(g<<2)>>2]|0;f=(f|0)==1|(o|0)!=0&((p|0)!=0&(p|0)!=(o|0));g=g+1|0;if(g>>>0>=j>>>0)break;else f=f&1}if(!f){p=0;aa=n;return p|0}}vy(k,e,0);f=k+11|0;j=(a[f>>0]|0)<0?c[k>>2]|0:k;vy(l,d,0);p=l+11|0;o=(a[p>>0]|0)<0?c[l>>2]|0:l;c[m>>2]=j;c[m+4>>2]=o;sy(b,330987,m);if((a[p>>0]|0)<0)$A(c[l>>2]|0);if((a[f>>0]|0)<0)$A(c[k>>2]|0);p=1;aa=n;return p|0}function yy(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;n=aa;aa=aa+16|0;f=n;m=wy(b,d,e)|0;l=(c[d+4>>2]|0)-(c[d>>2]|0)|0;k=l>>2;e=c[b+36>>2]|0;j=(c[b+40>>2]|0)-e|0;d=(j|0)/36|0;if(!j){c[f>>2]=0;c[f+4>>2]=d+-1;sy(b,330832,f);l=1;m=(m|0)==1;m=m|l;m=m&1;aa=n;return m|0}i=d+-1|0;h=c[e+(i*36|0)+28>>2]|0;j=b+24|0;b=b+28|0;d=c[b>>2]|0;f=c[j>>2]|0;g=d-f>>2;if((h+k|0)>>>0<=g>>>0){if(!l){l=0;m=(m|0)==1;m=m|l;m=m&1;aa=n;return m|0}c[b>>2]=d+(0-k<<2);l=0;m=(m|0)==1;m=m|l;m=m&1;aa=n;return m|0}if(h>>>0<=g>>>0){if(h>>>0<g>>>0)c[b>>2]=f+(h<<2)}else hu(j,h-g|0);l=(a[e+(i*36|0)+32>>0]|0)==0;m=(m|0)==1;m=m|l;m=m&1;aa=n;return m|0}function zy(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,n=0,o=0,p=0,q=0;q=aa;aa=aa+16|0;g=q;p=q+8|0;o=wy(b,d,f)|0;n=(c[d+4>>2]|0)-(c[d>>2]|0)|0;m=n>>2;f=c[b+36>>2]|0;l=(c[b+40>>2]|0)-f|0;d=(l|0)/36|0;do if(!l){c[g>>2]=0;c[g+4>>2]=d+-1;sy(b,330832,g);f=1}else{k=d+-1|0;d=c[f+(k*36|0)+28>>2]|0;l=b+24|0;i=b+28|0;g=c[i>>2]|0;h=c[l>>2]|0;j=g-h>>2;if((d+m|0)>>>0<=j>>>0){if(!n){f=0;break}c[i>>2]=g+(0-m<<2);f=0;break}if(d>>>0<=j>>>0){if(d>>>0<j>>>0)c[i>>2]=h+(d<<2)}else hu(l,d-j|0);f=(a[f+(k*36|0)+32>>0]|0)==0}while(0);l=((o|0)==1|f)&1;f=c[e>>2]|0;i=c[e+4>>2]|0;if((f|0)==(i|0)){aa=q;return l|0}j=b+28|0;k=b+32|0;h=b+24|0;do{d=c[f>>2]|0;c[p>>2]=d;do if((d|0)!=-64){g=c[j>>2]|0;if((g|0)==(c[k>>2]|0)){fo(h,p);break}else{c[g>>2]=d;c[j>>2]=g+4;break}}while(0);f=f+4|0}while((f|0)!=(i|0));aa=q;return l|0}function Ay(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,p=0;p=aa;aa=aa+32|0;o=p+8|0;g=p;j=p+16|0;k=b+36|0;n=b+40|0;f=c[k>>2]|0;l=(c[n>>2]|0)-f|0;h=(l|0)/36|0;if(l){i=h+-1|0;g=c[b+24>>2]|0;h=(c[b+28>>2]|0)-g>>2;if((c[f+(i*36|0)+28>>2]|0)>>>0<h>>>0){g=c[g+(h+-1<<2)>>2]|0;f=0}else{g=0;f=(a[f+(i*36|0)+32>>0]|0)==0}f=f|(g|0)!=0&((d|0)!=0&(g|0)!=(d|0));if(f)m=7;else l=f}else{c[g>>2]=0;c[g+4>>2]=h+-1;sy(b,330832,g);f=1;m=7}if((m|0)==7){l=_A(4)|0;c[j>>2]=l;m=l+4|0;c[j+8>>2]=m;c[l>>2]=d;c[j+4>>2]=m;uy(b,1,e,j);$A(l);l=f}f=c[k>>2]|0;n=(c[n>>2]|0)-f|0;g=(n|0)/36|0;if(!n){c[o>>2]=0;c[o+4>>2]=g+-1;sy(b,330832,o);b=1;b=l|b;b=b&1;aa=p;return b|0}j=g+-1|0;d=c[f+(j*36|0)+28>>2]|0;k=b+24|0;i=b+28|0;g=c[i>>2]|0;h=c[k>>2]|0;e=g-h>>2;if((d+1|0)>>>0<=e>>>0){c[i>>2]=g+-4;b=0;b=l|b;b=b&1;aa=p;return b|0}if(d>>>0<=e>>>0){if(d>>>0<e>>>0)c[i>>2]=h+(d<<2)}else hu(k,d-e|0);b=(a[f+(j*36|0)+32>>0]|0)==0;b=l|b;b=b&1;aa=p;return b|0}function By(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,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+48|0;r=s+16|0;m=s+8|0;g=s;p=s+24|0;o=b+36|0;q=b+40|0;i=c[q>>2]|0;j=c[o>>2]|0;n=i-j|0;h=(n|0)/36|0;do if(n){l=j;k=h+-1|0;g=c[b+24>>2]|0;h=(c[b+28>>2]|0)-g>>2;if((c[l+(k*36|0)+28>>2]|0)>>>0<h>>>0){h=c[g+(h+-1<<2)>>2]|0;g=0;break}else{h=0;g=(a[l+(k*36|0)+32>>0]|0)==0;break}}else{c[g>>2]=0;c[g+4>>2]=h+-1;sy(b,330832,g);i=c[q>>2]|0;j=c[o>>2]|0;h=0;g=1}while(0);k=g|(h|0)!=0&((e|0)!=0&(h|0)!=(e|0));n=i-j|0;g=(n|0)/36|0;do if(n){i=g+-1|0;g=c[b+24>>2]|0;h=(c[b+28>>2]|0)-g>>2;if(((c[j+(i*36|0)+28>>2]|0)+1|0)>>>0<h>>>0){h=c[g+(h+-2<<2)>>2]|0;g=0;break}else{h=0;g=(a[j+(i*36|0)+32>>0]|0)==0;break}}else{c[m>>2]=0;c[m+4>>2]=g+-1;sy(b,330832,m);h=0;g=1}while(0);n=k|(g|(h|0)!=0&((d|0)!=0&(h|0)!=(d|0)));if(n){m=_A(8)|0;c[p>>2]=m;l=m+8|0;c[p+8>>2]=l;c[m>>2]=d;c[m+4>>2]=e;c[p+4>>2]=l;uy(b,1,f,p);$A(m)}g=c[o>>2]|0;q=(c[q>>2]|0)-g|0;h=(q|0)/36|0;if(!q){c[r>>2]=0;c[r+4>>2]=h+-1;sy(b,330832,r);b=1;b=n|b;b=b&1;aa=s;return b|0}m=h+-1|0;l=c[g+(m*36|0)+28>>2]|0;f=b+24|0;j=b+28|0;h=c[j>>2]|0;i=c[f>>2]|0;k=h-i>>2;if((l+2|0)>>>0<=k>>>0){c[j>>2]=h+-8;b=0;b=n|b;b=b&1;aa=s;return b|0}if(l>>>0<=k>>>0){if(l>>>0<k>>>0)c[j>>2]=i+(l<<2)}else hu(f,l-k|0);b=(a[g+(m*36|0)+32>>0]|0)==0;b=n|b;b=b&1;aa=s;return b|0}function Cy(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,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+48|0;t=u+24|0;p=u+16|0;o=u+8|0;h=u;r=u+32|0;q=b+36|0;s=b+40|0;j=c[s>>2]|0;k=c[q>>2]|0;n=j-k|0;i=(n|0)/36|0;do if(n){m=k;l=i+-1|0;h=c[b+24>>2]|0;i=(c[b+28>>2]|0)-h>>2;if((c[m+(l*36|0)+28>>2]|0)>>>0<i>>>0){i=c[h+(i+-1<<2)>>2]|0;h=0;break}else{i=0;h=(a[m+(l*36|0)+32>>0]|0)==0;break}}else{c[h>>2]=0;c[h+4>>2]=i+-1;sy(b,330832,h);j=c[s>>2]|0;k=c[q>>2]|0;i=0;h=1}while(0);n=h|(i|0)!=0&((f|0)!=0&(i|0)!=(f|0));m=j-k|0;h=(m|0)/36|0;do if(m){m=k;l=h+-1|0;h=c[b+24>>2]|0;i=(c[b+28>>2]|0)-h>>2;if(((c[m+(l*36|0)+28>>2]|0)+1|0)>>>0<i>>>0){i=c[h+(i+-2<<2)>>2]|0;h=0;break}else{i=0;h=(a[m+(l*36|0)+32>>0]|0)==0;break}}else{c[o>>2]=0;c[o+4>>2]=h+-1;sy(b,330832,o);j=c[s>>2]|0;k=c[q>>2]|0;i=0;h=1}while(0);l=n|(h|(i|0)!=0&((e|0)!=0&(i|0)!=(e|0)));o=j-k|0;h=(o|0)/36|0;do if(o){j=h+-1|0;h=c[b+24>>2]|0;i=(c[b+28>>2]|0)-h>>2;if(((c[k+(j*36|0)+28>>2]|0)+2|0)>>>0<i>>>0){i=c[h+(i+-3<<2)>>2]|0;h=0;break}else{i=0;h=(a[k+(j*36|0)+32>>0]|0)==0;break}}else{c[p>>2]=0;c[p+4>>2]=h+-1;sy(b,330832,p);i=0;h=1}while(0);if(l|(h|(i|0)!=0&((d|0)!=0&(i|0)!=(d|0)))){p=_A(12)|0;c[r>>2]=p;o=p+12|0;c[r+8>>2]=o;c[p>>2]=d;c[p+4>>2]=e;c[p+8>>2]=f;c[r+4>>2]=o;uy(b,1,g,r);$A(p)}i=c[q>>2]|0;s=(c[s>>2]|0)-i|0;h=(s|0)/36|0;if(!s){c[t>>2]=0;c[t+4>>2]=h+-1;sy(b,330832,t);aa=u;return}l=c[i+((h+-1|0)*36|0)+28>>2]|0;m=b+24|0;j=b+28|0;h=c[j>>2]|0;i=c[m>>2]|0;k=h-i>>2;if((l+3|0)>>>0<=k>>>0){c[j>>2]=h+-12;aa=u;return}if(l>>>0>k>>>0){hu(m,l-k|0);aa=u;return}if(l>>>0>=k>>>0){aa=u;return}c[j>>2]=i+(l<<2);aa=u;return}function Dy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;g=h;Am(g,b);e=c[g+8>>2]|0;Am(g,b);f=c[g+12>>2]|0;Am(g,b);f=By(a,e,f,c[g>>2]|0)|0;Am(g,b);b=c[g+4>>2]|0;c[g>>2]=b;if((b|0)==-64){aa=h;return f|0}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,g);aa=h;return f|0}else{c[d>>2]=b;c[e>>2]=d+4;aa=h;return f|0}return 0}function Ey(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;Am(f,b);h=c[f+8>>2]|0;Am(f,b);d=c[f+12>>2]|0;Am(f,b);e=c[f+16>>2]|0;Am(f,b);Cy(a,h,d,e,c[f>>2]|0);Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function Fy(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=aa;aa=aa+32|0;l=o+16|0;n=o+12|0;m=o;h=a+24|0;f=c[h>>2]|0;g=a+28|0;c[g>>2]=f;k=a+36|0;i=c[k>>2]|0;j=a+40|0;d=c[j>>2]|0;if((d|0)==(i|0)){e=f;d=f}else{do{e=c[d+-20>>2]|0;if(e|0){c[d+-16>>2]=e;$A(e)}e=c[d+-32>>2]|0;if(e|0){c[d+-28>>2]=e;$A(e)}d=d+-36|0}while((d|0)!=(i|0));e=c[g>>2]|0;d=c[h>>2]|0}c[j>>2]=i;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[l>>2]=0;d=e-d>>2;c[n>>2]=d;if(i>>>0<(c[a+44>>2]|0)>>>0){ry(i,0,m,b,d);c[j>>2]=(c[j>>2]|0)+36;aa=o;return}else{ty(k,l,m,b,n);aa=o;return}}function Gy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,b);e=c[f+8>>2]|0;Am(f,b);Ay(a,e,c[f>>2]|0)|0;Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function Hy(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Iy(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Jy(a,b){a=a|0;b=b|0;Ey(a,b);return}function Ky(a,b){a=a|0;b=b|0;Ey(a,b);return}function Ly(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function My(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Ny(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,l=0;l=aa;aa=aa+16|0;j=l+4|0;g=l;yy(a,b,331050)|0;c[j>>2]=1;k=a+24|0;i=a+28|0;h=(c[i>>2]|0)-(c[k>>2]|0)>>2;c[g>>2]=h;f=a+40|0;e=c[f>>2]|0;if(e>>>0<(c[a+44>>2]|0)>>>0){ry(e,1,b,d,h);c[f>>2]=(c[f>>2]|0)+36}else ty(a+36|0,j,b,d,g);e=c[b>>2]|0;h=c[b+4>>2]|0;if((e|0)==(h|0)){aa=l;return}d=a+32|0;do{f=c[e>>2]|0;c[j>>2]=f;do if((f|0)!=-64){g=c[i>>2]|0;if((g|0)==(c[d>>2]|0)){fo(k,j);break}else{c[g>>2]=f;c[i>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(h|0));aa=l;return}function Oy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k+8|0;h=k;f=b+36|0;i=b+40|0;e=c[f>>2]|0;g=((c[i>>2]|0)-e|0)/36|0;if(g>>>0<=d>>>0){c[h>>2]=d;c[h+4>>2]=g+-1;sy(b,330832,h);aa=k;return}d=g+~d|0;wy(b,(c[e+(d*36|0)>>2]|0)==2?e+(d*36|0)+4|0:e+(d*36|0)+16|0,331056)|0;d=c[f>>2]|0;i=(c[i>>2]|0)-d|0;e=(i|0)/36|0;if(!i){c[j>>2]=0;c[j+4>>2]=e+-1;sy(b,330832,j);aa=k;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;d=b+28|0;e=c[h>>2]|0;f=(c[d>>2]|0)-e>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=k;return}if(g>>>0>=f>>>0){aa=k;return}c[d>>2]=e+(g<<2);aa=k;return}function Py(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;k=aa;aa=aa+16|0;f=k;j=k+8|0;Ay(a,-1,331059)|0;d=c[a+36>>2]|0;e=((c[a+40>>2]|0)-d|0)/36|0;if(e>>>0<=b>>>0){c[f>>2]=b;c[f+4>>2]=e+-1;sy(a,330832,f);aa=k;return}h=d;g=e+~b|0;i=h+(g*36|0)|0;d=h+(g*36|0)+4|0;g=h+(g*36|0)+16|0;yy(a,(c[i>>2]|0)==2?d:g,331059)|0;g=(c[i>>2]|0)==2?d:g;d=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(g|0)){aa=k;return}h=a+28|0;i=a+32|0;f=a+24|0;do{b=c[d>>2]|0;c[j>>2]=b;do if((b|0)!=-64){e=c[h>>2]|0;if((e|0)==(c[i>>2]|0)){fo(f,j);break}else{c[e>>2]=b;c[h>>2]=e+4;break}}while(0);d=d+4|0}while((d|0)!=(g|0));aa=k;return}function Qy(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,p=0,q=0;o=aa;aa=aa+48|0;m=o+8|0;h=o;n=o+28|0;l=o+16|0;Ay(b,-24,331065)|0;f=c[b+36>>2]|0;g=((c[b+40>>2]|0)-f|0)/36|0;if(g>>>0<=d>>>0){c[h>>2]=d;c[h+4>>2]=g+-1;sy(b,330832,h);aa=o;return}i=g+~d|0;i=(c[f+(i*36|0)>>2]|0)==2?f+(i*36|0)+4|0:f+(i*36|0)+16|0;g=c[e>>2]|0;f=(c[e+4>>2]|0)-g|0;j=f>>2;d=c[i>>2]|0;h=d;if((j|0)==((c[i+4>>2]|0)-d>>2|0)){if(f|0){d=0;f=0;while(1){p=c[g+(d<<2)>>2]|0;q=c[h+(d<<2)>>2]|0;f=(f|0)==1|(p|0)!=0&((q|0)!=0&(q|0)!=(p|0));d=d+1|0;if(d>>>0>=j>>>0)break;else f=f&1}if(f)k=8}}else k=8;if((k|0)==8){vy(n,i,0);f=n+11|0;k=(a[f>>0]|0)<0?c[n>>2]|0:n;vy(l,e,0);q=l+11|0;p=(a[q>>0]|0)<0?c[l>>2]|0:l;c[m>>2]=k;c[m+4>>2]=p;sy(b,331075,m);if((a[q>>0]|0)<0)$A(c[l>>2]|0);if((a[f>>0]|0)<0)$A(c[n>>2]|0)}c[n>>2]=-24;d=b+28|0;f=c[d>>2]|0;if((f|0)==(c[b+32>>2]|0))fo(b+24|0,n);else{c[f>>2]=-24;c[d>>2]=f+4}aa=o;return}function Ry(a){a=a|0;c[a+48>>2]=0;Ay(a,-1,331129)|0;return}function Sy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=aa;aa=aa+48|0;k=l+8|0;g=l;i=l+28|0;j=l+16|0;e=c[b+36>>2]|0;f=((c[b+40>>2]|0)-e|0)/36|0;if(f>>>0<=d>>>0){c[g>>2]=d;c[g+4>>2]=f+-1;sy(b,330832,g);aa=l;return}h=f+~d|0;h=(c[e+(h*36|0)>>2]|0)==2?e+(h*36|0)+4|0:e+(h*36|0)+16|0;wy(b,h,331129)|0;d=b+48|0;e=c[d>>2]|0;if(!e){c[d>>2]=h;e=h}n=c[e+4>>2]|0;m=c[e>>2]|0;f=c[h>>2]|0;d=m;g=n;a:do if((n-m|0)==((c[h+4>>2]|0)-f|0)){if((d|0)==(g|0)){aa=l;return}while(1){if((c[d>>2]|0)!=(c[f>>2]|0))break a;d=d+4|0;if((d|0)==(g|0))break;else f=f+4|0}aa=l;return}while(0);vy(i,e,0);e=i+11|0;g=(a[e>>0]|0)<0?c[i>>2]|0:i;vy(j,h,0);n=j+11|0;m=(a[n>>0]|0)<0?c[j>>2]|0:j;c[k>>2]=g;c[k+4>>2]=m;sy(b,331138,k);if((a[n>>0]|0)<0)$A(c[j>>2]|0);if((a[e>>0]|0)<0)$A(c[i>>2]|0);aa=l;return}function Ty(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;d=c[b+36>>2]|0;h=(c[b+40>>2]|0)-d|0;e=(h|0)/36|0;if(!h){c[f>>2]=0;c[f+4>>2]=e+-1;sy(b,330832,f);aa=i;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=i;return}if(g>>>0>=f>>>0){aa=i;return}c[e>>2]=d+(g<<2);aa=i;return}function Uy(a,b,c){a=a|0;b=b|0;c=c|0;zy(a,b,c,331199)|0;return}function Vy(a,b,c){a=a|0;b=b|0;c=c|0;Ay(a,-1,331204)|0;zy(a,b,c,331204)|0;return}function Wy(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;k=aa;aa=aa+16|0;j=k+8|0;i=k;yy(b,d,331218)|0;f=b+36|0;h=b+40|0;d=c[f>>2]|0;l=(c[h>>2]|0)-d|0;g=((l|0)/36|0)+-1|0;if(!l){c[i>>2]=g;c[i+4>>2]=g;sy(b,330832,i);aa=k;return}xy(b,e,d+16|0)|0;f=c[f>>2]|0;l=(c[h>>2]|0)-f|0;d=(l|0)/36|0;if(!l){c[j>>2]=0;c[j+4>>2]=d+-1;sy(b,330832,j);aa=k;return}h=d+-1|0;a[f+(h*36|0)+32>>0]=1;e=b+24|0;h=c[f+(h*36|0)+28>>2]|0;f=b+28|0;d=c[e>>2]|0;g=(c[f>>2]|0)-d>>2;if(h>>>0>g>>>0){hu(e,h-g|0);aa=k;return}if(h>>>0>=g>>>0){aa=k;return}c[f>>2]=d+(h<<2);aa=k;return}function Xy(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;k=aa;aa=aa+16|0;j=k+8|0;i=k;Ay(b,-1,331230)|0;yy(b,d,331230)|0;f=b+36|0;h=b+40|0;d=c[f>>2]|0;l=(c[h>>2]|0)-d|0;g=((l|0)/36|0)+-1|0;if(!l){c[i>>2]=g;c[i+4>>2]=g;sy(b,330832,i);aa=k;return}xy(b,e,d+16|0)|0;f=c[f>>2]|0;l=(c[h>>2]|0)-f|0;d=(l|0)/36|0;if(!l){c[j>>2]=0;c[j+4>>2]=d+-1;sy(b,330832,j);aa=k;return}h=d+-1|0;a[f+(h*36|0)+32>>0]=1;e=b+24|0;h=c[f+(h*36|0)+28>>2]|0;f=b+28|0;d=c[e>>2]|0;g=(c[f>>2]|0)-d>>2;if(h>>>0>g>>>0){hu(e,h-g|0);aa=k;return}if(h>>>0>=g>>>0){aa=k;return}c[f>>2]=d+(h<<2);aa=k;return}function Yy(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Zy(b){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;n=aa;aa=aa+32|0;i=n+8|0;e=n;m=n+16|0;g=b+36|0;h=b+40|0;d=c[g>>2]|0;l=(c[h>>2]|0)-d|0;f=(l|0)/36|0;if(!l){c[e>>2]=0;c[e+4>>2]=f+-1;sy(b,330832,e);aa=n;return}l=f+-1|0;k=d+(l*36|0)|0;yy(b,d+(l*36|0)+16|0,331251)|0;f=c[g>>2]|0;j=(c[h>>2]|0)-f|0;e=(j|0)/36|0;if(j){h=b+24|0;g=b+28|0;if(((c[g>>2]|0)-(c[h>>2]|0)>>2|0)==(c[f+((e+-1|0)*36|0)+28>>2]|0)){f=h;e=g;j=g;i=h}else{c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;uy(b,1,331251,m);f=h;e=g;j=g;i=h}}else{c[i>>2]=0;c[i+4>>2]=e+-1;sy(b,330832,i);i=b+24|0;j=b+28|0;f=i;e=j}h=c[d+(l*36|0)+28>>2]|0;e=c[e>>2]|0;f=c[f>>2]|0;g=e-f>>2;if(h>>>0<=g>>>0){if(h>>>0<g>>>0){e=f+(h<<2)|0;c[j>>2]=e}}else{hu(i,h-g|0);e=c[j>>2]|0}c[k>>2]=6;a[d+(l*36|0)+32>>0]=0;c[m>>2]=-24;if((e|0)==(c[b+32>>2]|0))fo(i,m);else{c[e>>2]=-24;c[j>>2]=e+4}aa=n;return}function _y(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function $y(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,b);e=c[f+8>>2]|0;Am(f,b);Ay(a,e,c[f>>2]|0)|0;Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function az(b){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;n=aa;aa=aa+32|0;e=n;l=n+20|0;m=n+8|0;d=c[b+36>>2]|0;k=(c[b+40>>2]|0)-d|0;f=(k|0)/36|0;if(k){j=f+-1|0;e=c[d+(j*36|0)+28>>2]|0;k=b+24|0;h=b+28|0;f=c[h>>2]|0;g=c[k>>2]|0;i=f-g>>2;if((e+1|0)>>>0<=i>>>0){c[h>>2]=f+-4;aa=n;return}if(e>>>0<=i>>>0){if(e>>>0<i>>>0)c[h>>2]=g+(e<<2)}else hu(k,e-i|0);if(a[d+(j*36|0)+32>>0]|0){aa=n;return}}else{c[e>>2]=0;c[e+4>>2]=f+-1;sy(b,330832,e)}c[l>>2]=1;l=_A(4)|0;c[m>>2]=l;k=l+4|0;c[m+8>>2]=k;c[l>>2]=0;c[m+4>>2]=k;uy(b,1,331261,m);$A(l);aa=n;return}function bz(b){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;p=aa;aa=aa+32|0;i=p+8|0;e=p;o=p+16|0;g=b+36|0;h=b+40|0;d=c[g>>2]|0;n=(c[h>>2]|0)-d|0;f=(n|0)/36|0;if(!n){c[e>>2]=0;c[e+4>>2]=f+-1;sy(b,330832,e);o=1;aa=p;return o|0}n=f+-1|0;m=d+(n*36|0)|0;j=(c[m>>2]|0)!=3;j=j|(yy(b,d+(n*36|0)+16|0,331266)|0)==1;f=c[g>>2]|0;l=(c[h>>2]|0)-f|0;e=(l|0)/36|0;if(l){h=b+24|0;g=b+28|0;e=((c[g>>2]|0)-(c[h>>2]|0)>>2|0)!=(c[f+((e+-1|0)*36|0)+28>>2]|0);if(e){c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;uy(b,1,331266,o);f=h;i=g;l=g;k=h}else{f=h;i=g;l=g;k=h}}else{c[i>>2]=0;c[i+4>>2]=e+-1;sy(b,330832,i);k=b+24|0;l=b+28|0;f=k;i=l;e=1}j=(j|e)&1;g=c[d+(n*36|0)+28>>2]|0;f=c[f>>2]|0;e=(c[i>>2]|0)-f>>2;if(g>>>0<=e>>>0){if(g>>>0<e>>>0)c[l>>2]=f+(g<<2)}else hu(k,g-e|0);e=c[d+(n*36|0)+4>>2]|0;i=c[d+(n*36|0)+8>>2]|0;if((e|0)!=(i|0)){h=b+32|0;do{f=c[e>>2]|0;c[o>>2]=f;do if((f|0)!=-64){g=c[l>>2]|0;if((g|0)==(c[h>>2]|0)){fo(k,o);break}else{c[g>>2]=f;c[l>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(i|0))}c[m>>2]=4;a[d+(n*36|0)+32>>0]=0;o=j;aa=p;return o|0}function cz(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,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+32|0;f=p;n=p+8|0;m=b+16|0;j=(yy(a,m,d)|0)==1;o=a+40|0;d=c[a+36>>2]|0;l=(c[o>>2]|0)-d|0;g=(l|0)/36|0;if(l){h=a+24|0;f=a+28|0;d=((c[f>>2]|0)-(c[h>>2]|0)>>2|0)!=(c[d+((g+-1|0)*36|0)+28>>2]|0);if(d){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;uy(a,1,e,n);e=h;i=f;l=f;k=h}else{e=h;i=f;l=f;k=h}}else{c[f>>2]=0;c[f+4>>2]=g+-1;sy(a,330832,f);k=a+24|0;l=a+28|0;e=k;i=l;d=1}j=(j|d)&1;g=c[b+28>>2]|0;f=c[e>>2]|0;d=(c[i>>2]|0)-f>>2;if(g>>>0<=d>>>0){if(g>>>0<d>>>0)c[l>>2]=f+(g<<2)}else hu(k,g-d|0);d=c[m>>2]|0;h=c[b+20>>2]|0;if((d|0)!=(h|0)){e=a+32|0;do{f=c[d>>2]|0;c[n>>2]=f;do if((f|0)!=-64){g=c[l>>2]|0;if((g|0)==(c[e>>2]|0)){fo(k,n);break}else{c[g>>2]=f;c[l>>2]=g+4;break}}while(0);d=d+4|0}while((d|0)!=(h|0))}f=c[o>>2]|0;d=c[f+-20>>2]|0;if(d|0){c[f+-16>>2]=d;$A(d)}d=c[f+-32>>2]|0;if(!d){n=f+-36|0;c[o>>2]=n;aa=p;return j|0}c[f+-28>>2]=d;$A(d);n=f+-36|0;c[o>>2]=n;aa=p;return j|0}function dz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=aa;aa=aa+16|0;e=f;b=c[a+36>>2]|0;g=(c[a+40>>2]|0)-b|0;d=(g|0)/36|0;if(!g){c[e>>2]=0;c[e+4>>2]=d+-1;sy(a,330832,e);aa=f;return}d=b+((d+-1|0)*36|0)|0;b=c[d>>2]|0;do if((b|0)==3)if((bz(a)|0)==1){aa=f;return}else{b=c[d>>2]|0;break}while(0);g=c[279840+(b<<2)>>2]|0;cz(a,d,g,g)|0;aa=f;return}function ez(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,l=0;l=aa;aa=aa+16|0;j=l+4|0;g=l;Ay(a,-1,331295)|0;yy(a,b,331295)|0;c[j>>2]=3;k=a+24|0;i=a+28|0;h=(c[i>>2]|0)-(c[k>>2]|0)>>2;c[g>>2]=h;f=a+40|0;e=c[f>>2]|0;if(e>>>0<(c[a+44>>2]|0)>>>0){ry(e,3,b,d,h);c[f>>2]=(c[f>>2]|0)+36}else ty(a+36|0,j,b,d,g);e=c[b>>2]|0;h=c[b+4>>2]|0;if((e|0)==(h|0)){aa=l;return}d=a+32|0;do{f=c[e>>2]|0;c[j>>2]=f;do if((f|0)!=-64){g=c[i>>2]|0;if((g|0)==(c[d>>2]|0)){fo(k,j);break}else{c[g>>2]=f;c[i>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(h|0));aa=l;return}function fz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function gz(a,b){a=a|0;b=b|0;Ay(a,b,331328)|0;return}function hz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,b);e=c[f+8>>2]|0;Am(f,b);Ay(a,e,c[f>>2]|0)|0;Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function iz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function jz(a,b){a=a|0;b=b|0;Ay(a,b,331339)|0;return}function kz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;Ay(a,b,331349)|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function lz(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,l=0;l=aa;aa=aa+16|0;j=l+4|0;g=l;yy(a,b,331290)|0;c[j>>2]=2;k=a+24|0;i=a+28|0;h=(c[i>>2]|0)-(c[k>>2]|0)>>2;c[g>>2]=h;f=a+40|0;e=c[f>>2]|0;if(e>>>0<(c[a+44>>2]|0)>>>0){ry(e,2,b,d,h);c[f>>2]=(c[f>>2]|0)+36}else ty(a+36|0,j,b,d,g);e=c[b>>2]|0;h=c[b+4>>2]|0;if((e|0)==(h|0)){aa=l;return}d=a+32|0;do{f=c[e>>2]|0;c[j>>2]=f;do if((f|0)!=-64){g=c[i>>2]|0;if((g|0)==(c[d>>2]|0)){fo(k,j);break}else{c[g>>2]=f;c[i>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(h|0));aa=l;return}function mz(a){a=a|0;Ey(a,199);return}function nz(a){a=a|0;Ey(a,200);return}function oz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,51);b=c[f+8>>2]|0;Am(f,51);Ay(a,b,c[f>>2]|0)|0;Am(f,51);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function pz(a){a=a|0;Ey(a,197);return}function qz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;c[e>>2]=-1;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-1;c[d>>2]=b+4;aa=f;return}}function rz(a){a=a|0;Ey(a,203);return}function sz(a){a=a|0;Ey(a,201);return}function tz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;Ay(a,-1,331359)|0;c[e>>2]=-17;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-17;c[d>>2]=b+4;aa=f;return}}function uz(a){a=a|0;By(a,-1,-17,331369)|0;return}function vz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;By(a,-17,-1,331379)|0;c[e>>2]=-1;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-1;c[d>>2]=b+4;aa=f;return}}function wz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;c[e>>2]=-1;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-1;c[d>>2]=b+4;aa=f;return}}function xz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;c[e>>2]=-17;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-17;c[d>>2]=b+4;aa=f;return}}function yz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;Ay(a,-17,331390)|0;c[e>>2]=-1;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-1;c[d>>2]=b+4;aa=f;return}}function zz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;Ay(b,-24,331402)|0;d=c[b+36>>2]|0;h=(c[b+40>>2]|0)-d|0;e=(h|0)/36|0;if(!h){c[f>>2]=0;c[f+4>>2]=e+-1;sy(b,330832,f);aa=i;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=i;return}if(g>>>0>=f>>>0){aa=i;return}c[e>>2]=d+(g<<2);aa=i;return}function Az(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;yy(b,d,331410)|0;d=c[b+36>>2]|0;h=(c[b+40>>2]|0)-d|0;e=(h|0)/36|0;if(!h){c[f>>2]=0;c[f+4>>2]=e+-1;sy(b,330832,f);aa=i;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=i;return}if(g>>>0>=f>>>0){aa=i;return}c[e>>2]=d+(g<<2);aa=i;return}function Bz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+16|0;i=j+8|0;g=j;e=b+36|0;h=b+40|0;d=c[e>>2]|0;k=(c[h>>2]|0)-d|0;f=((k|0)/36|0)+-1|0;if(!k){c[g>>2]=f;c[g+4>>2]=f;sy(b,330832,g);aa=j;return}yy(b,d+16|0,331416)|0;e=c[e>>2]|0;k=(c[h>>2]|0)-e|0;d=(k|0)/36|0;if(!k){c[i>>2]=0;c[i+4>>2]=d+-1;sy(b,330832,i);aa=j;return}g=d+-1|0;a[e+(g*36|0)+32>>0]=1;h=b+24|0;g=c[e+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=j;return}if(g>>>0>=f>>>0){aa=j;return}c[e>>2]=d+(g<<2);aa=j;return}function Cz(b){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;q=aa;aa=aa+48|0;o=q+24|0;l=q+16|0;k=q+8|0;d=q;p=q+32|0;m=b+36|0;n=b+40|0;f=c[n>>2]|0;g=c[m>>2]|0;j=f-g|0;e=(j|0)/36|0;do if(j){i=g;h=e+-1|0;d=c[b+24>>2]|0;e=(c[b+28>>2]|0)-d>>2;if((c[i+(h*36|0)+28>>2]|0)>>>0<e>>>0){e=((c[d+(e+-1<<2)>>2]|0)+1|0)>>>0>1;d=0;break}else{e=0;d=(a[i+(h*36|0)+32>>0]|0)==0;break}}else{c[d>>2]=0;c[d+4>>2]=e+-1;sy(b,330832,d);f=c[n>>2]|0;g=c[m>>2]|0;e=0;d=1}while(0);j=e|d;i=f-g|0;d=(i|0)/36|0;do if(i){e=g;d=d+-1|0;h=c[b+24>>2]|0;i=(c[b+28>>2]|0)-h>>2;if(((c[e+(d*36|0)+28>>2]|0)+1|0)>>>0<i>>>0){d=0;k=c[h+(i+-2<<2)>>2]|0;break}else{d=(a[e+(d*36|0)+32>>0]|0)==0;k=0;break}}else{c[k>>2]=0;c[k+4>>2]=d+-1;sy(b,330832,k);f=c[n>>2]|0;g=c[m>>2]|0;d=1;k=0}while(0);h=j|d;j=f-g|0;d=(j|0)/36|0;do if(j){f=d+-1|0;d=c[b+24>>2]|0;e=(c[b+28>>2]|0)-d>>2;if(((c[g+(f*36|0)+28>>2]|0)+2|0)>>>0<e>>>0){e=c[d+(e+-3<<2)>>2]|0;d=0;break}else{e=0;d=(a[g+(f*36|0)+32>>0]|0)==0;break}}else{c[l>>2]=0;c[l+4>>2]=d+-1;sy(b,330832,l);e=0;d=1}while(0);if(h|(d|(e|0)!=0&((k|0)!=0&(e|0)!=(k|0)))){l=_A(12)|0;c[p>>2]=l;j=l+12|0;c[p+8>>2]=j;c[l>>2]=-1;c[l+4>>2]=k;c[l+8>>2]=k;c[p+4>>2]=j;uy(b,1,331423,p);$A(l)}e=c[m>>2]|0;n=(c[n>>2]|0)-e|0;d=(n|0)/36|0;do if(n){d=c[e+((d+-1|0)*36|0)+28>>2]|0;i=b+24|0;g=b+28|0;e=c[g>>2]|0;f=c[i>>2]|0;h=e-f>>2;if((d+3|0)>>>0<=h>>>0){c[g>>2]=e+-12;break}if(d>>>0>h>>>0){hu(i,d-h|0);break}if(d>>>0<h>>>0)c[g>>2]=f+(d<<2)}else{c[o>>2]=0;c[o+4>>2]=d+-1;sy(b,330832,o)}while(0);c[p>>2]=k;if((k|0)==-64){aa=q;return}e=b+28|0;d=c[e>>2]|0;if((d|0)==(c[b+32>>2]|0)){fo(b+24|0,p);aa=q;return}else{c[d>>2]=k;c[e>>2]=d+4;aa=q;return}}function Dz(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Ez(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,l=0;l=aa;aa=aa+16|0;j=l+4|0;g=l;yy(a,b,331314)|0;c[j>>2]=5;k=a+24|0;i=a+28|0;h=(c[i>>2]|0)-(c[k>>2]|0)>>2;c[g>>2]=h;f=a+40|0;e=c[f>>2]|0;if(e>>>0<(c[a+44>>2]|0)>>>0){ry(e,5,b,d,h);c[f>>2]=(c[f>>2]|0)+36}else ty(a+36|0,j,b,d,g);e=c[b>>2]|0;h=c[b+4>>2]|0;if((e|0)==(h|0)){aa=l;return}d=a+32|0;do{f=c[e>>2]|0;c[j>>2]=f;do if((f|0)!=-64){g=c[i>>2]|0;if((g|0)==(c[d>>2]|0)){fo(k,j);break}else{c[g>>2]=f;c[i>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(h|0));aa=l;return}function Fz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,b);e=c[f+8>>2]|0;Am(f,b);Ay(a,e,c[f>>2]|0)|0;Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function Gz(a,b){a=a|0;b=b|0;Ey(a,b);return}function Hz(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;i=aa;aa=aa+64|0;g=i;h=i+16|0;f=Em(b)|0;if(!(0>e>>>0|0==(e|0)&f>>>0>d>>>0)){c[g>>2]=f;f=g+8|0;c[f>>2]=d;c[f+4>>2]=e;sy(a,331430,g)}switch(b|0){case 232:case 226:case 229:case 223:case 220:case 219:case 216:case 215:{Am(h,b);d=c[h+8>>2]|0;Am(h,b);Ay(a,d,c[h>>2]|0)|0;Am(h,b);d=c[h+4>>2]|0;c[h>>2]=d;do if((d|0)!=-64){f=a+28|0;e=c[f>>2]|0;if((e|0)==(c[a+32>>2]|0)){fo(a+24|0,h);break}else{c[e>>2]=d;c[f>>2]=e+4;break}}while(0);aa=i;return}case 233:case 227:case 230:case 224:case 221:case 217:{Dy(a,b)|0;aa=i;return}default:U()}}function Iz(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,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=aa;aa=aa+128|0;I=K+120|0;H=K+112|0;F=K+104|0;E=K+96|0;D=K+88|0;C=K+80|0;B=K+72|0;A=K+64|0;z=K+56|0;y=K+48|0;x=K+40|0;w=K+32|0;J=K+24|0;G=K+16|0;v=K+8|0;u=K;f=a[e>>0]|0;o=a[e+1>>0]|0;p=a[e+2>>0]|0;q=a[e+3>>0]|0;r=a[e+4>>0]|0;s=a[e+5>>0]|0;t=a[e+6>>0]|0;g=a[e+7>>0]|0;h=a[e+8>>0]|0;i=a[e+9>>0]|0;j=a[e+10>>0]|0;k=a[e+11>>0]|0;l=a[e+12>>0]|0;m=a[e+13>>0]|0;n=a[e+14>>0]|0;e=a[e+15>>0]|0;if((f&255)>31){c[u>>2]=f&255;sy(b,331473,u)}if((o&255)>31){c[v>>2]=o&255;sy(b,331473,v)}if((p&255)>31){c[G>>2]=p&255;sy(b,331473,G)}if((q&255)>31){c[J>>2]=q&255;sy(b,331473,J)}if((r&255)>31){c[w>>2]=r&255;sy(b,331473,w)}if((s&255)>31){c[x>>2]=s&255;sy(b,331473,x)}if((t&255)>31){c[y>>2]=t&255;sy(b,331473,y)}if((g&255)>31){c[z>>2]=g&255;sy(b,331473,z)}if((h&255)>31){c[A>>2]=h&255;sy(b,331473,A)}if((i&255)>31){c[B>>2]=i&255;sy(b,331473,B)}if((j&255)>31){c[C>>2]=j&255;sy(b,331473,C)}if((k&255)>31){c[D>>2]=k&255;sy(b,331473,D)}if((l&255)>31){c[E>>2]=l&255;sy(b,331473,E)}if((m&255)>31){c[F>>2]=m&255;sy(b,331473,F)}if((n&255)>31){c[H>>2]=n&255;sy(b,331473,H)}if((e&255)<=31){Dy(b,d)|0;aa=K;return}c[I>>2]=e&255;sy(b,331473,I);Dy(b,d)|0;aa=K;return}function Jz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;d=c[b+36>>2]|0;h=(c[b+40>>2]|0)-d|0;e=(h|0)/36|0;if(!h){c[f>>2]=0;c[f+4>>2]=e+-1;sy(b,330832,f);aa=i;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=i;return}if(g>>>0>=f>>>0){aa=i;return}c[e>>2]=d+(g<<2);aa=i;return}function Kz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=aa;aa=aa+16|0;e=f;b=c[a+36>>2]|0;g=(c[a+40>>2]|0)-b|0;d=(g|0)/36|0;if(!g){c[e>>2]=0;c[e+4>>2]=d+-1;sy(a,330832,e);aa=f;return}else{cz(a,b+((d+-1|0)*36|0)|0,331514,331281)|0;aa=f;return}}function Lz(b,d){b=b|0;d=d|0;var e=0,f=0;f=b+d|0;if((d|0)<=0){f=1;return f|0}a:while(1){e=a[b>>0]|0;d=c[279872+((e&255)<<2)>>2]|0;if((b+d|0)>>>0>f>>>0){b=0;d=14;break}switch(d|0){case 0:{b=0;d=14;break a}case 1:{b=b+1|0;break}case 2:{if((a[b+1>>0]&-64)<<24>>24==-128)b=b+2|0;else{b=0;d=14;break a}break}case 3:{d=a[b+1>>0]|0;if(!((d&-64)<<24>>24==-128?(a[b+2>>0]&-64)<<24>>24==-128:0)){b=0;d=14;break a}if(e<<24>>24==-32&(d&255)<160){b=0;d=14;break a}if(e<<24>>24==-19&(d&255)>159){b=0;d=14;break a}else b=b+3|0;break}case 4:{d=a[b+1>>0]|0;if(!(((d&-64)<<24>>24==-128?(a[b+2>>0]&-64)<<24>>24==-128:0)&(a[b+3>>0]&-64)<<24>>24==-128)){b=0;d=14;break a}if(e<<24>>24==-16&(d&255)<144){b=0;d=14;break a}if(e<<24>>24==-12&(d&255)>143){b=0;d=14;break a}else b=b+4|0;break}default:{}}if(b>>>0>=f>>>0){b=1;d=14;break}}if((d|0)==14)return b|0;return 0}function Mz(a){a=a|0;var b=0,d=0;b=aa;aa=aa+16|0;d=b;a=Qz(c[a+60>>2]|0)|0;c[d>>2]=a;a=Oz(T(6,d|0)|0)|0;aa=b;return a|0}function Nz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=aa;aa=aa+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((Oz(Q(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;aa=f;return a|0}function Oz(a){a=a|0;if(a>>>0>4294963200){c[88534]=0-a;a=-1}return a|0}function Pz(){return 354136}function Qz(a){a=a|0;return a|0}function Rz(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,l=0,m=0,n=0,o=0;m=aa;aa=aa+48|0;i=m+32|0;f=m+16|0;e=m;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=Oz(R(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;o=c[e+4>>2]|0;n=b>>>0>o>>>0;e=n?e+8|0:e;f=f+(n<<31>>31)|0;o=b-(n?o:0)|0;c[e>>2]=(c[e>>2]|0)+o;n=e+4|0;c[n>>2]=(c[n>>2]|0)-o;c[i>>2]=c[h>>2];c[i+4>>2]=e;c[i+8>>2]=f;b=Oz(R(146,i|0)|0)|0;if((g|0)==(b|0)){l=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 l=3;while(0);if((l|0)==3){o=c[a+44>>2]|0;c[a+16>>2]=o+(c[a+48>>2]|0);c[j>>2]=o;c[k>>2]=o}aa=m;return d|0}function Sz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=aa;aa=aa+16|0;g=f;c[g>>2]=e;e=Vz(a,b,d,g)|0;aa=f;return e|0}function Tz(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function Uz(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3)){d=b;e=5}else{d=f;while(1){if(!(a[b>>0]|0))break a;b=b+1|0;d=b;if(!(d&3)){d=b;e=5;break}}}while(0);if((e|0)==5){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 Vz(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;m=aa;aa=aa+128|0;g=m+124|0;l=m;h=l;i=291860;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[88534]=75;g=-1}else{g=b;k=4}if((k|0)==4){k=-2-g|0;k=d>>>0>k>>>0?k:d;c[l+48>>2]=k;h=l+20|0;c[h>>2]=g;c[l+44>>2]=g;g=g+k|0;d=l+16|0;c[d>>2]=g;c[l+28>>2]=g;g=Wz(l,e,f)|0;if(k){e=c[h>>2]|0;a[e+(((e|0)==(c[d>>2]|0))<<31>>31)>>0]=0}}aa=m;return g|0}function Wz(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,p=0,q=0;q=aa;aa=aa+224|0;m=q+208|0;p=q+160|0;o=q+80|0;n=q;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[m>>2]=c[e>>2];if((Xz(0,d,m,o,p)|0)<0)e=-1;else{e=c[b>>2]|0;l=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;f=c[g>>2]|0;c[g>>2]=n;i=b+28|0;c[i>>2]=n;k=b+20|0;c[k>>2]=n;c[h>>2]=80;j=b+16|0;c[j>>2]=n+80;e=Xz(b,d,m,o,p)|0;if(f){ga[c[b+36>>2]&127](b,0,0)|0;e=(c[k>>2]|0)==0?-1:e;c[g>>2]=f;c[h>>2]=0;c[j>>2]=0;c[i>>2]=0;c[k>>2]=0}}else e=Xz(b,d,m,o,p)|0;p=c[b>>2]|0;c[b>>2]=p|l;e=(p&32|0)==0?e:-1}aa=q;return e|0}function Xz(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var 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,A=0,B=0,C=0,D=0,E=0,F=0;F=aa;aa=aa+64|0;D=F+56|0;B=F+40|0;w=F;E=F+48|0;C=F+60|0;c[D>>2]=e;A=(d|0)!=0;v=w+40|0;y=v;w=w+39|0;x=E+4|0;e=0;j=0;m=0;a:while(1){do{do if((e|0)>-1)if((j|0)>(2147483647-e|0)){c[88534]=75;e=-1;break}else{e=j+e|0;break}while(0);p=c[D>>2]|0;j=a[p>>0]|0;if(!(j<<24>>24)){u=93;break a}k=p;b:while(1){switch(j<<24>>24){case 37:{u=10;break b}case 0:{j=k;break b}default:{}}t=k+1|0;c[D>>2]=t;j=a[t>>0]|0;k=t}c:do if((u|0)==10){u=0;l=k;j=k;do{if((a[l+1>>0]|0)!=37)break c;j=j+1|0;l=l+2|0;c[D>>2]=l}while((a[l>>0]|0)==37)}while(0);j=j-p|0;if(A)Yz(d,p,j)}while((j|0)!=0);l=c[D>>2]|0;j=a[l+1>>0]|0;if(!(Zz(j)|0)){k=1;r=-1;o=m}else{o=(a[l+2>>0]|0)==36;k=o?3:1;r=o?j+-48|0:-1;o=o?1:m}k=l+k|0;c[D>>2]=k;j=a[k>>0]|0;l=(j<<24>>24)+-32|0;if(l>>>0>31|(1<<l&75913|0)==0)n=0;else{j=0;while(1){m=1<<l|j;k=k+1|0;c[D>>2]=k;j=a[k>>0]|0;l=(j<<24>>24)+-32|0;if(l>>>0>31|(1<<l&75913|0)==0){n=m;break}else j=m}}if(j<<24>>24==42){l=k+1|0;j=a[l>>0]|0;if((Zz(j)|0)!=0?(a[k+2>>0]|0)==36:0){c[i+(j+-48<<2)>>2]=10;m=1;j=k+3|0;k=c[h+((a[l>>0]|0)+-48<<3)>>2]|0}else{if(o|0){e=-1;break}if(A){m=(c[f>>2]|0)+(4-1)&~(4-1);k=c[m>>2]|0;c[f>>2]=m+4;m=0;j=l}else{m=0;j=l;k=0}}c[D>>2]=j;s=(k|0)<0;l=j;q=s?n|8192:n;t=m;s=s?0-k|0:k}else{j=_z(D)|0;if((j|0)<0){e=-1;break}l=c[D>>2]|0;q=n;t=o;s=j}do if((a[l>>0]|0)==46){j=l+1|0;if((a[j>>0]|0)!=42){c[D>>2]=j;n=_z(D)|0;j=c[D>>2]|0;break}j=l+2|0;k=a[j>>0]|0;if(Zz(k)|0?(a[l+3>>0]|0)==36:0){c[i+(k+-48<<2)>>2]=10;n=c[h+((a[j>>0]|0)+-48<<3)>>2]|0;j=l+4|0;c[D>>2]=j;break}if(t|0){e=-1;break a}if(A){o=(c[f>>2]|0)+(4-1)&~(4-1);k=c[o>>2]|0;c[f>>2]=o+4}else k=0;c[D>>2]=j;n=k}else{j=l;n=-1}while(0);o=0;while(1){if(((a[j>>0]|0)+-65|0)>>>0>57){e=-1;break a}k=j+1|0;c[D>>2]=k;l=a[(a[j>>0]|0)+-65+(280896+(o*58|0))>>0]|0;m=l&255;if((m+-1|0)>>>0<8){j=k;o=m}else break}if(!(l<<24>>24)){e=-1;break}k=(r|0)>-1;do if(l<<24>>24==19)if(k){e=-1;break a}else u=52;else{if(k){c[i+(r<<2)>>2]=m;m=h+(r<<3)|0;r=c[m+4>>2]|0;u=B;c[u>>2]=c[m>>2];c[u+4>>2]=r;u=52;break}if(!A){e=0;break a}$z(B,m,f);u=53}while(0);if((u|0)==52){u=0;if(A)u=53;else j=0}d:do if((u|0)==53){u=0;l=a[j>>0]|0;l=(o|0)!=0&(l&15|0)==3?l&-33:l;k=q&-65537;r=(q&8192|0)==0?q:k;e:do switch(l|0){case 110:switch((o&255)<<24>>24){case 0:{c[c[B>>2]>>2]=e;j=0;break d}case 1:{c[c[B>>2]>>2]=e;j=0;break d}case 2:{j=c[B>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;break d}case 3:{b[c[B>>2]>>1]=e;j=0;break d}case 4:{a[c[B>>2]>>0]=e;j=0;break d}case 6:{c[c[B>>2]>>2]=e;j=0;break d}case 7:{j=c[B>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;break d}default:{j=0;break d}}case 112:{j=r|8;k=n>>>0>8?n:8;m=120;u=65;break}case 88:case 120:{j=r;k=n;m=l;u=65;break}case 111:{q=B;p=c[q>>2]|0;q=c[q+4>>2]|0;o=bA(p,q,v)|0;k=y-o|0;j=r;k=(r&8|0)==0|(n|0)>(k|0)?n:k+1|0;l=0;n=331530;u=71;break}case 105:case 100:{k=B;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)<0){j=jC(0,0,j|0,k|0)|0;k=z()|0;l=B;c[l>>2]=j;c[l+4>>2]=k;l=1;m=331530;u=70;break e}else{l=(r&2049|0)!=0&1;m=(r&2048|0)==0?((r&1|0)==0?331530:331532):331531;u=70;break e}}case 117:{k=B;j=c[k>>2]|0;k=c[k+4>>2]|0;l=0;m=331530;u=70;break}case 99:{a[w>>0]=c[B>>2];p=w;o=k;m=1;l=0;k=331530;j=y;break}case 109:{j=dA(c[88534]|0)|0;u=75;break}case 115:{j=c[B>>2]|0;j=(j|0)==0?331540:j;u=75;break}case 67:{c[E>>2]=c[B>>2];c[x>>2]=0;c[B>>2]=E;l=E;n=-1;u=80;break}case 83:if(!n){fA(d,32,s,0,r);j=0;u=90;break e}else{l=c[B>>2]|0;u=80;break e}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{j=hA(d,+g[B>>3],s,n,r,l)|0;break d}default:{o=r;m=n;l=0;k=331530;j=y}}while(0);f:do if((u|0)==65){q=B;p=c[q>>2]|0;q=c[q+4>>2]|0;o=aA(p,q,v,m&32)|0;n=(j&8|0)==0|(p|0)==0&(q|0)==0;l=n?0:2;n=n?331530:331530+(m>>>4)|0;u=71}else if((u|0)==70){p=j;q=k;o=cA(j,k,v)|0;j=r;k=n;n=m;u=71}else if((u|0)==75){u=0;r=eA(j,n)|0;q=(r|0)==0;p=j;o=k;m=q?n:r-j|0;l=0;k=331530;j=q?j+n|0:r}else if((u|0)==80){u=0;j=0;o=l;while(1){k=c[o>>2]|0;if(!k)break;k=gA(C,k)|0;m=(k|0)<0;if(m|k>>>0>(n-j|0)>>>0){u=84;break}j=k+j|0;if(n>>>0>j>>>0)o=o+4|0;else break}if((u|0)==84){u=0;if(m){e=-1;break a}}fA(d,32,s,j,r);if(!j){j=0;u=90}else{m=0;while(1){k=c[l>>2]|0;if(!k){u=90;break f}k=gA(C,k)|0;m=k+m|0;if((m|0)>(j|0)){u=90;break f}Yz(d,C,k);if(m>>>0>=j>>>0){u=90;break}else l=l+4|0}}}while(0);if((u|0)==71){u=0;m=(p|0)!=0|(q|0)!=0;r=(k|0)!=0|m;m=y-o+((m^1)&1)|0;p=r?o:v;o=(k|0)>-1?j&-65537:j;m=r?((k|0)>(m|0)?k:m):0;k=n;j=y}else if((u|0)==90){u=0;fA(d,32,s,j,r^8192);j=(s|0)>(j|0)?s:j;break}q=j-p|0;n=(m|0)<(q|0)?q:m;r=n+l|0;j=(s|0)<(r|0)?r:s;fA(d,32,j,r,o);Yz(d,k,l);fA(d,48,j,r,o^65536);fA(d,48,n,q,0);Yz(d,p,q);fA(d,32,j,r,o^8192)}while(0);m=t}g:do if((u|0)==93)if(!d)if(!m)e=0;else{e=1;while(1){j=c[i+(e<<2)>>2]|0;if(!j)break;$z(h+(e<<3)|0,j,f);e=e+1|0;if(e>>>0>=10){e=1;break g}}j=0;while(1){e=e+1|0;if(j|0){e=-1;break g}if(e>>>0>=10){e=1;break g}j=c[i+(e<<2)>>2]|0}}while(0);aa=F;return e|0}function Yz(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))sA(b,d,a);return}function Zz(a){a=a|0;return (a+-48|0)>>>0<10|0}function _z(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;d=a[e>>0]|0;if(!(Zz(d<<24>>24)|0))d=0;else{f=d;d=0;do{d=(d*10|0)+-48+(f<<24>>24)|0;e=e+1|0;c[b>>2]=e;f=a[e>>0]|0}while((Zz(f<<24>>24)|0)!=0)}return d|0}function $z(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=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);h=+g[f>>3];c[d>>2]=f+8;g[a>>3]=h;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);h=+g[f>>3];c[d>>2]=f+8;g[a>>3]=h;break a}default:break a}while(0);while(0);return}function aA(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[281360+(b&15)>>0]|0|f;b=oC(b|0,c|0,4)|0;c=z()|0}while(!((b|0)==0&(c|0)==0));return e|0}function bA(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=oC(b|0,c|0,3)|0;c=z()|0}while(!((b|0)==0&(c|0)==0));return d|0}function cA(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)do{e=b;b=mC(b|0,c|0,10,0)|0;f=c;c=z()|0;g=hC(b|0,c|0,-10,-1)|0;g=iC(e|0,f|0,g|0,z()|0)|0;z()|0;d=d+-1|0;a[d>>0]=g&255|48}while(f>>>0>9|(f|0)==9&e>>>0>4294967295);if(b)do{g=b;b=(b>>>0)/10|0;f=(g+(v(b,-10)|0)|48)&255;d=d+-1|0;a[d>>0]=f}while(g>>>0>=10);return d|0}function dA(a){a=a|0;return mA(a,354180)|0}function eA(b,d){b=b|0;d=d|0;var e=0,f=0;e=(d|0)!=0;a:do if(e&(b&3|0)!=0)while(1){if(!(a[b>>0]|0))break a;b=b+1|0;d=d+-1|0;e=(d|0)!=0;if(!(e&(b&3|0)!=0)){f=5;break}}else f=5;while(0);b:do if((f|0)==5){do if(e){if(!(a[b>>0]|0))if(!d)break;else break b;c:do if(d>>>0>3)while(1){e=c[b>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break c;b=b+4|0;d=d+-4|0;if(d>>>0<=3){f=11;break}}else f=11;while(0);if((f|0)==11)if(!d)break;while(1){if(!(a[b>>0]|0))break b;d=d+-1|0;if(!d)break;else b=b+1|0}}while(0);b=0}while(0);return b|0}function fA(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=aa;aa=aa+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;uC(f|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){d=e;do{Yz(a,f,256);d=d+-256|0}while(d>>>0>255);e=e&255}Yz(a,f,e)}aa=g;return}function gA(a,b){a=a|0;b=b|0;if(!a)a=0;else a=lA(a,b)|0;return a|0}function hA(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,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=aa;aa=aa+560|0;m=H+32|0;t=H+536|0;G=H;F=G;l=H+540|0;c[t>>2]=0;E=l+12|0;iA(e)|0;j=z()|0;if((j|0)<0){e=-e;iA(e)|0;j=z()|0;D=1;B=331547}else{D=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?331548:331553):331550}do if(0==0&(j&2146435072|0)==2146435072){G=(i&32|0)!=0;j=D+3|0;fA(b,32,f,j,h&-65537);Yz(b,B,D);Yz(b,e!=e|0.0!=0.0?(G?331589:331574):G?331566:331570,3);fA(b,32,f,j,h^8192)}else{q=+jA(e,t)*2.0;j=q!=0.0;if(j)c[t>>2]=(c[t>>2]|0)+-1;w=i|32;if((w|0)==97){o=i&32;r=(o|0)==0?B:B+9|0;p=D|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[r>>0]|0)==45){e=-(e+(-q-e));break}else{e=q+e-e;break}}else e=q;while(0);k=c[t>>2]|0;j=(k|0)<0?0-k|0:k;j=cA(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=l+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;n=j+-2|0;a[n>>0]=i+15;k=(g|0)<1;l=(h&8|0)==0;j=G;while(1){D=~~e;m=j+1|0;a[j>>0]=o|d[281360+D>>0];e=(e-+(D|0))*16.0;if((m-F|0)==1?!(l&(k&e==0.0)):0){a[m>>0]=46;m=j+2|0}if(!(e!=0.0))break;else j=m}if((g|0)!=0?(-2-F+m|0)<(g|0):0){k=E;l=n;j=g+2+k-l|0}else{k=E;l=n;j=k-F-l+m|0}E=j+p|0;fA(b,32,f,E,h);Yz(b,r,p);fA(b,48,f,E,h^65536);F=m-F|0;Yz(b,G,F);G=k-l|0;fA(b,48,j-(F+G)|0,0,0);Yz(b,n,G);fA(b,32,f,E,h^8192);j=E;break}k=(g|0)<0?6:g;if(j){l=(c[t>>2]|0)+-28|0;c[t>>2]=l;e=q*268435456.0}else{l=c[t>>2]|0;e=q}C=(l|0)<0?m:m+288|0;m=C;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);y=C;if((l|0)>0){j=C;do{o=(l|0)<29?l:29;l=m+-4|0;if(l>>>0>=j>>>0){n=0;do{s=pC(c[l>>2]|0,0,o|0)|0;s=iC(s|0,z()|0,n|0,0)|0;u=z()|0;n=mC(s|0,u|0,1e9,0)|0;x=hC(n|0,z()|0,-1e9,-1)|0;x=iC(s|0,u|0,x|0,z()|0)|0;z()|0;c[l>>2]=x;l=l+-4|0}while(l>>>0>=j>>>0);if(n){j=j+-4|0;c[j>>2]=n}}a:do if(m>>>0>j>>>0)while(1){l=m+-4|0;if(c[l>>2]|0)break a;if(l>>>0>j>>>0)m=l;else{m=l;break}}while(0);l=(c[t>>2]|0)-o|0;c[t>>2]=l}while((l|0)>0)}else j=C;if((l|0)<0){g=((k+25|0)/9|0)+1|0;s=(w|0)==102;do{r=0-l|0;r=(r|0)<9?r:9;if(j>>>0<m>>>0){o=(1<<r)+-1|0;n=1e9>>>r;p=0;l=j;do{x=c[l>>2]|0;c[l>>2]=(x>>>r)+p;p=v(x&o,n)|0;l=l+4|0}while(l>>>0<m>>>0);j=(c[j>>2]|0)==0?j+4|0:j;if(p){c[m>>2]=p;m=m+4|0}}else j=(c[j>>2]|0)==0?j+4|0:j;l=s?C:j;m=(m-l>>2|0)>(g|0)?l+(g<<2)|0:m;l=(c[t>>2]|0)+r|0;c[t>>2]=l}while((l|0)<0);s=m}else s=m;if(j>>>0<s>>>0){l=(y-j>>2)*9|0;n=c[j>>2]|0;if(n>>>0>=10){m=10;do{m=m*10|0;l=l+1|0}while(n>>>0>=m>>>0)}}else l=0;t=(w|0)==103;u=(k|0)!=0;m=k-((w|0)==102?0:l)+((u&t)<<31>>31)|0;if((m|0)<(((s-y>>2)*9|0)+-9|0)){x=m+9216|0;m=(x|0)/9|0;g=C+4+(m+-1024<<2)|0;m=x+(v(m,-9)|0)|0;if((m|0)<8){n=10;while(1){n=n*10|0;if((m|0)<7)m=m+1|0;else break}}else n=10;o=c[g>>2]|0;m=(o>>>0)/(n>>>0)|0;r=v(m,n)|0;o=o-r|0;p=(g+4|0)==(s|0);if(!(p&(o|0)==0)){q=(m&1|0)==0?9007199254740992.0:9007199254740994.0;x=n>>>1;e=o>>>0<x>>>0?.5:p&(o|0)==(x|0)?1.0:1.5;if(D){x=(a[B>>0]|0)==45;q=x?-q:q;e=x?-e:e}c[g>>2]=r;if(q+e!=q){x=r+n|0;c[g>>2]=x;if(x>>>0>999999999){l=g;while(1){m=l+-4|0;c[l>>2]=0;if(m>>>0<j>>>0){j=j+-4|0;c[j>>2]=0}x=(c[m>>2]|0)+1|0;c[m>>2]=x;if(x>>>0>999999999)l=m;else break}}else m=g;l=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;l=l+1|0}while(o>>>0>=n>>>0)}}else m=g}else m=g;w=m+4|0;x=j;j=s>>>0>w>>>0?w:s}else{x=j;j=s}r=0-l|0;b:do if(j>>>0>x>>>0)while(1){m=j+-4|0;if(c[m>>2]|0){s=1;w=j;break b}if(m>>>0>x>>>0)j=m;else{s=0;w=m;break}}else{s=0;w=j}while(0);do if(t){j=k+((u^1)&1)|0;if((j|0)>(l|0)&(l|0)>-5){k=j+-1-l|0;n=i+-1|0}else{k=j+-1|0;n=i+-2|0}if(!(h&8)){if(s?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){j=10;m=0;do{j=j*10|0;m=m+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else m=0;else m=9;j=((w-y>>2)*9|0)+-9|0;if((n|32|0)==102){i=j-m|0;i=(i|0)>0?i:0;k=(k|0)<(i|0)?k:i;break}else{i=j+l-m|0;i=(i|0)>0?i:0;k=(k|0)<(i|0)?k:i;break}}}else n=i;while(0);g=(k|0)!=0;o=g?1:h>>>3&1;p=(n|32|0)==102;if(p){u=0;j=(l|0)>0?l:0}else{j=(l|0)<0?r:l;j=cA(j,((j|0)<0)<<31>>31,E)|0;m=E;if((m-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((m-j|0)<2);a[j+-1>>0]=(l>>31&2)+43;j=j+-2|0;a[j>>0]=n;u=j;j=m-j|0}j=D+1+k+o+j|0;fA(b,32,f,j,h);Yz(b,B,D);fA(b,48,f,j,h^65536);if(p){o=x>>>0>C>>>0?C:x;r=G+9|0;p=r;n=G+8|0;m=o;do{l=cA(c[m>>2]|0,0,r)|0;if((m|0)==(o|0)){if((l|0)==(r|0)){a[n>>0]=48;l=n}}else if(l>>>0>G>>>0){uC(G|0,48,l-F|0)|0;do l=l+-1|0;while(l>>>0>G>>>0)}Yz(b,l,p-l|0);m=m+4|0}while(m>>>0<=C>>>0);if(!((h&8|0)==0&(g^1)))Yz(b,331578,1);if(m>>>0<w>>>0&(k|0)>0)while(1){l=cA(c[m>>2]|0,0,r)|0;if(l>>>0>G>>>0){uC(G|0,48,l-F|0)|0;do l=l+-1|0;while(l>>>0>G>>>0)}Yz(b,l,(k|0)<9?k:9);m=m+4|0;l=k+-9|0;if(!(m>>>0<w>>>0&(k|0)>9)){k=l;break}else k=l}fA(b,48,k+9|0,9,0)}else{g=s?w:x+4|0;if(x>>>0<g>>>0&(k|0)>-1){r=G+9|0;t=(h&8|0)==0;s=r;n=0-F|0;p=G+8|0;o=x;do{l=cA(c[o>>2]|0,0,r)|0;if((l|0)==(r|0)){a[p>>0]=48;l=p}do if((o|0)==(x|0)){m=l+1|0;Yz(b,l,1);if(t&(k|0)<1){l=m;break}Yz(b,331578,1);l=m}else{if(l>>>0<=G>>>0)break;uC(G|0,48,l+n|0)|0;do l=l+-1|0;while(l>>>0>G>>>0)}while(0);F=s-l|0;Yz(b,l,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0<g>>>0&(k|0)>-1)}fA(b,48,k+18|0,18,0);Yz(b,u,E-u|0)}fA(b,32,f,j,h^8192)}while(0);aa=H;return ((j|0)<(f|0)?f:j)|0}function iA(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;y(c[h+4>>2]|0);return b|0}function jA(a,b){a=+a;b=b|0;return +(+kA(a,b))}function kA(a,b){a=+a;b=b|0;var d=0,e=0,f=0;g[h>>3]=a;d=c[h>>2]|0;e=c[h+4>>2]|0;f=oC(d|0,e|0,52)|0;z()|0;switch(f&2047){case 0:{if(a!=0.0){a=+kA(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[h>>2]=d;c[h+4>>2]=e&-2146435073|1071644672;a=+g[h>>3]}}return +a}function lA(b,d){b=b|0;d=d|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[88545]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[88534]=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[88534]=84;b=-1;break}}else b=1;while(0);return b|0}function mA(b,e){b=b|0;e=e|0;var f=0,g=0;f=0;while(1){if((d[281376+f>>0]|0)==(b|0)){b=4;break}f=f+1|0;if((f|0)==87){f=87;b=5;break}}if((b|0)==4)if(!f)f=281472;else b=5;if((b|0)==5){b=281472;do{do{g=b;b=b+1|0}while((a[g>>0]|0)!=0);f=f+-1|0}while((f|0)!=0);f=b}return nA(f,c[e+20>>2]|0)|0}function nA(a,b){a=a|0;b=b|0;return oA(a,b)|0}function oA(a,b){a=a|0;b=b|0;if(!b)b=0;else b=pA(c[b>>2]|0,c[b+4>>2]|0,a)|0;return ((b|0)==0?a:b)|0}function pA(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=qA(c[b+8>>2]|0,o)|0;f=qA(c[b+12>>2]|0,o)|0;g=qA(c[b+16>>2]|0,o)|0;a:do if((h>>>0<d>>>2>>>0?(n=d-(h<<2)|0,f>>>0<n>>>0&g>>>0<n>>>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=qA(c[b+(g<<2)>>2]|0,o)|0;g=qA(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0<d>>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=rA(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}l=f?l:j;h=f?k:h-k|0}f=i+m|0;g=qA(c[b+(f<<2)>>2]|0,o)|0;f=qA(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0<d>>>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 qA(a,b){a=a|0;b=b|0;var c=0;c=qC(a|0)|0;return ((b|0)==0?a:c)|0}function rA(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 sA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=e+16|0;f=c[g>>2]|0;if(!f){if(!(tA(e)|0)){f=c[g>>2]|0;h=5}}else h=5;a:do if((h|0)==5){i=e+20|0;h=c[i>>2]|0;g=h;if((f-h|0)>>>0<d>>>0){ga[c[e+36>>2]&127](e,b,d)|0;break}b:do if((a[e+75>>0]|0)<0|(d|0)==0)f=d;else{h=d;while(1){f=h+-1|0;if((a[b+f>>0]|0)==10)break;if(!f){f=d;break b}else h=f}if((ga[c[e+36>>2]&127](e,b,h)|0)>>>0<h>>>0)break a;g=c[i>>2]|0;f=d-h|0;b=b+h|0}while(0);sC(g|0,b|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while(0);return}function tA(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 uA(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;sC(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function vA(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function wA(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)c=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);c=(f&255)-(d[c>>0]|0)|0}return c|0}function xA(a){a=a|0;var b=0,e=0;e=aa;aa=aa+16|0;b=e;if((yA(a)|0)==0?(ga[c[a+32>>2]&127](a,b,1)|0)==1:0)b=d[b>>0]|0;else b=-1;aa=e;return b|0}function yA(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)ga[c[b+36>>2]&127](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 zA(a){a=a|0;var b=0;c[a+104>>2]=0;b=c[a+8>>2]|0;c[a+108>>2]=b-(c[a+4>>2]|0);c[a+100>>2]=b;return}function AA(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=xA(b)|0;if((e|0)>=0){g=c[f>>2]|0;j=c[b+8>>2]|0;if(g){f=b+4|0;i=c[f>>2]|0;h=g-(c[b+108>>2]|0)|0;g=j;if((j-i|0)<(h|0))k=9;else c[b+100>>2]=i+(h+-1)}else{f=b+4|0;g=j;k=9}if((k|0)==9)c[b+100>>2]=j;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;b=b+108|0;c[b>>2]=g+1-f+(c[b>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else k=4}if((k|0)==4){c[b+100>>2]=0;e=-1}return e|0}function BA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=aa;aa=aa+16|0;e=a;c[e>>2]=d;Wz(291736,b,e)|0;aa=a;return}function CA(a){a=a|0;return (a+-32|0)>>>0<95|0}function DA(b,e){b=b|0;e=e|0;var f=0.0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;switch(e|0){case 0:{j=24;k=-149;i=4;break}case 1:{j=53;k=-1074;i=4;break}case 2:{j=53;k=-1074;i=4;break}default:f=0.0}a:do if((i|0)==4){m=b+4|0;l=b+100|0;do{e=c[m>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[m>>2]=e+1;e=d[e>>0]|0}else e=AA(b)|0}while((vA(e)|0)!=0);b:do switch(e|0){case 43:case 45:{g=1-(((e|0)==45&1)<<1)|0;e=c[m>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[m>>2]=e+1;e=d[e>>0]|0;h=g;break b}else{e=AA(b)|0;h=g;break b}}default:h=1}while(0);g=e;e=0;while(1){if((g|32|0)!=(a[331580+e>>0]|0))break;do if(e>>>0<7){g=c[m>>2]|0;if(g>>>0<(c[l>>2]|0)>>>0){c[m>>2]=g+1;g=d[g>>0]|0;break}else{g=AA(b)|0;break}}while(0);e=e+1|0;if(e>>>0>=8){e=8;break}}c:do switch(e&2147483647|0){case 8:break;case 3:{i=23;break}default:{if(e>>>0>3)if((e|0)==8)break c;else{i=23;break c}d:do if(!e){e=0;do{if((g|32|0)!=(a[331589+e>>0]|0)){i=39;break d}do if(e>>>0<2){g=c[m>>2]|0;if(g>>>0<(c[l>>2]|0)>>>0){c[m>>2]=g+1;g=d[g>>0]|0;break}else{g=AA(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}else i=39;while(0);e:do if((i|0)==39){switch(e|0){case 3:break e;case 0:break;default:{if(c[l>>2]|0)c[m>>2]=(c[m>>2]|0)+-1;c[88534]=22;zA(b);f=0.0;break a}}if((g|0)==48){e=c[m>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[m>>2]=e+1;e=d[e>>0]|0}else e=AA(b)|0;if((e|32|0)==120){f=+EA(b,j,k,h);break a}if(!(c[l>>2]|0))e=48;else{c[m>>2]=(c[m>>2]|0)+-1;e=48}}else e=g;f=+FA(b,e,j,k,h);break a}while(0);e=c[m>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[m>>2]=e+1;e=d[e>>0]|0}else e=AA(b)|0;if((e|0)!=40){if(!(c[l>>2]|0)){f=r;break a}c[m>>2]=(c[m>>2]|0)+-1;f=r;break a}e=1;while(1){g=c[m>>2]|0;if(g>>>0<(c[l>>2]|0)>>>0){c[m>>2]=g+1;g=d[g>>0]|0}else g=AA(b)|0;if(!((g+-48|0)>>>0<10|(g+-65|0)>>>0<26)?!((g|0)==95|(g+-97|0)>>>0<26):0)break;e=e+1|0}if((g|0)==41){f=r;break a}g=(c[l>>2]|0)==0;if(!g)c[m>>2]=(c[m>>2]|0)+-1;if(!e){f=r;break a}while(1){e=e+-1|0;if(!g)c[m>>2]=(c[m>>2]|0)+-1;if(!e){f=r;break a}}}}while(0);if((i|0)==23){g=(c[l>>2]|0)==0;if(!g)c[m>>2]=(c[m>>2]|0)+-1;if(e>>>0>3)do{if(!g)c[m>>2]=(c[m>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}f=+(h|0)*s}while(0);return +f}function EA(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0;A=a+4|0;j=c[A>>2]|0;B=a+100|0;if(j>>>0<(c[B>>2]|0)>>>0){c[A>>2]=j+1;j=d[j>>0]|0}else j=AA(a)|0;o=0;a:while(1){switch(j|0){case 46:{C=10;break a}case 48:break;default:{l=0;m=0;p=0;break a}}j=c[A>>2]|0;if(j>>>0<(c[B>>2]|0)>>>0){c[A>>2]=j+1;j=d[j>>0]|0}else j=AA(a)|0;o=1}if((C|0)==10){j=c[A>>2]|0;if(j>>>0<(c[B>>2]|0)>>>0){c[A>>2]=j+1;j=d[j>>0]|0}else j=AA(a)|0;if((j|0)==48){l=0;m=0;do{j=c[A>>2]|0;if(j>>>0<(c[B>>2]|0)>>>0){c[A>>2]=j+1;j=d[j>>0]|0}else j=AA(a)|0;l=iC(l|0,m|0,-1,-1)|0;m=z()|0}while((j|0)==48);o=1;p=1}else{l=0;m=0;p=1}}x=0;w=0;t=j;u=0;n=1.0;j=0;g=0.0;while(1){s=t+-48|0;q=t|32;if(s>>>0>=10){r=(t|0)==46;if(!(r|(q+-97|0)>>>0<6)){q=t;break}if(r)if(!p){l=w;m=x;s=w;r=x;v=1;q=u;k=n}else{q=46;break}else C=24}else C=24;if((C|0)==24){C=0;o=(t|0)>57?q+-87|0:s;do if(!((x|0)<0|(x|0)==0&w>>>0<8))if((x|0)<0|(x|0)==0&w>>>0<14){n=n*.0625;q=u;k=n;g=g+n*+(o|0);break}else{v=(u|0)!=0|(o|0)==0;q=v?u:1;k=n;g=v?g:g+n*.5;break}else{q=u;k=n;j=o+(j<<4)|0}while(0);s=iC(w|0,x|0,1,0)|0;r=z()|0;o=1;v=p}p=c[A>>2]|0;if(p>>>0<(c[B>>2]|0)>>>0){c[A>>2]=p+1;p=d[p>>0]|0}else p=AA(a)|0;x=r;w=s;t=p;p=v;u=q;n=k}do if(!o){if(c[B>>2]|0?(y=c[A>>2]|0,c[A>>2]=y+-2,p|0):0)c[A>>2]=y+-3;g=+(f|0)*0.0}else{o=(p|0)==0;p=o?w:l;o=o?x:m;if((x|0)<0|(x|0)==0&w>>>0<8){m=w;l=x;do{j=j<<4;C=m;m=iC(m|0,l|0,1,0)|0;y=l;l=z()|0}while((y|0)<0|(y|0)==0&C>>>0<7)}if(!((q|32|0)==112?(i=GA(a)|0,h=z()|0,!((i|0)==0&(h|0)==-2147483648)):0))if(!(c[B>>2]|0)){i=0;h=0}else{c[A>>2]=(c[A>>2]|0)+-1;i=0;h=0}C=pC(p|0,o|0,2)|0;C=iC(C|0,z()|0,-32,-1)|0;h=iC(C|0,z()|0,i|0,h|0)|0;i=z()|0;if(!j){g=+(f|0)*0.0;break}C=0-e|0;B=((C|0)<0)<<31>>31;if((i|0)>(B|0)|(i|0)==(B|0)&h>>>0>C>>>0){c[88534]=34;g=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}C=e+-106|0;B=((C|0)<0)<<31>>31;if((i|0)<(B|0)|(i|0)==(B|0)&h>>>0<C>>>0){c[88534]=34;g=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((j|0)>-1){do{C=!(g>=.5);j=j<<1|(C^1)&1;g=g+(C?g:g+-1.0);h=iC(h|0,i|0,-1,-1)|0;i=z()|0}while((j|0)>-1);l=h;n=g}else{l=h;n=g}C=((b|0)<0)<<31>>31;h=jC(32,0,e|0,((e|0)<0)<<31>>31|0)|0;h=iC(h|0,z()|0,l|0,i|0)|0;e=z()|0;if((e|0)<(C|0)|(e|0)==(C|0)&h>>>0<b>>>0)if((h|0)>0)C=59;else{i=0;h=84;C=61}else{h=b;C=59}if((C|0)==59)if((h|0)<53){i=h;h=84-h|0;C=61}else{k=0.0;g=+(f|0)}if((C|0)==61){g=+(f|0);k=+IA(+HA(1.0,h),g);h=i}f=(j&1|0)==0&(n!=0.0&(h|0)<32);g=(f?0.0:n)*g+(k+g*+((j+(f&1)|0)>>>0))-k;if(!(g!=0.0))c[88534]=34;g=+KA(g,l)}while(0);return +g}function FA(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.0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0.0,u=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=aa;aa=aa+512|0;E=H;F=f+e|0;G=0-F|0;C=a+4|0;D=a+100|0;i=b;l=0;a:while(1){switch(i|0){case 46:{B=7;break a}case 48:break;default:{j=0;b=0;r=0;break a}}b=c[C>>2]|0;if(b>>>0<(c[D>>2]|0)>>>0){c[C>>2]=b+1;b=d[b>>0]|0}else b=AA(a)|0;i=b;l=1}if((B|0)==7){b=c[C>>2]|0;if(b>>>0<(c[D>>2]|0)>>>0){c[C>>2]=b+1;i=d[b>>0]|0}else i=AA(a)|0;if((i|0)==48){i=0;b=0;while(1){j=iC(i|0,b|0,-1,-1)|0;b=z()|0;i=c[C>>2]|0;if(i>>>0<(c[D>>2]|0)>>>0){c[C>>2]=i+1;i=d[i>>0]|0}else i=AA(a)|0;if((i|0)==48)i=j;else{l=1;r=1;break}}}else{j=0;b=0;r=1}}c[E>>2]=0;w=i+-48|0;m=(i|0)==46;b:do if(m|w>>>0<10){B=E+496|0;A=0;u=0;x=m;o=0;n=0;m=0;c:while(1){do if(x)if(!r){j=A;b=u;r=1}else break c;else{x=iC(A|0,u|0,1,0)|0;u=z()|0;y=(i|0)!=48;if((n|0)>=125){if(!y){A=x;break}c[B>>2]=c[B>>2]|1;A=x;break}l=E+(n<<2)|0;if(!o)i=w;else i=i+-48+((c[l>>2]|0)*10|0)|0;c[l>>2]=i;o=o+1|0;w=(o|0)==9;A=x;l=1;o=w?0:o;n=n+(w&1)|0;m=y?x:m}while(0);i=c[C>>2]|0;if(i>>>0<(c[D>>2]|0)>>>0){c[C>>2]=i+1;i=d[i>>0]|0}else i=AA(a)|0;w=i+-48|0;x=(i|0)==46;if(!(x|w>>>0<10)){B=31;break b}}r=A;i=(l|0)!=0;B=37}else{A=0;u=0;o=0;n=0;m=0;B=31}while(0);do if((B|0)==31){w=(r|0)==0;j=w?A:j;b=w?u:b;w=(l|0)!=0;if(!(w&(i|32|0)==101))if((i|0)>-1){r=A;i=w;B=37;break}else{r=A;l=u;i=w;B=39;break}l=GA(a)|0;i=z()|0;if((l|0)==0&(i|0)==-2147483648)if(!(c[D>>2]|0)){l=0;i=0}else{c[C>>2]=(c[C>>2]|0)+-1;l=0;i=0}j=iC(l|0,i|0,j|0,b|0)|0;r=A;b=z()|0;l=u;B=41}while(0);if((B|0)==37)if(c[D>>2]|0){c[C>>2]=(c[C>>2]|0)+-1;if(i){l=u;B=41}else B=40}else{l=u;B=39}if((B|0)==39)if(i)B=41;else B=40;do if((B|0)==40){c[88534]=22;zA(a);h=0.0}else if((B|0)==41){i=c[E>>2]|0;if(!i){h=+(g|0)*0.0;break}if(((l|0)<0|(l|0)==0&r>>>0<10)&((j|0)==(r|0)&(b|0)==(l|0))?(e|0)>30|(i>>>e|0)==0:0){h=+(g|0)*+(i>>>0);break}a=(f|0)/-2|0;D=((a|0)<0)<<31>>31;if((b|0)>(D|0)|(b|0)==(D|0)&j>>>0>a>>>0){c[88534]=34;h=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;D=((a|0)<0)<<31>>31;if((b|0)<(D|0)|(b|0)==(D|0)&j>>>0<a>>>0){c[88534]=34;h=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(!o)i=n;else{if((o|0)<9){l=E+(n<<2)|0;b=o;i=c[l>>2]|0;while(1){i=i*10|0;if((b|0)>=8)break;else b=b+1|0}c[l>>2]=i}i=n+1|0}if((m|0)<9?(m|0)<=(j|0)&(j|0)<18:0){if((j|0)==9){h=+(g|0)*+((c[E>>2]|0)>>>0);break}if((j|0)<9){h=+(g|0)*+((c[E>>2]|0)>>>0)/+(c[283280+(8-j<<2)>>2]|0);break}a=e+27+(v(j,-3)|0)|0;b=c[E>>2]|0;if((a|0)>30|(b>>>a|0)==0){h=+(g|0)*+(b>>>0)*+(c[283280+(j+-10<<2)>>2]|0);break}}b=(j|0)%9|0;if(!b)l=0;else{r=(j|0)>-1?b:b+9|0;b=c[283280+(8-r<<2)>>2]|0;if(i){n=1e9/(b|0)|0;l=0;m=0;o=0;do{C=E+(o<<2)|0;D=c[C>>2]|0;a=(D>>>0)/(b>>>0)|0;D=D-(v(a,b)|0)|0;a=a+m|0;c[C>>2]=a;m=v(n,D)|0;a=(o|0)==(l|0)&(a|0)==0;j=a?j+-9|0:j;l=a?l+1&127:l;o=o+1|0}while((o|0)!=(i|0));if(!m)b=i;else{c[E+(i<<2)>>2]=m;b=i+1|0}}else{l=0;b=0}j=9-r+j|0;i=b}b=0;d:while(1){x=(j|0)<18;y=(j|0)==18;w=E+(l<<2)|0;do{if(!x){if(!y)break d;if((c[w>>2]|0)>>>0>=9007199){j=18;break d}}n=0;m=i+127|0;while(1){r=m&127;o=E+(r<<2)|0;m=pC(c[o>>2]|0,0,29)|0;m=iC(m|0,z()|0,n|0,0)|0;n=z()|0;if(n>>>0>0|(n|0)==0&m>>>0>1e9){u=mC(m|0,n|0,1e9,0)|0;a=hC(u|0,z()|0,-1e9,-1)|0;m=iC(m|0,n|0,a|0,z()|0)|0;z()|0}else u=0;c[o>>2]=m;a=(r|0)==(l|0);o=(r|0)!=(i+127&127|0)|a?i:(m|0)==0?r:i;if(a)break;else{n=u;m=r+-1|0;i=o}}b=b+-29|0}while((u|0)==0);l=l+127&127;m=o+127&127;n=E+((o+126&127)<<2)|0;if((l|0)==(o|0)){c[n>>2]=c[n>>2]|c[E+(m<<2)>>2];i=m}c[E+(l<<2)>>2]=u;j=j+9|0}e:while(1){w=i+1&127;x=E+((i+127&127)<<2)|0;while(1){r=(j|0)==18;u=(j|0)>27?9:1;while(1){o=0;while(1){m=o+l&127;if((m|0)==(i|0)){B=90;break}m=c[E+(m<<2)>>2]|0;n=c[291984+(o<<2)>>2]|0;if(m>>>0<n>>>0){B=90;break}if(m>>>0>n>>>0)break;if((o+1|0)>>>0<2)o=1;else{B=90;break}}if((B|0)==90?(B=0,r):0)break e;b=u+b|0;if((l|0)==(i|0))l=i;else break}r=(1<<u)+-1|0;o=1e9>>>u;m=l;n=0;do{C=E+(l<<2)|0;D=c[C>>2]|0;a=(D>>>u)+n|0;c[C>>2]=a;n=v(D&r,o)|0;a=(l|0)==(m|0)&(a|0)==0;j=a?j+-9|0:j;m=a?m+1&127:m;l=l+1&127}while((l|0)!=(i|0));if(n|0){if((w|0)!=(m|0))break;c[x>>2]=c[x>>2]|1}l=m}c[E+(i<<2)>>2]=n;l=m;i=w}n=0;h=0.0;j=i;while(1){m=n+l&127;i=j+1&127;if((m|0)==(j|0))c[E+(i+-1<<2)>>2]=0;else i=j;h=h*1.0e9+ +((c[E+(m<<2)>>2]|0)>>>0);n=n+1|0;if((n|0)==2)break;else j=i}s=+(g|0);k=h*s;m=b+53|0;r=m-f|0;o=(r|0)<(e|0);n=o?((r|0)>0?r:0):e;if((n|0)<53){I=+IA(+HA(1.0,105-n|0),k);p=+JA(k,+HA(1.0,53-n|0));q=I;h=p;p=I+(k-p)}else{q=0.0;h=0.0;p=k}j=l+2&127;if((j|0)!=(i|0)){j=c[E+(j<<2)>>2]|0;do if(j>>>0>=5e8){if((j|0)!=5e8){h=s*.75+h;break}if((l+3&127|0)==(i|0)){h=s*.5+h;break}else{h=s*.75+h;break}}else{if((j|0)==0?(l+3&127|0)==(i|0):0)break;h=s*.25+h}while(0);if((53-n|0)>1?!(+JA(h,1.0)!=0.0):0)k=h+1.0;else k=h}else k=h;h=p+k-q;do if((m&2147483647|0)>(-2-F|0)){F=!(+t(+h)>=9007199254740992.0);b=b+((F^1)&1)|0;h=F?h:h*.5;if((b+50|0)<=(G|0)?!(k!=0.0&(o&((n|0)!=(r|0)|F))):0)break;c[88534]=34}while(0);h=+KA(h,b)}while(0);aa=H;return +h}function GA(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+4|0;b=c[i>>2]|0;j=a+100|0;if(b>>>0<(c[j>>2]|0)>>>0){c[i>>2]=b+1;b=d[b>>0]|0}else b=AA(a)|0;switch(b|0){case 43:case 45:{e=(b|0)==45&1;b=c[i>>2]|0;if(b>>>0<(c[j>>2]|0)>>>0){c[i>>2]=b+1;b=d[b>>0]|0}else b=AA(a)|0;if((b+-48|0)>>>0>9)if(!(c[j>>2]|0)){e=-2147483648;b=0}else{c[i>>2]=(c[i>>2]|0)+-1;f=14}else{h=e;f=12}break}default:if((b+-48|0)>>>0>9)if(!(c[j>>2]|0)){e=-2147483648;b=0}else f=14;else{h=0;f=12}}if((f|0)==12){f=0;while(1){f=b+-48+(f*10|0)|0;b=c[i>>2]|0;if(b>>>0<(c[j>>2]|0)>>>0){c[i>>2]=b+1;e=d[b>>0]|0}else e=AA(a)|0;g=(e+-48|0)>>>0<10;if(!(g&(f|0)<214748364))break;else b=e}b=((f|0)<0)<<31>>31;if(g){do{k=hC(f|0,b|0,10,0)|0;g=z()|0;e=iC(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;f=iC(e|0,z()|0,k|0,g|0)|0;b=z()|0;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=AA(a)|0;g=(e+-48|0)>>>0<10}while(g&((b|0)<21474836|(b|0)==21474836&f>>>0<2061584302));if(g)do{e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=AA(a)|0}while((e+-48|0)>>>0<10)}if(c[j>>2]|0)c[i>>2]=(c[i>>2]|0)+-1;j=(h|0)==0;k=jC(0,0,f|0,b|0)|0;e=z()|0;e=j?b:e;b=j?f:k}else if((f|0)==14){c[i>>2]=(c[i>>2]|0)+-1;e=-2147483648;b=0}y(e|0);return b|0}
+function mm(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,l=0,m=0,n=0;i=a+4|0;g=c[a>>2]|0;m=(c[i>>2]|0)-g|0;l=m>>3;e=l+1|0;if(e>>>0>536870911)HB();j=a+8|0;n=(c[j>>2]|0)-g|0;f=n>>2;f=n>>3>>>0<268435455?(f>>>0<e>>>0?e:f):536870911;do if(f)if(f>>>0>536870911)U();else{k=_A(f<<3)|0;h=k;break}else{h=0;k=0}while(0);e=k+(l<<3)|0;n=c[d>>2]|0;c[e>>2]=c[b>>2];c[k+(l<<3)+4>>2]=n;if((m|0)>0)sC(h|0,g|0,m|0)|0;c[a>>2]=k;c[i>>2]=e+8;c[j>>2]=k+(f<<3);if(!g)return;$A(g);return}function nm(a,b){a=a|0;b=b|0;var d=0;d=a<<24>>24;a=d+-48|0;do if(a>>>0>=10){if((d+-97|0)>>>0<6){a=d+-87|0;break}if((d+-65|0)>>>0<6){a=d+-55|0;break}else{b=1;return b|0}}while(0);c[b>>2]=a;b=0;return b|0}function om(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((b|0)==(d|0)){e=1;return e|0}f=a[b>>0]|0;a:do if((f<<24>>24==48?(g=b+1|0,g>>>0<d>>>0):0)?(a[g>>0]|0)==120:0){f=b+2|0;if((f|0)==(d|0)){e=1;return e|0}if(f>>>0<d>>>0){h=0;i=0;b:while(1){g=a[f>>0]|0;c:do if(g<<24>>24!=95){b=g<<24>>24;g=b+-48|0;do if(g>>>0>=10)if((b+-97|0)>>>0>=6)if((b+-65|0)>>>0<6){g=b+-55|0;break}else{b=i;g=1;break c}else{g=b+-87|0;break}while(0);if(!(h>>>0>268435455|(h|0)==268435455&i>>>0>4294967295))if((i|0)==-1&(h|0)==268435455&g>>>0>15){b=-1;h=268435455;g=1}else{b=pC(i|0,h|0,4)|0;b=iC(b|0,z()|0,g|0,0)|0;h=z()|0;g=0}else{b=i;g=1}}else{b=i;g=4}while(0);switch(g&7){case 4:case 0:break;default:break b}f=f+1|0;if(f>>>0<d>>>0)i=b;else{g=b;break a}}if(!g)g=b;else{e=1;return e|0}}else{g=0;h=0}}else j=19;while(0);d:do if((j|0)==19)if(b>>>0<d>>>0){h=0;g=0;while(1){if(f<<24>>24!=95){f=(f<<24>>24)+-48|0;if(h>>>0>429496729|(h|0)==429496729&g>>>0>2576980377|f>>>0>9){f=1;j=29;break}if((g|0)==-1717986919&(h|0)==429496729&f>>>0>5){f=1;j=29;break}g=hC(g|0,h|0,10,0)|0;g=iC(g|0,z()|0,f|0,0)|0;h=z()|0}b=b+1|0;if(b>>>0>=d>>>0){f=b;break d}f=a[b>>0]|0}if((j|0)==29)return f|0}else{g=0;h=0;f=b}while(0);if((f|0)!=(d|0)){e=1;return e|0}c[e>>2]=g;c[e+4>>2]=h;e=0;return e|0}function pm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a[b>>0]|0;switch(f<<24>>24){case 43:case 45:{g=f<<24>>24==45;f=b+1|0;break}default:{g=0;f=b}}b=h;c[b>>2]=0;c[b+4>>2]=0;d=om(f,d,h)|0;f=h;b=c[f>>2]|0;f=c[f+4>>2]|0;do if(g)if(f>>>0>2147483648|(f|0)==-2147483648&b>>>0>0){e=1;aa=i;return e|0}else{b=jC(0,0,b|0,f|0)|0;f=z()|0;c[h>>2]=b;c[h+4>>2]=f;break}while(0);c[e>>2]=b;c[e+4>>2]=f;e=d;aa=i;return e|0}function qm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a[b>>0]|0;switch(f<<24>>24){case 43:case 45:{g=f<<24>>24==45;f=b+1|0;break}default:{g=0;f=b}}if((om(f,d,h)|0)==1){e=1;aa=i;return e|0}b=h;f=c[b>>2]|0;b=c[b+4>>2]|0;do if(g)if(b>>>0>0|(b|0)==0&f>>>0>128){e=1;aa=i;return e|0}else{f=jC(256,0,f|0,b|0)|0;g=z()|0;c[h>>2]=f;c[h+4>>2]=g;f=f&255;break}else if(b>>>0>0|(b|0)==0&f>>>0>255){e=1;aa=i;return e|0}else f=f&255;while(0);a[e>>0]=f;e=0;aa=i;return e|0}function rm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a[d>>0]|0;switch(g<<24>>24){case 43:case 45:{h=g<<24>>24==45;g=d+1|0;break}default:{h=0;g=d}}if((om(g,e,i)|0)==1){f=1;aa=j;return f|0}d=i;g=c[d>>2]|0;d=c[d+4>>2]|0;do if(h)if(d>>>0>0|(d|0)==0&g>>>0>32768){f=1;aa=j;return f|0}else{g=jC(65536,0,g|0,d|0)|0;h=z()|0;c[i>>2]=g;c[i+4>>2]=h;g=g&65535;break}else if(d>>>0>0|(d|0)==0&g>>>0>65535){f=1;aa=j;return f|0}else g=g&65535;while(0);b[f>>1]=g;f=0;aa=j;return f|0}function sm(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;j=aa;aa=aa+16|0;i=j;g=a[b>>0]|0;switch(g<<24>>24){case 43:case 45:{if(!f)b=1;else{f=g<<24>>24==45;b=b+1|0;h=4}break}default:{f=0;h=4}}do if((h|0)==4)if((om(b,d,i)|0)==1)b=1;else{g=i;b=c[g>>2]|0;g=c[g+4>>2]|0;if(!f){if(g>>>0>0|(g|0)==0&b>>>0>4294967295){b=1;break}}else{if(g>>>0>0|(g|0)==0&b>>>0>2147483648){b=1;break}b=jC(0,1,b|0,g|0)|0;h=z()|0;c[i>>2]=b;c[i+4>>2]=h}c[e>>2]=b;b=0}while(0);aa=j;return b|0}function tm(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,n=0;switch(b|0){case 1:case 0:{f=um(d,e,f)|0;return f|0}case 2:{switch(a[d>>0]|0){case 45:{n=-2147483648;d=d+1|0;break}case 43:{n=0;d=d+1|0;break}default:n=0}d=d+2|0;if(d>>>0<e>>>0){j=0;g=0;l=0;k=0;a:while(1){b=a[d>>0]|0;b:do switch(b<<24>>24){case 95:{i=j;h=l;b=k;break}case 46:{i=1;h=l;b=k;m=16;break}default:{b=b<<24>>24;h=b+-48|0;do if(h>>>0>=10)if((b+-97|0)>>>0>=6)if((b+-65|0)>>>0<6){h=b+-55|0;break}else{i=1;break a}else{h=b+-87|0;break}while(0);if((32-(w(l|0)|0)|0)<25){i=j;h=h+(l<<4)|0;b=j?k+-4|0:k;m=16;break b}else{i=j;g=g<<24>>24==0&(h|0)!=0?1:g;h=l;b=j?k:k+4|0;m=16;break b}}}while(0);if((m|0)==16)m=0;d=d+1|0;if(d>>>0<e>>>0){j=i;l=h;k=b}else{i=0;l=h;k=b;break}}if(l|0){if(i){b=d+1|0;switch(a[b>>0]|0){case 45:{j=1;b=d+2|0;i=0-k|0;break}case 43:{j=0;b=d+2|0;i=k;break}default:{j=0;i=0}}c:do if(b>>>0<e>>>0){d=0;do{h=a[b>>0]|0;if(h<<24>>24!=95){d=(d*10|0)+-48+(h<<24>>24)|0;if((d+i|0)>=128)break c}b=b+1|0}while(b>>>0<e>>>0)}else d=0;while(0);d=j?0-d|0:d}else d=0;i=32-(w(l|0)|0)|0;h=i+k+d|0;b=h+-1|0;if((b|0)>=-126){if((i|0)>24){d=i+-24|0;d=((g<<24>>24!=0|(1<<d&l|0)!=0?1<<i+-25:0)+l|0)>>>d;b=d>>>0>16777215?h:b}else d=l<<((i|0)==24?0:24-i|0);if((b|0)>127){f=1;return f|0}c[f>>2]=d&8388607|n|(b<<23)+1065353216;f=0;return f|0}if((i|0)>23){g=(((1<<i+-24)+-1&l|0)!=0|g&255)&255;d=l>>>(i+-23|0)}else d=l<<((i|0)==23?0:23-i|0);b=-126-h|0;if((b|0)<24){if(b){e=1<<b+-1;d=(((d&1<<b|g&255|(d&e+-1|0)!=0|0)==0?0:e)+d|0)>>>b&8388607}if(d|0){c[f>>2]=d|n;f=0;return f|0}}c[f>>2]=n;f=0;return f|0}}c[f>>2]=n;f=0;return f|0}case 3:{c[f>>2]=((a[d>>0]|0)==45&1)<<31|2139095040;f=0;return f|0}case 4:{switch(a[d>>0]|0){case 45:{i=-8388608;d=d+1|0;break}case 43:{i=2139095040;d=d+1|0;break}default:i=2139095040}do if((d+3|0)!=(e|0)){d=d+6|0;if(d>>>0>=e>>>0){f=1;return f|0}b=0;d:while(1){g=a[d>>0]|0;if(g<<24>>24!=95){h=g<<24>>24;g=h+-48|0;do if(g>>>0>=10)if((h+-97|0)>>>0>=6)if((h+-65|0)>>>0<6){g=h+-55|0;break}else{d=1;m=62;break d}else{g=h+-87|0;break}while(0);b=g+(b<<4)|0;if(b>>>0>8388607){d=1;m=62;break}}d=d+1|0;if(d>>>0>=e>>>0){m=59;break}}if((m|0)==59){if(!b)d=1;else{d=b;break}return d|0}else if((m|0)==62)return d|0}else d=4194304;while(0);c[f>>2]=d|i;f=0;return f|0}default:U()}return 0}function um(b,d,e){b=b|0;d=d|0;e=e|0;var g=0.0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;j=aa;aa=aa+((1*(1-b+d|0)|0)+15&-16)|0;if((b|0)==(d|0))b=j;else{i=b;b=j;do{h=a[i>>0]|0;if(h<<24>>24!=95){a[b>>0]=h;b=b+1|0}i=i+1|0}while((i|0)!=(d|0))}a[b>>0]=0;g=+QA(j,k);if(g==-s|(g==s?1:(c[k>>2]|0)!=(b|0))){e=1;aa=l;return e|0}f[e>>2]=g;e=0;aa=l;return e|0}function vm(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,n=0,o=0;switch(b|0){case 1:case 0:{f=wm(d,e,f)|0;return f|0}case 2:{switch(a[d>>0]|0){case 45:{n=0;o=-2147483648;b=d+1|0;break}case 43:{n=0;o=0;b=d+1|0;break}default:{n=0;o=0;b=d}}b=b+2|0;if(b>>>0<e>>>0){i=0;j=0;m=0;h=0;l=0;a:while(1){d=a[b>>0]|0;b:do switch(d<<24>>24){case 95:{k=m;d=l;break}case 46:{k=1;d=l;g=16;break}default:{d=d<<24>>24;g=d+-48|0;do if(g>>>0>=10)if((d+-97|0)>>>0>=6)if((d+-65|0)>>>0<6){g=d+-55|0;break}else{m=i;g=1;break a}else{g=d+-87|0;break}while(0);k=rC(i|0,j|0,0)|0;z()|0;if((64-k|0)<54){i=pC(i|0,j|0,4)|0;i=iC(i|0,z()|0,g|0,0)|0;j=z()|0;k=m;d=m?l+-4|0:l;g=16;break b}else{k=m;h=h<<24>>24==0&(g|0)!=0?1:h;d=m?l:l+4|0;g=16;break b}}}while(0);if((g|0)==16)g=0;b=b+1|0;if(b>>>0<e>>>0){m=k;l=d}else{m=i;g=0;l=d;break}}if(!((m|0)==0&(j|0)==0)){if(g){d=b+1|0;switch(a[d>>0]|0){case 45:{k=1;d=b+2|0;i=0-l|0;break}case 43:{k=0;d=b+2|0;i=l;break}default:{k=0;i=0}}c:do if(d>>>0<e>>>0){b=0;do{g=a[d>>0]|0;if(g<<24>>24!=95){b=(b*10|0)+-48+(g<<24>>24)|0;if((b+i|0)>=1024)break c}d=d+1|0}while(d>>>0<e>>>0)}else b=0;while(0);b=k?0-b|0:b}else b=0;d=rC(m|0,j|0,0)|0;z()|0;d=64-d|0;i=d+l+b|0;b=i+-1|0;if((b|0)>=-1022){if((d|0)>53){e=d+-53|0;g=pC(1,0,e|0)|0;g=h<<24>>24!=0|((g&m|0)!=0|((z()|0)&j|0)!=0);l=pC(1,0,d+-54|0)|0;d=z()|0;m=iC((g?l:0)|0,(g?d:0)|0,m|0,j|0)|0;e=oC(m|0,z()|0,e|0)|0;m=z()|0;d=m;g=e;b=m>>>0>2097151|(m|0)==2097151&e>>>0>4294967295?i:b}else{g=pC(m|0,j|0,((d|0)==53?0:53-d|0)|0)|0;d=z()|0}if((b|0)>1023){f=1;return f|0}m=pC(b+1023|0,0,52)|0;e=d&1048575|o|(z()|0);c[f>>2]=g|n|m;c[f+4>>2]=e;f=0;return f|0}if((d|0)>52){b=pC(1,0,d+-53|0)|0;b=iC(b|0,z()|0,-1,-1)|0;h=(((b&m|0)!=0|((z()|0)&j|0)!=0)&1|h&255)&255;d=oC(m|0,j|0,d+-52|0)|0;b=z()|0}else{d=pC(m|0,j|0,((d|0)==52?0:52-d|0)|0)|0;b=z()|0}g=-1022-i|0;if((g|0)<53){if(g){l=pC(1,0,g+-1|0)|0;e=z()|0;m=iC(l|0,e|0,-1,-1)|0;m=(((d&m|0)!=0|(b&(z()|0)|0)!=0)&1|h&255|0)!=0;k=pC(1,0,g|0)|0;m=(d&k|0)!=0|(b&(z()|0)|0)!=0|m;d=iC((m?l:0)|0,(m?e:0)|0,d|0,b|0)|0;d=oC(d|0,z()|0,g|0)|0;b=(z()|0)&1048575}if(!((d|0)==0&(b|0)==0)){c[f>>2]=d|n;c[f+4>>2]=b|o;f=0;return f|0}}c[f>>2]=n;c[f+4>>2]=o;f=0;return f|0}}c[f>>2]=n;c[f+4>>2]=o;f=0;return f|0}case 3:{o=pC((a[d>>0]|0)==45|0,0,63)|0;e=z()|0|2146435072;c[f>>2]=o;c[f+4>>2]=e;f=0;return f|0}case 4:{switch(a[d>>0]|0){case 45:{j=0;k=-1048576;b=d+1|0;break}case 43:{j=0;k=2146435072;b=d+1|0;break}default:{j=0;k=2146435072;b=d}}do if((b+3|0)!=(e|0)){g=b+6|0;if(g>>>0>=e>>>0){f=1;return f|0}d=0;b=0;d:while(1){h=a[g>>0]|0;if(h<<24>>24!=95){i=h<<24>>24;h=i+-48|0;do if(h>>>0>=10)if((i+-97|0)>>>0>=6)if((i+-65|0)>>>0<6){h=i+-55|0;break}else{b=1;g=62;break d}else{h=i+-87|0;break}while(0);d=pC(d|0,b|0,4)|0;d=iC(d|0,z()|0,h|0,0)|0;b=z()|0;if(b>>>0>1048575|(b|0)==1048575&d>>>0>4294967295){b=1;g=62;break}}g=g+1|0;if(g>>>0>=e>>>0){g=59;break}}if((g|0)==59){if((d|0)==0&(b|0)==0)b=1;else break;return b|0}else if((g|0)==62)return b|0}else{d=0;b=524288}while(0);c[f>>2]=d|j;c[f+4>>2]=b|k;f=0;return f|0}default:U()}return 0}function wm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;j=aa;aa=aa+((1*(1-b+d|0)|0)+15&-16)|0;if((b|0)==(d|0))b=j;else{i=b;b=j;do{h=a[i>>0]|0;if(h<<24>>24!=95){a[b>>0]=h;b=b+1|0}i=i+1|0}while((i|0)!=(d|0))}a[b>>0]=0;f=+SA(j,k);if(f==-s|(f==s?1:(c[k>>2]|0)!=(b|0))){e=1;aa=l;return e|0}g[e>>3]=f;e=0;aa=l;return e|0}function xm(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+32|0;j=k;d=c>>>23&255;f=d+-127|0;e=c&8388607;if((c|0)<0){a[j>>0]=45;h=j+1|0}else h=j;do if((f|0)==128){if(!e){a[h>>0]=105;a[h+1>>0]=110;a[h+2>>0]=102;a[h+3>>0]=0;c=h+3|0;break}a[h>>0]=110;a[h+1>>0]=97;a[h+2>>0]=110;a[h+3>>0]=0;c=h+3|0;if((e|0)!=4194304){a[c>>0]=58;a[c+1>>0]=48;a[c+2>>0]=120;a[c+3>>0]=0;f=8;while(1){e=e<<4;d=f+-1|0;if(e>>>0>=268435456)break;else f=d}c=h+6|0;if(d){while(1){a[c>>0]=a[16672+(e>>>28)>>0]|0;d=d+-1|0;if(!d)break;else{c=c+1|0;e=e<<4}}c=h+(f+5)|0}}}else{g=(d|e|0)==0;a[h>>0]=48;a[h+1>>0]=120;e=h+3|0;a[h+2>>0]=g?48:49;c=c<<9;do if(c){if(!d){l=w(c|0)|0;c=c<<l+1;f=f-l|0;d=h+4|0;a[e>>0]=46;if(l>>>0>30|(c|0)==0){e=d;break}}else{a[e>>0]=46;d=h+4|0}while(1){e=d+1|0;a[d>>0]=a[16672+(c>>>28)>>0]|0;c=c<<4;if(!c)break;else d=e}}while(0);d=e+1|0;a[e>>0]=112;if(g){a[d>>0]=a[300521]|0;a[d+1>>0]=a[300522]|0;a[d+2>>0]=a[300523]|0;c=e+3|0;break}c=e+2|0;if((f|0)<0){a[d>>0]=45;d=0-f|0}else{a[d>>0]=43;d=f}if((d|0)<=999)if((d|0)<=99){if((d|0)>9)i=28}else i=26;else{a[c>>0]=49;c=e+3|0;i=26}if((i|0)==26){a[c>>0]=(((d>>>0)/100|0)>>>0)%10|0|48;c=c+1|0;i=28}if((i|0)==28){a[c>>0]=(((d>>>0)/10|0)>>>0)%10|0|48;c=c+1|0}a[c>>0]=((d|0)%10|0)+48;c=c+1|0}while(0);l=c-j|0;l=l>>>0<127?l:127;sC(b|0,j|0,l|0)|0;a[b+l>>0]=0;aa=k;return}function ym(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+48|0;m=n;e=oC(c|0,d|0,52)|0;z()|0;e=e&2047;h=e+-1023|0;f=d&1048575;if((d|0)<0){a[m>>0]=45;k=m+1|0}else k=m;g=(c|0)==0&(f|0)==0;do if((h|0)==1024){if(g){a[k>>0]=105;a[k+1>>0]=110;a[k+2>>0]=102;a[k+3>>0]=0;e=k+3|0;break}a[k>>0]=110;a[k+1>>0]=97;a[k+2>>0]=110;a[k+3>>0]=0;e=k+3|0;if(!((c|0)==0&(f|0)==524288)){a[e>>0]=58;a[e+1>>0]=48;a[e+2>>0]=120;a[e+3>>0]=0;h=16;while(1){c=pC(c|0,f|0,4)|0;f=z()|0;g=h+-1|0;if(!(f>>>0<268435456|(f|0)==268435456&c>>>0<0))break;else h=g}e=k+6|0;if(g){while(1){l=oC(c|0,f|0,60)|0;z()|0;a[e>>0]=a[16672+l>>0]|0;c=pC(c|0,f|0,4)|0;f=z()|0;g=g+-1|0;if(!g)break;else e=e+1|0}e=k+(h+5)|0}}}else{i=(e|0)==0;j=g&i;a[k>>0]=48;a[k+1>>0]=120;f=k+3|0;a[k+2>>0]=j?48:49;e=pC(c|0,d|0,12)|0;c=z()|0;do if((e|0)==0&(c|0)==0)g=h;else{if(i){i=rC(e|0,c|0,0)|0;g=iC(i|0,z()|0,1,0)|0;z()|0;g=pC(e|0,c|0,g|0)|0;c=z()|0;h=h-i|0;e=k+4|0;a[f>>0]=46;if(i>>>0>62|(g|0)==0&(c|0)==0){g=h;f=e;break}}else{a[f>>0]=46;g=e;e=k+4|0}while(1){k=oC(g|0,c|0,60)|0;z()|0;f=e+1|0;a[e>>0]=a[16672+k>>0]|0;g=pC(g|0,c|0,4)|0;c=z()|0;if((g|0)==0&(c|0)==0){g=h;break}else e=f}}while(0);c=f+1|0;a[f>>0]=112;if(j){a[c>>0]=a[300521]|0;a[c+1>>0]=a[300522]|0;a[c+2>>0]=a[300523]|0;e=f+3|0;break}e=f+2|0;if((g|0)<0){a[c>>0]=45;c=0-g|0}else{a[c>>0]=43;c=g}if((c|0)<=999)if((c|0)<=99){if((c|0)>9)l=28}else l=26;else{a[e>>0]=49;e=f+3|0;l=26}if((l|0)==26){a[e>>0]=(((c>>>0)/100|0)>>>0)%10|0|48;e=e+1|0;l=28}if((l|0)==28){a[e>>0]=(((c>>>0)/10|0)>>>0)%10|0|48;e=e+1|0}a[e>>0]=((c|0)%10|0)+48;e=e+1|0}while(0);l=e-m|0;l=l>>>0<127?l:127;sC(b|0,m|0,l|0)|0;a[b+l>>0]=0;aa=n;return}function zm(b,d){b=b|0;d=d|0;var 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;p=aa;aa=aa+80|0;m=p+72|0;o=p+32|0;l=p;i=d+12|0;j=d+4|0;k=d+8|0;e=c[i>>2]|0;f=c[j>>2]|0;g=c[d>>2]|0;h=c[k>>2]|0;n=0;do{r=e;e=mC(e|0,0,10,0)|0;q=z()|0;t=hC(e|0,q|0,-10,-1)|0;r=iC(t|0,z()|0,r|0,0)|0;z()|0;c[i>>2]=e;t=h;h=mC(h|0,r|0,10,0)|0;r=z()|0;w=hC(h|0,r|0,-10,-1)|0;t=iC(w|0,z()|0,t|0,0)|0;z()|0;c[k>>2]=h;w=f;f=mC(f|0,t|0,10,0)|0;t=z()|0;v=hC(f|0,t|0,-10,-1)|0;w=iC(v|0,z()|0,w|0,0)|0;z()|0;c[j>>2]=f;v=g;g=mC(g|0,w|0,10,0)|0;s=z()|0;u=hC(g|0,s|0,-10,-1)|0;w=iC(u|0,z()|0,v|0,w|0)|0;v=z()|0;c[d>>2]=g;u=m;c[u>>2]=w;c[u+4>>2]=v;Sz(l,21,312369,m)|0;u=Uz(l)|0;sC(o+n|0,l|0,u|0)|0;n=u+n|0}while((f|g|h|e|0)!=0);e=n>>>0<128;h=e?n:127;e=e?0:n+-127|0;g=o+e|0;e=o+h+e|0;if((e|0)==(g|0)){w=b+h|0;a[w>>0]=0;aa=p;return}f=b;while(1){e=e+-1|0;a[f>>0]=a[e>>0]|0;if((e|0)==(g|0))break;else f=f+1|0}w=b+h|0;a[w>>0]=0;aa=p;return}function Am(b,d){b=b|0;d=d|0;var e=0;if(d>>>0<422){d=384+(d*36|0)|0;e=b+36|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));return}else{e=0-d|0;c[b>>2]=c[3894];c[b+4>>2]=c[3895];c[b+8>>2]=c[3896];c[b+12>>2]=c[3897];c[b+16>>2]=c[3898];c[b+20>>2]=c[3899];a[b+24>>0]=e>>>8;d=b+25|0;a[d>>0]=a[15601]|0;a[d+1>>0]=a[15602]|0;a[d+2>>0]=a[15603]|0;c[b+28>>2]=e&255;c[b+32>>2]=e&65535;return}}function Bm(a,b){a=a|0;b=b|0;return ((b|0)==-1?1:(c[(a>>>0<422?384+(a*36|0)+20|0:15596)>>2]|0)==(b|0))|0}function Cm(a,b){a=a|0;b=b|0;if((b|0)!=-1){a=b;return a|0}a=c[a>>2]|0;a=c[(a>>>0<422?384+(a*36|0)+20|0:15596)>>2]|0;return a|0}function Dm(b,c){b=b|0;c=c|0;switch(b|0){case 10:case 9:case 8:case 7:case 6:{c=(a[c>>0]|0)!=0;break}case 18:case 19:{c=(a[c+7>>0]|0)!=0;break}case 196:case 195:case 194:case 193:case 192:case 191:case 190:case 189:{c=(a[c+2>>0]|0)!=0;break}case 183:case 182:case 181:case 180:case 179:{c=(a[c+3>>0]|0)!=0;break}case 421:case 420:case 419:case 418:case 417:case 416:case 415:case 414:case 413:case 412:case 411:case 410:case 409:case 408:case 407:case 406:case 405:case 404:case 403:case 402:case 401:case 400:case 399:case 398:case 397:case 396:case 395:case 394:case 393:case 392:case 391:case 390:case 389:case 388:case 387:case 386:case 385:case 384:case 383:case 382:case 381:case 380:case 379:case 378:case 377:case 376:case 375:case 374:case 373:case 372:case 371:case 370:case 369:case 368:case 367:case 366:case 365:case 364:case 363:case 362:case 361:case 360:case 359:case 358:case 357:case 356:{c=(a[c+5>>0]|0)!=0;break}case 355:case 354:case 353:case 352:case 351:case 350:case 345:case 344:case 343:case 342:case 349:case 348:case 347:case 346:case 335:case 326:case 338:case 329:case 339:case 330:case 337:case 328:case 336:case 327:case 341:case 332:case 340:case 331:case 333:case 324:case 334:case 325:case 275:case 269:case 263:case 262:case 253:case 252:case 243:case 242:case 273:case 267:case 259:case 258:case 249:case 248:case 239:case 238:case 274:case 268:case 261:case 260:case 251:case 250:case 241:case 240:case 272:case 266:case 257:case 256:case 247:case 246:case 237:case 236:case 271:case 265:case 255:case 245:case 235:case 270:case 264:case 254:case 244:case 234:case 318:case 309:case 296:case 283:case 317:case 308:case 295:case 282:case 280:case 276:case 279:case 278:case 277:case 321:case 320:case 312:case 311:case 299:case 298:case 286:case 285:case 319:case 310:case 297:case 284:case 305:case 304:case 292:case 291:case 302:case 301:case 289:case 288:case 316:case 307:case 294:case 281:case 315:case 306:case 293:case 323:case 314:case 303:case 290:case 322:case 313:case 300:case 287:case 233:case 230:case 227:case 224:case 221:case 217:case 232:case 229:case 226:case 223:case 220:case 219:case 216:case 215:case 231:case 228:case 225:case 222:case 218:case 214:case 212:case 211:case 213:{c=(a[c+4>>0]|0)!=0;break}case 203:case 202:case 201:case 200:case 199:case 198:case 197:{c=(a[c+8>>0]|0)!=0;break}case 209:case 208:case 207:case 206:case 205:case 204:{c=(a[c+9>>0]|0)!=0;break}case 188:case 187:case 186:case 185:case 184:{c=0;break}default:c=1}return c|0}function Em(a){a=a|0;var b=0;switch(a|0){case 217:case 216:case 215:{b=16;break}case 221:case 220:case 219:{b=8;break}case 224:case 223:case 230:case 229:{b=4;break}case 227:case 226:case 233:case 232:{b=2;break}default:U()}return b|0}function Fm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=aa;aa=aa+16|0;j=k;c[b>>2]=0;h=b+4|0;c[h>>2]=0;i=b+8|0;c[i>>2]=0;g=d>>>0<422;if(g)e=a[384+(d*36|0)+24>>0]|0;else e=(0-d|0)>>>8&255;if(!(e<<24>>24)){if(g)e=c[384+(d*36|0)+28>>2]|0;else e=0-d&255;d=_A(1)|0;j=d+1|0;a[d>>0]=e;c[b>>2]=d;c[h>>2]=j;c[i>>2]=j;aa=k;return}if(g)e=a[384+(d*36|0)+24>>0]|0;else e=(0-d|0)>>>8&255;m=_A(1)|0;f=m+1|0;l=f;a[m>>0]=e;c[b>>2]=m;c[h>>2]=l;c[i>>2]=l;if(g)e=c[384+(d*36|0)+28>>2]|0;else e=0-d&255;Gm(b,f,j,j+(Xl(j,j+5|0,e)|0)|0);aa=k;return}function Gm(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,n=0,o=0,p=0,q=0,r=0;q=e;k=c[b>>2]|0;l=k;o=d;h=o-l|0;j=f;m=j-q|0;if((m|0)<=0)return;p=b+8|0;i=c[p>>2]|0;r=b+4|0;n=c[r>>2]|0;g=n;if((m|0)<=(i-g|0)){i=g-o|0;do if((m|0)>(i|0)){h=e+i|0;g=j-h|0;if((g|0)>0){sC(n|0,h|0,g|0)|0;g=(c[r>>2]|0)+g|0;c[r>>2]=g}else g=n;if((i|0)>0){j=g;f=h;break}else return}else j=n;while(0);i=g-(d+m)|0;g=d+i|0;if(g>>>0<n>>>0){h=j;do{a[h>>0]=a[g>>0]|0;g=g+1|0;h=(c[r>>2]|0)+1|0;c[r>>2]=h}while((g|0)!=(n|0))}if(i|0)tC(j+(0-i)|0,d|0,i|0)|0;g=f-q|0;if(!g)return;tC(d|0,e|0,g|0)|0;return}g=g-l+m|0;if((g|0)<0)HB();m=i-l|0;n=m<<1;g=m>>>0<1073741823?(n>>>0<g>>>0?g:n):2147483647;if(!g)j=0;else j=_A(g)|0;m=j+h|0;n=j+g|0;if((e|0)==(f|0)){f=k;g=m}else{i=f+(o-q-l)|0;h=m;g=e;while(1){a[h>>0]=a[g>>0]|0;g=g+1|0;if((g|0)==(f|0))break;else h=h+1|0}h=c[b>>2]|0;f=h;g=j+i|0;h=o-h|0}i=m+(0-h)|0;if((h|0)>0)sC(i|0,f|0,h|0)|0;h=(c[r>>2]|0)-o|0;if((h|0)>0){sC(g|0,d|0,h|0)|0;g=g+h|0}c[b>>2]=i;c[r>>2]=g;c[p>>2]=n;if(!f)return;$A(f);return}function Hm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+80|0;h=i;c[h>>2]=289392;c[h+4>>2]=d;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;Jj(h+20|0,h);g=h+60|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;g=Im(h,b)|0;c[h>>2]=289392;b=h+60|0;e=c[b>>2]|0;if(e|0){f=h+64|0;d=c[f>>2]|0;if((d|0)==(e|0))d=e;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(e|0));d=c[b>>2]|0}c[f>>2]=e;$A(d)}d=c[h+48>>2]|0;if(d|0){c[h+52>>2]=d;$A(d)}d=c[h+36>>2]|0;if(d|0){c[h+40>>2]=d;$A(d)}d=c[h+24>>2]|0;if(!d){aa=i;return g|0}c[h+28>>2]=d;$A(d);aa=i;return g|0}function Im(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=aa;aa=aa+112|0;D=E+104|0;B=E+96|0;A=E+88|0;z=E+80|0;x=E+72|0;t=E+64|0;s=E+56|0;r=E+48|0;v=E+40|0;u=E+32|0;q=E+24|0;o=E;C=b+12|0;c[C>>2]=d;n=b;e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=331281;c[e>>2]=o;ay(d+216|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=330254;c[e>>2]=o;ay(d+236|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=301885;c[e>>2]=o;ay(d+276|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=330351;c[e>>2]=o;ay(d+296|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=330283;c[e>>2]=o;ay(d+316|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=330237;c[e>>2]=o;ay(d+196|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=c[d+76>>2]|0;j=c[d+80>>2]|0;if((e|0)!=(j|0)){l=b+16|0;k=o+16|0;h=o+4|0;i=o+8|0;m=b+20|0;do{g=c[e>>2]|0;c[l>>2]=g;do if(a[g+12>>0]|0?(p=g+16|0,(c[g+36>>2]|0)==1):0){f=iy((c[C>>2]|0)+276|0,p)|0;if((f|0)!=-1){Kl(p,f);break}f=g+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[q>>2]=301885;c[q+4>>2]=f;Jm(b,p,300571,q)}while(0);c[o>>2]=289700;c[h>>2]=g;c[i>>2]=n;c[k>>2]=o;ay(g+88|0,o);f=c[k>>2]|0;if((o|0)!=(f|0)){if(f|0)ma[c[(c[f>>2]|0)+20>>2]&255](f)}else ma[c[(c[f>>2]|0)+16>>2]&255](f);Rj(m,g)|0;c[l>>2]=0;e=e+4|0}while((e|0)!=(j|0))}e=c[d+112>>2]|0;i=c[d+116>>2]|0;a:do if((e|0)!=(i|0))while(1){h=c[e>>2]|0;b:do switch(c[h+12>>2]|0){case 0:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+216|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[u>>2]=331281;c[u+4>>2]=f;Jm(b,g,300571,u)}break}case 1:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+296|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[v>>2]=330351;c[v+4>>2]=f;Jm(b,g,300571,v)}break}case 2:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+316|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[r>>2]=330283;c[r+4>>2]=f;Jm(b,g,300571,r)}break}case 3:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+236|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[s>>2]=330254;c[s+4>>2]=f;Jm(b,g,300571,s)}break}case 4:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+196|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[t>>2]=330237;c[t+4>>2]=f;Jm(b,g,300571,t)}break}default:{}}while(0);e=e+4|0;if((e|0)==(i|0))break a}while(0);e=c[d+88>>2]|0;f=c[d+92>>2]|0;if((e|0)!=(f|0)){g=b+20|0;do{Qj(g,(c[e>>2]|0)+20|0)|0;e=e+4|0}while((e|0)!=(f|0))}e=c[d+64>>2]|0;h=c[d+68>>2]|0;if((e|0)!=(h|0))do{f=c[e>>2]|0;do if(a[f+12>>0]|0?(w=f+16|0,(c[f+36>>2]|0)==1):0){g=iy((c[C>>2]|0)+276|0,w)|0;if((g|0)!=-1){Kl(w,g);break}f=f+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[x>>2]=301885;c[x+4>>2]=f;Jm(b,w,300571,x)}while(0);e=e+4|0}while((e|0)!=(h|0));e=c[d+148>>2]|0;i=c[d+152>>2]|0;if((e|0)!=(i|0)){j=b+20|0;do{h=c[e>>2]|0;g=h+12|0;do if((c[h+32>>2]|0)==1){f=iy((c[C>>2]|0)+296|0,g)|0;if((f|0)!=-1){Kl(g,f);break}f=h+36|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[z>>2]=330351;c[z+4>>2]=f;Jm(b,g,300571,z)}while(0);Qj(j,h+56|0)|0;f=c[h+68>>2]|0;h=c[h+72>>2]|0;if((f|0)!=(h|0))do{do if((c[f>>2]|0)==1?(y=f+4|0,(c[f+24>>2]|0)==1):0){g=iy((c[C>>2]|0)+216|0,y)|0;if((g|0)!=-1){Kl(y,g);break}g=f+28|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;c[A>>2]=331281;c[A+4>>2]=g;Jm(b,y,300571,A)}while(0);f=f+40|0}while((f|0)!=(h|0));e=e+4|0}while((e|0)!=(i|0))}e=c[d+172>>2]|0;i=c[d+176>>2]|0;if((e|0)!=(i|0)){j=b+20|0;do{g=c[e>>2]|0;h=g+12|0;do if((c[g+32>>2]|0)==1){f=iy((c[C>>2]|0)+316|0,h)|0;if((f|0)!=-1){Kl(h,f);break}f=g+36|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[B>>2]=330283;c[B+4>>2]=f;Jm(b,h,300571,B)}while(0);Qj(j,g+52|0)|0;e=e+4|0}while((e|0)!=(i|0))}e=c[d+184>>2]|0;h=c[d+188>>2]|0;if((e|0)==(h|0)){c[C>>2]=0;D=b+72|0;D=c[D>>2]|0;aa=E;return D|0}do{g=c[e>>2]|0;do if((c[g+20>>2]|0)==1){f=iy((c[C>>2]|0)+216|0,g)|0;if((f|0)!=-1){Kl(g,f);break}f=g+24|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[D>>2]=331281;c[D+4>>2]=f;Jm(b,g,300571,D)}while(0);e=e+4|0}while((e|0)!=(h|0));c[C>>2]=0;D=b+72|0;D=c[D>>2]|0;aa=E;return D|0}function Jm(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,l=0;k=aa;aa=aa+192|0;h=k+168|0;l=k+144|0;f=k+128|0;g=k;i=k+164|0;j=k+160|0;c[a+72>>2]=1;c[l>>2]=e;c[f>>2]=c[l>>2];c[i>>2]=g;e=(Vz(g,128,d,l)|0)+1|0;if(e>>>0>128){g=aa;aa=aa+((1*e|0)+15&-16)|0;c[i>>2]=g;Vz(g,e,d,f)|0}e=c[a+4>>2]|0;c[j>>2]=1;d=e+4|0;f=c[d>>2]|0;if(f>>>0<(c[e+8>>2]|0)>>>0){c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[h+16>>2]=c[b+16>>2];l=Uz(g)|0;c[f>>2]=1;j=f+4|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];Wn(f+24|0,g,l);c[d>>2]=(c[d>>2]|0)+36;aa=k;return}else{Tm(e,j,b,i);aa=k;return}}function Km(a){a=a|0;return}function Lm(a){a=a|0;$A(a);return}function Mm(a){a=a|0;var b=0,d=0,e=0;b=_A(12)|0;c[b>>2]=289700;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function Nm(a,b){a=a|0;b=b|0;var d=0,e=0;c[b>>2]=289700;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return}function Om(a){a=a|0;return}function Pm(a){a=a|0;$A(a);return}function Qm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=aa;aa=aa+16|0;g=f;i=c[b+4>>2]|0;h=c[b+8>>2]|0;b=(c[d+20>>2]|0)>(c[e+20>>2]|0)?d+12|0:e+12|0;e=(a[d+11>>0]|0)<0?c[d>>2]|0:d;c[g>>2]=(c[d+32>>2]|0)>>>0<(c[i+56>>2]|0)-(c[i+52>>2]|0)>>2>>>0?300660:330275;c[g+4>>2]=e;Jm(h,b,300670,g);aa=f;return}function Rm(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==300598?a+4|0:0)|0}function Sm(a){a=a|0;return 286008}function Tm(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,n=0,o=0;o=aa;aa=aa+32|0;i=o;m=b+4|0;g=c[b>>2]|0;k=((c[m>>2]|0)-g|0)/36|0;h=k+1|0;if(h>>>0>119304647)HB();n=b+8|0;l=((c[n>>2]|0)-g|0)/36|0;g=l<<1;g=l>>>0<59652323?(g>>>0<h>>>0?h:g):119304647;do if(g)if(g>>>0>119304647)U();else{j=_A(g*36|0)|0;break}else j=0;while(0);h=j+(k*36|0)|0;l=j+(g*36|0)|0;g=c[d>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];d=c[f>>2]|0;f=Uz(d)|0;c[h>>2]=g;g=j+(k*36|0)+4|0;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];Wn(j+(k*36|0)+24|0,d,f);f=h+36|0;d=c[b>>2]|0;g=c[m>>2]|0;if((g|0)==(d|0)){e=d;g=d}else{do{j=h;h=h+-36|0;k=g;g=g+-36|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];j=j+-12|0;k=k+-12|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0}while((g|0)!=(d|0));e=c[b>>2]|0;g=c[m>>2]|0}c[b>>2]=h;c[m>>2]=f;c[n>>2]=l;d=e;if((g|0)!=(d|0))do{h=g+-12|0;g=g+-36|0;if((a[h+11>>0]|0)<0)$A(c[h>>2]|0)}while((g|0)!=(d|0));if(!e){aa=o;return}$A(e);aa=o;return}function Um(a){a=a|0;$A(a);return}function Vm(a){a=a|0;var b=0,d=0,e=0;b=_A(12)|0;c[b>>2]=289656;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function Wm(a,b){a=a|0;b=b|0;var d=0,e=0;c[b>>2]=289656;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return}function Xm(a){a=a|0;return}function Ym(a){a=a|0;$A(a);return}function Zm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=aa;aa=aa+16|0;g=f;h=c[b+4>>2]|0;e=(c[d+20>>2]|0)>(c[e+20>>2]|0)?d+12|0:e+12|0;d=(a[d+11>>0]|0)<0?c[d>>2]|0:d;c[g>>2]=c[b+8>>2];c[g+4>>2]=d;Jm(h,e,300670,g);aa=f;return}function _m(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==301010?a+4|0:0)|0}function $m(a){a=a|0;return 286040}function an(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=289392;e=b+60|0;f=c[e>>2]|0;if(f|0){g=b+64|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}d=c[b+48>>2]|0;if(d|0){c[b+52>>2]=d;$A(d)}d=c[b+36>>2]|0;if(d|0){c[b+40>>2]=d;$A(d)}d=c[b+24>>2]|0;if(!d)return;c[b+28>>2]=d;$A(d);return}function bn(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=289392;e=b+60|0;f=c[e>>2]|0;if(f|0){g=b+64|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}d=c[b+48>>2]|0;if(d|0){c[b+52>>2]=d;$A(d)}d=c[b+36>>2]|0;if(d|0){c[b+40>>2]=d;$A(d)}d=c[b+24>>2]|0;if(!d){$A(b);return}c[b+28>>2]=d;$A(d);$A(b);return}function cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=d+36|0;f=b+64|0;e=c[f>>2]|0;if((e|0)==(c[b+68>>2]|0))Lc(b+60|0,g);else{cB(e,g);c[f>>2]=(c[f>>2]|0)+12}if(!(a[d+48>>0]|0)){aa=i;return 0}f=d+52|0;if((c[d+72>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+76|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=301885;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function dn(b,d){b=b|0;d=d|0;d=b+64|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function en(a,b){a=a|0;b=b|0;Hn(a,b+36|0);return 0}function fn(a,b){a=a|0;b=b|0;Hn(a,b+36|0);return 0}function gn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;Hn(b,d+36|0);f=d+72|0;if((c[d+92>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+196|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+96|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330237;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function hn(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[b+36>>2]|0;e=c[b+40>>2]|0;if((d|0)!=(e|0))do{Hn(a,d);d=d+36|0}while((d|0)!=(e|0));Hn(a,b+48|0);return 0}function jn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+216|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=331281;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function kn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i+8|0;g=i;do if(a[d+36>>0]|0?(f=d+40|0,(c[d+60>>2]|0)==1):0){e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);break}e=d+64|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301885;c[g+4>>2]=e;Jm(b,f,300571,g)}while(0);f=d+100|0;if((c[d+120>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+124|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=330351;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function ln(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+236|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330254;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function mn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+236|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330254;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function nn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=d+36|0;f=b+64|0;e=c[f>>2]|0;if((e|0)==(c[b+68>>2]|0))Lc(b+60|0,g);else{cB(e,g);c[f>>2]=(c[f>>2]|0)+12}if(!(a[d+48>>0]|0)){aa=i;return 0}f=d+52|0;if((c[d+72>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+76|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=301885;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function on(b,d){b=b|0;d=d|0;d=b+64|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=c[b+16>>2]|0;if(!e){aa=h;return 0}e=Qk(e,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;Jm(b,f,303747,g);aa=h;return 0}function qn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=c[b+16>>2]|0;if(!e){aa=h;return 0}e=Qk(e,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;Jm(b,f,303747,g);aa=h;return 0}function rn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=c[b+16>>2]|0;if(!e){aa=h;return 0}e=Qk(e,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;Jm(b,f,303747,g);aa=h;return 0}function sn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=d+36|0;f=b+64|0;e=c[f>>2]|0;if((e|0)==(c[b+68>>2]|0))Lc(b+60|0,g);else{cB(e,g);c[f>>2]=(c[f>>2]|0)+12}if(!(a[d+48>>0]|0)){aa=i;return 0}f=d+52|0;if((c[d+72>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+76|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=301885;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function tn(b,d){b=b|0;d=d|0;d=b+64|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function un(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+336|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301330;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function vn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+336|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301330;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function wn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+356|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301317;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function xn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+356|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301317;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function yn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330351;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function zn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330351;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function An(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330351;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function Bn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330351;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+216|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=331281;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function Dn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i+8|0;g=i;do if(a[d+36>>0]|0?(f=d+40|0,(c[d+60>>2]|0)==1):0){e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);break}e=d+64|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301885;c[g+4>>2]=e;Jm(b,f,300571,g)}while(0);f=d+100|0;if((c[d+120>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+124|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=330351;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function En(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=d+36|0;f=b+64|0;e=c[f>>2]|0;if((e|0)==(c[b+68>>2]|0))Lc(b+60|0,g);else{cB(e,g);c[f>>2]=(c[f>>2]|0)+12}if(!(a[d+48>>0]|0)){aa=i;return 0}f=d+52|0;if((c[d+72>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+76|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=301885;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function Fn(b,d){b=b|0;d=d|0;d=b+64|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function Gn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+196|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330237;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function Hn(b,d){b=b|0;d=d|0;var 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;s=aa;aa=aa+16|0;r=s;if((c[d+20>>2]|0)!=1){aa=s;return}l=c[b+60>>2]|0;o=(c[b+64>>2]|0)-l|0;q=(o|0)/12|0;e=q+-1|0;p=d+24|0;m=a[p+11>>0]|0;a:do if((o|0)>0){k=m<<24>>24<0;o=k?c[d+28>>2]|0:m&255;n=(o|0)==0;b:do if(k)while(1){g=l+(e*12|0)|0;h=a[g+11>>0]|0;k=h<<24>>24<0;h=h&255;do if(((k?c[l+(e*12|0)+4>>2]|0:h)|0)==(o|0)){i=c[g>>2]|0;j=k?i:g;f=c[p>>2]|0;i=i&255;if(k){if(n)break b;if(!(Tz(j,f,o)|0))break b;else break}if(n)break b;if((a[f>>0]|0)==i<<24>>24)do{h=h+-1|0;g=g+1|0;if(!h)break b;f=f+1|0}while((a[g>>0]|0)==(a[f>>0]|0))}while(0);e=e+-1|0;if((e|0)<=-1)break a}else while(1){f=l+(e*12|0)|0;h=a[f+11>>0]|0;j=h<<24>>24<0;h=h&255;do if(((j?c[l+(e*12|0)+4>>2]|0:h)|0)==(o|0)){g=c[f>>2]|0;i=j?g:f;g=g&255;if(j){if(n)break b;if(!(Tz(i,p,o)|0))break b;else break}if(n)break b;if((a[p>>0]|0)==g<<24>>24){g=p;do{h=h+-1|0;f=f+1|0;if(!h)break b;g=g+1|0}while((a[f>>0]|0)==(a[g>>0]|0))}}while(0);e=e+-1|0;if((e|0)<=-1)break a}while(0);Kl(d,q+~e|0);aa=s;return}while(0);if(m<<24>>24<0)e=c[d+24>>2]|0;else e=p;c[r>>2]=e;Jm(b,d,301343,r);aa=s;return}function In(a){a=a|0;var b=0;c[a>>2]=289744;b=a+16|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;b=c[a>>2]|0;if(b|0){c[a+4>>2]=b;$A(b)}$A(a);return}function Jn(a){a=a|0;var b=0,d=0;c[a>>2]=289744;d=a+16|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}d=c[b>>2]|0;if(d|0){c[b+4>>2]=d;$A(d)}$A(b);$A(a);return}function Kn(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,n=0,o=0,p=0;if(!f)return 0;n=f+d|0;p=b+16|0;i=c[p>>2]|0;o=i+4|0;g=c[o>>2]|0;j=c[i>>2]|0;m=g-j|0;a:do if(n>>>0>m>>>0){k=j;b=n-m|0;l=i+8|0;h=c[l>>2]|0;if((h-g|0)>>>0>=b>>>0)while(1){a[g>>0]=0;g=(c[o>>2]|0)+1|0;c[o>>2]=g;b=b+-1|0;if(!b)break a}if((n|0)<0)HB();g=h-j|0;h=g<<1;h=g>>>0<1073741823?(h>>>0<n>>>0?n:h):2147483647;if(!h)g=0;else g=_A(h)|0;uC(g+m|0,0,b|0)|0;if((m|0)>0)sC(g|0,k|0,m|0)|0;c[i>>2]=g;c[o>>2]=g+n;c[l>>2]=g+h;if(j|0)$A(k)}while(0);sC((c[c[p>>2]>>2]|0)+d|0,e|0,f|0)|0;return 0}function Ln(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,n=0,o=0,p=0;if(!f)return 0;p=f+e|0;n=f+d|0;n=p>>>0>n>>>0?p:n;p=b+16|0;i=c[p>>2]|0;o=i+4|0;g=c[o>>2]|0;j=c[i>>2]|0;m=g-j|0;a:do if(n>>>0>m>>>0){k=j;b=n-m|0;l=i+8|0;h=c[l>>2]|0;if((h-g|0)>>>0>=b>>>0)while(1){a[g>>0]=0;g=(c[o>>2]|0)+1|0;c[o>>2]=g;b=b+-1|0;if(!b)break a}if((n|0)<0)HB();g=h-j|0;h=g<<1;h=g>>>0<1073741823?(h>>>0<n>>>0?n:h):2147483647;if(!h)g=0;else g=_A(h)|0;uC(g+m|0,0,b|0)|0;if((m|0)>0)sC(g|0,k|0,m|0)|0;c[i>>2]=g;c[o>>2]=g+n;c[l>>2]=g+h;if(j|0)$A(k)}while(0);p=c[c[p>>2]>>2]|0;tC(p+d|0,p+e|0,f|0)|0;return 0}function Mn(a,b){a=a|0;b=b|0;a=a+4|0;c[a>>2]=(c[a>>2]|0)+b;return}function Nn(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;g=a+8|0;if((c[g>>2]|0)==1)return;h=c[a+12>>2]|0;if(h|0)On(h,d,e,b,0,f);a=ha[c[(c[a>>2]|0)+8>>2]&127](a,b,d,e)|0;c[g>>2]=a;return}function On(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var 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;x=aa;aa=aa+32|0;w=x+24|0;v=x+16|0;u=x+8|0;t=x;s=x+28|0;r=e+f|0;if((f|0)<=0){aa=x;return}q=g-e|0;p=b+4|0;n=b+8|0;o=b+12|0;l=(h|0)==1;m=(i|0)!=0;do{c[t>>2]=q+e;Pn(b,301446,t);k=0;do{g=e+k|0;if(g>>>0<r>>>0){c[u>>2]=d[g>>0];Pn(b,301454,u)}else{a[s>>0]=32;f=c[p>>2]|0;if((c[n>>2]|0)==1){g=f;f=1}else{g=c[o>>2]|0;if(g|0)On(g,s,1,f,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,f,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}g=g+1|0;c[p>>2]=g;a[s>>0]=32;if((f|0)!=1){f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);g=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=g;g=c[p>>2]|0}c[p>>2]=g+1}j=k|1;k=k+2|0;g=e+j|0;if(g>>>0<r>>>0){c[w>>2]=d[g>>0];Pn(b,301454,w);g=c[n>>2]|0;h=c[p>>2]|0}else{a[s>>0]=32;g=c[p>>2]|0;if((c[n>>2]|0)==1)f=1;else{f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}h=g+1|0;c[p>>2]=h;a[s>>0]=32;if((f|0)==1){g=h;f=1}else{g=c[o>>2]|0;if(g|0)On(g,s,1,h,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,h,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}h=g+1|0;c[p>>2]=h;g=f}a[s>>0]=32;if((g|0)==1){f=1;g=h}else{g=c[o>>2]|0;if(g|0)On(g,s,1,h,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,h,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}g=g+1|0;c[p>>2]=g}while(j>>>0<15);h=e+16|0;if(l){a[s>>0]=32;if((f|0)==1)f=1;else{f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}g=g+1|0;c[p>>2]=g;if(e>>>0<r>>>0){h=f;j=0;do{k=a[e>>0]|0;y=(CA(k&255)|0)==0;a[s>>0]=y?46:k;if((h|0)==1)h=1;else{f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);h=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=h;g=c[p>>2]|0;f=h}g=g+1|0;c[p>>2]=g;j=j+1|0;e=e+1|0}while(e>>>0<r>>>0&j>>>0<16)}}else e=h;if(m&e>>>0>=r>>>0){c[v>>2]=i;Pn(b,301459,v);f=c[n>>2]|0;g=c[p>>2]|0}a[s>>0]=10;if((f|0)!=1){f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);g=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=g;g=c[p>>2]|0}c[p>>2]=g+1}while(e>>>0<r>>>0);aa=x;return}function Pn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+160|0;e=i+144|0;g=i+128|0;f=i;c[e>>2]=d;c[g>>2]=c[e>>2];e=Vz(f,128,b,e)|0;d=e+1|0;if(d>>>0>128){f=aa;aa=aa+((1*d|0)+15&-16)|0;h=f;g=Vz(f,d,b,g)|0}else{h=f;g=e}b=a+4|0;d=c[b>>2]|0;e=a+8|0;if((c[e>>2]|0)==1){a=d;a=a+g|0;c[b>>2]=a;aa=i;return}f=c[a+12>>2]|0;if(f|0)On(f,h,g,d,0,0);a=ha[c[(c[a>>2]|0)+8>>2]&127](a,d,h,g)|0;c[e>>2]=a;a=c[b>>2]|0;a=a+g|0;c[b>>2]=a;aa=i;return}function Qn(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;j=a+4|0;g=c[j>>2]|0;h=a+8|0;if((c[h>>2]|0)==1){a=g;a=a+d|0;c[j>>2]=a;return}i=c[a+12>>2]|0;if(i|0)On(i,b,d,g,f,e);a=ha[c[(c[a>>2]|0)+8>>2]&127](a,g,b,d)|0;c[h>>2]=a;a=c[j>>2]|0;a=a+d|0;c[j>>2]=a;return}function Rn(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;i=aa;aa=aa+16|0;h=i;f=a+8|0;if((c[f>>2]|0)==1){aa=i;return}g=c[a+12>>2]|0;if(g|0){c[h>>2]=d;c[h+4>>2]=e+d;c[h+8>>2]=b;c[h+12>>2]=e+b;Pn(g,301466,h)}h=ha[c[(c[a>>2]|0)+12>>2]&127](a,b,d,e)|0;c[f>>2]=h;aa=i;return}function Sn(a,b){a=a|0;b=b|0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=b;c[a>>2]=289744;b=_A(12)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[a+16>>2]=b;return}function Tn(a,b){a=a|0;b=b|0;var d=0;d=b+16|0;b=c[d>>2]|0;c[d>>2]=0;c[a>>2]=b;return}function Un(a){a=a|0;c[a>>2]=(c[a>>2]|0)+1;a=a+4|0;c[a>>2]=(c[a>>2]|0)+-1;return}function Vn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(e>>>0>4294967279)aB();if(e>>>0<11){a[b+11>>0]=e;if(!e){d=b;e=d+e|0;a[e>>0]=0;return}}else{g=e+16&-16;f=_A(g)|0;c[b>>2]=f;c[b+8>>2]=g|-2147483648;c[b+4>>2]=e;b=f}sC(b|0,d|0,e|0)|0;g=b;g=g+e|0;a[g>>0]=0;return}function Wn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(e>>>0>4294967279)aB();if(e>>>0<11){a[b+11>>0]=e;if(!e){d=b;e=d+e|0;a[e>>0]=0;return}}else{g=e+16&-16;f=_A(g)|0;c[b>>2]=f;c[b+8>>2]=g|-2147483648;c[b+4>>2]=e;b=f}sC(b|0,d|0,e|0)|0;g=b;g=g+e|0;a[g>>0]=0;return}function Xn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;d=d-e|0;c[a>>2]=b+e;c[a+4>>2]=d>>>0<f>>>0?d:f;return}function Yn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=d>>>0<b>>>0?d:b;if(e|0?(f=Tz(a,c,e)|0,f|0):0)return f|0;return ((b|0)==(d|0)?0:b>>>0<d>>>0?-1:1)|0}function Zn(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;c=c>>>0<5?c:5;g=b;a:do if((c|0)<5)c=g;else{d=c;c=b+c|0;while(1){e=d+-1|0;f=b+e|0;if((a[f>>0]|0)==99){d=b+d|0;if((((a[d+-2>>0]|0)==111?(h=d+-1|0,(a[h+-2>>0]|0)==108):0)?(i=h+-1|0,(a[i+-2>>0]|0)==101):0)?(a[i+-1+-2>>0]|0)==114:0)break a;if((e|0)==4){c=g;break a}}else if((e|0)==4){c=g;break a}d=e;c=f}}while(0);return ((c|0)==(b|0)?-1:c-(g+5)|0)|0}function _n(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;f=b;a:do if(!c)c=f;else{c=b+c|0;while(1){e=c+-1|0;if((a[e>>0]|0)==d<<24>>24)break;if((e|0)==(b|0)){c=f;break a}else c=e}}while(0);return ((c|0)==(b|0)?-1:c+~f|0)|0}function $n(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,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+176|0;l=r+136|0;m=r+112|0;n=r+160|0;q=r;c[q>>2]=289768;c[q+4>>2]=d;c[q+8>>2]=b;c[q+12>>2]=a;j=q+16|0;p=q+64|0;c[p>>2]=0;o=q+72|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[q+104>>2]=0;k=q+108|0;c[k>>2]=0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;j=q;d=m+16|0;c[m>>2]=290032;c[m+4>>2]=j;c[d>>2]=m;b=l+16|0;c[b>>2]=l;c[l>>2]=290032;c[l+4>>2]=j;ao(l,q+48|0);b=c[b>>2]|0;if((l|0)!=(b|0)){if(b|0)ma[c[(c[b>>2]|0)+20>>2]&255](b)}else ma[c[(c[b>>2]|0)+16>>2]&255](b);b=c[d>>2]|0;if((m|0)!=(b|0)){if(b|0)ma[c[(c[b>>2]|0)+20>>2]&255](b)}else ma[c[(c[b>>2]|0)+16>>2]&255](b);b=c[a>>2]|0;f=c[a+4>>2]|0;a:do if((b|0)!=(f|0)){j=n+4|0;g=n+4|0;h=m+4|0;i=m+8|0;while(1){a=c[b>>2]|0;switch(c[a+4>>2]|0){case 0:{bo(q,a+8|0)|0;break}case 1:{co(l,q,c[a+8>>2]|0);break}case 11:{co(l,q,c[a+8>>2]|0);break}case 10:{co(l,q,c[a+8>>2]|0);break}case 9:{go(q,c[a+8>>2]|0);break}case 8:{go(q,c[a+8>>2]|0);break}case 7:{d=c[a+8>>2]|0;co(n,q,d);switch(c[n>>2]|0){case 1:{eo(q,d+4|0,c[j>>2]|0,a+12|0);break}case 2:{e=d+4|0;d=c[g>>2]|0;a=a+12|0;c[l>>2]=d;c[m>>2]=0;c[h>>2]=0;c[i>>2]=0;if((d|0)!=-64){fo(m,l);d=c[m>>2]|0;eo(q,e,m,a);if(d|0){c[h>>2]=d;$A(d)}}else eo(q,e,m,a);break}default:{}}break}default:{}}b=b+4|0;if((b|0)==(f|0))break a}}while(0);g=c[k>>2]|0;c[q>>2]=289768;a=q+84|0;e=c[a>>2]|0;if(e|0){f=q+88|0;b=c[f>>2]|0;if((b|0)==(e|0))b=e;else{do{d=c[b+-20>>2]|0;if(d|0){c[b+-16>>2]=d;$A(d)}d=c[b+-32>>2]|0;if(d|0){c[b+-28>>2]=d;$A(d)}b=b+-36|0}while((b|0)!=(e|0));b=c[a>>2]|0}c[f>>2]=e;$A(b)}b=c[o>>2]|0;if(b|0){c[q+76>>2]=b;$A(b)}b=c[p>>2]|0;if((q+48|0)==(b|0)){ma[c[(c[b>>2]|0)+16>>2]&255](b);aa=r;return g|0}if(!b){aa=r;return g|0}ma[c[(c[b>>2]|0)+20>>2]&255](b);aa=r;return g|0}function ao(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;e=i;if((b|0)==(a|0)){aa=i;return}g=a+16|0;d=c[g>>2]|0;f=d;h=b+16|0;if((d|0)==(a|0))if((c[h>>2]|0)==(b|0)){na[c[(c[d>>2]|0)+12>>2]&31](d,e);f=c[g>>2]|0;ma[c[(c[f>>2]|0)+16>>2]&255](f);c[g>>2]=0;f=c[h>>2]|0;na[c[(c[f>>2]|0)+12>>2]&31](f,a);f=c[h>>2]|0;ma[c[(c[f>>2]|0)+16>>2]&255](f);c[h>>2]=0;c[g>>2]=a;na[c[(c[e>>2]|0)+12>>2]&31](e,b);ma[c[(c[e>>2]|0)+16>>2]&255](e);c[h>>2]=b;aa=i;return}else{na[c[(c[d>>2]|0)+12>>2]&31](d,b);a=c[g>>2]|0;ma[c[(c[a>>2]|0)+16>>2]&255](a);c[g>>2]=c[h>>2];c[h>>2]=b;aa=i;return}else{d=c[h>>2]|0;if((b|0)==(d|0)){na[c[(c[d>>2]|0)+12>>2]&31](d,a);b=c[h>>2]|0;ma[c[(c[b>>2]|0)+16>>2]&255](b);c[h>>2]=c[g>>2];c[g>>2]=a;aa=i;return}else{c[g>>2]=d;c[h>>2]=f;aa=i;return}}}function bo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;_=aa;aa=aa+208|0;S=_+200|0;R=_+192|0;Q=_+184|0;P=_+176|0;O=_+168|0;N=_+160|0;M=_+152|0;L=_+144|0;K=_+136|0;J=_+128|0;I=_+120|0;H=_+112|0;G=_+104|0;F=_+96|0;E=_+88|0;D=_+80|0;C=_+72|0;B=_+64|0;Y=_+56|0;W=_+48|0;V=_+40|0;Z=_;X=b+16|0;c[X>>2]=d;w=b+24|0;v=b+28|0;u=b+32|0;y=b+36|0;s=b+40|0;T=d+32|0;c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;c[w+12>>2]=0;c[w+16>>2]=0;e=c[T>>2]|0;if(e|0){t=b+20|0;z=b+4|0;x=b+104|0;A=b+48|0;m=Z+28|0;n=Z+16|0;p=Z+32|0;o=Z+4|0;q=Z+20|0;r=Z+8|0;f=0;do{j=e;a:do switch(c[j+32>>2]|0){case 10:{c[s>>2]=(c[s>>2]|0)+1;j=j+12|0;g=e;do if(a[g+48>>0]|0){k=c[X>>2]|0;h=c[k+124>>2]|0;k=(c[k+128>>2]|0)-h>>2;i=c[g+76>>2]|0;if(i>>>0<k>>>0){l=c[h+(i<<2)>>2]|0;jo(b,j,g+100|0,l+24|0,331281,330329);jo(b,j,g+88|0,l+12|0,331281,301775);break}else{c[B>>2]=301885;c[B+4>>2]=k;ho(b,g+52|0,301811,B);break}}while(0);if((c[g+104>>2]|0)!=(c[g+100>>2]|0))ho(b,j,301899,C);break}case 0:{k=j+12|0;j=e;c[t>>2]=j+36;do if(a[j+48>>0]|0){i=c[X>>2]|0;g=c[i+124>>2]|0;i=(c[i+128>>2]|0)-g>>2;h=c[j+76>>2]|0;if(h>>>0<i>>>0){l=c[g+(h<<2)>>2]|0;jo(b,k,j+100|0,l+24|0,331281,330329);jo(b,k,j+88|0,l+12|0,331281,301775);break}else{c[D>>2]=301885;c[D+4>>2]=i;ho(b,j+52|0,301811,D);break}}while(0);g=j+100|0;if((a[(c[z>>2]|0)+6>>0]|0)==0?(c[j+104>>2]|0)-(c[g>>2]|0)>>2>>>0>1:0){ho(b,k,301936,E);break a}c[x>>2]=k;Fy(A,g);Jj(Z,b);Qj(Z,j+144|0)|0;g=c[m>>2]|0;if(g|0){c[p>>2]=g;$A(g)}g=c[n>>2]|0;if(g|0){c[q>>2]=g;$A(g)}g=c[o>>2]|0;if(g|0){c[r>>2]=g;$A(g)}Kz(A);c[t>>2]=0;break}case 1:{l=e;io(b,j+12|0,l+56|0,c[l+48>>2]|0,301984);c[u>>2]=(c[u>>2]|0)+1;break}case 2:{k=j+12|0;g=c[e+36>>2]|0;switch(c[g+28>>2]|0){case 4:{c[s>>2]=(c[s>>2]|0)+1;j=g+44|0;do if(a[j>>0]|0){l=c[X>>2]|0;h=c[l+124>>2]|0;l=(c[l+128>>2]|0)-h>>2;i=c[j+28>>2]|0;if(i>>>0<l>>>0){l=c[h+(i<<2)>>2]|0;jo(b,k,j+52|0,l+24|0,331281,330329);jo(b,k,j+40|0,l+12|0,331281,301775);break}else{c[F>>2]=301885;c[F+4>>2]=l;ho(b,j+4|0,301811,F);break}}while(0);if((c[g+100>>2]|0)==(c[g+96>>2]|0))break a;ho(b,k,301899,G);break a}case 0:{if(!(a[g+44>>0]|0))break a;h=g+48|0;g=c[X>>2]|0;g=(c[g+128>>2]|0)-(c[g+124>>2]|0)>>2;if((c[h+24>>2]|0)>>>0<g>>>0)break a;c[H>>2]=301885;c[H+4>>2]=g;ho(b,h,301811,H);break a}case 1:{ko(b,k,g+32|0);c[w>>2]=(c[w>>2]|0)+1;break a}case 2:{lo(b,k,g+32|0);c[v>>2]=(c[v>>2]|0)+1;break a}case 3:{if(a[g+48>>0]|0?(a[(c[z>>2]|0)+1>>0]|0)==0:0)ho(b,k,302014,I);c[y>>2]=(c[y>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+1;break a}default:break a}}case 3:{k=e;switch(c[k+48>>2]|0){case 4:{g=c[X>>2]|0;g=(c[g+68>>2]|0)-(c[g+64>>2]|0)>>2;if((c[k+76>>2]|0)>>>0<g>>>0)break a;c[J>>2]=330237;c[J+4>>2]=g;ho(b,k+52|0,301811,J);break a}case 0:{g=c[X>>2]|0;g=(c[g+80>>2]|0)-(c[g+76>>2]|0)>>2;if((c[k+76>>2]|0)>>>0<g>>>0)break a;c[K>>2]=331281;c[K+4>>2]=g;ho(b,k+52|0,301811,K);break a}case 1:{g=c[X>>2]|0;g=(c[g+140>>2]|0)-(c[g+136>>2]|0)>>2;if((c[k+76>>2]|0)>>>0<g>>>0)break a;c[L>>2]=330351;c[L+4>>2]=g;ho(b,k+52|0,301811,L);break a}case 2:{g=c[X>>2]|0;g=(c[g+164>>2]|0)-(c[g+160>>2]|0)>>2;if((c[k+76>>2]|0)>>>0<g>>>0)break a;c[M>>2]=330283;c[M+4>>2]=g;ho(b,k+52|0,301811,M);break a}case 3:{j=k+52|0;i=c[X>>2]|0;h=c[i+88>>2]|0;i=(c[i+92>>2]|0)-h>>2;g=c[k+76>>2]|0;if(g>>>0>=i>>>0){c[N>>2]=330254;c[N+4>>2]=i;ho(b,j,301811,N);break a}if(!(a[(c[h+(g<<2)>>2]|0)+16>>0]|0))break a;if(a[(c[z>>2]|0)+1>>0]|0)break a;ho(b,j,302049,O);break a}default:break a}}case 5:{ko(b,j+12|0,e+40|0);c[w>>2]=(c[w>>2]|0)+1;break}case 9:{if(f)ho(b,j+12|0,302084,P);f=e;i=c[X>>2]|0;g=c[i+76>>2]|0;i=(c[i+80>>2]|0)-g>>2;h=c[f+60>>2]|0;if(h>>>0>=i>>>0){c[Q>>2]=331281;c[Q+4>>2]=i;ho(b,f+36|0,301811,Q);f=1;break a}l=c[g+(h<<2)>>2]|0;f=l;if(l){if((c[f+56>>2]|0)!=(c[f+52>>2]|0))ho(b,j+12|0,302116,R);if((c[f+68>>2]|0)!=(c[f+64>>2]|0)){ho(b,j+12|0,302147,S);f=1}else f=1}else f=1;break}case 7:{lo(b,j+12|0,e+40|0);c[v>>2]=(c[v>>2]|0)+1;break}default:{}}while(0);e=c[e+4>>2]|0}while((e|0)!=0);e=c[T>>2]|0;if(e|0){do{h=e;i=e;do if((c[h+32>>2]|0)==6){f=c[i+104>>2]|0;g=c[i+108>>2]|0;if((f|0)!=(g|0))do{if((c[f>>2]|0)==1?(U=c[X>>2]|0,U=(c[U+80>>2]|0)-(c[U+76>>2]|0)>>2,(c[f+28>>2]|0)>>>0>=U>>>0):0){c[V>>2]=331281;c[V+4>>2]=U;ho(b,f+4|0,301811,V)}f=f+40|0}while((f|0)!=(g|0));if(!(a[i+84>>0]|0)){f=c[X>>2]|0;f=(c[f+140>>2]|0)-(c[f+136>>2]|0)>>2;if((c[i+72>>2]|0)>>>0<f>>>0){io(b,h+12|0,i+92|0,-1,301845);break}else{c[W>>2]=330351;c[W+4>>2]=f;ho(b,i+48|0,301811,W);break}}}while(0);e=c[e+4>>2]|0}while((e|0)!=0);e=c[T>>2]|0;if(e|0)do{f=e;g=e;do if((c[f+32>>2]|0)==8?(a[g+84>>0]|0)==0:0){h=c[X>>2]|0;h=(c[h+164>>2]|0)-(c[h+160>>2]|0)>>2;if((c[g+72>>2]|0)>>>0<h>>>0){io(b,f+12|0,g+88|0,-1,301865);break}else{c[Y>>2]=330283;c[Y+4>>2]=h;ho(b,g+48|0,301811,Y);break}}while(0);e=c[e+4>>2]|0}while((e|0)!=0)}}e=Z+16|0;c[Z>>2]=290076;c[Z+4>>2]=b;c[e>>2]=Z;ay(d+256|0,Z);e=c[e>>2]|0;if((Z|0)==(e|0)){ma[c[(c[e>>2]|0)+16>>2]&255](e);Z=b+108|0;Z=c[Z>>2]|0;aa=_;return Z|0}if(!e){Z=b+108|0;Z=c[Z>>2]|0;aa=_;return Z|0}ma[c[(c[e>>2]|0)+20>>2]&255](e);Z=b+108|0;Z=c[Z>>2]|0;aa=_;return Z|0}function co(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,p=0,q=0;q=aa;aa=aa+80|0;k=q+64|0;f=q+56|0;p=q+32|0;l=q+16|0;j=q+8|0;o=b;c[o>>2]=0;c[o+4>>2]=0;a:do switch(c[e+72>>2]|0){case 0:{h=Bl(c[d+12>>2]|0,e+24|0)|0;do if(h){f=e+60|0;g=f+11|0;i=a[g>>0]|0;o=i<<24>>24<0;i=Dk(h,o?c[f>>2]|0:f,o?c[e+64>>2]|0:i&255)|0;if(!i){if((a[g>>0]|0)<0)f=c[f>>2]|0;c[j>>2]=f;ho(d,e+4|0,301684,j);f=0;break}n=Rk(h,i+16|0)|0;if(!n)f=0;else{m=e+76|0;h=c[m>>2]|0;g=(c[e+80>>2]|0)-h|0;o=(g|0)/40|0;i=c[n+52>>2]|0;f=(c[n+56>>2]|0)-i>>2;if((f|0)!=(o|0)){c[l>>2]=o>>>0>f>>>0?301713:301718;c[l+4>>2]=o;c[l+8>>2]=f;ho(d,e+4|0,301722,l);f=0;break}b:do if(g|0){k=n+52|0;f=0;while(1){j=h+(f*40|0)|0;g=c[h+(f*40|0)+20>>2]|0;h=c[i+(f<<2)>>2]|0;if((g|0)!=0&((h|0)!=(g|0)&(h|0)!=0)){do switch(g|0){case -1:{i=330980;break}case -2:{i=330976;break}case -3:{i=330972;break}case -4:{i=330968;break}case -5:{i=330963;break}case -16:{i=330955;break}case -32:{i=330950;break}case -24:{i=330939;break}case -64:{i=330934;break}case -17:{i=330923;break}default:i=330910}while(0);do switch(h|0){case -1:{g=330980;break}case -2:{g=330976;break}case -3:{g=330972;break}case -4:{g=330968;break}case -5:{g=330963;break}case -16:{g=330955;break}case -32:{g=330950;break}case -24:{g=330939;break}case -64:{g=330934;break}case -17:{g=330923;break}default:g=330910}while(0);c[p>>2]=301775;c[p+4>>2]=f;c[p+8>>2]=330268;c[p+12>>2]=i;c[p+16>>2]=g;ho(d,j,301588,p)}f=f+1|0;if(f>>>0>=o>>>0)break b;h=c[m>>2]|0;i=c[k>>2]|0}}while(0);f=n+64|0}}else{ho(d,e+4|0,301669,q);f=0}while(0);c[b+4>>2]=f;f=(f|0)!=0&1;break}case 1:{j=b+4|0;i=Bl(c[d+12>>2]|0,e+24|0)|0;if(!i){ho(d,e+4|0,301669,f);f=0;break a}f=e+60|0;g=f+11|0;h=a[g>>0]|0;p=h<<24>>24<0;h=Dk(i,p?c[f>>2]|0:f,p?c[e+64>>2]|0:h&255)|0;if(h|0){f=Tk(i,h+16|0)|0;if(!f){f=0;break a}c[j>>2]=c[f+12>>2];f=2;break a}if((a[g>>0]|0)<0)f=c[f>>2]|0;c[k>>2]=f;ho(d,e+4|0,301784,k);f=0;break}default:{aa=q;return}}while(0);c[b>>2]=f;aa=q;return}function eo(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,l=0,m=0,n=0;n=aa;aa=aa+32|0;k=n+24|0;m=n;l=d+4|0;f=c[l>>2]|0;g=c[d>>2]|0;h=f-g>>2;i=c[e>>2]|0;j=((c[e+4>>2]|0)-i|0)/40|0;if((h|0)!=(j|0)){c[k>>2]=j;c[k+4>>2]=h;ho(a,b,301639,k);aa=n;return}if((f|0)==(g|0)){aa=n;return}j=0;while(1){h=c[g+(j<<2)>>2]|0;i=c[i+(j*40|0)+20>>2]|0;if((h|0)!=0&((i|0)!=(h|0)&(i|0)!=0)){do switch(h|0){case -1:{g=330980;break}case -2:{g=330976;break}case -3:{g=330972;break}case -4:{g=330968;break}case -5:{g=330963;break}case -16:{g=330955;break}case -32:{g=330950;break}case -24:{g=330939;break}case -64:{g=330934;break}case -17:{g=330923;break}default:g=330910}while(0);do switch(i|0){case -1:{f=330980;break}case -2:{f=330976;break}case -3:{f=330972;break}case -4:{f=330968;break}case -5:{f=330963;break}case -16:{f=330955;break}case -32:{f=330950;break}case -24:{f=330939;break}case -64:{f=330934;break}case -17:{f=330923;break}default:f=330910}while(0);c[m>>2]=330329;c[m+4>>2]=j;c[m+8>>2]=301505;c[m+12>>2]=g;c[m+16>>2]=f;ho(a,b,301588,m);f=c[l>>2]|0;g=c[d>>2]|0}h=j+1|0;if(h>>>0>=f-g>>2>>>0)break;i=c[e>>2]|0;j=h}aa=n;return}function fo(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function go(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+32|0;i=j+8|0;h=j;f=j+16|0;co(f,a,b);a:do switch(c[f>>2]|0){case 1:{d=f+4|0;g=c[d>>2]|0;e=c[g>>2]|0;g=(c[g+4>>2]|0)-e|0;if((g|0)==4){c[f>>2]=2;h=c[e>>2]|0;c[d>>2]=h;d=h;break a}c[h>>2]=g>>2;ho(a,b+4|0,301512,h);c[d>>2]=0;aa=j;return}case 2:{d=c[f+4>>2]|0;break}default:{aa=j;return}}while(0);if(!d){aa=j;return}e=b+4|0;if((d|1|0)==-3){aa=j;return}do switch(d|0){case -1:{d=330980;break}case -2:{d=330976;break}case -3:{d=330972;break}case -4:{d=330968;break}case -5:{d=330963;break}case -16:{d=330955;break}case -32:{d=330950;break}case -24:{d=330939;break}case -64:{d=330934;break}case -17:{d=330923;break}default:d=330910}while(0);c[i>>2]=301505;c[i+4>>2]=d;ho(a,e,301539,i);aa=j;return}function ho(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,l=0;k=aa;aa=aa+192|0;h=k+168|0;l=k+144|0;f=k+128|0;g=k;i=k+164|0;j=k+160|0;c[a+108>>2]=1;c[l>>2]=e;c[f>>2]=c[l>>2];c[i>>2]=g;e=(Vz(g,128,d,l)|0)+1|0;if(e>>>0>128){g=aa;aa=aa+((1*e|0)+15&-16)|0;c[i>>2]=g;Vz(g,e,d,f)|0}e=c[a+8>>2]|0;c[j>>2]=1;d=e+4|0;f=c[d>>2]|0;if(f>>>0<(c[e+8>>2]|0)>>>0){c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[h+16>>2]=c[b+16>>2];l=Uz(g)|0;c[f>>2]=1;j=f+4|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];Wn(f+24|0,g,l);c[d>>2]=(c[d>>2]|0)+36;aa=k;return}else{Tm(e,j,b,i);aa=k;return}}function io(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,l=0,m=0,n=0,o=0;o=aa;aa=aa+64|0;n=o+40|0;j=o+32|0;k=o+24|0;m=o+16|0;l=o+8|0;h=o;switch(c[e+8>>2]|0){case 0:{e=-64;break}case 1:{i=3;break}default:{c[h>>2]=g;ho(b,d,302842,h);aa=o;return}}a:do if((i|0)==3){i=c[e>>2]|0;d=i+12|0;switch(c[i+32>>2]|0){case 15:{e=c[i+60>>2]|0;break a}case 18:{h=c[b+16>>2]|0;e=c[h+88>>2]|0;h=(c[h+92>>2]|0)-e>>2;j=c[i+60>>2]|0;if(j>>>0>=h>>>0){c[k>>2]=330254;c[k+4>>2]=h;ho(b,i+36|0,301811,k);aa=o;return}h=c[e+(j<<2)>>2]|0;e=c[h+12>>2]|0;if(j>>>0>=(c[b+36>>2]|0)>>>0)ho(b,d,302915,l);if(!(a[h+16>>0]|0))break a;ho(b,d,302976,m);break a}default:{c[j>>2]=g;ho(b,d,302842,j);aa=o;return}}}while(0);if((e|0)==(f|0)){aa=o;return}do switch(e|0){case -1:{h=330980;break}case -2:{h=330976;break}case -3:{h=330972;break}case -4:{h=330968;break}case -5:{h=330963;break}case -16:{h=330955;break}case -32:{h=330950;break}case -24:{h=330939;break}case -64:{h=330934;break}case 0:{h=330930;break}case -17:{h=330923;break}default:h=330910}while(0);do switch(f|0){case -1:{e=330980;break}case -2:{e=330976;break}case -3:{e=330972;break}case -4:{e=330968;break}case -5:{e=330963;break}case -16:{e=330955;break}case -32:{e=330950;break}case -24:{e=330939;break}case -64:{e=330934;break}case 0:{e=330930;break}case -17:{e=330923;break}default:e=330910}while(0);c[n>>2]=g;c[n+4>>2]=h;c[n+8>>2]=e;ho(b,d,303033,n);aa=o;return}function jo(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 h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+48|0;m=p+24|0;o=p;n=d+4|0;h=c[n>>2]|0;i=c[d>>2]|0;j=h-i>>2;k=c[e>>2]|0;l=(c[e+4>>2]|0)-k>>2;if((j|0)!=(l|0)){c[m>>2]=l;c[m+4>>2]=g;c[m+8>>2]=j;ho(a,b,302495,m);aa=p;return}if((h|0)==(i|0)){aa=p;return}l=0;while(1){j=c[i+(l<<2)>>2]|0;k=c[k+(l<<2)>>2]|0;if((j|0)!=0&((k|0)!=(j|0)&(k|0)!=0)){do switch(j|0){case -1:{i=330980;break}case -2:{i=330976;break}case -3:{i=330972;break}case -4:{i=330968;break}case -5:{i=330963;break}case -16:{i=330955;break}case -32:{i=330950;break}case -24:{i=330939;break}case -64:{i=330934;break}case -17:{i=330923;break}default:i=330910}while(0);do switch(k|0){case -1:{h=330980;break}case -2:{h=330976;break}case -3:{h=330972;break}case -4:{h=330968;break}case -5:{h=330963;break}case -16:{h=330955;break}case -32:{h=330950;break}case -24:{h=330939;break}case -64:{h=330934;break}case -17:{h=330923;break}default:h=330910}while(0);c[o>>2]=g;c[o+4>>2]=l;c[o+8>>2]=f;c[o+12>>2]=i;c[o+16>>2]=h;ho(a,b,301588,o);h=c[n>>2]|0;i=c[d>>2]|0}j=l+1|0;if(j>>>0>=h-i>>2>>>0)break;k=c[e>>2]|0;l=j}aa=p;return}function ko(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,p=0;o=aa;aa=aa+112|0;n=o+104|0;m=o+96|0;l=o+88|0;k=o+56|0;i=o+32|0;h=o+8|0;f=o;if((c[b+24>>2]|0)==1?(a[(c[b+4>>2]|0)+9>>0]|0)==0:0)ho(b,d,302397,f);j=e+16|0;g=j;f=c[g>>2]|0;g=c[g+4>>2]|0;if(g>>>0>0|(g|0)==0&f>>>0>4294967295){c[h>>2]=302420;p=h+8|0;c[p>>2]=f;c[p+4>>2]=g;g=h+16|0;c[g>>2]=-1;c[g+4>>2]=0;ho(b,d,302223,h)}if(a[e+32>>0]|0){g=e+24|0;f=g;h=c[f>>2]|0;f=c[f+4>>2]|0;if(f>>>0>0|(f|0)==0&h>>>0>4294967295){c[i>>2]=302420;p=i+8|0;c[p>>2]=h;c[p+4>>2]=f;h=i+16|0;c[h>>2]=-1;c[h+4>>2]=0;ho(b,d,302259,i);h=g;i=c[h+4>>2]|0;h=c[h>>2]|0}else i=f;g=j;f=c[g>>2]|0;g=c[g+4>>2]|0;if(i>>>0<g>>>0|(i|0)==(g|0)&h>>>0<f>>>0){c[k>>2]=302420;p=k+8|0;c[p>>2]=h;c[p+4>>2]=i;c[k+16>>2]=302420;p=k+24|0;c[p>>2]=f;c[p+4>>2]=g;ho(b,d,302291,k)}}if(a[e+33>>0]|0)ho(b,d,323930,l);g=e+40|0;f=c[g>>2]|0;do if((f|0)==-17)if(!(a[(c[b+4>>2]|0)+9>>0]|0)){ho(b,d,302426,m);f=c[g>>2]|0;break}else{aa=o;return}while(0);if((f+17|0)>>>0<2){aa=o;return}ho(b,d,302455,n);aa=o;return}function lo(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,p=0;o=aa;aa=aa+112|0;n=o+96|0;m=o+88|0;l=o+56|0;i=o+32|0;h=o+8|0;if((c[b+28>>2]|0)==1)ho(b,d,302187,o);k=e+16|0;g=k;f=c[g>>2]|0;g=c[g+4>>2]|0;if(g>>>0>0|(g|0)==0&f>>>0>65536){c[h>>2]=302217;j=h+8|0;c[j>>2]=f;c[j+4>>2]=g;j=h+16|0;c[j>>2]=65536;c[j+4>>2]=0;ho(b,d,302223,h)}j=e+32|0;if(a[j>>0]|0){g=e+24|0;f=g;h=c[f>>2]|0;f=c[f+4>>2]|0;if(f>>>0>0|(f|0)==0&h>>>0>65536){c[i>>2]=302217;p=i+8|0;c[p>>2]=h;c[p+4>>2]=f;h=i+16|0;c[h>>2]=65536;c[h+4>>2]=0;ho(b,d,302259,i);h=g;i=c[h+4>>2]|0;h=c[h>>2]|0}else i=f;g=k;f=c[g>>2]|0;g=c[g+4>>2]|0;if(i>>>0<g>>>0|(i|0)==(g|0)&h>>>0<f>>>0){c[l>>2]=302217;p=l+8|0;c[p>>2]=h;c[p+4>>2]=i;c[l+16>>2]=302217;p=l+24|0;c[p>>2]=f;c[p+4>>2]=g;ho(b,d,302291,l)}}if(!(a[e+33>>0]|0)){aa=o;return}if(!(a[(c[b+4>>2]|0)+5>>0]|0)){ho(b,d,302334,m);aa=o;return}if(a[j>>0]|0){aa=o;return}ho(b,d,302361,n);aa=o;return}function mo(a){a=a|0;$A(a);return}function no(a){a=a|0;var b=0;b=_A(8)|0;c[b>>2]=290076;c[b+4>>2]=c[a+4>>2];return b|0}function oo(a,b){a=a|0;b=b|0;c[b>>2]=290076;c[b+4>>2]=c[a+4>>2];return}function po(a){a=a|0;return}function qo(a){a=a|0;$A(a);return}function ro(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=aa;aa=aa+16|0;g=f;h=c[b+4>>2]|0;b=(c[d+20>>2]|0)>(c[e+20>>2]|0)?d+12|0:e+12|0;c[g>>2]=(a[d+11>>0]|0)<0?c[d>>2]|0:d;ho(h,b,302602,g);aa=f;return}function so(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==302521?a+4|0:0)|0}function to(a){a=a|0;return 286104}function uo(a){a=a|0;return}function vo(a){a=a|0;$A(a);return}function wo(a){a=a|0;var b=0;b=_A(8)|0;c[b>>2]=290032;c[b+4>>2]=c[a+4>>2];return b|0}function xo(a,b){a=a|0;b=b|0;c[b>>2]=290032;c[b+4>>2]=c[a+4>>2];return}function yo(a){a=a|0;return}function zo(a){a=a|0;$A(a);return}function Ao(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=aa;aa=aa+16|0;e=d;f=c[a+4>>2]|0;a=c[f+104>>2]|0;c[e>>2]=c[b>>2];ho(f,a,330905,e);aa=d;return}function Bo(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==303074?a+4|0:0)|0}function Co(a){a=a|0;return 286128}function Do(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a>>2]=289768;e=a+84|0;f=c[e>>2]|0;if(f|0){g=a+88|0;b=c[g>>2]|0;if((b|0)==(f|0))b=f;else{do{d=c[b+-20>>2]|0;if(d|0){c[b+-16>>2]=d;$A(d)}d=c[b+-32>>2]|0;if(d|0){c[b+-28>>2]=d;$A(d)}b=b+-36|0}while((b|0)!=(f|0));b=c[e>>2]|0}c[g>>2]=f;$A(b)}b=c[a+72>>2]|0;if(b|0){c[a+76>>2]=b;$A(b)}b=c[a+64>>2]|0;if((a+48|0)==(b|0)){ma[c[(c[b>>2]|0)+16>>2]&255](b);return}if(!b)return;ma[c[(c[b>>2]|0)+20>>2]&255](b);return}function Eo(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a>>2]=289768;e=a+84|0;f=c[e>>2]|0;if(f|0){g=a+88|0;b=c[g>>2]|0;if((b|0)==(f|0))b=f;else{do{d=c[b+-20>>2]|0;if(d|0){c[b+-16>>2]=d;$A(d)}d=c[b+-32>>2]|0;if(d|0){c[b+-28>>2]=d;$A(d)}b=b+-36|0}while((b|0)!=(f|0));b=c[e>>2]|0}c[g>>2]=f;$A(b)}b=c[a+72>>2]|0;if(b|0){c[a+76>>2]=b;$A(b)}b=c[a+64>>2]|0;if((a+48|0)==(b|0)){ma[c[(c[b>>2]|0)+16>>2]&255](b);$A(a);return}if(!b){$A(a);return}ma[c[(c[b>>2]|0)+20>>2]&255](b);$A(a);return}function Fo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;My(a+48|0,c[b+36>>2]|0);return 0}function Go(a,b){a=a|0;b=b|0;var d=0;d=b+12|0;c[a+104>>2]=d;Np(a,d,2,b+48|0);Ny(a+48|0,b+88|0,b+100|0);return 0}function Ho(a,b){a=a|0;b=b|0;c[a+104>>2]=b+124;dz(a+48|0);return 0}function Io(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Oy(a+48|0,c[b+60>>2]|0);return 0}function Jo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Py(a+48|0,c[b+60>>2]|0);return 0}function Ko(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;c[a+104>>2]=b+12;f=c[a+16>>2]|0;d=c[f+64>>2]|0;f=(c[f+68>>2]|0)-d>>2;e=c[b+96>>2]|0;if(e>>>0<f>>>0){Qy(a+48|0,c[b+60>>2]|0,(c[d+(e<<2)>>2]|0)+52|0);aa=h;return 0}else{c[g>>2]=330237;c[g+4>>2]=f;ho(a,b+72|0,301811,g);aa=h;return 0}return 0}function Lo(a,b){a=a|0;b=b|0;var d=0,e=0;c[a+104>>2]=b+12;e=a+48|0;Ry(e);a=c[b+36>>2]|0;d=c[b+40>>2]|0;if((a|0)!=(d|0))do{Sy(e,c[a+24>>2]|0);a=a+36|0}while((a|0)!=(d|0));Sy(e,c[b+72>>2]|0);Ty(e);return 0}function Mo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;c[a+104>>2]=b+12;f=c[a+16>>2]|0;d=c[f+76>>2]|0;f=(c[f+80>>2]|0)-d>>2;e=c[b+60>>2]|0;if(e>>>0<f>>>0){g=c[d+(e<<2)>>2]|0;Uy(a+48|0,g+52|0,g+64|0);aa=h;return 0}else{c[g>>2]=331281;c[g+4>>2]=f;ho(a,b+36|0,301811,g);aa=h;return 0}return 0}function No(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+64|0;j=k+8|0;h=k;g=k+16|0;i=d+12|0;c[b+104>>2]=i;e=c[d+124>>2]|0;f=b+16|0;l=c[f>>2]|0;if((c[l+140>>2]|0)-(c[l+136>>2]|0)>>2>>>0<=e>>>0){Am(g,17);c[h>>2]=c[g>>2];c[h+4>>2]=e;ho(b,i,303664,h)}do if(a[d+36>>0]|0){g=c[f>>2]|0;f=c[g+124>>2]|0;g=(c[g+128>>2]|0)-f>>2;e=c[d+64>>2]|0;if(e>>>0<g>>>0){l=c[f+(e<<2)>>2]|0;jo(b,i,d+88|0,l+24|0,331281,330329);jo(b,i,d+76|0,l+12|0,331281,301775);break}else{c[j>>2]=301885;c[j+4>>2]=g;ho(b,d+40|0,301811,j);break}}while(0);Vy(b+48|0,d+76|0,d+88|0);aa=k;return 0}function Oo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Yy(a+48|0,c[b+36>>2]|0);return 0}function Po(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;_y(a+48|0,c[b+60>>2]|0);return 0}function Qo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;$y(a+48|0,c[b+36>>2]|0);return 0}function Ro(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;az(a+48|0);return 0}function So(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;c[a+104>>2]=b+12;g=a+48|0;f=c[a+16>>2]|0;d=c[f+88>>2]|0;f=(c[f+92>>2]|0)-d>>2;e=c[b+60>>2]|0;if(e>>>0<f>>>0){h=c[(c[d+(e<<2)>>2]|0)+12>>2]|0;fz(g,h);aa=i;return 0}else{c[h>>2]=330254;c[h+4>>2]=f;ho(a,b+36|0,301811,h);h=0;fz(g,h);aa=i;return 0}return 0}function To(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k+8|0;g=k;i=d+12|0;c[b+104>>2]=i;f=c[b+16>>2]|0;e=c[f+88>>2]|0;f=(c[f+92>>2]|0)-e>>2;h=c[d+60>>2]|0;if(h>>>0>=f>>>0){c[g>>2]=330254;c[g+4>>2]=f;ho(b,d+36|0,301811,g);j=0;b=b+48|0;gz(b,j);aa=k;return 0}e=c[e+(h<<2)>>2]|0;if(!(a[e+16>>0]|0)){c[j>>2]=h;ho(b,i,303814,j)}j=c[e+12>>2]|0;b=b+48|0;gz(b,j);aa=k;return 0}function Uo(a,b){a=a|0;b=b|0;var d=0;d=b+12|0;c[a+104>>2]=d;Np(a,d,4,b+48|0);ez(a+48|0,b+88|0,b+100|0);return 0}function Vo(a,b){a=a|0;b=b|0;if(!(c[b+152>>2]|0))return 0;bz(a+48|0)|0;return 0}function Wo(a,b){a=a|0;b=b|0;c[a+104>>2]=(c[b+152>>2]|0)==0?b+124|0:b+156|0;dz(a+48|0);return 0}function Xo(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;j=aa;aa=aa+64|0;i=j+16|0;e=j;f=j+20|0;h=b+12|0;c[a+104>>2]=h;g=b+36|0;d=c[g>>2]|0;k=c[a+16>>2]|0;if((c[k+164>>2]|0)==(c[k+160>>2]|0)){Am(f,d);c[e>>2]=c[f>>2];ho(a,h,303401,e);d=c[g>>2]|0}e=c[b+40>>2]|0;Am(f,d);d=c[f+20>>2]|0;if((e|0)==-1){i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}if(!((e|0)!=0&(e+-1&e|0)==0))ho(a,h,310376,j+8|0);if(e>>>0<=d>>>0){i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}c[i>>2]=d;ho(a,h,303444,i);i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}function Yo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;iz(a+48|0,Op(a,b+36|0)|0);return 0}function Zo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;jz(a+48|0,Op(a,b+36|0)|0);return 0}function _o(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;kz(a+48|0,Op(a,b+36|0)|0);return 0}function $o(a,b){a=a|0;b=b|0;var d=0;d=b+12|0;c[a+104>>2]=d;Np(a,d,3,b+48|0);lz(a+48|0,b+88|0,b+100|0);return 0}function ap(a,b){a=a|0;b=b|0;c[a+104>>2]=b+124;dz(a+48|0);return 0}function bp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+4|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+164>>2]|0)!=(c[g+160>>2]|0)){g=a+48|0;mz(g);aa=f;return 0}Am(d,199);c[e>>2]=c[d>>2];ho(a,b,303401,e);g=a+48|0;mz(g);aa=f;return 0}function cp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;i=j+8|0;h=j;g=j+16|0;f=b+12|0;c[a+104>>2]=f;e=a+16|0;d=c[e>>2]|0;if((c[d+164>>2]|0)==(c[d+160>>2]|0)){Am(g,198);c[h>>2]=c[g>>2];ho(a,f,303401,h);d=c[e>>2]|0}d=(c[d+176>>2]|0)-(c[d+172>>2]|0)>>2;if((c[b+60>>2]|0)>>>0<d>>>0){aa=j;return 0}c[i>>2]=303734;c[i+4>>2]=d;ho(a,b+36|0,301811,i);aa=j;return 0}function dp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+4|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+164>>2]|0)!=(c[g+160>>2]|0)){g=a+48|0;nz(g);aa=f;return 0}Am(d,200);c[e>>2]=c[d>>2];ho(a,b,303401,e);g=a+48|0;nz(g);aa=f;return 0}function ep(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+4|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+164>>2]|0)!=(c[g+160>>2]|0)){g=a+48|0;oz(g);aa=f;return 0}Am(d,51);c[e>>2]=c[d>>2];ho(a,b,303401,e);g=a+48|0;oz(g);aa=f;return 0}function fp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;i=j+8|0;h=j;g=j+16|0;f=b+12|0;c[a+104>>2]=f;e=a+16|0;d=c[e>>2]|0;if((c[d+164>>2]|0)==(c[d+160>>2]|0)){Am(g,197);c[h>>2]=c[g>>2];ho(a,f,303401,h);d=c[e>>2]|0}d=(c[d+176>>2]|0)-(c[d+172>>2]|0)>>2;if((c[b+60>>2]|0)>>>0<d>>>0){i=a+48|0;pz(i);aa=j;return 0}c[i>>2]=303734;c[i+4>>2]=d;ho(a,b+36|0,301811,i);i=a+48|0;pz(i);aa=j;return 0}function gp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+4|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+164>>2]|0)!=(c[g+160>>2]|0)){g=a+48|0;qz(g);aa=f;return 0}Am(d,50);c[e>>2]=c[d>>2];ho(a,b,303401,e);g=a+48|0;qz(g);aa=f;return 0}function hp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+8|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+140>>2]|0)!=(c[g+136>>2]|0)){g=a+48|0;rz(g);aa=f;return 0}Am(d,203);c[e>>2]=c[d>>2];c[e+4>>2]=0;ho(a,b,303664,e);g=a+48|0;rz(g);aa=f;return 0}function ip(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;i=j+8|0;h=j;g=j+16|0;f=b+12|0;c[a+104>>2]=f;e=a+16|0;d=c[e>>2]|0;if((c[d+140>>2]|0)==(c[d+136>>2]|0)){Am(g,202);c[h>>2]=c[g>>2];c[h+4>>2]=0;ho(a,f,303664,h);d=c[e>>2]|0}d=(c[d+152>>2]|0)-(c[d+148>>2]|0)>>2;if((c[b+60>>2]|0)>>>0<d>>>0){aa=j;return 0}c[i>>2]=303721;c[i+4>>2]=d;ho(a,b+36|0,301811,i);aa=j;return 0}function jp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;i=j+8|0;h=j;g=j+16|0;f=b+12|0;c[a+104>>2]=f;e=a+16|0;d=c[e>>2]|0;if((c[d+140>>2]|0)==(c[d+136>>2]|0)){Am(g,201);c[h>>2]=c[g>>2];c[h+4>>2]=0;ho(a,f,303664,h);d=c[e>>2]|0}d=(c[d+152>>2]|0)-(c[d+148>>2]|0)>>2;if((c[b+60>>2]|0)>>>0<d>>>0){i=a+48|0;sz(i);aa=j;return 0}c[i>>2]=303721;c[i+4>>2]=d;ho(a,b+36|0,301811,i);i=a+48|0;sz(i);aa=j;return 0}function kp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;e=g+8|0;d=b+12|0;c[a+104>>2]=d;b=c[b+60>>2]|0;h=c[a+16>>2]|0;if((c[h+140>>2]|0)-(c[h+136>>2]|0)>>2>>>0>b>>>0){h=a+48|0;tz(h);aa=g;return 0}Am(e,204);c[f>>2]=c[e>>2];c[f+4>>2]=b;ho(a,d,303664,f);h=a+48|0;tz(h);aa=g;return 0}function lp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;e=g+8|0;d=b+12|0;c[a+104>>2]=d;b=c[b+60>>2]|0;h=c[a+16>>2]|0;if((c[h+140>>2]|0)-(c[h+136>>2]|0)>>2>>>0>b>>>0){h=a+48|0;uz(h);aa=g;return 0}Am(e,205);c[f>>2]=c[e>>2];c[f+4>>2]=b;ho(a,d,303664,f);h=a+48|0;uz(h);aa=g;return 0}function mp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;e=g+8|0;d=b+12|0;c[a+104>>2]=d;b=c[b+60>>2]|0;h=c[a+16>>2]|0;if((c[h+140>>2]|0)-(c[h+136>>2]|0)>>2>>>0>b>>>0){h=a+48|0;vz(h);aa=g;return 0}Am(e,206);c[f>>2]=c[e>>2];c[f+4>>2]=b;ho(a,d,303664,f);h=a+48|0;vz(h);aa=g;return 0}function np(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;e=g+8|0;d=b+12|0;c[a+104>>2]=d;b=c[b+60>>2]|0;h=c[a+16>>2]|0;if((c[h+140>>2]|0)-(c[h+136>>2]|0)>>2>>>0>b>>>0){h=a+48|0;wz(h);aa=g;return 0}Am(e,207);c[f>>2]=c[e>>2];c[f+4>>2]=b;ho(a,d,303664,f);h=a+48|0;wz(h);aa=g;return 0}function op(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;xz(a+48|0);return 0}function pp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;yz(a+48|0);return 0}function qp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;return 0}function rp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Bz(a+48|0);return 0}function sp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;c[a+104>>2]=b+12;f=c[a+16>>2]|0;d=c[f+76>>2]|0;f=(c[f+80>>2]|0)-d>>2;e=c[b+60>>2]|0;if(e>>>0<f>>>0){g=c[d+(e<<2)>>2]|0;Wy(a+48|0,g+52|0,g+64|0);aa=h;return 0}else{c[g>>2]=331281;c[g+4>>2]=f;ho(a,b+36|0,301811,g);aa=h;return 0}return 0}function tp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+64|0;j=k+8|0;h=k;g=k+16|0;i=d+12|0;c[b+104>>2]=i;e=c[d+124>>2]|0;f=b+16|0;l=c[f>>2]|0;if((c[l+140>>2]|0)-(c[l+136>>2]|0)>>2>>>0<=e>>>0){Am(g,19);c[h>>2]=c[g>>2];c[h+4>>2]=e;ho(b,i,303664,h)}do if(a[d+36>>0]|0){g=c[f>>2]|0;f=c[g+124>>2]|0;g=(c[g+128>>2]|0)-f>>2;e=c[d+64>>2]|0;if(e>>>0<g>>>0){l=c[f+(e<<2)>>2]|0;jo(b,i,d+88|0,l+24|0,331281,330329);jo(b,i,d+76|0,l+12|0,331281,301775);break}else{c[j>>2]=301885;c[j+4>>2]=g;ho(b,d+40|0,301811,j);break}}while(0);Xy(b+48|0,d+76|0,d+88|0);aa=k;return 0}function up(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Cz(a+48|0);return 0}function vp(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;j=aa;aa=aa+64|0;i=j+16|0;e=j;f=j+20|0;h=b+12|0;c[a+104>>2]=h;g=b+36|0;d=c[g>>2]|0;k=c[a+16>>2]|0;if((c[k+164>>2]|0)==(c[k+160>>2]|0)){Am(f,d);c[e>>2]=c[f>>2];ho(a,h,303401,e);d=c[g>>2]|0}e=c[b+40>>2]|0;Am(f,d);d=c[f+20>>2]|0;if((e|0)==-1){i=a+48|0;k=c[g>>2]|0;Dz(i,k);aa=j;return 0}if(!((e|0)!=0&(e+-1&e|0)==0))ho(a,h,310376,j+8|0);if(e>>>0<=d>>>0){i=a+48|0;k=c[g>>2]|0;Dz(i,k);aa=j;return 0}c[i>>2]=d;ho(a,h,303444,i);i=a+48|0;k=c[g>>2]|0;Dz(i,k);aa=j;return 0}function wp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Fz(a+48|0,c[b+36>>2]|0);return 0}function xp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Jz(a+48|0);return 0}function yp(a,b){a=a|0;b=b|0;var d=0;d=b+12|0;c[a+104>>2]=d;Np(a,d,6,b+48|0);Ez(a+48|0,b+88|0,b+100|0);return 0}function zp(a,b){a=a|0;b=b|0;Zy(a+48|0);return 0}function Ap(a,b){a=a|0;b=b|0;c[a+104>>2]=b+124;dz(a+48|0);return 0}function Bp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;c[a+104>>2]=b+12;f=c[a+16>>2]|0;d=c[f+64>>2]|0;f=(c[f+68>>2]|0)-d>>2;e=c[b+60>>2]|0;if(e>>>0<f>>>0){Az(a+48|0,(c[d+(e<<2)>>2]|0)+52|0);aa=h;return 0}else{c[g>>2]=330237;c[g+4>>2]=f;ho(a,b+36|0,301811,g);aa=h;return 0}return 0}function Cp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;zz(a+48|0);return 0}function Dp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Ky(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Ky(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Ky(m,o);aa=n;return 0}function Ep(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Ly(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Ly(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Ly(m,o);aa=n;return 0}function Fp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Gy(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Gy(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Gy(m,o);aa=n;return 0}function Gp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Hy(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Hy(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Hy(m,o);aa=n;return 0}function Hp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Iy(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Iy(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Iy(m,o);aa=n;return 0}function Ip(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Jy(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Jy(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Jy(m,o);aa=n;return 0}function Jp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Gz(a+48|0,c[b+36>>2]|0);return 0}function Kp(a,b){a=a|0;b=b|0;var d=0;c[a+104>>2]=b+12;d=b+40|0;Hz(a+48|0,c[b+36>>2]|0,c[d>>2]|0,c[d+4>>2]|0);return 0}function Lp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=aa;aa=aa+16|0;e=d;c[a+104>>2]=b+12;f=c[b+36>>2]|0;b=b+40|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Iz(a+48|0,f,e);aa=d;return 0}function Mp(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;j=aa;aa=aa+64|0;i=j+16|0;e=j;f=j+20|0;h=b+12|0;c[a+104>>2]=h;g=b+36|0;d=c[g>>2]|0;k=c[a+16>>2]|0;if((c[k+164>>2]|0)==(c[k+160>>2]|0)){Am(f,d);c[e>>2]=c[f>>2];ho(a,h,303401,e);d=c[g>>2]|0}e=c[b+40>>2]|0;Am(f,d);d=c[f+20>>2]|0;if((e|0)==-1){i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}if(!((e|0)!=0&(e+-1&e|0)==0))ho(a,h,310376,j+8|0);if(e>>>0<=d>>>0){i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}c[i>>2]=d;ho(a,h,303444,i);i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}function Np(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,n=0;n=aa;aa=aa+64|0;m=n+16|0;h=n+8|0;g=n;k=n+24|0;l=f+40|0;if((c[f+44>>2]|0)!=(c[l>>2]|0)?(a[(c[b+4>>2]|0)+6>>0]|0)==0:0){Am(k,e);c[g>>2]=c[k>>2];ho(b,d,303584,g)}j=f+52|0;if((c[f+56>>2]|0)-(c[j>>2]|0)>>2>>>0>1?(a[(c[b+4>>2]|0)+6>>0]|0)==0:0){Am(k,e);c[h>>2]=c[k>>2];ho(b,d,303619,h)}if(!(a[f>>0]|0)){aa=n;return}i=c[b+16>>2]|0;g=c[i+124>>2]|0;i=(c[i+128>>2]|0)-g>>2;h=c[f+28>>2]|0;if(h>>>0<i>>>0){m=c[g+(h<<2)>>2]|0;Am(k,e);jo(b,d,j,m+24|0,c[k>>2]|0,330329);Am(k,e);jo(b,d,l,m+12|0,c[k>>2]|0,301775);aa=n;return}else{c[m>>2]=301885;c[m+4>>2]=i;ho(b,f+4|0,301811,m);aa=n;return}}function Op(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+16|0;k=m+8|0;l=m;g=c[b+20>>2]|0;e=c[g+52>>2]|0;j=(c[g+56>>2]|0)-e>>2;h=c[g+76>>2]|0;i=c[g+80>>2]|0;f=j+(Ok(h,i)|0)|0;g=Qk(g,d)|0;if(g>>>0<f>>>0)if(g>>>0<j>>>0){l=c[e+(g<<2)>>2]|0;aa=m;return l|0}else{l=Pk(h,i,g-j|0)|0;aa=m;return l|0}if((c[d+20>>2]|0)!=1){c[k>>2]=f;ho(b,d,303777,k);l=0;aa=m;return l|0}e=d+24|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[l>>2]=e;ho(b,d,303747,l);l=0;aa=m;return l|0}function Pp(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;k=aa;aa=aa+160|0;g=k+136|0;e=k+112|0;j=k;c[j>>2]=289768;c[j+4>>2]=d;c[j+8>>2]=b;f=j+12|0;i=j+64|0;c[i>>2]=0;h=j+72|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+24>>2]=0;c[j+104>>2]=0;c[j+108>>2]=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;f=j;d=e+16|0;c[e>>2]=290032;c[e+4>>2]=f;c[d>>2]=e;b=g+16|0;c[b>>2]=g;c[g>>2]=290032;c[g+4>>2]=f;ao(g,j+48|0);b=c[b>>2]|0;if((g|0)!=(b|0)){if(b|0)ma[c[(c[b>>2]|0)+20>>2]&255](b)}else ma[c[(c[b>>2]|0)+16>>2]&255](b);b=c[d>>2]|0;if((e|0)!=(b|0)){if(b|0)ma[c[(c[b>>2]|0)+20>>2]&255](b)}else ma[c[(c[b>>2]|0)+16>>2]&255](b);g=bo(j,a)|0;c[j>>2]=289768;a=j+84|0;e=c[a>>2]|0;if(e|0){f=j+88|0;b=c[f>>2]|0;if((b|0)==(e|0))b=e;else{do{d=c[b+-20>>2]|0;if(d|0){c[b+-16>>2]=d;$A(d)}d=c[b+-32>>2]|0;if(d|0){c[b+-28>>2]=d;$A(d)}b=b+-36|0}while((b|0)!=(e|0));b=c[a>>2]|0}c[f>>2]=e;$A(b)}b=c[h>>2]|0;if(b|0){c[j+76>>2]=b;$A(b)}b=c[i>>2]|0;if((j+48|0)==(b|0)){ma[c[(c[b>>2]|0)+16>>2]&255](b);aa=k;return g|0}if(!b){aa=k;return g|0}ma[c[(c[b>>2]|0)+20>>2]&255](b);aa=k;return g|0}function Qp(a){a=a|0;return}function Rp(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=_A(12)|0;bm(g,e,f);f=_A(40)|0;c[f>>2]=g;Vn(f+4|0,b,d);c[f+16>>2]=1;b=c[f>>2]|0;d=c[b>>2]|0;c[f+20>>2]=d;c[f+24>>2]=d+(c[b+4>>2]|0);c[f+28>>2]=d;c[f+32>>2]=d;c[f+36>>2]=d;c[a>>2]=f;return}function Sp(b,e,f){b=b|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,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;L=aa;aa=aa+96|0;K=L+72|0;C=L+8|0;B=L;J=L+12|0;s=L+52|0;t=L+32|0;H=e+36|0;m=c[H>>2]|0;D=e+32|0;c[D>>2]=m;l=m;u=e+24|0;n=c[u>>2]|0;a:do if(n>>>0>l>>>0){g=e+16|0;k=e+28|0;I=e+4|0;j=I+11|0;i=e+8|0;q=t+4|0;z=t+8|0;v=t+12|0;x=t+16|0;r=s+4|0;A=s+8|0;w=s+12|0;y=s+16|0;G=n;b:while(1){n=a[l>>0]|0;c:do switch(n<<24>>24){case 111:{n=59;break b}case 41:{n=20;break b}case 34:{n=35;break b}case 45:case 43:{n=36;break b}case 48:{n=51;break b}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{n=54;break b}case 36:{n=55;break b}case 97:{n=56;break b}case 105:{n=57;break b}case 110:{n=58;break b}case 40:{l=m;if(G>>>0<=l>>>0){n=17;break b}p=l+1|0;c[H>>2]=p;o=p>>>0<G>>>0;if(!((a[l>>0]|0)==40&o)){n=10;break b}c[H>>2]=l+2;if((a[p>>0]|0)!=59){n=10;break b}if(!($p(e,f)|0)){n=9;break b}break}case 59:{n=m;if(G>>>0>n>>>0){l=n+1|0;c[H>>2]=l;if((a[n>>0]|0)==59&l>>>0<G>>>0?(h=n+2|0,c[H>>2]=h,(a[l>>0]|0)==59):0){if(h>>>0>=G>>>0){n=26;break b}l=h;while(1){n=l+1|0;c[H>>2]=n;if((a[l>>0]|0)==10)break;if(n>>>0<G>>>0)l=n;else{h=n;n=26;break b}}c[g>>2]=(c[g>>2]|0)+1;c[k>>2]=n;break c}c[H>>2]=l}else{c[H>>2]=m;l=m}n=a[j>>0]|0;M=n<<24>>24<0;n=M?c[i>>2]|0:n&255;o=c[g>>2]|0;G=c[k>>2]|0;p=m-G+1|0;G=l-G+1|0;c[s>>2]=M?c[I>>2]|0:I;c[r>>2]=n;c[A>>2]=o;c[w>>2]=(p|0)>1?p:1;c[y>>2]=(G|0)>1?G:1;c[K>>2]=c[s>>2];c[K+4>>2]=c[s+4>>2];c[K+8>>2]=c[s+8>>2];c[K+12>>2]=c[s+12>>2];c[K+16>>2]=c[s+16>>2];aq(f,K,303896,B);break}case 10:case 13:case 9:case 32:while(1){switch(n<<24>>24){case 13:case 9:case 32:{l=l+1|0;c[H>>2]=l;break}case 10:{l=l+1|0;c[H>>2]=l;c[g>>2]=(c[g>>2]|0)+1;c[k>>2]=l;break}default:break c}if(l>>>0>=G>>>0)break c;n=a[l>>0]|0}default:{n=n&255;if((n+-97|0)>>>0<26){n=61;break b}if(a[15616+(n+1)>>0]&1){n=63;break b}l=l+1|0;c[H>>2]=l;o=a[j>>0]|0;n=o<<24>>24<0;o=n?c[i>>2]|0:o&255;p=c[g>>2]|0;M=c[k>>2]|0;G=m-M+1|0;M=l-M+1|0;c[t>>2]=n?c[I>>2]|0:I;c[q>>2]=o;c[z>>2]=p;c[v>>2]=(G|0)>1?G:1;c[x>>2]=(M|0)>1?M:1;c[K>>2]=c[t>>2];c[K+4>>2]=c[t+4>>2];c[K+8>>2]=c[t+8>>2];c[K+12>>2]=c[t+12>>2];c[K+16>>2]=c[t+16>>2];aq(f,K,303896,C)}}while(0);m=c[H>>2]|0;c[D>>2]=m;l=m;n=c[u>>2]|0;if(n>>>0>l>>>0)G=n;else{l=I;h=I;break a}}switch(n|0){case 9:{F=a[j>>0]|0;E=F<<24>>24<0;F=E?c[i>>2]|0:F&255;e=c[g>>2]|0;M=c[k>>2]|0;G=(c[D>>2]|0)-M+1|0;M=(c[H>>2]|0)-M+1|0;c[J>>2]=E?c[I>>2]|0:I;c[J+4>>2]=F;c[J+8>>2]=e;c[J+12>>2]=(G|0)>1?G:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,12);aa=L;return}case 10:{c[H>>2]=p;if((a[l>>0]|0)==40&o?(F=l+2|0,c[H>>2]=F,(a[p>>0]|0)==64):0){l=F;d:while(1){n=l>>>0<G>>>0;if(n)h=d[l>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break d;if(n)break;else h=-1}M=l+1|0;c[H>>2]=M;l=M}M=l;E=a[j>>0]|0;D=E<<24>>24<0;E=D?c[i>>2]|0:E&255;e=c[g>>2]|0;H=c[k>>2]|0;G=m-H+1|0;H=M-H+1|0;c[J>>2]=D?c[I>>2]|0:I;c[J+4>>2]=E;c[J+8>>2]=e;c[J+12>>2]=(G|0)>1?G:1;c[J+16>>2]=(H|0)>1?H:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];my(b,K,106,F,-2-m+M|0);aa=L;return}c[H>>2]=p;h=p;break}case 17:{c[H>>2]=m;h=m;break}case 20:{E=l+1|0;c[H>>2]=E;e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=E-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,30);aa=L;return}case 26:{e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=h-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,12);aa=L;return}case 35:{Tp(b,e,f);aa=L;return}case 36:{n=l+1|0;c[H>>2]=n;h=n;e:do if(n>>>0<G>>>0)switch(a[n>>0]|0){case 105:{Up(b,e);aa=L;return}case 110:{Vp(b,e);aa=L;return}case 48:{g=l+2|0;c[H>>2]=g;if((a[n>>0]|0)==48&g>>>0<G>>>0?(c[H>>2]=l+3,(a[g>>0]|0)==120):0){_p(b,e,43);aa=L;return}c[H>>2]=h;Wp(b,e,43);aa=L;return}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{Wp(b,e,43);aa=L;return}default:break e}while(0);o=h;l=n;f:while(1){n=l>>>0<G>>>0;if(n)h=d[l>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break f;if(n)break;else h=-1}M=l+1|0;c[H>>2]=M;o=M;l=M}e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=o-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];my(b,K,108,m,o-m|0);aa=L;return}case 51:{g=m;if((G>>>0>g>>>0?(E=g+1|0,c[H>>2]=E,(a[g>>0]|0)==48&E>>>0<G>>>0):0)?(c[H>>2]=g+2,(a[E>>0]|0)==120):0){_p(b,e,44);aa=L;return}c[H>>2]=m;Wp(b,e,44);aa=L;return}case 54:{Wp(b,e,44);aa=L;return}case 55:{Xp(b,e);aa=L;return}case 56:{Yp(b,e,330774,6,105);aa=L;return}case 57:{Up(b,e);aa=L;return}case 58:{Vp(b,e);aa=L;return}case 59:{Yp(b,e,330792,7,107);aa=L;return}case 61:{Zp(b,e);aa=L;return}case 63:{o=m;g:while(1){n=l>>>0<G>>>0;if(n)h=d[l>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break g;if(n)break;h=-1}M=l+1|0;c[H>>2]=M;o=M;l=M}e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=o-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];my(b,K,108,m,o-m|0);aa=L;return}}e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=h-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,21);aa=L;return}else{h=e+4|0;k=e+28|0;l=h;j=h+11|0;i=e+8|0;g=e+16|0}while(0);H=a[j>>0]|0;G=H<<24>>24<0;H=G?c[i>>2]|0:H&255;I=c[g>>2]|0;M=m-(c[k>>2]|0)+1|0;M=(M|0)>1?M:1;c[J>>2]=G?c[l>>2]|0:h;c[J+4>>2]=H;c[J+8>>2]=I;c[J+12>>2]=M;c[J+16>>2]=M;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,12);aa=L;return}function Tp(b,e,f){b=b|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,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;L=aa;aa=aa+128|0;J=L+96|0;C=L+8|0;B=L;K=L+16|0;v=L+76|0;w=L+56|0;x=L+36|0;I=e+32|0;g=c[I>>2]|0;z=e+36|0;h=c[z>>2]|0;y=e+24|0;i=c[y>>2]|0;if(h>>>0<i>>>0){h=h+1|0;c[z>>2]=h}G=e+4|0;E=G+11|0;F=e+8|0;H=e+16|0;A=e+28|0;o=v+4|0;u=v+8|0;q=v+12|0;s=v+16|0;n=w+4|0;t=w+8|0;p=w+12|0;r=w+16|0;do if(h>>>0<i>>>0){m=0;a:while(1){l=h+1|0;c[z>>2]=l;e=l;b:do switch(a[h>>0]|0){case 34:break a;case 92:{c:do if(l>>>0<i>>>0){k=h+2|0;c[z>>2]=k;e=k;switch(a[l>>0]|0){case 92:case 39:case 34:case 114:case 110:case 116:{h=k;e=m;break b}case 70:case 69:case 68:case 67:case 66:case 65:case 102:case 101:case 100:case 99:case 98:case 97:case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:break;default:{h=l;break c}}i=k>>>0<i>>>0;if(i)j=d[k>>0]|0;else j=-1;if(!(a[15616+(j+1)>>0]&4))h=l;else{if(!i){h=k;e=m;break b}h=h+3|0;c[z>>2]=h;e=m;break b}}while(0);h=h+-1|0;c[I>>2]=h;i=a[E>>0]|0;M=i<<24>>24<0;i=M?c[F>>2]|0:i&255;j=c[H>>2]|0;m=h;l=c[A>>2]|0;k=m-l+1|0;l=e-l+1|0;c[w>>2]=M?c[G>>2]|0:G;c[n>>2]=i;c[t>>2]=j;c[p>>2]=(k|0)>1?k:1;c[r>>2]=(l|0)>1?l:1;c[C>>2]=e-m;c[C+4>>2]=h;c[J>>2]=c[w>>2];c[J+4>>2]=c[w+4>>2];c[J+8>>2]=c[w+8>>2];c[J+12>>2]=c[w+12>>2];c[J+16>>2]=c[w+16>>2];aq(f,J,309708,C);h=c[z>>2]|0;e=1;break}case 10:{c[I>>2]=h;l=a[E>>0]|0;k=l<<24>>24<0;l=k?c[F>>2]|0:l&255;m=c[H>>2]|0;j=c[A>>2]|0;M=h-j+1|0;h=e-j+1|0;c[v>>2]=k?c[G>>2]|0:G;c[o>>2]=l;c[u>>2]=m;c[q>>2]=(M|0)>1?M:1;c[s>>2]=(h|0)>1?h:1;c[J>>2]=c[v>>2];c[J+4>>2]=c[v+4>>2];c[J+8>>2]=c[v+8>>2];c[J+12>>2]=c[v+12>>2];c[J+16>>2]=c[v+16>>2];aq(f,J,309690,B);c[H>>2]=(c[H>>2]|0)+1;h=c[z>>2]|0;c[A>>2]=h;e=1;break}default:{h=l;e=m}}while(0);i=c[y>>2]|0;if(h>>>0>=i>>>0){D=6;break}else m=e}if((D|0)==6){g=c[I>>2]|0;break}c[I>>2]=g;if(m){I=a[E>>0]|0;E=I<<24>>24<0;F=E?c[F>>2]|0:I&255;I=c[H>>2]|0;M=c[A>>2]|0;K=g-M+1|0;M=e-M+1|0;c[x>>2]=E?c[G>>2]|0:G;c[x+4>>2]=F;c[x+8>>2]=I;c[x+12>>2]=(K|0)>1?K:1;c[x+16>>2]=(M|0)>1?M:1;c[J>>2]=c[x>>2];c[J+4>>2]=c[x+4>>2];c[J+8>>2]=c[x+8>>2];c[J+12>>2]=c[x+12>>2];c[J+16>>2]=c[x+16>>2];ky(b,J,0);aa=L;return}else{M=a[E>>0]|0;E=M<<24>>24<0;F=E?c[F>>2]|0:M&255;H=c[H>>2]|0;M=c[A>>2]|0;I=g-M+1|0;M=e-M+1|0;c[K>>2]=E?c[G>>2]|0:G;c[K+4>>2]=F;c[K+8>>2]=H;c[K+12>>2]=(I|0)>1?I:1;c[K+16>>2]=(M|0)>1?M:1;c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];c[J+16>>2]=c[K+16>>2];my(b,J,109,g,e-g|0);aa=L;return}}while(0);M=a[E>>0]|0;E=M<<24>>24<0;F=E?c[F>>2]|0:M&255;H=c[H>>2]|0;M=c[A>>2]|0;I=g-M+1|0;M=h-M+1|0;c[K>>2]=E?c[G>>2]|0:G;c[K+4>>2]=F;c[K+8>>2]=H;c[K+12>>2]=(I|0)>1?I:1;c[K+16>>2]=(M|0)>1?M:1;c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];c[J+16>>2]=c[K+16>>2];ky(b,J,12);aa=L;return}
+function sa(a){a=a|0;var b=0;b=aa;aa=aa+a|0;aa=aa+15&-16;return b|0}function ta(){return aa|0}function ua(a){a=a|0;aa=a}function va(a,b){a=a|0;b=b|0;aa=a;ba=b}function wa(){var b=0,c=0,d=0;b=_A(11)|0;a[b>>0]=0;a[b+1>>0]=1;c=b+2|0;d=c+9|0;do{a[c>>0]=0;c=c+1|0}while((c|0)<(d|0));return b|0}function xa(a){a=a|0;if(!a)return;$A(a);return}function ya(b){b=b|0;return (a[b>>0]|0)!=0|0}function za(b,c){b=b|0;c=c|0;a[b>>0]=(c|0)!=0&1;return}function Aa(b){b=b|0;return (a[b+1>>0]|0)!=0|0}function Ba(b,c){b=b|0;c=c|0;a[b+1>>0]=(c|0)!=0&1;return}function Ca(b){b=b|0;return (a[b+2>>0]|0)!=0|0}function Da(b,c){b=b|0;c=c|0;a[b+2>>0]=(c|0)!=0&1;return}function Ea(b){b=b|0;return (a[b+3>>0]|0)!=0|0}function Fa(b,c){b=b|0;c=c|0;a[b+3>>0]=(c|0)!=0&1;return}function Ga(b){b=b|0;return (a[b+4>>0]|0)!=0|0}function Ha(b,c){b=b|0;c=c|0;a[b+4>>0]=(c|0)!=0&1;return}function Ia(b){b=b|0;return (a[b+5>>0]|0)!=0|0}function Ja(b,c){b=b|0;c=c|0;a[b+5>>0]=(c|0)!=0&1;return}function Ka(b){b=b|0;return (a[b+6>>0]|0)!=0|0}function La(b,c){b=b|0;c=c|0;a[b+6>>0]=(c|0)!=0&1;return}function Ma(b){b=b|0;return (a[b+7>>0]|0)!=0|0}function Na(b,c){b=b|0;c=c|0;a[b+7>>0]=(c|0)!=0&1;return}function Oa(b){b=b|0;return (a[b+8>>0]|0)!=0|0}function Pa(b,c){b=b|0;c=c|0;a[b+8>>0]=(c|0)!=0&1;return}function Qa(b){b=b|0;return (a[b+9>>0]|0)!=0|0}function Ra(b,c){b=b|0;c=c|0;a[b+9>>0]=(c|0)!=0&1;return}function Sa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=aa;aa=aa+16|0;e=f;Rp(e,a,Uz(a)|0,b,d);aa=f;return c[e>>2]|0}function Ta(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;h=j+4|0;g=j;i=h;f=i+11|0;do{a[i>>0]=a[d>>0]|0;i=i+1|0;d=d+1|0}while((i|0)<(f|0));a[h+11>>0]=0;i=_A(8)|0;c[g>>2]=0;h=ss(b,g,e,h)|0;c[i>>2]=h;c[i+4>>2]=c[g>>2];aa=j;return i|0}function Ua(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;g=j+4|0;h=j;i=g;f=i+11|0;do{a[i>>0]=a[d>>0]|0;i=i+1|0;d=d+1|0}while((i|0)<(f|0));a[g+11>>0]=0;i=_A(8)|0;c[h>>2]=0;g=ts(b,h,e,g)|0;c[i>>2]=g;c[i+4>>2]=c[h>>2];aa=j;return i|0}function Va(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,l=0;l=aa;aa=aa+32|0;i=l;c[i+12>>2]=0;j=i+16|0;a[i+17>>0]=1;a[i+18>>0]=1;k=i;h=k+11|0;do{a[k>>0]=a[f>>0]|0;k=k+1|0;f=f+1|0}while((k|0)<(h|0));a[j>>0]=(e|0)!=0&1;k=_A(8)|0;j=_A(376)|0;uC(j|0,0,212)|0;c[j+212>>2]=1065353216;e=j+216|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+232>>2]=1065353216;e=j+236|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+252>>2]=1065353216;e=j+256|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+272>>2]=1065353216;e=j+276|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+292>>2]=1065353216;e=j+296|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+312>>2]=1065353216;e=j+316|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+332>>2]=1065353216;e=j+336|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+352>>2]=1065353216;e=j+356|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+372>>2]=1065353216;d=Oc(292112,b,d,i,g,j)|0;c[k>>2]=d;c[k+4>>2]=j;aa=l;return k|0}function Wa(a,b){a=a|0;b=b|0;return Hm(a,b)|0}function Xa(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;f=h;g=f;e=g+11|0;do{a[g>>0]=a[c>>0]|0;g=g+1|0;c=c+1|0}while((g|0)<(e|0));g=Pp(b,d,f)|0;aa=h;return g|0}function Ya(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;f=h;g=f;e=g+11|0;do{a[g>>0]=a[c>>0]|0;g=g+1|0;c=c+1|0}while((g|0)<(e|0));g=$n(b,d,f)|0;aa=h;return g|0}function Za(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var 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;w=aa;aa=aa+112|0;r=w+80|0;q=w+64|0;v=w+44|0;m=w+88|0;u=w+32|0;o=w+12|0;p=w;Sn(v,0);l=(f|0)!=0;k=l?v:0;a[m>>0]=0;a[m+1>>0]=1;f=m+2|0;j=f+9|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(j|0));a[m+11>>0]=(g|0)!=0&1;a[m+12>>0]=(h|0)!=0&1;a[m+13>>0]=(i|0)!=0&1;c[u>>2]=0;s=u+4|0;c[s>>2]=0;c[u+8>>2]=0;Sn(o,k);t=(e|0)==0?d:e;Sj(r,t,Uz(t)|0);Wn(p,c[r>>2]|0,c[r+4>>2]|0);t=_A(24)|0;f=t+4|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;h=Uz(d)|0;n=p+11|0;e=a[n>>0]|0;i=e<<24>>24<0;d=uj(o,b,d,h,i?c[p>>2]|0:p,i?c[p+4>>2]|0:e&255,m,u,k)|0;c[t>>2]=d;if(!d){Tn(r,o);d=c[r>>2]|0;c[r>>2]=0;c[f>>2]=d;c[r>>2]=0;if(l){Tn(r,v);f=c[r>>2]|0}else{c[r>>2]=0;f=0}c[r>>2]=0;c[t+8>>2]=f;c[r>>2]=0;f=c[u>>2]|0;h=c[s>>2]|0;m=t+12|0;if((f|0)!=(h|0)){b=q+12|0;i=t+16|0;l=t+20|0;k=q+12|0;e=q+11|0;do{Tn(r,c[f+12>>2]|0);cB(q,f);c[b>>2]=c[r>>2];j=c[i>>2]|0;if(j>>>0<(c[l>>2]|0)>>>0){c[j>>2]=c[q>>2];c[j+4>>2]=c[q+4>>2];c[j+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;d=c[b>>2]|0;c[b>>2]=0;c[j+12>>2]=d;c[i>>2]=j+16}else zb(m,q);j=c[k>>2]|0;c[k>>2]=0;if(j|0){g=c[j>>2]|0;if(g|0){c[j+4>>2]=g;$A(g)}$A(j)}if((a[e>>0]|0)<0)$A(c[q>>2]|0);f=f+16|0}while((f|0)!=(h|0))}}if((a[n>>0]|0)<0)$A(c[p>>2]|0);c[o>>2]=289744;r=o+16|0;f=c[r>>2]|0;c[r>>2]=0;if(f|0){j=c[f>>2]|0;if(j|0){c[f+4>>2]=j;$A(j)}$A(f)}g=c[u>>2]|0;if(g|0){f=c[s>>2]|0;if((f|0)==(g|0))f=g;else{do{r=f+-4|0;f=f+-16|0;j=c[r>>2]|0;c[r>>2]=0;if(j|0)ma[c[(c[j>>2]|0)+4>>2]&255](j);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(g|0));f=c[u>>2]|0}c[s>>2]=g;$A(f)}c[v>>2]=289744;v=v+16|0;f=c[v>>2]|0;c[v>>2]=0;if(!f){aa=w;return t|0}j=c[f>>2]|0;if(j|0){c[f+4>>2]=j;$A(j)}$A(f);aa=w;return t|0}function _a(a){a=a|0;return Ab(a)|0}function $a(a){a=a|0;Uj(a);return 0}function ab(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,l=0,m=0,n=0;n=aa;aa=aa+64|0;m=n+24|0;j=n+44|0;l=n+4|0;k=n;Sn(m,0);a[j>>0]=0;a[j+1>>0]=1;h=j+2|0;i=h+9|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));a[j+11>>0]=(e|0)!=0&1;a[j+12>>0]=(f|0)!=0&1;a[j+13>>0]=(g|0)!=0&1;d=(d|0)!=0;Sn(l,d?m:0);g=_A(12)|0;f=g+8|0;e=g+4|0;i=e;c[i>>2]=0;c[i+4>>2]=0;j=bj(l,b,j)|0;c[g>>2]=j;if(!j){Tn(k,l);c[e>>2]=c[k>>2];if(d){Tn(k,m);e=c[k>>2]|0}else{c[k>>2]=0;e=0}c[f>>2]=e}c[l>>2]=289744;l=l+16|0;e=c[l>>2]|0;c[l>>2]=0;if(e|0){d=c[e>>2]|0;if(d|0){c[e+4>>2]=d;$A(d)}$A(e)}c[m>>2]=289744;m=m+16|0;e=c[m>>2]|0;c[m>>2]=0;if(!e){aa=n;return g|0}d=c[e>>2]|0;if(d|0){c[e+4>>2]=d;$A(d)}$A(e);aa=n;return g|0}function bb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+32|0;j=i+24|0;h=i+4|0;g=i;a[j+2>>0]=0;a[j>>0]=(d|0)!=0&1;a[j+1>>0]=(e|0)!=0&1;Sn(h,0);f=_A(12)|0;d=f+4|0;e=d;c[e>>2]=0;c[e+4>>2]=0;b=us(h,b,j)|0;c[f>>2]=b;if(!b){Tn(g,h);c[d>>2]=c[g>>2]}c[h>>2]=289744;j=h+16|0;d=c[j>>2]|0;c[j>>2]=0;if(!d){aa=i;return f|0}e=c[d>>2]|0;if(e|0){c[d+4>>2]=e;$A(e)}$A(d);aa=i;return f|0}function cb(a){a=a|0;if(!a)return;db(a);$A(a);return}function db(b){b=b|0;var d=0,e=0,f=0;d=c[b+364>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+356|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+344>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+336|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+324>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+316|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+304>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+296|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+284>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+276|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+264>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+256|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+244>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+236|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+224>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+216|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+204>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+196|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+184>>2]|0;if(d|0){c[b+188>>2]=d;$A(d)}d=c[b+172>>2]|0;if(d|0){c[b+176>>2]=d;$A(d)}d=c[b+160>>2]|0;if(d|0){c[b+164>>2]=d;$A(d)}d=c[b+148>>2]|0;if(d|0){c[b+152>>2]=d;$A(d)}d=c[b+136>>2]|0;if(d|0){c[b+140>>2]=d;$A(d)}d=c[b+124>>2]|0;if(d|0){c[b+128>>2]=d;$A(d)}d=c[b+112>>2]|0;if(d|0){c[b+116>>2]=d;$A(d)}d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}d=c[b+76>>2]|0;if(d|0){c[b+80>>2]=d;$A(d)}d=c[b+64>>2]|0;if(d|0){c[b+68>>2]=d;$A(d)}e=b+32|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+36>>2]=0;c[e>>2]=0;c[b+40>>2]=0;d=b+20|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function eb(b){b=b|0;var d=0;if(!b)return;d=b+4|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=c[b>>2]|0;c[b>>2]=0;if(d|0)$A(d);$A(b);return}function fb(){var a=0;a=_A(12)|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return a|0}function gb(b,d){b=b|0;d=d|0;var 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;t=aa;aa=aa+48|0;r=t+24|0;e=t+16|0;f=t;cm(e,c[d>>2]|0);s=_A(24)|0;d=c[e>>2]|0;c[e>>2]=0;c[r>>2]=d;hm(s,r);d=c[r>>2]|0;c[r>>2]=0;if(d|0)$A(d);c[e>>2]=0;Fj(e,0,0);c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;Hj(r,c[b>>2]|0,c[b+4>>2]|0,0,s,e,f);p=_A(12)|0;l=p+4|0;m=p+8|0;o=r+11|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;d=a[o>>0]|0;k=d<<24>>24<0;b=k?c[r>>2]|0:r;k=k?c[r+4>>2]|0:d&255;n=b+k|0;do if(k){d=0;e=0;f=0;while(1){j=a[b>>0]|0;g=f;if(e>>>0>=f>>>0){k=e-d|0;e=k+1|0;i=d;if((e|0)<0){d=8;break}g=g-d|0;h=g<<1;h=g>>>0<1073741823?(h>>>0<e>>>0?e:h):2147483647;if(!h)g=0;else g=_A(h)|0;e=g+k|0;a[e>>0]=j;e=e+1|0;f=g;if((k|0)>0)sC(g|0,i|0,k|0)|0;c[p>>2]=f;c[l>>2]=e;c[m>>2]=g+h;if(!d)d=f;else{$A(i);d=f}}else{a[e>>0]=j;e=e+1|0;c[l>>2]=e}b=b+1|0;if((b|0)==(n|0)){d=17;break}f=c[m>>2]|0}if((d|0)==8)HB();else if((d|0)==17){q=a[o>>0]|0;break}}else q=d;while(0);if(q<<24>>24<0)$A(c[r>>2]|0);d=c[s+4>>2]|0;if(d|0){c[s+8>>2]=d;$A(d)}d=c[s>>2]|0;c[s>>2]=0;if(!d){$A(s);aa=t;return p|0}$A(d);$A(s);aa=t;return p|0}function hb(b){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,s=0;s=aa;aa=aa+48|0;r=s+24|0;l=s+16|0;p=s;Fj(l,0,0);c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;Hj(r,c[b>>2]|0,c[b+4>>2]|0,1,0,l,p);p=_A(12)|0;l=p+4|0;m=p+8|0;o=r+11|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;b=a[o>>0]|0;k=b<<24>>24<0;d=k?c[r>>2]|0:r;k=k?c[r+4>>2]|0:b&255;n=d+k|0;do if(k){b=0;f=0;k=0;while(1){h=a[d>>0]|0;e=f;if(b>>>0>=f>>>0){j=b-k|0;b=j+1|0;i=k;if((b|0)<0){b=6;break}f=e-k|0;g=f<<1;g=f>>>0<1073741823?(g>>>0<b>>>0?b:g):2147483647;if(!g)f=0;else f=_A(g)|0;b=f+j|0;a[b>>0]=h;b=b+1|0;e=f;if((j|0)>0)sC(f|0,i|0,j|0)|0;c[p>>2]=e;c[l>>2]=b;c[m>>2]=f+g;if(k)$A(i)}else{a[b>>0]=h;b=b+1|0;c[l>>2]=b;e=k}d=d+1|0;if((d|0)==(n|0)){b=15;break}f=c[m>>2]|0;k=e}if((b|0)==6)HB();else if((b|0)==15){q=a[o>>0]|0;break}}else q=b;while(0);if(q<<24>>24>=0){aa=s;return p|0}$A(c[r>>2]|0);aa=s;return p|0}function ib(b){b=b|0;var d=0,e=0,f=0,g=0;if(!b)return;f=c[b>>2]|0;if(f|0){g=b+4|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{e=d+-12|0;d=d+-36|0;if((a[e+11>>0]|0)<0)$A(c[e>>2]|0)}while((d|0)!=(f|0));d=c[b>>2]|0}c[g>>2]=f;$A(d)}$A(b);return}function jb(a){a=a|0;return c[a>>2]|0}function kb(a){a=a|0;var b=0;b=a+4|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function lb(a){a=a|0;var b=0,d=0;if(!a)return;d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(b|0){db(b);$A(b)}$A(a);return}function mb(a){a=a|0;return c[a>>2]|0}function nb(a){a=a|0;var b=0;b=a+4|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function ob(a){a=a|0;return c[a>>2]|0}function pb(a){a=a|0;var b=0;b=a+4|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function qb(a){a=a|0;var b=0,d=0;if(!a)return;d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(b|0){db(b);$A(b)}$A(a);return}function rb(a){a=a|0;return c[a>>2]|0}function sb(a){a=a|0;var b=0;b=a+4|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function tb(a){a=a|0;var b=0;b=a+8|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function ub(a){a=a|0;var b=0,d=0;if(!a)return;d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(b|0){d=c[b>>2]|0;if(d|0){c[b+4>>2]=d;$A(d)}$A(b)}d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(b|0){d=c[b>>2]|0;if(d|0){c[b+4>>2]=d;$A(d)}$A(b)}$A(a);return}function vb(a){a=a|0;return c[a>>2]|0}function wb(a){a=a|0;return (c[a+4>>2]|0)-(c[a>>2]|0)|0}function xb(a){a=a|0;var b=0;if(!a)return;b=c[a>>2]|0;if(b|0){c[a+4>>2]=b;$A(b)}$A(a);return}function yb(){return}function zb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=b+4|0;e=c[b>>2]|0;k=(c[l>>2]|0)-e>>4;f=k+1|0;if(f>>>0>268435455)HB();m=b+8|0;j=(c[m>>2]|0)-e|0;e=j>>3;e=j>>4>>>0<134217727?(e>>>0<f>>>0?f:e):268435455;do if(e)if(e>>>0>268435455)U();else{h=_A(e<<4)|0;break}else h=0;while(0);f=h+(k<<4)|0;j=h+(e<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;e=d+12|0;i=c[e>>2]|0;c[e>>2]=0;c[h+(k<<4)+12>>2]=i;i=f+16|0;e=c[b>>2]|0;g=e;d=c[l>>2]|0;if((d|0)==(e|0))h=g;else{g=(d+-16-g|0)>>>4;do{n=f;f=f+-16|0;p=d;d=d+-16|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;p=p+-4|0;o=c[p>>2]|0;c[p>>2]=0;c[n+-4>>2]=o}while((d|0)!=(e|0));f=h+(k+-1-g<<4)|0;h=c[b>>2]|0;e=c[l>>2]|0}c[b>>2]=f;c[l>>2]=i;c[m>>2]=j;g=h;if((e|0)!=(g|0))do{p=e+-4|0;e=e+-16|0;f=c[p>>2]|0;c[p>>2]=0;if(f|0){d=c[f>>2]|0;if(d|0){c[f+4>>2]=d;$A(d)}$A(f)}if((a[e+11>>0]|0)<0)$A(c[e>>2]|0)}while((e|0)!=(g|0));if(!h)return;$A(h);return}function Ab(b){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,s=0,t=0,u=0;u=aa;aa=aa+80|0;r=u;c[r>>2]=286856;s=r+4|0;c[s>>2]=0;k=r+8|0;c[k>>2]=0;t=r+12|0;Jj(t,r);l=r+52|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[s>>2]=b;l=b+76|0;j=b+80|0;d=c[l>>2]|0;a:do if((c[j>>2]|0)!=(d|0)){m=r+52|0;i=0;while(1){d=c[d+(i<<2)>>2]|0;c[k>>2]=d;if(a[d+12>>0]|0){h=d+16|0;e=$k(c[s>>2]|0,h)|0;if(!e){d=1;e=49;break}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+36>>2]|0)==1))Ll(h,g?c[e>>2]|0:e,f)}h=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;Cl(h+(Ok(c[d+76>>2]|0,c[d+80>>2]|0)|0)|0,d+88|0,m);if((Rj(t,d)|0)==1){d=1;e=49;break}c[k>>2]=0;i=i+1|0;d=c[l>>2]|0;if(i>>>0>=(c[j>>2]|0)-d>>2>>>0)break a}if((e|0)==49){Bb(r);aa=u;return d|0}}while(0);g=b+88|0;f=b+92|0;d=c[g>>2]|0;b:do if((c[f>>2]|0)!=(d|0)){e=0;while(1){if((Qj(t,(c[d+(e<<2)>>2]|0)+20|0)|0)==1){d=1;break}e=e+1|0;d=c[g>>2]|0;if(e>>>0>=(c[f>>2]|0)-d>>2>>>0)break b}Bb(r);aa=u;return d|0}while(0);m=b+64|0;l=b+68|0;e=c[l>>2]|0;d=c[m>>2]|0;c:do if((e|0)!=(d|0)){k=0;while(1){f=c[d+(k<<2)>>2]|0;if(a[f+12>>0]|0){j=f+16|0;g=$k(c[s>>2]|0,j)|0;if(!g){d=1;break}h=a[g+11>>0]|0;i=h<<24>>24<0;h=i?c[g+4>>2]|0:h&255;if(!((h|0)==0?1:(c[f+36>>2]|0)==1)){Ll(j,i?c[g>>2]|0:g,h);e=c[l>>2]|0;d=c[m>>2]|0}}k=k+1|0;if(k>>>0>=e-d>>2>>>0)break c}Bb(r);aa=u;return d|0}while(0);i=b+112|0;h=b+116|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){g=0;do{f=c[d+(g<<2)>>2]|0;if(((c[f+12>>2]|0)==0?(q=f+16|0,n=Sk(c[s>>2]|0,q)|0,(n|0)!=0):0)?(o=a[n+11>>0]|0,p=o<<24>>24<0,o=p?c[n+4>>2]|0:o&255,!((o|0)==0?1:(c[f+36>>2]|0)==1)):0){Ll(q,p?c[n>>2]|0:n,o);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}l=b+148|0;k=b+152|0;d=c[l>>2]|0;d:do if((c[k>>2]|0)!=(d|0)){j=0;e:while(1){h=c[d+(j<<2)>>2]|0;f=h+12|0;d=Vk(c[s>>2]|0,f)|0;if(!d){d=1;e=49;break}e=a[d+11>>0]|0;g=e<<24>>24<0;e=g?c[d+4>>2]|0:e&255;if(!((e|0)==0?1:(c[h+32>>2]|0)==1))Ll(f,g?c[d>>2]|0:d,e);if((Qj(t,h+56|0)|0)==1){d=1;e=49;break}d=c[h+68>>2]|0;i=c[h+72>>2]|0;if((d|0)!=(i|0))do{if((c[d>>2]|0)==1){h=d+4|0;e=Sk(c[s>>2]|0,h)|0;if(!e){d=1;e=49;break e}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+24>>2]|0)==1))Ll(h,g?c[e>>2]|0:e,f)}d=d+40|0}while((d|0)!=(i|0));j=j+1|0;d=c[l>>2]|0;if(j>>>0>=(c[k>>2]|0)-d>>2>>>0)break d}if((e|0)==49){Bb(r);aa=u;return d|0}}while(0);k=b+172|0;j=b+176|0;d=c[k>>2]|0;f:do if((c[j>>2]|0)!=(d|0)){i=0;while(1){d=c[d+(i<<2)>>2]|0;g=d+12|0;e=Wk(c[s>>2]|0,g)|0;if(!e){d=1;e=49;break}f=a[e+11>>0]|0;h=f<<24>>24<0;f=h?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+32>>2]|0)==1))Ll(g,h?c[e>>2]|0:e,f);i=i+1|0;if((Qj(t,d+52|0)|0)==1){d=1;e=49;break}d=c[k>>2]|0;if(i>>>0>=(c[j>>2]|0)-d>>2>>>0)break f}if((e|0)==49){Bb(r);aa=u;return d|0}}while(0);c[s>>2]=0;t=0;Bb(r);aa=u;return t|0}function Bb(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=286856;e=b+64|0;f=c[e>>2]|0;if(f|0){g=b+68|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}e=b+52|0;f=c[e>>2]|0;if(f|0){g=b+56|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=c[b+28>>2]|0;if(d|0){c[b+32>>2]=d;$A(d)}d=c[b+16>>2]|0;if(!d)return;c[b+20>>2]=d;$A(d);return}function Cb(a){a=a|0;Bb(a);$A(a);return}function Db(a,b){a=a|0;b=b|0;return 0}function Eb(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+36|0;d=a+68|0;b=c[d>>2]|0;if((b|0)==(c[a+72>>2]|0)){Lc(a+64|0,e);return 0}else{cB(b,e);c[d>>2]=(c[d>>2]|0)+12;return 0}return 0}function Fb(b,d){b=b|0;d=d|0;d=b+68|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function Gb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+16|0;d=f;e=b+36|0;Nc(d,a,e);a=c[d+4>>2]|0;if((a|0)==0?1:(c[b+56>>2]|0)==1){aa=f;return 0}Ll(e,c[d>>2]|0,a);aa=f;return 0}function Hb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+16|0;d=f;e=b+36|0;Nc(d,a,e);a=c[d+4>>2]|0;if((a|0)==0?1:(c[b+56>>2]|0)==1){aa=f;return 0}Ll(e,c[d>>2]|0,a);aa=f;return 0}function Ib(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;g=d+36|0;Nc(f,b,g);e=c[f+4>>2]|0;if(!((e|0)==0?1:(c[d+56>>2]|0)==1))Ll(g,c[f>>2]|0,e);h=d+72|0;e=Xk(c[b+4>>2]|0,h)|0;if(!e){d=1;aa=i;return d|0}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if((f|0)==0?1:(c[d+92>>2]|0)==1){d=0;aa=i;return d|0}Ll(h,g?c[e>>2]|0:e,f);d=0;aa=i;return d|0}function Jb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;d=c[b+36>>2]|0;f=c[b+40>>2]|0;if((d|0)!=(f|0)){g=h+4|0;do{Nc(h,a,d);e=c[g>>2]|0;if(!((e|0)==0?1:(c[d+20>>2]|0)==1))Ll(d,c[h>>2]|0,e);d=d+36|0}while((d|0)!=(f|0))}e=b+48|0;Nc(h,a,e);d=c[h+4>>2]|0;if((d|0)==0?1:(c[b+68>>2]|0)==1){aa=i;return 0}Ll(e,c[h>>2]|0,d);aa=i;return 0}function Kb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Sk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function Lb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;if(a[d+36>>0]|0){h=d+40|0;b=b+4|0;e=$k(c[b>>2]|0,h)|0;if(!e){d=1;return d|0}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+60>>2]|0)==1))Ll(h,g?c[e>>2]|0:e,f)}else b=b+4|0;g=d+100|0;b=Vk(c[b>>2]|0,g)|0;if(!b){d=1;return d|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+120>>2]|0)==1){d=0;return d|0}Ll(g,f?c[b>>2]|0:b,e);d=0;return d|0}function Mb(a,b){a=a|0;b=b|0;return 0}function Nb(a,b){a=a|0;b=b|0;return 0}function Ob(a,b){a=a|0;b=b|0;return 0}function Pb(a,b){a=a|0;b=b|0;return 0}function Qb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Uk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function Rb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Uk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function Sb(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+36|0;d=a+68|0;b=c[d>>2]|0;if((b|0)==(c[a+72>>2]|0)){Lc(a+64|0,e);return 0}else{cB(b,e);c[d>>2]=(c[d>>2]|0)+12;return 0}return 0}function Tb(a,b){a=a|0;b=b|0;return 0}function Ub(b,d){b=b|0;d=d|0;d=b+68|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function Vb(a,b){a=a|0;b=b|0;return 0}function Wb(a,b){a=a|0;b=b|0;return (Mc(a,c[a+8>>2]|0,b+36|0)|0)==1|0}function Xb(a,b){a=a|0;b=b|0;return (Mc(a,c[a+8>>2]|0,b+36|0)|0)==1|0}function Yb(a,b){a=a|0;b=b|0;return (Mc(a,c[a+8>>2]|0,b+36|0)|0)==1|0}function Zb(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+36|0;d=a+68|0;b=c[d>>2]|0;if((b|0)==(c[a+72>>2]|0)){Lc(a+64|0,e);return 0}else{cB(b,e);c[d>>2]=(c[d>>2]|0)+12;return 0}return 0}function _b(b,d){b=b|0;d=d|0;d=b+68|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function $b(a,b){a=a|0;b=b|0;return 0}function ac(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Yk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function bc(a,b){a=a|0;b=b|0;return 0}function cc(a,b){a=a|0;b=b|0;return 0}function dc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Yk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function ec(a,b){a=a|0;b=b|0;return 0}function fc(a,b){a=a|0;b=b|0;return 0}function gc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Zk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function hc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Zk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function ic(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Vk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function jc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Vk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function kc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Vk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function lc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Vk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function mc(a,b){a=a|0;b=b|0;return 0}function nc(a,b){a=a|0;b=b|0;return 0}function oc(a,b){a=a|0;b=b|0;return 0}function pc(a,b){a=a|0;b=b|0;return 0}function qc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Sk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function rc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;if(a[d+36>>0]|0){h=d+40|0;b=b+4|0;e=$k(c[b>>2]|0,h)|0;if(!e){d=1;return d|0}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+60>>2]|0)==1))Ll(h,g?c[e>>2]|0:e,f)}else b=b+4|0;g=d+100|0;b=Vk(c[b>>2]|0,g)|0;if(!b){d=1;return d|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+120>>2]|0)==1){d=0;return d|0}Ll(g,f?c[b>>2]|0:b,e);d=0;return d|0}function sc(a,b){a=a|0;b=b|0;return 0}function tc(a,b){a=a|0;b=b|0;return 0}function uc(a,b){a=a|0;b=b|0;return 0}function vc(a,b){a=a|0;b=b|0;return 0}function wc(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+36|0;d=a+68|0;b=c[d>>2]|0;if((b|0)==(c[a+72>>2]|0)){Lc(a+64|0,e);return 0}else{cB(b,e);c[d>>2]=(c[d>>2]|0)+12;return 0}return 0}function xc(a,b){a=a|0;b=b|0;return 0}function yc(b,d){b=b|0;d=d|0;d=b+68|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function zc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Xk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function Ac(a,b){a=a|0;b=b|0;return 0}function Bc(a,b){a=a|0;b=b|0;return 0}function Cc(a,b){a=a|0;b=b|0;return 0}function Dc(a,b){a=a|0;b=b|0;return 0}function Ec(a,b){a=a|0;b=b|0;return 0}function Fc(a,b){a=a|0;b=b|0;return 0}function Gc(a,b){a=a|0;b=b|0;return 0}function Hc(a,b){a=a|0;b=b|0;return 0}function Ic(a,b){a=a|0;b=b|0;return 0}function Jc(a,b){a=a|0;b=b|0;return 0}function Kc(a,b){a=a|0;b=b|0;return 0}function Lc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=b+4|0;e=c[b>>2]|0;g=((c[j>>2]|0)-e|0)/12|0;f=g+1|0;if(f>>>0>357913941)HB();k=b+8|0;i=((c[k>>2]|0)-e|0)/12|0;e=i<<1;e=i>>>0<178956970?(e>>>0<f>>>0?f:e):357913941;do if(e)if(e>>>0>357913941)U();else{h=_A(e*12|0)|0;break}else h=0;while(0);f=h+(g*12|0)|0;i=h+(e*12|0)|0;cB(f,d);d=f+12|0;h=c[b>>2]|0;e=c[j>>2]|0;if((e|0)==(h|0)){g=h;e=h}else{do{f=f+-12|0;e=e+-12|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0}while((e|0)!=(h|0));g=c[b>>2]|0;e=c[j>>2]|0}c[b>>2]=f;c[j>>2]=d;c[k>>2]=i;f=g;if((e|0)!=(f|0))do{e=e+-12|0;if((a[e+11>>0]|0)<0)$A(c[e>>2]|0)}while((e|0)!=(f|0));if(!g)return;$A(g);return}function Mc(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;j=aa;aa=aa+16|0;h=j;f=Qk(d,e)|0;k=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;if(f>>>0>=(k+(Ok(c[d+76>>2]|0,c[d+80>>2]|0)|0)|0)>>>0){k=1;aa=j;return k|0}cB(h,(c[b+52>>2]|0)+(f*12|0)|0);f=h+11|0;if((c[e+20>>2]|0)!=1?(g=a[f>>0]|0,i=g<<24>>24<0,g=i?c[h+4>>2]|0:g&255,g|0):0)Ll(e,i?c[h>>2]|0:h,g);if((a[f>>0]|0)<0)$A(c[h>>2]|0);k=0;aa=j;return k|0}function Nc(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;if((c[e+20>>2]|0)!=1){f=c[e+24>>2]|0;o=c[d+64>>2]|0;e=((c[d+68>>2]|0)-o|0)/12|0;d=o;if(f>>>0<e>>>0){n=e+~f|0;l=d+(n*12|0)|0;o=a[l+11>>0]|0;m=o<<24>>24<0;c[b>>2]=m?c[l>>2]|0:l;c[b+4>>2]=m?c[d+(n*12|0)+4>>2]|0:o&255;return}else{c[b>>2]=0;c[b+4>>2]=0;return}}n=c[d+64>>2]|0;o=(c[d+68>>2]|0)-n|0;f=((o|0)/12|0)+-1|0;a:do if((o|0)>0){o=e+24|0;d=a[o+11>>0]|0;l=d<<24>>24<0;d=l?c[e+28>>2]|0:d&255;m=(d|0)==0;b:do if(l)while(1){l=n+(f*12|0)|0;g=a[l+11>>0]|0;j=g<<24>>24<0;g=g&255;do if(((j?c[n+(f*12|0)+4>>2]|0:g)|0)==(d|0)){e=c[l>>2]|0;i=j?e:l;k=c[o>>2]|0;h=e&255;if(j){if(m){d=0;break b}if(!(Tz(i,k,d)|0))break b;else break}if(m){e=l;d=0;break b}if((a[k>>0]|0)==h<<24>>24){h=l;e=k;do{g=g+-1|0;h=h+1|0;if(!g){e=l;break b}e=e+1|0}while((a[h>>0]|0)==(a[e>>0]|0))}}while(0);f=f+-1|0;if((f|0)<=-1)break a}else while(1){k=n+(f*12|0)|0;i=a[k+11>>0]|0;j=i<<24>>24<0;i=i&255;do if(((j?c[n+(f*12|0)+4>>2]|0:i)|0)==(d|0)){e=c[k>>2]|0;h=j?e:k;g=e&255;if(j){if(m){d=0;break b}if(!(Tz(h,o,d)|0))break b;else break}if(m){e=k;d=0;break b}if((a[o>>0]|0)==g<<24>>24){e=i;g=k;h=o;do{e=e+-1|0;g=g+1|0;if(!e){e=k;break b}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);f=f+-1|0;if((f|0)<=-1)break a}while(0);c[b>>2]=e;c[b+4>>2]=d;return}while(0);c[b>>2]=0;c[b+4>>2]=0;return}function Oc(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 h=0,i=0;i=aa;aa=aa+48|0;h=i;c[h+4>>2]=0;c[h>>2]=287120;c[h+8>>2]=f;c[h+12>>2]=g;f=h+16|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[h+36>>2]=a;f=du(b,d,h,e)|0;c[h>>2]=287120;b=c[h+20>>2]|0;if(!b){aa=i;return f|0}c[h+24>>2]=b;$A(b);aa=i;return f|0}function Pc(a){a=a|0;var b=0;c[a>>2]=287120;b=c[a+20>>2]|0;if(!b)return;c[a+24>>2]=b;$A(b);return}function Qc(a){a=a|0;var b=0;c[a>>2]=287120;b=c[a+20>>2]|0;if(!b){$A(a);return}c[a+24>>2]=b;$A(b);$A(a);return}function Rc(a,b){a=a|0;b=b|0;var d=0,e=0;a=c[a+8>>2]|0;e=a+4|0;d=c[e>>2]|0;if((d|0)==(c[a+8>>2]|0)){_i(a,b);return 1}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];cB(d+24|0,b+24|0);c[e>>2]=(c[e>>2]|0)+36;return 1}return 0}function Sc(a,b){a=a|0;b=b|0;c[a+4>>2]=b;return}function Tc(a,b){a=a|0;b=b|0;return 0}function Uc(a){a=a|0;return 0}function Vc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Wc(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Xc(a){a=a|0;return 0}function Yc(a,b){a=a|0;b=b|0;return 0}function Zc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+124|0;g=a+132|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+128|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function _c(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 h=0,i=0,j=0,k=0,l=0;h=aa;aa=aa+16|0;i=h;l=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;k=Uz(l)|0;j=_A(72)|0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=l;c[j+16>>2]=k;c[j+20>>2]=b;b=j+24|0;c[b>>2]=0;c[b+4>>2]=0;c[j+32>>2]=4;c[j>>2]=289068;Wn(j+36|0,0,0);b=j+48|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;Bg(b,e,e+(d<<2)|0);Bg(j+60|0,g,g+(f<<2)|0);b=c[a+12>>2]|0;c[i>>2]=j;ml(b,i);b=c[i>>2]|0;c[i>>2]=0;if(!b){aa=h;return 0}ma[c[(c[b>>2]|0)+4>>2]&255](b);aa=h;return 0}function $c(a){a=a|0;return 0}function ad(a,b){a=a|0;b=b|0;return 0}function bd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+100|0;g=a+108|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+104|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function cd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function dd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+64|0;l=r+24|0;m=r;q=r+20|0;p=_A(152)|0;j=p+4|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[p>>2]=289052;Wn(p+32|0,0,0);k=p+44|0;a[k>>0]=0;n=p+48|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(n,-1,l);o=p+84|0;g=p+136|0;d=o;i=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(i|0));c[g>>2]=1065353216;c[p+140>>2]=0;c[p+144>>2]=0;c[p+148>>2]=0;Wn(l,c[e>>2]|0,c[e+4>>2]|0);g=p+15|0;if((a[g>>0]|0)<0){a[c[j>>2]>>0]=0;c[p+8>>2]=0}else{a[j>>0]=0;a[g>>0]=0}pB(j);c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];Wn(l,c[f>>2]|0,c[f+4>>2]|0);d=p+16|0;g=p+27|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[p+20>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];e=b+4|0;j=c[e>>2]|0;f=b+36|0;d=c[f>>2]|0;a[k>>0]=1;j=c[j+8>>2]|0;g=m+12|0;c[g>>2]=0;c[g+4>>2]=0;g=Uz(d)|0;c[m>>2]=d;c[m+4>>2]=g;c[m+8>>2]=j;El(l,h,m);Hl(n,l)|0;Ml(l);j=b+12|0;g=c[j>>2]|0;d=c[(c[g+124>>2]|0)+(h<<2)>>2]|0;i=d+12|0;if((i|0)!=(o|0)){Bg(o,c[i>>2]|0,c[d+16>>2]|0);Bg(p+96|0,c[d+24>>2]|0,c[d+28>>2]|0);g=c[j>>2]|0}n=c[f>>2]|0;o=c[(c[e>>2]|0)+8>>2]|0;b=Uz(n)|0;h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=n;c[h+16>>2]=b;c[h+20>>2]=o;o=h+24|0;c[o>>2]=0;c[o+4>>2]=0;c[h+32>>2]=2;c[h>>2]=288972;c[h+36>>2]=p;c[q>>2]=h;ql(g,q);g=c[q>>2]|0;c[q>>2]=0;if(!g){aa=r;return 0}ma[c[(c[g>>2]|0)+4>>2]&255](g);aa=r;return 0}function ed(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0;n=aa;aa=aa+16|0;l=n+4|0;m=n;h=_A(80)|0;e=h+4|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[h+28>>2]=1;c[h>>2]=289036;Wn(h+32|0,0,0);k=h+48|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;b[k+16>>1]=0;c[h+72>>2]=-16;Wn(l,c[f>>2]|0,c[f+4>>2]|0);i=h+15|0;if((a[i>>0]|0)<0){a[c[e>>2]>>0]=0;c[h+8>>2]=0}else{a[e>>0]=0;a[i>>0]=0}pB(e);c[e>>2]=c[l>>2];c[e+4>>2]=c[l+4>>2];c[e+8>>2]=c[l+8>>2];Wn(l,c[g>>2]|0,c[g+4>>2]|0);e=h+16|0;i=h+27|0;if((a[i>>0]|0)<0){a[c[e>>2]>>0]=0;c[h+20>>2]=0}else{a[e>>0]=0;a[i>>0]=0}pB(e);c[e>>2]=c[l>>2];c[e+4>>2]=c[l+4>>2];c[e+8>>2]=c[l+8>>2];i=c[d+12>>2]|0;g=c[d+4>>2]|0;l=c[d+36>>2]|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];b[k+16>>1]=b[j+16>>1]|0;j=c[g+8>>2]|0;g=Uz(l)|0;d=_A(40)|0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=l;c[d+16>>2]=g;c[d+20>>2]=j;j=d+24|0;c[j>>2]=0;c[j+4>>2]=0;c[d+32>>2]=2;c[d>>2]=288972;c[d+36>>2]=h;c[m>>2]=d;ql(i,m);i=c[m>>2]|0;c[m>>2]=0;if(!i){aa=n;return 0}ma[c[(c[i>>2]|0)+4>>2]&255](i);aa=n;return 0}function fd(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+16|0;l=n+4|0;m=n;j=_A(72)|0;h=j+4|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[j+28>>2]=2;c[j>>2]=289020;Wn(j+32|0,0,0);k=j+48|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;b[k+16>>1]=0;Wn(l,c[f>>2]|0,c[f+4>>2]|0);e=j+15|0;if((a[e>>0]|0)<0){a[c[h>>2]>>0]=0;c[j+8>>2]=0}else{a[h>>0]=0;a[e>>0]=0}pB(h);c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];c[h+8>>2]=c[l+8>>2];Wn(l,c[g>>2]|0,c[g+4>>2]|0);h=j+16|0;e=j+27|0;if((a[e>>0]|0)<0){a[c[h>>2]>>0]=0;c[j+20>>2]=0}else{a[h>>0]=0;a[e>>0]=0}pB(h);c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];c[h+8>>2]=c[l+8>>2];e=c[d+12>>2]|0;l=c[d+4>>2]|0;g=c[d+36>>2]|0;c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];b[k+16>>1]=b[i+16>>1]|0;i=c[l+8>>2]|0;l=Uz(g)|0;d=_A(40)|0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=g;c[d+16>>2]=l;c[d+20>>2]=i;i=d+24|0;c[i>>2]=0;c[i+4>>2]=0;c[d+32>>2]=2;c[d>>2]=288972;c[d+36>>2]=j;c[m>>2]=d;ql(e,m);e=c[m>>2]|0;c[m>>2]=0;if(!e){aa=n;return 0}ma[c[(c[e>>2]|0)+4>>2]&255](e);aa=n;return 0}function gd(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+16|0;l=o+4|0;n=o;k=_A(64)|0;d=k+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[k+28>>2]=3;c[k>>2]=289004;Wn(k+32|0,0,0);m=k+44|0;c[m>>2]=-64;j=k+48|0;a[j>>0]=0;c[k+52>>2]=0;c[k+56>>2]=0;c[k+60>>2]=0;Wn(l,c[e>>2]|0,c[e+4>>2]|0);g=k+15|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[k+8>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];Wn(l,c[f>>2]|0,c[f+4>>2]|0);d=k+16|0;g=k+27|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[k+20>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];g=c[b+12>>2]|0;f=c[b+4>>2]|0;l=c[b+36>>2]|0;c[m>>2]=h;a[j>>0]=i&1;b=c[f+8>>2]|0;i=Uz(l)|0;h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=l;c[h+16>>2]=i;c[h+20>>2]=b;b=h+24|0;c[b>>2]=0;c[b+4>>2]=0;c[h+32>>2]=2;c[h>>2]=288972;c[h+36>>2]=k;c[n>>2]=h;ql(g,n);g=c[n>>2]|0;c[n>>2]=0;if(!g){aa=o;return 0}ma[c[(c[g>>2]|0)+4>>2]&255](g);aa=o;return 0}function hd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+64|0;l=r+24|0;m=r;q=r+20|0;p=_A(108)|0;d=p+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[p+28>>2]=4;c[p>>2]=288956;Wn(p+32|0,0,0);k=p+44|0;a[k>>0]=0;n=p+48|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(n,-1,l);o=p+84|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;Wn(l,c[e>>2]|0,c[e+4>>2]|0);g=p+15|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[p+8>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];Wn(l,c[f>>2]|0,c[f+4>>2]|0);d=p+16|0;g=p+27|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[p+20>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];i=b+4|0;f=c[i>>2]|0;j=b+36|0;d=c[j>>2]|0;a[k>>0]=1;f=c[f+8>>2]|0;g=m+12|0;c[g>>2]=0;c[g+4>>2]=0;g=Uz(d)|0;c[m>>2]=d;c[m+4>>2]=g;c[m+8>>2]=f;El(l,h,m);Hl(n,l)|0;Ml(l);f=b+12|0;g=c[f>>2]|0;d=c[(c[g+124>>2]|0)+(h<<2)>>2]|0;e=d+12|0;if((e|0)!=(o|0)){Bg(o,c[e>>2]|0,c[d+16>>2]|0);Bg(p+96|0,c[d+24>>2]|0,c[d+28>>2]|0);g=c[f>>2]|0}n=c[j>>2]|0;o=c[(c[i>>2]|0)+8>>2]|0;b=Uz(n)|0;h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=n;c[h+16>>2]=b;c[h+20>>2]=o;o=h+24|0;c[o>>2]=0;c[o+4>>2]=0;c[h+32>>2]=2;c[h>>2]=288972;c[h+36>>2]=p;c[q>>2]=h;ql(g,q);g=c[q>>2]|0;c[q>>2]=0;if(!g){aa=r;return 0}ma[c[(c[g>>2]|0)+4>>2]&255](g);aa=r;return 0}function id(a){a=a|0;return 0}function jd(a,b){a=a|0;b=b|0;return 0}function kd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+76|0;g=(c[a+48>>2]|0)+b|0;f=a+84|0;e=c[h>>2]|0;if((c[f>>2]|0)-e>>2>>>0>=g>>>0)return 0;a=a+80|0;if(g>>>0>1073741823)U();d=(c[a>>2]|0)-e|0;b=_A(g<<2)|0;if((d|0)>0)sC(b|0,e|0,d|0)|0;c[h>>2]=b;c[a>>2]=b+(d>>2<<2);c[f>>2]=b+(g<<2);if(!e)return 0;$A(e);return 0}function ld(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,p=0,q=0;q=aa;aa=aa+64|0;g=q+24|0;h=q;p=q+20|0;i=b+4|0;j=b+36|0;n=c[j>>2]|0;d=c[(c[i>>2]|0)+8>>2]|0;k=Uz(n)|0;o=_A(156)|0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=n;c[o+16>>2]=k;c[o+20>>2]=d;d=o+24|0;c[d>>2]=0;c[d+4>>2]=0;c[o+32>>2]=0;c[o>>2]=288940;Wn(o+36|0,0,0);d=o+48|0;a[d>>0]=0;k=o+52|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(k,-1,g);n=o+88|0;f=o+140|0;l=n;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));c[f>>2]=1065353216;c[o+144>>2]=0;c[o+148>>2]=0;c[o+152>>2]=0;a[d>>0]=1;m=c[j>>2]|0;d=c[(c[i>>2]|0)+8>>2]|0;f=h+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(m)|0;c[h>>2]=m;c[h+4>>2]=f;c[h+8>>2]=d;El(g,e,h);Hl(k,g)|0;Ml(g);h=b+12|0;d=c[h>>2]|0;f=c[(c[d+124>>2]|0)+(e<<2)>>2]|0;g=f+12|0;if((g|0)!=(n|0)){Bg(n,c[g>>2]|0,c[f+16>>2]|0);Bg(o+100|0,c[f+24>>2]|0,c[f+28>>2]|0);d=c[h>>2]|0}c[p>>2]=o;kl(d,p);d=c[p>>2]|0;c[p>>2]=0;if(!d){aa=q;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return 0}function md(a){a=a|0;return 0}function nd(a,b){a=a|0;b=b|0;return 0}function od(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+136|0;g=(c[a+52>>2]|0)+b|0;f=a+144|0;e=c[h>>2]|0;if((c[f>>2]|0)-e>>2>>>0>=g>>>0)return 0;a=a+140|0;if(g>>>0>1073741823)U();d=(c[a>>2]|0)-e|0;b=_A(g<<2)|0;if((d|0)>0)sC(b|0,e|0,d|0)|0;c[h>>2]=b;c[a>>2]=b+(d>>2<<2);c[f>>2]=b+(g<<2);if(!e)return 0;$A(e);return 0}function pd(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=aa;aa=aa+16|0;h=g;k=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;j=Uz(k)|0;i=_A(88)|0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=k;c[i+16>>2]=j;c[i+20>>2]=d;d=i+24|0;c[d>>2]=0;c[d+4>>2]=0;c[i+32>>2]=5;c[i>>2]=288924;Wn(i+40|0,0,0);d=i+56|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];b[d+16>>1]=b[f+16>>1]|0;c[i+80>>2]=e;d=c[a+12>>2]|0;c[h>>2]=i;yl(d,h);d=c[h>>2]|0;c[h>>2]=0;if(!d){aa=g;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=g;return 0}function qd(a){a=a|0;return 0}function rd(a,b){a=a|0;b=b|0;return 0}function sd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+160|0;g=(c[a+56>>2]|0)+b|0;f=a+168|0;e=c[h>>2]|0;if((c[f>>2]|0)-e>>2>>>0>=g>>>0)return 0;a=a+164|0;if(g>>>0>1073741823)U();d=(c[a>>2]|0)-e|0;b=_A(g<<2)|0;if((d|0)>0)sC(b|0,e|0,d|0)|0;c[h>>2]=b;c[a>>2]=b+(d>>2<<2);c[f>>2]=b+(g<<2);if(!e)return 0;$A(e);return 0}function td(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=aa;aa=aa+16|0;g=f;j=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(j)|0;h=_A(80)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=j;c[h+16>>2]=i;c[h+20>>2]=d;d=h+24|0;c[d>>2]=0;c[d+4>>2]=0;c[h+32>>2]=7;c[h>>2]=288908;Wn(h+40|0,0,0);d=h+56|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];b[d+16>>1]=b[e+16>>1]|0;d=c[a+12>>2]|0;c[g>>2]=h;vl(d,g);d=c[g>>2]|0;c[g>>2]=0;if(!d){aa=f;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=f;return 0}function ud(a){a=a|0;return 0}function vd(a,b){a=a|0;b=b|0;return 0}function wd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+88|0;g=(c[a+60>>2]|0)+b|0;f=a+96|0;e=c[h>>2]|0;if((c[f>>2]|0)-e>>2>>>0>=g>>>0)return 0;a=a+92|0;if(g>>>0>1073741823)U();d=(c[a>>2]|0)-e|0;b=_A(g<<2)|0;if((d|0)>0)sC(b|0,e|0,d|0)|0;c[h>>2]=b;c[a>>2]=b+(d>>2<<2);c[f>>2]=b+(g<<2);if(!e)return 0;$A(e);return 0}function xd(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;g=aa;aa=aa+16|0;h=g;k=c[b+36>>2]|0;d=c[(c[b+4>>2]|0)+8>>2]|0;j=Uz(k)|0;i=_A(68)|0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=k;c[i+16>>2]=j;c[i+20>>2]=d;d=i+24|0;c[d>>2]=0;c[d+4>>2]=0;c[i+32>>2]=1;c[i>>2]=288892;Wn(i+36|0,0,0);c[i+56>>2]=0;c[i+60>>2]=0;c[i+64>>2]=0;c[i+48>>2]=e;a[i+52>>0]=f&1;d=c[b+12>>2]|0;c[h>>2]=i;ol(d,h);d=c[h>>2]|0;c[h>>2]=0;if(!d){aa=g;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=g;return 0}function yd(a,b){a=a|0;b=b|0;c[a+32>>2]=(c[(c[(c[a+12>>2]|0)+88>>2]|0)+(b<<2)>>2]|0)+20;return 0}function zd(a,b){a=a|0;b=b|0;c[a+32>>2]=0;return 0}function Ad(a,b){a=a|0;b=b|0;return 0}function Bd(a){a=a|0;return 0}function Cd(a,b){a=a|0;b=b|0;return 0}function Dd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+112|0;g=a+120|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+116|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function Ed(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,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+64|0;j=p+24|0;k=p;o=p+20|0;l=b+4|0;m=b+36|0;d=c[m>>2]|0;i=c[(c[l>>2]|0)+8>>2]|0;n=Uz(d)|0;h=_A(88)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=d;c[h+16>>2]=n;c[h+20>>2]=i;i=h+24|0;c[i>>2]=0;c[i+4>>2]=0;c[h+32>>2]=3;c[h>>2]=288876;i=h+36|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;n=h+52|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(n,-1,j);Wn(j,c[g>>2]|0,c[g+4>>2]|0);d=h+47|0;if((a[d>>0]|0)<0){a[c[i>>2]>>0]=0;c[h+40>>2]=0}else{a[i>>0]=0;a[d>>0]=0}pB(i);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];g=c[m>>2]|0;d=c[(c[l>>2]|0)+8>>2]|0;m=k+12|0;c[m>>2]=0;c[m+4>>2]=0;m=Uz(g)|0;c[k>>2]=g;c[k+4>>2]=m;c[k+8>>2]=d;El(j,f,k);Hl(n,j)|0;Ml(j);c[h+48>>2]=e;d=c[b+12>>2]|0;c[o>>2]=h;il(d,o);d=c[o>>2]|0;c[o>>2]=0;if(!d){aa=p;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=p;return 0}function Fd(a){a=a|0;return 0}function Gd(a,b){a=a|0;b=b|0;return 0}function Hd(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;e=aa;aa=aa+80|0;g=e+40|0;d=e+4|0;f=e;h=a+4|0;j=a+36|0;l=c[j>>2]|0;i=c[(c[h>>2]|0)+8>>2]|0;k=g+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[g>>2]=l;c[g+4>>2]=k;c[g+8>>2]=i;El(d,b,g);b=c[a+12>>2]|0;j=c[j>>2]|0;h=c[(c[h>>2]|0)+8>>2]|0;i=Uz(j)|0;a=_A(72)|0;Il(g,d);c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=j;c[a+16>>2]=i;c[a+20>>2]=h;h=a+24|0;c[h>>2]=0;c[h+4>>2]=0;c[a+32>>2]=9;c[a>>2]=288860;Il(a+36|0,g);c[f>>2]=a;Ml(g);wl(b,f);b=c[f>>2]|0;c[f>>2]=0;if(!b){Ml(d);aa=e;return 0}ma[c[(c[b>>2]|0)+4>>2]&255](b);Ml(d);aa=e;return 0}function Id(a){a=a|0;return 0}function Jd(a,b){a=a|0;b=b|0;return 0}function Kd(a,b){a=a|0;b=b|0;return 0}function Ld(a,b,d){a=a|0;b=b|0;d=d|0;d=c[(c[(c[a+12>>2]|0)+76>>2]|0)+(b<<2)>>2]|0;c[a+16>>2]=d;bh(a,0,d+108|0,0);return 0}function Md(a,b){a=a|0;b=b|0;return 0}function Nd(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;i=aa;aa=aa+16|0;h=i+4|0;g=i;b=c[a+16>>2]|0;c[h>>2]=e;c[g>>2]=d;if(!d){aa=i;return 0}f=b+80|0;a=c[f>>2]|0;if(a>>>0<(c[b+84>>2]|0)>>>0){c[a>>2]=e;c[a+4>>2]=d;c[f>>2]=a+8;aa=i;return 0}else{wi(b+76|0,h,g);aa=i;return 0}return 0}function Od(a,b){a=a|0;b=b|0;return 0}function Pd(a){a=a|0;return 0}function Qd(a,b){a=a|0;b=b|0;return 0}function Rd(a,b){a=a|0;b=b|0;return 0}function Sd(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Td(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Ud(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Vd(a,b){a=a|0;b=b|0;return 0}function Wd(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Xd(a,b){a=a|0;b=b|0;return 0}function Yd(a,b){a=a|0;b=b|0;return 0}function Zd(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[i+28>>2]=0;c[g>>2]=288844;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function _d(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=3;c[g>>2]=288828;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function $d(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=1;c[g>>2]=288812;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function ae(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=2;c[g>>2]=288796;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function be(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=5;c[g>>2]=288780;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function ce(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=4;c[g>>2]=288764;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function de(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=6;c[f>>2]=288748;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function ee(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;h=k;f=k+8|0;j=_A(144)|0;g=j+4|0;i=j+8|0;e=j+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[j+32>>2]=7;c[j>>2]=288732;g=j+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+12>>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;El(j+52|0,-1,f);f=j+88|0;g=f+56|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));ah(b,j+48|0,d);f=c[b+36>>2]|0;g=c[(c[b+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[e>>2]=f;c[j+16>>2]=d;c[j+20>>2]=g;e=j+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[b+20>>2]|0;g=(c[b+24>>2]|0)-e|0;d=(g|0)/12|0;if(!g){c[h>>2]=0;c[h+4>>2]=d;Mg(b,292825,h);ma[c[(c[j>>2]|0)+4>>2]&255](j);b=1;aa=k;return b|0}d=c[e+((d+-1|0)*12|0)+4>>2]|0;f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[i>>2]=e;e=e+4|0}c[e>>2]=j;c[f>>2]=j;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;bh(b,1,j+112|0,0);b=0;aa=k;return b|0}function fe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=8;c[f>>2]=288716;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function ge(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=9;c[f>>2]=288700;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function he(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;g=aa;aa=aa+64|0;e=g;h=g+28|0;j=g+8|0;f=_A(108)|0;k=f+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[f+32>>2]=10;c[f>>2]=288684;k=f+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(k,-1,h);i=f+72|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(i,-1,h);c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(h,b,j);Hl(k,h)|0;Ml(h);c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(h,d,j);Hl(i,h)|0;Ml(h);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);k=1;aa=g;return k|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;k=d+8|0;c[k>>2]=(c[k>>2]|0)+1;k=0;aa=g;return k|0}function ie(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,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+64|0;n=q;l=q+28|0;m=q+8|0;p=_A(84)|0;j=p+4|0;o=p+8|0;k=p+12|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[p+32>>2]=11;c[p>>2]=288668;j=p+36|0;c[j>>2]=0;h=p+40|0;c[h>>2]=0;c[p+44>>2]=0;f=p+48|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(f,-1,l);c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(l,e,m);Hl(f,l)|0;Ml(l);e=c[h>>2]|0;f=c[j>>2]|0;g=(e-f|0)/36|0;if(g>>>0>=b>>>0){if(g>>>0>b>>>0){f=f+(b*36|0)|0;if((f|0)!=(e|0))do{e=e+-36|0;Ml(e)}while((e|0)!=(f|0));c[h>>2]=f}if(b|0)i=9}else{ei(j,b-g|0);i=9}if((i|0)==9){e=0;do{i=c[d+(e<<2)>>2]|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(l,i,m);Hl((c[j>>2]|0)+(e*36|0)|0,l)|0;Ml(l);e=e+1|0}while((e|0)!=(b|0))}f=c[a+36>>2]|0;e=c[(c[a+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[k>>2]=f;c[p+16>>2]=d;c[p+20>>2]=e;e=p+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[a+20>>2]|0;d=(c[a+24>>2]|0)-e|0;f=(d|0)/12|0;if(!d){c[n>>2]=0;c[n+4>>2]=f;Mg(a,292825,n);ma[c[(c[p>>2]|0)+4>>2]&255](p);p=1;aa=q;return p|0}f=c[e+((f+-1|0)*12|0)+4>>2]|0;g=f+4|0;e=c[g>>2]|0;if(!e)e=f;else{c[o>>2]=e;e=e+4|0}c[e>>2]=p;c[g>>2]=p;p=f+8|0;c[p>>2]=(c[p>>2]|0)+1;p=0;aa=q;return p|0}function je(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=12;c[f>>2]=288652;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function ke(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,p=0,q=0,r=0;o=aa;aa=aa+64|0;m=o;g=o+28|0;h=o+8|0;n=_A(136)|0;k=n+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[n+32>>2]=13;c[n>>2]=288636;k=n+36|0;a[k>>0]=0;f=n+40|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(f,-1,g);i=n+76|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;j=n+100|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(j,-1,g);a[k>>0]=1;k=b+4|0;l=b+36|0;r=c[l>>2]|0;p=c[(c[k>>2]|0)+8>>2]|0;q=h+12|0;c[q>>2]=0;c[q+4>>2]=0;q=Uz(r)|0;c[h>>2]=r;c[h+4>>2]=q;c[h+8>>2]=p;El(g,d,h);Hl(f,g)|0;Ml(g);d=c[(c[(c[b+12>>2]|0)+124>>2]|0)+(d<<2)>>2]|0;f=d+12|0;if((f|0)!=(i|0)){Bg(i,c[f>>2]|0,c[d+16>>2]|0);Bg(n+88|0,c[d+24>>2]|0,c[d+28>>2]|0)};c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(g,e,h);Hl(j,g)|0;Ml(g);f=c[l>>2]|0;d=c[(c[k>>2]|0)+8>>2]|0;r=Uz(f)|0;c[n+12>>2]=f;c[n+16>>2]=r;c[n+20>>2]=d;d=n+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[b+20>>2]|0;r=(c[b+24>>2]|0)-d|0;f=(r|0)/12|0;if(!r){c[m>>2]=0;c[m+4>>2]=f;Mg(b,292825,m);ma[c[(c[n>>2]|0)+4>>2]&255](n);r=1;aa=o;return r|0}f=c[d+((f+-1|0)*12|0)+4>>2]|0;g=f+4|0;d=c[g>>2]|0;if(!d)d=f;else{c[n+8>>2]=d;d=d+4|0}c[d>>2]=n;c[g>>2]=n;r=f+8|0;c[r>>2]=(c[r>>2]|0)+1;r=0;aa=o;return r|0}function le(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+32|0;g=h+16|0;d=h;b=c[a+20>>2]|0;e=(c[a+24>>2]|0)-b|0;f=(e|0)/12|0;if(!e){c[d>>2]=0;c[d+4>>2]=f;Mg(a,292825,d);g=1;aa=h;return g|0}e=f+-1|0;d=b+(e*12|0)|0;if((c[d>>2]|0)!=5){Mg(a,295333,h+8|0);g=1;aa=h;return g|0}if(f>>>0>1){c[d>>2]=6;c[b+(e*12|0)+4>>2]=(c[(c[b+((f+-2|0)*12|0)+4>>2]|0)+4>>2]|0)+144;g=0;aa=h;return g|0}else{c[g>>2]=1;c[g+4>>2]=f;Mg(a,292825,g);g=1;aa=h;return g|0}return 0}function me(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=14;c[f>>2]=288620;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function ne(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=16;c[f>>2]=288604;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function oe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=17;c[f>>2]=288588;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function pe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+32|0;f=h+8|0;d=h;b=c[a+20>>2]|0;e=(c[a+24>>2]|0)-b|0;g=(e|0)/12|0;if(!e){c[d>>2]=0;c[d+4>>2]=g;Mg(a,292825,d);a=1;aa=h;return a|0}e=g+-1|0;if(g>>>0<=1){c[f>>2]=1;c[f+4>>2]=g;Mg(a,292825,f);a=1;aa=h;return a|0}d=b+(e*12|0)|0;if((c[d>>2]|0)==3){g=c[(c[b+((g+-2|0)*12|0)+4>>2]|0)+4>>2]|0;i=c[a+36>>2]|0;a=c[(c[a+4>>2]|0)+8>>2]|0;f=Uz(i)|0;c[g+124>>2]=i;c[g+128>>2]=f;c[g+132>>2]=a;a=g+136|0;c[a>>2]=0;c[a+4>>2]=0;c[b+(e*12|0)+4>>2]=g+144;c[d>>2]=4;a=0;aa=h;return a|0}else{Mg(a,295108,h+16|0);i=1;aa=h;return i|0}return 0}function qe(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;m=aa;aa=aa+32|0;k=m+16|0;g=m+8|0;e=m;i=a+20|0;j=a+24|0;d=c[j>>2]|0;b=c[i>>2]|0;f=d-b|0;h=(f|0)/12|0;if(!f){c[e>>2]=0;c[e+4>>2]=h;Mg(a,292825,e);l=1;aa=m;return l|0}f=b;if(h>>>0<=1){c[g>>2]=1;c[g+4>>2]=h;Mg(a,292825,g);l=1;aa=m;return l|0}e=c[(c[f+((h+-2|0)*12|0)+4>>2]|0)+4>>2]|0;switch(c[f+((h+-1|0)*12|0)>>2]|0){case 1:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+124>>2]=f;c[l+128>>2]=g;c[l+132>>2]=h;b=b+136|0;l=11;break}case 2:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+124>>2]=f;c[l+128>>2]=g;c[l+132>>2]=h;b=b+136|0;l=11;break}case 3:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+124>>2]=f;c[l+128>>2]=g;c[l+132>>2]=h;b=b+136|0;l=11;break}case 4:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+156>>2]=f;c[l+160>>2]=g;c[l+164>>2]=h;b=b+168|0;l=11;break}case 5:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+124>>2]=f;c[l+128>>2]=g;c[l+132>>2]=h;b=b+136|0;l=11;break}default:{}}if((l|0)==11){d=b;c[d>>2]=0;c[d+4>>2]=0;d=c[j>>2]|0;b=c[i>>2]|0}if((d|0)==(b|0)){Mg(a,293067,k);l=1;aa=m;return l|0}else{c[j>>2]=d+-12;l=0;aa=m;return l|0}return 0}function re(a){a=a|0;return 0}function se(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;l=aa;aa=aa+80|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;f=c[h>>2]|0;d=c[(c[g>>2]|0)+8>>2]|0;j=k+12|0;c[j>>2]=0;c[j+4>>2]=0;j=Uz(f)|0;c[k>>2]=f;c[k+4>>2]=j;c[k+8>>2]=d;Pl(e,b,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));f=c[h>>2]|0;h=c[(c[g>>2]|0)+8>>2]|0;d=Uz(f)|0;c[b>>2]=f;c[k+16>>2]=d;c[k+20>>2]=h;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);k=1;aa=l;return k|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;k=d+8|0;c[k>>2]=(c[k>>2]|0)+1;k=0;aa=l;return k|0}function te(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,l=0,m=0;l=aa;aa=aa+80|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;m=c[h>>2]|0;j=c[(c[g>>2]|0)+8>>2]|0;f=k+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(m)|0;c[k>>2]=m;c[k+4>>2]=f;c[k+8>>2]=j;Ql(e,b,d,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));h=c[h>>2]|0;m=c[(c[g>>2]|0)+8>>2]|0;d=Uz(h)|0;c[b>>2]=h;c[k+16>>2]=d;c[k+20>>2]=m;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;m=(c[a+24>>2]|0)-b|0;d=(m|0)/12|0;if(!m){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);m=1;aa=l;return m|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;m=d+8|0;c[m>>2]=(c[m>>2]|0)+1;m=0;aa=l;return m|0}function ue(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;l=aa;aa=aa+96|0;d=l+72|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;m=c[h>>2]|0;j=c[(c[g>>2]|0)+8>>2]|0;f=k+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(m)|0;c[k>>2]=m;c[k+4>>2]=f;c[k+8>>2]=j;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];Rl(e,d,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));h=c[h>>2]|0;m=c[(c[g>>2]|0)+8>>2]|0;d=Uz(h)|0;c[b>>2]=h;c[k+16>>2]=d;c[k+20>>2]=m;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;m=(c[a+24>>2]|0)-b|0;d=(m|0)/12|0;if(!m){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);m=1;aa=l;return m|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;m=d+8|0;c[m>>2]=(c[m>>2]|0)+1;m=0;aa=l;return m|0}function ve(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;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=18;c[f>>2]=287932;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function we(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;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=19;c[f>>2]=288572;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function xe(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;l=aa;aa=aa+80|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;f=c[h>>2]|0;d=c[(c[g>>2]|0)+8>>2]|0;j=k+12|0;c[j>>2]=0;c[j+4>>2]=0;j=Uz(f)|0;c[k>>2]=f;c[k+4>>2]=j;c[k+8>>2]=d;Nl(e,b,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));f=c[h>>2]|0;h=c[(c[g>>2]|0)+8>>2]|0;d=Uz(f)|0;c[b>>2]=f;c[k+16>>2]=d;c[k+20>>2]=h;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);k=1;aa=l;return k|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;k=d+8|0;c[k>>2]=(c[k>>2]|0)+1;k=0;aa=l;return k|0}function ye(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,l=0,m=0;l=aa;aa=aa+80|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;m=c[h>>2]|0;j=c[(c[g>>2]|0)+8>>2]|0;f=k+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(m)|0;c[k>>2]=m;c[k+4>>2]=f;c[k+8>>2]=j;Ol(e,b,d,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));h=c[h>>2]|0;m=c[(c[g>>2]|0)+8>>2]|0;d=Uz(h)|0;c[b>>2]=h;c[k+16>>2]=d;c[k+20>>2]=m;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;m=(c[a+24>>2]|0)-b|0;d=(m|0)/12|0;if(!m){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);m=1;aa=l;return m|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;m=d+8|0;c[m>>2]=(c[m>>2]|0)+1;m=0;aa=l;return m|0}function ze(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;h=k;f=k+8|0;j=_A(176)|0;g=j+4|0;i=j+8|0;e=j+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[j+32>>2]=20;c[j>>2]=288556;g=j+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+12>>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;El(j+52|0,-1,f);f=j+88|0;g=f+88|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));ah(b,j+48|0,d);f=c[b+36>>2]|0;g=c[(c[b+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[e>>2]=f;c[j+16>>2]=d;c[j+20>>2]=g;e=j+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[b+20>>2]|0;g=(c[b+24>>2]|0)-e|0;d=(g|0)/12|0;if(!g){c[h>>2]=0;c[h+4>>2]=d;Mg(b,292825,h);ma[c[(c[j>>2]|0)+4>>2]&255](j);b=1;aa=k;return b|0}d=c[e+((d+-1|0)*12|0)+4>>2]|0;f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[i>>2]=e;e=e+4|0}c[e>>2]=j;c[f>>2]=j;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;bh(b,3,j+112|0,0);b=0;aa=k;return b|0}function Ae(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=21;c[g>>2]=288540;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function Be(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;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=22;c[f>>2]=288524;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function Ce(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;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=23;c[f>>2]=288508;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function De(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;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=24;c[f>>2]=288492;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function Ee(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;h=k;f=k+8|0;j=_A(144)|0;g=j+4|0;i=j+8|0;e=j+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[j+32>>2]=25;c[j>>2]=288476;g=j+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+12>>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;El(j+52|0,-1,f);f=j+88|0;g=f+56|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));ah(b,j+48|0,d);f=c[b+36>>2]|0;g=c[(c[b+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[e>>2]=f;c[j+16>>2]=d;c[j+20>>2]=g;e=j+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[b+20>>2]|0;g=(c[b+24>>2]|0)-e|0;d=(g|0)/12|0;if(!g){c[h>>2]=0;c[h+4>>2]=d;Mg(b,292825,h);ma[c[(c[j>>2]|0)+4>>2]&255](j);b=1;aa=k;return b|0}d=c[e+((d+-1|0)*12|0)+4>>2]|0;f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[i>>2]=e;e=e+4|0}c[e>>2]=j;c[f>>2]=j;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;bh(b,2,j+112|0,0);b=0;aa=k;return b|0}function Fe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=26;c[f>>2]=288460;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Ge(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=27;c[f>>2]=288444;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function He(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=28;c[f>>2]=288428;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Ie(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=29;c[f>>2]=288412;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Je(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=30;c[f>>2]=288396;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Ke(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=31;c[f>>2]=288380;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Le(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=44;c[f>>2]=288364;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Me(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=45;c[f>>2]=288348;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Ne(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=46;c[f>>2]=288332;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Oe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=47;c[f>>2]=288316;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Pe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=50;c[f>>2]=288300;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Qe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=48;c[f>>2]=288284;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Re(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=49;c[f>>2]=288268;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Se(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=34;c[f>>2]=288252;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Te(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=33;c[f>>2]=288236;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Ue(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=32;c[f>>2]=288220;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Ve(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=35;c[f>>2]=288204;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function We(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=36;c[f>>2]=288188;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Xe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|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;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=37;c[f>>2]=288172;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Ye(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,p=0,q=0,r=0;o=aa;aa=aa+64|0;m=o;g=o+28|0;h=o+8|0;n=_A(136)|0;k=n+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[n+32>>2]=38;c[n>>2]=288156;k=n+36|0;a[k>>0]=0;f=n+40|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(f,-1,g);i=n+76|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;j=n+100|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(j,-1,g);a[k>>0]=1;k=b+4|0;l=b+36|0;r=c[l>>2]|0;p=c[(c[k>>2]|0)+8>>2]|0;q=h+12|0;c[q>>2]=0;c[q+4>>2]=0;q=Uz(r)|0;c[h>>2]=r;c[h+4>>2]=q;c[h+8>>2]=p;El(g,d,h);Hl(f,g)|0;Ml(g);d=c[(c[(c[b+12>>2]|0)+124>>2]|0)+(d<<2)>>2]|0;f=d+12|0;if((f|0)!=(i|0)){Bg(i,c[f>>2]|0,c[d+16>>2]|0);Bg(n+88|0,c[d+24>>2]|0,c[d+28>>2]|0)};c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(g,e,h);Hl(j,g)|0;Ml(g);f=c[l>>2]|0;d=c[(c[k>>2]|0)+8>>2]|0;r=Uz(f)|0;c[n+12>>2]=f;c[n+16>>2]=r;c[n+20>>2]=d;d=n+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[b+20>>2]|0;r=(c[b+24>>2]|0)-d|0;f=(r|0)/12|0;if(!r){c[m>>2]=0;c[m+4>>2]=f;Mg(b,292825,m);ma[c[(c[n>>2]|0)+4>>2]&255](n);r=1;aa=o;return r|0}f=c[d+((f+-1|0)*12|0)+4>>2]|0;g=f+4|0;d=c[g>>2]|0;if(!d)d=f;else{c[n+8>>2]=d;d=d+4|0}c[d>>2]=n;c[g>>2]=n;r=f+8|0;c[r>>2]=(c[r>>2]|0)+1;r=0;aa=o;return r|0}function Ze(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=39;c[f>>2]=288140;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function _e(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=43;c[g>>2]=288124;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function $e(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;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=52;c[f>>2]=288108;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function af(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;h=k;f=k+8|0;j=_A(156)|0;g=j+4|0;i=j+8|0;e=j+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[j+32>>2]=53;c[j>>2]=288092;g=j+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+12>>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;El(j+52|0,-1,f);f=j+88|0;g=f+68|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));ah(b,j+48|0,d);f=c[b+36>>2]|0;g=c[(c[b+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[e>>2]=f;c[j+16>>2]=d;c[j+20>>2]=g;e=j+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[b+20>>2]|0;g=(c[b+24>>2]|0)-e|0;d=(g|0)/12|0;if(!g){c[h>>2]=0;c[h+4>>2]=d;Mg(b,292825,h);ma[c[(c[j>>2]|0)+4>>2]&255](j);b=1;aa=k;return b|0}d=c[e+((d+-1|0)*12|0)+4>>2]|0;f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[i>>2]=e;e=e+4|0}c[e>>2]=j;c[f>>2]=j;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;bh(b,5,j+112|0,j);b=0;aa=k;return b|0}function bf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=54;c[f>>2]=288076;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function cf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=51;c[f>>2]=288060;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function df(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=55;c[f>>2]=288044;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function ef(a,b){a=a|0;b=b|0;var d=0,e=0;e=aa;aa=aa+16|0;d=a+24|0;b=c[d>>2]|0;if((b|0)==(c[a+20>>2]|0)){Mg(a,293067,e);a=1;aa=e;return a|0}else{c[d>>2]=b+-12;c[a+16>>2]=0;a=0;aa=e;return a|0}return 0}function ff(a){a=a|0;return 0}function gf(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=40;c[g>>2]=288028;c[g+36>>2]=b;b=g+40|0;c[b>>2]=d;c[b+4>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function hf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(56)|0;b=c[b>>2]|0;h=f+4|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+24>>2]=0;c[f+32>>2]=41;c[f>>2]=288012;c[f+36>>2]=b;b=f+40|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];d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}
+function hj(b,e){b=b|0;e=e|0;var g=0,h=0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0;x=a[e+11>>0]|0;z=x<<24>>24<0;y=z?c[e>>2]|0:e;x=z?c[e+4>>2]|0:x&255;if(x>>>0>3){k=y;n=x;l=x;while(1){z=v(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,1540483477)|0;n=(v(z>>>24^z,1540483477)|0)^(v(n,1540483477)|0);l=l+-4|0;if(l>>>0<=3)break;else k=k+4|0}z=x+-4|0;l=z&-4;m=y+(l+4)|0;k=n;l=z-l|0}else{m=y;k=x;l=x}switch(l|0){case 3:{o=d[m+2>>0]<<16^k;B=7;break}case 2:{o=k;B=7;break}case 1:{p=k;B=8;break}default:q=k}if((B|0)==7){p=d[m+1>>0]<<8^o;B=8}if((B|0)==8)q=v(p^d[m>>0],1540483477)|0;z=v(q>>>13^q,1540483477)|0;z=z>>>15^z;t=b+4|0;s=c[t>>2]|0;w=(s|0)==0;a:do if(!w){q=s+-1|0;l=(q&s|0)==0;if(!l)if(z>>>0<s>>>0)r=z;else r=(z>>>0)%(s>>>0)|0;else r=z&q;k=c[(c[b>>2]|0)+(r<<2)>>2]|0;if((k|0)!=0?(h=c[k>>2]|0,(h|0)!=0):0){p=(x|0)==0;if(l){if(p){g=h;while(1){y=c[g+4>>2]|0;if(!((y|0)==(z|0)|(y&q|0)==(r|0))){g=r;break a}y=a[g+8+11>>0]|0;if(!((y<<24>>24<0?c[g+12>>2]|0:y&255)|0)){k=g;break}g=c[g>>2]|0;if(!g){g=r;break a}}b=k+20|0;return b|0}k=h;b:while(1){o=c[k+4>>2]|0;if(!((o|0)==(z|0)|(o&q|0)==(r|0))){g=r;break a}l=k+8|0;n=a[l+11>>0]|0;o=n<<24>>24<0;n=n&255;do if(((o?c[k+12>>2]|0:n)|0)==(x|0)){m=c[l>>2]|0;if(o)if(!(Tz(m,y,x)|0)){B=68;break b}else break;if((a[y>>0]|0)==(m&255)<<24>>24){m=y;do{n=n+-1|0;l=l+1|0;if(!n){B=68;break b}m=m+1|0}while((a[l>>0]|0)==(a[m>>0]|0))}}while(0);k=c[k>>2]|0;if(!k){g=r;break a}}if((B|0)==68){b=k+20|0;return b|0}}if(p){while(1){g=c[h+4>>2]|0;if((g|0)!=(z|0)){if(g>>>0>=s>>>0)g=(g>>>0)%(s>>>0)|0;if((g|0)!=(r|0)){g=r;break a}}y=a[h+8+11>>0]|0;if(!((y<<24>>24<0?c[h+12>>2]|0:y&255)|0)){k=h;break}h=c[h>>2]|0;if(!h){g=r;break a}}b=k+20|0;return b|0}c:while(1){k=c[h+4>>2]|0;if((k|0)!=(z|0)){if(k>>>0>=s>>>0)k=(k>>>0)%(s>>>0)|0;if((k|0)!=(r|0)){g=r;break a}}k=h+8|0;m=a[k+11>>0]|0;n=m<<24>>24<0;m=m&255;do if(((n?c[h+12>>2]|0:m)|0)==(x|0)){l=c[k>>2]|0;if(n)if(!(Tz(l,y,x)|0)){k=h;B=68;break c}else break;if((a[y>>0]|0)==(l&255)<<24>>24){l=y;do{m=m+-1|0;k=k+1|0;if(!m){k=h;B=68;break c}l=l+1|0}while((a[k>>0]|0)==(a[l>>0]|0))}}while(0);h=c[h>>2]|0;if(!h){g=r;break a}}if((B|0)==68){b=k+20|0;return b|0}}else g=r}else g=0;while(0);m=_A(24)|0;cB(m+8|0,e);c[m+20>>2]=0;c[m+4>>2]=z;c[m>>2]=0;l=b+12|0;j=+(((c[l>>2]|0)+1|0)>>>0);i=+f[b+16>>2];do if(w|i*+(s>>>0)<j){g=s<<1|(s>>>0<3|(s+-1&s|0)!=0)&1;h=~~+u(+(j/i))>>>0;jj(b,g>>>0<h>>>0?h:g);g=c[t>>2]|0;h=g+-1|0;if(!(h&g)){k=g;g=h&z;break}if(z>>>0<g>>>0){k=g;g=z}else{k=g;g=(z>>>0)%(g>>>0)|0}}else k=s;while(0);h=(c[b>>2]|0)+(g<<2)|0;g=c[h>>2]|0;if(!g){g=b+8|0;c[m>>2]=c[g>>2];c[g>>2]=m;c[h>>2]=g;g=c[m>>2]|0;if(g|0){g=c[g+4>>2]|0;h=k+-1|0;if(h&k){if(g>>>0>=k>>>0)g=(g>>>0)%(k>>>0)|0}else g=g&h;A=(c[b>>2]|0)+(g<<2)|0;B=66}}else{c[m>>2]=c[g>>2];A=g;B=66}if((B|0)==66)c[A>>2]=m;c[l>>2]=(c[l>>2]|0)+1;b=m;b=b+20|0;return b|0}function ij(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,l=0,m=0;k=a+4|0;f=c[a>>2]|0;h=(c[k>>2]|0)-f>>4;g=h+1|0;if(g>>>0>268435455)HB();l=a+8|0;i=(c[l>>2]|0)-f|0;j=i>>3;j=i>>4>>>0<134217727?(j>>>0<g>>>0?g:j):268435455;do if(j)if(j>>>0>268435455)U();else{m=_A(j<<4)|0;break}else m=0;while(0);i=m+(h<<4)|0;Gj(i,c[b>>2]|0,c[d>>2]|0,c[e>>2]|0,0);f=c[a>>2]|0;h=(c[k>>2]|0)-f|0;g=i+(0-(h>>4)<<4)|0;if((h|0)>0)sC(g|0,f|0,h|0)|0;c[a>>2]=g;c[k>>2]=i+16;c[l>>2]=m+(j<<4);if(!f)return;$A(f);return}function jj(a,b){a=a|0;b=b|0;var d=0,e=0,g=0;if((b|0)!=1){if(b+-1&b)b=YA(b)|0}else b=2;e=c[a+4>>2]|0;if(b>>>0>e>>>0){kj(a,b);return}if(b>>>0>=e>>>0)return;d=~~+u(+(+((c[a+12>>2]|0)>>>0)/+f[a+16>>2]))>>>0;if(e>>>0>2&(e+-1&e|0)==0){g=1<<32-(w(d+-1|0)|0);d=d>>>0<2?d:g}else d=YA(d)|0;b=b>>>0<d>>>0?d:b;if(b>>>0>=e>>>0)return;kj(a,b);return}function kj(b,d){b=b|0;d=d|0;var 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;f=b+4|0;if(!d){e=c[b>>2]|0;c[b>>2]=0;if(e|0)$A(e);c[f>>2]=0;return}if(d>>>0>1073741823)U();r=_A(d<<2)|0;e=c[b>>2]|0;c[b>>2]=r;if(e|0)$A(e);c[f>>2]=d;e=0;do{c[(c[b>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=(d|0));f=b+8|0;g=c[f>>2]|0;if(!g)return;e=c[g+4>>2]|0;q=d+-1|0;r=(q&d|0)==0;if(!r){if(e>>>0>=d>>>0)e=(e>>>0)%(d>>>0)|0}else e=e&q;c[(c[b>>2]|0)+(e<<2)>>2]=f;f=c[g>>2]|0;if(!f)return;p=g;while(1){g=c[f+4>>2]|0;if(!r){if(g>>>0>=d>>>0)g=(g>>>0)%(d>>>0)|0}else g=g&q;do if((g|0)==(e|0))g=f;else{h=(c[b>>2]|0)+(g<<2)|0;if(!(c[h>>2]|0)){c[h>>2]=p;e=g;g=f;break}h=c[f>>2]|0;a:do if(!h)h=f;else{n=f+8|0;m=a[n+11>>0]|0;k=m<<24>>24<0;m=m&255;o=k?c[f+12>>2]|0:m;l=(o|0)==0;if(k){i=f;while(1){j=h+8|0;m=a[j+11>>0]|0;k=m<<24>>24<0;if((o|0)!=((k?c[h+12>>2]|0:m&255)|0)){h=i;break a}if(!l?Tz(c[n>>2]|0,k?c[j>>2]|0:j,o)|0:0){h=i;break a}i=c[h>>2]|0;if(!i)break a;else{m=h;h=i;i=m}}}if(l){i=f;while(1){o=a[h+8+11>>0]|0;if((o<<24>>24<0?c[h+12>>2]|0:o&255)|0){h=i;break a}i=c[h>>2]|0;if(!i)break a;else{o=h;h=i;i=o}}}l=f;while(1){i=h+8|0;k=a[i+11>>0]|0;j=k<<24>>24<0;if((o|0)!=((j?c[h+12>>2]|0:k&255)|0)){h=l;break a}i=j?c[i>>2]|0:i;if((a[i>>0]|0)!=(c[n>>2]&255)<<24>>24){h=l;break a}j=m;k=n;while(1){j=j+-1|0;k=k+1|0;if(!j)break;i=i+1|0;if((a[k>>0]|0)!=(a[i>>0]|0)){h=l;break a}}i=c[h>>2]|0;if(!i)break;else{l=h;h=i}}}while(0);c[p>>2]=c[h>>2];c[h>>2]=c[c[(c[b>>2]|0)+(g<<2)>>2]>>2];c[c[(c[b>>2]|0)+(g<<2)>>2]>>2]=f;g=p}while(0);f=c[g>>2]|0;if(!f)break;else p=g}return}function lj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=d+40|0;if((c[d+44>>2]|0)==(c[g>>2]|0)?(f=c[d+52>>2]|0,h=(c[d+56>>2]|0)-f|0,f,h>>2>>>0<2):0){e=c[b>>2]|0;if(!h){Yl(e,-64,330934);return}else{aj(e,c[f>>2]|0);return}}e=c[b+8>>2]|0;if(!(a[d>>0]|0))e=al(e,g)|0;else e=Ik(e,d+4|0)|0;Yl(c[b>>2]|0,e,298895);return}function mj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;xa=aa;aa=aa+480|0;wa=xa+456|0;I=xa+448|0;H=xa+440|0;G=xa+432|0;F=xa+424|0;E=xa+416|0;D=xa+408|0;C=xa+400|0;B=xa+392|0;A=xa+384|0;z=xa+376|0;y=xa+368|0;x=xa+360|0;v=xa+352|0;u=xa+344|0;t=xa+336|0;s=xa+328|0;ua=xa+320|0;ta=xa+312|0;sa=xa+304|0;ra=xa+296|0;pa=xa+288|0;oa=xa+280|0;na=xa+272|0;ma=xa+264|0;la=xa+256|0;ka=xa+248|0;ja=xa+240|0;ia=xa+232|0;ga=xa+224|0;ea=xa+216|0;da=xa+208|0;ca=xa+200|0;ba=xa+192|0;$=xa+184|0;_=xa+176|0;Y=xa+168|0;X=xa+160|0;W=xa+152|0;V=xa+144|0;T=xa+136|0;S=xa+128|0;R=xa+120|0;P=xa+112|0;O=xa+104|0;N=xa+96|0;M=xa+88|0;L=xa+80|0;K=xa+72|0;J=xa+64|0;w=xa+56|0;qa=xa+48|0;ha=xa+40|0;Z=xa+32|0;Q=xa+24|0;r=xa+16|0;q=xa;p=xa+464|0;c[b>>2]=d;va=b+4|0;Pn(c[va>>2]|0,298939,q);n=b+32|0;e=a[n+11>>0]|0;o=e<<24>>24<0;nj(b,o?c[n>>2]|0:n,o?c[b+36>>2]|0:e&255);Pn(c[va>>2]|0,298960,r);e=c[b>>2]|0;if((c[e+4>>2]|0)==(c[e>>2]|0)){ua=b+60|0;va=c[va>>2]|0;Pn(va,299034,wa);wa=c[ua>>2]|0;aa=xa;return wa|0}n=b+64|0;k=q+11|0;l=q+4|0;m=p+4|0;j=b+24|0;o=b+56|0;d=b+60|0;i=0;a:while(1){h=c[(c[e>>2]|0)+(i<<2)>>2]|0;if(i|0){Pn(c[va>>2]|0,330984,Q);Pn(c[va>>2]|0,298978,Z)}Pn(c[va>>2]|0,298980,ha);g=c[va>>2]|0;c[qa>>2]=330362;Pn(g,298984,qa);g=h+4|0;f=c[va>>2]|0;c[w>>2]=c[16+(c[g>>2]<<2)>>2];Pn(f,298991,w);Pn(c[va>>2]|0,330984,J);do switch(c[g>>2]|0){case 0:{oj(q,b,299939);g=c[va>>2]|0;c[K>>2]=298996;Pn(g,298984,K);g=c[va>>2]|0;c[L>>2]=c[h+16>>2];Pn(g,331593,L);Pn(c[va>>2]|0,330984,M);g=h+28|0;f=g+11|0;e=a[f>>0]|0;if(e<<24>>24<0)e=c[g+4>>2]|0;else e=e&255;if(e|0){e=c[va>>2]|0;c[N>>2]=313156;Pn(e,298984,N);f=a[f>>0]|0;e=f<<24>>24<0;nj(b,e?c[g>>2]|0:g,e?c[g+4>>2]|0:f&255);Pn(c[va>>2]|0,330984,O)}g=c[va>>2]|0;c[P>>2]=299001;Pn(g,298984,P);g=a[k>>0]|0;f=g<<24>>24<0;Tj(p,f?c[q>>2]|0:q,f?c[l>>2]|0:g&255);nj(b,c[p>>2]|0,c[m>>2]|0);g=a[k>>0]|0;f=g<<24>>24<0;g=f?c[l>>2]|0:g&255;e=r;c[e>>2]=f?c[q>>2]|0:q;c[e+4>>2]=g;e=c[j>>2]|0;if(!e){e=13;break a}h=bj(fa[c[(c[e>>2]|0)+24>>2]&511](e,r)|0,h+8|0,c[o>>2]|0)|0;c[d>>2]=((h|0)==1|(c[d>>2]|0)==1)&1;c[n>>2]=(c[n>>2]|0)+1;if((a[k>>0]|0)<0)$A(c[q>>2]|0);break}case 1:{h=c[h+8>>2]|0;g=c[va>>2]|0;c[R>>2]=298996;Pn(g,298984,R);g=c[va>>2]|0;c[S>>2]=c[h+12>>2];Pn(g,331593,S);Pn(c[va>>2]|0,330984,T);pj(b,h);Pn(c[va>>2]|0,330984,V);g=c[va>>2]|0;c[W>>2]=299010;Pn(g,298984,W);qj(b,h);break}case 2:{f=h+20|0;e=c[va>>2]|0;c[X>>2]=298996;Pn(e,298984,X);e=c[va>>2]|0;c[Y>>2]=c[f+8>>2];Pn(e,331593,Y);Pn(c[va>>2]|0,330984,_);e=f+20|0;if((c[e>>2]|0)==1){g=c[va>>2]|0;c[$>>2]=313156;Pn(g,298984,$);if(!(c[e>>2]|0)){g=c[va>>2]|0;c[ba>>2]=c[f+24>>2];Pn(g,299019,ba)}else{ya=f+24|0;g=a[ya+11>>0]|0;e=g<<24>>24<0;nj(b,e?c[ya>>2]|0:ya,e?c[f+28>>2]|0:g&255)}Pn(c[va>>2]|0,330984,ca)}f=c[va>>2]|0;c[da>>2]=299024;Pn(f,298984,da);f=h+8|0;ya=a[f+11>>0]|0;g=ya<<24>>24<0;nj(b,g?c[f>>2]|0:f,g?c[h+12>>2]|0:ya&255);break}case 3:{g=h+12|0;ya=a[g+11>>0]|0;f=ya<<24>>24<0;rj(b,c[h+8>>2]|0,f?c[g>>2]|0:g,f?c[g+4>>2]|0:ya&255);c[n>>2]=(c[n>>2]|0)+1;break}case 4:{g=h+12|0;ya=a[g+11>>0]|0;f=ya<<24>>24<0;rj(b,c[h+8>>2]|0,f?c[g>>2]|0:g,f?c[g+4>>2]|0:ya&255);c[n>>2]=(c[n>>2]|0)+1;break}case 5:{g=h+12|0;ya=a[g+11>>0]|0;f=ya<<24>>24<0;rj(b,c[h+8>>2]|0,f?c[g>>2]|0:g,f?c[g+4>>2]|0:ya&255);c[n>>2]=(c[n>>2]|0)+1;break}case 6:{g=h+12|0;ya=a[g+11>>0]|0;f=ya<<24>>24<0;rj(b,c[h+8>>2]|0,f?c[g>>2]|0:g,f?c[g+4>>2]|0:ya&255);c[n>>2]=(c[n>>2]|0)+1;break}case 7:{ya=h+8|0;f=c[ya>>2]|0;g=c[va>>2]|0;c[ea>>2]=298996;Pn(g,298984,ea);g=c[va>>2]|0;c[ga>>2]=c[f+12>>2];Pn(g,331593,ga);Pn(c[va>>2]|0,330984,ia);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,ja);ya=c[va>>2]|0;c[ka>>2]=299010;Pn(ya,298984,ka);sj(b,h+12|0);break}case 8:{ya=h+8|0;g=c[ya>>2]|0;h=c[va>>2]|0;c[la>>2]=298996;Pn(h,298984,la);h=c[va>>2]|0;c[ma>>2]=c[g+12>>2];Pn(h,331593,ma);Pn(c[va>>2]|0,330984,na);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,oa);h=c[va>>2]|0;c[pa>>2]=299010;Pn(h,298984,pa);qj(b,c[ya>>2]|0);break}case 9:{ya=h+8|0;g=c[ya>>2]|0;h=c[va>>2]|0;c[ra>>2]=298996;Pn(h,298984,ra);h=c[va>>2]|0;c[sa>>2]=c[g+12>>2];Pn(h,331593,sa);Pn(c[va>>2]|0,330984,ta);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,ua);h=c[va>>2]|0;c[s>>2]=299010;Pn(h,298984,s);qj(b,c[ya>>2]|0);break}case 10:{ya=h+8|0;f=c[ya>>2]|0;g=c[va>>2]|0;c[t>>2]=298996;Pn(g,298984,t);g=c[va>>2]|0;c[u>>2]=c[f+12>>2];Pn(g,331593,u);Pn(c[va>>2]|0,330984,v);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,x);g=c[va>>2]|0;c[y>>2]=299027;Pn(g,298984,y);g=h+12|0;h=a[g+11>>0]|0;f=h<<24>>24<0;nj(b,f?c[g>>2]|0:g,f?c[g+4>>2]|0:h&255);Pn(c[va>>2]|0,330984,z);h=c[va>>2]|0;c[A>>2]=299010;Pn(h,298984,A);qj(b,c[ya>>2]|0);break}case 11:{ya=h+8|0;f=c[ya>>2]|0;g=c[va>>2]|0;c[B>>2]=298996;Pn(g,298984,B);g=c[va>>2]|0;c[C>>2]=c[f+12>>2];Pn(g,331593,C);Pn(c[va>>2]|0,330984,D);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,E);g=c[va>>2]|0;c[F>>2]=299027;Pn(g,298984,F);g=h+12|0;h=a[g+11>>0]|0;f=h<<24>>24<0;nj(b,f?c[g>>2]|0:g,f?c[g+4>>2]|0:h&255);Pn(c[va>>2]|0,330984,G);h=c[va>>2]|0;c[H>>2]=299010;Pn(h,298984,H);qj(b,c[ya>>2]|0);break}default:{}}while(0);Pn(c[va>>2]|0,299032,I);i=i+1|0;e=c[b>>2]|0;if(i>>>0>=(c[e+4>>2]|0)-(c[e>>2]|0)>>2>>>0){e=34;break}}if((e|0)==13)U();else if((e|0)==34){ya=c[va>>2]|0;Pn(ya,299034,wa);ya=c[d>>2]|0;aa=xa;return ya|0}return 0}function nj(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;l=aa;aa=aa+16|0;j=l;i=l+4|0;h=b+4|0;g=c[h>>2]|0;a[i>>0]=34;Qn(g,i,1,0,0);if(!e){k=c[h>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);aa=l;return}g=0;do{b=a[d+g>>0]|0;f=b&255;a:do if((b&255)<32)k=6;else{switch(b<<24>>24){case 34:case 92:{k=6;break a}default:{}}f=c[h>>2]|0;a[i>>0]=b;Qn(f,i,1,0,0)}while(0);if((k|0)==6){k=0;b=c[h>>2]|0;c[j>>2]=f;Pn(b,299098,j)}g=g+1|0}while((g|0)!=(e|0));k=c[h>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);aa=l;return}function oj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=aa;aa=aa+16|0;i=f;cB(b,d+44|0);wB(b,46);EB(i,c[d+64>>2]|0);h=a[i+11>>0]|0;g=h<<24>>24<0;d=c[i>>2]|0;uB(b,g?d:i,g?c[i+4>>2]|0:h&255)|0;if(g)$A(d);vB(b,e)|0;e=a[b+11>>0]|0;if(e<<24>>24<0){d=c[b>>2]|0;e=c[b+4>>2]|0}else{d=b;e=e&255}b=d+e|0;if(!e){aa=f;return}do{if((a[d>>0]|0)==92)a[d>>0]=47;d=d+1|0}while((d|0)!=(b|0));aa=f;return}function pj(b,d){b=b|0;d=d|0;var 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;q=aa;aa=aa+112|0;p=q+96|0;o=q+88|0;n=q+80|0;m=q+72|0;l=q+64|0;k=q+56|0;j=q+48|0;g=q+32|0;f=q+24|0;i=q+16|0;e=q;h=b+4|0;r=c[h>>2]|0;c[e>>2]=301505;Pn(r,298984,e);Pn(c[h>>2]|0,299038,q+8|0);e=c[h>>2]|0;c[i>>2]=330362;Pn(e,298984,i);i=d+72|0;e=c[h>>2]|0;if(!(c[i>>2]|0)){c[f>>2]=330268;Pn(e,298991,f)}else{c[g>>2]=330250;Pn(e,298991,g)}Pn(c[h>>2]|0,330984,q+40|0);e=d+44|0;if((c[e>>2]|0)==1){r=c[h>>2]|0;c[j>>2]=330290;Pn(r,298984,j);if(!(c[e>>2]|0)){r=c[h>>2]|0;c[k>>2]=c[d+48>>2];Pn(r,299019,k)}else{j=d+48|0;r=a[j+11>>0]|0;k=r<<24>>24<0;nj(b,k?c[j>>2]|0:j,k?c[d+52>>2]|0:r&255)}Pn(c[h>>2]|0,330984,l)}r=(c[i>>2]|0)==0;k=c[h>>2]|0;c[m>>2]=299065;Pn(k,298984,m);k=d+60|0;m=a[k+11>>0]|0;l=m<<24>>24<0;nj(b,l?c[k>>2]|0:k,l?c[d+64>>2]|0:m&255);if(!r){r=c[h>>2]|0;Pn(r,299032,p);aa=q;return}Pn(c[h>>2]|0,330984,n);r=c[h>>2]|0;c[o>>2]=299071;Pn(r,298984,o);sj(b,d+76|0);r=c[h>>2]|0;Pn(r,299032,p);aa=q;return}function qj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+16|0;i=j+8|0;e=Bl(c[b>>2]|0,d+24|0)|0;h=b+4|0;Pn(c[h>>2]|0,329883,j);switch(c[d+72>>2]|0){case 0:{k=d+60|0;f=a[k+11>>0]|0;g=f<<24>>24<0;d=Rk(e,(Dk(e,g?c[k>>2]|0:k,g?c[d+64>>2]|0:f&255)|0)+16|0)|0;e=c[d+64>>2]|0;f=(c[d+68>>2]|0)-e|0;g=f>>2;if(!f){k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}f=d+64|0;tj(b,c[e>>2]|0);if(g>>>0<=1){k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}d=1;do{tj(b,c[(c[f>>2]|0)+(d<<2)>>2]|0);d=d+1|0}while((d|0)!=(g|0));k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}case 1:{f=d+60|0;k=a[f+11>>0]|0;g=k<<24>>24<0;k=(Tk(e,(Dk(e,g?c[f>>2]|0:f,g?c[d+64>>2]|0:k&255)|0)+16|0)|0)+12|0;tj(b,c[k>>2]|0);k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}default:{k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}}}function rj(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,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=aa;aa=aa+96|0;r=u+72|0;o=u+64|0;n=u+56|0;m=u+48|0;p=u+40|0;j=u+32|0;t=u+16|0;i=u+8|0;h=u;k=u+80|0;q=d+4|0;switch(c[q>>2]|0){case 0:{g=299939;l=308998;break}case 1:{g=299939;l=308998;break}case 2:{g=299945;l=299027;break}default:{g=354708;l=354708}}w=ea[c[(c[d>>2]|0)+8>>2]&127](d)|0;v=b+4|0;s=c[v>>2]|0;c[h>>2]=298996;Pn(s,298984,h);s=c[v>>2]|0;c[i>>2]=c[w+8>>2];Pn(s,331593,i);Pn(c[v>>2]|0,330984,t);oj(t,b,g);s=c[v>>2]|0;c[j>>2]=299001;Pn(s,298984,j);s=t+11|0;h=a[s>>0]|0;g=h<<24>>24<0;j=t+4|0;Tj(k,g?c[t>>2]|0:t,g?c[j>>2]|0:h&255);nj(b,c[k>>2]|0,c[k+4>>2]|0);Pn(c[v>>2]|0,330984,p);h=c[v>>2]|0;c[m>>2]=299027;Pn(h,298984,m);nj(b,e,f);Pn(c[v>>2]|0,330984,n);h=c[v>>2]|0;c[o>>2]=299053;Pn(h,298984,o);h=c[v>>2]|0;c[r>>2]=l;Pn(h,298991,r);h=a[s>>0]|0;g=h<<24>>24<0;h=g?c[j>>2]|0:h&255;g=g?c[t>>2]|0:t;a:do switch(c[q>>2]|0){case 0:{w=r;c[w>>2]=g;c[w+4>>2]=h;g=c[b+24>>2]|0;if(!g)U();else{v=fa[c[(c[g>>2]|0)+24>>2]&511](g,r)|0;v=bj(v,d+8|0,c[b+56>>2]|0)|0;w=b+60|0;c[w>>2]=((v|0)==1|(c[w>>2]|0)==1)&1;break a}break}case 1:{w=r;c[w>>2]=g;c[w+4>>2]=h;g=c[b+24>>2]|0;if(!g)U();j=fa[c[(c[g>>2]|0)+24>>2]&511](g,r)|0;g=c[d+40>>2]|0;i=(c[d+44>>2]|0)-g|0;if(i|0){if((i|0)<0)HB();h=_A(i)|0;sC(h|0,g|0,i|0)|0;Qn(j,h,i,354708,0);if(h|0)$A(h)}break}case 2:{w=r;c[w>>2]=g;c[w+4>>2]=h;g=c[b+24>>2]|0;if(!g)U();j=fa[c[(c[g>>2]|0)+24>>2]&511](g,r)|0;g=c[d+40>>2]|0;i=(c[d+44>>2]|0)-g|0;if(i|0){if((i|0)<0)HB();h=_A(i)|0;sC(h|0,g|0,i|0)|0;Qn(j,h,i,354708,0);if(h|0)$A(h)}break}default:{}}while(0);if((a[s>>0]|0)>=0){aa=u;return}$A(c[t>>2]|0);aa=u;return}function sj(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,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;G=aa;aa=aa+336|0;h=G+320|0;E=G+312|0;D=G+304|0;C=G+296|0;B=G;A=G+288|0;y=G+280|0;x=G+272|0;w=G+264|0;v=G+256|0;u=G+248|0;t=G+240|0;s=G+232|0;q=G+224|0;p=G+216|0;o=G+208|0;n=G+200|0;m=G+192|0;l=G+184|0;k=G+176|0;j=G+168|0;F=G+160|0;z=G+152|0;r=G+144|0;i=G+136|0;g=a+4|0;Pn(c[g>>2]|0,329883,G+128|0);f=b+4|0;a=c[b>>2]|0;if((c[f>>2]|0)==(a|0)){F=c[g>>2]|0;Pn(F,330908,i);aa=G;return}e=0;do{Pn(c[g>>2]|0,299038,r);d=c[g>>2]|0;c[z>>2]=330362;Pn(d,298984,z);switch(c[a+(e*40|0)+20>>2]|0){case -1:{d=c[g>>2]|0;c[F>>2]=330980;Pn(d,298991,F);Pn(c[g>>2]|0,330984,j);d=c[g>>2]|0;c[k>>2]=299040;Pn(d,298984,k);d=c[g>>2]|0;c[l>>2]=c[a+(e*40|0)+24>>2];Pn(d,299019,l);break}case -2:{d=c[g>>2]|0;c[m>>2]=330976;Pn(d,298991,m);Pn(c[g>>2]|0,330984,n);d=c[g>>2]|0;c[o>>2]=299040;Pn(d,298984,o);d=c[g>>2]|0;I=a+(e*40|0)+24|0;H=c[I+4>>2]|0;a=p;c[a>>2]=c[I>>2];c[a+4>>2]=H;Pn(d,299046,p);break}case -3:{I=c[g>>2]|0;c[q>>2]=330972;Pn(I,298991,q);Pn(c[g>>2]|0,330984,s);I=c[g>>2]|0;c[t>>2]=299040;Pn(I,298984,t);I=c[g>>2]|0;c[u>>2]=c[a+(e*40|0)+24>>2];Pn(I,299019,u);break}case -4:{I=c[g>>2]|0;c[v>>2]=330968;Pn(I,298991,v);Pn(c[g>>2]|0,330984,w);I=c[g>>2]|0;c[x>>2]=299040;Pn(I,298984,x);I=c[g>>2]|0;a=a+(e*40|0)+24|0;d=c[a+4>>2]|0;H=y;c[H>>2]=c[a>>2];c[H+4>>2]=d;Pn(I,299046,y);break}case -5:{I=c[g>>2]|0;c[A>>2]=330963;Pn(I,298991,A);Pn(c[g>>2]|0,330984,B);I=c[g>>2]|0;c[h>>2]=299040;Pn(I,298984,h);I=a+(e*40|0)+24|0;c[h>>2]=c[I>>2];c[h+4>>2]=c[I+4>>2];c[h+8>>2]=c[I+8>>2];c[h+12>>2]=c[I+12>>2];zm(B,h);I=c[g>>2]|0;c[C>>2]=B;Pn(I,298991,C);break}default:{}}Pn(c[g>>2]|0,299032,D);a=c[b>>2]|0;d=((c[f>>2]|0)-a|0)/40|0;if((e|0)!=(d+-1|0)){Pn(c[g>>2]|0,330984,E);d=c[b>>2]|0;a=d;d=((c[f>>2]|0)-d|0)/40|0}e=e+1|0}while(e>>>0<d>>>0);I=c[g>>2]|0;Pn(I,330908,i);aa=G;return}function tj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+32|0;f=g+24|0;e=g+16|0;h=g+8|0;d=a+4|0;Pn(c[d>>2]|0,299038,g);a=c[d>>2]|0;c[h>>2]=330362;Pn(a,298984,h);do switch(b|0){case -1:{a=330980;break}case -2:{a=330976;break}case -3:{a=330972;break}case -4:{a=330968;break}case -5:{a=330963;break}case -16:{a=330955;break}case -32:{a=330950;break}case -24:{a=330939;break}case -64:{a=330934;break}case 0:{a=330930;break}case -17:{a=330923;break}default:a=330910}while(0);h=c[d>>2]|0;c[e>>2]=a;Pn(h,298991,e);Pn(c[d>>2]|0,299032,f);aa=g;return}function uj(b,d,e,f,g,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=aa;aa=aa+128|0;m=q+124|0;s=q+120|0;p=q+96|0;o=q+24|0;r=q;c[m>>2]=j;c[s>>2]=k;n=p+16|0;c[p>>2]=289084;j=p+4|0;c[j>>2]=m;c[p+8>>2]=s;c[n>>2]=p;k=r+16|0;c[k>>2]=r;c[r>>2]=289084;s=c[j>>2]|0;j=c[j+4>>2]|0;m=r+4|0;c[m>>2]=s;c[m+4>>2]=j;c[o>>2]=0;c[o+4>>2]=b;m=o+8|0;l=o+24|0;c[l>>2]=m;c[m>>2]=289084;m=o+12|0;c[m>>2]=s;c[m+4>>2]=j;m=o+32|0;Vn(m,e,f);b=o+44|0;Vn(b,g,h);c[o+56>>2]=i;c[o+60>>2]=0;c[o+64>>2]=0;k=c[k>>2]|0;if((r|0)!=(k|0)){if(k|0)ma[c[(c[k>>2]|0)+20>>2]&255](k)}else ma[c[(c[k>>2]|0)+16>>2]&255](k);j=mj(o,d)|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0);if((a[m+11>>0]|0)<0)$A(c[m>>2]|0);k=c[l>>2]|0;if((o+8|0)!=(k|0)){if(k|0)ma[c[(c[k>>2]|0)+20>>2]&255](k)}else ma[c[(c[k>>2]|0)+16>>2]&255](k);k=c[n>>2]|0;if((p|0)==(k|0)){ma[c[(c[k>>2]|0)+16>>2]&255](k);aa=q;return j|0}if(!k){aa=q;return j|0}ma[c[(c[k>>2]|0)+20>>2]&255](k);aa=q;return j|0}function vj(a){a=a|0;return}function wj(a){a=a|0;$A(a);return}function xj(a){a=a|0;var b=0,d=0,e=0;b=_A(12)|0;c[b>>2]=289084;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function yj(a,b){a=a|0;b=b|0;var d=0,e=0;c[b>>2]=289084;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return}function zj(a){a=a|0;return}function Aj(a){a=a|0;$A(a);return}function Bj(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;k=aa;aa=aa+16|0;i=k;j=k+8|0;g=c[b>>2]|0;e=c[b+4>>2]|0;c[i>>2]=g;c[i+4>>2]=e;h=a+4|0;f=c[c[h>>2]>>2]|0;d=c[a+8>>2]|0;b=_A(20)|0;Sn(b,c[d>>2]|0);c[j>>2]=b;d=f+4|0;a=c[d>>2]|0;if(a>>>0>=(c[f+8>>2]|0)>>>0){Ej(f,i,j);b=c[j>>2]|0;c[j>>2]=0;if(b|0)ma[c[(c[b>>2]|0)+4>>2]&255](b)}else{c[j>>2]=0;Vn(a,g,e);c[a+12>>2]=b;c[d>>2]=(c[d>>2]|0)+16;c[j>>2]=0}aa=k;return c[(c[(c[c[h>>2]>>2]|0)+4>>2]|0)+-4>>2]|0}function Cj(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==299105?a+4|0:0)|0}function Dj(a){a=a|0;return 285960}function Ej(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,p=0;l=b+4|0;f=c[b>>2]|0;k=(c[l>>2]|0)-f>>4;g=k+1|0;if(g>>>0>268435455)HB();m=b+8|0;i=(c[m>>2]|0)-f|0;f=i>>3;f=i>>4>>>0<134217727?(f>>>0<g>>>0?g:f):268435455;do if(f)if(f>>>0>268435455)U();else{j=_A(f<<4)|0;break}else j=0;while(0);g=j+(k<<4)|0;i=j+(f<<4)|0;n=c[d>>2]|0;f=c[d+4>>2]|0;h=c[e>>2]|0;c[e>>2]=0;Vn(g,n,f);c[j+(k<<4)+12>>2]=h;h=g+16|0;f=c[b>>2]|0;e=f;d=c[l>>2]|0;if((d|0)!=(f|0)){e=(d+-16-e|0)>>>4;do{n=g;g=g+-16|0;p=d;d=d+-16|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;p=p+-4|0;o=c[p>>2]|0;c[p>>2]=0;c[n+-4>>2]=o}while((d|0)!=(f|0));g=j+(k+-1-e<<4)|0;e=c[b>>2]|0;f=c[l>>2]|0}c[b>>2]=g;c[l>>2]=h;c[m>>2]=i;d=e;if((f|0)!=(d|0))do{p=f+-4|0;f=f+-16|0;g=c[p>>2]|0;c[p>>2]=0;if(g|0)ma[c[(c[g>>2]|0)+4>>2]&255](g);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(d|0));if(!e)return;$A(e);return}function Fj(b,d,e){b=b|0;d=d|0;e=e|0;c[b>>2]=d;if(e){e=Y(299573)|0;if(!e)e=TA(OA(d)|0)|0;else e=PA(e)|0;e=(e|0)!=0&1}else e=0;a[b+4>>0]=e;return}function Gj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=e;c[a+12>>2]=f;return}function Hj(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;H=aa;aa=aa+64|0;G=H+8|0;F=H;C=H+40|0;E=H+24|0;D=H+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if((d|0)==(e|0)){aa=H;return}B=i+11|0;z=i+4|0;y=C+11|0;x=h+4|0;u=(f|0)==0;k=E+11|0;p=E+4|0;l=E+11|0;q=E+4|0;w=(g|0)==0;m=E+11|0;r=E+4|0;n=E+11|0;t=E+4|0;j=D+11|0;o=D+4|0;s=C+4|0;v=E+12|0;a:while(1){f=a[B>>0]|0;f=((f<<24>>24<0?c[z>>2]|0:f&255)|0)==0;i=f?0:2;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;a[y>>0]=i;if(!f)uC(C|0,32,i|0)|0;a[C+i>>0]=0;cB(D,C);vB(D,(a[x>>0]|0)==0?354708:299906)|0;i=c[d+8>>2]|0;if(i|0){Wn(E,c[d+4>>2]|0,i);h=a[k>>0]|0;f=h<<24>>24<0;i=c[E>>2]|0;uB(D,f?i:E,f?c[p>>2]|0:h&255)|0;if(f)$A(i);vB(D,322981)|0}if(u){h=c[d+16>>2]|0;c[F>>2]=c[d+12>>2];c[F+4>>2]=h;Ij(E,299911,F);h=a[l>>0]|0;f=h<<24>>24<0;i=c[E>>2]|0;uB(D,f?i:E,f?c[q>>2]|0:h&255)|0;if(f)$A(i)}else{i=c[d+12>>2]|0;if((i|0)!=-1?(c[G>>2]=i,Ij(E,301446,G),h=a[m>>0]|0,f=h<<24>>24<0,A=c[E>>2]|0,uB(D,f?A:E,f?c[r>>2]|0:h&255)|0,f):0)$A(A)}vB(D,(a[x>>0]|0)==0?354708:299919)|0;switch(c[d>>2]|0){case 0:{vB(D,324100)|0;break}case 1:{vB(D,324094)|0;break}default:{i=19;break a}}vB(D,299925)|0;vB(D,(a[x>>0]|0)==0?354708:299928)|0;i=d+24|0;f=a[i+11>>0]|0;h=f<<24>>24<0;uB(D,h?c[i>>2]|0:i,h?c[d+28>>2]|0:f&255)|0;wB(D,10);c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if(!w){h=d+16|0;f=d+20|0;jm(g,c[d+12>>2]|0,c[h>>2]|0,c[f>>2]|0,E);i=a[n>>0]|0;if((i<<24>>24<0?c[t>>2]|0:i&255)|0){i=a[y>>0]|0;J=i<<24>>24<0;I=J?c[C>>2]|0:C;i=J?c[s>>2]|0:i&255;uB(D,I,i)|0;J=a[n>>0]|0;K=J<<24>>24<0;uB(D,K?c[E>>2]|0:E,K?c[t>>2]|0:J&255)|0;wB(D,10);uB(D,I,i)|0;i=c[h>>2]|0;h=i+-1-(c[v>>2]|0)|0;i=(c[f>>2]|0)-i|0;f=a[n>>0]|0;f=(f<<24>>24<0?c[t>>2]|0:f&255)-h|0;i=f>>>0<i>>>0?f:i;sB(D,h,32)|0;vB(D,(a[x>>0]|0)==0?354708:299906)|0;vB(D,(a[x>>0]|0)==0?354708:299933)|0;sB(D,(i|0)==0?1:i,94)|0;vB(D,(a[x>>0]|0)==0?354708:299928)|0;wB(D,10);i=a[n>>0]|0}if(i<<24>>24<0)$A(c[E>>2]|0)}if((a[y>>0]|0)<0)$A(c[C>>2]|0);K=a[j>>0]|0;J=K<<24>>24<0;uB(b,J?c[D>>2]|0:D,J?c[o>>2]|0:K&255)|0;if((a[j>>0]|0)<0)$A(c[D>>2]|0);d=d+36|0;if((d|0)==(e|0)){i=3;break}}if((i|0)==3){aa=H;return}else if((i|0)==19)U()}function Ij(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;l=aa;aa=aa+32|0;j=l+16|0;i=l;c[j>>2]=e;c[i>>2]=c[j>>2];j=Vz(0,0,d,j)|0;h=j+1|0;if(!h)e=0;else{if((j|0)<-1)HB();g=_A(h)|0;e=h;f=g;while(1){a[f>>0]=0;e=e+-1|0;if(!e){e=g;break}else f=f+1|0}}Vz(e,h,d,i)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(j>>>0>4294967279)aB();if(j>>>0<11){a[b+11>>0]=j;if(j)k=11}else{d=j+16&-16;k=_A(d)|0;c[b>>2]=k;c[b+8>>2]=d|-2147483648;c[b+4>>2]=j;b=k;k=11}if((k|0)==11)sC(b|0,e|0,j|0)|0;a[b+j>>0]=0;if(!e){aa=l;return}$A(e);aa=l;return}function Jj(a,b){a=a|0;b=b|0;c[a>>2]=b;b=a+4|0;a=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function Kj(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,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+16|0;q=w+12|0;u=w+8|0;t=w;v=a+4|0;e=c[v>>2]|0;m=a+8|0;c[m>>2]=e;s=a+16|0;d=c[s>>2]|0;n=a+20|0;c[n>>2]=d;r=a+28|0;o=a+32|0;c[o>>2]=c[r>>2];c[q>>2]=b;c[u>>2]=0;p=a+12|0;if((c[p>>2]|0)>>>0>e>>>0){c[e>>2]=0;c[m>>2]=e+4}else{Lj(v,u);d=c[n>>2]|0}l=a+24|0;if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);d=c[m>>2]|0;if((c[v>>2]|0)==(d|0)){a=0;aa=w;return a|0}k=t+4|0;i=a+36|0;j=t+4|0;a:while(1){e=d+-4|0;g=c[n>>2]|0;b=g+-4|0;h=c[b>>2]|0;b:do switch(c[e>>2]|0){case 0:{c[m>>2]=e;c[n>>2]=b;if((Nj(a,h)|0)==1){d=1;e=93;break a}break}case 1:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(!e){g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+16>>2]&511](g,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break}case 2:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(e|0){b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break b}g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+72>>2]&511](g,h)|0)==1){d=1;e=93;break a}e=c[m>>2]|0;b=e+-4|0;c[m>>2]=b;d=(c[n>>2]|0)+-4|0;c[n>>2]=d;c[o>>2]=(c[o>>2]|0)+-8;f=h+144|0;c[q>>2]=3;c[u>>2]=h;if(b>>>0<(c[p>>2]|0)>>>0){c[b>>2]=3;c[m>>2]=e}else{Oj(v,q);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=h;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,u);d=c[f>>2]|0;c[t>>2]=f;c[k>>2]=d;d=c[o>>2]|0;if(d>>>0<(c[i>>2]|0)>>>0){f=t;g=c[f+4>>2]|0;h=d;c[h>>2]=c[f>>2];c[h+4>>2]=g;c[o>>2]=(c[o>>2]|0)+8}else Pj(r,t);break}case 3:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(!e){g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+76>>2]&511](g,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break}case 4:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(!e){g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+100>>2]&511](g,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break}case 5:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(e|0){b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break b}f=h+144|0;d=c[a>>2]|0;e=c[d>>2]|0;if(!(c[h+152>>2]|0)){if((fa[c[e+204>>2]&511](d,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}if((fa[c[e+200>>2]&511](d,h)|0)==1){d=1;e=93;break a}e=c[m>>2]|0;b=e+-4|0;c[m>>2]=b;d=(c[n>>2]|0)+-4|0;c[n>>2]=d;c[o>>2]=(c[o>>2]|0)+-8;c[q>>2]=6;c[u>>2]=h;if(b>>>0<(c[p>>2]|0)>>>0){c[b>>2]=6;c[m>>2]=e}else{Oj(v,q);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=h;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,u);d=c[f>>2]|0;c[t>>2]=f;c[j>>2]=d;d=c[o>>2]|0;if(d>>>0<(c[i>>2]|0)>>>0){f=t;g=c[f+4>>2]|0;h=d;c[h>>2]=c[f>>2];c[h+4>>2]=g;c[o>>2]=(c[o>>2]|0)+8}else Pj(r,t);break}case 6:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(!e){g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+204>>2]&511](g,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break}default:{}}while(0);d=c[m>>2]|0;if((c[v>>2]|0)==(d|0)){d=0;e=93;break}}if((e|0)==93){aa=w;return d|0}return 0}function Lj(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function Mj(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function Nj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;g=j+12|0;h=j+8|0;i=j;do switch(c[b+32>>2]|0){case 0:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+224>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 3:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+228>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 1:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+232>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 2:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+236>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 5:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+216>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 4:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+220>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 6:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+8>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 7:{f=c[a>>2]|0;if((fa[c[(c[f>>2]|0)+12>>2]&511](f,b)|0)==1){a=1;aa=j;return a|0}f=b+112|0;c[g>>2]=1;c[h>>2]=b;e=a+8|0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=1;c[e>>2]=d+4}else Oj(a+4|0,g);e=a+20|0;d=c[e>>2]|0;if(d>>>0<(c[a+24>>2]|0)>>>0){c[d>>2]=b;c[e>>2]=(c[e>>2]|0)+4}else Mj(a+16|0,h);e=c[f>>2]|0;c[i>>2]=f;c[i+4>>2]=e;e=a+32|0;d=c[e>>2]|0;if(d>>>0<(c[a+36>>2]|0)>>>0){h=i;i=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=i;c[e>>2]=(c[e>>2]|0)+8}else Pj(a+28|0,i);break}case 8:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+20>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 9:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+24>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 10:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+28>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 11:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+32>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 12:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+36>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 13:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+40>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 14:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+44>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 15:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+48>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 16:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+52>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 17:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+56>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 18:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+60>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 19:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+64>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 20:{f=c[a>>2]|0;if((fa[c[(c[f>>2]|0)+68>>2]&511](f,b)|0)==1){a=1;aa=j;return a|0}f=b+112|0;c[g>>2]=2;c[h>>2]=b;e=a+8|0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=2;c[e>>2]=d+4}else Oj(a+4|0,g);e=a+20|0;d=c[e>>2]|0;if(d>>>0<(c[a+24>>2]|0)>>>0){c[d>>2]=b;c[e>>2]=(c[e>>2]|0)+4}else Mj(a+16|0,h);e=c[f>>2]|0;c[i>>2]=f;c[i+4>>2]=e;e=a+32|0;d=c[e>>2]|0;if(d>>>0<(c[a+36>>2]|0)>>>0){h=i;i=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=i;c[e>>2]=(c[e>>2]|0)+8}else Pj(a+28|0,i);break}case 21:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+80>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 42:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+252>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 22:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+84>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 23:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+88>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 24:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+92>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 25:{f=c[a>>2]|0;if((fa[c[(c[f>>2]|0)+96>>2]&511](f,b)|0)==1){a=1;aa=j;return a|0}f=b+112|0;c[g>>2]=4;c[h>>2]=b;e=a+8|0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=4;c[e>>2]=d+4}else Oj(a+4|0,g);e=a+20|0;d=c[e>>2]|0;if(d>>>0<(c[a+24>>2]|0)>>>0){c[d>>2]=b;c[e>>2]=(c[e>>2]|0)+4}else Mj(a+16|0,h);e=c[f>>2]|0;c[i>>2]=f;c[i+4>>2]=e;e=a+32|0;d=c[e>>2]|0;if(d>>>0<(c[a+36>>2]|0)>>>0){h=i;i=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=i;c[e>>2]=(c[e>>2]|0)+8}else Pj(a+28|0,i);break}case 26:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+104>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 27:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+108>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 28:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+112>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 29:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+116>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 30:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+120>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 31:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+124>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 44:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+128>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 45:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+132>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 46:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+136>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 47:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+140>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 50:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+144>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 48:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+148>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 49:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+152>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 34:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+156>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 33:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+160>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 32:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+164>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 35:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+212>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 36:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+168>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 37:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+172>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 38:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+176>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 39:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+180>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 43:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+184>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 52:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+208>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 53:{f=c[a>>2]|0;if((fa[c[(c[f>>2]|0)+196>>2]&511](f,b)|0)==1){a=1;aa=j;return a|0}f=b+112|0;c[g>>2]=5;c[h>>2]=b;e=a+8|0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=5;c[e>>2]=d+4}else Oj(a+4|0,g);e=a+20|0;d=c[e>>2]|0;if(d>>>0<(c[a+24>>2]|0)>>>0){c[d>>2]=b;c[e>>2]=(c[e>>2]|0)+4}else Mj(a+16|0,h);e=c[f>>2]|0;c[i>>2]=f;c[i+4>>2]=e;e=a+32|0;d=c[e>>2]|0;if(d>>>0<(c[a+36>>2]|0)>>>0){h=i;i=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=i;c[e>>2]=(c[e>>2]|0)+8}else Pj(a+28|0,i);break}case 54:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+188>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 51:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+240>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 40:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+244>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 41:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+248>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 55:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+192>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}default:{}}while(0);a=0;aa=j;return a|0}function Oj(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function Pj(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>3;d=f+1|0;if(d>>>0>536870911)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>2;e=m>>3>>>0<268435455?(e>>>0<d>>>0?d:e):536870911;do if(e)if(e>>>0>536870911)U();else{k=_A(e<<3)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<3)|0;f=b;b=c[f+4>>2]|0;m=d;c[m>>2]=c[f>>2];c[m+4>>2]=b;if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+8;c[j>>2]=k+(e<<3);if(!g)return;$A(g);return}function Qj(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b){a=0;return a|0}while(1){if((Kj(a,b)|0)==1){b=1;a=5;break}b=c[b+4>>2]|0;if(!b){b=0;a=5;break}}if((a|0)==5)return b|0;return 0}function Rj(a,b){a=a|0;b=b|0;b=c[b+108>>2]|0;if(!b){a=0;return a|0}while(1){if((Kj(a,b)|0)==1){b=1;a=5;break}b=c[b+4>>2]|0;if(!b){b=0;a=5;break}}if((a|0)==5)return b|0;return 0}function Sj(a,b,c){a=a|0;b=b|0;c=c|0;Xn(a,b,c,0,_n(b,c,46)|0);return}function Tj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;f=b;g=_n(b,d,47)|0;e=_n(b,d,92)|0;h=(e|0)==-1;if((e&g|0)==-1){c[a>>2]=f;c[a+4>>2]=d;return}if((g|0)==-1){if(h){c[a>>2]=f;c[a+4>>2]=d;return}}else e=h?g:g>>>0<e>>>0?e:g;Xn(a,b,d,e+1|0,-1);return}function Uj(b){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,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;I=aa;aa=aa+128|0;E=I+112|0;G=I+88|0;A=I+72|0;H=I;c[H>>2]=289128;F=H+4|0;c[F>>2]=0;D=H+8|0;Jj(D,H);C=H+48|0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;c[C+20>>2]=0;c[F>>2]=b;d=c[b+100>>2]|0;m=c[b+104>>2]|0;a:do if((d|0)!=(m|0)){t=H+52|0;w=H+56|0;v=H+60|0;u=H+64|0;s=H+68|0;q=G+11|0;n=G+8|0;o=G+4|0;p=A+11|0;r=G+20|0;while(1){i=c[d>>2]|0;switch(c[i+28>>2]|0){case 0:{k=c[t>>2]|0;l=(c[F>>2]|0)+216|0;e=t;B=9;break}case 1:{k=c[w>>2]|0;l=(c[F>>2]|0)+296|0;e=w;B=9;break}case 2:{k=c[v>>2]|0;l=(c[F>>2]|0)+316|0;e=v;B=9;break}case 3:{k=c[u>>2]|0;l=(c[F>>2]|0)+236|0;e=u;B=9;break}case 4:{k=c[s>>2]|0;l=(c[F>>2]|0)+196|0;e=s;B=9;break}default:{}}if((B|0)==9){B=0;c[e>>2]=k+1;j=i+32|0;g=i+4|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;f=a[g+11>>0]|0;h=f<<24>>24<0;f=h?c[i+8>>2]|0:f&255;e=f+1|0;if(e>>>0>4294967279)break;if(e>>>0<11){a[q>>0]=1;e=G}else{J=f+17&-16;e=_A(J)|0;c[G>>2]=e;c[n>>2]=J|-2147483648;c[o>>2]=1}a[e>>0]=36;a[e+1>>0]=0;uB(G,h?c[g>>2]|0:g,f)|0;wB(G,46);c[E>>2]=c[G>>2];c[E+4>>2]=c[G+4>>2];c[E+8>>2]=c[G+8>>2];c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;g=i+16|0;J=a[g+11>>0]|0;h=J<<24>>24<0;uB(E,h?c[g>>2]|0:g,h?c[i+20>>2]|0:J&255)|0;c[A>>2]=c[E>>2];c[A+4>>2]=c[E+4>>2];c[A+8>>2]=c[E+8>>2];c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if((a[q>>0]|0)<0)$A(c[G>>2]|0);e=a[p>>0]|0;f=e<<24>>24<0?c[A>>2]|0:A;J=a[j+11>>0]|0;if(!((J<<24>>24<0?c[i+36>>2]|0:J&255)|0)){e=0;while(1){Vj(f,-1,e,j);if(!(Wj(l,j)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[r>>2]=k;Og(E,l,j,G);Gg(l,c[E>>2]|0);e=a[p>>0]|0}if(e<<24>>24<0)$A(c[A>>2]|0)}d=d+4|0;if((d|0)==(m|0))break a}aB()}while(0);d=c[b+112>>2]|0;i=c[b+116>>2]|0;b:do if((d|0)!=(i|0)){l=A+11|0;j=A+8|0;k=A+4|0;m=G+20|0;while(1){h=c[d>>2]|0;switch(c[h+12>>2]|0){case 0:{e=c[F>>2]|0;g=h+16|0;f=Sk(e,g)|0;if(f|0){x=e+216|0;y=Ek(e,g)|0;z=f;B=37}break}case 1:{e=c[F>>2]|0;g=h+16|0;f=Vk(e,g)|0;if(f|0){x=e+296|0;y=Gk(e,g)|0;z=f;B=37}break}case 2:{e=c[F>>2]|0;g=h+16|0;f=Wk(e,g)|0;if(f|0){x=e+316|0;y=Hk(e,g)|0;z=f;B=37}break}case 3:{e=c[F>>2]|0;g=h+16|0;f=Uk(e,g)|0;if(f|0){x=e+236|0;y=Fk(e,g)|0;z=f;B=37}break}case 4:{e=c[F>>2]|0;g=h+16|0;f=Xk(e,g)|0;if(f|0){x=e+196|0;y=Jk(e,g)|0;z=f;B=37}break}default:{}}if((B|0)==37?(B=0,z|0):0){c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;f=a[h+11>>0]|0;g=f<<24>>24<0;f=g?c[h+4>>2]|0:f&255;e=f+1|0;if(e>>>0>4294967279)break;if(e>>>0<11){a[l>>0]=1;e=A}else{J=f+17&-16;e=_A(J)|0;c[A>>2]=e;c[j>>2]=J|-2147483648;c[k>>2]=1}a[e>>0]=36;a[e+1>>0]=0;uB(A,g?c[h>>2]|0:h,f)|0;e=a[l>>0]|0;f=e<<24>>24<0?c[A>>2]|0:A;J=a[z+11>>0]|0;if(!((J<<24>>24<0?c[z+4>>2]|0:J&255)|0)){e=0;while(1){Vj(f,-1,e,z);if(!(Wj(x,z)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[m>>2]=y;Og(E,x,z,G);Gg(x,c[E>>2]|0);e=a[l>>0]|0}if(e<<24>>24<0)$A(c[A>>2]|0)}d=d+4|0;if((d|0)==(i|0))break b}aB()}while(0);i=b+88|0;h=b+92|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){j=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+236|0;e=0;while(1){Vj(299950,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}i=b+124|0;h=b+128|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){j=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+276|0;e=0;while(1){Vj(299953,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}i=b+76|0;h=b+80|0;d=c[i>>2]|0;c:do if((c[h>>2]|0)!=(d|0)){j=G+20|0;g=0;do{d=c[d+(g<<2)>>2]|0;J=a[d+11>>0]|0;if(!((J<<24>>24<0?c[d+4>>2]|0:J&255)|0)){e=(c[F>>2]|0)+216|0;f=0;while(1){Vj(299956,g,f,d);if(!(Wj(e,d)|0))break;else f=f+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,e,d,G);Gg(e,c[E>>2]|0)}Xj(d);c[C>>2]=0;if((Rj(D,d)|0)==1)break c;g=g+1|0;d=c[i>>2]|0}while(g>>>0<(c[h>>2]|0)-d>>2>>>0)}while(0);j=b+136|0;h=b+140|0;e=c[h>>2]|0;d=c[j>>2]|0;if((e|0)!=(d|0)){i=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+296|0;e=0;while(1){Vj(299959,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[i>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[j>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}j=b+160|0;h=b+164|0;e=c[h>>2]|0;d=c[j>>2]|0;if((e|0)!=(d|0)){i=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+316|0;e=0;while(1){Vj(299962,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[i>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[j>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}i=b+64|0;h=b+68|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){j=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+196|0;e=0;while(1){Vj(299965,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}i=b+172|0;h=b+176|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){j=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+336|0;e=0;while(1){Vj(299968,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}j=b+148|0;h=b+152|0;e=c[h>>2]|0;d=c[j>>2]|0;if((e|0)!=(d|0)){i=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+356|0;e=0;while(1){Vj(299965,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[i>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[j>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}c[F>>2]=0;c[H>>2]=289128;d=c[H+36>>2]|0;if(d|0){c[H+40>>2]=d;$A(d)}d=c[H+24>>2]|0;if(d|0){c[H+28>>2]=d;$A(d)}d=c[H+12>>2]|0;if(!d){aa=I;return}c[H+16>>2]=d;$A(d);aa=I;return}function Vj(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;j=aa;aa=aa+32|0;h=j+12|0;i=j;qB(f,b)|0;if((d|0)!=-1?(BB(h,d),d=a[h+11>>0]|0,b=d<<24>>24<0,g=c[h>>2]|0,uB(f,b?g:h,b?c[h+4>>2]|0:d&255)|0,b):0)$A(g);if(!e){aa=j;return}BB(i,e);e=i+11|0;xB(i,(a[e>>0]|0)<0?c[i>>2]|0:i);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;d=a[h+11>>0]|0;b=d<<24>>24<0;g=c[h>>2]|0;uB(f,b?g:h,b?c[h+4>>2]|0:d&255)|0;if(b)$A(g);if((a[e>>0]|0)<0)$A(c[i>>2]|0);aa=j;return}function Wj(b,e){b=b|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,p=0,q=0,r=0,s=0,t=0;s=a[e+11>>0]|0;r=s<<24>>24<0;t=r?c[e>>2]|0:e;s=r?c[e+4>>2]|0:s&255;if(s>>>0>3){e=t;h=s;f=s;while(1){r=v(d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24,1540483477)|0;h=(v(r>>>24^r,1540483477)|0)^(v(h,1540483477)|0);f=f+-4|0;if(f>>>0<=3)break;else e=e+4|0}r=s+-4|0;f=r&-4;g=t+(f+4)|0;e=h;f=r-f|0}else{g=t;e=s;f=s}switch(f|0){case 3:{i=d[g+2>>0]<<16^e;l=7;break}case 2:{i=e;l=7;break}case 1:{j=e;l=8;break}default:k=e}if((l|0)==7){j=d[g+1>>0]<<8^i;l=8}if((l|0)==8)k=v(j^d[g>>0],1540483477)|0;r=v(k>>>13^k,1540483477)|0;r=r>>>15^r;p=c[b+4>>2]|0;if(!p){t=0;return t|0}i=p+-1|0;f=(i&p|0)==0;if(!f)if(r>>>0<p>>>0)q=r;else q=(r>>>0)%(p>>>0)|0;else q=r&i;e=c[(c[b>>2]|0)+(q<<2)>>2]|0;if(!e){t=0;return t|0}j=c[e>>2]|0;if(!j){t=0;return t|0}k=(s|0)==0;if(f){e=j;a:while(1){l=c[e+4>>2]|0;f=(l|0)==(r|0);if(!(f|(l&i|0)==(q|0))){e=0;l=45;break}do if(f?(m=e+8|0,n=a[m+11>>0]|0,o=n<<24>>24<0,n=n&255,((o?c[e+12>>2]|0:n)|0)==(s|0)):0){f=c[m>>2]|0;g=o?f:m;f=f&255;if(o){if(k){l=45;break a}if(!(Tz(g,t,s)|0)){l=45;break a}else break}if(k){l=45;break a}if((a[t>>0]|0)==f<<24>>24){f=n;g=m;h=t;do{f=f+-1|0;g=g+1|0;if(!f){l=45;break a}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);e=c[e>>2]|0;if(!e){e=0;l=45;break}}if((l|0)==45)return e|0}b:while(1){e=c[j+4>>2]|0;do if((e|0)==(r|0)){e=j+8|0;g=a[e+11>>0]|0;i=g<<24>>24<0;g=g&255;if(((i?c[j+12>>2]|0:g)|0)==(s|0)){f=c[e>>2]|0;h=i?f:e;f=f&255;if(i){if(k){e=j;l=45;break b}if(!(Tz(h,t,s)|0)){e=j;l=45;break b}else break}if(k){e=j;l=45;break b}if((a[t>>0]|0)==f<<24>>24){f=t;do{g=g+-1|0;e=e+1|0;if(!g){e=j;l=45;break b}f=f+1|0}while((a[e>>0]|0)==(a[f>>0]|0))}}}else{if(e>>>0>=p>>>0)e=(e>>>0)%(p>>>0)|0;if((e|0)!=(q|0)){e=0;l=45;break b}}while(0);j=c[j>>2]|0;if(!j){e=0;l=45;break}}if((l|0)==45)return e|0;return 0}function Xj(b){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,s=0;s=aa;aa=aa+64|0;m=s+48|0;p=s+24|0;j=s+12|0;o=s;c[j>>2]=0;r=j+4|0;c[r>>2]=0;c[j+8>>2]=0;q=b+52|0;l=b+56|0;f=(c[l>>2]|0)-(c[q>>2]|0)>>2;n=b+88|0;Cl(f+(Ok(c[b+76>>2]|0,c[b+80>>2]|0)|0)|0,n,j);f=c[r>>2]|0;j=c[j>>2]|0;k=j;b=f;if((f|0)!=(j|0)){i=p+20|0;g=o+11|0;d=k;h=0;do{e=a[d+(h*12|0)+11>>0]|0;if(e<<24>>24<0)d=c[d+(h*12|0)+4>>2]|0;else d=e&255;if(!d){d=h>>>0<(c[l>>2]|0)-(c[q>>2]|0)>>2>>>0?299971:299974;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;e=0;while(1){Vj(d,h,e,o);if(!(Wj(n,o)|0))break;else e=e+1|0}c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[i>>2]=h;Og(m,n,o,p);Gg(n,c[m>>2]|0);lB(k+(h*12|0)|0,o)|0;if((a[g>>0]|0)<0)$A(c[o>>2]|0);d=k}else d=j;h=h+1|0}while(h>>>0<((f-j|0)/12|0)>>>0)}if(!j){aa=s;return}if((b|0)!=(k|0))do{b=b+-12|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0)}while((b|0)!=(k|0));c[r>>2]=k;$A(j);aa=s;return}function Yj(a){a=a|0;var b=0;c[a>>2]=289128;b=c[a+36>>2]|0;if(b|0){c[a+40>>2]=b;$A(b)}b=c[a+24>>2]|0;if(b|0){c[a+28>>2]=b;$A(b)}b=c[a+12>>2]|0;if(!b)return;c[a+16>>2]=b;$A(b);return}function Zj(a){a=a|0;var b=0;c[a>>2]=289128;b=c[a+36>>2]|0;if(b|0){c[a+40>>2]=b;$A(b)}b=c[a+24>>2]|0;if(b|0){c[a+28>>2]=b;$A(b)}b=c[a+12>>2]|0;if(!b){$A(a);return}c[a+16>>2]=b;$A(b);$A(a);return}function _j(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;f=g;e=b+48|0;b=c[e>>2]|0;c[e>>2]=b+1;e=d+36|0;h=a[e+11>>0]|0;if((h<<24>>24<0?c[d+40>>2]|0:h&255)|0){aa=g;return 0}qB(e,299983)|0;if((b|0)==-1){aa=g;return 0}BB(f,b);d=a[f+11>>0]|0;h=d<<24>>24<0;b=c[f>>2]|0;uB(e,h?b:f,h?c[f+4>>2]|0:d&255)|0;if(h)$A(b);aa=g;return 0}function $j(a,b){a=a|0;b=b|0;return 0}function ak(a,b){a=a|0;b=b|0;return 0}function bk(a,b){a=a|0;b=b|0;return 0}function ck(a,b){a=a|0;b=b|0;return 0}function dk(a,b){a=a|0;b=b|0;return 0}function ek(a,b){a=a|0;b=b|0;return 0}function fk(a,b){a=a|0;b=b|0;return 0}function gk(a,b){a=a|0;b=b|0;return 0}function hk(a,b){a=a|0;b=b|0;return 0}function ik(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;f=g;e=b+48|0;b=c[e>>2]|0;c[e>>2]=b+1;e=d+36|0;h=a[e+11>>0]|0;if((h<<24>>24<0?c[d+40>>2]|0:h&255)|0){aa=g;return 0}qB(e,299980)|0;if((b|0)==-1){aa=g;return 0}BB(f,b);d=a[f+11>>0]|0;h=d<<24>>24<0;b=c[f>>2]|0;uB(e,h?b:f,h?c[f+4>>2]|0:d&255)|0;if(h)$A(b);aa=g;return 0}function jk(a,b){a=a|0;b=b|0;return 0}function kk(a,b){a=a|0;b=b|0;return 0}function lk(a,b){a=a|0;b=b|0;return 0}function mk(a,b){a=a|0;b=b|0;return 0}function nk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;f=g;e=b+48|0;b=c[e>>2]|0;c[e>>2]=b+1;e=d+36|0;h=a[e+11>>0]|0;if((h<<24>>24<0?c[d+40>>2]|0:h&255)|0){aa=g;return 0}qB(e,299977)|0;if((b|0)==-1){aa=g;return 0}BB(f,b);d=a[f+11>>0]|0;h=d<<24>>24<0;b=c[f>>2]|0;uB(e,h?b:f,h?c[f+4>>2]|0:d&255)|0;if(h)$A(b);aa=g;return 0}function ok(a,b){a=a|0;b=b|0;return 0}function pk(a,b){a=a|0;b=b|0;return 0}function qk(a,b){a=a|0;b=b|0;return 0}function rk(a,b){a=a|0;b=b|0;return 0}function sk(a,b){a=a|0;b=b|0;return 0}function tk(a,b){a=a|0;b=b|0;return 0}function uk(a,b){a=a|0;b=b|0;return 0}function vk(a,b){a=a|0;b=b|0;return 0}function wk(a,b){a=a|0;b=b|0;return 0}function xk(a,b){a=a|0;b=b|0;return 0}function yk(a,b){a=a|0;b=b|0;return 0}function zk(a,b){a=a|0;b=b|0;return 0}function Ak(a,b){a=a|0;b=b|0;return 0}function Bk(a,b){a=a|0;b=b|0;return 0}function Ck(a){a=a|0;return c[160+(a<<2)>>2]|0}function Dk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=aa;aa=aa+16|0;f=g;Wn(f,d,e);d=Lg(b+256|0,f)|0;if(!d)e=-1;else e=c[d+40>>2]|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);d=c[b+112>>2]|0;if(e>>>0>=(c[b+116>>2]|0)-d>>2>>>0){b=0;aa=g;return b|0}b=c[d+(e<<2)>>2]|0;aa=g;return b|0}function Ek(a,b){a=a|0;b=b|0;return iy(a+216|0,b)|0}function Fk(a,b){a=a|0;b=b|0;return iy(a+236|0,b)|0}function Gk(a,b){a=a|0;b=b|0;return iy(a+296|0,b)|0}function Hk(a,b){a=a|0;b=b|0;return iy(a+316|0,b)|0}function Ik(a,b){a=a|0;b=b|0;return iy(a+276|0,b)|0}function Jk(a,b){a=a|0;b=b|0;return iy(a+196|0,b)|0}function Kk(a,b){a=a|0;b=b|0;return iy(a+336|0,b)|0}function Lk(a,b){a=a|0;b=b|0;return iy(a+356|0,b)|0}function Mk(a,b,d){a=a|0;b=b|0;d=d|0;switch(b|0){case 0:{d=iy(a+216|0,d)|0;b=a+48|0;break}case 3:{d=iy(a+236|0,d)|0;b=a+60|0;break}case 2:{d=iy(a+316|0,d)|0;b=a+56|0;break}case 1:{d=iy(a+296|0,d)|0;b=a+52|0;break}case 4:{d=iy(a+196|0,d)|0;b=a+44|0;break}default:{a=0;return a|0}}a=d>>>0<(c[b>>2]|0)>>>0;return a|0}function Nk(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;r=aa;aa=aa+16|0;q=r+4|0;p=r;d=c[a>>2]|0;o=a+4|0;c[o>>2]=d;f=c[b>>2]|0;m=b+4|0;n=c[m>>2]|0;i=n;g=f;if((f|0)==(n|0)){aa=r;return}e=d;d=c[f>>2]|0;c[q>>2]=d;c[p>>2]=1;n=a+8|0;if(i-g>>2>>>0>1){e=i;j=f;h=d;f=1;k=g;g=i;l=1;while(1){i=j+(l<<2)|0;if((c[i>>2]|0)==(h|0)){j=e;i=k;f=f+1|0}else{d=c[o>>2]|0;if(d>>>0<(c[n>>2]|0)>>>0){c[d>>2]=h;c[d+4>>2]=f;c[o>>2]=d+8;f=k;d=i}else{wi(a,q,p);d=c[b>>2]|0;e=c[m>>2]|0;f=d;d=d+(l<<2)|0}h=c[d>>2]|0;c[q>>2]=h;j=e;g=e;i=f;d=h;f=1}c[p>>2]=f;l=l+1|0;if(l>>>0>=g-i>>2>>>0)break;else{e=j;j=i;k=i}}e=c[o>>2]|0}else f=1;if(e>>>0<(c[n>>2]|0)>>>0){c[e>>2]=d;c[e+4>>2]=f;c[o>>2]=e+8}else wi(a,q,p);aa=r;return}function Ok(a,b){a=a|0;b=b|0;var d=0;if((a|0)==(b|0)){b=0;return b|0}d=a;a=0;do{a=(c[d+4>>2]|0)+a|0;d=d+8|0}while((d|0)!=(b|0));return a|0}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((a|0)==(b|0)){g=0;return g|0}e=0;while(1){e=(c[a+4>>2]|0)+e|0;f=a+8|0;if(e>>>0>d>>>0)break;if((f|0)==(b|0)){a=0;g=6;break}else a=f}if((g|0)==6)return a|0;g=c[a>>2]|0;return g|0}function Qk(a,b){a=a|0;b=b|0;if(!(c[b+20>>2]|0)){b=c[b+24>>2]|0;return b|0}else{b=iy(a+88|0,b)|0;return b|0}return 0}function Rk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+216|0,b)|0;b=c[a+76>>2]|0;if(d>>>0>=(c[a+80>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Sk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+216|0,b)|0;b=c[a+76>>2]|0;if(d>>>0>=(c[a+80>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Tk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+236|0,b)|0;b=c[a+88>>2]|0;if(d>>>0>=(c[a+92>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Uk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+236|0,b)|0;b=c[a+88>>2]|0;if(d>>>0>=(c[a+92>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Vk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+296|0,b)|0;b=c[a+136>>2]|0;if(d>>>0>=(c[a+140>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Wk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+316|0,b)|0;b=c[a+160>>2]|0;if(d>>>0>=(c[a+164>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Xk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+196|0,b)|0;b=c[a+64>>2]|0;if(d>>>0>=(c[a+68>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Yk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+336|0,b)|0;b=c[a+172>>2]|0;if(d>>>0>=(c[a+176>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Zk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+356|0,b)|0;b=c[a+148>>2]|0;if(d>>>0>=(c[a+152>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function _k(a,b){a=a|0;b=b|0;var d=0;d=iy(a+276|0,b)|0;b=c[a+124>>2]|0;if(d>>>0>=(c[a+128>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function $k(a,b){a=a|0;b=b|0;var d=0;d=iy(a+276|0,b)|0;b=c[a+124>>2]|0;if(d>>>0>=(c[a+128>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function al(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;d=c[a+128>>2]|0;a=c[a+124>>2]|0;j=a;if((d|0)==(a|0)){l=-1;return l|0}k=c[b>>2]|0;l=(c[b+4>>2]|0)-k|0;h=c[b+12>>2]|0;i=(c[b+16>>2]|0)-h|0;g=d-a>>2;a=0;a:while(1){f=c[j+(a<<2)>>2]|0;m=c[f+16>>2]|0;d=c[f+12>>2]|0;b=d;e=m;b:do if((m-d|0)==(l|0)){if((b|0)!=(e|0)){d=k;while(1){if((c[b>>2]|0)!=(c[d>>2]|0))break b;b=b+4|0;if((b|0)==(e|0))break;else d=d+4|0}}d=c[f+28>>2]|0;m=c[f+24>>2]|0;b=m;e=d;if((d-m|0)==(i|0)){if((b|0)==(e|0)){b=14;break a}d=h;while(1){if((c[b>>2]|0)!=(c[d>>2]|0))break b;b=b+4|0;if((b|0)==(e|0)){b=14;break a}else d=d+4|0}}}while(0);a=a+1|0;if(a>>>0>=g>>>0){a=-1;b=14;break}}if((b|0)==14)return a|0;return 0}function bl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(a[d>>0]|0){m=iy(b+276|0,d+4|0)|0;return m|0}e=c[b+128>>2]|0;b=c[b+124>>2]|0;k=b;if((e|0)==(b|0)){m=-1;return m|0}l=c[d+40>>2]|0;m=(c[d+44>>2]|0)-l|0;i=c[d+52>>2]|0;j=(c[d+56>>2]|0)-i|0;h=e-b>>2;b=0;a:while(1){f=c[k+(b<<2)>>2]|0;n=c[f+16>>2]|0;e=c[f+12>>2]|0;d=e;g=n;b:do if((n-e|0)==(m|0)){if((d|0)!=(g|0)){e=l;while(1){if((c[d>>2]|0)!=(c[e>>2]|0))break b;d=d+4|0;if((d|0)==(g|0))break;else e=e+4|0}}g=c[f+28>>2]|0;n=c[f+24>>2]|0;d=n;f=g;if((g-n|0)==(j|0)){if((d|0)==(f|0)){d=16;break a}e=i;while(1){if((c[d>>2]|0)!=(c[e>>2]|0))break b;d=d+4|0;if((d|0)==(f|0)){d=16;break a}else e=e+4|0}}}while(0);b=b+1|0;if(b>>>0>=h>>>0){b=-1;d=16;break}}if((d|0)==16)return b|0;return 0}function cl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+176|0;else{k=f+12|0;f=b+176|0;e=(c[f>>2]|0)-(c[b+172>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+336|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+180>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else dl(b+172|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function dl(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function el(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+152|0;else{k=f+12|0;f=b+152|0;e=(c[f>>2]|0)-(c[b+148>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+356|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+156>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else fl(b+148|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function fl(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function gl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+68|0;else{k=f+12|0;f=b+68|0;e=(c[f>>2]|0)-(c[b+64>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+196|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+72>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else hl(b+64|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function hl(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function il(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;i=aa;aa=aa+48|0;f=i+24|0;j=i;k=c[b>>2]|0;g=k+36|0;k=k+12|0;h=a+112|0;e=a+116|0;d=(c[e>>2]|0)-(c[h>>2]|0)>>2;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=d;d=a+256|0;Og(f,d,g,j);Gg(d,c[f>>2]|0);c[f>>2]=g;d=c[e>>2]|0;if(d>>>0<(c[a+120>>2]|0)>>>0){c[d>>2]=g;c[e>>2]=(c[e>>2]|0)+4}else jl(h,f);f=c[b>>2]|0;c[b>>2]=0;e=a+36|0;d=c[e>>2]|0;if(!d){k=a+32|0;c[k>>2]=f;c[e>>2]=f;k=a+40|0;j=c[k>>2]|0;j=j+1|0;c[k>>2]=j;aa=i;return}else{c[f+8>>2]=d;k=d+4|0;c[k>>2]=f;c[e>>2]=f;k=a+40|0;j=c[k>>2]|0;j=j+1|0;c[k>>2]=j;aa=i;return}}function jl(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function kl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+80|0;else{k=f+12|0;f=b+80|0;e=(c[f>>2]|0)-(c[b+76>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+216|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+84>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else ll(b+76|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function ll(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function ml(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+128|0;else{k=f+12|0;f=b+128|0;e=(c[f>>2]|0)-(c[b+124>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+276|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+132>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else nl(b+124|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function nl(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function ol(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+92|0;else{k=f+12|0;f=b+92|0;e=(c[f>>2]|0)-(c[b+88>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+236|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+96>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else pl(b+88|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function pl(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function ql(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+48|0;k=n+28|0;m=n+24|0;l=n;e=c[(c[d>>2]|0)+36>>2]|0;c[m>>2]=e;switch(c[e+28>>2]|0){case 0:{i=e+32|0;g=b+76|0;f=b+80|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+84>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else ll(g,k);g=b+216|0;f=i;e=b+48|0;j=22;break}case 1:{i=e+32|0;g=b+136|0;f=b+140|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+144>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else rl(g,k);g=b+296|0;f=i;e=b+52|0;j=22;break}case 2:{i=e+32|0;g=b+160|0;f=b+164|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+168>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else sl(g,k);g=b+316|0;f=i;e=b+56|0;j=22;break}case 3:{i=e+32|0;g=b+88|0;f=b+92|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+96>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else pl(g,k);g=b+236|0;f=i;e=b+60|0;j=22;break}case 4:{i=e+32|0;g=b+64|0;f=b+68|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+72>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else hl(g,k);g=b+196|0;f=i;e=b+44|0;j=22;break}default:{i=0;g=-1;f=0}}if((j|0)==22){c[e>>2]=(c[e>>2]|0)+1;i=g;g=h>>2}e=a[f+11>>0]|0;if(e<<24>>24<0)e=c[f+4>>2]|0;else e=e&255;if(e|0){j=(c[d>>2]|0)+12|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];c[l+16>>2]=c[j+16>>2];c[l+20>>2]=g;tl(k,i,f,l);Gg(i,c[k>>2]|0)}f=b+104|0;e=c[f>>2]|0;if((e|0)==(c[b+108>>2]|0))ul(b+100|0,m);else{c[e>>2]=c[m>>2];c[f>>2]=(c[f>>2]|0)+4}g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){d=b+32|0;c[d>>2]=g;c[f>>2]=g;b=b+40|0;d=c[b>>2]|0;d=d+1|0;c[b>>2]=d;aa=n;return}else{c[g+8>>2]=e;d=e+4|0;c[d>>2]=g;c[f>>2]=g;b=b+40|0;d=c[b>>2]|0;d=d+1|0;c[b>>2]=d;aa=n;return}}function rl(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function sl(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function tl(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;i=_A(44)|0;c[b>>2]=i;c[b+4>>2]=e+8;e=i+8|0;cB(e,f);h=i+20|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];a[b+8>>0]=1;h=a[i+19>>0]|0;b=h<<24>>24<0;e=b?c[e>>2]|0:e;h=b?c[i+12>>2]|0:h&255;if(h>>>0>3){g=e;f=h;b=h;while(1){k=v(d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24,1540483477)|0;f=(v(k>>>24^k,1540483477)|0)^(v(f,1540483477)|0);b=b+-4|0;if(b>>>0<=3)break;else g=g+4|0}k=h+-4|0;g=k&-4;e=e+(g+4)|0;g=k-g|0}else{f=h;g=h}switch(g|0){case 3:{f=(d[e+2>>0]|0)<<16^f;j=7;break}case 2:{j=7;break}case 1:break;default:{j=f;k=j>>>13;j=k^j;j=v(j,1540483477)|0;k=j>>>15;j=k^j;k=i+4|0;c[k>>2]=j;c[i>>2]=0;return}}if((j|0)==7)f=(d[e+1>>0]|0)<<8^f;j=v(f^(d[e>>0]|0),1540483477)|0;k=j>>>13;j=k^j;j=v(j,1540483477)|0;k=j>>>15;j=k^j;k=i+4|0;c[k>>2]=j;c[i>>2]=0;return}function ul(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function vl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+40|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+44>>2]|0;else e=e&255;if(!e)f=b+164|0;else{k=f+12|0;f=b+164|0;e=(c[f>>2]|0)-(c[b+160>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+316|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+168>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else sl(b+160|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function wl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;f=h;g=(c[b>>2]|0)+36|0;c[f>>2]=g;e=a+188|0;d=c[e>>2]|0;if(d>>>0<(c[a+192>>2]|0)>>>0){c[d>>2]=g;c[e>>2]=(c[e>>2]|0)+4}else xl(a+184|0,f);f=c[b>>2]|0;c[b>>2]=0;e=a+36|0;d=c[e>>2]|0;if(!d){b=a+32|0;c[b>>2]=f;c[e>>2]=f;a=a+40|0;b=c[a>>2]|0;b=b+1|0;c[a>>2]=b;aa=h;return}else{c[f+8>>2]=d;b=d+4|0;c[b>>2]=f;c[e>>2]=f;a=a+40|0;b=c[a>>2]|0;b=b+1|0;c[a>>2]=b;aa=h;return}}function xl(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function yl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+40|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+44>>2]|0;else e=e&255;if(!e)f=b+140|0;else{k=f+12|0;f=b+140|0;e=(c[f>>2]|0)-(c[b+136>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+296|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+144>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else rl(b+136|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function zl(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;q=aa;aa=aa+80|0;o=q+64|0;n=q+40|0;e=q+32|0;l=q+28|0;m=q+24|0;f=q+20|0;g=q+16|0;h=q+12|0;i=q+8|0;j=q+4|0;k=q;p=c[b>>2]|0;d=p;do switch(c[p+32>>2]|0){case 0:{c[b>>2]=0;c[e>>2]=d;kl(a,e);d=c[e>>2]|0;c[e>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 1:{c[b>>2]=0;c[l>>2]=d;ol(a,l);d=c[l>>2]|0;c[l>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 2:{c[b>>2]=0;c[m>>2]=d;ql(a,m);d=c[m>>2]|0;c[m>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 3:{c[b>>2]=0;e=p+36|0;m=p+12|0;f=a+112|0;b=a+116|0;d=(c[b>>2]|0)-(c[f>>2]|0)>>2;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];c[n+20>>2]=d;d=a+256|0;Og(o,d,e,n);Gg(d,c[o>>2]|0);c[o>>2]=e;d=c[b>>2]|0;if(d>>>0<(c[a+120>>2]|0)>>>0){c[d>>2]=e;c[b>>2]=(c[b>>2]|0)+4}else jl(f,o);b=a+36|0;d=c[b>>2]|0;if(!d)d=a+32|0;else{c[p+8>>2]=d;d=d+4|0}c[d>>2]=p;c[b>>2]=p;a=a+40|0;c[a>>2]=(c[a>>2]|0)+1;aa=q;return}case 4:{c[b>>2]=0;c[f>>2]=d;ml(a,f);d=c[f>>2]|0;c[f>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 5:{c[b>>2]=0;c[g>>2]=d;yl(a,g);d=c[g>>2]|0;c[g>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 6:{c[b>>2]=0;c[h>>2]=d;el(a,h);d=c[h>>2]|0;c[h>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 7:{c[b>>2]=0;c[i>>2]=d;vl(a,i);d=c[i>>2]|0;c[i>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 8:{c[b>>2]=0;c[j>>2]=d;cl(a,j);d=c[j>>2]|0;c[j>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 9:{c[b>>2]=0;e=p+36|0;c[o>>2]=e;b=a+188|0;d=c[b>>2]|0;if(d>>>0<(c[a+192>>2]|0)>>>0){c[d>>2]=e;c[b>>2]=(c[b>>2]|0)+4}else xl(a+184|0,o);b=a+36|0;d=c[b>>2]|0;if(!d)d=a+32|0;else{c[p+8>>2]=d;d=d+4|0}c[d>>2]=p;c[b>>2]=p;a=a+40|0;c[a>>2]=(c[a>>2]|0)+1;aa=q;return}case 10:{c[b>>2]=0;c[k>>2]=d;gl(a,k);d=c[k>>2]|0;c[k>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}default:{aa=q;return}}while(0)}function Al(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;j=aa;aa=aa+16|0;g=j;i=b+8|0;d=c[i>>2]|0;if(!d){aa=j;return}h=b+4|0;do{e=c[b>>2]|0;if((e|0)==(c[h>>2]|0)){c[h>>2]=0;c[b>>2]=0;f=e+4|0}else{f=e+4|0;k=c[f>>2]|0;c[b>>2]=k;c[k+8>>2]=0}c[e+8>>2]=0;c[f>>2]=0;c[i>>2]=d+-1;c[g>>2]=e;zl(a,g);d=c[g>>2]|0;c[g>>2]=0;if(d|0)ma[c[(c[d>>2]|0)+4>>2]&255](d);d=c[i>>2]|0}while((d|0)!=0);aa=j;return}function Bl(a,b){a=a|0;b=b|0;var d=0;d=iy(a+12|0,b)|0;b=c[a>>2]|0;if(d>>>0>=(c[a+4>>2]|0)-b>>2>>>0){a=0;return a|0}a=(c[b+(d<<2)>>2]|0)+8|0;return a|0}function Cl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=c[e>>2]|0;i=e+4|0;g=c[i>>2]|0;h=f;if((g|0)==(f|0))g=h;else{do{g=g+-12|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0)}while((g|0)!=(f|0));g=c[e>>2]|0}c[i>>2]=f;h=(h-g|0)/12|0;if(h>>>0>=b>>>0){if(h>>>0>b>>>0){g=g+(b*12|0)|0;if((g|0)!=(f|0))do{f=f+-12|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(g|0));c[i>>2]=g}}else Dl(e,b-h|0);f=c[d+8>>2]|0;if(!f)return;do{d=f;lB((c[e>>2]|0)+((c[d+40>>2]|0)*12|0)|0,d+8|0)|0;f=c[f>>2]|0}while((f|0)!=0);return}function Dl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=b+8|0;g=c[m>>2]|0;n=b+4|0;f=c[n>>2]|0;k=f;if(((g-f|0)/12|0)>>>0>=d>>>0){e=d;do{c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;f=(c[n>>2]|0)+12|0;c[n>>2]=f;e=e+-1|0}while((e|0)!=0);return}e=c[b>>2]|0;h=(f-e|0)/12|0;i=h+d|0;l=e;if(i>>>0>357913941)HB();g=(g-e|0)/12|0;f=g<<1;f=g>>>0<178956970?(f>>>0<i>>>0?i:f):357913941;do if(f)if(f>>>0>357913941)U();else{j=_A(f*12|0)|0;break}else j=0;while(0);h=j+(h*12|0)|0;uC(h|0,0,d*12|0)|0;d=j+(f*12|0)|0;i=j+(i*12|0)|0;if((k|0)!=(l|0)){e=k;do{h=h+-12|0;e=e+-12|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0}while((e|0)!=(l|0));e=c[b>>2]|0;f=c[n>>2]|0;g=e;c[b>>2]=h;c[n>>2]=i;c[m>>2]=d;if((f|0)!=(g|0))do{f=f+-12|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(g|0))}else{c[b>>2]=h;c[n>>2]=i;c[m>>2]=d}if(!e)return;$A(e);return}function El(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=0;c[a+24>>2]=b;return}function Fl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=1;Vn(a+24|0,b,d);return}function Gl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+16|0;g=i;h=b+20|0;e=b+24|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[e>>2]=-1;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];f=d+24|0;if(!(c[d+20>>2]|0)){g=c[f>>2]|0;c[h>>2]=0;c[e>>2]=g;aa=i;return}e=a[f+11>>0]|0;j=e<<24>>24<0;Wn(g,j?c[f>>2]|0:f,j?c[d+28>>2]|0:e&255);e=b+24|0;if((c[h>>2]|0)==1?(a[e+11>>0]|0)<0:0)$A(c[e>>2]|0);c[h>>2]=1;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];aa=i;return}function Hl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;g=h;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];e=d+24|0;if(!(c[d+20>>2]|0)){e=c[e>>2]|0;d=b+20|0;if((c[d>>2]|0)==1?(f=b+24|0,(a[f+11>>0]|0)<0):0)$A(c[f>>2]|0);c[d>>2]=0;c[b+24>>2]=e;aa=h;return b|0}else{f=a[e+11>>0]|0;i=f<<24>>24<0;Wn(g,i?c[e>>2]|0:e,i?c[d+28>>2]|0:f&255);d=b+20|0;e=b+24|0;if((c[d>>2]|0)==1?(a[e+11>>0]|0)<0:0)$A(c[e>>2]|0);c[d>>2]=1;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];aa=h;return b|0}return 0}function Il(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+16|0;g=i;h=b+20|0;e=b+24|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[e>>2]=-1;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];f=d+24|0;if(!(c[d+20>>2]|0)){g=c[f>>2]|0;c[h>>2]=0;c[e>>2]=g;aa=i;return}e=a[f+11>>0]|0;j=e<<24>>24<0;Wn(g,j?c[f>>2]|0:f,j?c[d+28>>2]|0:e&255);e=b+24|0;if((c[h>>2]|0)==1?(a[e+11>>0]|0)<0:0)$A(c[e>>2]|0);c[h>>2]=1;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];aa=i;return}function Jl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;g=h;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];e=d+24|0;if(!(c[d+20>>2]|0)){e=c[e>>2]|0;d=b+20|0;if((c[d>>2]|0)==1?(f=b+24|0,(a[f+11>>0]|0)<0):0)$A(c[f>>2]|0);c[d>>2]=0;c[b+24>>2]=e;aa=h;return b|0}else{f=a[e+11>>0]|0;i=f<<24>>24<0;Wn(g,i?c[e>>2]|0:e,i?c[d+28>>2]|0:f&255);d=b+20|0;e=b+24|0;if((c[d>>2]|0)==1?(a[e+11>>0]|0)<0:0)$A(c[e>>2]|0);c[d>>2]=1;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];aa=h;return b|0}return 0}function Kl(b,d){b=b|0;d=d|0;var e=0,f=0;f=b+20|0;if((c[f>>2]|0)==1?(e=b+24|0,(a[e+11>>0]|0)<0):0)$A(c[e>>2]|0);c[f>>2]=0;c[b+24>>2]=d;return}function Ll(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=aa;aa=aa+16|0;f=g;Wn(f,d,e);e=b+20|0;d=b+24|0;if((c[e>>2]|0)==1?(a[d+11>>0]|0)<0:0)$A(c[d>>2]|0);c[e>>2]=1;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];aa=g;return}function Ml(b){b=b|0;if((c[b+20>>2]|0)!=1)return;b=b+24|0;if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Nl(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=-1;c[a+24>>2]=b;return}function Ol(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=-2;a=a+24|0;c[a>>2]=b;c[a+4>>2]=d;return}function Pl(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=-3;c[a+24>>2]=b;return}function Ql(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=-4;a=a+24|0;c[a>>2]=b;c[a+4>>2]=d;return}function Rl(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=-5;a=a+24|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Sl(a){a=a|0;var b=0;b=0;do{a=a>>>7;b=b+1|0}while((a|0)!=0);return b|0}function Tl(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=aa;aa=aa+16|0;g=f;a[g>>0]=d|128;a[g+1>>0]=d>>>7|128;a[g+2>>0]=d>>>14|128;a[g+3>>0]=d>>>21|128;a[g+4>>0]=d>>>28;Nn(b,c,g,5,e);aa=f;return}function Ul(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;e=c>>>7;if(!e){g=i;f=1;e=c}else{h=0;while(1){a[i+h>>0]=c|128;c=h+1|0;f=e>>>7;if(!f)break;else{g=e;h=c;e=f;c=g}}g=i+c|0;f=h+2|0}a[g>>0]=e&127;Qn(b,i,f,d,0);aa=j;return}function Vl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=aa;aa=aa+16|0;f=e;a[f>>0]=c|128;a[f+1>>0]=c>>>7|128;a[f+2>>0]=c>>>14|128;a[f+3>>0]=c>>>21|128;a[f+4>>0]=c>>>28;Qn(b,f,5,d,0);aa=e;return}function Wl(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;f=d>>>7;if(!f){h=j;g=1;f=d}else{i=0;while(1){a[j+i>>0]=d|128;d=i+1|0;g=f>>>7;if(!g)break;else{h=f;i=d;f=g;d=h}}h=j+d|0;g=i+2|0}a[h>>0]=f&127;Nn(b,c,j,g,e);aa=k;return}function Xl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;e=d>>>7;if(!e){g=i;f=1;e=d}else{h=0;while(1){a[i+h>>0]=d|128;d=h+1|0;f=e>>>7;if(!f)break;else{g=e;h=d;e=f;d=g}}g=i+d|0;f=h+2|0}a[g>>0]=e&127;if((c-b|0)>>>0<f>>>0){c=0;aa=j;return c|0}sC(b|0,i|0,f|0)|0;c=f;aa=j;return c|0}function Yl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;e=c>>7;if((c|0)<0)if((e|0)!=-1|(c&64|0)==0){f=0;while(1){a[h+f>>0]=c|128;f=f+1|0;c=e>>7;if(!((c|0)!=-1|(e&64|0)==0))break;else{g=e;e=c;c=g}}g=h+f|0;c=e}else{g=h;f=0}else if(!(e|c&64)){g=h;f=0}else{f=0;while(1){a[h+f>>0]=c|128;f=f+1|0;c=e>>7;if(!(c|e&64))break;else{g=e;e=c;c=g}}g=h+f|0;c=e}a[g>>0]=c&127;Qn(b,h,f+1|0,d,0);aa=i;return}function Zl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=c&255;c=nC(c|0,d|0,7)|0;e=z()|0;if((d|0)<0)if((c|0)!=-1|(e|0)!=-1|(f&64)==0){d=c;c=0;do{a[g+c>>0]=f|-128;c=c+1|0;f=d&255;d=nC(d|0,e|0,7)|0;e=z()|0}while((d|0)!=-1|(e|0)!=-1|(f&64)==0);e=f;d=g+c|0}else{e=f;d=g;c=0}else if((c|0)==0&(e|0)==0&(f&64)==0){e=f;d=g;c=0}else{d=c;c=0;do{a[g+c>>0]=f|-128;c=c+1|0;f=d&255;d=nC(d|0,e|0,7)|0;e=z()|0}while(!((d|0)==0&(e|0)==0&(f&64)==0));e=f;d=g+c|0}a[d>>0]=e&127;Qn(b,g,c+1|0,298513,0);aa=h;return}function _l(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(b>>>0<e>>>0?(g=d[b>>0]|0,(g&128|0)==0):0){g=g&127;h=1}else i=4;do if((i|0)==4){j=b+1|0;if(j>>>0<e>>>0?(h=d[j>>0]|0,(h&128|0)==0):0){g=h<<7&16256|a[b>>0]&127;h=2;break}i=b+2|0;if(i>>>0<e>>>0?(k=d[i>>0]|0,(k&128|0)==0):0){g=k<<14&2080768|a[b>>0]&127|(a[j>>0]&127)<<7;h=3;break}h=b+3|0;if(h>>>0<e>>>0?(l=d[h>>0]|0,(l&128|0)==0):0){g=(a[i>>0]&127)<<14|l<<21&266338304|a[b>>0]&127|(a[j>>0]&127)<<7;h=4;break}g=b+4|0;if(g>>>0<e>>>0?(m=d[g>>0]|0,(m&128|0)==0):0)if(!(m&240)){g=(a[h>>0]&127)<<21|m<<28|(a[i>>0]&127)<<14|a[b>>0]&127|(a[j>>0]&127)<<7;h=5;break}else{f=0;return f|0}else{g=0;h=0}}while(0);c[f>>2]=g;f=h;return f|0}function $l(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(b>>>0<e>>>0?(g=d[b>>0]|0,(g&128|0)==0):0){c[f>>2]=g<<25>>25;b=1;return b|0}m=b+1|0;if(m>>>0<e>>>0?(h=d[m>>0]|0,(h&128|0)==0):0){c[f>>2]=(h<<7|a[b>>0]&127)<<18>>18;b=2;return b|0}l=b+2|0;if(l>>>0<e>>>0?(i=d[l>>0]|0,(i&128|0)==0):0){c[f>>2]=(i<<14|a[b>>0]&127|(a[m>>0]&127)<<7)<<11>>11;b=3;return b|0}k=b+3|0;if(k>>>0<e>>>0?(j=d[k>>0]|0,(j&128|0)==0):0){c[f>>2]=((a[l>>0]&127)<<14|j<<21|a[b>>0]&127|(a[m>>0]&127)<<7)<<4>>4;b=4;return b|0}g=b+4|0;if(g>>>0>=e>>>0){b=0;return b|0}h=d[g>>0]|0;if(h&128|0){b=0;return b|0}i=(h&8|0)!=0;g=h&240;if(i&(g|0)!=112){b=0;return b|0}if((g|0)!=0&(i^1)){b=0;return b|0}c[f>>2]=(a[k>>0]&127)<<21|h<<28|(a[l>>0]&127)<<14|a[b>>0]&127|(a[m>>0]&127)<<7;b=5;return b|0}function am(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,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if(b>>>0<d>>>0?(f=a[b>>0]|0,f<<24>>24>-1):0){r=pC(f&255|0,0,57)|0;r=nC(r|0,z()|0,57)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=1;return b|0}s=b+1|0;if(s>>>0<d>>>0?(g=a[s>>0]|0,g<<24>>24>-1):0){s=pC(g&255|0,0,7)|0;r=z()|0;r=pC(s|a[b>>0]&127|0,r|0,50)|0;r=nC(r|0,z()|0,50)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=2;return b|0}r=b+2|0;if(r>>>0<d>>>0?(h=a[r>>0]|0,h<<24>>24>-1):0){d=pC(h&255|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(d|a[b>>0]&127|s|0,q|r|0,43)|0;r=nC(r|0,z()|0,43)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=3;return b|0}q=b+3|0;if(q>>>0<d>>>0?(i=a[q>>0]|0,i<<24>>24>-1):0){p=pC(i&255|0,0,21)|0;q=z()|0;o=pC(a[r>>0]&127|0,0,14)|0;d=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(o|p|a[b>>0]&127|s|0,d|q|r|0,36)|0;r=nC(r|0,z()|0,36)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=4;return b|0}p=b+4|0;if(p>>>0<d>>>0?(j=a[p>>0]|0,j<<24>>24>-1):0){n=pC(j&255|0,0,28)|0;d=z()|0;m=pC(a[q>>0]&127|0,0,21)|0;p=z()|0;o=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(m|n|o|a[b>>0]&127|s|0,p|d|q|r|0,29)|0;r=nC(r|0,z()|0,29)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=5;return b|0}o=b+5|0;if(o>>>0<d>>>0?(k=a[o>>0]|0,k<<24>>24>-1):0){l=pC(k&255|0,0,35)|0;o=z()|0;k=pC(a[p>>0]&127|0,0,28)|0;p=z()|0;m=pC(a[q>>0]&127|0,0,21)|0;d=z()|0;n=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(k|l|m|n|a[b>>0]&127|s|0,p|o|d|q|r|0,22)|0;r=nC(r|0,z()|0,22)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=6;return b|0}k=b+6|0;if(k>>>0<d>>>0?(l=a[k>>0]|0,l<<24>>24>-1):0){j=pC(l&255|0,0,42)|0;n=z()|0;i=pC(a[o>>0]&127|0,0,35)|0;o=z()|0;k=pC(a[p>>0]&127|0,0,28)|0;p=z()|0;l=pC(a[q>>0]&127|0,0,21)|0;d=z()|0;m=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(i|j|k|l|m|a[b>>0]&127|s|0,o|n|p|d|q|r|0,15)|0;r=nC(r|0,z()|0,15)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=7;return b|0}j=b+7|0;if(j>>>0<d>>>0?(m=a[j>>0]|0,m<<24>>24>-1):0){h=pC(m&255|0,0,49)|0;n=z()|0;g=pC(a[k>>0]&127|0,0,42)|0;m=z()|0;i=pC(a[o>>0]&127|0,0,35)|0;o=z()|0;j=pC(a[p>>0]&127|0,0,28)|0;p=z()|0;k=pC(a[q>>0]&127|0,0,21)|0;d=z()|0;l=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(g|h|i|j|k|l|a[b>>0]&127|s|0,m|n|o|p|d|q|r|0,8)|0;r=nC(r|0,z()|0,8)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=8;return b|0}i=b+8|0;if(i>>>0<d>>>0?(n=a[i>>0]|0,n<<24>>24>-1):0){f=pC(n&127|0,0,56)|0;m=z()|0;t=pC(a[j>>0]&127|0,0,49)|0;l=z()|0;g=pC(a[k>>0]&127|0,0,42)|0;n=z()|0;h=pC(a[o>>0]&127|0,0,35)|0;o=z()|0;i=pC(a[p>>0]&127|0,0,28)|0;p=z()|0;j=pC(a[q>>0]&127|0,0,21)|0;d=z()|0;k=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(t|f|g|h|i|j|k|a[b>>0]&127|s|0,l|m|n|o|p|d|q|r|0,1)|0;r=nC(r|0,z()|0,1)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=9;return b|0}f=b+9|0;if(f>>>0>=d>>>0){t=0;return t|0}g=a[f>>0]|0;f=g&255;if(f&128|0){t=0;return t|0}h=(f&1|0)!=0;f=f&254;if(h&(f|0)!=126){t=0;return t|0}if((f|0)!=0&(h^1)){t=0;return t|0}v=pC(g&255|0,0,63)|0;l=z()|0;w=pC(a[i>>0]&127|0,0,56)|0;i=z()|0;u=pC(a[j>>0]&127|0,0,49)|0;m=z()|0;f=pC(a[k>>0]&127|0,0,42)|0;n=z()|0;g=pC(a[o>>0]&127|0,0,35)|0;o=z()|0;h=pC(a[p>>0]&127|0,0,28)|0;d=z()|0;j=pC(a[q>>0]&127|0,0,21)|0;q=z()|0;k=pC(a[r>>0]&127|0,0,14)|0;r=z()|0;p=pC(a[s>>0]&127|0,0,7)|0;s=z()|0;t=e;c[t>>2]=w|v|u|f|g|h|j|k|a[b>>0]&127|p;c[t+4>>2]=i|l|m|n|o|d|q|r|s;t=10;return t|0}function bm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=0;return}function cm(a,b){a=a|0;b=b|0;var d=0,e=0;d=_A(12)|0;e=c[b+4>>2]|0;c[d>>2]=c[b>>2];c[d+4>>2]=e;c[d+8>>2]=c[b+8>>2];c[a>>2]=d;return}function dm(a,b){a=a|0;b=b|0;c[b>>2]=a;return}function em(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+8|0;e=c[f>>2]|0;d=(c[a+4>>2]|0)-e|0;d=d>>>0<65536?d:65536;if(!d)return d|0;sC(b|0,(c[a>>2]|0)+e|0,d|0)|0;c[f>>2]=(c[f>>2]|0)+d;return d|0}function fm(a){a=a|0;if(!(c[a+4>>2]|0))return;c[a+8>>2]=0;return}function gm(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;l=c[d>>2]|0;n=c[d+4>>2]|0;m=c[b+4>>2]|0;l=m>>>0<l>>>0?m:l;n=(m>>>0<n>>>0?m:n)-l|0;if(!n)return 0;m=e+4|0;f=c[m>>2]|0;h=c[e>>2]|0;k=f-h|0;i=h;a:do if(n>>>0>k>>>0){d=n-k|0;j=e+8|0;g=c[j>>2]|0;if((g-f|0)>>>0>=d>>>0)while(1){a[f>>0]=0;f=(c[m>>2]|0)+1|0;c[m>>2]=f;d=d+-1|0;if(!d)break a}if((n|0)<0)HB();f=g-h|0;g=f<<1;g=f>>>0<1073741823?(g>>>0<n>>>0?n:g):2147483647;if(!g)f=0;else f=_A(g)|0;uC(f+k|0,0,d|0)|0;if((k|0)>0)sC(f|0,i|0,k|0)|0;c[e>>2]=f;c[m>>2]=f+n;c[j>>2]=f+g;if(h|0)$A(i)}else if(n>>>0<k>>>0)c[m>>2]=i+n;while(0);sC(c[e>>2]|0,(c[b>>2]|0)+l|0,n|0)|0;return 0}function hm(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+16|0;g=i+4|0;h=i;j=c[d>>2]|0;c[d>>2]=0;c[a>>2]=j;f=a+4|0;e=a+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;b[f+16>>1]=0;fm(j);c[g>>2]=0;c[h>>2]=0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=0;c[d+4>>2]=0;c[e>>2]=d+8;aa=i;return}else{im(f,g,h);aa=i;return}}function im(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,l=0,m=0,n=0;i=a+4|0;g=c[a>>2]|0;m=(c[i>>2]|0)-g|0;l=m>>3;e=l+1|0;if(e>>>0>536870911)HB();j=a+8|0;n=(c[j>>2]|0)-g|0;f=n>>2;f=n>>3>>>0<268435455?(f>>>0<e>>>0?e:f):536870911;do if(f)if(f>>>0>536870911)U();else{k=_A(f<<3)|0;h=k;break}else{h=0;k=0}while(0);e=k+(l<<3)|0;n=c[d>>2]|0;c[e>>2]=c[b>>2];c[k+(l<<3)+4>>2]=n;if((m|0)>0)sC(h|0,g|0,m|0)|0;c[a>>2]=k;c[i>>2]=e+8;c[j>>2]=k+(f<<3);if(!g)return;$A(g);return}function jm(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;m=aa;aa=aa+48|0;l=m+32|0;g=m+8|0;k=m+16|0;j=m;c[g>>2]=0;i=g+4|0;c[i>>2]=0;if((km(a,b,g)|0)==1){aa=m;return}b=g;h=c[b>>2]|0;b=c[b+4>>2]|0;if((b-h|0)>>>0>80){g=(e-d|0)>>>0>80?d:(e+d|0)/2|0;g=((g+-1|0)>>>0>40?g+-41|0:0)+h|0;b=b+-80|0;g=b>>>0<g>>>0?b:g;b=g+80|0;d=(c[i>>2]|0)!=(b|0);c[f+12>>2]=g-h;if((g|0)!=(h|0)){vB(f,330828)|0;h=g+3|0}}else{d=(c[i>>2]|0)!=(b|0);c[f+12>>2]=0}c[k>>2]=0;g=k+4|0;c[g>>2]=0;c[k+8>>2]=0;a=c[a>>2]|0;i=j;c[i>>2]=h;c[i+4>>2]=d?b+-3|0:b;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];if((gm(a,l,k)|0)!=1?(lm(f,c[k>>2]|0,c[g>>2]|0)|0,d):0)vB(f,330828)|0;b=c[k>>2]|0;if(b|0){c[g>>2]=b;$A(b)}aa=m;return}function km(b,e,f){b=b|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,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=aa;aa=aa+16|0;s=x+4|0;u=x;v=b+4|0;r=b+8|0;g=c[v>>2]|0;if((c[r>>2]|0)-g>>3>>>0>e>>>0){v=g+(e<<3)|0;b=c[v+4>>2]|0;w=f;c[w>>2]=c[v>>2];c[w+4>>2]=b;w=0;aa=x;return w|0}t=_A(65536)|0;m=t;uC(t|0,0,65536)|0;c[s>>2]=0;o=b+21|0;p=b+20|0;q=b+16|0;n=b+12|0;while(1){if(a[o>>0]|0){g=1;break}dm(c[(c[b>>2]|0)+8>>2]|0,s);l=em(c[b>>2]|0,t)|0;if(l>>>0<65536)a[o>>0]=1;k=t+l|0;if((l|0)>0){j=t;h=m;while(1){g=a[j>>0]|0;if(g<<24>>24==10){g=d[p>>0]|0;i=h-m+(c[s>>2]|0)-g|0;c[u>>2]=i;h=c[r>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[h>>2]=c[q>>2];c[h+4>>2]=i;c[r>>2]=h+8}else{mm(v,q,u);g=d[p>>0]|0}c[q>>2]=i+1+g;g=a[j>>0]|0}a[p>>0]=g<<24>>24==13&1;g=j+1|0;if(k>>>0>g>>>0){j=g;h=g}else break}}if(a[o>>0]|0){h=(c[s>>2]|0)+l|0;c[u>>2]=h;g=c[r>>2]|0;if(g>>>0<(c[n>>2]|0)>>>0){c[g>>2]=c[q>>2];c[g+4>>2]=h;c[r>>2]=g+8}else mm(v,q,u)}g=c[v>>2]|0;if((c[r>>2]|0)-g>>3>>>0>e>>>0){w=21;break}}if((w|0)==21){b=g+(e<<3)|0;w=c[b+4>>2]|0;g=f;c[g>>2]=c[b>>2];c[g+4>>2]=w;g=0}$A(t);w=g;aa=x;return w|0}function lm(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=aa;aa=aa+16|0;j=d;k=o;n=b+11|0;f=a[n>>0]|0;g=f<<24>>24<0;if(g){i=(c[b+8>>2]&2147483647)+-1|0;l=c[b+4>>2]|0}else{i=10;l=f&255}m=e-j|0;if(!m){aa=o;return b|0}if(g){g=c[b>>2]|0;h=c[b+4>>2]|0}else{g=b;h=f&255}if(!(g>>>0<=d>>>0&(g+h|0)>>>0>d>>>0)){if((i-l|0)>>>0<m>>>0){tB(b,i,m+l-i|0,l,l,0);f=a[n>>0]|0}if(f<<24>>24<0)f=c[b>>2]|0;else f=b;f=f+l|0;if((d|0)!=(e|0))do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((d|0)!=(e|0));a[f>>0]=0;f=m+l|0;if((a[n>>0]|0)<0){c[b+4>>2]=f;aa=o;return b|0}else{a[n>>0]=f;aa=o;return b|0}}else{c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;if(m>>>0>4294967279)aB();if(m>>>0<11){a[k+11>>0]=m;f=k}else{n=m+16&-16;f=_A(n)|0;c[k>>2]=f;c[k+8>>2]=n|-2147483648;c[k+4>>2]=m}if((d|0)!=(e|0)){g=f;while(1){a[g>>0]=a[d>>0]|0;d=d+1|0;if((d|0)==(e|0))break;else g=g+1|0}f=f+(e-j)|0}a[f>>0]=0;n=a[k+11>>0]|0;e=n<<24>>24<0;f=c[k>>2]|0;uB(b,e?f:k,e?c[k+4>>2]|0:n&255)|0;if(e)$A(f);aa=o;return b|0}return 0}
+function nq(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,s=0,t=0,u=0;u=aa;aa=aa+16|0;t=u;c[t>>2]=0;p=t+4|0;c[p>>2]=0;r=t+8|0;c[r>>2]=0;s=cq(a,0)|0;d=cq(a,1)|0;if((s|0)!=21){t=0;aa=u;return t|0}q=b+4|0;s=b+8|0;a:while(1){if(!(dq(d)|0))switch(d|0){case 102:case 70:case 75:case 52:break;default:{d=0;break a}}if(!(lq(a,t)|0)){d=c[t>>2]|0;if(d|0){n=c[q>>2]|0;f=d;j=c[p>>2]|0;o=c[r>>2]|0;l=d;m=c[s>>2]|0;while(1){k=n;n=l;l=c[n+4>>2]|0;do if((f|0)!=(j|0)){d=n+8|0;i=c[d>>2]|0;e=n+4|0;h=i;if(!i){g=l;c[t>>2]=l;f=g}else{c[i+4>>2]=l;g=c[e>>2]|0}if(!g){c[p>>2]=h;g=i;break}else{c[g+8>>2]=h;g=j;break}}else{c[p>>2]=0;c[t>>2]=0;f=0;g=0;e=n+4|0;d=n+8|0}while(0);c[d>>2]=0;c[e>>2]=0;o=o+-1|0;if(!k)d=b;else{c[n+8>>2]=k;d=k+4|0}c[d>>2]=n;m=m+1|0;if(!l)break;else j=g}c[r>>2]=o;c[q>>2]=n;c[s>>2]=m}}else if((fq(a,99)|0)==1){d=1;break}o=cq(a,0)|0;d=cq(a,1)|0;if((o|0)!=21){d=0;break}}e=c[t>>2]|0;if(!e){t=d;aa=u;return t|0}do{t=e;e=c[e+4>>2]|0;ma[c[(c[t>>2]|0)+4>>2]&255](t)}while((e|0)!=0);aa=u;return d|0}function oq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=aa;aa=aa+16|0;e=f;if((cq(b,0)|0)!=110){b=d+11|0;if((a[b>>0]|0)<0){a[c[d>>2]>>0]=0;c[d+4>>2]=0;aa=f;return}else{a[d>>0]=0;a[b>>0]=0;aa=f;return}}else{i=b+92|0;g=c[i>>2]&1;j=b+16+(g*36|0)|0;h=c[b+16+(g*36|0)+24>>2]|0;g=c[b+16+(g*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[i>>2]=c[i>>2]&1^1;b=b+88|0;c[b>>2]=(c[b>>2]|0)+-1;Wn(e,h,g);b=d+11|0;if((a[b>>0]|0)<0){a[c[d>>2]>>0]=0;c[d+4>>2]=0;b=d}else{a[d>>0]=0;a[b>>0]=0;b=d}pB(d);c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];aa=f;return}}function pq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;e=h;if((qq(a,b+12|0)|0)==1){a=1;aa=h;return a|0}if((rq(a,b+76|0)|0)==1){a=1;aa=h;return a|0}d=a+88|0;if(!(c[d>>2]|0)){Sp(e,c[a>>2]|0,a);g=c[d>>2]|0;c[d>>2]=g+1;d=a+92|0;g=a+16+(((c[d>>2]|0)+g&1)*36|0)|0;f=g+36|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(f|0))}else d=a+92|0;tC(b+88|0,a+16+((c[d>>2]&1)*36|0)|0,20)|0;a=0;aa=h;return a|0}function qq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+96|0;e=h+64|0;f=h;a[f>>0]=0;g=f+4|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;El(g,-1,e);e=f+40|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;if(((wq(b,f)|0)!=1?(xq(b,26,e)|0)!=1:0)?(xq(b,29,f+52|0)|0)!=1:0){a[d>>0]=a[f>>0]|0;Jl(d+4|0,g)|0;if((f|0)==(d|0))e=0;else{Bg(d+40|0,c[e>>2]|0,c[f+44>>2]|0);Bg(d+52|0,c[f+52>>2]|0,c[f+56>>2]|0);e=0}}else e=1;d=c[f+52>>2]|0;if(d|0){c[f+56>>2]=d;$A(d)}d=c[f+40>>2]|0;if(!d){Ml(g);aa=h;return e|0}c[f+44>>2]=d;$A(d);Ml(g);aa=h;return e|0}function rq(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,s=0,t=0,u=0;u=aa;aa=aa+16|0;t=u;c[t>>2]=0;p=t+4|0;c[p>>2]=0;r=t+8|0;c[r>>2]=0;q=b+4|0;s=b+8|0;a:while(1){d=cq(a,0)|0;e=cq(a,1)|0;b:do if(!(dq(d)|0)){switch(d|0){case 102:case 70:case 75:case 52:break b;case 21:break;default:{e=0;break a}}if(!(dq(e)|0))switch(e|0){case 102:case 70:case 75:case 52:break;default:{e=0;break a}}}while(0);if(!(sq(a,t)|0)){d=c[t>>2]|0;if(d|0){n=c[q>>2]|0;f=d;j=c[p>>2]|0;o=c[r>>2]|0;l=d;m=c[s>>2]|0;while(1){k=n;n=l;l=c[n+4>>2]|0;do if((f|0)!=(j|0)){d=n+8|0;i=c[d>>2]|0;e=n+4|0;h=i;if(!i){g=l;c[t>>2]=l;f=g}else{c[i+4>>2]=l;g=c[e>>2]|0}if(!g){c[p>>2]=h;g=i;break}else{c[g+8>>2]=h;g=j;break}}else{c[p>>2]=0;c[t>>2]=0;f=0;g=0;e=n+4|0;d=n+8|0}while(0);c[d>>2]=0;c[e>>2]=0;o=o+-1|0;if(!k)d=b;else{c[n+8>>2]=k;d=k+4|0}c[d>>2]=n;m=m+1|0;if(!l)break;else j=g}c[r>>2]=o;c[q>>2]=n;c[s>>2]=m}}else if((fq(a,100)|0)==1){e=1;break}}d=c[t>>2]|0;if(!d){aa=u;return e|0}do{t=d;d=c[d+4>>2]|0;ma[c[(c[t>>2]|0)+4>>2]&255](t)}while((d|0)!=0);aa=u;return e|0}function sq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;if(dq(cq(a,0)|0)|0){c[f>>2]=0;e=(mq(a,f)|0)==1;a=c[f>>2]|0;c[f>>2]=0;if(e)if(!a)d=1;else{ma[c[(c[a>>2]|0)+4>>2]&255](a);d=1}else{e=b+4|0;d=c[e>>2]|0;if(!d)d=b;else{c[a+8>>2]=d;d=d+4|0}c[d>>2]=a;c[e>>2]=a;d=b+8|0;c[d>>2]=(c[d>>2]|0)+1;c[f>>2]=0;d=0}b=d;aa=g;return b|0}switch(cq(a,0)|0){case 102:case 70:case 75:case 52:break;default:{f=cq(a,0)|0;d=cq(a,1)|0;if((f|0)!=21){b=1;aa=g;return b|0}a:do if(!(dq(d)|0)){switch(d|0){case 102:case 70:case 75:case 52:break a;default:d=1}aa=g;return d|0}while(0);b=lq(a,b)|0;aa=g;return b|0}}c[f>>2]=0;e=(uq(a,f)|0)==1;a=c[f>>2]|0;c[f>>2]=0;if(e)if(!a)d=1;else{ma[c[(c[a>>2]|0)+4>>2]&255](a);d=1}else{e=b+4|0;d=c[e>>2]|0;if(!d)d=b;else{c[a+8>>2]=d;d=d+4|0}c[d>>2]=a;c[e>>2]=a;d=b+8|0;c[d>>2]=(c[d>>2]|0)+1;c[f>>2]=0;d=0}b=d;aa=g;return b|0}function tq(a){a=a|0;var b=0;b=c[a>>2]|0;a:do if(!(dq(b)|0)){switch(b|0){case 102:case 70:case 75:case 52:{b=1;break a}default:{}}b=c[a+4>>2]|0;if((c[a>>2]|0)==21)if(dq(b)|0)b=1;else{switch(b|0){case 102:case 70:case 75:case 52:{b=1;break a}default:{}}b=0}else b=0}else b=1;while(0);return b|0}function uq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+96|0;m=n+48|0;g=n+24|0;j=n+28|0;f=n;i=b+88|0;if(!(c[i>>2]|0)){Sp(m,c[b>>2]|0,b);k=c[i>>2]|0;c[i>>2]=k+1;e=b+92|0;k=b+16+(((c[e>>2]|0)+k&1)*36|0)|0;h=m;l=k+36|0;do{c[k>>2]=c[h>>2];k=k+4|0;h=h+4|0}while((k|0)<(l|0))}else e=b+92|0;l=b+16+((c[e>>2]&1)*36|0)|0;c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];c[j+12>>2]=c[l+12>>2];c[j+16>>2]=c[l+16>>2];switch(cq(b,0)|0){case 52:{f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;f=_A(144)|0;c[f+4>>2]=0;c[f+8>>2]=0;e=f+12|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];c[f+32>>2]=7;c[f>>2]=288732;e=f+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(f+52|0,-1,m);k=f+88|0;l=k+56|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}if((eq(b,67)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}vq(b,e);e=c[d>>2]|0;c[d>>2]=f;if(!e){d=0;aa=n;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=n;return d|0}case 75:{f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;f=_A(144)|0;c[f+4>>2]=0;c[f+8>>2]=0;e=f+12|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];c[f+32>>2]=25;c[f>>2]=288476;e=f+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(f+52|0,-1,m);k=f+88|0;l=k+56|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}if((eq(b,67)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}vq(b,e);e=c[d>>2]|0;c[d>>2]=f;if(!e){d=0;aa=n;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=n;return d|0}case 70:{f=b+92|0;g=b+16+((c[f>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;g=_A(176)|0;c[g+4>>2]=0;c[g+8>>2]=0;e=g+12|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];c[g+32>>2]=20;c[g>>2]=288556;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(g+52|0,-1,m);k=g+88|0;l=k+88|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=n;return d|0}if((cq(b,0)|0)==66){l=b+16+((c[f>>2]&1)*36|0)|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;vq(b,e);if((kq(b,g+144|0)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=n;return d|0}if(!(c[i>>2]|0)){Sp(m,c[b>>2]|0,b);k=c[i>>2]|0;c[i>>2]=k+1;k=b+16+(((c[f>>2]|0)+k&1)*36|0)|0;h=m;l=k+36|0;do{c[k>>2]=c[h>>2];k=k+4|0;h=h+4|0}while((k|0)<(l|0))}l=b+16+((c[f>>2]&1)*36|0)|0;m=g+156|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];c[m+16>>2]=c[l+16>>2]}if((eq(b,67)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=n;return d|0}vq(b,e);e=c[d>>2]|0;c[d>>2]=g;if(!e){d=0;aa=n;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=n;return d|0}case 102:{l=b+92|0;e=c[l>>2]&1;k=b+16+(e*36|0)|0;c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];c[f+8>>2]=c[k+8>>2];c[f+12>>2]=c[k+12>>2];c[f+16>>2]=c[k+16>>2];c[f+20>>2]=c[k+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[l>>2]=c[l>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(m,e);c[g>>2]=c[m>>2];c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];c[m+16>>2]=c[f+16>>2];aq(b,m,309809,g)}f=_A(156)|0;c[f+4>>2]=0;c[f+8>>2]=0;e=f+12|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];c[f+32>>2]=53;c[f>>2]=288092;e=f+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(f+52|0,-1,m);k=f+88|0;l=k+68|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}if((eq(b,59)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}vq(b,e);if((kq(b,f+144|0)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}if((eq(b,67)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}vq(b,e);e=c[d>>2]|0;c[d>>2]=f;if(!e){d=0;aa=n;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=n;return d|0}default:{d=1;aa=n;return d|0}}return 0}function vq(b,d){b=b|0;d=d|0;var 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;s=aa;aa=aa+112|0;p=s+68|0;r=s+8|0;l=s;n=s+28|0;q=s+16|0;o=s+48|0;e=b+88|0;if(!(c[e>>2]|0)){Sp(p,c[b>>2]|0,b);f=c[e>>2]|0;c[e>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=p;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;j=b+16+((c[e>>2]&1)*36|0)|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;oq(b,q);j=q+11|0;g=a[j>>0]|0;k=g<<24>>24<0;g=k?c[q+4>>2]|0:g&255;a:do if(g|0){f=a[d+11>>0]|0;i=f<<24>>24<0;f=f&255;e=i?c[d+4>>2]|0:f;if(!e){c[l>>2]=k?c[q>>2]|0:q;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];c[p+8>>2]=c[n+8>>2];c[p+12>>2]=c[n+12>>2];c[p+16>>2]=c[n+16>>2];aq(b,p,309984,l);break}do if((e|0)==(g|0)){e=c[d>>2]|0;h=k?c[q>>2]|0:q;if(i){if(!(Tz(e,h,g)|0))break a;c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];break}if((a[h>>0]|0)!=(e&255)<<24>>24){c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];m=18;break}g=d;e=h;while(1){f=f+-1|0;g=g+1|0;if(!f)break a;e=e+1|0;if((a[g>>0]|0)!=(a[e>>0]|0)){m=16;break}}}else m=16;while(0);if((m|0)==16){c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];if(i)e=c[d>>2]|0;else m=18}if((m|0)==18)e=d;n=k?c[q>>2]|0:q;c[r>>2]=e;c[r+4>>2]=n;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];c[p+16>>2]=c[o+16>>2];aq(b,p,310006,r)}while(0);if((a[j>>0]|0)>=0){aa=s;return}$A(c[q>>2]|0);aa=s;return}function wq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if((cq(b,0)|0)==21?(cq(b,1)|0)==35:0){f=b+92|0;g=b+16+((c[f>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;g=c[f>>2]&1^1;c[f>>2]=g;e=b+88|0;c[e>>2]=(c[e>>2]|0)+-1;g=b+16+(g*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[e>>2]=(c[e>>2]|0)+-1;a[d>>0]=1;if((hq(b,d+4|0)|0)==1){g=1;return g|0}if((eq(b,30)|0)==1){g=1;return g|0}}else a[d>>0]=0;g=0;return g|0}function xq(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,l=0;l=aa;aa=aa+16|0;i=l;if((cq(a,0)|0)!=21){d=0;aa=l;return d|0}h=a+92|0;k=a+88|0;f=d+4|0;g=d+8|0;while(1){if((cq(a,1)|0)!=(b|0)){e=0;f=12;break}j=a+16+((c[h>>2]&1)*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;j=c[h>>2]&1^1;c[h>>2]=j;c[k>>2]=(c[k>>2]|0)+-1;j=a+16+(j*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[h>>2]=c[h>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;if((cq(a,0)|0)==111)do{j=c[h>>2]&1;e=a+16+(j*36|0)|0;j=c[a+16+(j*36|0)+24>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[h>>2]=c[h>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;c[i>>2]=j;e=c[f>>2]|0;if(e>>>0<(c[g>>2]|0)>>>0){c[e>>2]=j;c[f>>2]=e+4}else yq(d,i)}while((cq(a,0)|0)==111);if((eq(a,30)|0)==1){e=1;f=12;break}if((cq(a,0)|0)!=21){e=0;f=12;break}}if((f|0)==12){aa=l;return e|0}return 0}function yq(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function zq(a){a=a|0;a:do if((c[a>>2]|0)==21){a=c[a+4>>2]|0;if(dq(a)|0)a=1;else{switch(a|0){case 102:case 70:case 75:case 52:{a=1;break a}default:{}}a=0}}else a=0;while(0);return a|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+96|0;i=j+56|0;h=j+36|0;g=j;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(i,-1,h);e=b+4|0;f=b+8|0;while(1){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(g,-1,h);if((cq(a,0)|0)!=44?(cq(a,0)|0)!=110:0)break;hq(a,i)|0;Ml(g);d=c[e>>2]|0;if(d>>>0<(c[f>>2]|0)>>>0){Il(d,i);c[e>>2]=(c[e>>2]|0)+36}else Gq(b,i)}Jl(i,g)|0;Ml(g);a=(c[b>>2]|0)==(c[e>>2]|0)&1;Ml(i);aa=j;return a|0}function Bq(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;j=aa;aa=aa+64|0;h=j+44|0;g=j+32|0;i=j+8|0;d=j;if((cq(a,0)|0)!=107){c[b>>2]=0;aa=j;return}k=a+92|0;f=c[k>>2]&1;l=a+16+(f*36|0)|0;c[i>>2]=c[l>>2];c[i+4>>2]=c[l+4>>2];c[i+8>>2]=c[l+8>>2];c[i+12>>2]=c[l+12>>2];c[i+16>>2]=c[l+16>>2];c[i+20>>2]=c[l+20>>2];e=c[a+16+(f*36|0)+24>>2]|0;f=c[a+16+(f*36|0)+28>>2]|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[k>>2]=c[k>>2]&1^1;k=a+88|0;c[k>>2]=(c[k>>2]|0)+-1;if((pm(e,e+f|0,d)|0)==1){c[g>>2]=f;c[g+4>>2]=e;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];aq(a,h,310407,g)}l=d;d=c[l>>2]|0;l=c[l+4>>2]|0;if(l>>>0>0|(l|0)==0&d>>>0>4294967295){c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];aq(a,h,310429,j+40|0)}c[b>>2]=d;aa=j;return}function Cq(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;i=aa;aa=aa+64|0;d=i+36|0;h=i+24|0;e=i;if((cq(a,0)|0)!=105){c[b>>2]=-1;aa=i;return}j=a+92|0;g=c[j>>2]&1;k=a+16+(g*36|0)|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];c[e+16>>2]=c[k+16>>2];c[e+20>>2]=c[k+20>>2];f=c[a+16+(g*36|0)+24>>2]|0;g=c[a+16+(g*36|0)+28>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[j>>2]=c[j>>2]&1^1;j=a+88|0;c[j>>2]=(c[j>>2]|0)+-1;if((sm(f,f+g|0,b,0)|0)==1){c[h>>2]=g;c[h+4>>2]=f;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];c[d+16>>2]=c[e+16>>2];aq(a,d,310351,h)}k=c[b>>2]|0;if(!((k|0)!=0&(k+-1&k|0)==0)){c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];c[d+16>>2]=c[e+16>>2];aq(a,d,310376,i+32|0)}aa=i;return}function Dq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+96|0;o=p+52|0;n=p+32|0;i=p+24|0;g=p;k=p+40|0;j=b+92|0;m=c[j>>2]&1;e=b+16+(m*36|0)|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[g+16>>2]=c[e+16>>2];c[g+20>>2]=c[e+20>>2];m=c[b+16+(m*36|0)+24>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;e=c[j>>2]&1^1;c[j>>2]=e;l=b+88|0;h=(c[l>>2]|0)+-1|0;c[l>>2]=h;if(!h){Sp(o,c[b>>2]|0,b);e=c[l>>2]|0;c[l>>2]=e+1;e=b+16+(((c[j>>2]|0)+e&1)*36|0)|0;f=o;h=e+36|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(h|0));e=c[j>>2]|0}tC(d|0,b+16+((e&1)*36|0)|0,20)|0;e=cq(b,0)|0;if((m|0)==213){if(!(Dm(213,c[b+12>>2]|0)|0)){Am(o,213);c[i>>2]=c[o>>2];c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];aq(b,o,309809,i)}c[d+20>>2]=-5;o=(Fq(b,d,e)|0)==1&1;aa=p;return o|0}if((e+-42|0)>>>0>=3){g=_A(32)|0;c[k>>2]=g;c[k+8>>2]=-2147483616;c[k+4>>2]=17;e=g;f=310157;h=e+17|0;do{a[e>>0]=a[f>>0]|0;e=e+1|0;f=f+1|0}while((e|0)<(h|0));a[g+17>>0]=0;e=o+4|0;f=_A(12)|0;c[o>>2]=f;n=f+12|0;c[o+8>>2]=n;cB(f,k);c[e>>2]=n;gq(b,o,310175);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g);o=1;aa=p;return o|0}h=c[j>>2]&1;e=b+16+(h*36|0)|0;f=c[b+16+(h*36|0)+24>>2]|0;g=c[b+16+(h*36|0)+28>>2]|0;h=c[b+16+(h*36|0)+32>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[l>>2]=(c[l>>2]|0)+-1;e=g+h|0;switch(m|0){case 52:{c[d+20>>2]=-1;e=sm(g,e,d+24|0,1)|0;break}case 53:{c[d+20>>2]=-2;e=pm(g,e,d+24|0)|0;break}case 54:{c[d+20>>2]=-3;e=tm(f,g,e,d+24|0)|0;break}case 55:{c[d+20>>2]=-4;e=vm(f,g,e,d+24|0)|0;break}default:{o=1;aa=p;return o|0}}if((e|0)!=1){o=0;aa=p;return o|0}c[n>>2]=h;c[n+4>>2]=g;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];c[o+16>>2]=c[d+16>>2];aq(b,o,310071,n);o=1;aa=p;return o|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=aa;aa=aa+64|0;i=j+36|0;g=j;h=j+8|0;if((cq(b,0)|0)==44){k=b+92|0;f=c[k>>2]&1;l=b+16+(f*36|0)|0;c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];c[h+8>>2]=c[l+8>>2];c[h+12>>2]=c[l+12>>2];c[h+16>>2]=c[l+16>>2];c[h+20>>2]=c[l+20>>2];c[h+24>>2]=c[l+24>>2];e=c[b+16+(f*36|0)+28>>2]|0;f=c[b+16+(f*36|0)+32>>2]|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[k>>2]=c[k>>2]&1^1;k=b+88|0;c[k>>2]=(c[k>>2]|0)+-1;if((om(e,e+f|0,d)|0)==1){c[g>>2]=f;c[g+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2];aq(b,i,309870,g)}l=0;aa=j;return l|0}else{g=_A(32)|0;c[h>>2]=g;c[h+8>>2]=-2147483616;c[h+4>>2]=16;d=g;e=310136;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));a[g+16>>0]=0;d=i+4|0;e=_A(12)|0;c[i>>2]=e;l=e+12|0;c[i+8>>2]=l;cB(e,h);c[d>>2]=l;gq(b,i,310153);if((a[e+11>>0]|0)<0)$A(c[e>>2]|0);c[d>>2]=e;$A(e);$A(g);l=1;aa=j;return l|0}return 0}function Fq(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,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0;A=aa;aa=aa+112|0;z=A+48|0;w=A+8|0;f=A;t=A+88|0;u=A+28|0;y=A+16|0;switch(e|0){case 36:{g=1;r=16;break}case 37:{g=1;r=8;break}case 38:{g=1;r=4;break}case 39:{g=1;r=2;break}case 40:{g=0;r=4;break}case 41:{g=0;r=2;break}default:{y=jy(e)|0;c[f>>2]=y;c[z>>2]=c[d>>2];c[z+4>>2]=c[d+4>>2];c[z+8>>2]=c[d+8>>2];c[z+12>>2]=c[d+12>>2];c[z+16>>2]=c[d+16>>2];aq(b,z,310191,f);b=1;aa=A;return b|0}}q=b+92|0;e=b+16+((c[q>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;e=c[q>>2]&1^1;c[q>>2]=e;s=b+88|0;f=(c[s>>2]|0)+-1|0;c[s>>2]=f;p=16/(r>>>0)|0;h=t;l=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(l|0));if(!f){Sp(z,c[b>>2]|0,b);h=c[s>>2]|0;c[s>>2]=h+1;h=b+16+(((c[q>>2]|0)+h&1)*36|0)|0;e=z;l=h+36|0;do{c[h>>2]=c[e>>2];h=h+4|0;e=e+4|0}while((h|0)<(l|0));e=c[q>>2]|0;o=b}else o=b;tC(d|0,b+16+((e&1)*36|0)|0,20)|0;j=(r+-2|0)>>>1;k=r&255;a:do if(g){i=0;while(1){if(!(c[s>>2]|0)){Sp(z,c[o>>2]|0,b);h=c[s>>2]|0;c[s>>2]=h+1;h=b+16+(((c[q>>2]|0)+h&1)*36|0)|0;e=z;l=h+36|0;do{c[h>>2]=c[e>>2];h=h+4|0;e=e+4|0}while((h|0)<(l|0))}n=b+16+((c[q>>2]&1)*36|0)|0;c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];c[u+16>>2]=c[n+16>>2];if((cq(b,0)|0)!=43?(cq(b,0)|0)!=44:0)break;e=c[q>>2]&1;g=b+16+(e*36|0)|0;f=c[b+16+(e*36|0)+28>>2]|0;e=c[b+16+(e*36|0)+32>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[q>>2]=c[q>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;g=f+e|0;h=t+(v(i,p)|0)|0;switch(j&2147483647|0){case 7:{m=qm(f,g,h)|0;x=23;break}case 3:{m=rm(f,g,h)|0;x=23;break}case 1:{m=sm(f,g,h,1)|0;x=23;break}case 0:{m=pm(f,g,h)|0;x=23;break}default:{}}if((x|0)==23?(x=0,(m|0)==1):0){x=38;break a}i=i+1|0;if(i>>>0>=r>>>0){x=41;break a}}g=_A(32)|0;c[y>>2]=g;c[y+8>>2]=-2147483616;c[y+4>>2]=24;h=g;e=310305;l=h+24|0;do{a[h>>0]=a[e>>0]|0;h=h+1|0;e=e+1|0}while((h|0)<(l|0));a[g+24>>0]=0;e=z+4|0;f=_A(12)|0;c[z>>2]=f;x=f+12|0;c[z+8>>2]=x;cB(f,y);c[e>>2]=x;gq(b,z,310153);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g);x=40}else{j=0;while(1){if(!(c[s>>2]|0)){Sp(z,c[o>>2]|0,b);h=c[s>>2]|0;c[s>>2]=h+1;h=b+16+(((c[q>>2]|0)+h&1)*36|0)|0;e=z;l=h+36|0;do{c[h>>2]=c[e>>2];h=h+4|0;e=e+4|0}while((h|0)<(l|0))}m=b+16+((c[q>>2]&1)*36|0)|0;c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];c[u+8>>2]=c[m+8>>2];c[u+12>>2]=c[m+12>>2];c[u+16>>2]=c[m+16>>2];if((cq(b,0)|0)!=42)break;e=c[q>>2]&1;g=b+16+(e*36|0)|0;i=c[b+16+(e*36|0)+24>>2]|0;f=c[b+16+(e*36|0)+28>>2]|0;e=c[b+16+(e*36|0)+32>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[q>>2]=c[q>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;g=f+e|0;h=t+(v(j,p)|0)|0;switch(k&31){case 4:{n=tm(i,f,g,h)|0;x=37;break}case 2:{n=vm(i,f,g,h)|0;x=37;break}default:{}}if((x|0)==37?(x=0,(n|0)==1):0){x=38;break a}j=j+1|0;if(j>>>0>=r>>>0){x=41;break a}}g=_A(16)|0;c[y>>2]=g;c[y+8>>2]=-2147483632;c[y+4>>2]=15;h=g;e=310330;l=h+15|0;do{a[h>>0]=a[e>>0]|0;h=h+1|0;e=e+1|0}while((h|0)<(l|0));a[g+15>>0]=0;e=z+4|0;f=_A(12)|0;c[z>>2]=f;x=f+12|0;c[z+8>>2]=x;cB(f,y);c[e>>2]=x;gq(b,z,310346);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g);x=40}while(0);if((x|0)==38){c[w>>2]=e;c[w+4>>2]=f;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];c[z+8>>2]=c[u+8>>2];c[z+12>>2]=c[u+12>>2];c[z+16>>2]=c[u+16>>2];aq(b,z,310071,w);x=40}else if((x|0)==41){h=d+24|0;e=t;l=h+16|0;do{a[h>>0]=a[e>>0]|0;h=h+1|0;e=e+1|0}while((h|0)<(l|0));e=0}if((x|0)==40)e=1;b=e;aa=A;return b|0}function Gq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=a+4|0;d=c[a>>2]|0;f=((c[i>>2]|0)-d|0)/36|0;e=f+1|0;if(e>>>0>119304647)HB();j=a+8|0;h=((c[j>>2]|0)-d|0)/36|0;d=h<<1;d=h>>>0<59652323?(d>>>0<e>>>0?e:d):119304647;do if(d)if(d>>>0>119304647)U();else{g=_A(d*36|0)|0;break}else g=0;while(0);e=g+(f*36|0)|0;h=g+(d*36|0)|0;Il(e,b);b=e+36|0;g=c[a>>2]|0;d=c[i>>2]|0;if((d|0)==(g|0)){f=g;d=g}else{do{e=e+-36|0;d=d+-36|0;Il(e,d)}while((d|0)!=(g|0));f=c[a>>2]|0;d=c[i>>2]|0}c[a>>2]=e;c[i>>2]=b;c[j>>2]=h;e=f;if((d|0)!=(e|0))do{d=d+-36|0;Ml(d)}while((d|0)!=(e|0));if(!f)return;$A(f);return}function Hq(b,d){b=b|0;d=d|0;var 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;w=aa;aa=aa+32|0;t=w;s=w+20|0;l=w+8|0;c[l>>2]=0;v=l+4|0;c[v>>2]=0;i=l+8|0;c[i>>2]=0;if((cq(b,0)|0)!=109){v=0;aa=w;return v|0}j=b+92|0;k=b+88|0;e=0;f=0;while(1){h=c[j>>2]&1;p=b+16+(h*36|0)|0;h=b+16+(h*36|0)+24|0;g=c[h>>2]|0;h=c[h+4>>2]|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;p=t;c[p>>2]=g;c[p+4>>2]=h;if(e>>>0<f>>>0){p=e;c[p>>2]=g;c[p+4>>2]=h;c[v>>2]=e+8}else Iq(l,t);if((cq(b,0)|0)!=109)break;e=c[v>>2]|0;f=c[i>>2]|0}p=c[l>>2]|0;o=c[v>>2]|0;a:do if((p|0)!=(o|0)){m=d+4|0;n=d+8|0;b=p;b:while(1){e=c[b+4>>2]|0;if(e>>>0>=3?(Xn(t,c[b>>2]|0,e,1,e+-2|0),q=t,l=c[q+4>>2]|0,q=c[q>>2]|0,r=q+l|0,(l|0)>0):0){l=q;do{k=a[l>>0]|0;c:do if(k<<24>>24!=92){e=c[m>>2]|0;f=c[n>>2]|0;if(e>>>0<f>>>0){a[e>>0]=k;c[m>>2]=(c[m>>2]|0)+1;e=l;break}j=c[d>>2]|0;i=e-j|0;e=i+1|0;h=j;if((e|0)<0){e=91;break b}f=f-j|0;g=f<<1;g=f>>>0<1073741823?(g>>>0<e>>>0?e:g):2147483647;if(!g)f=0;else f=_A(g)|0;e=f+i|0;a[e>>0]=k;if((i|0)>0)sC(f|0,h|0,i|0)|0;c[d>>2]=f;c[m>>2]=e+1;c[n>>2]=f+g;if(!j)e=l;else{$A(h);e=l}}else{e=l+1|0;f=a[e>>0]|0;switch(f<<24>>24|0){case 110:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=10;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=18;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=10;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 114:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=13;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=28;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=13;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 116:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=9;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=38;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=9;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 92:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=92;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=48;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=92;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 39:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=39;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=58;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=39;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 34:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=34;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=68;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=34;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}default:{e=l+2|0;do if((nm(f,t)|0)==0?(nm(a[e>>0]|0,s)|0)==0:0){l=(c[t>>2]<<4|c[s>>2])&255;f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=l;c[m>>2]=(c[m>>2]|0)+1;break}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=80;break b}g=g-k|0;h=g<<1;h=g>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=l;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(k|0)$A(i)}while(0);break c}}}while(0);l=e+1|0}while(l>>>0<r>>>0)}b=b+8|0;if((b|0)==(o|0)){u=o;break a}}if((e|0)==18)HB();else if((e|0)==28)HB();else if((e|0)==38)HB();else if((e|0)==48)HB();else if((e|0)==58)HB();else if((e|0)==68)HB();else if((e|0)==80)HB();else if((e|0)==91)HB()}else u=p;while(0);e=(p|0)!=(u|0);if(!p){v=e;aa=w;return v|0}c[v>>2]=p;$A(p);v=e;aa=w;return v|0}function Iq(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>3;d=f+1|0;if(d>>>0>536870911)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>2;e=m>>3>>>0<268435455?(e>>>0<d>>>0?d:e):536870911;do if(e)if(e>>>0>536870911)U();else{k=_A(e<<3)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<3)|0;f=b;b=c[f+4>>2]|0;m=d;c[m>>2]=c[f>>2];c[m+4>>2]=b;if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+8;c[j>>2]=k+(e<<3);if(!g)return;$A(g);return}function Jq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+112|0;h=j+72|0;i=j+36|0;g=j;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(i,-1,h);e=b+4|0;f=b+8|0;while(1){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(g,-1,h);if((cq(a,0)|0)!=44?(cq(a,0)|0)!=110:0)break;hq(a,i)|0;Ml(g);d=c[e>>2]|0;if(d>>>0<(c[f>>2]|0)>>>0){Il(h,i);c[d>>2]=1;Il(d+4|0,h);Ml(h);c[e>>2]=(c[e>>2]|0)+40}else Kq(b,i)}Jl(i,g)|0;Ml(g);a=(c[b>>2]|0)!=(c[e>>2]|0);Ml(i);aa=j;return a|0}function Kq(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;l=aa;aa=aa+48|0;f=l;j=a+4|0;d=c[a>>2]|0;h=((c[j>>2]|0)-d|0)/40|0;e=h+1|0;if(e>>>0>107374182)HB();k=a+8|0;i=((c[k>>2]|0)-d|0)/40|0;d=i<<1;d=i>>>0<53687091?(d>>>0<e>>>0?e:d):107374182;do if(d)if(d>>>0>107374182)U();else{g=_A(d*40|0)|0;break}else g=0;while(0);e=g+(h*40|0)|0;i=g+(d*40|0)|0;Il(f,b);c[e>>2]=1;Il(g+(h*40|0)+4|0,f);Ml(f);g=e+40|0;f=c[a>>2]|0;d=c[j>>2]|0;if((d|0)==(f|0)){b=f;d=f}else{do{h=d;d=d+-40|0;c[e+-40>>2]=c[d>>2];Il(e+-36|0,h+-36|0);e=e+-40|0}while((d|0)!=(f|0));b=c[a>>2]|0;d=c[j>>2]|0}c[a>>2]=e;c[j>>2]=g;c[k>>2]=i;e=b;if((d|0)!=(e|0))do{Ml(d+-36|0);d=d+-40|0}while((d|0)!=(e|0));if(!b){aa=l;return}$A(b);aa=l;return}function Lq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+112|0;l=m+84|0;g=m+80|0;f=m+72|0;k=m;if((cq(b,0)|0)==111){j=b+92|0;e=c[j>>2]&1;i=b+16+(e*36|0)|0;c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];c[k+16>>2]=c[i+16>>2];c[k+20>>2]=c[i+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[j>>2]=c[j>>2]&1^1;j=b+88|0;c[j>>2]=(c[j>>2]|0)+-1;switch(e|0){case -5:{if(!(a[(c[b+12>>2]|0)+4>>0]|0)){c[f>>2]=330963;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];c[l+8>>2]=c[k+8>>2];c[l+12>>2]=c[k+12>>2];c[l+16>>2]=c[k+16>>2];aq(b,l,310477,f);d=1}else h=10;break}case -17:{if(!(a[(c[b+12>>2]|0)+9>>0]|0)){c[g>>2]=330923;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];c[l+8>>2]=c[k+8>>2];c[l+12>>2]=c[k+12>>2];c[l+16>>2]=c[k+16>>2];aq(b,l,310477,g);d=1}else h=10;break}default:h=10}if((h|0)==10){c[d>>2]=e;d=0}l=d;aa=m;return l|0}e=k+4|0;c[e>>2]=0;c[e+4>>2]=50331648;a[k>>0]=a[330980]|0;a[k+1>>0]=a[330981]|0;a[k+2>>0]=a[330982]|0;a[k+3>>0]=0;e=k+12|0;f=k+16|0;c[f>>2]=0;c[f+4>>2]=50331648;a[e>>0]=a[330976]|0;a[e+1>>0]=a[330977]|0;a[e+2>>0]=a[330978]|0;a[e+3>>0]=0;f=k+24|0;g=k+28|0;c[g>>2]=0;c[g+4>>2]=50331648;a[f>>0]=a[330972]|0;a[f+1>>0]=a[330973]|0;a[f+2>>0]=a[330974]|0;a[f+3>>0]=0;g=k+36|0;h=k+40|0;c[h>>2]=0;c[h+4>>2]=50331648;a[g>>0]=a[330968]|0;a[g+1>>0]=a[330969]|0;a[g+2>>0]=a[330970]|0;a[g+3>>0]=0;h=k+48|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;a[h+11>>0]=4;c[h>>2]=942813558;a[k+52>>0]=0;o=k+60|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;a[o+11>>0]=6;a[o>>0]=a[330923]|0;a[o+1>>0]=a[330924]|0;a[o+2>>0]=a[330925]|0;a[o+3>>0]=a[330926]|0;a[o+4>>0]=a[330927]|0;a[o+5>>0]=a[330928]|0;a[o+6>>0]=0;i=l+4|0;j=_A(72)|0;c[l>>2]=j;n=j+72|0;c[l+8>>2]=n;cB(j,k);d=j+12|0;cB(d,e);e=j+24|0;cB(e,f);f=j+36|0;cB(f,g);g=j+48|0;cB(g,h);h=j+60|0;cB(h,o);c[i>>2]=n;gq(b,l,0);if((a[j+71>>0]|0)<0)$A(c[h>>2]|0);if((a[j+59>>0]|0)<0)$A(c[g>>2]|0);if((a[j+47>>0]|0)<0)$A(c[f>>2]|0);if((a[j+35>>0]|0)<0)$A(c[e>>2]|0);if((a[j+23>>0]|0)<0)$A(c[d>>2]|0);if((a[j+11>>0]|0)<0)$A(c[j>>2]|0);c[i>>2]=j;$A(j);o=1;aa=m;return o|0}function Mq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=aa;aa=aa+48|0;h=i+28|0;f=i+24|0;g=i;if((cq(b,0)|0)==111){j=b+92|0;e=c[j>>2]&1;k=b+16+(e*36|0)|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=c[k+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[j>>2]=c[j>>2]&1^1;j=b+88|0;c[j>>2]=(c[j>>2]|0)+-1;if((e|0)==-17?(a[(c[b+12>>2]|0)+9>>0]|0)==0:0){c[f>>2]=330923;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];aq(b,h,310477,f);d=1}else{c[d>>2]=e;d=0}k=d;aa=i;return k|0}else{c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+11>>0]=6;a[g>>0]=a[330923]|0;a[g+1>>0]=a[330924]|0;a[g+2>>0]=a[330925]|0;a[g+3>>0]=a[330926]|0;a[g+4>>0]=a[330927]|0;a[g+5>>0]=a[330928]|0;a[g+6>>0]=0;j=g+12|0;c[g+20>>2]=117440512;a[j>>0]=a[330955]|0;a[j+1>>0]=a[330956]|0;a[j+2>>0]=a[330957]|0;a[j+3>>0]=a[330958]|0;a[j+4>>0]=a[330959]|0;a[j+5>>0]=a[330960]|0;a[j+6>>0]=a[330961]|0;a[j+7>>0]=0;e=h+4|0;f=_A(24)|0;c[h>>2]=f;k=f+24|0;c[h+8>>2]=k;cB(f,g);d=f+12|0;cB(d,j);c[e>>2]=k;gq(b,h,0);if((a[f+23>>0]|0)<0)$A(c[d>>2]|0);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);k=1;aa=i;return k|0}return 0}function Nq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+64|0;l=m+32|0;j=m+24|0;k=m+52|0;i=m;if((cq(b,0)|0)!=109){h=_A(16)|0;c[k>>2]=h;c[k+8>>2]=-2147483632;c[k+4>>2]=15;e=h;f=310504;g=e+15|0;do{a[e>>0]=a[f>>0]|0;e=e+1|0;f=f+1|0}while((e|0)<(g|0));a[h+15>>0]=0;e=l+4|0;f=_A(12)|0;c[l>>2]=f;j=f+12|0;c[l+8>>2]=j;cB(f,k);c[e>>2]=j;gq(b,l,310520);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(h);l=1;aa=m;return l|0}n=b+92|0;g=c[n>>2]&1;o=b+16+(g*36|0)|0;c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];c[i+16>>2]=c[o+16>>2];c[i+20>>2]=c[o+20>>2];f=c[b+16+(g*36|0)+24>>2]|0;g=c[b+16+(g*36|0)+28>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[n>>2]=c[n>>2]&1^1;n=b+88|0;c[n>>2]=(c[n>>2]|0)+-1;if(g>>>0>=3?(Xn(l,f,g,1,g+-2|0),e=l,o=c[e+4>>2]|0,e=c[e>>2]|0,h=e+o|0,(o|0)>0):0){g=e;while(1){f=a[g>>0]|0;e=g+1|0;if(f<<24>>24==92){f=a[e>>0]|0;switch(f<<24>>24|0){case 110:{wB(d,10);break}case 114:{wB(d,13);break}case 116:{wB(d,9);break}case 92:{wB(d,92);break}case 39:{wB(d,39);break}case 34:{wB(d,34);break}default:{e=g+2|0;if((nm(f,l)|0)==0?(nm(a[e>>0]|0,k)|0)==0:0)wB(d,(c[l>>2]<<4|c[k>>2])&255)}}e=e+1|0}else wB(d,f);if(e>>>0<h>>>0)g=e;else break}}e=a[d+11>>0]|0;if(e<<24>>24<0){f=c[d+4>>2]|0;e=c[d>>2]|0}else{f=e&255;e=d}if(!(Lz(e,f)|0)){c[l>>2]=c[i>>2];c[l+4>>2]=c[i+4>>2];c[l+8>>2]=c[i+8>>2];c[l+12>>2]=c[i+12>>2];c[l+16>>2]=c[i+16>>2];aq(b,l,310526,j)}o=0;aa=m;return o|0}function Oq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+48|0;k=m+24|0;i=m;j=_A(376)|0;uC(j|0,0,212)|0;c[j+212>>2]=1065353216;l=j+216|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+232>>2]=1065353216;l=j+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+252>>2]=1065353216;l=j+256|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+272>>2]=1065353216;l=j+276|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+292>>2]=1065353216;l=j+296|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+312>>2]=1065353216;l=j+316|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+332>>2]=1065353216;l=j+336|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+352>>2]=1065353216;l=j+356|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+372>>2]=1065353216;l=j;do if((cq(b,0)|0)==21?(cq(b,1)|0)==23:0){c[k>>2]=0;if((Pq(b,0,k)|0)==1){e=c[k>>2]|0;c[k>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);break}else{e=c[k>>2]|0;c[k>>2]=0;Qq(j,e+8|0)|0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);f=18;break}}else f=10;while(0);a:do if((f|0)==10){h=cq(b,0)|0;e=cq(b,1)|0;b:do if((h|0)==21){switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break;default:break b}if((Rq(b,j)|0)==1)break a;else{f=18;break a}}while(0);if((cq(b,0)|0)==21){h=b+92|0;g=b+16+((c[h>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h>>2]=c[h>>2]&1^1;h=b+88|0;c[h>>2]=(c[h>>2]|0)+-1}h=_A(16)|0;c[i>>2]=h;c[i+8>>2]=-2147483632;c[i+4>>2]=14;e=h;f=310570;g=e+14|0;do{a[e>>0]=a[f>>0]|0;e=e+1|0;f=f+1|0}while((e|0)<(g|0));a[h+14>>0]=0;o=i+12|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;a[o+11>>0]=8;f=o;c[f>>2]=1869422689;c[f+4>>2]=1701606756;a[i+20>>0]=0;f=k+4|0;g=_A(24)|0;c[k>>2]=g;n=g+24|0;c[k+8>>2]=n;cB(g,i);e=g+12|0;cB(e,o);c[f>>2]=n;gq(b,k,0);if((a[g+23>>0]|0)<0)$A(c[e>>2]|0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);$A(h);f=18}while(0);if(((f|0)==18?(eq(b,12)|0)!=1:0)?(o=c[b+8>>2]|0,(c[o+4>>2]|0)==(c[o>>2]|0)):0){e=c[d>>2]|0;c[d>>2]=l;if(!e){o=0;aa=m;return o|0}db(e);$A(e);o=0;aa=m;return o|0}db(j);$A(j);o=1;aa=m;return o|0}function Pq(d,e,f){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,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=aa;aa=aa+128|0;u=x+96|0;q=x+8|0;p=x;g=x+92|0;v=x+48|0;s=x+16|0;n=x+72|0;o=x+28|0;c[g>>2]=0;a:do if((qr(d,g)|0)!=1){w=_A(384)|0;t=w;c[t>>2]=0;c[t+4>>2]=0;c[w>>2]=290384;t=w+8|0;uC(t|0,0,212)|0;c[w+220>>2]=1065353216;i=w+224|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+240>>2]=1065353216;i=w+244|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+260>>2]=1065353216;i=w+264|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+280>>2]=1065353216;i=w+284|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+300>>2]=1065353216;i=w+304|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+320>>2]=1065353216;i=w+324|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+340>>2]=1065353216;i=w+344|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+360>>2]=1065353216;i=w+364|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+380>>2]=1065353216;i=c[g>>2]|0;switch(c[i+4>>2]|0){case 0:{Qq(t,i+8|0)|0;break}case 1:{a[v>>0]=0;a[v+1>>0]=1;h=v+2|0;b[h>>1]=0;b[h+2>>1]=0;b[h+4>>1]=0;b[h+6>>1]=0;a[h+8>>0]=0;c[v+12>>2]=0;a[v+16>>0]=0;a[v+17>>0]=1;a[v+18>>0]=1;h=v;j=c[d+12>>2]|0;k=h+11|0;do{a[h>>0]=a[j>>0]|0;h=h+1|0;j=j+1|0}while((h|0)<(k|0));c[s>>2]=0;r=s+4|0;c[r>>2]=0;c[s+8>>2]=0;m=c[i+40>>2]|0;Oc(310714,m,(c[i+44>>2]|0)-m|0,v,s,t)|0;lB(w+28|0,i+28|0)|0;m=i+8|0;c[t>>2]=c[m>>2];c[t+4>>2]=c[m+4>>2];c[t+8>>2]=c[m+8>>2];c[t+12>>2]=c[m+12>>2];c[t+16>>2]=c[m+16>>2];k=c[s>>2]|0;l=c[r>>2]|0;if((k|0)!=(l|0)){do{j=k+12|0;if((c[j>>2]|0)==-1){c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];h=k+24|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;c[p>>2]=h;c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];c[u+16>>2]=c[n+16>>2];aq(d,u,310721,p)}else{c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[o+16>>2]=c[m+16>>2];h=k+24|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;c[q>>2]=c[j>>2];c[q+4>>2]=h;c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[u+8>>2]=c[o+8>>2];c[u+12>>2]=c[o+12>>2];c[u+16>>2]=c[o+16>>2];aq(d,u,310748,q)}k=k+36|0}while((k|0)!=(l|0));k=c[s>>2]|0}if(k|0){h=c[r>>2]|0;if((h|0)==(k|0))h=k;else{do{j=h+-12|0;h=h+-36|0;if((a[j+11>>0]|0)<0)$A(c[j>>2]|0)}while((h|0)!=(k|0));h=c[s>>2]|0}c[r>>2]=k;$A(h)}break}case 2:{m=_A(16)|0;c[v>>2]=m;c[v+8>>2]=-2147483632;c[v+4>>2]=15;h=m;j=310785;k=h+15|0;do{a[h>>0]=a[j>>0]|0;h=h+1|0;j=j+1|0}while((h|0)<(k|0));a[m+15>>0]=0;l=_A(16)|0;c[v+12>>2]=l;c[v+20>>2]=-2147483632;c[v+16>>2]=13;h=l;j=310801;k=h+13|0;do{a[h>>0]=a[j>>0]|0;h=h+1|0;j=j+1|0}while((h|0)<(k|0));a[l+13>>0]=0;h=u+4|0;j=_A(24)|0;c[u>>2]=j;f=j+24|0;c[u+8>>2]=f;cB(j,v);k=j+12|0;cB(k,v+12|0);c[h>>2]=f;gq(d,u,0);if((a[j+23>>0]|0)<0)$A(c[k>>2]|0);if((a[j+11>>0]|0)<0)$A(c[j>>2]|0);c[h>>2]=j;$A(j);$A(l);$A(m);ma[c[(c[w>>2]|0)+4>>2]&255](w);h=1;break a}default:{}}if(e|0){j=(c[e+4>>2]|0)-(c[e>>2]|0)>>2;h=a[w+39>>0]|0;if(h<<24>>24<0)h=c[w+32>>2]|0;else h=h&255;if(h|0){c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];c[v+20>>2]=j;e=e+12|0;Og(u,e,w+28|0,v);Gg(e,c[u>>2]|0)}c[d+4>>2]=j}h=c[f>>2]|0;c[f>>2]=w;if(!h)h=0;else{ma[c[(c[h>>2]|0)+4>>2]&255](h);h=0}}else{i=c[g>>2]|0;h=1}while(0);c[g>>2]=0;if(!i){aa=x;return h|0}ma[c[(c[i>>2]|0)+4>>2]&255](i);aa=x;return h|0}function Qq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=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];f=b+20|0;g=d+20|0;e=f+11|0;if((a[e>>0]|0)<0){a[c[f>>2]>>0]=0;c[b+24>>2]=0;e=f}else{a[f>>0]=0;a[e>>0]=0;e=f}pB(f);c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;f=b+32|0;g=d+32|0;e=c[f>>2]|0;if(e|0)do{h=e;e=c[e+4>>2]|0;ma[c[(c[h>>2]|0)+4>>2]&255](h)}while((e|0)!=0);h=b+36|0;c[h>>2]=0;c[f>>2]=0;i=b+40|0;c[i>>2]=0;c[f>>2]=c[g>>2];e=d+36|0;c[h>>2]=c[e>>2];h=d+40|0;c[i>>2]=c[h>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+44|0;h=d+44|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=c[h+16>>2];g=b+64|0;h=d+64|0;e=c[g>>2]|0;if(!e){e=b+68|0;f=b+72|0}else{i=b+68|0;c[i>>2]=e;$A(e);f=b+72|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+68|0;c[e>>2]=c[g>>2];e=d+72|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+76|0;h=d+76|0;e=c[g>>2]|0;if(!e){e=b+80|0;f=b+84|0}else{i=b+80|0;c[i>>2]=e;$A(e);f=b+84|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+80|0;c[e>>2]=c[g>>2];e=d+84|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+88|0;h=d+88|0;e=c[g>>2]|0;if(!e){e=b+92|0;f=b+96|0}else{i=b+92|0;c[i>>2]=e;$A(e);f=b+96|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+92|0;c[e>>2]=c[g>>2];e=d+96|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+100|0;h=d+100|0;e=c[g>>2]|0;if(!e){e=b+104|0;f=b+108|0}else{i=b+104|0;c[i>>2]=e;$A(e);f=b+108|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+104|0;c[e>>2]=c[g>>2];e=d+108|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+112|0;h=d+112|0;e=c[g>>2]|0;if(!e){e=b+116|0;f=b+120|0}else{i=b+116|0;c[i>>2]=e;$A(e);f=b+120|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+116|0;c[e>>2]=c[g>>2];e=d+120|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+124|0;h=d+124|0;e=c[g>>2]|0;if(!e){e=b+128|0;f=b+132|0}else{i=b+128|0;c[i>>2]=e;$A(e);f=b+132|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+128|0;c[e>>2]=c[g>>2];e=d+132|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+136|0;h=d+136|0;e=c[g>>2]|0;if(!e){e=b+140|0;f=b+144|0}else{i=b+140|0;c[i>>2]=e;$A(e);f=b+144|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+140|0;c[e>>2]=c[g>>2];e=d+144|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+148|0;h=d+148|0;e=c[g>>2]|0;if(!e){e=b+152|0;f=b+156|0}else{i=b+152|0;c[i>>2]=e;$A(e);f=b+156|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+152|0;c[e>>2]=c[g>>2];e=d+156|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+160|0;h=d+160|0;e=c[g>>2]|0;if(!e){e=b+164|0;f=b+168|0}else{i=b+164|0;c[i>>2]=e;$A(e);f=b+168|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+164|0;c[e>>2]=c[g>>2];e=d+168|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+172|0;h=d+172|0;e=c[g>>2]|0;if(!e){e=b+176|0;f=b+180|0}else{i=b+176|0;c[i>>2]=e;$A(e);f=b+180|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+176|0;c[e>>2]=c[g>>2];e=d+180|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+184|0;h=d+184|0;e=c[g>>2]|0;if(!e){e=b+188|0;f=b+192|0}else{i=b+188|0;c[i>>2]=e;$A(e);f=b+192|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];i=d+188|0;c[e>>2]=c[i>>2];g=d+192|0;c[f>>2]=c[g>>2];c[g>>2]=0;c[i>>2]=0;c[h>>2]=0;pr(b+196|0,d+196|0);pr(b+216|0,d+216|0);pr(b+236|0,d+236|0);pr(b+256|0,d+256|0);pr(b+276|0,d+276|0);pr(b+296|0,d+296|0);pr(b+316|0,d+316|0);pr(b+336|0,d+336|0);pr(b+356|0,d+356|0);return b|0}function Rq(b,d){b=b|0;d=d|0;var 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;w=aa;aa=aa+112|0;q=w+80|0;p=w;u=w+40|0;k=w+16|0;m=w+4|0;o=cq(b,0)|0;e=cq(b,1)|0;a:do if((o|0)==21){l=b+92|0;n=b+88|0;o=u+20|0;j=m+11|0;b:while(1){switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break;default:break a}if((Sq(b,d)|0)==1){i=0;c:while(1){h=cq(b,0)|0;e=cq(b,1)|0;if((h|0)==21)switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break c;default:{}}e=b+16+((c[l>>2]&1)*36|0)|0;f=u;g=e;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[l>>2]=c[l>>2]&1^1;c[n>>2]=(c[n>>2]|0)+-1;if((c[o>>2]|0)==108?(c[k>>2]=c[u>>2],c[k+4>>2]=c[u+4>>2],c[k+8>>2]=c[u+8>>2],c[k+12>>2]=c[u+12>>2],c[k+16>>2]=c[u+16>>2],qy(m,u),c[p>>2]=(a[j>>0]|0)<0?c[m>>2]|0:m,c[q>>2]=c[k>>2],c[q+4>>2]=c[k+4>>2],c[q+8>>2]=c[k+8>>2],c[q+12>>2]=c[k+12>>2],c[q+16>>2]=c[k+16>>2],aq(b,q,309788,p),(a[j>>0]|0)<0):0)$A(c[m>>2]|0);i=i+1|0;if(i>>>0>=10)break b}}i=cq(b,0)|0;e=cq(b,1)|0;if((i|0)!=21)break a}v=1;aa=w;return v|0}while(0);e=c[d+32>>2]|0;if(!e){v=0;aa=w;return v|0}o=q+4|0;j=u+28|0;k=u+16|0;m=u+32|0;l=u+4|0;n=u+20|0;b=u+8|0;while(1){i=e;f=e;d:do switch(c[i+32>>2]|0){case 0:{g=f+48|0;f=f+36|0;v=25;break}case 10:{g=e+48|0;f=0;v=25;break}case 2:{f=c[e+36>>2]|0;g=c[f+28>>2]|0;h=(f|0)==0;if(!(h|(g|0)!=0)){g=f+44|0;f=0;v=25;break d}if(!(h|(g|0)!=4)){g=f+44|0;f=0;v=25}break}default:{}}while(0);if((v|0)==25){v=0;if((((a[g>>0]|0?(s=g+40|0,(c[g+52>>2]|0)==(c[g+56>>2]|0)):0)?(c[s>>2]|0)==(c[g+44>>2]|0):0)?(r=_k(d,g+4|0)|0,r|0):0)?(t=r+12|0,(s|0)!=(t|0)):0){Bg(s,c[t>>2]|0,c[r+16>>2]|0);Bg(g+52|0,c[r+24>>2]|0,c[r+28>>2]|0)}Tq(i+12|0,d,g);if(f|0){c[q>>2]=290120;c[o>>2]=d;Jj(u,q);Rj(u,f)|0;f=c[j>>2]|0;if(f|0){c[m>>2]=f;$A(f)}f=c[k>>2]|0;if(f|0){c[n>>2]=f;$A(f)}f=c[l>>2]|0;if(f|0){c[b>>2]=f;$A(f)}}}e=c[e+4>>2]|0;if(!e){e=0;break}}aa=w;return e|0}function Sq(a,b){a=a|0;b=b|0;do switch(cq(a,1)|0){case 10:{b=$q(a,b)|0;break}case 11:{b=ar(a,b)|0;break}case 13:{b=br(a,b)|0;break}case 14:{b=cr(a,b)|0;break}case 15:{b=dr(a,b)|0;break}case 35:{b=er(a,b)|0;break}case 17:{b=fr(a,b)|0;break}case 18:{b=gr(a,b)|0;break}case 22:{b=hr(a,b)|0;break}case 32:{b=ir(a,b)|0;break}case 33:{b=jr(a,b)|0;break}default:b=1}while(0);return b|0}function Tq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+16|0;h=i;if(a[e>>0]|0){aa=i;return}g=e+40|0;if((al(d,g)|0)!=-1){aa=i;return}f=_A(72)|0;c[f+4>>2]=0;c[f+8>>2]=0;j=f+12|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];c[j+16>>2]=c[b+16>>2];c[f+32>>2]=4;c[f>>2]=289068;Wn(f+36|0,0,0);b=f+48|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;if((g|0)!=(b|0)){Bg(b,c[g>>2]|0,c[e+44>>2]|0);Bg(f+60|0,c[e+52>>2]|0,c[e+56>>2]|0)}c[h>>2]=f;ml(d,h);b=c[h>>2]|0;c[h>>2]=0;if(!b){aa=i;return}ma[c[(c[b>>2]|0)+4>>2]&255](b);aa=i;return}function Uq(a){a=a|0;$A(a);return}function Vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=d+12|0;h=d+48|0;f=b+4|0;e=c[f>>2]|0;b=d+88|0;if((((a[h>>0]|0?(c[d+100>>2]|0)==(c[d+104>>2]|0):0)?(c[b>>2]|0)==(c[d+92>>2]|0):0)?(g=_k(e,d+52|0)|0,g|0):0)?(j=g+12|0,(b|0)!=(j|0)):0){Bg(b,c[j>>2]|0,c[g+16>>2]|0);Bg(d+100|0,c[g+24>>2]|0,c[g+28>>2]|0)}if((c[d+92>>2]|0)==(c[b>>2]|0)?(c[d+104>>2]|0)-(c[d+100>>2]|0)>>2>>>0<2:0)return 0;Tq(i,c[f>>2]|0,h);return 0}function Wq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b+4|0;b=c[e>>2]|0;g=d+36|0;if(((((a[g>>0]|0)!=0?(h=d+76|0,(c[d+88>>2]|0)==(c[d+92>>2]|0)):0)?(c[h>>2]|0)==(c[d+80>>2]|0):0)?(f=_k(b,d+40|0)|0,(f|0)!=0):0)?(i=f+12|0,(h|0)!=(i|0)):0){Bg(h,c[i>>2]|0,c[f+16>>2]|0);Bg(d+88|0,c[f+24>>2]|0,c[f+28>>2]|0);b=c[e>>2]|0}Tq(d+12|0,b,g);return 0}function Xq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=d+12|0;h=d+48|0;f=b+4|0;e=c[f>>2]|0;b=d+88|0;if((((a[h>>0]|0?(c[d+100>>2]|0)==(c[d+104>>2]|0):0)?(c[b>>2]|0)==(c[d+92>>2]|0):0)?(g=_k(e,d+52|0)|0,g|0):0)?(j=g+12|0,(b|0)!=(j|0)):0){Bg(b,c[j>>2]|0,c[g+16>>2]|0);Bg(d+100|0,c[g+24>>2]|0,c[g+28>>2]|0)}if((c[d+92>>2]|0)==(c[b>>2]|0)?(c[d+104>>2]|0)-(c[d+100>>2]|0)>>2>>>0<2:0)return 0;Tq(i,c[f>>2]|0,h);return 0}function Yq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=d+12|0;h=d+48|0;f=b+4|0;e=c[f>>2]|0;b=d+88|0;if((((a[h>>0]|0?(c[d+100>>2]|0)==(c[d+104>>2]|0):0)?(c[b>>2]|0)==(c[d+92>>2]|0):0)?(g=_k(e,d+52|0)|0,g|0):0)?(j=g+12|0,(b|0)!=(j|0)):0){Bg(b,c[j>>2]|0,c[g+16>>2]|0);Bg(d+100|0,c[g+24>>2]|0,c[g+28>>2]|0)}if((c[d+92>>2]|0)==(c[b>>2]|0)?(c[d+104>>2]|0)-(c[d+100>>2]|0)>>2>>>0<2:0)return 0;Tq(i,c[f>>2]|0,h);return 0}function Zq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b+4|0;b=c[e>>2]|0;g=d+36|0;if(((((a[g>>0]|0)!=0?(h=d+76|0,(c[d+88>>2]|0)==(c[d+92>>2]|0)):0)?(c[h>>2]|0)==(c[d+80>>2]|0):0)?(f=_k(b,d+40|0)|0,(f|0)!=0):0)?(i=f+12|0,(h|0)!=(i|0)):0){Bg(h,c[i>>2]|0,c[f+16>>2]|0);Bg(d+88|0,c[f+24>>2]|0,c[f+28>>2]|0);b=c[e>>2]|0}Tq(d+12|0,b,g);return 0}function _q(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=d+12|0;h=d+48|0;f=b+4|0;e=c[f>>2]|0;b=d+88|0;if((((a[h>>0]|0?(c[d+100>>2]|0)==(c[d+104>>2]|0):0)?(c[b>>2]|0)==(c[d+92>>2]|0):0)?(g=_k(e,d+52|0)|0,g|0):0)?(j=g+12|0,(b|0)!=(j|0)):0){Bg(b,c[j>>2]|0,c[g+16>>2]|0);Bg(d+100|0,c[g+24>>2]|0,c[g+28>>2]|0)}if((c[d+92>>2]|0)==(c[b>>2]|0)?(c[d+104>>2]|0)-(c[d+100>>2]|0)>>2>>>0<2:0)return 0;Tq(i,c[f>>2]|0,h);return 0}function $q(b,d){b=b|0;d=d|0;var 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;r=aa;aa=aa+112|0;n=r+72|0;p=r+16|0;m=r;o=r+36|0;q=r+12|0;if((eq(b,21)|0)==1){q=1;aa=r;return q|0}i=b+88|0;if(!(c[i>>2]|0)){Sp(n,c[b>>2]|0,b);f=c[i>>2]|0;c[i>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=n;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;l=b+16+((c[e>>2]&1)*36|0)|0;c[p>>2]=c[l>>2];c[p+4>>2]=c[l+4>>2];c[p+8>>2]=c[l+8>>2];c[p+12>>2]=c[l+12>>2];c[p+16>>2]=c[l+16>>2];if((eq(b,10)|0)==1)e=1;else{c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;if((cq(b,0)|0)==110){k=b+92|0;g=c[k>>2]&1;j=b+16+(g*36|0)|0;l=c[b+16+(g*36|0)+24>>2]|0;g=c[b+16+(g*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[k>>2]=c[k>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;Wn(n,l,g);g=m+11|0;if((a[g>>0]|0)<0){a[c[m>>2]>>0]=0;e=m+4|0;c[e>>2]=0;f=m}else{a[m>>0]=0;a[g>>0]=0;f=m;e=m+4|0}pB(m);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];h=a[g>>0]|0;i=c[f>>2]|0;e=c[e>>2]|0;l=f;k=g}else{h=0;i=0;e=0;l=m;k=m+11|0}j=_A(112)|0;f=h<<24>>24<0;c[j+4>>2]=0;c[j+8>>2]=0;g=j+12|0;c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];c[g+16>>2]=c[p+16>>2];c[j+32>>2]=8;c[j>>2]=287964;Wn(j+36|0,f?i:m,f?e:h&255);h=j+48|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;El(h,-1,n);e=j+84|0;a[e>>0]=0;f=j+88|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;g=j;El(o,0,p);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0){Jl(h,o)|0;Ml(o);if(jq(b,f)|0)f=17;else{a[e>>0]=1;f=17}}else{hq(b,h)|0;Ml(o);if((iq(b,f)|0)==1)f=20;else f=17}if((f|0)==17){Hq(b,j+100|0)|0;if((eq(b,30)|0)!=1){c[q>>2]=g;cl(d,q);e=c[q>>2]|0;c[q>>2]=0;if(!e)e=0;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);e=0}}else f=20}if((f|0)==20){ma[c[(c[j>>2]|0)+4>>2]&255](j);e=1}if((a[k>>0]|0)<0)$A(c[l>>2]|0)}q=e;aa=r;return q|0}function ar(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=aa;aa=aa+224|0;t=z+180|0;m=z+88|0;y=z+72|0;w=z+36|0;n=z+144|0;u=z+24|0;q=z;l=z+108|0;x=z+84|0;if((eq(b,21)|0)==1){y=1;aa=z;return y|0}v=b+88|0;if(!(c[v>>2]|0)){Sp(t,c[b>>2]|0,b);i=c[v>>2]|0;c[v>>2]=i+1;e=b+92|0;i=b+16+(((c[e>>2]|0)+i&1)*36|0)|0;j=t;k=i+36|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0))}else e=b+92|0;s=b+16+((c[e>>2]&1)*36|0)|0;c[m>>2]=c[s>>2];c[m+4>>2]=c[s+4>>2];c[m+8>>2]=c[s+8>>2];c[m+12>>2]=c[s+12>>2];c[m+16>>2]=c[s+16>>2];if((eq(b,11)|0)==1)e=1;else{c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;if((cq(b,0)|0)==110){p=b+92|0;e=c[p>>2]&1;o=b+16+(e*36|0)|0;s=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[p>>2]=c[p>>2]&1^1;c[v>>2]=(c[v>>2]|0)+-1;Wn(t,s,e);e=y+11|0;if((a[e>>0]|0)<0){a[c[y>>2]>>0]=0;c[y+4>>2]=0}else{a[y>>0]=0;a[e>>0]=0}pB(y);c[y>>2]=c[t>>2];c[y+4>>2]=c[t+4>>2];c[y+8>>2]=c[t+8>>2];s=e}else s=y+11|0;p=_A(116)|0;h=a[s>>0]|0;g=h<<24>>24<0;e=g?c[y>>2]|0:y;h=g?c[y+4>>2]|0:h&255;c[p+4>>2]=0;c[p+8>>2]=0;g=p+12|0;c[g>>2]=c[m>>2];c[g+4>>2]=c[m+4>>2];c[g+8>>2]=c[m+8>>2];c[g+12>>2]=c[m+12>>2];c[g+16>>2]=c[m+16>>2];c[p+32>>2]=6;c[p>>2]=287980;Wn(p+36|0,e,h);h=p+48|0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(h,-1,t);e=p+84|0;a[e>>0]=0;g=p+92|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;o=p;f=p+88|0;do if((cq(b,0)|0)==111){j=b+92|0;i=c[j>>2]&1;k=b+16+(i*36|0)|0;i=c[b+16+(i*36|0)+24>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[v>>2]=(c[v>>2]|0)+-1;if((i|0)==-17?(a[(c[b+12>>2]|0)+9>>0]|0)==0:0){r=44;break}c[f>>2]=i;a[e>>0]=1;f=p+108|0;g=p+112|0;h=p+104|0;a:while(1){c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(w,-1,t);if((cq(b,0)|0)==21?(cq(b,1)|0)==84:0){e=b+16+((c[j>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;e=c[j>>2]&1^1;c[j>>2]=e;c[v>>2]=(c[v>>2]|0)+-1;e=b+16+(e*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[v>>2]=(c[v>>2]|0)+-1;e=c[f>>2]|0;if(e>>>0<(c[g>>2]|0)>>>0){c[e>>2]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(e+4|0,-1,t);c[f>>2]=(c[f>>2]|0)+40}else Sg(h);if((eq(b,30)|0)==1)break}else r=22;do if((r|0)==22){r=0;if((cq(b,0)|0)==21?(cq(b,1)|0)==82:0){m=b+16+((c[j>>2]&1)*36|0)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;m=c[j>>2]&1^1;c[j>>2]=m;c[v>>2]=(c[v>>2]|0)+-1;m=b+16+(m*36|0)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[v>>2]=(c[v>>2]|0)+-1;if((hq(b,w)|0)==1)break a;e=c[f>>2]|0;if(e>>>0<(c[g>>2]|0)>>>0){Il(t,w);c[e>>2]=1;Il(e+4|0,t);Ml(t);c[f>>2]=(c[f>>2]|0)+40}else Kq(h,w);if((eq(b,30)|0)==1)break a;else break};c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(n,-1,t);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0){r=34;break a}hq(b,w)|0;Ml(n);e=c[f>>2]|0;if(e>>>0<(c[g>>2]|0)>>>0){Il(t,w);c[e>>2]=1;Il(e+4|0,t);Ml(t);c[f>>2]=(c[f>>2]|0)+40;break}else{Kq(h,w);break}}while(0);Ml(w)}if((r|0)==34){Jl(w,n)|0;Ml(n);c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;a[q+11>>0]=8;n=q;c[n>>2]=778462578;c[n+4>>2]=1819047278;a[q+8>>0]=0;n=q+12|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;a[n+11>>0]=8;g=n;c[g>>2]=778462578;c[g+4>>2]=1668183398;a[q+20>>0]=0;g=u+4|0;h=_A(24)|0;c[u>>2]=h;r=h+24|0;c[u+8>>2]=r;cB(h,q);f=h+12|0;cB(f,n);c[g>>2]=r;if((cq(b,0)|0)==21){r=b+16+((c[j>>2]&1)*36|0)|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[j>>2]=c[j>>2]&1^1;r=(c[v>>2]|0)+-1|0;c[v>>2]=r;if(!r){Sp(t,c[b>>2]|0,b);i=c[v>>2]|0;c[v>>2]=i+1;i=b+16+(((c[j>>2]|0)+i&1)*36|0)|0;j=t;k=i+36|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0))}gq(b,u,0);e=1}else e=0;if((a[h+23>>0]|0)<0)$A(c[f>>2]|0);if((a[h+11>>0]|0)<0)$A(c[h>>2]|0);c[g>>2]=h;$A(h);if(!e){Ml(w);r=50;break}}Ml(w);r=53}else r=44;while(0);if((r|0)==44){c[f>>2]=-16;El(l,0,m);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(h,l)|0;else hq(b,h)|0;Ml(l);if((iq(b,g)|0)==1)r=53;else{Jq(b,p+104|0)|0;r=50}}if((r|0)==50)if((eq(b,30)|0)!=1){c[x>>2]=o;el(d,x);e=c[x>>2]|0;c[x>>2]=0;if(!e)e=0;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);e=0}}else r=53;if((r|0)==53){ma[c[(c[p>>2]|0)+4>>2]&255](p);e=1}if((a[s>>0]|0)<0)$A(c[y>>2]|0)}y=e;aa=z;return y|0}function br(b,d){b=b|0;d=d|0;var 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;n=aa;aa=aa+48|0;l=n+4|0;m=n;if((eq(b,21)|0)==1){m=1;aa=n;return m|0}k=b+88|0;if(!(c[k>>2]|0)){Sp(l,c[b>>2]|0,b);f=c[k>>2]|0;c[k>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=l;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;f=b+16+((c[e>>2]&1)*36|0)|0;h=_A(112)|0;c[h+4>>2]=0;c[h+8>>2]=0;i=h+12|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[h+32>>2]=10;c[h>>2]=287948;i=h+36|0;Wn(i,0,0);f=h+48|0;a[f>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(h+52|0,-1,l);j=h+88|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;g=h;if((eq(b,13)|0)!=1){if((cq(b,0)|0)==110){p=b+92|0;e=c[p>>2]&1;q=b+16+(e*36|0)|0;o=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[p>>2]=c[p>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;Wn(l,o,e);e=h+47|0;if((a[e>>0]|0)<0){a[c[i>>2]>>0]=0;c[h+40>>2]=0}else{a[i>>0]=0;a[e>>0]=0}pB(i);c[i>>2]=c[l>>2];c[i+4>>2]=c[l+4>>2];c[i+8>>2]=c[l+8>>2]}if((((wq(b,f)|0)!=1?(xq(b,26,j)|0)!=1:0)?(xq(b,29,h+100|0)|0)!=1:0)?(eq(b,30)|0)!=1:0){c[m>>2]=g;gl(d,m);e=c[m>>2]|0;c[m>>2]=0;if(!e){q=0;aa=n;return q|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);q=0;aa=n;return q|0}}ma[c[(c[h>>2]|0)+4>>2]&255](h);q=1;aa=n;return q|0}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+48|0;h=j+4|0;i=j;if((eq(a,21)|0)==1){i=1;aa=j;return i|0}d=a+88|0;if(!(c[d>>2]|0)){Sp(h,c[a>>2]|0,a);e=c[d>>2]|0;c[d>>2]=e+1;d=a+92|0;e=a+16+(((c[d>>2]|0)+e&1)*36|0)|0;f=h;g=e+36|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0))}else d=a+92|0;d=a+16+((c[d>>2]&1)*36|0)|0;e=_A(88)|0;c[e+4>>2]=0;c[e+8>>2]=0;f=e+12|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];c[e+32>>2]=3;c[e>>2]=288876;f=e+36|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(e+52|0,-1,h);d=e;if((((eq(a,14)|0)!=1?(Nq(a,f)|0)!=1:0)?(or(a,f)|0)!=1:0)?(eq(a,30)|0)!=1:0){c[i>>2]=d;il(b,i);d=c[i>>2]|0;c[i>>2]=0;if(!d){i=0;aa=j;return i|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);i=0;aa=j;return i|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);i=1;aa=j;return i|0}function dr(b,d){b=b|0;d=d|0;var 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;w=aa;aa=aa+160|0;t=w+124|0;s=w+84|0;f=w+60|0;v=w+48|0;u=w+36|0;m=w;q=w+120|0;l=w+80|0;if((eq(b,21)|0)==1){v=1;aa=w;return v|0}n=b+88|0;if(!(c[n>>2]|0)){Sp(t,c[b>>2]|0,b);o=c[n>>2]|0;c[n>>2]=o+1;e=b+92|0;o=b+16+(((c[e>>2]|0)+o&1)*36|0)|0;j=t;p=o+36|0;do{c[o>>2]=c[j>>2];o=o+4|0;j=j+4|0}while((o|0)<(p|0))}else e=b+92|0;p=b+16+((c[e>>2]&1)*36|0)|0;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];if((eq(b,15)|0)==1)e=1;else{c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;if((cq(b,0)|0)==110){o=b+92|0;e=c[o>>2]&1;j=b+16+(e*36|0)|0;p=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[o>>2]=c[o>>2]&1^1;c[n>>2]=(c[n>>2]|0)+-1;Wn(t,p,e);e=v+11|0;if((a[e>>0]|0)<0){a[c[v>>2]>>0]=0;c[v+4>>2]=0}else{a[v>>0]=0;a[e>>0]=0}pB(v);c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2]}c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;a:do if((kr(b,u,0)|0)==1)e=1;else{do if((cq(b,0)|0)==21?(cq(b,1)|0)==18:0){lr(b,d);k=_A(152)|0;f=a[v+11>>0]|0;g=f<<24>>24<0;h=g?c[v>>2]|0:v;f=g?c[v+4>>2]|0:f&255;g=k+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[k>>2]=289052;Wn(k+32|0,h,f);f=k+44|0;a[f>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(k+48|0,-1,t);h=k+84|0;e=k+136|0;o=h;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[e>>2]=1065353216;c[k+140>>2]=0;c[k+144>>2]=0;c[k+148>>2]=0;l=k;if(((((eq(b,21)|0)!=1?(eq(b,18)|0)!=1:0)?(Nq(b,g)|0)!=1:0)?(Nq(b,k+16|0)|0)!=1:0)?(eq(b,30)|0)!=1:0){if((wq(b,f)|0)==1){ma[c[(c[k>>2]|0)+4>>2]&255](k);e=1;break a}if((mr(b,26,h,k+120|0,0)|0)!=1?(xq(b,29,k+96|0)|0)!=1:0){c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;a[m+11>>0]=4;c[m>>2]=1701869940;a[m+4>>0]=0;g=m+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+11>>0]=5;a[g>>0]=a[330308]|0;a[g+1>>0]=a[330309]|0;a[g+2>>0]=a[330310]|0;a[g+3>>0]=a[330311]|0;a[g+4>>0]=a[330312]|0;a[g+5>>0]=0;o=m+24|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;a[o+11>>0]=6;a[o>>0]=a[330329]|0;a[o+1>>0]=a[330330]|0;a[o+2>>0]=a[330331]|0;a[o+3>>0]=a[330332]|0;a[o+4>>0]=a[330333]|0;a[o+5>>0]=a[330334]|0;a[o+6>>0]=0;h=s+4|0;i=_A(36)|0;c[s>>2]=i;p=i+36|0;c[s+8>>2]=p;cB(i,m);f=i+12|0;cB(f,g);g=i+24|0;cB(g,o);c[h>>2]=p;if((cq(b,0)|0)==21){e=b+92|0;p=b+16+((c[e>>2]&1)*36|0)|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[e>>2]=c[e>>2]&1^1;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if(!p){Sp(t,c[b>>2]|0,b);o=c[n>>2]|0;c[n>>2]=o+1;o=b+16+(((c[e>>2]|0)+o&1)*36|0)|0;j=t;p=o+36|0;do{c[o>>2]=c[j>>2];o=o+4|0;j=j+4|0}while((o|0)<(p|0))}gq(b,s,0);e=1}else e=0;if((a[i+35>>0]|0)<0)$A(c[g>>2]|0);if((a[i+23>>0]|0)<0)$A(c[f>>2]|0);if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);c[h>>2]=i;$A(i);if(e){ma[c[(c[k>>2]|0)+4>>2]&255](k);e=1;break a}if(!(c[n>>2]|0)){Sp(t,c[b>>2]|0,b);o=c[n>>2]|0;c[n>>2]=o+1;e=b+92|0;o=b+16+(((c[e>>2]|0)+o&1)*36|0)|0;j=t;p=o+36|0;do{c[o>>2]=c[j>>2];o=o+4|0;j=j+4|0}while((o|0)<(p|0))}else e=b+92|0;o=b+16+((c[e>>2]&1)*36|0)|0;e=_A(40)|0;c[e+4>>2]=0;c[e+8>>2]=0;p=e+12|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];c[p+16>>2]=c[o+16>>2];c[e+32>>2]=2;c[e>>2]=288972;c[e+36>>2]=l;c[q>>2]=e;ql(d,q);e=c[q>>2]|0;c[q>>2]=0;if(!e)break;ma[c[(c[e>>2]|0)+4>>2]&255](e);break}ma[c[(c[k>>2]|0)+4>>2]&255](k);e=1;break a}ma[c[(c[k>>2]|0)+4>>2]&255](k);e=1;break a}else r=38;while(0);if((r|0)==38){j=_A(156)|0;g=a[v+11>>0]|0;e=g<<24>>24<0;i=e?c[v>>2]|0:v;g=e?c[v+4>>2]|0:g&255;c[j+4>>2]=0;c[j+8>>2]=0;e=j+12|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[j+32>>2]=0;c[j>>2]=288940;Wn(j+36|0,i,g);g=j+48|0;a[g>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(j+52|0,-1,t);i=j+88|0;e=j+140|0;o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[e>>2]=1065353216;e=j+144|0;c[e>>2]=0;c[j+148>>2]=0;c[j+152>>2]=0;f=j;if(((wq(b,g)|0)!=1?(k=j+124|0,(mr(b,26,i,k,0)|0)!=1):0)?(xq(b,29,j+100|0)|0)!=1:0){c[t>>2]=0;h=t+4|0;c[h>>2]=0;c[t+8>>2]=0;if((mr(b,20,t,k,(c[j+92>>2]|0)-(c[i>>2]|0)>>2)|0)!=1?(Nk(j+112|0,t),(kq(b,e)|0)!=1):0){c[l>>2]=f;kl(d,l);e=c[l>>2]|0;c[l>>2]=0;if(!e){e=0;f=0}else{ma[c[(c[e>>2]|0)+4>>2]&255](e);e=0;f=0}}else e=1;g=c[t>>2]|0;if(g|0){c[h>>2]=g;$A(g)}if(f)r=48}else{e=1;r=48}if((r|0)==48)ma[c[(c[f>>2]|0)+4>>2]&255](f);if(e|0){e=1;break}}f=((c[d+80>>2]|0)-(c[d+76>>2]|0)>>2)+-1|0;e=(c[d+36>>2]|0)+12|0;c[t>>2]=c[e>>2];c[t+4>>2]=c[e+4>>2];c[t+8>>2]=c[e+8>>2];c[t+12>>2]=c[e+12>>2];c[t+16>>2]=c[e+16>>2];e=c[u>>2]|0;if(e|0)do{El(s,f,t);Hl(e+52|0,s)|0;Ml(s);e=c[e+4>>2]|0}while((e|0)!=0);Al(d,u);e=(eq(b,30)|0)==1&1}while(0);f=c[u>>2]|0;if(f|0)do{u=f;f=c[f+4>>2]|0;ma[c[(c[u>>2]|0)+4>>2]&255](u)}while((f|0)!=0);if((a[v+11>>0]|0)<0)$A(c[v>>2]|0)}v=e;aa=w;return v|0}function er(b,d){b=b|0;d=d|0;var 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;s=aa;aa=aa+96|0;n=s+60|0;r=s+40|0;o=s+24|0;m=s;q=s+36|0;if((eq(b,21)|0)==1){r=1;aa=s;return r|0}p=b+88|0;if(!(c[p>>2]|0)){Sp(n,c[b>>2]|0,b);h=c[p>>2]|0;c[p>>2]=h+1;e=b+92|0;h=b+16+(((c[e>>2]|0)+h&1)*36|0)|0;i=n;j=h+36|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}else e=b+92|0;i=b+16+((c[e>>2]&1)*36|0)|0;g=_A(72)|0;c[g+4>>2]=0;c[g+8>>2]=0;h=g+12|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];c[g+32>>2]=4;c[g>>2]=289068;h=g+36|0;Wn(h,0,0);i=g+48|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;f=g;if((eq(b,35)|0)!=1){if((cq(b,0)|0)==110){k=b+92|0;e=c[k>>2]&1;j=b+16+(e*36|0)|0;l=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[k>>2]=c[k>>2]&1^1;c[p>>2]=(c[p>>2]|0)+-1;Wn(n,l,e);e=g+47|0;if((a[e>>0]|0)<0){a[c[h>>2]>>0]=0;c[g+40>>2]=0}else{a[h>>0]=0;a[e>>0]=0}pB(h);c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];c[h+8>>2]=c[n+8>>2]}if((eq(b,21)|0)!=1?(eq(b,15)|0)!=1:0){c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=1065353216;if((mr(b,26,i,r,0)|0)!=1?(xq(b,29,g+60|0)|0)!=1:0){c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;a[m+11>>0]=5;a[m>>0]=a[330308]|0;a[m+1>>0]=a[330309]|0;a[m+2>>0]=a[330310]|0;a[m+3>>0]=a[330311]|0;a[m+4>>0]=a[330312]|0;a[m+5>>0]=0;i=m+12|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;a[i+11>>0]=6;a[i>>0]=a[330329]|0;a[i+1>>0]=a[330330]|0;a[i+2>>0]=a[330331]|0;a[i+3>>0]=a[330332]|0;a[i+4>>0]=a[330333]|0;a[i+5>>0]=a[330334]|0;a[i+6>>0]=0;k=o+4|0;l=_A(24)|0;c[o>>2]=l;j=l+24|0;c[o+8>>2]=j;cB(l,m);g=l+12|0;cB(g,i);c[k>>2]=j;if((cq(b,0)|0)==21){e=b+92|0;m=b+16+((c[e>>2]&1)*36|0)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[e>>2]=c[e>>2]&1^1;m=(c[p>>2]|0)+-1|0;c[p>>2]=m;if(!m){Sp(n,c[b>>2]|0,b);h=c[p>>2]|0;c[p>>2]=h+1;h=b+16+(((c[e>>2]|0)+h&1)*36|0)|0;i=n;j=h+36|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}gq(b,o,0);e=1}else e=0;if((a[l+23>>0]|0)<0)$A(c[g>>2]|0);if((a[l+11>>0]|0)<0)$A(c[l>>2]|0);c[k>>2]=l;$A(l);if((!e?(eq(b,30)|0)!=1:0)?(eq(b,30)|0)!=1:0){c[q>>2]=f;ml(d,q);e=c[q>>2]|0;c[q>>2]=0;if(!e){f=0;e=0}else{ma[c[(c[e>>2]|0)+4>>2]&255](e);f=0;e=0}}else e=1}else e=1;g=c[r+8>>2]|0;if(g|0)do{h=g;g=c[g>>2]|0;i=h+8|0;if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);$A(h)}while((g|0)!=0);g=c[r>>2]|0;c[r>>2]=0;if(g|0)$A(g);if(!f){r=e;aa=s;return r|0}}else e=1}else e=1;ma[c[(c[f>>2]|0)+4>>2]&255](f);r=e;aa=s;return r|0}function fr(b,d){b=b|0;d=d|0;var 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;r=aa;aa=aa+128|0;o=r+88|0;n=r+52|0;i=r+28|0;q=r+12|0;p=r;l=r+48|0;j=r+24|0;if((eq(b,21)|0)==1){q=1;aa=r;return q|0}k=b+88|0;if(!(c[k>>2]|0)){Sp(o,c[b>>2]|0,b);f=c[k>>2]|0;c[k>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=o;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;h=b+16+((c[e>>2]&1)*36|0)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2];if((eq(b,17)|0)==1)e=1;else{c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;if((cq(b,0)|0)==110){g=b+92|0;e=c[g>>2]&1;f=b+16+(e*36|0)|0;h=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|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[g>>2]=c[g>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;Wn(o,h,e);e=q+11|0;if((a[e>>0]|0)<0){a[c[q>>2]>>0]=0;c[q+4>>2]=0}else{a[q>>0]=0;a[e>>0]=0}pB(q);c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2]}c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;a:do if((kr(b,p,3)|0)==1)e=1;else{do if((cq(b,0)|0)==21?(cq(b,1)|0)==18:0){lr(b,d);e=_A(64)|0;i=a[q+11>>0]|0;f=i<<24>>24<0;j=f?c[q>>2]|0:q;i=f?c[q+4>>2]|0:i&255;f=e+4|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[e+28>>2]=3;c[e>>2]=289004;g=e+32|0;Wn(g,j,i);c[e+44>>2]=-64;a[e+48>>0]=0;c[e+52>>2]=0;c[e+56>>2]=0;c[e+60>>2]=0;i=e;if(((((eq(b,21)|0)!=1?(eq(b,18)|0)!=1:0)?(Nq(b,f)|0)!=1:0)?(Nq(b,e+16|0)|0)!=1:0)?(eq(b,30)|0)!=1:0){if((nr(b,g)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);e=1;break a}if(!(c[k>>2]|0)){Sp(o,c[b>>2]|0,b);f=c[k>>2]|0;c[k>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=o;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;j=b+16+((c[e>>2]&1)*36|0)|0;e=_A(40)|0;c[e+4>>2]=0;c[e+8>>2]=0;k=e+12|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];c[k+16>>2]=c[j+16>>2];c[e+32>>2]=2;c[e>>2]=288972;c[e+36>>2]=i;c[l>>2]=e;ql(d,l);e=c[l>>2]|0;c[l>>2]=0;if(!e)break;ma[c[(c[e>>2]|0)+4>>2]&255](e);break}ma[c[(c[e>>2]|0)+4>>2]&255](e);e=1;break a}else m=27;while(0);if((m|0)==27){f=_A(68)|0;e=a[q+11>>0]|0;m=e<<24>>24<0;l=m?c[q>>2]|0:q;e=m?c[q+4>>2]|0:e&255;c[f+4>>2]=0;c[f+8>>2]=0;m=f+12|0;c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];c[m+16>>2]=c[i+16>>2];c[f+32>>2]=1;c[f>>2]=288892;m=f+36|0;Wn(m,l,e);c[f+48>>2]=-64;a[f+52>>0]=0;e=f+56|0;c[e>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;if((nr(b,m)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);e=1;break}if((kq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);e=1;break}c[j>>2]=f;ol(d,j);e=c[j>>2]|0;c[j>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e)}f=((c[d+92>>2]|0)-(c[d+88>>2]|0)>>2)+-1|0;e=(c[d+36>>2]|0)+12|0;c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];c[o+16>>2]=c[e+16>>2];e=c[p>>2]|0;if(e|0)do{El(n,f,o);Hl(e+52|0,n)|0;Ml(n);e=c[e+4>>2]|0}while((e|0)!=0);Al(d,p);e=(eq(b,30)|0)==1&1}while(0);f=c[p>>2]|0;if(f|0)do{p=f;f=c[f+4>>2]|0;ma[c[(c[p>>2]|0)+4>>2]&255](p)}while((f|0)!=0);if((a[q+11>>0]|0)<0)$A(c[q>>2]|0)}q=e;aa=r;return q|0}function gr(d,e){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,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=aa;aa=aa+144|0;r=z+96|0;t=z+72|0;y=z+60|0;x=z+48|0;w=z+36|0;q=z+24|0;p=z;u=z+92|0;if((eq(d,21)|0)==1){y=1;aa=z;return y|0}s=d+88|0;if(!(c[s>>2]|0)){Sp(r,c[d>>2]|0,d);n=c[s>>2]|0;c[s>>2]=n+1;f=d+92|0;n=d+16+(((c[f>>2]|0)+n&1)*36|0)|0;m=r;o=n+36|0;do{c[n>>2]=c[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(o|0))}else f=d+92|0;o=d+16+((c[f>>2]&1)*36|0)|0;c[t>>2]=c[o>>2];c[t+4>>2]=c[o+4>>2];c[t+8>>2]=c[o+8>>2];c[t+12>>2]=c[o+12>>2];c[t+16>>2]=c[o+16>>2];lr(d,e);if((eq(d,18)|0)==1)f=1;else{c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;if(((Nq(d,y)|0)!=1?(Nq(d,x)|0)!=1:0)?(eq(d,21)|0)!=1:0){c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;a:do switch(cq(d,0)|0){case 15:{m=d+92|0;o=d+16+((c[m>>2]&1)*36|0)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[m>>2]=c[m>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){f=c[m>>2]&1;n=d+16+(f*36|0)|0;o=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[m>>2]=c[m>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,o,f);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(152)|0;h=a[f>>0]|0;f=h<<24>>24<0;i=f?c[w>>2]|0:w;h=f?c[w+4>>2]|0:h&255;f=g+4|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[g>>2]=289052;Wn(g+32|0,i,h);h=g+44|0;a[h>>0]=0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;El(g+48|0,-1,r);i=g+136|0;n=g+84|0;o=n+52|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(o|0));c[i>>2]=1065353216;c[g+140>>2]=0;c[g+144>>2]=0;c[g+148>>2]=0;if((cq(d,0)|0)==21?(cq(d,1)|0)==35:0){a[h>>0]=1;if((wq(d,h)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}}else{j=g;v=23}do if((v|0)==23){if((mr(d,26,j+84|0,j+120|0,0)|0)!=1?(xq(d,29,j+96|0)|0)!=1:0){c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;a[p+11>>0]=5;a[p>>0]=a[330308]|0;a[p+1>>0]=a[330309]|0;a[p+2>>0]=a[330310]|0;a[p+3>>0]=a[330311]|0;a[p+4>>0]=a[330312]|0;a[p+5>>0]=0;n=p+12|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;a[n+11>>0]=6;a[n>>0]=a[330329]|0;a[n+1>>0]=a[330330]|0;a[n+2>>0]=a[330331]|0;a[n+3>>0]=a[330332]|0;a[n+4>>0]=a[330333]|0;a[n+5>>0]=a[330334]|0;a[n+6>>0]=0;k=q+4|0;l=_A(24)|0;c[q>>2]=l;o=l+24|0;c[q+8>>2]=o;cB(l,p);i=l+12|0;cB(i,n);c[k>>2]=o;if((cq(d,0)|0)==21){p=d+16+((c[m>>2]&1)*36|0)|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[m>>2]=c[m>>2]&1^1;p=(c[s>>2]|0)+-1|0;c[s>>2]=p;if(!p){Sp(r,c[d>>2]|0,d);n=c[s>>2]|0;c[s>>2]=n+1;n=d+16+(((c[m>>2]|0)+n&1)*36|0)|0;m=r;o=n+36|0;do{c[n>>2]=c[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(o|0))}gq(d,q,0);h=1}else h=0;if((a[l+23>>0]|0)<0)$A(c[i>>2]|0);if((a[l+11>>0]|0)<0)$A(c[l>>2]|0);c[k>>2]=l;$A(l);if(!h?(eq(d,30)|0)!=1:0)break}ma[c[(c[j>>2]|0)+4>>2]&255](j);f=1;break a}while(0);h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break}case 33:{j=d+92|0;q=d+16+((c[j>>2]&1)*36|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){f=c[j>>2]&1;p=d+16+(f*36|0)|0;q=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,q,f);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(80)|0;r=a[f>>0]|0;f=r<<24>>24<0;i=f?c[w>>2]|0:w;r=f?c[w+4>>2]|0:r&255;f=g+4|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[g+28>>2]=1;c[g>>2]=289036;Wn(g+32|0,i,r);r=g+48|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;b[r+16>>1]=0;i=g+72|0;c[i>>2]=-16;do if((Eq(d,r)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,g+56|0)|0)==1)break;else h=1;else h=0;a[g+64>>0]=h;if((cq(d,0)|0)==31){r=d+16+((c[j>>2]&1)*36|0)|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;a[g+65>>0]=1}if((Mq(d,i)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}else{h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break a}}while(0);ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break}case 22:{i=d+92|0;q=d+16+((c[i>>2]&1)*36|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){f=c[i>>2]&1;p=d+16+(f*36|0)|0;q=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,q,f);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(72)|0;r=a[f>>0]|0;f=r<<24>>24<0;q=f?c[w>>2]|0:w;r=f?c[w+4>>2]|0:r&255;f=g+4|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[g+28>>2]=2;c[g>>2]=289020;Wn(g+32|0,q,r);r=g+48|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;b[r+16>>1]=0;do if((Eq(d,r)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,g+56|0)|0)==1)break;else h=1;else h=0;a[g+64>>0]=h;if((cq(d,0)|0)==31){r=d+16+((c[i>>2]&1)*36|0)|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;a[g+65>>0]=1}if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}else{h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break a}}while(0);ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break}case 17:{f=d+92|0;q=d+16+((c[f>>2]&1)*36|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){q=c[f>>2]&1;o=d+16+(q*36|0)|0;p=c[d+16+(q*36|0)+24>>2]|0;q=c[d+16+(q*36|0)+28>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,p,q);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(64)|0;r=a[f>>0]|0;f=r<<24>>24<0;q=f?c[w>>2]|0:w;r=f?c[w+4>>2]|0:r&255;f=g+4|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[g+28>>2]=3;c[g>>2]=289004;s=g+32|0;Wn(s,q,r);c[g+44>>2]=-64;a[g+48>>0]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;if((nr(d,s)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}else{h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break a}}case 13:{f=d+92|0;q=d+16+((c[f>>2]&1)*36|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){q=c[f>>2]&1;o=d+16+(q*36|0)|0;p=c[d+16+(q*36|0)+24>>2]|0;q=c[d+16+(q*36|0)+28>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,p,q);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(108)|0;s=a[f>>0]|0;f=s<<24>>24<0;h=f?c[w>>2]|0:w;s=f?c[w+4>>2]|0:s&255;f=g+4|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[g+28>>2]=4;c[g>>2]=288956;Wn(g+32|0,h,s);s=g+44|0;a[s>>0]=0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;El(g+48|0,-1,r);h=g+84|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;if((wq(d,s)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}if((xq(d,26,h)|0)!=1?(xq(d,29,g+96|0)|0)!=1:0)if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}else{h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break a}ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break}default:{h=_A(32)|0;c[q>>2]=h;c[q+8>>2]=-2147483616;c[q+4>>2]=16;n=h;m=310697;o=n+16|0;do{a[n>>0]=a[m>>0]|0;n=n+1|0;m=m+1|0}while((n|0)<(o|0));a[h+16>>0]=0;f=r+4|0;g=_A(12)|0;c[r>>2]=g;u=g+12|0;c[r+8>>2]=u;cB(g,q);c[f>>2]=u;gq(d,r,0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);$A(h);f=1}}while(0);if((v|0)==95){c[h+32>>2]=2;c[h>>2]=288972;v=h+36|0;c[v>>2]=g;lB(f,y)|0;lB((c[v>>2]|0)+16|0,x)|0;c[u>>2]=h;ql(e,u);f=c[u>>2]|0;c[u>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);f=(eq(d,30)|0)==1&1}if((a[w+11>>0]|0)<0)$A(c[w>>2]|0)}else f=1;if((a[x+11>>0]|0)<0)$A(c[x>>2]|0);if((a[y+11>>0]|0)<0)$A(c[y>>2]|0)}y=f;aa=z;return y|0}function hr(d,e){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,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+144|0;r=u;q=u+100|0;n=u+72|0;t=u+56|0;s=u+40|0;j=u+96|0;m=u+92|0;p=u+68|0;i=u+52|0;if((eq(d,21)|0)==1){t=1;aa=u;return t|0}k=d+88|0;if(!(c[k>>2]|0)){Sp(r,c[d>>2]|0,d);g=c[k>>2]|0;c[k>>2]=g+1;f=d+92|0;g=d+16+(((c[f>>2]|0)+g&1)*36|0)|0;h=r;l=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(l|0))}else f=d+92|0;l=d+16+((c[f>>2]&1)*36|0)|0;c[n>>2]=c[l>>2];c[n+4>>2]=c[l+4>>2];c[n+8>>2]=c[l+8>>2];c[n+12>>2]=c[l+12>>2];c[n+16>>2]=c[l+16>>2];if((eq(d,22)|0)==1)f=1;else{c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;if((cq(d,0)|0)==110){h=d+92|0;f=c[h>>2]&1;g=d+16+(f*36|0)|0;l=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h>>2]=c[h>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;Wn(r,l,f);f=t+11|0;if((a[f>>0]|0)<0){a[c[t>>2]>>0]=0;c[t+4>>2]=0}else{a[t>>0]=0;a[f>>0]=0}pB(t);c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2]}c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;a:do if((kr(d,s,2)|0)==1)f=1;else{b:do if((cq(d,0)|0)==21?(cq(d,1)|0)==18:0){lr(d,e);h=_A(72)|0;g=a[t+11>>0]|0;f=g<<24>>24<0;i=f?c[t>>2]|0:t;g=f?c[t+4>>2]|0:g&255;f=h+4|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[h+28>>2]=2;c[h>>2]=289020;Wn(h+32|0,i,g);g=h+48|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;b[g+16>>1]=0;i=h;if(((((eq(d,21)|0)!=1?(eq(d,18)|0)!=1:0)?(Nq(d,f)|0)!=1:0)?(Nq(d,h+16|0)|0)!=1:0)?(eq(d,30)|0)!=1:0){do if((Eq(d,g)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,h+56|0)|0)==1)break;else f=1;else f=0;a[h+64>>0]=f;if((cq(d,0)|0)==31){f=d+92|0;p=d+16+((c[f>>2]&1)*36|0)|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[f>>2]=c[f>>2]&1^1;f=(c[k>>2]|0)+-1|0;c[k>>2]=f;a[h+65>>0]=1}else f=c[k>>2]|0;if(!f){Sp(r,c[d>>2]|0,d);g=c[k>>2]|0;c[k>>2]=g+1;f=d+92|0;g=d+16+(((c[f>>2]|0)+g&1)*36|0)|0;h=r;l=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(l|0))}else f=d+92|0;n=d+16+((c[f>>2]&1)*36|0)|0;f=_A(40)|0;c[f+4>>2]=0;c[f+8>>2]=0;p=f+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];c[p+8>>2]=c[n+8>>2];c[p+12>>2]=c[n+12>>2];c[p+16>>2]=c[n+16>>2];c[f+32>>2]=2;c[f>>2]=288972;c[f+36>>2]=i;c[j>>2]=f;ql(e,j);f=c[j>>2]|0;c[j>>2]=0;if(!f)break b;ma[c[(c[f>>2]|0)+4>>2]&255](f);break b}while(0);ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}else o=32;while(0);c:do if((o|0)==32){if((cq(d,0)|0)==21?(cq(d,1)|0)==10:0){j=d+92|0;i=d+16+((c[j>>2]&1)*36|0)|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;i=c[j>>2]&1^1;c[j>>2]=i;c[k>>2]=(c[k>>2]|0)+-1;i=d+16+(i*36|0)|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;j=_A(112)|0;c[j+4>>2]=0;c[j+8>>2]=0;i=j+12|0;c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];c[i+16>>2]=c[n+16>>2];c[j+32>>2]=8;c[j>>2]=287964;Wn(j+36|0,0,0);i=j+48|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;El(i,-1,r);a[j+84>>0]=0;f=j+88|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;k=j;g=(c[e+164>>2]|0)-(c[e+160>>2]|0)>>2;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;El(r,g,q);Hl(i,r)|0;Ml(r);c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;Nl(r,0,q);i=_A(80)|0;g=i+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[i+32>>2]=15;c[i>>2]=287916;g=i+40|0;h=r;l=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(l|0));h=j+92|0;g=c[h>>2]|0;if(g){c[i+8>>2]=g;f=g+4|0}c[f>>2]=i;c[h>>2]=i;f=j+96|0;c[f>>2]=(c[f>>2]|0)+1;f=i+12|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];c[f+16>>2]=c[n+16>>2];f=j+100|0;Hq(d,f)|0;if((eq(d,30)|0)==1){ma[c[(c[j>>2]|0)+4>>2]&255](j);f=1;break a}o=_A(80)|0;l=a[t+11>>0]|0;h=l<<24>>24<0;i=h?c[t>>2]|0:t;l=h?c[t+4>>2]|0:l&255;c[o+4>>2]=0;c[o+8>>2]=0;h=o+12|0;c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];c[h+8>>2]=c[n+8>>2];c[h+12>>2]=c[n+12>>2];c[h+16>>2]=c[n+16>>2];c[o+32>>2]=7;c[o>>2]=288908;Wn(o+40|0,i,l);l=o+56|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;b[l+16>>1]=0;n=((c[j+104>>2]|0)+65535-(c[f>>2]|0)|0)>>>16;f=l;c[f>>2]=n;c[f+4>>2]=0;f=o+64|0;c[f>>2]=n;c[f+4>>2]=0;a[o+72>>0]=1;c[m>>2]=o;vl(e,m);f=c[m>>2]|0;c[m>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);c[p>>2]=k;cl(e,p);f=c[p>>2]|0;c[p>>2]=0;if(!f)break;ma[c[(c[f>>2]|0)+4>>2]&255](f);break}h=_A(80)|0;p=a[t+11>>0]|0;o=p<<24>>24<0;g=o?c[t>>2]|0:t;p=o?c[t+4>>2]|0:p&255;c[h+4>>2]=0;c[h+8>>2]=0;o=h+12|0;c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];c[h+32>>2]=7;c[h>>2]=288908;Wn(h+40|0,g,p);p=h+56|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;b[p+16>>1]=0;g=h;do if((Eq(d,p)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,h+64|0)|0)==1)break;else f=1;else f=0;a[h+72>>0]=f;if((cq(d,0)|0)==31){p=d+92|0;o=d+16+((c[p>>2]&1)*36|0)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[p>>2]=c[p>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;a[h+73>>0]=1}c[i>>2]=g;vl(e,i);f=c[i>>2]|0;c[i>>2]=0;if(!f)break c;ma[c[(c[f>>2]|0)+4>>2]&255](f);break c}while(0);ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}while(0);g=((c[e+164>>2]|0)-(c[e+160>>2]|0)>>2)+-1|0;f=(c[e+36>>2]|0)+12|0;c[r>>2]=c[f>>2];c[r+4>>2]=c[f+4>>2];c[r+8>>2]=c[f+8>>2];c[r+12>>2]=c[f+12>>2];c[r+16>>2]=c[f+16>>2];f=c[s>>2]|0;if(f|0)do{El(q,g,r);Hl(f+52|0,q)|0;Ml(q);f=c[f+4>>2]|0}while((f|0)!=0);Al(e,s);f=(eq(d,30)|0)==1&1}while(0);g=c[s>>2]|0;if(g|0)do{s=g;g=c[g+4>>2]|0;ma[c[(c[s>>2]|0)+4>>2]&255](s)}while((g|0)!=0);if((a[t+11>>0]|0)<0)$A(c[t>>2]|0)}t=f;aa=u;return t|0}function ir(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;l=aa;aa=aa+96|0;i=l+60|0;h=l+40|0;k=l;j=l+36|0;if((eq(a,21)|0)==1){k=1;aa=l;return k|0}d=a+88|0;if(!(c[d>>2]|0)){Sp(i,c[a>>2]|0,a);e=c[d>>2]|0;c[d>>2]=e+1;d=a+92|0;e=a+16+(((c[d>>2]|0)+e&1)*36|0)|0;f=i;g=e+36|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0))}else d=a+92|0;g=a+16+((c[d>>2]&1)*36|0)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];if((eq(a,32)|0)==1)d=1;else{c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;El(k,-1,i);if((hq(a,k)|0)!=1?(eq(a,30)|0)!=1:0){d=_A(72)|0;Il(i,k);c[d+4>>2]=0;c[d+8>>2]=0;a=d+12|0;c[a>>2]=c[h>>2];c[a+4>>2]=c[h+4>>2];c[a+8>>2]=c[h+8>>2];c[a+12>>2]=c[h+12>>2];c[a+16>>2]=c[h+16>>2];c[d+32>>2]=9;c[d>>2]=288860;Il(d+36|0,i);c[j>>2]=d;Ml(i);wl(b,j);d=c[j>>2]|0;c[j>>2]=0;if(!d)d=0;else{ma[c[(c[d>>2]|0)+4>>2]&255](d);d=0}}else d=1;Ml(k)}k=d;aa=l;return k|0}function jr(d,e){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,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+160|0;t=w;s=w+120|0;o=w+96|0;v=w+80|0;u=w+64|0;k=w+116|0;g=w+40|0;n=w+92|0;q=w+76|0;j=w+60|0;if((eq(d,21)|0)==1){v=1;aa=w;return v|0}r=d+88|0;if(!(c[r>>2]|0)){Sp(t,c[d>>2]|0,d);h=c[r>>2]|0;c[r>>2]=h+1;f=d+92|0;h=d+16+(((c[f>>2]|0)+h&1)*36|0)|0;l=t;m=h+36|0;do{c[h>>2]=c[l>>2];h=h+4|0;l=l+4|0}while((h|0)<(m|0))}else f=d+92|0;m=d+16+((c[f>>2]&1)*36|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[o+16>>2]=c[m+16>>2];if((eq(d,33)|0)==1)f=1;else{c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;if((cq(d,0)|0)==110){l=d+92|0;f=c[l>>2]&1;i=d+16+(f*36|0)|0;m=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[l>>2]=c[l>>2]&1^1;c[r>>2]=(c[r>>2]|0)+-1;Wn(t,m,f);f=v+11|0;if((a[f>>0]|0)<0){a[c[v>>2]>>0]=0;c[v+4>>2]=0}else{a[v>>0]=0;a[f>>0]=0}pB(v);c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2]}c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;a:do if((kr(d,u,1)|0)==1)f=1;else{b:do if((cq(d,0)|0)==21?(cq(d,1)|0)==18:0){lr(d,e);h=_A(80)|0;f=a[v+11>>0]|0;g=f<<24>>24<0;i=g?c[v>>2]|0:v;f=g?c[v+4>>2]|0:f&255;g=h+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h+28>>2]=1;c[h>>2]=289036;Wn(h+32|0,i,f);f=h+48|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;b[f+16>>1]=0;i=h+72|0;c[i>>2]=-16;j=h;if(((((eq(d,21)|0)!=1?(eq(d,18)|0)!=1:0)?(Nq(d,g)|0)!=1:0)?(Nq(d,h+16|0)|0)!=1:0)?(eq(d,30)|0)!=1:0){do if((Eq(d,f)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,h+56|0)|0)==1)break;else f=1;else f=0;a[h+64>>0]=f;if((cq(d,0)|0)==31){q=d+92|0;o=d+16+((c[q>>2]&1)*36|0)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[q>>2]=c[q>>2]&1^1;c[r>>2]=(c[r>>2]|0)+-1;a[h+65>>0]=1}if((Mq(d,i)|0)==1){ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}if(!(c[r>>2]|0)){Sp(t,c[d>>2]|0,d);h=c[r>>2]|0;c[r>>2]=h+1;f=d+92|0;h=d+16+(((c[f>>2]|0)+h&1)*36|0)|0;l=t;m=h+36|0;do{c[h>>2]=c[l>>2];h=h+4|0;l=l+4|0}while((h|0)<(m|0))}else f=d+92|0;q=d+16+((c[f>>2]&1)*36|0)|0;f=_A(40)|0;c[f+4>>2]=0;c[f+8>>2]=0;r=f+12|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];c[r+16>>2]=c[q+16>>2];c[f+32>>2]=2;c[f>>2]=288972;c[f+36>>2]=j;c[k>>2]=f;ql(e,k);f=c[k>>2]|0;c[k>>2]=0;if(!f)break b;ma[c[(c[f>>2]|0)+4>>2]&255](f);break b}while(0);ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}else p=33;while(0);c:do if((p|0)==33){if((cq(d,0)|0)!=111){i=_A(88)|0;q=a[v+11>>0]|0;g=q<<24>>24<0;h=g?c[v>>2]|0:v;q=g?c[v+4>>2]|0:q&255;c[i+4>>2]=0;c[i+8>>2]=0;g=i+12|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[i+32>>2]=5;c[i>>2]=288924;Wn(i+40|0,h,q);q=i+56|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;b[q+16>>1]=0;h=i+80|0;c[h>>2]=-16;g=i;do if((Eq(d,q)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,i+64|0)|0)==1)break;else f=1;else f=0;a[i+72>>0]=f;if((cq(d,0)|0)==31){q=d+92|0;p=d+16+((c[q>>2]&1)*36|0)|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[q>>2]=c[q>>2]&1^1;c[r>>2]=(c[r>>2]|0)+-1;a[i+73>>0]=1}if((Mq(d,h)|0)==1){ma[c[(c[i>>2]|0)+4>>2]&255](i);f=1;break a}c[j>>2]=g;yl(e,j);f=c[j>>2]|0;c[j>>2]=0;if(!f)break c;ma[c[(c[f>>2]|0)+4>>2]&255](f);break c}while(0);ma[c[(c[i>>2]|0)+4>>2]&255](i);f=1;break a}if(((Mq(d,s)|0)!=1?(eq(d,21)|0)!=1:0)?(eq(d,11)|0)!=1:0){j=_A(116)|0;c[j+4>>2]=0;c[j+8>>2]=0;i=j+12|0;c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];c[i+16>>2]=c[o+16>>2];c[j+32>>2]=6;c[j>>2]=287980;Wn(j+36|0,0,0);i=j+48|0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(i,-1,t);a[j+84>>0]=0;f=j+92|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;k=j;h=(c[e+140>>2]|0)-(c[e+136>>2]|0)>>2;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(t,h,g);Hl(i,t)|0;Ml(t);c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;Nl(t,0,g);i=_A(80)|0;h=i+4|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+24>>2]=0;c[i+32>>2]=15;c[i>>2]=287916;h=i+40|0;l=t;m=h+40|0;do{c[h>>2]=c[l>>2];h=h+4|0;l=l+4|0}while((h|0)<(m|0));h=j+96|0;g=c[h>>2]|0;if(g){c[i+8>>2]=g;f=g+4|0}c[f>>2]=i;c[h>>2]=i;f=j+100|0;c[f>>2]=(c[f>>2]|0)+1;f=i+12|0;c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];f=j+104|0;if(Jq(d,f)|0?(eq(d,30)|0)!=1:0){r=_A(88)|0;p=a[v+11>>0]|0;l=p<<24>>24<0;m=l?c[v>>2]|0:v;p=l?c[v+4>>2]|0:p&255;c[r+4>>2]=0;c[r+8>>2]=0;l=r+12|0;c[l>>2]=c[o>>2];c[l+4>>2]=c[o+4>>2];c[l+8>>2]=c[o+8>>2];c[l+12>>2]=c[o+12>>2];c[l+16>>2]=c[o+16>>2];c[r+32>>2]=5;c[r>>2]=288924;Wn(r+40|0,m,p);o=r+56|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;b[o+16>>1]=0;p=((c[j+108>>2]|0)-(c[f>>2]|0)|0)/40|0;f=o;c[f>>2]=p;c[f+4>>2]=0;f=r+64|0;c[f>>2]=p;c[f+4>>2]=0;a[r+72>>0]=1;c[r+80>>2]=c[s>>2];c[n>>2]=r;yl(e,n);f=c[n>>2]|0;c[n>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);c[q>>2]=k;el(e,q);f=c[q>>2]|0;c[q>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);break}ma[c[(c[j>>2]|0)+4>>2]&255](j);f=1;break a}f=1;break a}while(0);g=((c[e+140>>2]|0)-(c[e+136>>2]|0)>>2)+-1|0;f=(c[e+36>>2]|0)+12|0;c[t>>2]=c[f>>2];c[t+4>>2]=c[f+4>>2];c[t+8>>2]=c[f+8>>2];c[t+12>>2]=c[f+12>>2];c[t+16>>2]=c[f+16>>2];f=c[u>>2]|0;if(f|0)do{El(s,g,t);Hl(f+52|0,s)|0;Ml(s);f=c[f+4>>2]|0}while((f|0)!=0);Al(e,u);f=(eq(d,30)|0)==1&1}while(0);g=c[u>>2]|0;if(g|0)do{u=g;g=c[g+4>>2]|0;ma[c[(c[u>>2]|0)+4>>2]&255](u)}while((g|0)!=0);if((a[v+11>>0]|0)<0)$A(c[v>>2]|0)}v=f;aa=w;return v|0}function kr(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,l=0,m=0,n=0;m=aa;aa=aa+48|0;j=m;if((cq(a,0)|0)!=21){a=0;aa=m;return a|0}l=a+88|0;h=a+92|0;i=b+4|0;k=b+8|0;while(1){if((cq(a,1)|0)!=14){e=0;f=16;break}if((eq(a,21)|0)==1){e=1;f=16;break}if(!(c[l>>2]|0)){Sp(j,c[a>>2]|0,a);e=c[l>>2]|0;c[l>>2]=e+1;e=a+16+(((c[h>>2]|0)+e&1)*36|0)|0;f=j;g=e+36|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0))}n=a+16+((c[h>>2]&1)*36|0)|0;g=_A(88)|0;c[g+4>>2]=0;f=g+8|0;c[f>>2]=0;e=g+12|0;c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];c[e+16>>2]=c[n+16>>2];c[g+32>>2]=3;c[g>>2]=288876;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(g+52|0,-1,j);c[g+48>>2]=d;if((eq(a,14)|0)==1){f=8;break}if((Nq(a,e)|0)==1){f=10;break}if((eq(a,30)|0)==1){f=12;break}e=c[i>>2]|0;if(!e)e=b;else{c[f>>2]=e;e=e+4|0}c[e>>2]=g;c[i>>2]=g;c[k>>2]=(c[k>>2]|0)+1;if((cq(a,0)|0)!=21){e=0;f=16;break}}if((f|0)==8){ma[c[(c[g>>2]|0)+4>>2]&255](g);n=1;aa=m;return n|0}else if((f|0)==10){ma[c[(c[g>>2]|0)+4>>2]&255](g);n=1;aa=m;return n|0}else if((f|0)==12){ma[c[(c[g>>2]|0)+4>>2]&255](g);n=1;aa=m;return n|0}else if((f|0)==16){aa=m;return e|0}return 0}
+function lr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;g=i+4|0;h=i;if((((((c[b+80>>2]|0)-(c[b+76>>2]|0)>>2|0)==(c[b+48>>2]|0)?((c[b+140>>2]|0)-(c[b+136>>2]|0)>>2|0)==(c[b+52>>2]|0):0)?((c[b+164>>2]|0)-(c[b+160>>2]|0)>>2|0)==(c[b+56>>2]|0):0)?((c[b+92>>2]|0)-(c[b+88>>2]|0)>>2|0)==(c[b+60>>2]|0):0)?((c[b+68>>2]|0)-(c[b+64>>2]|0)>>2|0)==(c[b+44>>2]|0):0){aa=i;return}b=a+88|0;if(!(c[b>>2]|0)){Sp(g,c[a>>2]|0,a);d=c[b>>2]|0;c[b>>2]=d+1;b=a+92|0;d=a+16+(((c[b>>2]|0)+d&1)*36|0)|0;e=g;f=d+36|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0))}else b=a+92|0;f=a+16+((c[b>>2]&1)*36|0)|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];c[g+16>>2]=c[f+16>>2];aq(a,g,310644,h);aa=i;return}function mr(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,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+96|0;l=w+60|0;v=w+48|0;t=w+44|0;q=w+24|0;r=w;if((cq(b,0)|0)!=21){v=0;aa=w;return v|0}o=b+92|0;s=b+88|0;k=e+4|0;n=e+8|0;u=v+11|0;m=v+4|0;p=r+20|0;while(1){if((cq(b,1)|0)!=(d|0)){h=0;i=30;break}j=b+16+((c[o>>2]&1)*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;j=c[o>>2]&1^1;c[o>>2]=j;c[s>>2]=(c[s>>2]|0)+-1;j=b+16+(j*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[o>>2]=c[o>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(b,0)|0)==110){c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;if(!(c[s>>2]|0)){Sp(l,c[b>>2]|0,b);h=c[s>>2]|0;c[s>>2]=h+1;h=b+16+(((c[o>>2]|0)+h&1)*36|0)|0;i=l;j=h+36|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}j=b+16+((c[o>>2]&1)*36|0)|0;c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];c[q+16>>2]=c[j+16>>2];if((cq(b,0)|0)==110){j=c[o>>2]&1;h=b+16+(j*36|0)|0;i=c[b+16+(j*36|0)+24>>2]|0;j=c[b+16+(j*36|0)+28>>2]|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[o>>2]=c[o>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(l,i,j);if((a[u>>0]|0)<0){a[c[v>>2]>>0]=0;c[m>>2]=0}else{a[v>>0]=0;a[u>>0]=0}pB(v);c[v>>2]=c[l>>2];c[v+4>>2]=c[l+4>>2];c[v+8>>2]=c[l+8>>2]}if((Lq(b,t)|0)==1){i=14;break}h=((c[k>>2]|0)-(c[e>>2]|0)>>2)+g|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];c[r+16>>2]=c[q+16>>2];c[p>>2]=h;Og(l,f,v,r);Gg(f,c[l>>2]|0);h=c[k>>2]|0;if((h|0)==(c[n>>2]|0))fo(e,t);else{c[h>>2]=c[t>>2];c[k>>2]=h+4}if((a[u>>0]|0)<0)$A(c[v>>2]|0)}else if((cq(b,0)|0)==111)do{i=c[o>>2]&1;h=b+16+(i*36|0)|0;i=c[b+16+(i*36|0)+24>>2]|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[o>>2]=c[o>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;c[l>>2]=i;h=c[k>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[h>>2]=i;c[k>>2]=h+4}else yq(e,l)}while((cq(b,0)|0)==111);if((eq(b,30)|0)==1){h=1;i=30;break}if((cq(b,0)|0)!=21){h=0;i=30;break}}if((i|0)==14){if((a[u>>0]|0)<0)$A(c[v>>2]|0);v=1;aa=w;return v|0}else if((i|0)==30){aa=w;return h|0}return 0}function nr(b,d){b=b|0;d=d|0;var 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;p=aa;aa=aa+96|0;h=p+60|0;l=p+48|0;e=p;if((cq(b,0)|0)==21?(cq(b,1)|0)==24:0){f=b+92|0;n=b+16+((c[f>>2]&1)*36|0)|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;n=c[f>>2]&1^1;c[f>>2]=n;g=b+88|0;c[g>>2]=(c[g>>2]|0)+-1;n=b+16+(n*36|0)|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1;a[d+16>>0]=1;if((Lq(b,d+12|0)|0)==1){o=1;aa=p;return o|0}j=e+4|0;c[j>>2]=0;c[j+4>>2]=50331648;a[e>>0]=a[330980]|0;a[e+1>>0]=a[330981]|0;a[e+2>>0]=a[330982]|0;a[e+3>>0]=0;j=e+12|0;k=e+16|0;c[k>>2]=0;c[k+4>>2]=50331648;a[j>>0]=a[330976]|0;a[j+1>>0]=a[330977]|0;a[j+2>>0]=a[330978]|0;a[j+3>>0]=0;k=e+24|0;r=e+28|0;c[r>>2]=0;c[r+4>>2]=50331648;a[k>>0]=a[330972]|0;a[k+1>>0]=a[330973]|0;a[k+2>>0]=a[330974]|0;a[k+3>>0]=0;r=e+36|0;m=e+40|0;c[m>>2]=0;c[m+4>>2]=50331648;a[r>>0]=a[330968]|0;a[r+1>>0]=a[330969]|0;a[r+2>>0]=a[330970]|0;a[r+3>>0]=0;m=l+4|0;n=_A(48)|0;c[l>>2]=n;q=n+48|0;c[l+8>>2]=q;cB(n,e);i=n+12|0;cB(i,j);j=n+24|0;cB(j,k);k=n+36|0;cB(k,r);c[m>>2]=q;if((cq(b,0)|0)==21){r=b+16+((c[f>>2]&1)*36|0)|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[f>>2]=c[f>>2]&1^1;r=(c[g>>2]|0)+-1|0;c[g>>2]=r;if(!r){Sp(h,c[b>>2]|0,b);e=c[g>>2]|0;c[g>>2]=e+1;g=b+16+(((c[f>>2]|0)+e&1)*36|0)|0;e=h;f=g+36|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(f|0))}gq(b,l,0);e=1}else e=0;if((a[n+47>>0]|0)<0)$A(c[k>>2]|0);if((a[n+35>>0]|0)<0)$A(c[j>>2]|0);if((a[n+23>>0]|0)<0)$A(c[i>>2]|0);if((a[n+11>>0]|0)<0)$A(c[n>>2]|0);c[m>>2]=n;$A(n);if(e){r=1;aa=p;return r|0}if((eq(b,30)|0)==1){r=1;aa=p;return r|0}}else o=12;if((o|0)==12?(Lq(b,d+12|0)|0)==1:0){r=1;aa=p;return r|0}r=0;aa=p;return r|0}function or(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+32|0;h=j+12|0;i=j;if((eq(b,21)|0)==1){aa=j;return 1}switch(cq(b,0)|0){case 15:{e=0;break}case 33:{e=1;break}case 22:{e=2;break}case 17:{e=3;break}case 13:{e=4;break}default:{g=_A(32)|0;c[i>>2]=g;c[i+8>>2]=-2147483616;c[i+4>>2]=16;e=g;d=310697;f=e+16|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));a[g+16>>0]=0;e=h+4|0;d=_A(12)|0;c[h>>2]=d;f=d+12|0;c[h+8>>2]=f;cB(d,i);c[e>>2]=f;gq(b,h,0);if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[e>>2]=d;$A(d);$A(g);aa=j;return 1}}c[d+12>>2]=e;i=b+92|0;h=b+16+((c[i>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[i>>2]=c[i>>2]&1^1;i=b+88|0;c[i>>2]=(c[i>>2]|0)+-1;if((hq(b,d+16|0)|0)==1){aa=j;return 1}else{b=(eq(b,30)|0)==1&1;aa=j;return b|0}return 0}function pr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b+12|0;if(c[j>>2]|0){h=b+8|0;e=c[h>>2]|0;if(e|0)do{f=e;e=c[e>>2]|0;g=f+8|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);$A(f)}while((e|0)!=0);c[h>>2]=0;e=c[b+4>>2]|0;if(e|0){f=0;do{c[(c[b>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)!=(e|0))}c[j>>2]=0}i=c[d>>2]|0;c[d>>2]=0;e=c[b>>2]|0;c[b>>2]=i;if(e|0)$A(e);i=d+4|0;f=b+4|0;c[f>>2]=c[i>>2];c[i>>2]=0;i=d+12|0;g=c[i>>2]|0;c[j>>2]=g;c[b+16>>2]=c[d+16>>2];d=d+8|0;e=c[d>>2]|0;h=b+8|0;c[h>>2]=e;if(!g)return;e=c[e+4>>2]|0;f=c[f>>2]|0;g=f+-1|0;if(g&f){if(e>>>0>=f>>>0)e=(e>>>0)%(f>>>0)|0}else e=g&e;c[(c[b>>2]|0)+(e<<2)>>2]=h;c[d>>2]=0;c[i>>2]=0;return}function qr(b,d){b=b|0;d=d|0;var 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;s=aa;aa=aa+80|0;q=s+44|0;o=s+24|0;r=s+12|0;i=s;if((eq(b,21)|0)==1){r=1;aa=s;return r|0}g=b+88|0;if(!(c[g>>2]|0)){Sp(q,c[b>>2]|0,b);k=c[g>>2]|0;c[g>>2]=k+1;e=b+92|0;k=b+16+(((c[e>>2]|0)+k&1)*36|0)|0;f=q;l=k+36|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(l|0))}else e=b+92|0;l=b+16+((c[e>>2]&1)*36|0)|0;c[o>>2]=c[l>>2];c[o+4>>2]=c[l+4>>2];c[o+8>>2]=c[l+8>>2];c[o+12>>2]=c[l+12>>2];c[o+16>>2]=c[l+16>>2];if((eq(b,23)|0)==1)e=1;else{c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;if((cq(b,0)|0)==110){k=b+92|0;e=c[k>>2]&1;j=b+16+(e*36|0)|0;l=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[k>>2]=c[k>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1;Wn(q,l,e);e=r+11|0;if((a[e>>0]|0)<0){a[c[r>>2]>>0]=0;c[r+4>>2]=0}else{a[r>>0]=0;a[e>>0]=0}pB(r);c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2]}a:do switch(cq(b,0)|0){case 9:{j=b+92|0;h=b+16+((c[j>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1;c[q>>2]=0;j=q+4|0;c[j>>2]=0;h=q+8|0;c[h>>2]=0;if(!(Hq(b,q)|0)){e=c[q>>2]|0;if(e|0){c[j>>2]=e;$A(e)}e=1;break a}i=_A(52)|0;c[i+4>>2]=1;c[i>>2]=290400;e=i+8|0;k=e;l=k+44|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));lB(i+28|0,r)|0;c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];c[e+12>>2]=c[o+12>>2];c[e+16>>2]=c[o+16>>2];g=i+40|0;e=c[g>>2]|0;if(!e){e=i+44|0;f=i+48|0}else{p=i+44|0;c[p>>2]=e;$A(e);f=i+48|0;c[f>>2]=0;c[p>>2]=0;c[g>>2]=0;e=p}c[g>>2]=c[q>>2];c[e>>2]=c[j>>2];c[f>>2]=c[h>>2];c[h>>2]=0;c[j>>2]=0;c[q>>2]=0;e=c[d>>2]|0;c[d>>2]=i;if(e|0?(ma[c[(c[e>>2]|0)+4>>2]&255](e),n=c[q>>2]|0,n|0):0){c[j>>2]=n;$A(n)}p=46;break}case 27:{j=b+92|0;h=b+16+((c[j>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1;c[q>>2]=0;j=q+4|0;c[j>>2]=0;h=q+8|0;c[h>>2]=0;if(!(Hq(b,q)|0)){e=c[q>>2]|0;if(e|0){c[j>>2]=e;$A(e)}e=1;break a}i=_A(52)|0;c[i+4>>2]=2;c[i>>2]=290420;e=i+8|0;k=e;l=k+44|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));lB(i+28|0,r)|0;c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];c[e+12>>2]=c[o+12>>2];c[e+16>>2]=c[o+16>>2];g=i+40|0;e=c[g>>2]|0;if(!e){e=i+44|0;f=i+48|0}else{p=i+44|0;c[p>>2]=e;$A(e);f=i+48|0;c[f>>2]=0;c[p>>2]=0;c[g>>2]=0;e=p}c[g>>2]=c[q>>2];c[e>>2]=c[j>>2];c[f>>2]=c[h>>2];c[h>>2]=0;c[j>>2]=0;c[q>>2]=0;e=c[d>>2]|0;c[d>>2]=i;if(e|0?(ma[c[(c[e>>2]|0)+4>>2]&255](e),m=c[q>>2]|0,m|0):0){c[j>>2]=m;$A(m)}p=46;break}default:{h=_A(384)|0;f=h;c[f>>2]=0;c[f+4>>2]=0;c[h>>2]=290440;f=h+8|0;uC(f|0,0,212)|0;c[h+220>>2]=1065353216;e=h+224|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+240>>2]=1065353216;e=h+244|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+260>>2]=1065353216;e=h+264|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+280>>2]=1065353216;e=h+284|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+300>>2]=1065353216;e=h+304|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+320>>2]=1065353216;e=h+324|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+340>>2]=1065353216;e=h+344|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+360>>2]=1065353216;e=h+364|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+380>>2]=1065353216;lB(h+28|0,r)|0;c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];o=cq(b,0)|0;e=cq(b,1)|0;b:do if((o|0)==21){switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break;default:{p=38;break b}}if((Rq(b,f)|0)==1){ma[c[(c[h>>2]|0)+4>>2]&255](h);e=1;break a}}else p=38;while(0);if((p|0)==38?(cq(b,0)|0)!=30:0){if((cq(b,0)|0)==21){d=b+92|0;o=b+16+((c[d>>2]&1)*36|0)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[d>>2]=c[d>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1}g=_A(16)|0;c[i>>2]=g;c[i+8>>2]=-2147483632;c[i+4>>2]=14;k=g;f=310570;l=k+14|0;do{a[k>>0]=a[f>>0]|0;k=k+1|0;f=f+1|0}while((k|0)<(l|0));a[g+14>>0]=0;e=q+4|0;f=_A(12)|0;c[q>>2]=f;d=f+12|0;c[q+8>>2]=d;cB(f,i);c[e>>2]=d;gq(b,q,0);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g);ma[c[(c[h>>2]|0)+4>>2]&255](h);e=1;break a}e=c[d>>2]|0;c[d>>2]=h;if(!e)p=46;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);p=46}}}while(0);if((p|0)==46)e=(eq(b,30)|0)==1&1;if((a[r+11>>0]|0)<0)$A(c[r>>2]|0)}r=e;aa=s;return r|0}function rr(a){a=a|0;c[a>>2]=290384;db(a+8|0);return}function sr(a){a=a|0;c[a>>2]=290384;db(a+8|0);$A(a);return}function tr(a){a=a|0;c[a>>2]=290440;db(a+8|0);return}function ur(a){a=a|0;c[a>>2]=290440;db(a+8|0);$A(a);return}function vr(a){a=a|0;return a+8|0}function wr(b){b=b|0;var d=0;c[b>>2]=290420;d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=b+28|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function xr(b){b=b|0;var d=0;c[b>>2]=290420;d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=b+28|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function yr(a){a=a|0;return a+8|0}function zr(b){b=b|0;var d=0;c[b>>2]=290400;d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=b+28|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ar(b){b=b|0;var d=0;c[b>>2]=290400;d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=b+28|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Br(a){a=a|0;return a+8|0}function Cr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+64|0;l=p+24|0;m=p;o=_A(32)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[o+28>>2]=1065353216;n=o;j=cq(b,0)|0;e=cq(b,1)|0;a:do if((j|0)==21){switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break;default:{k=15;break a}}h=_A(384)|0;i=h;c[i>>2]=0;c[i+4>>2]=0;c[h>>2]=290384;uC(h+8|0,0,212)|0;c[h+220>>2]=1065353216;i=h+224|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+240>>2]=1065353216;i=h+244|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+260>>2]=1065353216;i=h+264|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+280>>2]=1065353216;i=h+284|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+300>>2]=1065353216;i=h+304|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+320>>2]=1065353216;i=h+324|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+340>>2]=1065353216;i=h+344|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+360>>2]=1065353216;i=h+364|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+380>>2]=1065353216;i=h;c[m>>2]=i;e=b+88|0;if(!(c[e>>2]|0)){Sp(l,c[b>>2]|0,b);f=c[e>>2]|0;c[e>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=l;j=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(j|0));g=m}else{g=m;e=b+92|0}tC(h+8|0,b+16+((c[e>>2]&1)*36|0)|0,20)|0;if((Rq(b,h+8|0)|0)==1){e=c[g>>2]|0;c[g>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);break}f=o+4|0;e=c[f>>2]|0;if(e>>>0>=(c[o+8>>2]|0)>>>0){Dr(o,m);e=c[g>>2]|0;c[g>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e)}else{c[e>>2]=i;c[f>>2]=e+4;c[g>>2]=0}k=23}else k=15;while(0);b:do if((k|0)==15){j=cq(b,0)|0;e=cq(b,1)|0;c:do if((j|0)==21){switch(e|0){case 28:case 23:case 19:case 16:case 8:case 7:case 6:case 5:case 4:case 3:case 2:case 1:break;default:break c}if((Er(b,o,o)|0)==1)break b;else{k=23;break b}}while(0);if((cq(b,0)|0)==21){k=b+92|0;j=b+16+((c[k>>2]&1)*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[k>>2]=c[k>>2]&1^1;k=b+88|0;c[k>>2]=(c[k>>2]|0)+-1}i=_A(16)|0;c[m>>2]=i;c[m+8>>2]=-2147483632;c[m+4>>2]=14;f=i;g=310570;j=f+14|0;do{a[f>>0]=a[g>>0]|0;f=f+1|0;g=g+1|0}while((f|0)<(j|0));a[i+14>>0]=0;h=m+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;a[h+11>>0]=9;f=h;g=311214;j=f+9|0;do{a[f>>0]=a[g>>0]|0;f=f+1|0;g=g+1|0}while((f|0)<(j|0));a[h+9>>0]=0;f=l+4|0;g=_A(24)|0;c[l>>2]=g;k=g+24|0;c[l+8>>2]=k;cB(g,m);e=g+12|0;cB(e,h);c[f>>2]=k;gq(b,l,0);if((a[g+23>>0]|0)<0)$A(c[e>>2]|0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);$A(i);k=23}while(0);if(((k|0)==23?(eq(b,12)|0)!=1:0)?(b=c[b+8>>2]|0,(c[b+4>>2]|0)==(c[b>>2]|0)):0){i=c[d>>2]|0;c[d>>2]=n;if(!i){o=0;aa=p;return o|0}e=c[i+20>>2]|0;if(e|0)do{f=e;e=c[e>>2]|0;g=f+8|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);$A(f)}while((e|0)!=0);o=i+12|0;e=c[o>>2]|0;c[o>>2]=0;if(e|0)$A(e);g=c[i>>2]|0;if(g|0){h=i+4|0;e=c[h>>2]|0;if((e|0)==(g|0))e=g;else{do{e=e+-4|0;f=c[e>>2]|0;c[e>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((e|0)!=(g|0));e=c[i>>2]|0}c[h>>2]=g;$A(e)}$A(i);o=0;aa=p;return o|0}e=c[o+20>>2]|0;if(e|0)do{f=e;e=c[e>>2]|0;g=f+8|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);$A(f)}while((e|0)!=0);d=o+12|0;e=c[d>>2]|0;c[d>>2]=0;if(e|0)$A(e);g=c[o>>2]|0;if(g|0){h=o+4|0;e=c[h>>2]|0;if((e|0)==(g|0))e=g;else{do{e=e+-4|0;f=c[e>>2]|0;c[e>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((e|0)!=(g|0));e=c[o>>2]|0}c[h>>2]=g;$A(e)}$A(o);o=1;aa=p;return o|0}function Dr(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;k=a+4|0;d=c[a>>2]|0;j=(c[k>>2]|0)-d>>2;e=j+1|0;if(e>>>0>1073741823)HB();l=a+8|0;h=(c[l>>2]|0)-d|0;d=h>>1;d=h>>2>>>0<536870911?(d>>>0<e>>>0?e:d):1073741823;do if(d)if(d>>>0>1073741823)U();else{i=_A(d<<2)|0;break}else i=0;while(0);e=i+(j<<2)|0;h=i+(d<<2)|0;g=c[b>>2]|0;c[b>>2]=0;c[e>>2]=g;g=e+4|0;d=c[a>>2]|0;f=d;b=c[k>>2]|0;if((b|0)!=(d|0)){f=(b+-4-f|0)>>>2;do{e=e+-4|0;b=b+-4|0;m=c[b>>2]|0;c[b>>2]=0;c[e>>2]=m}while((b|0)!=(d|0));e=i+(j+-1-f<<2)|0;f=c[a>>2]|0;d=c[k>>2]|0}c[a>>2]=e;c[k>>2]=g;c[l>>2]=h;b=f;if((d|0)!=(b|0))do{d=d+-4|0;e=c[d>>2]|0;c[d>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e)}while((d|0)!=(b|0));if(!f)return;$A(f);return}function Er(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,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=aa;aa=aa+96|0;p=x+76|0;v=x;t=x+40|0;o=x+20|0;r=x+8|0;w=x+4|0;u=cq(b,0)|0;f=cq(b,1)|0;if((u|0)!=21){w=0;aa=x;return w|0}l=e+4|0;n=e+8|0;q=b+92|0;s=b+88|0;u=t+20|0;m=r+11|0;a:while(1){switch(f|0){case 28:case 23:case 19:case 16:case 8:case 7:case 6:case 5:case 4:case 3:case 2:case 1:break;default:{f=0;g=23;break a}}c[w>>2]=0;do if(!(Fr(b,d,w)|0)){f=c[l>>2]|0;if(f>>>0<(c[n>>2]|0)>>>0){c[f>>2]=c[w>>2];c[l>>2]=f+4;c[w>>2]=0;break}else{Gr(e,w);g=20;break}}else{j=0;b:while(1){i=cq(b,0)|0;f=cq(b,1)|0;if((i|0)==21)switch(f|0){case 28:case 23:case 19:case 16:case 8:case 7:case 6:case 5:case 4:case 3:case 2:case 1:break b;default:{}}f=b+16+((c[q>>2]&1)*36|0)|0;g=t;h=f;i=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|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[q>>2]=c[q>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((c[u>>2]|0)==108?(c[o>>2]=c[t>>2],c[o+4>>2]=c[t+4>>2],c[o+8>>2]=c[t+8>>2],c[o+12>>2]=c[t+12>>2],c[o+16>>2]=c[t+16>>2],qy(r,t),c[v>>2]=(a[m>>0]|0)<0?c[r>>2]|0:r,c[p>>2]=c[o>>2],c[p+4>>2]=c[o+4>>2],c[p+8>>2]=c[o+8>>2],c[p+12>>2]=c[o+12>>2],c[p+16>>2]=c[o+16>>2],aq(b,p,309788,v),(a[m>>0]|0)<0):0)$A(c[r>>2]|0);j=j+1|0;if(j>>>0>=10){g=17;break a}}g=20}while(0);if((g|0)==20?(g=0,k=c[w>>2]|0,c[w>>2]=0,k|0):0)ma[c[(c[k>>2]|0)+4>>2]&255](k);j=cq(b,0)|0;f=cq(b,1)|0;if((j|0)!=21){f=0;g=23;break}}if((g|0)==17){f=c[w>>2]|0;c[w>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);w=1;aa=x;return w|0}else if((g|0)==23){aa=x;return f|0}return 0}function Fr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;do switch(cq(a,1)|0){case 1:{d=Hr(a,d)|0;return d|0}case 2:{d=Ir(a,d)|0;return d|0}case 3:{d=Jr(a,d)|0;return d|0}case 4:{d=Kr(a,d)|0;return d|0}case 5:{d=Lr(a,d)|0;return d|0}case 6:{d=Mr(a,d)|0;return d|0}case 7:{d=Nr(a,d)|0;return d|0}case 8:{d=Or(a,d)|0;return d|0}case 19:case 16:{e=_A(12)|0;c[e+4>>2]=1;c[e>>2]=290460;b=e+8|0;c[b>>2]=0;if((Pr(a,b)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);d=1;return d|0}b=c[d>>2]|0;c[d>>2]=e;if(!b){d=0;return d|0}ma[c[(c[b>>2]|0)+4>>2]&255](b);d=0;return d|0}case 23:{d=Pq(a,b,d)|0;return d|0}case 28:{d=Qr(a,d)|0;return d|0}default:{d=1;return d|0}}while(0);return 0}function Gr(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;k=a+4|0;d=c[a>>2]|0;j=(c[k>>2]|0)-d>>2;e=j+1|0;if(e>>>0>1073741823)HB();l=a+8|0;h=(c[l>>2]|0)-d|0;d=h>>1;d=h>>2>>>0<536870911?(d>>>0<e>>>0?e:d):1073741823;do if(d)if(d>>>0>1073741823)U();else{i=_A(d<<2)|0;break}else i=0;while(0);e=i+(j<<2)|0;h=i+(d<<2)|0;g=c[b>>2]|0;c[b>>2]=0;c[e>>2]=g;g=e+4|0;d=c[a>>2]|0;f=d;b=c[k>>2]|0;if((b|0)!=(d|0)){f=(b+-4-f|0)>>>2;do{e=e+-4|0;b=b+-4|0;m=c[b>>2]|0;c[b>>2]=0;c[e>>2]=m}while((b|0)!=(d|0));e=i+(j+-1-f<<2)|0;f=c[a>>2]|0;d=c[k>>2]|0}c[a>>2]=e;c[k>>2]=g;c[l>>2]=h;b=f;if((d|0)!=(b|0))do{d=d+-4|0;e=c[d>>2]|0;c[d>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e)}while((d|0)!=(b|0));if(!f)return;$A(f);return}function Hr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,1)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=11;c[d>>2]=290668;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((Pr(a,e)|0)!=1?(Nq(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Ir(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,2)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=4;c[d>>2]=290652;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((qr(a,e)|0)!=1?(Nq(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Jr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,3)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=3;c[d>>2]=290636;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((qr(a,e)|0)!=1?(Nq(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Kr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,4)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=7;c[d>>2]=290620;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((Pr(a,e)|0)!=1?(Tr(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Lr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,5)|0)==1){b=1;return b|0}d=_A(12)|0;c[d+4>>2]=9;c[d>>2]=290604;e=d+8|0;c[e>>2]=0;if((Pr(a,e)|0)!=1?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Mr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,6)|0)==1){b=1;return b|0}d=_A(12)|0;c[d+4>>2]=8;c[d>>2]=290588;e=d+8|0;c[e>>2]=0;if((Pr(a,e)|0)!=1?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Nr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1)return 1;if((eq(a,7)|0)==1)return 1;if((cq(a,0)|0)==21?(cq(a,1)|0)==23:0){e=_A(24)|0;c[e+4>>2]=6;c[e>>2]=290556;d=e+8|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;if((qr(a,d)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);return 1}if((Nq(a,e+12|0)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);return 1}d=c[b>>2]|0;c[b>>2]=e;if(!d){a=eq(a,30)|0;a=(a|0)==1;a=a&1;return a|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);a=eq(a,30)|0;a=(a|0)==1;a=a&1;return a|0}e=_A(24)|0;c[e+4>>2]=10;c[e>>2]=290572;d=e+8|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;if((Pr(a,d)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);return 1}if((Nq(a,e+12|0)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);return 1}d=c[b>>2]|0;c[b>>2]=e;if(!d){a=eq(a,30)|0;a=(a|0)==1;a=a&1;return a|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);a=eq(a,30)|0;a=(a|0)==1;a=a&1;return a|0}function Or(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,8)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=5;c[d>>2]=290540;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((qr(a,e)|0)!=1?(Nq(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Pr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+160|0;n=p+116|0;m=p+24|0;l=p+80|0;k=p+44|0;j=p;if((eq(b,21)|0)==1){b=1;aa=p;return b|0}i=b+88|0;if(!(c[i>>2]|0)){Sp(n,c[b>>2]|0,b);f=c[i>>2]|0;c[i>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=n;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;h=b+16+((c[e>>2]&1)*36|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];a:do switch(cq(b,0)|0){case 19:{h=b+92|0;g=b+16+((c[h>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h>>2]=c[h>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;h=_A(88)|0;c[h>>2]=290492;g=h+4|0;c[g>>2]=c[m>>2];c[g+4>>2]=c[m+4>>2];c[g+8>>2]=c[m+8>>2];c[g+12>>2]=c[m+12>>2];c[g+16>>2]=c[m+16>>2];g=h+24|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;El(g,-1,n);f=h+60|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[h>>2]=290508;e=h+76|0;c[e>>2]=0;c[h+80>>2]=0;c[h+84>>2]=0;El(l,c[b+4>>2]|0,m);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(g,l)|0;else hq(b,g)|0;Ml(l);if((Nq(b,f)|0)==1){ma[c[(c[h>>2]|0)+4>>2]&255](h);e=1;break a}if((Tr(b,e)|0)==1){ma[c[(c[h>>2]|0)+4>>2]&255](h);e=1;break a}e=c[d>>2]|0;c[d>>2]=h;if(!e)o=27;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);o=27}break}case 16:{g=b+92|0;f=b+16+((c[g>>2]&1)*36|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[g>>2]=c[g>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;g=_A(76)|0;c[g>>2]=290492;f=g+4|0;c[f>>2]=c[m>>2];c[f+4>>2]=c[m+4>>2];c[f+8>>2]=c[m+8>>2];c[f+12>>2]=c[m+12>>2];c[f+16>>2]=c[m+16>>2];f=g+24|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;El(f,-1,n);e=g+60|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[g+72>>2]=1;c[g>>2]=290524;El(k,c[b+4>>2]|0,m);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(f,k)|0;else hq(b,f)|0;Ml(k);if((Nq(b,e)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);e=1;break a}e=c[d>>2]|0;c[d>>2]=g;if(!e)o=27;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);o=27}break}default:{c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;a[j+11>>0]=6;a[j>>0]=a[330268]|0;a[j+1>>0]=a[330269]|0;a[j+2>>0]=a[330270]|0;a[j+3>>0]=a[330271]|0;a[j+4>>0]=a[330272]|0;a[j+5>>0]=a[330273]|0;a[j+6>>0]=0;m=j+12|0;f=j+16|0;c[f>>2]=0;c[f+4>>2]=50331648;a[m>>0]=a[330250]|0;a[m+1>>0]=a[330251]|0;a[m+2>>0]=a[330252]|0;a[m+3>>0]=0;f=n+4|0;g=_A(24)|0;c[n>>2]=g;d=g+24|0;c[n+8>>2]=d;cB(g,j);e=g+12|0;cB(e,m);c[f>>2]=d;gq(b,n,0);if((a[g+23>>0]|0)<0)$A(c[e>>2]|0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);e=1}}while(0);if((o|0)==27)e=(eq(b,30)|0)==1&1;b=e;aa=p;return b|0}function Qr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+160|0;l=n+112|0;j=n+92|0;m=n+56|0;k=n;i=n+20|0;if((eq(b,21)|0)==1){m=1;aa=n;return m|0}e=b+88|0;if(!(c[e>>2]|0)){Sp(l,c[b>>2]|0,b);f=c[e>>2]|0;c[e>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=l;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;h=b+16+((c[e>>2]&1)*36|0)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];if((eq(b,28)|0)==1)e=1;else{c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;El(m,-1,k);if((Nq(b,l)|0)!=1){El(i,c[b+4>>2]|0,j);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(m,i)|0;else hq(b,m)|0;Ml(i);if((eq(b,30)|0)!=1){b=_A(56)|0;e=a[l+11>>0]|0;j=e<<24>>24<0;k=j?c[l>>2]|0:l;e=j?c[l+4>>2]|0:e&255;c[b+4>>2]=2;c[b>>2]=290476;Vn(b+8|0,k,e);Il(b+20|0,m);e=c[d>>2]|0;c[d>>2]=b;if(!e)e=0;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);e=0}}else e=1}else e=1;Ml(m);if((a[l+11>>0]|0)<0)$A(c[l>>2]|0)}m=e;aa=n;return m|0}function Rr(b){b=b|0;c[b>>2]=290476;Ml(b+20|0);b=b+8|0;if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Sr(b){b=b|0;var d=0;c[b>>2]=290476;Ml(b+20|0);d=b+8|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Tr(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;m=aa;aa=aa+64|0;k=m+40|0;i=m;if((cq(a,0)|0)!=21){a=0;aa=m;return a|0}j=a+92|0;l=a+88|0;g=b+4|0;h=b+8|0;while(1){if((cq(a,1)|0)!=61){d=0;e=12;break}f=a+16+((c[j>>2]&1)*36|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[j>>2]=c[j>>2]&1^1;c[l>>2]=(c[l>>2]|0)+-1;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;Nl(i,0,k);if((Dq(a,i)|0)==1){e=5;break}if((eq(a,30)|0)==1){e=7;break}d=c[g>>2]|0;if((d|0)==(c[h>>2]|0))Wr(b,i);else{e=i;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));c[g>>2]=(c[g>>2]|0)+40}if((cq(a,0)|0)!=21){d=0;e=12;break}}if((e|0)==5){a=1;aa=m;return a|0}else if((e|0)==7){a=1;aa=m;return a|0}else if((e|0)==12){aa=m;return d|0}return 0}function Ur(b){b=b|0;var d=0;c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);Ml(b+24|0);return}function Vr(b){b=b|0;var d=0;c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);Ml(b+24|0);$A(b);return}function Wr(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;j=a+4|0;i=c[a>>2]|0;l=(c[j>>2]|0)-i|0;e=(l|0)/40|0;d=e+1|0;if(d>>>0>107374182)HB();k=a+8|0;g=((c[k>>2]|0)-i|0)/40|0;h=g<<1;d=g>>>0<53687091?(h>>>0<d>>>0?d:h):107374182;do if(d)if(d>>>0>107374182)U();else{f=_A(d*40|0)|0;break}else f=0;while(0);h=f+(e*40|0)|0;g=f+(d*40|0)|0;f=h;d=b;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));d=h+(((l|0)/-40|0)*40|0)|0;if((l|0)>0)sC(d|0,i|0,l|0)|0;c[a>>2]=d;c[j>>2]=h+40;c[k>>2]=g;if(!i)return;$A(i);return}function Xr(b){b=b|0;var d=0;c[b>>2]=290508;d=c[b+76>>2]|0;if(d|0){c[b+80>>2]=d;$A(d)}c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)>=0){b=b+24|0;Ml(b);return}$A(c[d>>2]|0);b=b+24|0;Ml(b);return}function Yr(b){b=b|0;var d=0;c[b>>2]=290508;d=c[b+76>>2]|0;if(d|0){c[b+80>>2]=d;$A(d)}c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)>=0){d=b+24|0;Ml(d);$A(b);return}$A(c[d>>2]|0);d=b+24|0;Ml(d);$A(b);return}function Zr(b){b=b|0;var d=0;c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);Ml(b+24|0);$A(b);return}function _r(a){a=a|0;var b=0;c[a>>2]=290460;b=a+8|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;ma[c[(c[a>>2]|0)+4>>2]&255](a);return}function $r(a){a=a|0;var b=0,d=0;c[a>>2]=290460;d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function as(b){b=b|0;var d=0;c[b>>2]=290540;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function bs(b){b=b|0;var d=0,e=0;c[b>>2]=290540;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function cs(b){b=b|0;var d=0;c[b>>2]=290572;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function ds(b){b=b|0;var d=0,e=0;c[b>>2]=290572;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function es(b){b=b|0;var d=0;c[b>>2]=290556;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function fs(b){b=b|0;var d=0,e=0;c[b>>2]=290556;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function gs(a){a=a|0;var b=0;c[a>>2]=290588;b=a+8|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;ma[c[(c[a>>2]|0)+4>>2]&255](a);return}function hs(a){a=a|0;var b=0,d=0;c[a>>2]=290588;d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function is(a){a=a|0;var b=0;c[a>>2]=290604;b=a+8|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;ma[c[(c[a>>2]|0)+4>>2]&255](a);return}function js(a){a=a|0;var b=0,d=0;c[a>>2]=290604;d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function ks(a){a=a|0;var b=0;c[a>>2]=290620;b=c[a+12>>2]|0;if(b|0){c[a+16>>2]=b;$A(b)}a=a+8|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;ma[c[(c[b>>2]|0)+4>>2]&255](b);return}function ls(a){a=a|0;var b=0,d=0;c[a>>2]=290620;b=c[a+12>>2]|0;if(b|0){c[a+16>>2]=b;$A(b)}d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function ms(b){b=b|0;var d=0;c[b>>2]=290636;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function ns(b){b=b|0;var d=0,e=0;c[b>>2]=290636;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function os(b){b=b|0;var d=0;c[b>>2]=290652;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function ps(b){b=b|0;var d=0,e=0;c[b>>2]=290652;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function qs(b){b=b|0;var d=0;c[b>>2]=290668;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function rs(b){b=b|0;var d=0,e=0;c[b>>2]=290668;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function ss(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=aa;aa=aa+96|0;g=h;c[g>>2]=a;c[g+4>>2]=-1;c[g+8>>2]=d;c[g+12>>2]=e;f=g+16|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;f=g+52|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;f=g+88|0;c[f>>2]=0;e=g+92|0;c[e>>2]=0;a=Oq(g,b)|0;d=c[f>>2]|0;if(!d){aa=h;return a|0}do{b=g+16+((d+1+(c[e>>2]|0)&1)*36|0)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d}while((d|0)!=0);aa=h;return a|0}function ts(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=aa;aa=aa+96|0;g=h;c[g>>2]=a;c[g+4>>2]=-1;c[g+8>>2]=d;c[g+12>>2]=e;f=g+16|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;f=g+52|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;f=g+88|0;c[f>>2]=0;e=g+92|0;c[e>>2]=0;a=Cr(g,b)|0;d=c[f>>2]|0;if(!d){aa=h;return a|0}do{b=g+16+((d+1+(c[e>>2]|0)&1)*36|0)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d}while((d|0)!=0);aa=h;return a|0}function us(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,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0;ta=aa;aa=aa+352|0;la=ta+112|0;ka=ta+104|0;ja=ta+96|0;ia=ta+88|0;ha=ta+80|0;ga=ta+72|0;fa=ta+64|0;ea=ta+56|0;da=ta+48|0;ca=ta+40|0;oa=ta+32|0;na=ta+24|0;ma=ta+16|0;ba=ta+8|0;$=ta;W=ta+328|0;pa=ta+288|0;X=ta+272|0;sa=ta+116|0;c[sa>>2]=e;Y=sa+4|0;V=sa+8|0;c[V>>2]=0;Z=sa+12|0;c[Z>>2]=b;S=sa+16|0;m=sa+56|0;c[m>>2]=0;n=sa+60|0;c[n>>2]=0;ra=sa+56|0;b=sa+52|0;f=S;h=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[b>>2]=ra;f=sa+64|0;h=f+92|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[Y>>2]=d;if((a[e+1>>0]|0)!=0?(i=c[d+112>>2]|0,o=c[d+116>>2]|0,(i|0)!=(o|0)):0){l=sa+52|0;do{h=c[i>>2]|0;if(!(a[e+2>>0]|0)){b=h;f=c[b+12>>2]|0;if(!(Mk(c[Y>>2]|0,f,b+16|0)|0)){k=f;qa=7}}else{k=h;b=k;k=c[k+12>>2]|0;qa=7}a:do if((qa|0)==7){qa=0;switch(k|0){case 0:{j=Ek(c[Y>>2]|0,b+16|0)|0;break}case 1:{j=Gk(c[Y>>2]|0,b+16|0)|0;break}case 2:{j=Hk(c[Y>>2]|0,b+16|0)|0;break}case 3:{j=Fk(c[Y>>2]|0,b+16|0)|0;break}case 4:{j=Jk(c[Y>>2]|0,b+16|0)|0;break}default:break a}if((j|0)!=-1){e=_A(28)|0;b=e+16|0;c[b>>2]=k;c[b+4>>2]=j;c[e+24>>2]=h;b=c[ra>>2]|0;do if(b){b:while(1){f=c[b+16>>2]|0;do if((f|0)<=(k|0)){if((f|0)>=(k|0)?(c[b+20>>2]|0)>>>0>j>>>0:0){qa=19;break}f=b+4|0;h=c[f>>2]|0;if(!h){qa=22;break b}else b=h}else qa=19;while(0);if((qa|0)==19){qa=0;f=c[b>>2]|0;if(!f){qa=20;break}else b=f}}if((qa|0)==20){qa=0;h=b;f=b;break}else if((qa|0)==22){qa=0;h=b;break}}else{h=ra;f=ra}while(0);c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=h;c[f>>2]=e;b=c[c[l>>2]>>2]|0;if(b){c[l>>2]=b;e=c[f>>2]|0}vs(c[m>>2]|0,e);c[n>>2]=(c[n>>2]|0)+1;e=c[sa>>2]|0}}while(0);i=i+4|0}while((i|0)!=(o|0))}if(a[e+2>>0]|0?(p=c[Y>>2]|0,g=c[p+100>>2]|0,p=c[p+104>>2]|0,(g|0)!=(p|0)):0)do{e=c[g>>2]|0;c[W>>2]=e;b=c[e+28>>2]|0;h=sa+64+(b*12|0)+4|0;f=c[h>>2]|0;if((f|0)==(c[sa+64+(b*12|0)+8>>2]|0))ws(sa+64+(b*12|0)|0,W);else{c[f>>2]=e;c[h>>2]=(c[h>>2]|0)+4}g=g+4|0}while((g|0)!=(p|0));xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);R=sa+24|0;c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330290,6,0,0);c[R>>2]=1;Q=sa+20|0;c[Q>>2]=(c[Q>>2]|0)+2;b=d+20|0;e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[d+24>>2]|0:e&255;if(!e)c[R>>2]=2;else ys(sa,f?c[b>>2]|0:b,e,2);e=c[d+32>>2]|0;c:do if(e|0){y=X+4|0;F=X+8|0;O=sa+132|0;K=sa+152|0;J=sa+148|0;M=sa+140|0;N=sa+28|0;A=sa+32|0;G=sa+36|0;E=W+11|0;P=W+4|0;u=pa+28|0;v=pa+16|0;x=pa+32|0;L=sa+40|0;C=W+4|0;I=W+8|0;D=sa+44|0;H=sa+48|0;w=pa+4|0;z=pa+20|0;B=pa+8|0;d:while(1){e:do switch(c[e+32>>2]|0){case 0:{s=e;t=s+36|0;zs(sa,t);c[X>>2]=0;c[y>>2]=0;c[F>>2]=0;q=s+88|0;d=s+92|0;n=s+112|0;o=s+116|0;Cl(((c[d>>2]|0)-(c[q>>2]|0)>>2)+(Ok(c[n>>2]|0,c[o>>2]|0)|0)|0,s+124|0,X);b=c[s+88>>2]|0;m=c[d>>2]|0;if((b|0)!=(m|0)){l=c[X>>2]|0;k=0;f=0;while(1){j=c[b>>2]|0;if(!f){xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330308,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2}h=l+(k*12|0)|0;g=h+11|0;f=a[g>>0]|0;i=f<<24>>24<0;if(i)f=c[l+(k*12|0)+4>>2]|0;else f=f&255;if(f|0){p=i?c[h>>2]|0:h;r=Uz(p)|0;xs(sa);Qn(c[Z>>2]|0,p,r,0,0);c[R>>2]=1}As(sa,j,1);f=a[g>>0]|0;if(f<<24>>24<0)f=c[l+(k*12|0)+4>>2]|0;else f=f&255;if(!f)f=1;else{if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;f=0}b=b+4|0;if((b|0)==(m|0))break;else k=k+1|0}if(f){if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1}}r=s+100|0;Bs(sa,r,330329);if((c[R>>2]|0)==3)xs(sa);c[R>>2]=2;f=c[n>>2]|0;p=c[o>>2]|0;b=f;do if(Ok(f,p)|0?(_=(c[d>>2]|0)-(c[q>>2]|0)>>2,(p|0)!=(f|0)):0){o=c[X>>2]|0;n=f;l=0;m=0;f=0;while(1){j=c[n>>2]|0;if(!f){xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330275,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2}k=m+_|0;h=o+(k*12|0)|0;g=h+11|0;f=a[g>>0]|0;i=f<<24>>24<0;if(i)f=c[o+(k*12|0)+4>>2]|0;else f=f&255;if(f|0){d=i?c[h>>2]|0:h;q=Uz(d)|0;xs(sa);Qn(c[Z>>2]|0,d,q,0,0);c[R>>2]=1}As(sa,j,1);f=a[g>>0]|0;if(f<<24>>24<0)f=c[o+(k*12|0)+4>>2]|0;else f=f&255;if(!f)f=1;else{if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;f=0}q=l+1|0;d=q>>>0<(c[n+4>>2]|0)>>>0;b=d?b:n+8|0;l=d?q:0;n=b;if(!((l|0)!=0|(p|0)!=(n|0)))break;else m=m+1|0}b=c[R>>2]|0;if(!f){if((b|0)!=3)break;xs(sa);break}if((b|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1}while(0);c[R>>2]=2;h=c[N>>2]|0;b=c[A>>2]|0;if((b|0)!=(h|0))do{f=c[b+-12>>2]|0;if(f|0){c[b+-8>>2]=f;$A(f)}f=c[b+-24>>2]|0;if(f|0){c[b+-20>>2]=f;$A(f)}b=b+-40|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0)}while((b|0)!=(h|0));c[A>>2]=h;c[W>>2]=0;c[W+4>>2]=0;c[W+8>>2]=0;q=c[G>>2]|0;f=q;if(h>>>0>=q>>>0){g=c[N>>2]|0;h=(h-g|0)/40|0;b=h+1|0;if(b>>>0>107374182){qa=107;break d}d=(f-g|0)/40|0;q=d<<1;b=d>>>0<53687091?(q>>>0<b>>>0?b:q):107374182;if(!b)g=0;else{if(b>>>0>107374182){qa=110;break d}g=_A(b*40|0)|0}f=g+(h*40|0)|0;m=g+(b*40|0)|0;cB(f,W);b=g+(h*40|0)+12|0;l=g+(h*40|0)+28|0;k=g+(h*40|0)+32|0;j=g+(h*40|0)+36|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;b=c[r>>2]|0;i=(c[s+104>>2]|0)-b|0;h=i>>2;if(i|0){if(h>>>0>1073741823){qa=114;break d}g=_A(i)|0;c[k>>2]=g;c[l>>2]=g;c[j>>2]=g+(h<<2);if((i|0)>0){sC(g|0,b|0,i|0)|0;c[k>>2]=g+(i>>>2<<2)}}h=f+40|0;g=c[N>>2]|0;b=c[A>>2]|0;if((b|0)==(g|0)){b=f;i=g;f=g}else{do{p=f;f=f+-40|0;d=b;b=b+-40|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[p+-28>>2]=c[d+-28>>2];r=p+-24|0;q=d+-24|0;c[r>>2]=0;o=p+-20|0;c[o>>2]=0;n=p+-16|0;c[n>>2]=0;c[r>>2]=c[q>>2];r=d+-20|0;c[o>>2]=c[r>>2];o=d+-16|0;c[n>>2]=c[o>>2];c[o>>2]=0;c[r>>2]=0;c[q>>2]=0;q=p+-12|0;r=d+-12|0;c[q>>2]=0;o=p+-8|0;c[o>>2]=0;p=p+-4|0;c[p>>2]=0;c[q>>2]=c[r>>2];q=d+-8|0;c[o>>2]=c[q>>2];d=d+-4|0;c[p>>2]=c[d>>2];c[d>>2]=0;c[q>>2]=0;c[r>>2]=0}while((b|0)!=(g|0));b=f;i=c[N>>2]|0;f=c[A>>2]|0}c[N>>2]=b;c[A>>2]=h;c[G>>2]=m;g=i;if((f|0)!=(g|0))do{b=c[f+-12>>2]|0;if(b|0){c[f+-8>>2]=b;$A(b)}b=c[f+-24>>2]|0;if(b|0){c[f+-20>>2]=b;$A(b)}f=f+-40|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(g|0));if(i|0)$A(i)}else{cB(h,W);b=h+12|0;j=h+28|0;k=h+32|0;f=h+36|0;h=s+104|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;b=(c[h>>2]|0)-(c[r>>2]|0)|0;g=b>>2;if(b|0){if(g>>>0>1073741823){qa=102;break d}i=_A(b)|0;c[k>>2]=i;c[j>>2]=i;c[f>>2]=i+(g<<2);f=c[r>>2]|0;b=(c[h>>2]|0)-f|0;if((b|0)>0){sC(i|0,f|0,b|0)|0;c[k>>2]=i+(b>>>2<<2)}}c[A>>2]=(c[A>>2]|0)+40}if((a[E>>0]|0)<0)$A(c[W>>2]|0);c[V>>2]=t;b=s+144|0;if(!(a[c[sa>>2]>>0]|0)){c[W>>2]=290684;c[P>>2]=sa;Jj(pa,W);Qj(pa,b)|0;b=c[u>>2]|0;if(b|0){c[x>>2]=b;$A(b)}b=c[v>>2]|0;if(b|0){c[z>>2]=b;$A(b)}b=c[w>>2]|0;if(b|0){c[B>>2]=b;$A(b)}}else{b=c[b>>2]|0;if(b|0)do{Cs(sa,b);b=c[b+4>>2]|0}while((b|0)!=0);t=c[L>>2]|0;c[W>>2]=t;s=c[D>>2]|0;c[C>>2]=s;c[I>>2]=c[H>>2];b=t;c[L>>2]=0;c[L+4>>2]=0;c[L+8>>2]=0;Ds(sa,b,s);if(t|0){Es(W,b);$A(c[W>>2]|0)}}c[V>>2]=0;if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;f=c[X>>2]|0;if(f|0){b=c[y>>2]|0;if((b|0)!=(f|0))do{b=b+-12|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0)}while((b|0)!=(f|0));c[y>>2]=f;$A(f)}break}case 1:{t=e;Fs(sa,t+36|0);Gs(sa,t+56|0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;break}case 2:{h=c[e+36>>2]|0;if(!(a[(c[sa>>2]|0)+2>>0]|0)){xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330261,6,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;s=h+4|0;r=a[s+11>>0]|0;t=r<<24>>24<0;Hs(sa,t?c[s>>2]|0:s,t?c[h+8>>2]|0:r&255);c[R>>2]=1;r=h+16|0;t=a[r+11>>0]|0;s=t<<24>>24<0;Hs(sa,s?c[r>>2]|0:r,s?c[h+20>>2]|0:t&255);c[R>>2]=1}switch(c[h+28>>2]|0){case 0:{zs(sa,h+32|0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;b=1;break}case 1:{f=h+32|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330351,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;b=a[f+11>>0]|0;g=b<<24>>24<0;b=g?c[h+36>>2]|0:b&255;if(!b){c[$>>2]=c[O>>2];Is(sa,312362,$)}else ys(sa,g?c[f>>2]|0:f,b,1);Js(sa,1,c[O>>2]|0);Ks(sa,1,c[O>>2]|0);b=h+48|0;r=b;s=c[r+4>>2]|0;t=ba;c[t>>2]=c[r>>2];c[t+4>>2]=s;Is(sa,312369,ba);if(a[b+16>>0]|0){r=h+56|0;s=c[r+4>>2]|0;t=ma;c[t>>2]=c[r>>2];c[t+4>>2]=s;Is(sa,312369,ma)}if(a[b+17>>0]|0)Is(sa,330338,na);As(sa,c[h+72>>2]|0,0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;c[O>>2]=(c[O>>2]|0)+1;b=2;break}case 2:{Ls(sa,h+32|0);qa=183;break}case 3:{Fs(sa,h+32|0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;b=1;break}case 4:{Ms(sa,h+32|0);qa=183;break}default:qa=183}if((qa|0)==183){qa=0;b=c[R>>2]|0}b=(b|0)==3;if(a[(c[sa>>2]|0)+2>>0]|0){if(b)xs(sa)}else{if(!b)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0)}c[R>>2]=2;break}case 10:{Ms(sa,e+36|0);break}case 3:{m=e;k=m+36|0;i=m+48|0;if(a[(c[sa>>2]|0)+1>>0]|0){j=c[i>>2]|0;switch(j|0){case 0:{l=Ek(c[Y>>2]|0,m+52|0)|0;break}case 1:{l=Gk(c[Y>>2]|0,m+52|0)|0;break}case 2:{l=Hk(c[Y>>2]|0,m+52|0)|0;break}case 3:{l=Fk(c[Y>>2]|0,m+52|0)|0;break}case 4:{l=Jk(c[Y>>2]|0,m+52|0)|0;break}default:l=0}b=c[ra>>2]|0;if(b|0){h=ra;while(1){f=c[b+16>>2]|0;do if((f|0)<(j|0)){g=b+4|0;f=h}else{if((j|0)>=(f|0)?(c[b+20>>2]|0)>>>0<l>>>0:0){g=b+4|0;f=h;break}g=b;f=b}while(0);b=c[g>>2]|0;if(!b)break;else h=f}if((f|0)!=(ra|0)?(T=c[f+16>>2]|0,(j|0)>=(T|0)):0){if((T|0)<(j|0))break e;if(l>>>0>=(c[f+20>>2]|0)>>>0)break e}}}xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330243,6,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;b=a[k+11>>0]|0;t=b<<24>>24<0;Hs(sa,t?c[k>>2]|0:k,t?c[m+40>>2]|0:b&255);c[R>>2]=1;b=c[i>>2]|0;if((b|0)<5)b=c[64+(b<<2)>>2]|0;else b=328778;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;t=Uz(b)|0;xs(sa);Qn(c[Z>>2]|0,b,t,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;if(c[m+72>>2]|0){r=m+76|0;t=a[r+11>>0]|0;s=t<<24>>24<0;ys(sa,s?c[r>>2]|0:r,s?c[m+80>>2]|0:t&255,1);if((c[R>>2]|0)!=3)qa=216}else{c[oa>>2]=c[m+76>>2];Is(sa,331596,oa);c[R>>2]=1;qa=216}if((qa|0)==216){qa=0;c[R>>2]=0}c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;break}case 5:{b=e;g=b+40|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330351,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;f=a[g+11>>0]|0;h=f<<24>>24<0;f=h?c[b+44>>2]|0:f&255;if(!f){c[ca>>2]=c[O>>2];Is(sa,312362,ca)}else ys(sa,h?c[g>>2]|0:g,f,1);Js(sa,1,c[O>>2]|0);Ks(sa,1,c[O>>2]|0);r=b+56|0;s=c[r+4>>2]|0;t=da;c[t>>2]=c[r>>2];c[t+4>>2]=s;Is(sa,312369,da);if(a[b+72>>0]|0){r=b+64|0;s=c[r+4>>2]|0;t=ea;c[t>>2]=c[r>>2];c[t+4>>2]=s;Is(sa,312369,ea)}if(a[b+73>>0]|0)Is(sa,330338,fa);As(sa,c[b+80>>2]|0,0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;c[O>>2]=(c[O>>2]|0)+1;break}case 6:{h=e;f=h+36|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330228,4,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;b=a[f+11>>0]|0;g=b<<24>>24<0;b=g?c[h+40>>2]|0:b&255;if(!b){c[ga>>2]=c[K>>2];Is(sa,312362,ga)}else ys(sa,g?c[f>>2]|0:f,b,1);i=h+84|0;if(!(a[i>>0]|0))Gs(sa,h+92|0);else As(sa,c[h+88>>2]|0,1);b=c[h+104>>2]|0;g=c[h+108>>2]|0;if((b|0)!=(g|0))do{do if(!(a[i>>0]|0))if(!(c[b+24>>2]|0)){c[ia>>2]=c[b+28>>2];Is(sa,331596,ia);c[R>>2]=1;break}else{r=b+28|0;t=a[r+11>>0]|0;s=t<<24>>24<0;ys(sa,s?c[r>>2]|0:r,s?c[b+32>>2]|0:t&255,1);break}else{t=(c[b>>2]|0)==0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);f=c[Z>>2]|0;if(t){Qn(f,330661,8,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;break}Qn(f,330652,8,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;if(c[b+24>>2]|0){r=b+28|0;t=a[r+11>>0]|0;s=t<<24>>24<0;ys(sa,s?c[r>>2]|0:r,s?c[b+32>>2]|0:t&255,1);if((c[R>>2]|0)!=3)qa=244}else{c[ha>>2]=c[b+28>>2];Is(sa,331596,ha);c[R>>2]=1;qa=244}if((qa|0)==244){qa=0;c[R>>2]=0}c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1}while(0);b=b+40|0}while((b|0)!=(g|0));if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;c[K>>2]=(c[K>>2]|0)+1;break}case 7:{Ls(sa,e+40|0);break}case 8:{b=e;g=b+36|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330223,4,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;f=a[g+11>>0]|0;h=f<<24>>24<0;f=h?c[b+40>>2]|0:f&255;if(!f){c[ja>>2]=c[J>>2];Is(sa,312362,ja)}else ys(sa,h?c[g>>2]|0:g,f,1);if(!(a[b+84>>0]|0))Gs(sa,b+88|0);t=c[b+100>>2]|0;Hs(sa,t,(c[b+104>>2]|0)-t|0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;c[J>>2]=(c[J>>2]|0)+1;break}case 4:{b=e;i=b+36|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330362,4,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;h=a[i+11>>0]|0;j=h<<24>>24<0;f=c[i>>2]|0;h=j?c[b+40>>2]|0:h&255;g=c[M>>2]|0;c[M>>2]=g+1;if(!h){c[ka>>2]=g;Is(sa,312362,ka)}else ys(sa,j?f:i,h,1);xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330950,4,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;Bs(sa,b+48|0,330308);Bs(sa,b+60|0,330329);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;break}case 9:{b=e;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330345,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;if(c[b+56>>2]|0){r=b+60|0;t=a[r+11>>0]|0;s=t<<24>>24<0;ys(sa,s?c[r>>2]|0:r,s?c[b+64>>2]|0:t&255,0);if((c[R>>2]|0)!=3)qa=269}else{c[la>>2]=c[b+60>>2];Is(sa,331596,la);c[R>>2]=0;qa=269}if((qa|0)==269){qa=0;c[R>>2]=0}c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;break}default:{}}while(0);e=c[e+4>>2]|0;if(!e)break c}if((qa|0)==102)HB();else if((qa|0)==107)HB();else if((qa|0)==110)U();else if((qa|0)==114)HB()}while(0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;xs(sa);i=c[S>>2]|0;e=c[sa+112>>2]|0;if(e|0){c[sa+116>>2]=e;$A(e)}e=c[sa+100>>2]|0;if(e|0){c[sa+104>>2]=e;$A(e)}e=c[sa+88>>2]|0;if(e|0){c[sa+92>>2]=e;$A(e)}e=c[sa+76>>2]|0;if(e|0){c[sa+80>>2]=e;$A(e)}e=c[sa+64>>2]|0;if(e|0){c[sa+68>>2]=e;$A(e)}Ns(c[ra>>2]|0);e=sa+40|0;b=c[e>>2]|0;if(b|0){Es(e,b);$A(c[e>>2]|0)}f=sa+28|0;h=c[f>>2]|0;if(!h){aa=ta;return i|0}g=sa+32|0;e=c[g>>2]|0;if((e|0)==(h|0))e=h;else{do{b=c[e+-12>>2]|0;if(b|0){c[e+-8>>2]=b;$A(b)}b=c[e+-24>>2]|0;if(b|0){c[e+-20>>2]=b;$A(b)}e=e+-40|0;if((a[e+11>>0]|0)<0)$A(c[e>>2]|0)}while((e|0)!=(h|0));e=c[f>>2]|0}c[g>>2]=h;$A(e);aa=ta;return i|0}function vs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=(d|0)==(b|0);a[d+12>>0]=j&1;if(j)return;h=d;while(1){g=h+8|0;i=c[g>>2]|0;d=i+12|0;if(a[d>>0]|0){e=24;break}j=i+8|0;f=c[j>>2]|0;e=c[f>>2]|0;if((e|0)==(i|0)){e=c[f+4>>2]|0;if(!e){e=7;break}e=e+12|0;if(a[e>>0]|0){e=7;break}}else{if(!e){e=16;break}e=e+12|0;if(a[e>>0]|0){e=16;break}}a[d>>0]=1;j=(f|0)==(b|0);a[f+12>>0]=j&1;a[e>>0]=1;if(j){e=24;break}else h=f}if((e|0)==7){if((c[i>>2]|0)==(h|0))g=f;else{h=i+4|0;e=c[h>>2]|0;d=c[e>>2]|0;c[h>>2]=d;if(!d)d=f;else{c[d+8>>2]=i;d=c[j>>2]|0}g=e+8|0;c[g>>2]=d;d=c[j>>2]|0;c[((c[d>>2]|0)==(i|0)?d:d+4|0)>>2]=e;c[e>>2]=i;c[j>>2]=e;g=c[g>>2]|0;d=e+12|0}a[d>>0]=1;a[g+12>>0]=0;d=c[g>>2]|0;f=d+4|0;e=c[f>>2]|0;c[g>>2]=e;if(e|0)c[e+8>>2]=g;j=g+8|0;c[d+8>>2]=c[j>>2];i=c[j>>2]|0;c[((c[i>>2]|0)==(g|0)?i:i+4|0)>>2]=d;c[f>>2]=g;c[j>>2]=d;return}else if((e|0)==16){if((c[i>>2]|0)==(h|0)){e=h+4|0;d=c[e>>2]|0;c[i>>2]=d;if(!d)d=f;else{c[d+8>>2]=i;d=c[j>>2]|0}c[g>>2]=d;f=c[j>>2]|0;c[((c[f>>2]|0)==(i|0)?f:f+4|0)>>2]=h;c[e>>2]=i;c[j>>2]=h;f=c[g>>2]|0;d=h+12|0}a[d>>0]=1;a[f+12>>0]=0;j=f+4|0;d=c[j>>2]|0;e=c[d>>2]|0;c[j>>2]=e;if(e|0)c[e+8>>2]=f;j=f+8|0;c[d+8>>2]=c[j>>2];i=c[j>>2]|0;c[((c[i>>2]|0)==(f|0)?i:i+4|0)>>2]=d;c[d>>2]=f;c[j>>2]=d;return}else if((e|0)==24)return}function ws(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;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function xs(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;d=g;e=b+24|0;switch(c[e>>2]|0){case 1:{f=c[b+12>>2]|0;a[d>>0]=32;Qn(f,d,1,0,0);c[e>>2]=0;aa=g;return}case 3:case 2:{f=b+12|0;h=c[f>>2]|0;a[d>>0]=10;Qn(h,d,1,0,0);d=c[b+20>>2]|0;if(d>>>0>141)do{Qn(c[f>>2]|0,16960,142,0,0);d=d+-142|0}while(d>>>0>141);if(!d){c[e>>2]=0;aa=g;return}Qn(c[f>>2]|0,16960,d,0,0);c[e>>2]=0;aa=g;return}default:{c[e>>2]=0;aa=g;return}}}function ys(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;i=e+f|0;a:do if(f|0){h=e;while(1){if(!(a[16704+(d[h>>0]|0)>>0]|0))break;h=h+1|0;if((h|0)==(i|0))break a}c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;do{f=a[e>>0]|0;wB(j,(a[16704+(f&255)>>0]|0)==0?95:f);e=e+1|0}while((e|0)!=(i|0));i=j+11|0;f=a[i>>0]|0;e=f<<24>>24<0;h=e?c[j>>2]|0:j;f=e?c[j+4>>2]|0:f&255;xs(b);Qn(c[b+12>>2]|0,h,f,0,0);if((a[i>>0]|0)<0)$A(c[j>>2]|0);j=b+24|0;c[j>>2]=g;aa=k;return}while(0);xs(b);Qn(c[b+12>>2]|0,e,f,0,0);j=b+24|0;c[j>>2]=g;aa=k;return}function zs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+80|0;n=p+8|0;g=p;k=p+32|0;l=p+12|0;xs(b);m=b+12|0;Qn(c[m>>2]|0,330281,1,0,0);j=b+24|0;c[j>>2]=0;xs(b);Qn(c[m>>2]|0,330950,4,0,0);c[j>>2]=1;i=b+20|0;c[i>>2]=(c[i>>2]|0)+2;e=a[d+11>>0]|0;f=e<<24>>24<0;e=f?c[d+4>>2]|0:e&255;h=b+124|0;if(!e){c[g>>2]=c[h>>2];Is(b,312362,g)}else ys(b,f?c[d>>2]|0:d,e,1);Js(b,0,c[h>>2]|0);Ks(b,0,c[h>>2]|0);e=d+12|0;if(a[e>>0]|0){xs(b);Qn(c[m>>2]|0,330281,1,0,0);c[j>>2]=0;xs(b);Qn(c[m>>2]|0,330362,4,0,0);c[j>>2]=1;c[i>>2]=(c[i>>2]|0)+2;if(c[d+36>>2]|0){f=d+40|0;n=a[f+11>>0]|0;g=n<<24>>24<0;ys(b,g?c[f>>2]|0:f,g?c[d+44>>2]|0:n&255,0);if((c[j>>2]|0)!=3)o=8}else{c[n>>2]=c[d+40>>2];Is(b,331596,n);c[j>>2]=0;o=8}if((o|0)==8)c[j>>2]=0;c[i>>2]=(c[i>>2]|0)+-2;xs(b);Qn(c[m>>2]|0,330336,1,0,0);c[j>>2]=1}o=c[b+4>>2]|0;n=c[h>>2]|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(k,n,l);o=Mk(o,0,k)|0;Ml(k);if(!o){o=c[h>>2]|0;o=o+1|0;c[h>>2]=o;aa=p;return}if(!((a[e>>0]|0)==0?1:(a[(c[b>>2]|0)+2>>0]|0)!=0)){o=c[h>>2]|0;o=o+1|0;c[h>>2]=o;aa=p;return}Bs(b,d+52|0,330308);Bs(b,d+64|0,330329);o=c[h>>2]|0;o=o+1|0;c[h>>2]=o;aa=p;return}function As(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;do switch(b|0){case -1:{b=330980;break}case -2:{b=330976;break}case -3:{b=330972;break}case -4:{b=330968;break}case -5:{b=330963;break}case -16:{b=330955;break}case -32:{b=330950;break}case -24:{b=330939;break}case -64:{b=330934;break}case 0:{b=330930;break}case -17:{b=330923;break}default:b=330910}while(0);e=Uz(b)|0;xs(a);Qn(c[a+12>>2]|0,b,e,0,0);c[a+24>>2]=d;return}function Bs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=b+4|0;f=c[g>>2]|0;e=c[b>>2]|0;if((f|0)==(e|0))return;h=(d|0)!=0;if(h){xs(a);i=a+12|0;Qn(c[i>>2]|0,330281,1,0,0);e=a+24|0;c[e>>2]=0;f=Uz(d)|0;xs(a);Qn(c[i>>2]|0,d,f,0,0);c[e>>2]=1;e=a+20|0;c[e>>2]=(c[e>>2]|0)+2;e=c[b>>2]|0;f=c[g>>2]|0}if((e|0)!=(f|0))do{As(a,c[e>>2]|0,1);e=e+4|0}while((e|0)!=(f|0));if(!h)return;e=a+24|0;if((c[e>>2]|0)!=3)c[e>>2]=0;i=a+20|0;c[i>>2]=(c[i>>2]|0)+-2;xs(a);Qn(c[a+12>>2]|0,330336,1,0,0);c[e>>2]=1;return}function Cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;f=h+8|0;e=h;d=c[b+32>>2]|0;do switch(d|0){case 48:case 14:case 6:case 1:case 4:{$t(a,b,2,1);aa=h;return}case 50:case 43:case 3:{$t(a,b,2,0);aa=h;return}case 7:{g=b+88|0;$t(a,b,0,(c[g+16>>2]|0)-(c[g+12>>2]|0)>>2);aa=h;return}case 8:{$t(a,b,au(a,b+36|0)|0,1);aa=h;return}case 9:{g=au(a,b+36|0)|0;$t(a,b,g+1|0,g);aa=h;return}case 10:{$t(a,b,1,1);aa=h;return}case 11:{$t(a,b,(au(a,b+48|0)|0)+1|0,1);aa=h;return}case 12:{f=b+36|0;e=c[a+4>>2]|0;d=Rk(e,f)|0;if(!d)g=0;else g=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;d=Rk(e,f)|0;if(!d)d=0;else d=(c[d+68>>2]|0)-(c[d+64>>2]|0)>>2;$t(a,b,g,d);aa=h;return}case 37:{f=b+36|0;e=c[a+4>>2]|0;d=Rk(e,f)|0;if(!d)g=0;else g=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;d=Rk(e,f)|0;if(!d)d=0;else d=(c[d+68>>2]|0)-(c[d+64>>2]|0)>>2;$t(a,b,g,d);aa=h;return}case 13:{$t(a,b,((c[b+80>>2]|0)-(c[b+76>>2]|0)>>2)+1|0,(c[b+92>>2]|0)-(c[b+88>>2]|0)>>2);aa=h;return}case 38:{$t(a,b,((c[b+80>>2]|0)-(c[b+76>>2]|0)>>2)+1|0,(c[b+92>>2]|0)-(c[b+88>>2]|0)>>2);aa=h;return}case 34:case 55:case 49:case 31:case 22:case 18:case 15:{$t(a,b,0,1);aa=h;return}case 45:case 27:{$t(a,b,0,0);aa=h;return}case 44:case 26:case 28:case 46:case 30:{$t(a,b,3,0);aa=h;return}case 33:case 47:case 54:case 29:case 24:case 21:case 16:case 0:{$t(a,b,1,1);aa=h;return}case 23:case 19:case 17:{$t(a,b,1,0);aa=h;return}case 20:{g=b+88|0;$t(a,b,1,(c[g+16>>2]|0)-(c[g+12>>2]|0)>>2);aa=h;return}case 25:{g=b+88|0;$t(a,b,0,(c[g+16>>2]|0)-(c[g+12>>2]|0)>>2);aa=h;return}case 32:{$t(a,b,0,0);aa=h;return}case 36:{g=c[a+8>>2]|0;$t(a,b,(c[g+68>>2]|0)-(c[g+64>>2]|0)>>2,1);aa=h;return}case 35:{$t(a,b,0,0);aa=h;return}case 39:case 5:case 2:{$t(a,b,3,1);aa=h;return}case 52:{d=Xk(c[a+4>>2]|0,b+36|0)|0;if(!d)d=0;else d=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;$t(a,b,d,0);aa=h;return}case 53:{g=b+88|0;$t(a,b,0,(c[g+16>>2]|0)-(c[g+12>>2]|0)>>2);aa=h;return}case 51:{$t(a,b,3,1);aa=h;return}case 40:switch(c[b+36>>2]|0){case 232:case 229:case 226:case 223:case 220:case 219:case 216:case 215:{$t(a,b,1,1);aa=h;return}case 233:case 230:case 227:case 224:case 221:case 217:{$t(a,b,2,1);aa=h;return}default:{a=Ck(40)|0;c[e>>2]=a;BA(0,312541,e);aa=h;return}}case 41:{$t(a,b,2,1);aa=h;return}default:{a=Ck(d)|0;c[f>>2]=a;BA(0,312575,f);aa=h;return}}while(0)}function Ds(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,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=aa;aa=aa+112|0;O=S+64|0;Q=S+24|0;J=S;if((b|0)==(d|0)){aa=S;return}I=J+4|0;z=J+8|0;A=J+12|0;N=J+16|0;P=a+12|0;M=a+24|0;R=O+4|0;m=Q+28|0;l=J+4|0;L=a+20|0;n=Q+16|0;r=Q+32|0;K=a+40|0;q=O+4|0;C=O+8|0;p=a+44|0;B=a+48|0;w=O+4|0;G=O+8|0;y=O+4|0;H=O+8|0;t=O+4|0;E=O+8|0;o=Q+4|0;v=Q+20|0;x=Q+8|0;u=O+4|0;F=O+8|0;s=O+4|0;D=O+8|0;while(1){k=c[b>>2]|0;c[J>>2]=k;g=b+4|0;c[I>>2]=0;c[z>>2]=0;c[A>>2]=0;i=b+8|0;e=(c[i>>2]|0)-(c[g>>2]|0)|0;h=(e|0)/20|0;j=k;if(e){if(h>>>0>214748364){b=6;break}f=_A(e)|0;c[z>>2]=f;c[I>>2]=f;c[A>>2]=f+(h*20|0);e=c[g>>2]|0;g=c[i>>2]|0;if((e|0)==(g|0))e=k;else{do{_t(f,e);e=e+20|0;f=f+20|0;c[z>>2]=f}while((e|0)!=(g|0));e=c[J>>2]|0;j=e}}else{e=k;f=0}c[N>>2]=c[b+16>>2];switch(c[j+32>>2]|0){case 7:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;Am(O,2);Yt(a,1,e+36|0,c[O>>2]|0);e=c[e+112>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;j=c[p>>2]|0;c[q>>2]=j;c[C>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,j);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);break}case 25:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;Am(O,3);Yt(a,2,e+36|0,c[O>>2]|0);e=c[e+112>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;j=c[p>>2]|0;c[w>>2]=j;c[G>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,j);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);break}case 20:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;Am(O,4);Yt(a,3,j+36|0,c[O>>2]|0);Ds(a,c[I>>2]|0,f);xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;xs(a);Qn(c[P>>2]|0,330357,4,0,0);c[M>>2]=2;c[L>>2]=(c[L>>2]|0)+2;e=c[j+112>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;i=c[p>>2]|0;c[y>>2]=i;c[H>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,i);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);c[M>>2]=2;if(c[j+152>>2]|0){xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;xs(a);Qn(c[P>>2]|0,330553,4,0,0);c[M>>2]=2;c[L>>2]=(c[L>>2]|0)+2;e=c[j+144>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;j=c[p>>2]|0;c[s>>2]=j;c[D>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,j);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);c[M>>2]=2}c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);break}case 53:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;Am(O,6);Yt(a,5,j+36|0,c[O>>2]|0);Ds(a,c[I>>2]|0,f);e=c[j+112>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;i=c[p>>2]|0;c[t>>2]=i;c[E>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,i);if(k|0){Es(O,e);$A(c[O>>2]|0)}xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;xs(a);Qn(c[P>>2]|0,330505,5,0,0);c[M>>2]=2;c[L>>2]=(c[L>>2]|0)+2;e=c[j+144>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;j=c[p>>2]|0;c[u>>2]=j;c[F>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,j);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);break}default:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;c[O>>2]=290684;c[R>>2]=a;Jj(Q,O);Kj(Q,j)|0;e=c[m>>2]|0;if(e|0){c[r>>2]=e;$A(e)}e=c[n>>2]|0;if(e|0){c[v>>2]=e;$A(e)}e=c[o>>2]|0;if(e|0){c[x>>2]=e;$A(e)}c[L>>2]=(c[L>>2]|0)+2;Ds(a,c[I>>2]|0,f);if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0)}}c[M>>2]=2;e=c[l>>2]|0;if(e|0){Es(l,e);$A(c[l>>2]|0)}b=b+20|0;if((b|0)==(d|0)){b=3;break}}if((b|0)==3){aa=S;return}else if((b|0)==6)HB()}function Es(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;a=c[f>>2]|0;if((a|0)==(b|0)){c[f>>2]=b;return}do{d=a+-16|0;a=a+-20|0;e=c[d>>2]|0;if(e|0){Es(d,e);$A(c[d>>2]|0)}}while((a|0)!=(b|0));c[f>>2]=b;return}function Fs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;xs(b);i=b+12|0;Qn(c[i>>2]|0,330281,1,0,0);h=b+24|0;c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330254,6,0,0);c[h>>2]=1;g=b+20|0;c[g>>2]=(c[g>>2]|0)+2;e=a[d+11>>0]|0;j=e<<24>>24<0;e=j?c[d+4>>2]|0:e&255;f=b+128|0;if(!e){c[k>>2]=c[f>>2];Is(b,312362,k)}else ys(b,j?c[d>>2]|0:d,e,1);Js(b,3,c[f>>2]|0);Ks(b,3,c[f>>2]|0);if(!(a[d+16>>0]|0)){As(b,c[d+12>>2]|0,1);k=c[f>>2]|0;k=k+1|0;c[f>>2]=k;aa=l;return}xs(b);Qn(c[i>>2]|0,330281,1,0,0);c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330297,3,0,0);c[h>>2]=1;c[g>>2]=(c[g>>2]|0)+2;As(b,c[d+12>>2]|0,1);if((c[h>>2]|0)!=3)c[h>>2]=0;c[g>>2]=(c[g>>2]|0)+-2;xs(b);Qn(c[i>>2]|0,330336,1,0,0);c[h>>2]=1;k=c[f>>2]|0;k=k+1|0;c[f>>2]=k;aa=l;return}function Gs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;d=h+40|0;g=h;if(!(c[b+8>>2]|0)){aa=h;return}xs(a);f=a+12|0;Qn(c[f>>2]|0,330281,1,0,0);e=a+24|0;c[e>>2]=0;c[d>>2]=290684;c[d+4>>2]=a;Jj(g,d);Qj(g,b)|0;d=c[g+28>>2]|0;if(d|0){c[g+32>>2]=d;$A(d)}d=c[g+16>>2]|0;if(d|0){c[g+20>>2]=d;$A(d)}d=c[g+4>>2]|0;if(d|0){c[g+8>>2]=d;$A(d)}c[e>>2]=0;xs(a);Qn(c[f>>2]|0,330336,1,0,0);c[e>>2]=1;aa=h;return}function Hs(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;l=aa;aa=aa+16|0;i=l;xs(b);j=b+12|0;k=c[j>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);if(!e){k=c[j>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);k=b+24|0;c[k>>2]=1;aa=l;return}g=0;do{f=a[d+g>>0]|0;h=f&255;k=c[j>>2]|0;if(!(a[16416+h>>0]|0)){a[i>>0]=f;Qn(k,i,1,0,0)}else{a[i>>0]=92;Qn(k,i,1,0,0);k=c[j>>2]|0;a[i>>0]=a[16672+(h>>>4)>>0]|0;Qn(k,i,1,0,0);k=c[j>>2]|0;a[i>>0]=a[16672+(h&15)>>0]|0;Qn(k,i,1,0,0)}g=g+1|0}while((g|0)!=(e|0));k=c[j>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);k=b+24|0;c[k>>2]=1;aa=l;return}function Is(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+160|0;e=h+144|0;g=h+128|0;f=h;c[e>>2]=d;c[g>>2]=c[e>>2];d=Vz(f,128,b,e)|0;e=d+1|0;if(e>>>0>128){d=aa;aa=aa+((1*e|0)+15&-16)|0;f=d;d=Vz(d,e,b,g)|0}xs(a);Qn(c[a+12>>2]|0,f,d,0,0);c[a+24>>2]=1;aa=h;return}function Js(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;if(!(a[(c[b>>2]|0)+1>>0]|0))return;f=b+56|0;g=c[f>>2]|0;a:do if(!g)k=28;else{j=g;b:while(1){g=c[j+16>>2]|0;do if((g|0)>(d|0))k=7;else{if((g|0)>=(d|0)){g=c[j+20>>2]|0;if(g>>>0>e>>>0){k=7;break}if(g>>>0>=e>>>0)break b}g=j+4|0}while(0);if((k|0)==7){k=0;f=j;g=j}g=c[g>>2]|0;if(!g){k=28;break a}else j=g}h=c[j>>2]|0;if(!h)g=j;else{g=j;do{i=c[h+16>>2]|0;do if((i|0)<(d|0))i=h+4|0;else{if((i|0)<=(d|0)?(c[h+20>>2]|0)>>>0<e>>>0:0){i=h+4|0;break}i=h;g=h}while(0);h=c[i>>2]|0}while((h|0)!=0)}h=c[j+4>>2]|0;if(h)do{i=c[h+16>>2]|0;do if((i|0)>(d|0)){i=h;f=h}else{if((i|0)>=(d|0)?(c[h+20>>2]|0)>>>0>e>>>0:0){i=h;f=h;break}i=h+4|0}while(0);h=c[i>>2]|0}while((h|0)!=0)}while(0);if((k|0)==28)g=f;if((g|0)==(f|0))return;d=b+12|0;e=b+24|0;j=b+20|0;do{k=c[g+24>>2]|0;xs(b);Qn(c[d>>2]|0,330281,1,0,0);c[e>>2]=0;xs(b);Qn(c[d>>2]|0,330243,6,0,0);c[e>>2]=1;c[j>>2]=(c[j>>2]|0)+2;h=a[k+11>>0]|0;i=h<<24>>24<0;Hs(b,i?c[k>>2]|0:k,i?c[k+4>>2]|0:h&255);c[e>>2]=0;c[j>>2]=(c[j>>2]|0)+-2;xs(b);Qn(c[d>>2]|0,330336,1,0,0);c[e>>2]=1;h=c[g+4>>2]|0;if(!h){h=g+8|0;i=c[h>>2]|0;if((c[i>>2]|0)==(g|0))g=i;else do{k=c[h>>2]|0;h=k+8|0;g=c[h>>2]|0}while((c[g>>2]|0)!=(k|0))}else{g=h;while(1){h=c[g>>2]|0;if(!h)break;else g=h}}}while((g|0)!=(f|0));return}function Ks(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!(a[(c[b>>2]|0)+2>>0]|0))return;f=c[b+64+(d*12|0)>>2]|0;if((c[b+64+(d*12|0)+4>>2]|0)-f>>2>>>0<=e>>>0)return;h=c[f+(e<<2)>>2]|0;xs(b);e=b+12|0;Qn(c[e>>2]|0,330281,1,0,0);d=b+24|0;c[d>>2]=0;xs(b);Qn(c[e>>2]|0,330261,6,0,0);c[d>>2]=1;f=b+20|0;c[f>>2]=(c[f>>2]|0)+2;i=h+4|0;j=a[i+11>>0]|0;g=j<<24>>24<0;Hs(b,g?c[i>>2]|0:i,g?c[h+8>>2]|0:j&255);c[d>>2]=1;j=h+16|0;g=a[j+11>>0]|0;i=g<<24>>24<0;Hs(b,i?c[j>>2]|0:j,i?c[h+20>>2]|0:g&255);c[d>>2]=0;c[f>>2]=(c[f>>2]|0)+-2;xs(b);Qn(c[e>>2]|0,330336,1,0,0);c[d>>2]=1;return}function Ls(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+32|0;m=n+16|0;l=n+8|0;k=n;xs(b);i=b+12|0;Qn(c[i>>2]|0,330281,1,0,0);h=b+24|0;c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330283,6,0,0);c[h>>2]=1;f=b+20|0;c[f>>2]=(c[f>>2]|0)+2;e=a[d+11>>0]|0;j=e<<24>>24<0;e=j?c[d+4>>2]|0:e&255;g=b+136|0;if(!e){c[k>>2]=c[g>>2];Is(b,312362,k)}else ys(b,j?c[d>>2]|0:d,e,1);Js(b,2,c[g>>2]|0);Ks(b,2,c[g>>2]|0);e=d+16|0;j=c[e+4>>2]|0;k=l;c[k>>2]=c[e>>2];c[k+4>>2]=j;Is(b,312369,l);if(a[d+32>>0]|0){j=d+24|0;k=c[j+4>>2]|0;l=m;c[l>>2]=c[j>>2];c[l+4>>2]=k;Is(b,312369,m)}if(a[d+33>>0]|0)Is(b,330338,n+24|0);if((c[h>>2]|0)==3){m=c[f>>2]|0;m=m+-2|0;c[f>>2]=m;xs(b);m=c[i>>2]|0;Qn(m,330336,1,0,0);c[h>>2]=2;m=c[g>>2]|0;m=m+1|0;c[g>>2]=m;aa=n;return}c[h>>2]=0;m=c[f>>2]|0;m=m+-2|0;c[f>>2]=m;xs(b);m=c[i>>2]|0;Qn(m,330336,1,0,0);c[h>>2]=2;m=c[g>>2]|0;m=m+1|0;c[g>>2]=m;aa=n;return}function Ms(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+16|0;l=n+8|0;k=n;xs(b);i=b+12|0;Qn(c[i>>2]|0,330281,1,0,0);h=b+24|0;c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330237,5,0,0);c[h>>2]=1;g=b+20|0;c[g>>2]=(c[g>>2]|0)+2;e=a[d+11>>0]|0;j=e<<24>>24<0;e=j?c[d+4>>2]|0:e&255;f=b+144|0;if(!e){c[k>>2]=c[f>>2];Is(b,312362,k)}else ys(b,j?c[d>>2]|0:d,e,1);Js(b,4,c[f>>2]|0);Ks(b,4,c[f>>2]|0);if(a[d+12>>0]|0){xs(b);Qn(c[i>>2]|0,330281,1,0,0);c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330362,4,0,0);c[h>>2]=1;c[g>>2]=(c[g>>2]|0)+2;if(c[d+36>>2]|0){j=d+40|0;l=a[j+11>>0]|0;k=l<<24>>24<0;ys(b,k?c[j>>2]|0:j,k?c[d+44>>2]|0:l&255,0);if((c[h>>2]|0)!=3)m=8}else{c[l>>2]=c[d+40>>2];Is(b,331596,l);c[h>>2]=0;m=8}if((m|0)==8)c[h>>2]=0;c[g>>2]=(c[g>>2]|0)+-2;xs(b);Qn(c[i>>2]|0,330336,1,0,0);c[h>>2]=1}Bs(b,d+52|0,330308);c[f>>2]=(c[f>>2]|0)+1;if((c[h>>2]|0)==3){m=c[g>>2]|0;m=m+-2|0;c[g>>2]=m;xs(b);m=c[i>>2]|0;Qn(m,330336,1,0,0);c[h>>2]=2;aa=n;return}c[h>>2]=0;m=c[g>>2]|0;m=m+-2|0;c[g>>2]=m;xs(b);m=c[i>>2]|0;Qn(m,330336,1,0,0);c[h>>2]=2;aa=n;return}function Ns(a){a=a|0;if(!a)return;else{Ns(c[a>>2]|0);Ns(c[a+4>>2]|0);$A(a);return}}function Os(a){a=a|0;$A(a);return}function Ps(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function Qs(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,2);Yt(a,1,b+36|0,c[e>>2]|0);aa=d;return 0}function Rs(a,b){a=a|0;b=b|0;Xt(c[a+4>>2]|0);return 0}function Ss(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=aa;aa=aa+48|0;g=d;a=a+4|0;e=c[a>>2]|0;Am(g,12);g=c[g>>2]|0;f=Uz(g)|0;xs(e);Qn(c[e+12>>2]|0,g,f,0,0);c[e+24>>2]=1;Zt(c[a>>2]|0,b+36|0,2);aa=d;return 0}function Ts(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=aa;aa=aa+48|0;g=d;a=a+4|0;e=c[a>>2]|0;Am(g,13);g=c[g>>2]|0;f=Uz(g)|0;xs(e);Qn(c[e+12>>2]|0,g,f,0,0);c[e+24>>2]=1;Zt(c[a>>2]|0,b+36|0,2);aa=d;return 0}function Us(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,10);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;Zt(c[b>>2]|0,d+36|0,1);b=c[b>>2]|0;if(!(c[d+92>>2]|0)){c[e>>2]=c[d+96>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+96|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+100>>2]|0:i&255,2);aa=f;return 0}return 0}function Vs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;e=g;f=a+4|0;d=c[f>>2]|0;Am(e,14);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);c[d+24>>2]=1;d=c[b+36>>2]|0;e=c[b+40>>2]|0;a=c[f>>2]|0;if((d|0)==(e|0)){f=a;b=b+48|0;Zt(f,b,2);aa=g;return 0}do{Zt(a,d,1);d=d+36|0;a=c[f>>2]|0}while((d|0)!=(e|0));b=b+48|0;Zt(a,b,2);aa=g;return 0}function Ws(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,16);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function Xs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+48|0;h=i+8|0;e=i;f=i+12|0;g=b+4|0;b=c[g>>2]|0;Am(f,17);f=c[f>>2]|0;j=Uz(f)|0;xs(b);Qn(c[b+12>>2]|0,f,j,0,0);c[b+24>>2]=1;b=c[g>>2]|0;xs(b);j=b+12|0;Qn(c[j>>2]|0,330281,1,0,0);f=b+24|0;c[f>>2]=0;xs(b);Qn(c[j>>2]|0,330362,4,0,0);c[f>>2]=1;b=b+20|0;c[b>>2]=(c[b>>2]|0)+2;b=c[g>>2]|0;if(!(c[d+60>>2]|0)){c[e>>2]=c[d+64>>2];Is(b,331596,e);c[b+24>>2]=1}else{e=d+64|0;j=a[e+11>>0]|0;f=j<<24>>24<0;ys(b,f?c[e>>2]|0:e,f?c[d+68>>2]|0:j&255,1)}f=d+120|0;if((c[f>>2]|0)==0?(c[d+124>>2]|0)==0:0){b=c[g>>2]|0;e=b+24|0;if((c[e>>2]|0)!=3)c[e>>2]=0;j=b+20|0;c[j>>2]=(c[j>>2]|0)+-2;xs(b);Qn(c[b+12>>2]|0,330336,1,0,0);c[e>>2]=2;aa=i;return 0}b=c[g>>2]|0;e=b+24|0;if((c[e>>2]|0)!=3)c[e>>2]=0;j=b+20|0;c[j>>2]=(c[j>>2]|0)+-2;xs(b);Qn(c[b+12>>2]|0,330336,1,0,0);c[e>>2]=1;b=c[g>>2]|0;if(!(c[f>>2]|0)){c[h>>2]=c[d+124>>2];Is(b,331596,h);c[b+24>>2]=2;aa=i;return 0}else{g=d+124|0;j=a[g+11>>0]|0;h=j<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+128>>2]|0:j&255,2);aa=i;return 0}return 0}function Ys(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function Zs(a,b){a=a|0;b=b|0;var d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+176|0;h=m+160|0;j=m+152|0;i=m+144|0;e=m+136|0;d=m+128|0;k=m;l=c[a+4>>2]|0;switch(c[b+60>>2]|0){case -1:{Am(k,52);k=c[k>>2]|0;a=Uz(k)|0;xs(l);Qn(c[l+12>>2]|0,k,a,0,0);a=l+24|0;c[a>>2]=1;c[d>>2]=c[b+64>>2];Is(l,331593,d);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}case -2:{Am(k,53);j=c[k>>2]|0;a=Uz(j)|0;xs(l);Qn(c[l+12>>2]|0,j,a,0,0);a=l+24|0;c[a>>2]=1;j=b+64|0;k=c[j+4>>2]|0;b=e;c[b>>2]=c[j>>2];c[b+4>>2]=k;Is(l,312413,e);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}case -3:{Am(k,54);j=c[k>>2]|0;a=Uz(j)|0;xs(l);h=l+12|0;Qn(c[h>>2]|0,j,a,0,0);a=l+24|0;c[a>>2]=1;b=b+64|0;xm(k,c[b>>2]|0);j=Uz(k)|0;xs(l);Qn(c[h>>2]|0,k,j,0,0);c[a>>2]=1;g[i>>3]=+f[b>>2];Is(l,312418,i);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}case -4:{Am(k,55);i=c[k>>2]|0;a=Uz(i)|0;xs(l);h=l+12|0;Qn(c[h>>2]|0,i,a,0,0);a=l+24|0;c[a>>2]=1;b=b+64|0;i=b;ym(k,c[i>>2]|0,c[i+4>>2]|0);i=Uz(k)|0;xs(l);Qn(c[h>>2]|0,k,i,0,0);c[a>>2]=1;g[j>>3]=+g[b>>3];Is(l,312418,j);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}case -5:{Am(k,213);i=c[k>>2]|0;a=Uz(i)|0;xs(l);Qn(c[l+12>>2]|0,i,a,0,0);a=l+24|0;c[a>>2]=1;i=b+64|0;j=c[i+4>>2]|0;k=c[b+72>>2]|0;b=c[b+76>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;c[h+8>>2]=k;c[h+12>>2]=b;Is(l,312426,h);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}default:{aa=m;return 0}}return 0}function _s(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function $s(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,20);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function at(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,25);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function bt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,26);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function ct(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,4);Yt(a,3,b+36|0,c[e>>2]|0);aa=d;return 0}function dt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=aa;aa=aa+48|0;d=e;if(!(c[b+152>>2]|0)){aa=e;return 0}b=a+4|0;a=c[b>>2]|0;f=a+20|0;c[f>>2]=(c[f>>2]|0)+-2;Am(d,5);f=c[d>>2]|0;d=Uz(f)|0;xs(a);Qn(c[a+12>>2]|0,f,d,0,0);c[a+24>>2]=1;b=c[b>>2]|0;d=b+20|0;c[d>>2]=(c[d>>2]|0)+2;d=b+24|0;if((c[d>>2]|0)==3)xs(b);c[d>>2]=3;aa=e;return 0}function et(a,b){a=a|0;b=b|0;Xt(c[a+4>>2]|0);return 0}function ft(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function gt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,22);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function ht(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,23);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function it(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,24);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function jt(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,3);Yt(a,2,b+36|0,c[e>>2]|0);aa=d;return 0}function kt(a,b){a=a|0;b=b|0;Xt(c[a+4>>2]|0);return 0}function lt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,199);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function mt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,198);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function nt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,200);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function ot(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,51);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function pt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,197);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function qt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,50);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function rt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,203);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function st(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,202);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function tt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,201);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function ut(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,204);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function vt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,205);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function wt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,206);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function xt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,207);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function yt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,208);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function zt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,209);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function At(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,1);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function Bt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,15);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function Ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,18);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function Dt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=aa;aa=aa+48|0;f=g;h=g+4|0;e=b+4|0;b=c[e>>2]|0;Am(h,19);h=c[h>>2]|0;i=Uz(h)|0;xs(b);Qn(c[b+12>>2]|0,h,i,0,0);c[b+24>>2]=1;b=c[e>>2]|0;xs(b);i=b+12|0;Qn(c[i>>2]|0,330281,1,0,0);h=b+24|0;c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330362,4,0,0);c[h>>2]=1;b=b+20|0;c[b>>2]=(c[b>>2]|0)+2;b=c[e>>2]|0;if(!(c[d+60>>2]|0)){c[f>>2]=c[d+64>>2];Is(b,331596,f);c[b+24>>2]=1}else{f=d+64|0;i=a[f+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[f>>2]|0:f,h?c[d+68>>2]|0:i&255,1)}b=c[e>>2]|0;e=b+24|0;if((c[e>>2]|0)==3){i=b+20|0;h=c[i>>2]|0;h=h+-2|0;c[i>>2]=h;xs(b);i=b+12|0;i=c[i>>2]|0;Qn(i,330336,1,0,0);c[e>>2]=2;aa=g;return 0}c[e>>2]=0;i=b+20|0;h=c[i>>2]|0;h=h+-2|0;c[i>>2]=h;xs(b);i=b+12|0;i=c[i>>2]|0;Qn(i,330336,1,0,0);c[e>>2]=2;aa=g;return 0}function Et(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,21);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function Ft(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Gt(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function Ht(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,0);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function It(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,6);Yt(a,5,b+36|0,c[e>>2]|0);aa=d;return 0}function Jt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=aa;aa=aa+48|0;f=d;b=a+4|0;a=c[b>>2]|0;e=a+20|0;c[e>>2]=(c[e>>2]|0)+-2;Am(f,7);f=c[f>>2]|0;e=Uz(f)|0;xs(a);Qn(c[a+12>>2]|0,f,e,0,0);c[a+24>>2]=1;b=c[b>>2]|0;a=b+20|0;c[a>>2]=(c[a>>2]|0)+2;c[(c[b+32>>2]|0)+-28>>2]=6;a=b+24|0;if((c[a>>2]|0)!=3){c[a>>2]=3;aa=d;return 0}xs(b);c[a>>2]=3;aa=d;return 0}function Kt(a,b){a=a|0;b=b|0;Xt(c[a+4>>2]|0);return 0}function Lt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,8);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function Mt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,9);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=1;aa=b;return 0}function Nt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Pt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Qt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Rt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function St(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Tt(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function Ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=aa;aa=aa+48|0;e=d;g=d+8|0;a=a+4|0;f=c[a>>2]|0;Am(g,c[b+36>>2]|0);g=c[g>>2]|0;h=Uz(g)|0;xs(f);Qn(c[f+12>>2]|0,g,h,0,0);c[f+24>>2]=1;f=c[a>>2]|0;h=b+40|0;g=c[h+4>>2]|0;b=e;c[b>>2]=c[h>>2];c[b+4>>2]=g;Is(f,312369,e);a=c[a>>2]|0;xs(a);Qn(c[a+12>>2]|0,354708,0,0,0);c[a+24>>2]=2;aa=d;return 0}function Vt(b,e){b=b|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,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;f=aa;aa=aa+160|0;g=f+120|0;i=f+112|0;k=f+104|0;m=f+96|0;o=f+88|0;q=f+80|0;s=f+72|0;u=f+64|0;w=f+56|0;y=f+48|0;A=f+40|0;C=f+32|0;E=f+24|0;G=f+16|0;I=f+8|0;K=f;F=f+124|0;b=b+4|0;J=c[b>>2]|0;Am(F,c[e+36>>2]|0);F=c[F>>2]|0;H=Uz(F)|0;xs(J);Qn(c[J+12>>2]|0,F,H,0,0);c[J+24>>2]=1;J=a[e+41>>0]|0;H=a[e+42>>0]|0;F=a[e+43>>0]|0;D=a[e+44>>0]|0;B=a[e+45>>0]|0;z=a[e+46>>0]|0;x=a[e+47>>0]|0;v=a[e+48>>0]|0;t=a[e+49>>0]|0;r=a[e+50>>0]|0;p=a[e+51>>0]|0;n=a[e+52>>0]|0;l=a[e+53>>0]|0;j=a[e+54>>0]|0;h=a[e+55>>0]|0;L=c[b>>2]|0;c[K>>2]=d[e+40>>0];Is(L,312393,K);e=c[b>>2]|0;c[I>>2]=J&255;Is(e,312393,I);e=c[b>>2]|0;c[G>>2]=H&255;Is(e,312393,G);e=c[b>>2]|0;c[E>>2]=F&255;Is(e,312393,E);e=c[b>>2]|0;c[C>>2]=D&255;Is(e,312393,C);e=c[b>>2]|0;c[A>>2]=B&255;Is(e,312393,A);e=c[b>>2]|0;c[y>>2]=z&255;Is(e,312393,y);e=c[b>>2]|0;c[w>>2]=x&255;Is(e,312393,w);e=c[b>>2]|0;c[u>>2]=v&255;Is(e,312393,u);e=c[b>>2]|0;c[s>>2]=t&255;Is(e,312393,s);e=c[b>>2]|0;c[q>>2]=r&255;Is(e,312393,q);e=c[b>>2]|0;c[o>>2]=p&255;Is(e,312393,o);e=c[b>>2]|0;c[m>>2]=n&255;Is(e,312393,m);e=c[b>>2]|0;c[k>>2]=l&255;Is(e,312393,k);e=c[b>>2]|0;c[i>>2]=j&255;Is(e,312393,i);e=c[b>>2]|0;c[g>>2]=h&255;Is(e,312393,g);b=c[b>>2]|0;xs(b);Qn(c[b+12>>2]|0,354708,0,0,0);c[b+24>>2]=2;aa=f;return 0}function Wt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Xt(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i;f=b+20|0;c[f>>2]=(c[f>>2]|0)+-2;f=b+32|0;e=c[f>>2]|0;g=e+-40|0;d=c[e+-12>>2]|0;if(d|0){c[e+-8>>2]=d;$A(d)}d=c[e+-24>>2]|0;if(d|0){c[e+-20>>2]=d;$A(d)}if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;Am(h,11);g=c[h>>2]|0;h=Uz(g)|0;xs(b);Qn(c[b+12>>2]|0,g,h,0,0);c[b+24>>2]=2;aa=i;return}function Yt(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,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+16|0;j=u;i=Uz(f)|0;xs(b);g=b+12|0;Qn(c[g>>2]|0,f,i,0,0);i=b+24|0;c[i>>2]=1;h=a[e+11>>0]|0;f=h<<24>>24<0;h=((f?c[e+4>>2]|0:h&255)|0)==0;if(!h){s=f?c[e>>2]|0:e;t=Uz(s)|0;xs(b);Qn(c[g>>2]|0,s,t,0,0);c[i>>2]=1}n=e+52|0;Bs(b,n,330308);s=e+64|0;Bs(b,s,330329);if(h){c[j>>2]=((c[b+32>>2]|0)-(c[b+28>>2]|0)|0)/40|0;Is(b,312397,j)}if((c[i>>2]|0)==3)xs(b);c[i>>2]=3;r=b+28|0;t=b+32|0;l=c[t>>2]|0;q=b+36|0;p=c[q>>2]|0;g=p;if(l>>>0<p>>>0){cB(l,e);c[l+12>>2]=d;h=l+16|0;c[h>>2]=0;k=l+20|0;c[k>>2]=0;g=l+24|0;c[g>>2]=0;j=e+56|0;f=(c[j>>2]|0)-(c[n>>2]|0)|0;i=f>>2;if(f|0){if(i>>>0>1073741823)HB();d=_A(f)|0;c[k>>2]=d;c[h>>2]=d;c[g>>2]=d+(i<<2);g=c[n>>2]|0;f=(c[j>>2]|0)-g|0;if((f|0)>0){sC(d|0,g|0,f|0)|0;c[k>>2]=d+(f>>>2<<2)}}d=l+28|0;c[d>>2]=0;k=l+32|0;c[k>>2]=0;i=l+36|0;c[i>>2]=0;h=e+68|0;f=(c[h>>2]|0)-(c[s>>2]|0)|0;g=f>>2;if(f|0){if(g>>>0>1073741823)HB();j=_A(f)|0;c[k>>2]=j;c[d>>2]=j;c[i>>2]=j+(g<<2);g=c[s>>2]|0;f=(c[h>>2]|0)-g|0;if((f|0)>0){sC(j|0,g|0,f|0)|0;c[k>>2]=j+(f>>>2<<2)}}c[t>>2]=(c[t>>2]|0)+40;b=b+20|0;t=c[b>>2]|0;t=t+2|0;c[b>>2]=t;aa=u;return}h=c[r>>2]|0;m=(l-h|0)/40|0;f=m+1|0;if(f>>>0>107374182)HB();l=(g-h|0)/40|0;p=l<<1;f=l>>>0<53687091?(p>>>0<f>>>0?f:p):107374182;do if(f)if(f>>>0>107374182)U();else{o=_A(f*40|0)|0;break}else o=0;while(0);g=o+(m*40|0)|0;p=o+(f*40|0)|0;cB(g,e);c[o+(m*40|0)+12>>2]=d;l=o+(m*40|0)+16|0;c[l>>2]=0;d=o+(m*40|0)+20|0;c[d>>2]=0;k=o+(m*40|0)+24|0;c[k>>2]=0;f=c[n>>2]|0;j=(c[e+56>>2]|0)-f|0;i=j>>2;if(j|0){if(i>>>0>1073741823)HB();h=_A(j)|0;c[d>>2]=h;c[l>>2]=h;c[k>>2]=h+(i<<2);if((j|0)>0){sC(h|0,f|0,j|0)|0;c[d>>2]=h+(j>>>2<<2)}}l=o+(m*40|0)+28|0;c[l>>2]=0;k=o+(m*40|0)+32|0;c[k>>2]=0;d=o+(m*40|0)+36|0;c[d>>2]=0;j=c[s>>2]|0;i=(c[e+68>>2]|0)-j|0;h=i>>2;if(i|0){if(h>>>0>1073741823)HB();f=_A(i)|0;c[k>>2]=f;c[l>>2]=f;c[d>>2]=f+(h<<2);if((i|0)>0){sC(f|0,j|0,i|0)|0;c[k>>2]=f+(i>>>2<<2)}}i=g+40|0;h=c[r>>2]|0;f=c[t>>2]|0;if((f|0)==(h|0)){f=g;j=h;g=h}else{do{n=g;g=g+-40|0;o=f;f=f+-40|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[n+-28>>2]=c[o+-28>>2];s=n+-24|0;e=o+-24|0;c[s>>2]=0;m=n+-20|0;c[m>>2]=0;l=n+-16|0;c[l>>2]=0;c[s>>2]=c[e>>2];s=o+-20|0;c[m>>2]=c[s>>2];m=o+-16|0;c[l>>2]=c[m>>2];c[m>>2]=0;c[s>>2]=0;c[e>>2]=0;e=n+-12|0;s=o+-12|0;c[e>>2]=0;m=n+-8|0;c[m>>2]=0;n=n+-4|0;c[n>>2]=0;c[e>>2]=c[s>>2];e=o+-8|0;c[m>>2]=c[e>>2];o=o+-4|0;c[n>>2]=c[o>>2];c[o>>2]=0;c[e>>2]=0;c[s>>2]=0}while((f|0)!=(h|0));f=g;j=c[r>>2]|0;g=c[t>>2]|0}c[r>>2]=f;c[t>>2]=i;c[q>>2]=p;h=j;if((g|0)!=(h|0))do{f=c[g+-12>>2]|0;if(f|0){c[g+-8>>2]=f;$A(f)}f=c[g+-24>>2]|0;if(f|0){c[g+-20>>2]=f;$A(f)}g=g+-40|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0)}while((g|0)!=(h|0));if(!j){b=b+20|0;t=c[b>>2]|0;t=t+2|0;c[b>>2]=t;aa=u;return}$A(j);b=b+20|0;t=c[b>>2]|0;t=t+2|0;c[b>>2]=t;aa=u;return}function Zt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i+8|0;g=i;if(c[d+20>>2]|0){g=d+24|0;g=(a[g+11>>0]|0)<0?c[g>>2]|0:g;h=Uz(g)|0;xs(b);Qn(c[b+12>>2]|0,g,h,0,0);h=b+24|0;c[h>>2]=e;aa=i;return}d=c[d+24>>2]|0;f=((c[b+32>>2]|0)-(c[b+28>>2]|0)|0)/40|0;if(f>>>0>d>>>0){c[g>>2]=d;c[g+4>>2]=f+~d;Is(b,312460,g);h=b+24|0;c[h>>2]=e;aa=i;return}else{c[h>>2]=d;Is(b,312471,h);h=b+24|0;c[h>>2]=e;aa=i;return}}function _t(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;c[a>>2]=c[b>>2];g=a+4|0;h=b+4|0;c[g>>2]=0;k=a+8|0;c[k>>2]=0;f=a+12|0;c[f>>2]=0;j=b+8|0;d=(c[j>>2]|0)-(c[h>>2]|0)|0;i=(d|0)/20|0;if(!d){a=a+16|0;k=b+16|0;k=c[k>>2]|0;c[a>>2]=k;return}if(i>>>0>214748364)HB();e=_A(d)|0;c[k>>2]=e;c[g>>2]=e;c[f>>2]=e+(i*20|0);d=c[h>>2]|0;f=c[j>>2]|0;if((d|0)==(f|0)){a=a+16|0;k=b+16|0;k=c[k>>2]|0;c[a>>2]=k;return}do{_t(e,d);d=d+20|0;e=(c[k>>2]|0)+20|0;c[k>>2]=e}while((d|0)!=(f|0));a=a+16|0;k=b+16|0;k=c[k>>2]|0;c[a>>2]=k;return}
+function jf(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;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=42;c[g>>2]=287996;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function kf(a,b){a=a|0;b=b|0;return 0}function lf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+148|0;g=a+156|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+152|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function mf(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,l=0,m=0,n=0,o=0,p=0;h=aa;aa=aa+64|0;k=h+24|0;m=h;i=h+20|0;n=b+4|0;p=b+36|0;o=c[p>>2]|0;l=c[(c[n>>2]|0)+8>>2]|0;d=Uz(o)|0;j=_A(116)|0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=o;c[j+16>>2]=d;c[j+20>>2]=l;l=j+24|0;c[l>>2]=0;c[l+4>>2]=0;c[j+32>>2]=6;c[j>>2]=287980;Wn(j+36|0,0,0);l=j+48|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;El(l,-1,k);d=j+84|0;a[d>>0]=0;o=j+92|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;p=c[p>>2]|0;n=c[(c[n>>2]|0)+8>>2]|0;o=m+12|0;c[o>>2]=0;c[o+4>>2]=0;o=Uz(p)|0;c[m>>2]=p;c[m+4>>2]=o;c[m+8>>2]=n;El(k,e,m);Hl(l,k)|0;Ml(k);a[d>>0]=f&1;c[j+88>>2]=g;d=c[b+12>>2]|0;c[i>>2]=j;el(d,i);d=c[i>>2]|0;c[i>>2]=0;if(!d){aa=h;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=h;return 0}function nf(a,b){a=a|0;b=b|0;c[a+32>>2]=(c[(c[(c[a+12>>2]|0)+148>>2]|0)+(b<<2)>>2]|0)+56;return 0}function of(a,b){a=a|0;b=b|0;c[a+32>>2]=0;return 0}function pf(a,b,d){a=a|0;b=b|0;d=d|0;Tg((c[(c[(c[a+12>>2]|0)+148>>2]|0)+(b<<2)>>2]|0)+68|0,d);return 0}function qf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+32|0;e=f;b=c[(c[(c[a+12>>2]|0)+148>>2]|0)+(b<<2)>>2]|0;d=b+72|0;a=c[d>>2]|0;if(a>>>0<(c[b+76>>2]|0)>>>0){c[a>>2]=0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;El(a+4|0,-1,e);c[d>>2]=(c[d>>2]|0)+40;aa=f;return 0}else{Sg(b+68|0);aa=f;return 0}return 0}function rf(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;h=aa;aa=aa+96|0;f=h+56|0;g=h+20|0;i=h;e=c[(c[(c[a+12>>2]|0)+148>>2]|0)+(b<<2)>>2]|0;j=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;a=i+12|0;c[a>>2]=0;c[a+4>>2]=0;a=Uz(j)|0;c[i>>2]=j;c[i+4>>2]=a;c[i+8>>2]=b;El(g,d,i);d=e+72|0;b=c[d>>2]|0;if(b>>>0<(c[e+76>>2]|0)>>>0){Gl(f,g);c[b>>2]=1;Il(b+4|0,f);Ml(f);c[d>>2]=(c[d>>2]|0)+40;Ml(g);aa=h;return 0}else{Rg(e+68|0,g);Ml(g);aa=h;return 0}return 0}function sf(a,b){a=a|0;b=b|0;return 0}function tf(a){a=a|0;return 0}function uf(a,b){a=a|0;b=b|0;return 0}function vf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+172|0;g=a+180|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+176|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function wf(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,n=0,o=0;g=aa;aa=aa+64|0;j=g+24|0;l=g;h=g+20|0;m=b+4|0;o=b+36|0;n=c[o>>2]|0;k=c[(c[m>>2]|0)+8>>2]|0;d=Uz(n)|0;i=_A(112)|0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=n;c[i+16>>2]=d;c[i+20>>2]=k;k=i+24|0;c[k>>2]=0;c[k+4>>2]=0;c[i+32>>2]=8;c[i>>2]=287964;Wn(i+36|0,0,0);k=i+48|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(k,-1,j);d=i+84|0;a[d>>0]=0;n=i+88|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;o=c[o>>2]|0;m=c[(c[m>>2]|0)+8>>2]|0;n=l+12|0;c[n>>2]=0;c[n+4>>2]=0;n=Uz(o)|0;c[l>>2]=o;c[l+4>>2]=n;c[l+8>>2]=m;El(j,e,l);Hl(k,j)|0;Ml(j);a[d>>0]=f&1;d=c[b+12>>2]|0;c[h>>2]=i;cl(d,h);d=c[h>>2]|0;c[h>>2]=0;if(!d){aa=g;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=g;return 0}function xf(a,b){a=a|0;b=b|0;c[a+32>>2]=(c[(c[(c[a+12>>2]|0)+172>>2]|0)+(b<<2)>>2]|0)+52;return 0}function yf(a,b){a=a|0;b=b|0;c[a+32>>2]=0;return 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,j=0,k=0,l=0,m=0,n=0;g=c[(c[(c[b+12>>2]|0)+172>>2]|0)+(d<<2)>>2]|0;m=g+64|0;l=g+68|0;b=c[l>>2]|0;i=c[m>>2]|0;k=b-i|0;j=i;a:do if(k>>>0<f>>>0){d=f-k|0;h=g+72|0;g=c[h>>2]|0;if((g-b|0)>>>0>=d>>>0)while(1){a[b>>0]=0;b=(c[l>>2]|0)+1|0;c[l>>2]=b;d=d+-1|0;if(!d){n=15;break a}}if((f|0)<0)HB();b=g-i|0;g=b<<1;g=b>>>0<1073741823?(g>>>0<f>>>0?f:g):2147483647;if(!g)b=0;else b=_A(g)|0;uC(b+k|0,0,d|0)|0;if((k|0)>0)sC(b|0,j|0,k|0)|0;c[m>>2]=b;c[l>>2]=b+f;c[h>>2]=b+g;if(i|0)$A(j)}else if(k>>>0>f>>>0){c[l>>2]=j+f;n=15}else n=15;while(0);if((n|0)==15?(f|0)==0:0)return 0;sC(c[m>>2]|0,e|0,f|0)|0;return 0}function Af(a,b){a=a|0;b=b|0;return 0}function Bf(a){a=a|0;return 0}function Cf(a,b){a=a|0;b=b|0;return 0}function Df(a,b){a=a|0;b=b|0;return 0}function Ef(a){a=a|0;return 0}function Ff(a,b){a=a|0;b=b|0;return 0}function Gf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Hf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+32|0;i=m+20|0;g=m+8|0;l=m;f=c[e+4>>2]|0;if(!f){aa=m;return 0}j=c[e>>2]|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;h=i+11|0;a[h>>0]=1;a[i>>0]=36;a[i+1>>0]=0;Wn(g,j,f);j=a[g+11>>0]|0;f=j<<24>>24<0;e=c[g>>2]|0;uB(i,f?e:g,f?c[g+4>>2]|0:j&255)|0;j=c[i>>2]|0;k=i+4|0;c[l>>2]=c[k>>2];b[l+4>>1]=b[k+4>>1]|0;a[l+6>>0]=a[k+6>>0]|0;k=a[i+11>>0]|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;if(f){$A(e);if((a[h>>0]|0)<0)$A(c[i>>2]|0)}e=c[d+12>>2]|0;g=e+20|0;f=g+11|0;if((a[f>>0]|0)<0){a[c[g>>2]>>0]=0;c[e+24>>2]=0;e=g}else{a[g>>0]=0;a[f>>0]=0;e=g}pB(g);c[e>>2]=j;j=e+4|0;c[j>>2]=c[l>>2];b[j+4>>1]=b[l+4>>1]|0;a[j+6>>0]=a[l+6>>0]|0;a[e+11>>0]=k;aa=m;return 0}function If(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Jf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;d=c[a+12>>2]|0;d=(c[d+80>>2]|0)-(c[d+76>>2]|0)>>2;if(d>>>0>=b>>>0){e=0;aa=f;return e|0}c[e>>2]=b;c[e+4>>2]=d;Mg(a,292599,e);e=1;aa=f;return e|0}function Kf(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;n=aa;aa=aa+64|0;l=n+48|0;m=n+24|0;j=n+12|0;k=n;f=c[e+4>>2]|0;if(!f){aa=n;return 0}i=b+12|0;h=c[i>>2]|0;g=c[(c[h+76>>2]|0)+(d<<2)>>2]|0;h=h+216|0;o=c[e>>2]|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;e=l+11|0;a[e>>0]=1;a[l>>0]=36;a[l+1>>0]=0;Wn(m,o,f);o=a[m+11>>0]|0;f=o<<24>>24<0;b=c[m>>2]|0;uB(l,f?b:m,f?c[m+4>>2]|0:o&255)|0;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;if(f){$A(b);if((a[e>>0]|0)<0)$A(c[l>>2]|0)}Eg(j,h,k);if((a[k+11>>0]|0)<0)$A(c[k>>2]|0);lB(g,j)|0;o=c[i>>2]|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=d;o=o+216|0;Og(l,o,j,m);Gg(o,c[l>>2]|0);if((a[j+11>>0]|0)<0)$A(c[j>>2]|0);aa=n;return 0}function Lf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Mf(a,b){a=a|0;b=b|0;return 0}function Nf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=aa;aa=aa+16|0;e=f;b=c[(c[(c[a+12>>2]|0)+76>>2]|0)+(b<<2)>>2]|0;g=(c[b+56>>2]|0)-(c[b+52>>2]|0)>>2;b=g+(Ok(c[b+76>>2]|0,c[b+80>>2]|0)|0)|0;if(b>>>0>=d>>>0){g=0;aa=f;return g|0}c[e>>2]=d;c[e+4>>2]=b;Mg(a,292548,e);g=1;aa=f;return g|0}function Of(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;m=aa;aa=aa+64|0;j=m+40|0;k=m+24|0;i=m+12|0;l=m;h=c[f+4>>2]|0;if(!h){aa=m;return 0}g=(c[(c[(c[b+12>>2]|0)+76>>2]|0)+(d<<2)>>2]|0)+88|0;f=c[f>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;b=j+11|0;a[b>>0]=1;a[j>>0]=36;a[j+1>>0]=0;Wn(k,f,h);f=a[k+11>>0]|0;h=f<<24>>24<0;d=c[k>>2]|0;uB(j,h?d:k,h?c[k+4>>2]|0:f&255)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;if(h){$A(d);if((a[b>>0]|0)<0)$A(c[j>>2]|0)}Eg(i,g,l);c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=e;Fg(g,i,j);if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);if((a[l+11>>0]|0)<0)$A(c[l>>2]|0);aa=m;return 0}function Pf(a){a=a|0;return 0}function Qf(a,b){a=a|0;b=b|0;return 0}function Rf(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Sf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function Tf(a){a=a|0;return 0}function Uf(a,b){a=a|0;b=b|0;return 0}function Vf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function Wf(a,b){a=a|0;b=b|0;return 0}function Xf(a,b){a=a|0;b=b|0;return 0}function Yf(a){a=a|0;return 0}function Zf(a,b){a=a|0;b=b|0;return 0}function _f(a,b){a=a|0;b=b|0;return 0}function $f(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function ag(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;return 0}function bg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function cg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function dg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function eg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function fg(a,b){a=a|0;b=b|0;return 0}function gg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function hg(a,b){a=a|0;b=b|0;return 0}function ig(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function jg(a,b){a=a|0;b=b|0;return 0}function kg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function lg(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function mg(a){a=a|0;return 0}function ng(a,b){a=a|0;b=b|0;return 0}function og(a,b){a=a|0;b=b|0;return 0}function pg(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;j=aa;aa=aa+64|0;f=j+24|0;k=j;i=j+20|0;l=b+4|0;n=b+36|0;g=c[n>>2]|0;m=c[(c[l>>2]|0)+8>>2]|0;d=Uz(g)|0;h=_A(112)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=g;c[h+16>>2]=d;c[h+20>>2]=m;m=h+24|0;c[m>>2]=0;c[m+4>>2]=0;c[h+32>>2]=10;c[h>>2]=287948;Wn(h+36|0,0,0);m=h+48|0;a[m>>0]=0;d=h+52|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;El(d,-1,f);g=h+88|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;a[m>>0]=1;n=c[n>>2]|0;l=c[(c[l>>2]|0)+8>>2]|0;m=k+12|0;c[m>>2]=0;c[m+4>>2]=0;m=Uz(n)|0;c[k>>2]=n;c[k+4>>2]=m;c[k+8>>2]=l;El(f,e,k);Hl(d,f)|0;Ml(f);f=b+12|0;d=c[f>>2]|0;b=c[(c[d+124>>2]|0)+(e<<2)>>2]|0;e=b+12|0;if((e|0)!=(g|0)){Bg(g,c[e>>2]|0,c[b+16>>2]|0);Bg(h+100|0,c[b+24>>2]|0,c[b+28>>2]|0);d=c[f>>2]|0}c[i>>2]=h;gl(d,i);d=c[i>>2]|0;c[i>>2]=0;if(!d){aa=j;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=j;return 0}function qg(a){a=a|0;return 0}function rg(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;h=aa;aa=aa+64|0;j=h+40|0;i=h;f=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;e=j+12|0;c[e>>2]=0;c[e+4>>2]=0;e=Uz(f)|0;c[j>>2]=f;c[j+4>>2]=e;c[j+8>>2]=g;g=c[a+32>>2]|0;Pl(i,d,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function sg(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;h=aa;aa=aa+64|0;j=h+40|0;i=h;b=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;f=j+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(b)|0;c[j>>2]=b;c[j+4>>2]=f;c[j+8>>2]=g;g=c[a+32>>2]|0;Ql(i,d,e,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function tg(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;h=aa;aa=aa+80|0;e=h+64|0;j=h+40|0;i=h;b=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;f=j+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(b)|0;c[j>>2]=b;c[j+4>>2]=f;c[j+8>>2]=g;g=c[a+32>>2]|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];Rl(i,e,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function ug(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;b=h+36|0;g=h;i=c[a+36>>2]|0;f=c[(c[a+4>>2]|0)+8>>2]|0;e=b+12|0;c[e>>2]=0;c[e+4>>2]=0;e=Uz(i)|0;c[b>>2]=i;c[b+4>>2]=e;c[b+8>>2]=f;f=c[a+32>>2]|0;El(g,d,b);a=_A(72)|0;c[a+4>>2]=0;e=a+8|0;c[e>>2]=0;d=a+12|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[a+32>>2]=18;c[a>>2]=287932;Il(a+36|0,g);d=f+4|0;b=c[d>>2]|0;if(!b){i=f;c[i>>2]=a;c[d>>2]=a;i=f+8|0;f=c[i>>2]|0;f=f+1|0;c[i>>2]=f;Ml(g);aa=h;return 0}else{c[e>>2]=b;i=b+4|0;c[i>>2]=a;c[d>>2]=a;i=f+8|0;f=c[i>>2]|0;f=f+1|0;c[i>>2]=f;Ml(g);aa=h;return 0}return 0}function vg(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;h=aa;aa=aa+64|0;j=h+40|0;i=h;f=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;e=j+12|0;c[e>>2]=0;c[e+4>>2]=0;e=Uz(f)|0;c[j>>2]=f;c[j+4>>2]=e;c[j+8>>2]=g;g=c[a+32>>2]|0;Nl(i,d,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function wg(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;h=aa;aa=aa+64|0;j=h+40|0;i=h;b=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;f=j+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(b)|0;c[j>>2]=b;c[j+4>>2]=f;c[j+8>>2]=g;g=c[a+32>>2]|0;Ol(i,d,e,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function xg(a){a=a|0;return}function yg(a){a=a|0;$A(a);return}function zg(a){a=a|0;c[a>>2]=287932;Ml(a+36|0);return}function Ag(a){a=a|0;c[a>>2]=287932;Ml(a+36|0);$A(a);return}function Bg(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,l=0;l=d;i=b;h=l-i|0;f=h>>2;g=a+8|0;e=c[g>>2]|0;j=c[a>>2]|0;k=j;if(f>>>0<=e-j>>2>>>0){h=a+4|0;g=(c[h>>2]|0)-j>>2;f=f>>>0>g>>>0;g=f?b+(g<<2)|0:d;d=g;e=d-i|0;if(e|0)tC(j|0,b|0,e|0)|0;if(!f){c[h>>2]=k+(e>>2<<2);return}e=l-d|0;if((e|0)<=0)return;sC(c[h>>2]|0,g|0,e|0)|0;c[h>>2]=(c[h>>2]|0)+(e>>>2<<2);return}if(j){e=a+4|0;c[e>>2]=j;$A(j);c[g>>2]=0;c[e>>2]=0;c[a>>2]=0;e=0}if(f>>>0>1073741823)HB();l=e>>1;f=e>>2>>>0<536870911?(l>>>0<f>>>0?f:l):1073741823;if(f>>>0>1073741823)HB();d=_A(f<<2)|0;e=a+4|0;c[e>>2]=d;c[a>>2]=d;c[g>>2]=d+(f<<2);if((h|0)<=0)return;sC(d|0,b|0,h|0)|0;c[e>>2]=d+(h>>>2<<2);return}function Cg(b){b=b|0;var d=0,e=0;c[b>>2]=287948;e=b+36|0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[e+11>>0]|0)>=0)return;$A(c[e>>2]|0);return}function Dg(b){b=b|0;var d=0,e=0;c[b>>2]=287948;e=b+36|0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[e+11>>0]|0)>=0){$A(b);return}$A(c[e>>2]|0);$A(b);return}function Eg(d,e,f){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,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+32|0;o=u+24|0;r=u+12|0;s=u;cB(d,f);if(!(Jg(e,d)|0)){aa=u;return}h=s+11|0;l=s+4|0;k=d+11|0;j=d+4|0;i=r+11|0;p=d+11|0;m=1;while(1){Kg(r,f);yB(s,m);n=a[h>>0]|0;t=n<<24>>24<0;g=c[s>>2]|0;uB(r,t?g:s,t?c[l>>2]|0:n&255)|0;n=c[r>>2]|0;q=r+4|0;c[o>>2]=c[q>>2];b[o+4>>1]=b[q+4>>1]|0;a[o+6>>0]=a[q+6>>0]|0;q=a[r+11>>0]|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;if((a[k>>0]|0)<0){a[c[d>>2]>>0]=0;c[j>>2]=0}else{a[d>>0]=0;a[k>>0]=0}pB(d);c[d>>2]=n;c[j>>2]=c[o>>2];b[j+4>>1]=b[o+4>>1]|0;a[j+6>>0]=a[o+6>>0]|0;a[p>>0]=q;c[o>>2]=0;b[o+4>>1]=0;a[o+6>>0]=0;if(t)$A(g);if((a[i>>0]|0)<0)$A(c[r>>2]|0);if(!(Jg(e,d)|0))break;else m=m+1|0}aa=u;return}function Fg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;j=_A(44)|0;h=j+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;i=j+20|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];i=a[j+19>>0]|0;g=i<<24>>24<0;h=g?c[h>>2]|0:h;i=g?c[j+12>>2]|0:i&255;if(i>>>0>3){f=h;e=i;g=i;while(1){l=v(d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24,1540483477)|0;e=(v(l>>>24^l,1540483477)|0)^(v(e,1540483477)|0);g=g+-4|0;if(g>>>0<=3)break;else f=f+4|0}l=i+-4|0;f=l&-4;h=h+(f+4)|0;f=l-f|0}else{e=i;f=i}switch(f|0){case 3:{e=(d[h+2>>0]|0)<<16^e;k=7;break}case 2:{k=7;break}case 1:{k=8;break}default:{}}if((k|0)==7){e=(d[h+1>>0]|0)<<8^e;k=8}if((k|0)==8)e=v(e^(d[h>>0]|0),1540483477)|0;l=v(e>>>13^e,1540483477)|0;c[j+4>>2]=l>>>15^l;c[j>>2]=0;Gg(b,j);return}function Gg(b,e){b=b|0;e=e|0;var g=0,h=0,i=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=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;K=e+8|0;I=K+11|0;l=a[I>>0]|0;H=l<<24>>24<0;J=e+12|0;j=H?c[K>>2]|0:K;l=H?c[J>>2]|0:l&255;if(l>>>0>3){h=j;g=l;i=l;while(1){H=v(d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24,1540483477)|0;g=(v(H>>>24^H,1540483477)|0)^(v(g,1540483477)|0);i=i+-4|0;if(i>>>0<=3)break;else h=h+4|0}H=l+-4|0;h=H&-4;j=j+(h+4)|0;h=H-h|0}else{g=l;h=l}switch(h|0){case 3:{g=d[j+2>>0]<<16^g;L=7;break}case 2:{L=7;break}case 1:{L=8;break}default:{}}if((L|0)==7){g=d[j+1>>0]<<8^g;L=8}if((L|0)==8)g=v(g^d[j>>0],1540483477)|0;h=v(g>>>13^g,1540483477)|0;h=h>>>15^h;g=e+4|0;c[g>>2]=h;j=b+4|0;i=c[j>>2]|0;H=b+12|0;m=+(((c[H>>2]|0)+1|0)>>>0);k=+f[b+16>>2];if((i|0)==0|k*+(i>>>0)<m){x=i<<1|(i>>>0<3|(i+-1&i|0)!=0)&1;E=~~+u(+(m/k))>>>0;Hg(b,x>>>0<E>>>0?E:x);x=c[g>>2]|0;E=c[j>>2]|0}else{x=h;E=i}F=E+-1|0;G=(F&E|0)==0;if(!G)if(x>>>0<E>>>0)D=x;else D=(x>>>0)%(E>>>0)|0;else D=F&x;i=c[(c[b>>2]|0)+(D<<2)>>2]|0;if(!i){g=b+8|0;c[e>>2]=c[g>>2];c[g>>2]=e;c[(c[b>>2]|0)+(D<<2)>>2]=g;g=c[e>>2]|0;if(!g){b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}g=c[g+4>>2]|0;if(!G){if(g>>>0>=E>>>0)g=(g>>>0)%(E>>>0)|0}else g=g&F;c[(c[b>>2]|0)+(g<<2)>>2]=e;b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}g=c[i>>2]|0;a:do if(!g){h=i;g=i}else{if(G){p=g;o=0;h=i;g=i;while(1){i=c[p+4>>2]|0;if((i&F|0)!=(D|0))break a;b:do if((i|0)==(x|0)?(q=p+8|0,s=a[q+11>>0]|0,t=s<<24>>24<0,s=s&255,r=t?c[p+12>>2]|0:s,C=a[I>>0]|0,w=C<<24>>24<0,(r|0)==((w?c[J>>2]|0:C&255)|0)):0){j=c[q>>2]|0;n=t?j:q;i=w?c[K>>2]|0:K;l=(r|0)==0;j=j&255;if(t){if(l){g=1;break}i=(Tz(n,i,r)|0)==0;L=38;break}if(!l)if((a[i>>0]|0)==j<<24>>24){j=s;l=q;while(1){j=j+-1|0;l=l+1|0;if(!j){g=1;break b}i=i+1|0;if((a[l>>0]|0)!=(a[i>>0]|0)){i=0;L=38;break}}}else{i=0;L=38}else g=1}else{i=0;L=38}while(0);if((L|0)==38){L=0;if(i|o^1)g=i;else break a}h=c[p>>2]|0;if(!h){h=p;g=p;break a}else{B=p;C=p;p=h;o=o|g;g=B;h=C}}}p=g;o=0;h=i;g=i;while(1){i=c[p+4>>2]|0;if(i>>>0<E>>>0)j=i;else j=(i>>>0)%(E>>>0)|0;if((j|0)!=(D|0))break a;c:do if((i|0)==(x|0)?(y=p+8|0,A=a[y+11>>0]|0,B=A<<24>>24<0,A=A&255,z=B?c[p+12>>2]|0:A,w=a[I>>0]|0,C=w<<24>>24<0,(z|0)==((C?c[J>>2]|0:w&255)|0)):0){j=c[y>>2]|0;n=B?j:y;i=C?c[K>>2]|0:K;l=(z|0)==0;j=j&255;if(B){if(l){g=1;break}i=(Tz(n,i,z)|0)==0;L=53;break}if(!l)if((a[i>>0]|0)==j<<24>>24){j=A;l=y;while(1){j=j+-1|0;l=l+1|0;if(!j){g=1;break c}i=i+1|0;if((a[l>>0]|0)!=(a[i>>0]|0)){i=0;L=53;break}}}else{i=0;L=53}else g=1}else{i=0;L=53}while(0);if((L|0)==53){L=0;if(i|o^1)g=i;else break a}h=c[p>>2]|0;if(!h){h=p;g=p;break}else{t=p;w=p;p=h;o=o|g;g=t;h=w}}}while(0);c[e>>2]=c[g>>2];c[h>>2]=e;g=c[e>>2]|0;if(!g){b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}g=c[g+4>>2]|0;if(!G){if(g>>>0>=E>>>0)g=(g>>>0)%(E>>>0)|0}else g=g&F;if((g|0)==(D|0)){b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}c[(c[b>>2]|0)+(g<<2)>>2]=e;b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}function Hg(a,b){a=a|0;b=b|0;var d=0,e=0,g=0;if((b|0)!=1){if(b+-1&b)b=YA(b)|0}else b=2;e=c[a+4>>2]|0;if(b>>>0>e>>>0){Ig(a,b);return}if(b>>>0>=e>>>0)return;d=~~+u(+(+((c[a+12>>2]|0)>>>0)/+f[a+16>>2]))>>>0;if(e>>>0>2&(e+-1&e|0)==0){g=1<<32-(w(d+-1|0)|0);d=d>>>0<2?d:g}else d=YA(d)|0;b=b>>>0<d>>>0?d:b;if(b>>>0>=e>>>0)return;Ig(a,b);return}function Ig(b,d){b=b|0;d=d|0;var 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;f=b+4|0;if(!d){e=c[b>>2]|0;c[b>>2]=0;if(e|0)$A(e);c[f>>2]=0;return}if(d>>>0>1073741823)U();r=_A(d<<2)|0;e=c[b>>2]|0;c[b>>2]=r;if(e|0)$A(e);c[f>>2]=d;e=0;do{c[(c[b>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=(d|0));f=b+8|0;g=c[f>>2]|0;if(!g)return;e=c[g+4>>2]|0;q=d+-1|0;r=(q&d|0)==0;if(!r){if(e>>>0>=d>>>0)e=(e>>>0)%(d>>>0)|0}else e=e&q;c[(c[b>>2]|0)+(e<<2)>>2]=f;f=c[g>>2]|0;if(!f)return;p=g;while(1){g=c[f+4>>2]|0;if(!r){if(g>>>0>=d>>>0)g=(g>>>0)%(d>>>0)|0}else g=g&q;do if((g|0)==(e|0))g=f;else{h=(c[b>>2]|0)+(g<<2)|0;if(!(c[h>>2]|0)){c[h>>2]=p;e=g;g=f;break}h=c[f>>2]|0;a:do if(!h)h=f;else{n=f+8|0;m=a[n+11>>0]|0;k=m<<24>>24<0;m=m&255;o=k?c[f+12>>2]|0:m;l=(o|0)==0;if(k){i=f;while(1){j=h+8|0;m=a[j+11>>0]|0;k=m<<24>>24<0;if((o|0)!=((k?c[h+12>>2]|0:m&255)|0)){h=i;break a}if(!l?Tz(c[n>>2]|0,k?c[j>>2]|0:j,o)|0:0){h=i;break a}i=c[h>>2]|0;if(!i)break a;else{m=h;h=i;i=m}}}if(l){i=f;while(1){o=a[h+8+11>>0]|0;if((o<<24>>24<0?c[h+12>>2]|0:o&255)|0){h=i;break a}i=c[h>>2]|0;if(!i)break a;else{o=h;h=i;i=o}}}l=f;while(1){i=h+8|0;k=a[i+11>>0]|0;j=k<<24>>24<0;if((o|0)!=((j?c[h+12>>2]|0:k&255)|0)){h=l;break a}i=j?c[i>>2]|0:i;if((a[i>>0]|0)!=(c[n>>2]&255)<<24>>24){h=l;break a}j=m;k=n;while(1){j=j+-1|0;k=k+1|0;if(!j)break;i=i+1|0;if((a[k>>0]|0)!=(a[i>>0]|0)){h=l;break a}}i=c[h>>2]|0;if(!i)break;else{l=h;h=i}}}while(0);c[p>>2]=c[h>>2];c[h>>2]=c[c[(c[b>>2]|0)+(g<<2)>>2]>>2];c[c[(c[b>>2]|0)+(g<<2)>>2]>>2]=f;g=p}while(0);f=c[g>>2]|0;if(!f)break;else p=g}return}function Jg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=Lg(b,d)|0;if(!b){l=0;return l|0}b=c[b>>2]|0;if(!b){l=1;return l|0}l=a[d+11>>0]|0;k=l<<24>>24<0;l=k?c[d+4>>2]|0:l&255;k=k?c[d>>2]|0:d;j=(l|0)==0;i=b;b=1;a:while(1){g=i;d=g+8|0;f=a[d+11>>0]|0;h=f<<24>>24<0;f=f&255;if(((h?c[g+12>>2]|0:f)|0)!=(l|0)){d=14;break}e=c[d>>2]|0;g=h?e:d;e=e&255;b:do if(h){if(!j?Tz(g,k,l)|0:0){d=14;break a}}else if(!j){if((a[k>>0]|0)!=e<<24>>24){d=14;break a}e=k;while(1){f=f+-1|0;d=d+1|0;if(!f)break b;e=e+1|0;if((a[d>>0]|0)!=(a[e>>0]|0)){d=14;break a}}}while(0);i=c[i>>2]|0;b=b+1|0;if(!i){d=14;break}}if((d|0)==14)return b|0;return 0}function Kg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=a[d+11>>0]|0;e=f<<24>>24<0;f=e?c[d+4>>2]|0:f&255;e=e?c[d>>2]|0:d;d=f+1|0;if(d>>>0>4294967279)aB();if(d>>>0<11){a[b+11>>0]=f;if(!f){e=b;f=e+f|0;a[f>>0]=0;uB(b,331578,1)|0;return}else d=b}else{g=f+17&-16;d=_A(g)|0;c[b>>2]=d;c[b+8>>2]=g|-2147483648;c[b+4>>2]=f}sC(d|0,e|0,f|0)|0;g=d;g=g+f|0;a[g>>0]=0;uB(b,331578,1)|0;return}function Lg(b,e){b=b|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,p=0,q=0,r=0,s=0,t=0;s=a[e+11>>0]|0;r=s<<24>>24<0;t=r?c[e>>2]|0:e;s=r?c[e+4>>2]|0:s&255;if(s>>>0>3){e=t;h=s;f=s;while(1){r=v(d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24,1540483477)|0;h=(v(r>>>24^r,1540483477)|0)^(v(h,1540483477)|0);f=f+-4|0;if(f>>>0<=3)break;else e=e+4|0}r=s+-4|0;f=r&-4;g=t+(f+4)|0;e=h;f=r-f|0}else{g=t;e=s;f=s}switch(f|0){case 3:{i=d[g+2>>0]<<16^e;l=7;break}case 2:{i=e;l=7;break}case 1:{j=e;l=8;break}default:k=e}if((l|0)==7){j=d[g+1>>0]<<8^i;l=8}if((l|0)==8)k=v(j^d[g>>0],1540483477)|0;r=v(k>>>13^k,1540483477)|0;r=r>>>15^r;p=c[b+4>>2]|0;if(!p){t=0;return t|0}i=p+-1|0;f=(i&p|0)==0;if(!f)if(r>>>0<p>>>0)q=r;else q=(r>>>0)%(p>>>0)|0;else q=r&i;e=c[(c[b>>2]|0)+(q<<2)>>2]|0;if(!e){t=0;return t|0}j=c[e>>2]|0;if(!j){t=0;return t|0}k=(s|0)==0;if(f){e=j;a:while(1){l=c[e+4>>2]|0;f=(r|0)==(l|0);if(!(f|(l&i|0)==(q|0))){e=0;l=45;break}do if(f?(m=e+8|0,n=a[m+11>>0]|0,o=n<<24>>24<0,n=n&255,((o?c[e+12>>2]|0:n)|0)==(s|0)):0){f=c[m>>2]|0;g=o?f:m;f=f&255;if(o){if(k){l=45;break a}if(!(Tz(g,t,s)|0)){l=45;break a}else break}if(k){l=45;break a}if((a[t>>0]|0)==f<<24>>24){f=n;g=m;h=t;do{f=f+-1|0;g=g+1|0;if(!f){l=45;break a}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);e=c[e>>2]|0;if(!e){e=0;l=45;break}}if((l|0)==45)return e|0}b:while(1){e=c[j+4>>2]|0;do if((r|0)==(e|0)){e=j+8|0;g=a[e+11>>0]|0;i=g<<24>>24<0;g=g&255;if(((i?c[j+12>>2]|0:g)|0)==(s|0)){f=c[e>>2]|0;h=i?f:e;f=f&255;if(i){if(k){e=j;l=45;break b}if(!(Tz(h,t,s)|0)){e=j;l=45;break b}else break}if(k){e=j;l=45;break b}if((a[t>>0]|0)==f<<24>>24){f=t;do{g=g+-1|0;e=e+1|0;if(!g){e=j;l=45;break b}f=f+1|0}while((a[e>>0]|0)==(a[f>>0]|0))}}}else{if(e>>>0>=p>>>0)e=(e>>>0)%(p>>>0)|0;if((e|0)!=(q|0)){e=0;l=45;break b}}while(0);j=c[j>>2]|0;if(!j){e=0;l=45;break}}if((l|0)==45)return e|0;return 0}function Mg(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;j=aa;aa=aa+192|0;k=j+144|0;e=j+128|0;f=j;g=j+184|0;h=j+180|0;i=j+160|0;c[k>>2]=d;c[e>>2]=c[k>>2];c[g>>2]=f;d=(Vz(f,128,b,k)|0)+1|0;if(d>>>0>128){f=aa;aa=aa+((1*d|0)+15&-16)|0;c[g>>2]=f;Vz(f,d,b,e)|0}d=c[a+8>>2]|0;c[h>>2]=1;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=-1;b=d+4|0;e=c[b>>2]|0;if(e>>>0<(c[d+8>>2]|0)>>>0){k=Uz(f)|0;c[e>>2]=1;h=e+4|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];Wn(e+24|0,f,k);c[b>>2]=(c[b>>2]|0)+36;aa=j;return}else{Ng(d,h,i,g);aa=j;return}}function Ng(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,n=0,o=0;o=aa;aa=aa+32|0;i=o;m=b+4|0;g=c[b>>2]|0;k=((c[m>>2]|0)-g|0)/36|0;h=k+1|0;if(h>>>0>119304647)HB();n=b+8|0;l=((c[n>>2]|0)-g|0)/36|0;g=l<<1;g=l>>>0<59652323?(g>>>0<h>>>0?h:g):119304647;do if(g)if(g>>>0>119304647)U();else{j=_A(g*36|0)|0;break}else j=0;while(0);h=j+(k*36|0)|0;l=j+(g*36|0)|0;g=c[d>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];d=c[f>>2]|0;f=Uz(d)|0;c[h>>2]=g;g=j+(k*36|0)+4|0;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];Wn(j+(k*36|0)+24|0,d,f);f=h+36|0;d=c[b>>2]|0;g=c[m>>2]|0;if((g|0)==(d|0)){e=d;g=d}else{do{j=h;h=h+-36|0;k=g;g=g+-36|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];j=j+-12|0;k=k+-12|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0}while((g|0)!=(d|0));e=c[b>>2]|0;g=c[m>>2]|0}c[b>>2]=h;c[m>>2]=f;c[n>>2]=l;d=e;if((g|0)!=(d|0))do{h=g+-12|0;g=g+-36|0;if((a[h+11>>0]|0)<0)$A(c[h>>2]|0)}while((g|0)!=(d|0));if(!e){aa=o;return}$A(e);aa=o;return}function Og(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;i=_A(44)|0;c[b>>2]=i;c[b+4>>2]=e+8;e=i+8|0;cB(e,f);h=i+20|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];a[b+8>>0]=1;h=a[i+19>>0]|0;b=h<<24>>24<0;e=b?c[e>>2]|0:e;h=b?c[i+12>>2]|0:h&255;if(h>>>0>3){g=e;f=h;b=h;while(1){k=v(d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24,1540483477)|0;f=(v(k>>>24^k,1540483477)|0)^(v(f,1540483477)|0);b=b+-4|0;if(b>>>0<=3)break;else g=g+4|0}k=h+-4|0;g=k&-4;e=e+(g+4)|0;g=k-g|0}else{f=h;g=h}switch(g|0){case 3:{f=(d[e+2>>0]|0)<<16^f;j=7;break}case 2:{j=7;break}case 1:break;default:{j=f;k=j>>>13;j=k^j;j=v(j,1540483477)|0;k=j>>>15;j=k^j;k=i+4|0;c[k>>2]=j;c[i>>2]=0;return}}if((j|0)==7)f=(d[e+1>>0]|0)<<8^f;j=v(f^(d[e>>0]|0),1540483477)|0;k=j>>>13;j=k^j;j=v(j,1540483477)|0;k=j>>>15;j=k^j;k=i+4|0;c[k>>2]=j;c[i>>2]=0;return}function Pg(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=287964;f=b+36|0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}e=b+88|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+92>>2]=0;c[e>>2]=0;c[b+96>>2]=0;Ml(b+48|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function Qg(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=287964;f=b+36|0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}e=b+88|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+92>>2]=0;c[e>>2]=0;c[b+96>>2]=0;Ml(b+48|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function Rg(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;l=aa;aa=aa+48|0;f=l;j=a+4|0;d=c[a>>2]|0;h=((c[j>>2]|0)-d|0)/40|0;e=h+1|0;if(e>>>0>107374182)HB();k=a+8|0;i=((c[k>>2]|0)-d|0)/40|0;d=i<<1;d=i>>>0<53687091?(d>>>0<e>>>0?e:d):107374182;do if(d)if(d>>>0>107374182)U();else{g=_A(d*40|0)|0;break}else g=0;while(0);e=g+(h*40|0)|0;i=g+(d*40|0)|0;Gl(f,b);c[e>>2]=1;Il(g+(h*40|0)+4|0,f);Ml(f);g=e+40|0;f=c[a>>2]|0;d=c[j>>2]|0;if((d|0)==(f|0)){b=f;d=f}else{do{h=d;d=d+-40|0;c[e+-40>>2]=c[d>>2];Il(e+-36|0,h+-36|0);e=e+-40|0}while((d|0)!=(f|0));b=c[a>>2]|0;d=c[j>>2]|0}c[a>>2]=e;c[j>>2]=g;c[k>>2]=i;e=b;if((d|0)!=(e|0))do{Ml(d+-36|0);d=d+-40|0}while((d|0)!=(e|0));if(!b){aa=l;return}$A(b);aa=l;return}function Sg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;f=k;i=a+4|0;b=c[a>>2]|0;g=((c[i>>2]|0)-b|0)/40|0;d=g+1|0;if(d>>>0>107374182)HB();j=a+8|0;h=((c[j>>2]|0)-b|0)/40|0;b=h<<1;b=h>>>0<53687091?(b>>>0<d>>>0?d:b):107374182;do if(b)if(b>>>0>107374182)U();else{e=_A(b*40|0)|0;break}else e=0;while(0);d=e+(g*40|0)|0;h=e+(b*40|0)|0;c[d>>2]=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;El(e+(g*40|0)+4|0,-1,f);g=d+40|0;f=c[a>>2]|0;b=c[i>>2]|0;if((b|0)==(f|0)){e=f;b=f}else{do{e=b;b=b+-40|0;c[d+-40>>2]=c[b>>2];Il(d+-36|0,e+-36|0);d=d+-40|0}while((b|0)!=(f|0));e=c[a>>2]|0;b=c[i>>2]|0}c[a>>2]=d;c[i>>2]=g;c[j>>2]=h;d=e;if((b|0)!=(d|0))do{Ml(b+-36|0);b=b+-40|0}while((b|0)!=(d|0));if(!e){aa=k;return}$A(e);aa=k;return}function Tg(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;k=a+8|0;e=c[a>>2]|0;g=e;if((((c[k>>2]|0)-e|0)/40|0)>>>0>=b>>>0)return;j=a+4|0;if(b>>>0>107374182)U();d=c[j>>2]|0;h=_A(b*40|0)|0;f=h+(((d-e|0)/40|0)*40|0)|0;i=f;h=h+(b*40|0)|0;e=d;if((e|0)!=(g|0)){d=e;do{b=d;d=d+-40|0;c[f+-40>>2]=c[d>>2];Il(f+-36|0,b+-36|0);f=f+-40|0}while((d|0)!=(g|0));d=c[a>>2]|0;e=c[j>>2]|0;b=d;c[a>>2]=f;c[j>>2]=i;c[k>>2]=h;if((e|0)!=(b|0))do{Ml(e+-36|0);e=e+-40|0}while((e|0)!=(b|0))}else{c[a>>2]=i;c[j>>2]=i;c[k>>2]=h}if(!d)return;$A(d);return}function Ug(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;c[b>>2]=287980;h=b+36|0;e=b+104|0;f=c[e>>2]|0;if(f|0){g=b+108|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{Ml(d+-36|0);d=d+-40|0}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}e=b+92|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+96>>2]=0;c[e>>2]=0;c[b+100>>2]=0;Ml(b+48|0);if((a[h+11>>0]|0)>=0)return;$A(c[h>>2]|0);return}function Vg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;c[b>>2]=287980;h=b+36|0;e=b+104|0;f=c[e>>2]|0;if(f|0){g=b+108|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{Ml(d+-36|0);d=d+-40|0}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}e=b+92|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+96>>2]=0;c[e>>2]=0;c[b+100>>2]=0;Ml(b+48|0);if((a[h+11>>0]|0)>=0){$A(b);return}$A(c[h>>2]|0);$A(b);return}function Wg(a){a=a|0;$A(a);return}function Xg(a){a=a|0;$A(a);return}function Yg(a){a=a|0;$A(a);return}function Zg(a){a=a|0;$A(a);return}function _g(a){a=a|0;$A(a);return}function $g(a){a=a|0;$A(a);return}function ah(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;f=j+20|0;g=j;if((e|0)>-1){a[d>>0]=1;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(f,e,g);Hl(d+4|0,f)|0;Ml(f);f=c[(c[(c[b+12>>2]|0)+124>>2]|0)+(e<<2)>>2]|0;g=f+12|0;e=d+40|0;if((e|0)==(g|0)){aa=j;return}Bg(e,c[g>>2]|0,c[f+16>>2]|0);Bg(d+52|0,c[f+24>>2]|0,c[f+28>>2]|0);aa=j;return}a[d>>0]=0;c[d+44>>2]=c[d+40>>2];switch(e|0){case -64:{h=0;i=0;break}case -24:case -17:case -16:case -5:case -4:case -3:case -2:case -1:{i=_A(4)|0;c[i>>2]=e;h=i;i=i+4|0;break}default:U()}e=d+52|0;f=c[e>>2]|0;if(!f){g=d+56|0;f=d+60|0}else{g=d+56|0;c[g>>2]=f;$A(f);f=d+60|0;c[f>>2]=0;c[g>>2]=0;c[e>>2]=0}c[e>>2]=h;c[g>>2]=i;c[f>>2]=i;aa=j;return}function bh(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,l=0,m=0,n=0;l=a+24|0;f=c[l>>2]|0;m=a+28|0;g=c[m>>2]|0;if(f>>>0<g>>>0){c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=e;c[l>>2]=f+12;return}k=a+20|0;j=c[k>>2]|0;i=f-j|0;h=(i|0)/12|0;a=h+1|0;if(a>>>0>357913941)HB();f=(g-j|0)/12|0;g=f<<1;g=f>>>0<178956970?(g>>>0<a>>>0?a:g):357913941;do if(g)if(g>>>0>357913941)U();else{n=_A(g*12|0)|0;break}else n=0;while(0);f=n+(h*12|0)|0;c[f>>2]=b;c[n+(h*12|0)+4>>2]=d;c[n+(h*12|0)+8>>2]=e;a=f+(((i|0)/-12|0)*12|0)|0;if((i|0)>0)sC(a|0,j|0,i|0)|0;c[k>>2]=a;c[l>>2]=f+12;c[m>>2]=n+(g*12|0);if(!j)return;$A(j);return}function ch(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288092;e=b+144|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+148>>2]=0;c[e>>2]=0;c[b+152>>2]=0;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function dh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288092;e=b+144|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+148>>2]=0;c[e>>2]=0;c[b+152>>2]=0;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function eh(a){a=a|0;c[a>>2]=288108;Ml(a+36|0);return}function fh(a){a=a|0;c[a>>2]=288108;Ml(a+36|0);$A(a);return}function gh(a){a=a|0;$A(a);return}function hh(a){a=a|0;$A(a);return}function ih(a){a=a|0;var b=0;c[a>>2]=288156;Ml(a+100|0);b=c[a+88>>2]|0;if(b|0){c[a+92>>2]=b;$A(b)}b=c[a+76>>2]|0;if(!b){a=a+40|0;Ml(a);return}c[a+80>>2]=b;$A(b);a=a+40|0;Ml(a);return}function jh(a){a=a|0;var b=0;c[a>>2]=288156;Ml(a+100|0);b=c[a+88>>2]|0;if(b|0){c[a+92>>2]=b;$A(b)}b=c[a+76>>2]|0;if(!b){b=a+40|0;Ml(b);$A(a);return}c[a+80>>2]=b;$A(b);b=a+40|0;Ml(b);$A(a);return}function kh(a){a=a|0;c[a>>2]=288172;Ml(a+36|0);return}function lh(a){a=a|0;c[a>>2]=288172;Ml(a+36|0);$A(a);return}function mh(a){a=a|0;$A(a);return}function nh(a){a=a|0;$A(a);return}function oh(a){a=a|0;$A(a);return}function ph(a){a=a|0;$A(a);return}function qh(a){a=a|0;$A(a);return}function rh(a){a=a|0;c[a>>2]=288268;Ml(a+36|0);return}function sh(a){a=a|0;c[a>>2]=288268;Ml(a+36|0);$A(a);return}function th(a){a=a|0;c[a>>2]=288284;Ml(a+36|0);return}function uh(a){a=a|0;c[a>>2]=288284;Ml(a+36|0);$A(a);return}function vh(a){a=a|0;c[a>>2]=288300;Ml(a+36|0);return}function wh(a){a=a|0;c[a>>2]=288300;Ml(a+36|0);$A(a);return}function xh(a){a=a|0;c[a>>2]=288316;Ml(a+36|0);return}function yh(a){a=a|0;c[a>>2]=288316;Ml(a+36|0);$A(a);return}function zh(a){a=a|0;c[a>>2]=288332;Ml(a+36|0);return}function Ah(a){a=a|0;c[a>>2]=288332;Ml(a+36|0);$A(a);return}function Bh(a){a=a|0;c[a>>2]=288348;Ml(a+36|0);return}function Ch(a){a=a|0;c[a>>2]=288348;Ml(a+36|0);$A(a);return}function Dh(a){a=a|0;$A(a);return}function Eh(a){a=a|0;$A(a);return}function Fh(a){a=a|0;c[a>>2]=288396;Ml(a+36|0);return}function Gh(a){a=a|0;c[a>>2]=288396;Ml(a+36|0);$A(a);return}function Hh(a){a=a|0;$A(a);return}function Ih(a){a=a|0;$A(a);return}function Jh(a){a=a|0;c[a>>2]=288444;Ml(a+36|0);return}function Kh(a){a=a|0;c[a>>2]=288444;Ml(a+36|0);$A(a);return}function Lh(a){a=a|0;$A(a);return}function Mh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288476;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function Nh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288476;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function Oh(a){a=a|0;c[a>>2]=288492;Ml(a+36|0);return}function Ph(a){a=a|0;c[a>>2]=288492;Ml(a+36|0);$A(a);return}function Qh(a){a=a|0;c[a>>2]=288508;Ml(a+36|0);return}function Rh(a){a=a|0;c[a>>2]=288508;Ml(a+36|0);$A(a);return}function Sh(a){a=a|0;c[a>>2]=288524;Ml(a+36|0);return}function Th(a){a=a|0;c[a>>2]=288524;Ml(a+36|0);$A(a);return}function Uh(a){a=a|0;$A(a);return}function Vh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288556;e=b+144|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+148>>2]=0;c[e>>2]=0;c[b+152>>2]=0;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function Wh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288556;e=b+144|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+148>>2]=0;c[e>>2]=0;c[b+152>>2]=0;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function Xh(a){a=a|0;c[a>>2]=288572;Ml(a+36|0);return}function Yh(a){a=a|0;c[a>>2]=288572;Ml(a+36|0);$A(a);return}function Zh(a){a=a|0;$A(a);return}function _h(a){a=a|0;$A(a);return}function $h(a){a=a|0;$A(a);return}function ai(a){a=a|0;var b=0;c[a>>2]=288636;Ml(a+100|0);b=c[a+88>>2]|0;if(b|0){c[a+92>>2]=b;$A(b)}b=c[a+76>>2]|0;if(!b){a=a+40|0;Ml(a);return}c[a+80>>2]=b;$A(b);a=a+40|0;Ml(a);return}function bi(a){a=a|0;var b=0;c[a>>2]=288636;Ml(a+100|0);b=c[a+88>>2]|0;if(b|0){c[a+92>>2]=b;$A(b)}b=c[a+76>>2]|0;if(!b){b=a+40|0;Ml(b);$A(a);return}c[a+80>>2]=b;$A(b);b=a+40|0;Ml(b);$A(a);return}function ci(a){a=a|0;c[a>>2]=288652;Ml(a+36|0);return}function di(a){a=a|0;c[a>>2]=288652;Ml(a+36|0);$A(a);return}function ei(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;l=aa;aa=aa+32|0;h=l;j=a+8|0;e=c[j>>2]|0;k=a+4|0;d=c[k>>2]|0;if(((e-d|0)/36|0)>>>0>=b>>>0){do{c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(d,-1,h);d=(c[k>>2]|0)+36|0;c[k>>2]=d;b=b+-1|0}while((b|0)!=0);aa=l;return}f=c[a>>2]|0;d=(d-f|0)/36|0;g=d+b|0;if(g>>>0>119304647)HB();e=(e-f|0)/36|0;f=e<<1;f=e>>>0<59652323?(f>>>0<g>>>0?g:f):119304647;do if(f)if(f>>>0>119304647)U();else{i=_A(f*36|0)|0;break}else i=0;while(0);d=i+(d*36|0)|0;e=d;while(1){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(e,-1,h);b=b+-1|0;if(!b)break;else e=e+36|0}h=i+(f*36|0)|0;g=i+(g*36|0)|0;f=c[a>>2]|0;b=c[k>>2]|0;if((b|0)==(f|0)){e=f;b=f}else{do{d=d+-36|0;b=b+-36|0;Il(d,b)}while((b|0)!=(f|0));e=c[a>>2]|0;b=c[k>>2]|0}c[a>>2]=d;c[k>>2]=g;c[j>>2]=h;d=e;if((b|0)!=(d|0))do{b=b+-36|0;Ml(b)}while((b|0)!=(d|0));if(!e){aa=l;return}$A(e);aa=l;return}function fi(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=288668;Ml(a+48|0);b=a+36|0;e=c[b>>2]|0;if(!e)return;d=a+40|0;a=c[d>>2]|0;if((a|0)==(e|0))a=e;else{do{a=a+-36|0;Ml(a)}while((a|0)!=(e|0));a=c[b>>2]|0}c[d>>2]=e;$A(a);return}function gi(a){a=a|0;var b=0,d=0,e=0,f=0;c[a>>2]=288668;Ml(a+48|0);d=a+36|0;e=c[d>>2]|0;if(!e){$A(a);return}f=a+40|0;b=c[f>>2]|0;if((b|0)==(e|0))b=e;else{do{b=b+-36|0;Ml(b)}while((b|0)!=(e|0));b=c[d>>2]|0}c[f>>2]=e;$A(b);$A(a);return}function hi(a){a=a|0;c[a>>2]=288684;Ml(a+72|0);Ml(a+36|0);return}function ii(a){a=a|0;c[a>>2]=288684;Ml(a+72|0);Ml(a+36|0);$A(a);return}function ji(a){a=a|0;c[a>>2]=288700;Ml(a+36|0);return}function ki(a){a=a|0;c[a>>2]=288700;Ml(a+36|0);$A(a);return}function li(a){a=a|0;c[a>>2]=288716;Ml(a+36|0);return}function mi(a){a=a|0;c[a>>2]=288716;Ml(a+36|0);$A(a);return}function ni(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288732;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function oi(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288732;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function pi(a){a=a|0;$A(a);return}function qi(a){a=a|0;$A(a);return}function ri(a){a=a|0;$A(a);return}function si(a){a=a|0;$A(a);return}function ti(a){a=a|0;$A(a);return}function ui(a){a=a|0;$A(a);return}function vi(a){a=a|0;$A(a);return}function wi(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,l=0,m=0,n=0;i=a+4|0;g=c[a>>2]|0;m=(c[i>>2]|0)-g|0;l=m>>3;e=l+1|0;if(e>>>0>536870911)HB();j=a+8|0;n=(c[j>>2]|0)-g|0;f=n>>2;f=n>>3>>>0<268435455?(f>>>0<e>>>0?e:f):536870911;do if(f)if(f>>>0>536870911)U();else{k=_A(f<<3)|0;h=k;break}else{h=0;k=0}while(0);e=k+(l<<3)|0;c[e>>2]=c[b>>2];c[k+(l<<3)+4>>2]=c[d>>2];if((m|0)>0)sC(h|0,g|0,m|0)|0;c[a>>2]=k;c[i>>2]=e+8;c[j>>2]=k+(f<<3);if(!g)return;$A(g);return}function xi(a){a=a|0;c[a>>2]=288860;Ml(a+36|0);return}function yi(a){a=a|0;c[a>>2]=288860;Ml(a+36|0);$A(a);return}function zi(b){b=b|0;var d=0;c[b>>2]=288876;d=b+36|0;Ml(b+52|0);if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ai(b){b=b|0;var d=0;c[b>>2]=288876;d=b+36|0;Ml(b+52|0);if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Bi(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288892;f=b+36|0;e=b+56|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+60>>2]=0;c[e>>2]=0;c[b+64>>2]=0;if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function Ci(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288892;f=b+36|0;e=b+56|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+60>>2]=0;c[e>>2]=0;c[b+64>>2]=0;if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function Di(b){b=b|0;c[b>>2]=288908;b=b+40|0;if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Ei(b){b=b|0;var d=0;c[b>>2]=288908;d=b+40|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Fi(b){b=b|0;c[b>>2]=288924;b=b+40|0;if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Gi(b){b=b|0;var d=0;c[b>>2]=288924;d=b+40|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Hi(a){a=a|0;c[a>>2]=288940;Ji(a+36|0);return}function Ii(a){a=a|0;c[a>>2]=288940;Ji(a+36|0);$A(a);return}function Ji(b){b=b|0;var d=0,e=0,f=0;e=b+108|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+112>>2]=0;c[e>>2]=0;c[b+116>>2]=0;d=c[b+96>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+88|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+76>>2]|0;if(d|0){c[b+80>>2]=d;$A(d)}d=c[b+64>>2]|0;if(d|0){c[b+68>>2]=d;$A(d)}d=c[b+52>>2]|0;if(d|0){c[b+56>>2]=d;$A(d)}Ml(b+16|0);if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Ki(a){a=a|0;var b=0;c[a>>2]=288972;b=a+36|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;ma[c[(c[a>>2]|0)+4>>2]&255](a);return}function Li(a){a=a|0;var b=0,d=0;c[a>>2]=288972;d=a+36|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function Mi(b){b=b|0;var d=0,e=0;c[b>>2]=288956;e=b+32|0;d=c[b+96>>2]|0;if(d|0){c[b+100>>2]=d;$A(d)}d=c[b+84>>2]|0;if(d|0){c[b+88>>2]=d;$A(d)}Ml(b+48|0);if((a[e+11>>0]|0)<0)$A(c[e>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ni(b){b=b|0;var d=0,e=0;c[b>>2]=288956;e=b+32|0;d=c[b+96>>2]|0;if(d|0){c[b+100>>2]=d;$A(d)}d=c[b+84>>2]|0;if(d|0){c[b+88>>2]=d;$A(d)}Ml(b+48|0);if((a[e+11>>0]|0)<0)$A(c[e>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Oi(b){b=b|0;var d=0;c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Pi(b){b=b|0;var d=0;c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Qi(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=289004;f=b+32|0;e=b+52|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+56>>2]=0;c[e>>2]=0;c[b+60>>2]=0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ri(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=289004;f=b+32|0;e=b+52|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+56>>2]=0;c[e>>2]=0;c[b+60>>2]=0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Si(b){b=b|0;var d=0;c[b>>2]=289020;d=b+32|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ti(b){b=b|0;var d=0;c[b>>2]=289020;d=b+32|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Ui(b){b=b|0;var d=0;c[b>>2]=289036;d=b+32|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Vi(b){b=b|0;var d=0;c[b>>2]=289036;d=b+32|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Wi(b){b=b|0;var d=0;c[b>>2]=289052;Ji(b+32|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Xi(b){b=b|0;var d=0;c[b>>2]=289052;Ji(b+32|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Yi(b){b=b|0;var d=0,e=0;c[b>>2]=289068;e=b+36|0;d=c[b+60>>2]|0;if(d|0){c[b+64>>2]=d;$A(d)}d=c[b+48>>2]|0;if(d|0){c[b+52>>2]=d;$A(d)}if((a[e+11>>0]|0)>=0)return;$A(c[e>>2]|0);return}function Zi(b){b=b|0;var d=0,e=0;c[b>>2]=289068;e=b+36|0;d=c[b+60>>2]|0;if(d|0){c[b+64>>2]=d;$A(d)}d=c[b+48>>2]|0;if(d|0){c[b+52>>2]=d;$A(d)}if((a[e+11>>0]|0)>=0){$A(b);return}$A(c[e>>2]|0);$A(b);return}function _i(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=b+4|0;e=c[b>>2]|0;h=((c[j>>2]|0)-e|0)/36|0;f=h+1|0;if(f>>>0>119304647)HB();k=b+8|0;i=((c[k>>2]|0)-e|0)/36|0;e=i<<1;e=i>>>0<59652323?(e>>>0<f>>>0?f:e):119304647;do if(e)if(e>>>0>119304647)U();else{g=_A(e*36|0)|0;break}else g=0;while(0);f=g+(h*36|0)|0;i=g+(e*36|0)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];c[f+20>>2]=c[d+20>>2];cB(g+(h*36|0)+24|0,d+24|0);h=f+36|0;d=c[b>>2]|0;e=c[j>>2]|0;if((e|0)==(d|0)){g=d;e=d}else{do{l=f;f=f+-36|0;g=e;e=e+-36|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];c[f+20>>2]=c[e+20>>2];l=l+-12|0;g=g+-12|0;c[l>>2]=c[g>>2];c[l+4>>2]=c[g+4>>2];c[l+8>>2]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0}while((e|0)!=(d|0));g=c[b>>2]|0;e=c[j>>2]|0}c[b>>2]=f;c[j>>2]=h;c[k>>2]=i;d=g;if((e|0)!=(d|0))do{f=e+-12|0;e=e+-36|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((e|0)!=(d|0));if(!g)return;$A(g);return}function $i(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;Am(e,d);if(!(a[e+24>>0]|0)){Am(e,d);g=c[e+28>>2]|0;Am(e,d);d=c[e>>2]|0;a[e>>0]=g;Qn(b,e,1,d,0);aa=f;return}else{Am(e,d);a[e>>0]=a[e+24>>0]|0;Qn(b,e,1,297439,0);Am(e,d);g=c[e+28>>2]|0;Am(e,d);Ul(b,g,c[e>>2]|0);aa=f;return}}function aj(a,b){a=a|0;b=b|0;var c=0;do switch(b|0){case -1:{c=330980;break}case -2:{c=330976;break}case -3:{c=330972;break}case -4:{c=330968;break}case -5:{c=330963;break}case -16:{c=330955;break}case -32:{c=330950;break}case -24:{c=330939;break}case -64:{c=330934;break}case 0:{c=330930;break}case -17:{c=330923;break}default:c=330910}while(0);Yl(a,b,c);return}function bj(b,e,f){b=b|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,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=aa;aa=aa+448|0;ca=fa+336|0;Y=fa+328|0;W=fa+320|0;U=fa+312|0;T=fa+304|0;R=fa+296|0;N=fa+288|0;F=fa+280|0;A=fa+272|0;x=fa+264|0;u=fa+256|0;r=fa+248|0;o=fa+240|0;ba=fa+112|0;Z=fa+436|0;X=fa;ea=fa+344|0;c[ea>>2]=b;$=ea+4|0;c[$>>2]=f;_=ea+8|0;c[_>>2]=e;da=ea+12|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[ea+28>>2]=1065353216;da=ea+32|0;f=ea+72|0;e=da;j=e+40|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(j|0));c[f>>2]=-1;f=ea+76|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[ba>>2]=1836278016;Qn(b,ba,4,297488,0);f=c[ea>>2]|0;c[ba>>2]=1;Qn(f,ba,4,297506,0);f=c[_>>2]|0;if((c[f+128>>2]|0)!=(c[f+124>>2]|0)){cj(ea,1);f=c[_>>2]|0;Ul(c[ea>>2]|0,(c[f+128>>2]|0)-(c[f+124>>2]|0)>>2,297526);f=c[_>>2]|0;if((c[f+128>>2]|0)!=(c[f+124>>2]|0)){n=0;do{j=c[(c[f+124>>2]|0)+(n<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[o>>2]=330362;c[o+4>>2]=n;Pn(e,297555,o);f=c[ea>>2]|0}Yl(f,-32,330950);b=j+12|0;e=(c[j+16>>2]|0)-(c[b>>2]|0)|0;k=e>>2;m=j+24|0;j=(c[j+28>>2]|0)-(c[m>>2]|0)|0;l=j>>2;Ul(c[ea>>2]|0,k,297564);f=c[ea>>2]|0;if(e){e=0;do{aj(f,c[(c[b>>2]|0)+(e<<2)>>2]|0);e=e+1|0;f=c[ea>>2]|0}while(e>>>0<k>>>0)}Ul(f,l,297575);if(j|0){f=0;do{aj(c[ea>>2]|0,c[(c[m>>2]|0)+(f<<2)>>2]|0);f=f+1|0}while(f>>>0<l>>>0)}n=n+1|0;f=c[_>>2]|0}while(n>>>0<(c[f+128>>2]|0)-(c[f+124>>2]|0)>>2>>>0)}k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(p=c[f+8>>2]|0,q=c[f+12>>2]|0,(p|0)!=(q|0)):0){f=p;do{p=f+4|0;c[p>>2]=(c[p>>2]|0)+l;f=f+16|0}while((f|0)!=(q|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}if((c[f+104>>2]|0)!=(c[f+100>>2]|0)){cj(ea,2);f=c[_>>2]|0;Ul(c[ea>>2]|0,(c[f+104>>2]|0)-(c[f+100>>2]|0)>>2,297587);f=c[_>>2]|0;a:do if((c[f+104>>2]|0)!=(c[f+100>>2]|0)){b=0;while(1){j=c[(c[f+100>>2]|0)+(b<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[r>>2]=297599;c[r+4>>2]=b;Pn(e,297555,r);f=c[ea>>2]|0}q=j+4|0;o=a[q+11>>0]|0;p=o<<24>>24<0;q=p?c[q>>2]|0:q;o=p?c[j+8>>2]|0:o&255;Ul(f,o,324027);Qn(f,q,o,315663,1);o=c[ea>>2]|0;q=j+16|0;p=a[q+11>>0]|0;n=p<<24>>24<0;q=n?c[q>>2]|0:q;p=n?c[j+20>>2]|0:p&255;Ul(o,p,324027);Qn(o,q,p,315682,1);p=c[ea>>2]|0;q=j+28|0;a[ba>>0]=c[q>>2];Qn(p,ba,1,315700,0);switch(c[q>>2]|0){case 0:{Ul(c[ea>>2]|0,bl(c[_>>2]|0,j+44|0)|0,315720);break}case 1:{aj(c[ea>>2]|0,c[j+72>>2]|0);f=c[ea>>2]|0;q=j+64|0;Ul(f,((a[j+32+33>>0]|0)==0?0:2)|d[q>>0],297446);Ul(f,c[j+48>>2]|0,297460);if(a[q>>0]|0)Ul(f,c[j+56>>2]|0,297476);break}case 2:{f=c[ea>>2]|0;q=j+64|0;Ul(f,((a[j+32+33>>0]|0)==0?0:2)|d[q>>0],297446);Ul(f,c[j+48>>2]|0,297460);if(a[q>>0]|0)Ul(f,c[j+56>>2]|0,297476);break}case 3:{aj(c[ea>>2]|0,c[j+44>>2]|0);q=c[ea>>2]|0;a[ba>>0]=a[j+48>>0]|0;Qn(q,ba,1,323612,0);break}case 4:{Ul(c[ea>>2]|0,0,323481);Ul(c[ea>>2]|0,bl(c[_>>2]|0,j+44|0)|0,323523);break}default:{}}b=b+1|0;f=c[_>>2]|0;if(b>>>0>=(c[f+104>>2]|0)-(c[f+100>>2]|0)>>2>>>0)break a}}while(0);k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(s=c[f+8>>2]|0,t=c[f+12>>2]|0,(s|0)!=(t|0)):0){f=s;do{s=f+4|0;c[s>>2]=(c[s>>2]|0)+l;f=f+16|0}while((f|0)!=(t|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}o=((c[f+80>>2]|0)-(c[f+76>>2]|0)>>2)-(c[f+48>>2]|0)|0;n=(o|0)!=0;if(n){cj(ea,3);Ul(c[ea>>2]|0,o,297613);f=0;do{t=c[_>>2]|0;t=c[(c[t+76>>2]|0)+((c[t+48>>2]|0)+f<<2)>>2]|0;c[u>>2]=f;Sz(ba,100,297627,u)|0;s=c[ea>>2]|0;Ul(s,bl(c[_>>2]|0,t+12|0)|0,ba);f=f+1|0}while((f|0)!=(o|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(v=c[f+8>>2]|0,w=c[f+12>>2]|0,(v|0)!=(w|0)):0){f=v;do{v=f+4|0;c[v>>2]=(c[v>>2]|0)+l;f=f+16|0}while((f|0)!=(w|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}k=((c[f+140>>2]|0)-(c[f+136>>2]|0)>>2)-(c[f+52>>2]|0)|0;if(k){cj(ea,4);Ul(c[ea>>2]|0,k,297656);b=0;do{j=c[_>>2]|0;j=c[(c[j+136>>2]|0)+((c[j+52>>2]|0)+b<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[x>>2]=330351;c[x+4>>2]=b;Pn(e,297555,x);f=c[ea>>2]|0}aj(f,c[j+40>>2]|0);f=c[ea>>2]|0;w=j+32|0;Ul(f,((a[j+33>>0]|0)==0?0:2)|d[w>>0],297446);Ul(f,c[j+16>>2]|0,297460);if(a[w>>0]|0)Ul(f,c[j+24>>2]|0,297476);b=b+1|0}while((b|0)!=(k|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(y=c[f+8>>2]|0,z=c[f+12>>2]|0,(y|0)!=(z|0)):0){f=y;do{y=f+4|0;c[y>>2]=(c[y>>2]|0)+l;f=f+16|0}while((f|0)!=(z|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}k=((c[f+164>>2]|0)-(c[f+160>>2]|0)>>2)-(c[f+56>>2]|0)|0;if(k){cj(ea,5);Ul(c[ea>>2]|0,k,297667);b=0;do{j=c[_>>2]|0;j=c[(c[j+160>>2]|0)+((c[j+56>>2]|0)+b<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[A>>2]=330283;c[A+4>>2]=b;Pn(e,297555,A);f=c[ea>>2]|0}z=j+32|0;Ul(f,((a[j+33>>0]|0)==0?0:2)|d[z>>0],297446);Ul(f,c[j+16>>2]|0,297460);if(a[z>>0]|0)Ul(f,c[j+24>>2]|0,297476);b=b+1|0}while((b|0)!=(k|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(B=c[f+8>>2]|0,C=c[f+12>>2]|0,(B|0)!=(C|0)):0){f=B;do{B=f+4|0;c[B>>2]=(c[B>>2]|0)+l;f=f+16|0}while((f|0)!=(C|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}j=((c[f+92>>2]|0)-(c[f+88>>2]|0)>>2)-(c[f+60>>2]|0)|0;if(j){cj(ea,6);Ul(c[ea>>2]|0,j,297680);e=0;do{f=c[_>>2]|0;f=c[(c[f+88>>2]|0)+((c[f+60>>2]|0)+e<<2)>>2]|0;aj(c[ea>>2]|0,c[f+12>>2]|0);C=c[ea>>2]|0;a[ba>>0]=a[f+16>>0]|0;Qn(C,ba,1,323612,0);f=c[f+20>>2]|0;if(f|0)do{dj(ea,0,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[ea>>2]|0,11);e=e+1|0}while((e|0)!=(j|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(D=c[f+8>>2]|0,E=c[f+12>>2]|0,(D|0)!=(E|0)):0){f=D;do{D=f+4|0;c[D>>2]=(c[D>>2]|0)+l;f=f+16|0}while((f|0)!=(E|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}b=((c[f+68>>2]|0)-(c[f+64>>2]|0)>>2)-(c[f+44>>2]|0)|0;if(b){cj(ea,13);Ul(c[ea>>2]|0,b,319041);j=0;do{f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[F>>2]=330237;c[F+4>>2]=j;Pn(e,297555,F);f=c[ea>>2]|0}E=c[_>>2]|0;E=c[(c[E+64>>2]|0)+((c[E+44>>2]|0)+j<<2)>>2]|0;Ul(f,0,323481);D=c[ea>>2]|0;Ul(D,bl(c[_>>2]|0,E+12|0)|0,323523);j=j+1|0}while((j|0)!=(b|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(G=c[f+8>>2]|0,H=c[f+12>>2]|0,(G|0)!=(H|0)):0){f=G;do{G=f+4|0;c[G>>2]=(c[G>>2]|0)+l;f=f+16|0}while((f|0)!=(H|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}if((c[f+116>>2]|0)!=(c[f+112>>2]|0)){cj(ea,7);j=c[_>>2]|0;Ul(c[ea>>2]|0,(c[j+116>>2]|0)-(c[j+112>>2]|0)>>2,297692);j=c[_>>2]|0;f=c[j+112>>2]|0;j=c[j+116>>2]|0;b:do if((f|0)!=(j|0))while(1){e=c[f>>2]|0;F=c[ea>>2]|0;G=a[e+11>>0]|0;E=G<<24>>24<0;H=E?c[e>>2]|0:e;G=E?c[e+4>>2]|0:G&255;Ul(F,G,324027);Qn(F,H,G,297704,1);G=c[ea>>2]|0;H=e+12|0;a[ba>>0]=c[H>>2];Qn(G,ba,1,316908,0);switch(c[H>>2]|0){case 0:{H=Ek(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297716);break}case 1:{H=Gk(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297734);break}case 2:{H=Hk(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297753);break}case 3:{H=Fk(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297773);break}case 4:{H=Jk(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297793);break}default:{}}f=f+4|0;if((f|0)==(j|0))break b}while(0);k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(I=c[f+8>>2]|0,J=c[f+12>>2]|0,(I|0)!=(J|0)):0){f=I;do{I=f+4|0;c[I>>2]=(c[I>>2]|0)+l;f=f+16|0}while((f|0)!=(J|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}e=c[f+184>>2]|0;if((c[f+188>>2]|0)!=(e|0)?(K=Ek(f,c[e>>2]|0)|0,(K|0)!=-1):0){cj(ea,8);Ul(c[ea>>2]|0,K,297812);k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(L=c[f+8>>2]|0,M=c[f+12>>2]|0,(L|0)!=(M|0)):0){f=L;do{L=f+4|0;c[L>>2]=(c[L>>2]|0)+l;f=f+16|0}while((f|0)!=(M|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}if((c[f+152>>2]|0)!=(c[f+148>>2]|0)){cj(ea,9);f=c[_>>2]|0;Ul(c[ea>>2]|0,(c[f+152>>2]|0)-(c[f+148>>2]|0)>>2,297829);f=c[_>>2]|0;if((c[f+152>>2]|0)!=(c[f+148>>2]|0)){k=0;do{j=c[(c[f+148>>2]|0)+(k<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[N>>2]=297847;c[N+4>>2]=k;Pn(e,297555,N);f=c[ea>>2]|0}b=j+48|0;if(!(a[b>>0]|0)){a[ba>>0]=0;Qn(f,ba,1,0,0);f=c[j+56>>2]|0;if(f|0)do{dj(ea,0,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[ea>>2]|0,11)}else{a[ba>>0]=1;Qn(f,ba,1,0,0);aj(c[ea>>2]|0,c[j+52>>2]|0)}f=j+68|0;j=j+72|0;Ul(c[ea>>2]|0,((c[j>>2]|0)-(c[f>>2]|0)|0)/40|0,297867);f=c[f>>2]|0;j=c[j>>2]|0;e=(f|0)==(j|0);c:do if(!(a[b>>0]|0)){if(!e)do{ej(ea,Ek(c[_>>2]|0,f+4|0)|0,297882,0);f=f+40|0}while((f|0)!=(j|0))}else if(!e)while(1){switch(c[f>>2]|0){case 0:{$i(c[ea>>2]|0,208);break}case 1:{$i(c[ea>>2]|0,210);ej(ea,Ek(c[_>>2]|0,f+4|0)|0,297882,0);break}default:{}}$i(c[ea>>2]|0,11);f=f+40|0;if((f|0)==(j|0))break c}while(0);k=k+1|0;f=c[_>>2]|0}while(k>>>0<(c[f+152>>2]|0)-(c[f+148>>2]|0)>>2>>>0)}k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(O=c[f+8>>2]|0,P=c[f+12>>2]|0,(O|0)!=(P|0)):0){f=O;do{O=f+4|0;c[O>>2]=(c[O>>2]|0)+l;f=f+16|0}while((f|0)!=(P|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;P=ea+60|0;c[P>>2]=(c[P>>2]|0)+1}if(a[(c[$>>2]|0)+8>>0]|0){cj(ea,12);k=c[_>>2]|0;Ul(c[ea>>2]|0,(c[k+176>>2]|0)-(c[k+172>>2]|0)>>2,319180);k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(i=c[f+8>>2]|0,Q=c[f+12>>2]|0,(i|0)!=(Q|0)):0)do{P=i+4|0;c[P>>2]=(c[P>>2]|0)+l;i=i+16|0}while((i|0)!=(Q|0))}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;Q=ea+60|0;c[Q>>2]=(c[Q>>2]|0)+1}if(n){cj(ea,10);Ul(c[ea>>2]|0,o,297613);l=0;do{i=c[ea>>2]|0;f=c[i+12>>2]|0;if(f){c[R>>2]=297907;c[R+4>>2]=l;Pn(f,297555,R);i=c[ea>>2]|0}b=c[_>>2]|0;b=c[(c[b+76>>2]|0)+((c[b+48>>2]|0)+l<<2)>>2]|0;f=a[(c[$>>2]|0)+11>>0]|0;a[ba>>0]=0;a[ba+1>>0]=0;a[ba+2>>0]=0;a[ba+3>>0]=0;a[ba+4>>0]=0;k=c[i+4>>2]|0;Qn(i,ba,f<<24>>24==0?5:1,297921,0);i=b+76|0;f=c[i>>2]|0;j=b+80|0;e=c[j>>2]|0;if(Ok(f,e)|0){Ul(c[ea>>2]|0,e-f>>3,297944);i=c[i>>2]|0;f=c[j>>2]|0;if((i|0)!=(f|0))do{Q=c[i>>2]|0;Ul(c[ea>>2]|0,c[i+4>>2]|0,318312);aj(c[ea>>2]|0,Q);i=i+8|0}while((i|0)!=(f|0))}else Ul(c[ea>>2]|0,0,297944);i=c[b+108>>2]|0;if(i|0)do{dj(ea,b,i);i=c[i+4>>2]|0}while((i|0)!=0);$i(c[ea>>2]|0,11);f=c[ea>>2]|0;i=(c[f+4>>2]|0)-k|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(f,k,i+-5|0,297961);else{e=i+-1|0;i=Sl(e)|0;j=i+-1|0;if(!j)i=f;else{Rn(f,i+k|0,k+1|0,e);i=c[ea>>2]|0}Wl(i,k,e,297961);Mn(c[ea>>2]|0,j)}l=l+1|0}while((l|0)!=(o|0));b=c[ea+64>>2]|0;l=ea+68|0;e=c[l>>2]|0;i=c[ea>>2]|0;f=(c[i+4>>2]|0)-b|0;if(a[(c[$>>2]|0)+11>>0]|0){j=f-e|0;f=Sl(j)|0;k=f-e|0;if(k){Rn(i,f+b|0,e+b|0,j);i=c[ea>>2]|0}Wl(i,b,j,297536);Mn(c[ea>>2]|0,k);i=c[ea+56>>2]|0;if((k|0)!=0&(i|0)!=0?(h=c[i+8>>2]|0,S=c[i+12>>2]|0,(h|0)!=(S|0)):0)do{R=h+4|0;c[R>>2]=(c[R>>2]|0)+k;h=h+16|0}while((h|0)!=(S|0))}else Tl(i,b,f+-5|0,297536);c[l>>2]=0;S=ea+60|0;c[S>>2]=(c[S>>2]|0)+1}S=c[_>>2]|0;if((c[S+176>>2]|0)!=(c[S+172>>2]|0)){cj(ea,11);h=c[_>>2]|0;Ul(c[ea>>2]|0,(c[h+176>>2]|0)-(c[h+172>>2]|0)>>2,297982);h=c[_>>2]|0;d:do if((c[h+176>>2]|0)!=(c[h+172>>2]|0)){k=0;e:while(1){f=c[(c[h+172>>2]|0)+(k<<2)>>2]|0;h=c[ea>>2]|0;i=c[h+12>>2]|0;if(i){c[T>>2]=298e3;c[T+4>>2]=k;Pn(i,297555,T);h=c[ea>>2]|0}if(!(a[f+48>>0]|0)){a[ba>>0]=0;Qn(h,ba,1,0,0);h=c[f+52>>2]|0;if(h|0)do{dj(ea,0,h);h=c[h+4>>2]|0}while((h|0)!=0);$i(c[ea>>2]|0,11)}else{a[ba>>0]=1;Qn(h,ba,1,0,0)}b=f+64|0;j=f+68|0;Ul(c[ea>>2]|0,(c[j>>2]|0)-(c[b>>2]|0)|0,298020);h=c[ea>>2]|0;i=c[h+12>>2]|0;if(!i)e=h;else{c[U>>2]=318859;c[U+4>>2]=k;Pn(i,297555,U);e=c[ea>>2]|0}h=(c[j>>2]|0)-(c[b>>2]|0)|0;do if(h|0){if((h|0)<0)break e;f=_A(h)|0;i=c[b>>2]|0;h=(c[j>>2]|0)-i|0;if((h|0)>0?(sC(f|0,i|0,h|0)|0,Qn(e,f,h,318859,0),(f|0)==0):0)break;$A(f)}while(0);k=k+1|0;h=c[_>>2]|0;if(k>>>0>=(c[h+176>>2]|0)-(c[h+172>>2]|0)>>2>>>0)break d}HB()}while(0);j=c[ea+64>>2]|0;k=ea+68|0;f=c[k>>2]|0;h=c[ea>>2]|0;i=(c[h+4>>2]|0)-j|0;if(a[(c[$>>2]|0)+11>>0]|0){e=i-f|0;i=Sl(e)|0;b=i-f|0;if(b){Rn(h,i+j|0,f+j|0,e);h=c[ea>>2]|0}Wl(h,j,e,297536);Mn(c[ea>>2]|0,b);h=c[ea+56>>2]|0;if((b|0)!=0&(h|0)!=0?(g=c[h+8>>2]|0,V=c[h+12>>2]|0,(g|0)!=(V|0)):0)do{U=g+4|0;c[U>>2]=(c[U>>2]|0)+b;g=g+16|0}while((g|0)!=(V|0))}else Tl(h,j,i+-5|0,297536);c[k>>2]=0;V=ea+60|0;c[V>>2]=(c[V>>2]|0)+1}g=c[$>>2]|0;if(a[g+13>>0]|0){c[Z>>2]=0;m=Z+4|0;c[m>>2]=0;c[Z+8>>2]=0;fj(ea,313156);j=c[_>>2]|0;g=c[j+76>>2]|0;e=c[j+80>>2]|0;if((g|0)==(e|0))h=0;else{h=0;do{i=c[g>>2]|0;f=a[i+11>>0]|0;if(f<<24>>24<0)i=c[i+4>>2]|0;else i=f&255;h=h+((i|0)!=0&1)|0;g=g+4|0}while((g|0)!=(e|0))}g=a[j+20+11>>0]|0;if(g<<24>>24<0)g=c[j+24>>2]|0;else g=g&255;if(g|0){Ul(c[ea>>2]|0,0,298038);k=ea+84|0;c[k>>2]=1;T=c[ea>>2]|0;e=a[(c[$>>2]|0)+11>>0]|0;a[ba>>0]=0;a[ba+1>>0]=0;a[ba+2>>0]=0;a[ba+3>>0]=0;a[ba+4>>0]=0;f=c[T+4>>2]|0;Qn(T,ba,e<<24>>24==0?5:1,298055,0);e=ea+80|0;c[e>>2]=f;f=c[ea>>2]|0;c[ea+88>>2]=c[f+4>>2];T=c[_>>2]|0;g=T+20|0;V=a[g+11>>0]|0;U=V<<24>>24<0;V=U?c[T+24>>2]|0:V&255;g=U?c[g>>2]|0:g;U=ba;c[U>>2]=g;c[U+4>>2]=V;if(V>>>0<1|(V|0)==1&g>>>0<0)i=0;else{Un(ba);i=ba;g=c[i>>2]|0;i=c[i+4>>2]|0}Ul(f,i,324027);Qn(f,g,i,313350,1);b=c[e>>2]|0;f=c[k>>2]|0;g=c[ea>>2]|0;i=(c[g+4>>2]|0)-b|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(g,b,i+-5|0,298079);else{e=i-f|0;i=Sl(e)|0;j=i-f|0;if(j){Rn(g,i+b|0,f+b|0,e);g=c[ea>>2]|0}Wl(g,b,e,298079);Mn(c[ea>>2]|0,j)}c[k>>2]=0}if(!h){h=ba;l=ea+84|0;k=ea+80|0;g=ea+88|0}else{Ul(c[ea>>2]|0,1,298101);l=ea+84|0;c[l>>2]=1;g=c[ea>>2]|0;k=a[(c[$>>2]|0)+11>>0]|0;a[ba>>0]=0;a[ba+1>>0]=0;a[ba+2>>0]=0;a[ba+3>>0]=0;a[ba+4>>0]=0;V=c[g+4>>2]|0;Qn(g,ba,k<<24>>24==0?5:1,298055,0);k=ea+80|0;c[k>>2]=V;V=c[ea>>2]|0;g=ea+88|0;c[g>>2]=c[V+4>>2];Ul(V,h,297613);h=c[_>>2]|0;if((c[h+80>>2]|0)!=(c[h+76>>2]|0)){b=0;do{f=c[(c[h+76>>2]|0)+(b<<2)>>2]|0;j=f+11|0;i=a[j>>0]|0;if(i<<24>>24<0)i=c[f+4>>2]|0;else i=i&255;if(i){Ul(c[ea>>2]|0,b,313526);c[W>>2]=b;Sz(X,100,298120,W)|0;e=c[ea>>2]|0;V=a[j>>0]|0;h=V<<24>>24<0;V=h?c[f+4>>2]|0:V&255;h=h?c[f>>2]|0:f;U=ba;c[U>>2]=h;c[U+4>>2]=V;if(V>>>0<1|(V|0)==1&h>>>0<0)i=0;else{Un(ba);i=ba;h=c[i>>2]|0;i=c[i+4>>2]|0}Ul(e,i,324027);Qn(e,h,i,X,1);h=c[_>>2]|0}b=b+1|0}while(b>>>0<(c[h+80>>2]|0)-(c[h+76>>2]|0)>>2>>>0)}b=c[k>>2]|0;f=c[l>>2]|0;h=c[ea>>2]|0;i=(c[h+4>>2]|0)-b|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(h,b,i+-5|0,298079);else{e=i-f|0;i=Sl(e)|0;j=i-f|0;if(j){Rn(h,i+b|0,f+b|0,e);h=c[ea>>2]|0}Wl(h,b,e,298079);Mn(c[ea>>2]|0,j)}c[l>>2]=0;h=ba}Ul(c[ea>>2]|0,2,298134);c[l>>2]=1;U=c[ea>>2]|0;V=a[(c[$>>2]|0)+11>>0]|0;a[h>>0]=0;a[h+1>>0]=0;a[h+2>>0]=0;a[h+3>>0]=0;a[h+4>>0]=0;W=c[U+4>>2]|0;Qn(U,h,V<<24>>24==0?5:1,298055,0);c[k>>2]=W;W=c[ea>>2]|0;c[g>>2]=c[W+4>>2];g=c[_>>2]|0;Ul(W,(c[g+80>>2]|0)-(c[g+76>>2]|0)>>2,297613);g=c[_>>2]|0;if((c[g+80>>2]|0)!=(c[g+76>>2]|0)){b=0;do{W=c[(c[g+76>>2]|0)+(b<<2)>>2]|0;e=(c[W+56>>2]|0)-(c[W+52>>2]|0)>>2;e=e+(Ok(c[W+76>>2]|0,c[W+80>>2]|0)|0)|0;Ul(c[ea>>2]|0,b,313526);Ul(c[ea>>2]|0,e,298150);Cl(e,W+88|0,Z);if(e|0){i=c[Z>>2]|0;j=0;do{g=i+(j*12|0)|0;c[Y>>2]=j;Sz(X,100,298161,Y)|0;Ul(c[ea>>2]|0,j,298176);f=c[ea>>2]|0;W=a[g+11>>0]|0;V=W<<24>>24<0;W=V?c[i+(j*12|0)+4>>2]|0:W&255;g=V?c[g>>2]|0:g;V=ba;c[V>>2]=g;c[V+4>>2]=W;if(W>>>0<1|(W|0)==1&g>>>0<0)h=0;else{Un(ba);h=ba;g=c[h>>2]|0;h=c[h+4>>2]|0}Ul(f,h,324027);Qn(f,g,h,X,1);j=j+1|0}while((j|0)!=(e|0))}b=b+1|0;g=c[_>>2]|0}while(b>>>0<(c[g+80>>2]|0)-(c[g+76>>2]|0)>>2>>>0)}j=c[k>>2]|0;i=c[l>>2]|0;g=c[ea>>2]|0;h=(c[g+4>>2]|0)-j|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(g,j,h+-5|0,298079);else{f=h-i|0;h=Sl(f)|0;e=h-i|0;if(e){Rn(g,h+j|0,i+j|0,f);g=c[ea>>2]|0}Wl(g,j,f,298079);Mn(c[ea>>2]|0,e)}c[l>>2]=0;e=c[ea+64>>2]|0;b=ea+68|0;i=c[b>>2]|0;g=c[ea>>2]|0;h=(c[g+4>>2]|0)-e|0;do if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(g,e,h+-5|0,297536);else{f=h-i|0;h=Sl(f)|0;j=h-i|0;if(j){Rn(g,h+e|0,i+e|0,f);g=c[ea>>2]|0}Wl(g,e,f,297536);Mn(c[ea>>2]|0,j);g=c[ea+56>>2]|0;if(!((j|0)!=0&(g|0)!=0))break;h=c[g+8>>2]|0;i=c[g+12>>2]|0;if((h|0)==(i|0))break;g=h;do{Y=g+4|0;c[Y>>2]=(c[Y>>2]|0)+j;g=g+16|0}while((g|0)!=(i|0))}while(0);c[b>>2]=0;h=ea+60|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Z>>2]|0;if(h|0){g=c[m>>2]|0;if((g|0)!=(h|0))do{g=g+-12|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0)}while((g|0)!=(h|0));c[m>>2]=h;$A(h)}g=c[$>>2]|0}if(a[g+12>>0]|0){fj(ea,314485);Ul(c[ea>>2]|0,2,298188);g=ea+32|0;h=ea+36|0;if((c[h>>2]|0)!=(c[g>>2]|0)){k=c[ea>>2]|0;a[ba>>0]=8;Qn(k,ba,1,298205,0);k=ea+84|0;c[k>>2]=1;Z=c[ea>>2]|0;b=a[(c[$>>2]|0)+11>>0]|0;a[ba>>0]=0;a[ba+1>>0]=0;a[ba+2>>0]=0;a[ba+3>>0]=0;a[ba+4>>0]=0;j=c[Z+4>>2]|0;Qn(Z,ba,b<<24>>24==0?5:1,298055,0);b=ea+80|0;c[b>>2]=j;j=c[ea>>2]|0;c[ea+88>>2]=c[j+4>>2];Ul(j,((c[h>>2]|0)-(c[g>>2]|0)|0)/12|0,298218);g=c[g>>2]|0;j=c[h>>2]|0;f:do if((g|0)!=(j|0))while(1){e=g+4|0;h=c[e>>2]|0;switch(h|0){case 0:{f=g+8|0;i=f;f=(c[f>>2]|0)>>>0>=(c[(c[_>>2]|0)+48>>2]|0)>>>0;break}case 2:{f=g+8|0;i=f;f=(c[f>>2]|0)>>>0>=(c[(c[_>>2]|0)+60>>2]|0)>>>0;break}default:{i=g+8|0;f=1}}Z=c[ea>>2]|0;a[ba>>0]=h;Qn(Z,ba,1,298230,0);Ul(c[ea>>2]|0,f?0:16,298242);Ul(c[ea>>2]|0,c[i>>2]|0,298255);g:do if(f)switch(c[e>>2]|0){case 0:{X=c[ea>>2]|0;W=c[(c[(c[_>>2]|0)+76>>2]|0)+(c[i>>2]<<2)>>2]|0;Z=a[W+11>>0]|0;V=Z<<24>>24<0;Y=V?c[W>>2]|0:W;Z=V?c[W+4>>2]|0:Z&255;Ul(X,Z,324027);Qn(X,Y,Z,313628,1);break g}case 2:{X=c[ea>>2]|0;W=c[(c[(c[_>>2]|0)+88>>2]|0)+(c[i>>2]<<2)>>2]|0;Z=a[W+11>>0]|0;V=Z<<24>>24<0;Y=V?c[W>>2]|0:W;Z=V?c[W+4>>2]|0:Z&255;Ul(X,Z,324027);Qn(X,Y,Z,298269,1);break g}default:break g}while(0);g=g+12|0;if((g|0)==(j|0))break f}while(0);j=c[b>>2]|0;i=c[k>>2]|0;g=c[ea>>2]|0;h=(c[g+4>>2]|0)-j|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(g,j,h+-5|0,298079);else{f=h-i|0;h=Sl(f)|0;e=h-i|0;if(e){Rn(g,h+j|0,i+j|0,f);g=c[ea>>2]|0}Wl(g,j,f,298079);Mn(c[ea>>2]|0,e)}c[k>>2]=0}o=ea+64|0;e=c[o>>2]|0;n=ea+68|0;i=c[n>>2]|0;g=c[ea>>2]|0;h=(c[g+4>>2]|0)-e|0;do if(!(a[(c[$>>2]|0)+11>>0]|0)){Tl(g,e,h+-5|0,297536);f=ea+56|0}else{f=h-i|0;h=Sl(f)|0;j=h-i|0;if(j){Rn(g,h+e|0,i+e|0,f);g=c[ea>>2]|0}Wl(g,e,f,297536);Mn(c[ea>>2]|0,j);f=ea+56|0;g=c[f>>2]|0;if(!((j|0)!=0&(g|0)!=0))break;h=c[g+8>>2]|0;i=c[g+12>>2]|0;if((h|0)==(i|0))break;g=h;do{_=g+4|0;c[_>>2]=(c[_>>2]|0)+j;g=g+16|0}while((g|0)!=(i|0))}while(0);c[n>>2]=0;m=ea+60|0;c[m>>2]=(c[m>>2]|0)+1;g=c[ea+44>>2]|0;l=c[ea+48>>2]|0;if((g|0)!=(l|0))do{h=c[g>>2]|0;c[ca>>2]=314270;c[ca+4>>2]=h;Sz(ba,128,298281,ca)|0;fj(ea,ba);Ul(c[ea>>2]|0,c[g+4>>2]|0,298287);h=g+8|0;i=g+12|0;Ul(c[ea>>2]|0,(c[i>>2]|0)-(c[h>>2]|0)>>4,298307);h=c[h>>2]|0;i=c[i>>2]|0;h:do if((h|0)!=(i|0))while(1){Ul(c[ea>>2]|0,c[h>>2]|0,298318);Ul(c[ea>>2]|0,c[h+4>>2]|0,298329);Ul(c[ea>>2]|0,c[h+8>>2]|0,298342);switch(c[h>>2]|0){case 9:case 8:case 5:case 11:case 4:case 3:{Ul(c[ea>>2]|0,c[h+12>>2]|0,298354);break}default:{}}h=h+16|0;if((h|0)==(i|0))break h}while(0);b=c[o>>2]|0;e=c[n>>2]|0;h=c[ea>>2]|0;i=(c[h+4>>2]|0)-b|0;do if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(h,b,i+-5|0,297536);else{j=i-e|0;i=Sl(j)|0;k=i-e|0;if(k){Rn(h,i+b|0,e+b|0,j);h=c[ea>>2]|0}Wl(h,b,j,297536);Mn(c[ea>>2]|0,k);h=c[f>>2]|0;if(!((k|0)!=0&(h|0)!=0))break;i=c[h+8>>2]|0;e=c[h+12>>2]|0;if((i|0)==(e|0))break;h=i;do{_=h+4|0;c[_>>2]=(c[_>>2]|0)+k;h=h+16|0}while((h|0)!=(e|0))}while(0);c[n>>2]=0;c[m>>2]=(c[m>>2]|0)+1;g=g+20|0}while((g|0)!=(l|0))}j=c[(c[ea>>2]|0)+8>>2]|0;i=ea+44|0;f=c[i>>2]|0;if(f|0){e=ea+48|0;g=c[e>>2]|0;if((g|0)==(f|0))g=f;else{do{h=c[g+-12>>2]|0;if(h|0){c[g+-8>>2]=h;$A(h)}g=g+-20|0}while((g|0)!=(f|0));g=c[i>>2]|0}c[e>>2]=f;$A(g)}g=c[da>>2]|0;if(g|0){c[ea+36>>2]=g;$A(g)}g=c[ea+20>>2]|0;if(g|0)do{h=g;g=c[g>>2]|0;i=h+8|0;if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);$A(h)}while((g|0)!=0);ea=ea+12|0;g=c[ea>>2]|0;c[ea>>2]=0;if(!g){aa=fa;return j|0}$A(g);aa=fa;return j|0}function cj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+128|0;h=j+112|0;i=j+104|0;f=j;e=cu(d)|0;c[i>>2]=e;c[i+4>>2]=d;Sz(f,100,298921,i)|0;e=c[b>>2]|0;g=c[e+12>>2]|0;if(g){c[h>>2]=f;Pn(g,298380,h);e=c[b>>2]|0}a[i>>0]=d;Qn(e,i,1,312891,0);c[b+72>>2]=d;c[b+68>>2]=1;g=c[b>>2]|0;h=a[(c[b+4>>2]|0)+11>>0]|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;a[i+4>>0]=0;d=c[g+4>>2]|0;Qn(g,i,h<<24>>24==0?5:1,298386,0);c[b+64>>2]=d;c[b+76>>2]=c[(c[b>>2]|0)+4>>2];aa=j;return}function dj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;do switch(c[e+32>>2]|0){case 0:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 1:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 2:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 3:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 5:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 4:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 6:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 7:{$i(c[b>>2]|0,2);lj(b,e+48|0);f=c[e+112>>2]|0;if(f|0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,11);aa=i;return}case 8:{$i(c[b>>2]|0,12);Ul(c[b>>2]|0,c[e+60>>2]|0,298437);aa=i;return}case 9:{$i(c[b>>2]|0,13);Ul(c[b>>2]|0,c[e+60>>2]|0,298437);aa=i;return}case 10:{$i(c[b>>2]|0,10);Ul(c[b>>2]|0,c[e+60>>2]|0,298437);h=c[b>>2]|0;Ul(h,Jk(c[b+8>>2]|0,e+72|0)|0,322003);aa=i;return}case 11:{$i(c[b>>2]|0,14);f=e+36|0;g=e+40|0;Ul(c[b>>2]|0,((c[g>>2]|0)-(c[f>>2]|0)|0)/36|0,298449);f=c[f>>2]|0;g=c[g>>2]|0;if((f|0)!=(g|0))do{Ul(c[b>>2]|0,c[f+24>>2]|0,298437);f=f+36|0}while((f|0)!=(g|0));Ul(c[b>>2]|0,c[e+48+24>>2]|0,298461);aa=i;return}case 12:{e=Ek(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,16);ej(b,e,313526,0);aa=i;return}case 37:{e=Ek(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,18);ej(b,e,313526,0);aa=i;return}case 13:{d=c[b+8>>2]|0;h=bl(d,e+36|0)|0;e=Gk(d,e+100|0)|0;$i(c[b>>2]|0,17);ej(b,h,298485,6);Ul(c[b>>2]|0,e,322687);aa=i;return}case 38:{d=c[b+8>>2]|0;h=bl(d,e+36|0)|0;e=Gk(d,e+100|0)|0;$i(c[b>>2]|0,19);ej(b,h,298485,6);Ul(c[b>>2]|0,e,322687);aa=i;return}case 14:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 15:switch(c[e+60>>2]|0){case -1:{$i(c[b>>2]|0,52);Yl(c[b>>2]|0,c[e+64>>2]|0,298501);aa=i;return}case -2:{$i(c[b>>2]|0,53);e=e+64|0;Zl(c[b>>2]|0,c[e>>2]|0,c[e+4>>2]|0);aa=i;return}case -3:{$i(c[b>>2]|0,54);b=c[b>>2]|0;c[h>>2]=c[e+64>>2];Qn(b,h,4,298525,0);aa=i;return}case -4:{$i(c[b>>2]|0,55);b=c[b>>2]|0;g=e+64|0;d=c[g+4>>2]|0;e=h;c[e>>2]=c[g>>2];c[e+4>>2]=d;Qn(b,h,8,298537,0);aa=i;return}case -5:{$i(c[b>>2]|0,213);b=c[b>>2]|0;e=e+64|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];Qn(b,h,16,298549,0);aa=i;return}default:{aa=i;return}}case 16:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 17:{$i(c[b>>2]|0,20);aa=i;return}case 18:{e=Fk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,25);ej(b,e,298562,7);aa=i;return}case 19:{e=Fk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,26);ej(b,e,298562,7);aa=i;return}case 20:{$i(c[b>>2]|0,4);lj(b,e+48|0);g=c[e+112>>2]|0;if(g|0)do{dj(b,d,g);g=c[g+4>>2]|0}while((g|0)!=0);if(c[e+152>>2]|0?($i(c[b>>2]|0,5),f=c[e+144>>2]|0,f|0):0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,11);aa=i;return}case 21:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,321351);aa=i;return}case 22:{if(!d)if(!(c[e+56>>2]|0))f=c[e+60>>2]|0;else f=-1;else f=Qk(d,e+36|0)|0;$i(c[b>>2]|0,22);Ul(c[b>>2]|0,f,298176);aa=i;return}case 23:{if(!d)if(!(c[e+56>>2]|0))f=c[e+60>>2]|0;else f=-1;else f=Qk(d,e+36|0)|0;$i(c[b>>2]|0,23);Ul(c[b>>2]|0,f,298176);aa=i;return}case 24:{if(!d)if(!(c[e+56>>2]|0))f=c[e+60>>2]|0;else f=-1;else f=Qk(d,e+36|0)|0;$i(c[b>>2]|0,24);Ul(c[b>>2]|0,f,298176);aa=i;return}case 25:{$i(c[b>>2]|0,3);lj(b,e+48|0);f=c[e+112>>2]|0;if(f|0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,11);aa=i;return}case 26:{$i(c[b>>2]|0,199);Ul(c[b>>2]|0,0,298575);Ul(c[b>>2]|0,0,298575);aa=i;return}case 27:{e=Kk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,198);Ul(c[b>>2]|0,e,298596);aa=i;return}case 28:{$i(c[b>>2]|0,200);Ul(c[b>>2]|0,0,298614);aa=i;return}case 29:{$i(c[b>>2]|0,51);Ul(c[b>>2]|0,0,321538);aa=i;return}case 30:{e=Kk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,197);Ul(c[b>>2]|0,e,298635);Ul(c[b>>2]|0,0,298655);aa=i;return}case 31:{$i(c[b>>2]|0,50);Ul(c[b>>2]|0,0,321447);aa=i;return}case 44:{$i(c[b>>2]|0,203);Ul(c[b>>2]|0,0,298676);Ul(c[b>>2]|0,0,298676);aa=i;return}case 45:{e=Lk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,202);Ul(c[b>>2]|0,e,298696);aa=i;return}case 46:{e=Lk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,201);Ul(c[b>>2]|0,e,298714);Ul(c[b>>2]|0,0,298733);aa=i;return}case 47:{e=Gk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,204);Ul(c[b>>2]|0,e,298753);aa=i;return}case 50:{e=Gk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,205);Ul(c[b>>2]|0,e,298775);aa=i;return}case 48:{e=Gk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,206);Ul(c[b>>2]|0,e,298797);aa=i;return}case 49:{e=Gk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,207);Ul(c[b>>2]|0,e,298820);aa=i;return}case 34:{$i(c[b>>2]|0,208);aa=i;return}case 33:{$i(c[b>>2]|0,209);aa=i;return}case 32:{$i(c[b>>2]|0,1);aa=i;return}case 35:{$i(c[b>>2]|0,9);aa=i;return}case 36:{$i(c[b>>2]|0,15);aa=i;return}case 39:{$i(c[b>>2]|0,21);aa=i;return}case 43:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,321406);aa=i;return}case 52:{$i(c[b>>2]|0,8);Ul(c[b>>2]|0,c[e+60>>2]|0,298843);aa=i;return}case 53:{$i(c[b>>2]|0,6);lj(b,e+48|0);f=c[e+112>>2]|0;if(f|0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,7);f=c[e+144>>2]|0;if(f|0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,11);aa=i;return}case 54:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 51:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 40:{$i(c[b>>2]|0,c[e+36>>2]|0);b=c[b>>2]|0;a[h>>0]=c[e+40>>2];Qn(b,h,1,298855,0);aa=i;return}case 41:{$i(c[b>>2]|0,c[e+36>>2]|0);b=c[b>>2]|0;e=e+40|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];Qn(b,h,16,298873,0);aa=i;return}case 42:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,321351);aa=i;return}case 55:{$i(c[b>>2]|0,0);aa=i;return}default:{aa=i;return}}while(0)}function ej(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,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;A=aa;aa=aa+32|0;w=A+12|0;y=A+8|0;x=A+4|0;z=A;if(!(a[(c[b+4>>2]|0)+12>>0]|0)){Ul(c[b>>2]|0,d,e);aa=A;return}c[y>>2]=f;v=b+56|0;g=c[v>>2]|0;if(g){h=b+60|0;if((c[g+4>>2]|0)!=(c[h>>2]|0))i=5}else{h=b+60|0;i=5}if((i|0)==5){l=cu(c[b+72>>2]|0)|0;s=b+48|0;o=c[s>>2]|0;r=b+52|0;q=c[r>>2]|0;j=c[h>>2]|0;h=q;if(o>>>0>=q>>>0){q=b+44|0;g=c[q>>2]|0;k=(o-g|0)/20|0;i=k+1|0;m=g;if(i>>>0>214748364)HB();n=(h-g|0)/20|0;h=n<<1;h=n>>>0<107374182?(h>>>0<i>>>0?i:h):214748364;do if(h)if(h>>>0>214748364)U();else{p=_A(h*20|0)|0;break}else p=0;while(0);i=p+(k*20|0)|0;n=p+(h*20|0)|0;c[i>>2]=l;c[p+(k*20|0)+4>>2]=j;c[p+(k*20|0)+8>>2]=0;c[p+(k*20|0)+12>>2]=0;c[p+(k*20|0)+16>>2]=0;k=i+20|0;if((o|0)!=(m|0)){g=o;do{j=i;i=i+-20|0;l=g;g=g+-20|0;h=g;p=c[h+4>>2]|0;o=i;c[o>>2]=c[h>>2];c[o+4>>2]=p;o=j+-12|0;p=l+-12|0;c[o>>2]=0;h=j+-8|0;c[h>>2]=0;j=j+-4|0;c[j>>2]=0;c[o>>2]=c[p>>2];o=l+-8|0;c[h>>2]=c[o>>2];l=l+-4|0;c[j>>2]=c[l>>2];c[l>>2]=0;c[o>>2]=0;c[p>>2]=0}while((g|0)!=(m|0));g=c[q>>2]|0;h=c[s>>2]|0;j=g;c[q>>2]=i;c[s>>2]=k;c[r>>2]=n;if((h|0)!=(j|0))do{i=c[h+-12>>2]|0;if(i|0){c[h+-8>>2]=i;$A(i)}h=h+-20|0}while((h|0)!=(j|0))}else{c[q>>2]=i;c[s>>2]=k;c[r>>2]=n}if(g|0)$A(g)}else{c[o>>2]=l;c[o+4>>2]=j;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[s>>2]=o+20}c[v>>2]=(c[s>>2]|0)+-20}q=(c[(c[b>>2]|0)+4>>2]|0)-(c[b+76>>2]|0)|0;c[x>>2]=q;c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;switch(f|0){case 0:{lB(w,c[(c[(c[b+8>>2]|0)+76>>2]|0)+(d<<2)>>2]|0)|0;t=0;break}case 7:{lB(w,c[(c[(c[b+8>>2]|0)+88>>2]|0)+(d<<2)>>2]|0)|0;t=2;break}default:U()}h=b+12|0;g=gj(h,w)|0;do if(!g){p=b+32|0;o=b+36|0;j=((c[o>>2]|0)-(c[p>>2]|0)|0)/12|0;g=hj(h,w)|0;c[g>>2]=j;g=c[o>>2]|0;n=b+40|0;h=c[n>>2]|0;if(g>>>0<h>>>0){c[g>>2]=j;c[g+4>>2]=t;c[g+8>>2]=d;c[o>>2]=(c[o>>2]|0)+12;break}m=c[p>>2]|0;l=g-m|0;k=(l|0)/12|0;g=k+1|0;if(g>>>0>357913941)HB();s=(h-m|0)/12|0;i=s<<1;i=s>>>0<178956970?(i>>>0<g>>>0?g:i):357913941;do if(i)if(i>>>0>357913941)U();else{u=_A(i*12|0)|0;break}else u=0;while(0);h=u+(k*12|0)|0;c[h>>2]=j;c[u+(k*12|0)+4>>2]=t;c[u+(k*12|0)+8>>2]=d;g=h+(((l|0)/-12|0)*12|0)|0;if((l|0)>0)sC(g|0,m|0,l|0)|0;c[p>>2]=g;c[o>>2]=h+12;c[n>>2]=u+(i*12|0);if(m)$A(m)}else j=c[g+20>>2]|0;while(0);if((a[w+11>>0]|0)<0)$A(c[w>>2]|0);c[z>>2]=j;g=c[v>>2]|0;i=g+12|0;h=c[i>>2]|0;if(h>>>0<(c[g+16>>2]|0)>>>0){Gj(h,f,q,j,0);c[i>>2]=(c[i>>2]|0)+16}else ij(g+8|0,y,x,z);Vl(c[b>>2]|0,d,e);aa=A;return}function fj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+128|0;h=j+112|0;i=j+104|0;f=j;c[i>>2]=d;Sz(f,100,298367,i)|0;e=c[b>>2]|0;g=c[e+12>>2]|0;if(g){c[h>>2]=f;Pn(g,298380,h);e=c[b>>2]|0}a[i>>0]=0;Qn(e,i,1,312891,0);c[b+72>>2]=0;c[b+68>>2]=1;f=c[b>>2]|0;g=a[(c[b+4>>2]|0)+11>>0]|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;a[i+4>>0]=0;h=c[f+4>>2]|0;Qn(f,i,g<<24>>24==0?5:1,298386,0);c[b+64>>2]=h;h=c[b>>2]|0;c[b+76>>2]=c[h+4>>2];i=Uz(d)|0;Ul(h,i,324027);Qn(h,d,i,298407,1);aa=j;return}function gj(b,e){b=b|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,p=0,q=0,r=0,s=0,t=0;s=a[e+11>>0]|0;r=s<<24>>24<0;t=r?c[e>>2]|0:e;s=r?c[e+4>>2]|0:s&255;if(s>>>0>3){e=t;h=s;f=s;while(1){r=v(d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24,1540483477)|0;h=(v(r>>>24^r,1540483477)|0)^(v(h,1540483477)|0);f=f+-4|0;if(f>>>0<=3)break;else e=e+4|0}r=s+-4|0;f=r&-4;g=t+(f+4)|0;e=h;f=r-f|0}else{g=t;e=s;f=s}switch(f|0){case 3:{i=d[g+2>>0]<<16^e;l=7;break}case 2:{i=e;l=7;break}case 1:{j=e;l=8;break}default:k=e}if((l|0)==7){j=d[g+1>>0]<<8^i;l=8}if((l|0)==8)k=v(j^d[g>>0],1540483477)|0;r=v(k>>>13^k,1540483477)|0;r=r>>>15^r;p=c[b+4>>2]|0;if(!p){t=0;return t|0}i=p+-1|0;f=(i&p|0)==0;if(!f)if(r>>>0<p>>>0)q=r;else q=(r>>>0)%(p>>>0)|0;else q=r&i;e=c[(c[b>>2]|0)+(q<<2)>>2]|0;if(!e){t=0;return t|0}j=c[e>>2]|0;if(!j){t=0;return t|0}k=(s|0)==0;if(f){e=j;a:while(1){l=c[e+4>>2]|0;f=(l|0)==(r|0);if(!(f|(l&i|0)==(q|0))){e=0;l=45;break}do if(f?(m=e+8|0,n=a[m+11>>0]|0,o=n<<24>>24<0,n=n&255,((o?c[e+12>>2]|0:n)|0)==(s|0)):0){f=c[m>>2]|0;g=o?f:m;f=f&255;if(o){if(k){l=45;break a}if(!(Tz(g,t,s)|0)){l=45;break a}else break}if(k){l=45;break a}if((a[t>>0]|0)==f<<24>>24){f=n;g=m;h=t;do{f=f+-1|0;g=g+1|0;if(!f){l=45;break a}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);e=c[e>>2]|0;if(!e){e=0;l=45;break}}if((l|0)==45)return e|0}b:while(1){e=c[j+4>>2]|0;do if((e|0)==(r|0)){e=j+8|0;g=a[e+11>>0]|0;i=g<<24>>24<0;g=g&255;if(((i?c[j+12>>2]|0:g)|0)==(s|0)){f=c[e>>2]|0;h=i?f:e;f=f&255;if(i){if(k){e=j;l=45;break b}if(!(Tz(h,t,s)|0)){e=j;l=45;break b}else break}if(k){e=j;l=45;break b}if((a[t>>0]|0)==f<<24>>24){f=t;do{g=g+-1|0;e=e+1|0;if(!g){e=j;l=45;break b}f=f+1|0}while((a[e>>0]|0)==(a[f>>0]|0))}}}else{if(e>>>0>=p>>>0)e=(e>>>0)%(p>>>0)|0;if((e|0)!=(q|0)){e=0;l=45;break b}}while(0);j=c[j>>2]|0;if(!j){e=0;l=45;break}}if((l|0)==45)return e|0;return 0}
+function $t(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,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;A=aa;aa=aa+32|0;y=A+20|0;z=A;w=a+40|0;x=a+44|0;m=c[x>>2]|0;i=m;k=(d|0)!=0;a:do if(k?(h=c[w>>2]|0,(m|0)!=(h|0)):0){g=0;j=m;while(1){u=j;j=j+-20|0;g=(c[u+-4>>2]|0)+g|0;if((g|0)==(d|0))break;if(g>>>0>d>>>0|(j|0)==(h|0)){u=g;g=i;break a}}u=d;g=j}else{u=0;g=i}while(0);c[z>>2]=b;c[z+4>>2]=0;q=z+8|0;c[q>>2]=0;r=z+12|0;c[r>>2]=0;s=z+16|0;c[s>>2]=e;do if(k&(u|0)==(d|0)?(o=z+4|0,f=g,(m|0)!=(f|0)):0){g=0;i=0;h=f;while(1){j=i;if(g>>>0>=i>>>0){i=c[o>>2]|0;b=(g-i|0)/20|0;g=b+1|0;if(g>>>0>214748364){g=13;break}l=(j-i|0)/20|0;n=l<<1;g=l>>>0<107374182?(n>>>0<g>>>0?g:n):214748364;if(!g)i=0;else{if(g>>>0>214748364){g=16;break}i=_A(g*20|0)|0}j=i+(b*20|0)|0;n=i+(g*20|0)|0;c[j>>2]=c[h>>2];g=h+4|0;c[i+(b*20|0)+4>>2]=c[g>>2];k=h+8|0;c[i+(b*20|0)+8>>2]=c[k>>2];l=h+12|0;c[i+(b*20|0)+12>>2]=c[l>>2];c[l>>2]=0;c[k>>2]=0;c[g>>2]=0;c[i+(b*20|0)+16>>2]=c[h+16>>2];g=j+20|0;k=g;b=c[o>>2]|0;i=c[q>>2]|0;if((i|0)==(b|0)){l=b;i=b}else{do{l=j;j=j+-20|0;B=i;i=i+-20|0;c[j>>2]=c[i>>2];D=l+-16|0;C=B+-16|0;c[D>>2]=0;E=l+-12|0;c[E>>2]=0;F=l+-8|0;c[F>>2]=0;c[D>>2]=c[C>>2];D=B+-12|0;c[E>>2]=c[D>>2];E=B+-8|0;c[F>>2]=c[E>>2];c[E>>2]=0;c[D>>2]=0;c[C>>2]=0;c[l+-4>>2]=c[B+-4>>2]}while((i|0)!=(b|0));l=c[o>>2]|0;i=c[q>>2]|0}c[o>>2]=j;c[q>>2]=k;c[r>>2]=n;k=l;if((i|0)!=(k|0))do{j=i+-16|0;i=i+-20|0;b=c[j>>2]|0;if(b|0){Es(j,b);$A(c[j>>2]|0)}}while((i|0)!=(k|0));if(l)$A(l)}else{c[g>>2]=c[h>>2];E=g+4|0;F=h+4|0;c[E>>2]=0;D=g+8|0;c[D>>2]=0;C=g+12|0;c[C>>2]=0;c[E>>2]=c[F>>2];E=h+8|0;c[D>>2]=c[E>>2];D=h+12|0;c[C>>2]=c[D>>2];c[D>>2]=0;c[E>>2]=0;c[F>>2]=0;c[g+16>>2]=c[h+16>>2];g=(c[q>>2]|0)+20|0;c[q>>2]=g}h=h+20|0;if((h|0)==(m|0)){g=32;break}i=c[r>>2]|0}if((g|0)==13)HB();else if((g|0)==16)U();else if((g|0)==32){n=c[x>>2]|0;if((n|0)!=(m|0))do{c[f>>2]=c[m>>2];k=f+4|0;l=m+4|0;b=c[k>>2]|0;if(!b){g=f+8|0;h=f+12|0}else{g=f+8|0;h=c[g>>2]|0;if((h|0)==(b|0))h=b;else{do{i=h+-16|0;h=h+-20|0;j=c[i>>2]|0;if(j|0){Es(i,j);$A(c[i>>2]|0)}}while((h|0)!=(b|0));h=c[k>>2]|0}c[g>>2]=b;$A(h);h=f+12|0;c[h>>2]=0;c[g>>2]=0;c[k>>2]=0}c[k>>2]=c[l>>2];F=m+8|0;c[g>>2]=c[F>>2];E=m+12|0;c[h>>2]=c[E>>2];c[E>>2]=0;c[F>>2]=0;c[l>>2]=0;c[f+16>>2]=c[m+16>>2];m=m+20|0;f=f+20|0}while((m|0)!=(n|0));Es(w,f);p=c[x>>2]|0;break}}else p=m;while(0);k=a+48|0;F=c[k>>2]|0;g=F;if(p>>>0>=F>>>0){f=c[w>>2]|0;i=(p-f|0)/20|0;h=i+1|0;j=f;if(h>>>0>214748364)HB();F=(g-f|0)/20|0;g=F<<1;g=F>>>0<107374182?(g>>>0<h>>>0?h:g):214748364;do if(g)if(g>>>0>214748364)U();else{t=_A(g*20|0)|0;break}else t=0;while(0);h=t+(i*20|0)|0;b=t+(g*20|0)|0;c[h>>2]=c[z>>2];F=z+4|0;c[t+(i*20|0)+4>>2]=c[F>>2];c[t+(i*20|0)+8>>2]=c[q>>2];c[t+(i*20|0)+12>>2]=c[r>>2];c[r>>2]=0;c[q>>2]=0;c[F>>2]=0;c[t+(i*20|0)+16>>2]=c[s>>2];i=h+20|0;if((p|0)!=(j|0)){f=p;do{F=h;h=h+-20|0;E=f;f=f+-20|0;c[h>>2]=c[f>>2];C=F+-16|0;D=E+-16|0;c[C>>2]=0;B=F+-12|0;c[B>>2]=0;t=F+-8|0;c[t>>2]=0;c[C>>2]=c[D>>2];C=E+-12|0;c[B>>2]=c[C>>2];B=E+-8|0;c[t>>2]=c[B>>2];c[B>>2]=0;c[C>>2]=0;c[D>>2]=0;c[F+-4>>2]=c[E+-4>>2]}while((f|0)!=(j|0));f=c[w>>2]|0;g=c[x>>2]|0;j=f;c[w>>2]=h;c[x>>2]=i;c[k>>2]=b;if((g|0)!=(j|0))do{h=g+-16|0;g=g+-20|0;i=c[h>>2]|0;if(i|0){Es(h,i);$A(c[h>>2]|0)}}while((g|0)!=(j|0))}else{c[w>>2]=h;c[x>>2]=i;c[k>>2]=b}if(f|0)$A(f)}else{c[p>>2]=c[z>>2];F=z+4|0;c[p+4>>2]=c[F>>2];c[p+8>>2]=c[q>>2];c[p+12>>2]=c[r>>2];c[r>>2]=0;c[q>>2]=0;c[F>>2]=0;c[p+16>>2]=c[s>>2];c[x>>2]=(c[x>>2]|0)+20}if((e|0)==0|u>>>0>d>>>0?(F=c[w>>2]|0,c[y>>2]=F,E=c[x>>2]|0,c[y+4>>2]=E,c[y+8>>2]=c[k>>2],v=F,c[w>>2]=0,c[w+4>>2]=0,c[w+8>>2]=0,Ds(a,v,E),F|0):0){Es(y,v);$A(c[y>>2]|0)}f=z+4|0;g=c[f>>2]|0;if(!g){aa=A;return}Es(f,g);$A(c[f>>2]|0);aa=A;return}function au(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if((c[d+20>>2]|0)!=1){e=c[d+24>>2]|0;d=c[b+28>>2]|0;b=((c[b+32>>2]|0)-d|0)/40|0;if(b>>>0>e>>>0){b=d+((b+~e|0)*40|0)|0;k=17}else{k=0;return k|0}}else{j=c[b+28>>2]|0;b=(c[b+32>>2]|0)-j|0;if(!b){k=0;return k|0}e=(b|0)/40|0;h=d+24|0;i=a[h+11>>0]|0;g=i<<24>>24<0;i=g?c[d+28>>2]|0:i&255;h=g?c[h>>2]|0:h;if(!i){while(1){e=e+-1|0;b=j+(e*40|0)|0;i=a[b+11>>0]|0;if(!((i<<24>>24<0?c[j+(e*40|0)+4>>2]|0:i&255)|0))break a;if(!e){b=0;break}}return b|0}while(1){e=e+-1|0;b=j+(e*40|0)|0;f=a[b+11>>0]|0;g=f<<24>>24<0;f=f&255;do if(((g?c[j+(e*40|0)+4>>2]|0:f)|0)==(i|0)){d=c[b>>2]|0;if(g)if(!(Tz(d,h,i)|0))break a;else break;if((a[h>>0]|0)==(d&255)<<24>>24){d=f;f=b;g=h;do{d=d+-1|0;f=f+1|0;if(!d){k=17;break a}g=g+1|0}while((a[f>>0]|0)==(a[g>>0]|0))}}while(0);if(!e){b=0;break}}return b|0}while(0);if((k|0)==17)if(!b){k=0;return k|0}if((c[b+12>>2]|0)==2){k=(c[b+20>>2]|0)-(c[b+16>>2]|0)>>2;return k|0}else{k=(c[b+32>>2]|0)-(c[b+28>>2]|0)>>2;return k|0}return 0}function bu(a){a=a|0;var b=0;switch(a|0){case 6:case 5:case 4:case 3:case 2:case 1:case 0:{b=a;break}case 13:{b=7;break}case 7:{b=8;break}case 8:{b=9;break}case 9:{b=10;break}case 12:{b=11;break}case 10:{b=12;break}case 11:{b=13;break}default:U()}return b|0}function cu(a){a=a|0;var b=0;do switch(a|0){case 0:{b=312679;break}case 1:{b=312674;break}case 2:{b=312667;break}case 3:{b=312658;break}case 4:{b=312652;break}case 5:{b=312645;break}case 6:{b=312638;break}case 13:{b=312632;break}case 7:{b=312625;break}case 8:{b=312619;break}case 9:{b=312614;break}case 12:{b=312604;break}case 10:{b=312599;break}case 11:{b=312594;break}default:U()}while(0);return b|0}function du(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var 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;u=aa;aa=aa+208|0;q=u+48|0;p=u+40|0;o=u+32|0;r=u+24|0;n=u+16|0;m=u+8|0;j=u;t=u+52|0;c[t>>2]=e;i=t+4|0;c[i>>2]=b;c[t+8>>2]=e;l=t+12|0;c[l>>2]=0;s=t+16|0;b=g+12|0;$x(s,c[b>>2]|0,f);k=t+36|0;c[k>>2]=(c[b>>2]|0)==0?f:s;s=t+40|0;b=t+76|0;e=s;h=e+36|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(h|0));c[b>>2]=g;c[t+80>>2]=-1;a[t+84>>0]=0;a[t+85>>0]=0;b=t+144|0;e=t+88|0;h=e+56|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(h|0));c[b>>2]=-1;na[c[(c[f>>2]|0)+12>>2]&31](f,i);b=c[l>>2]|0;f=b+4|0;g=c[t>>2]|0;do if(f>>>0<=g>>>0){h=c[t+4>>2]|0;j=h+b|0;j=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;c[l>>2]=f;if((j|0)!=1836278016){eu(t,312723,m);e=1;break}e=b+8|0;if(e>>>0>g>>>0){c[n>>2]=312692;c[n+4>>2]=312739;eu(t,312701,n);e=1;break}b=h+f|0;b=d[b>>0]|d[b+1>>0]<<8|d[b+2>>0]<<16|d[b+3>>0]<<24;c[l>>2]=e;if((b|0)!=1){c[r>>2]=b;c[r+4>>2]=1;eu(t,312747,r);e=1;break}r=c[k>>2]|0;if(fa[c[(c[r>>2]|0)+16>>2]&511](r,1)|0){eu(t,312789,o);e=1;break}if((fu(t)|0)!=1){if((c[t+116>>2]|0)!=(c[t+136>>2]|0)){eu(t,312817,p);e=1;break}r=c[k>>2]|0;if(!(ea[c[(c[r>>2]|0)+20>>2]&127](r)|0))e=0;else{eu(t,312865,q);e=1}}else e=1}else{c[j>>2]=312692;c[j+4>>2]=312686;eu(t,312701,j);e=1}while(0);b=c[t+64>>2]|0;if(b|0){c[t+68>>2]=b;$A(b)}b=c[t+52>>2]|0;if(b|0){c[t+56>>2]=b;$A(b)}b=c[s>>2]|0;if(!b){aa=u;return e|0}c[t+44>>2]=b;$A(b);aa=u;return e|0}function eu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+224|0;m=n+176|0;l=n+160|0;g=n+144|0;i=n+128|0;h=n;j=n+188|0;if(!(a[b+85>>0]|0))k=1;else k=d[(c[b+76>>2]|0)+18>>0]|0;c[g>>2]=f;c[i>>2]=c[g>>2];g=(Vz(h,128,e,g)|0)+1|0;if(g>>>0>128){h=aa;aa=aa+((1*g|0)+15&-16)|0;Vz(h,g,e,i)|0}g=b+12|0;f=c[g>>2]|0;e=Uz(h)|0;c[j>>2]=k;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=f;f=j+24|0;Wn(f,h,e);b=c[b+36>>2]|0;a:do if(!(fa[c[(c[b>>2]|0)+8>>2]&511](b,j)|0)){g=c[g>>2]|0;switch((k&255)<<24>>24){case 0:{c[l>>2]=g;c[l+4>>2]=324100;c[l+8>>2]=h;BA(0,324108,l);break a}case 1:{c[m>>2]=g;c[m+4>>2]=324094;c[m+8>>2]=h;BA(0,324108,m);break a}default:U()}}while(0);if((a[f+11>>0]|0)>=0){aa=n;return}$A(c[f>>2]|0);aa=n;return}function fu(d){d=d|0;var 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,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,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0;Pf=aa;aa=aa+2560|0;Ra=Pf+2520|0;Sa=Pf+2496|0;Df=Pf+2488|0;Cf=Pf+2480|0;Bf=Pf+2472|0;Af=Pf+2464|0;zf=Pf+2456|0;yf=Pf+2448|0;xf=Pf+2440|0;wf=Pf+2432|0;vf=Pf+2424|0;tf=Pf+2408|0;sf=Pf+2400|0;rf=Pf+2392|0;qf=Pf+2384|0;pf=Pf+2376|0;of=Pf+2368|0;nf=Pf+2360|0;mf=Pf+2352|0;lf=Pf+2344|0;kf=Pf+2336|0;jf=Pf+2328|0;hf=Pf+2320|0;ff=Pf+2312|0;ef=Pf+2304|0;df=Pf+2296|0;cf=Pf+2288|0;bf=Pf+2280|0;af=Pf+2272|0;$e=Pf+2256|0;Ze=Pf+2248|0;Ye=Pf+2240|0;Xe=Pf+2232|0;We=Pf+2224|0;Ve=Pf+2216|0;Ue=Pf+2208|0;Te=Pf+2200|0;Se=Pf+2192|0;Re=Pf+2184|0;Pe=Pf+2176|0;Oe=Pf+2160|0;Ne=Pf+2152|0;Me=Pf+2144|0;Le=Pf+2136|0;Ke=Pf+2128|0;Je=Pf+2120|0;Ie=Pf+2104|0;He=Pf+2096|0;Ge=Pf+2088|0;Ee=Pf+2080|0;De=Pf+2072|0;Ce=Pf+2064|0;Be=Pf+2056|0;Ae=Pf+2048|0;ze=Pf+2040|0;ye=Pf+2032|0;xe=Pf+2024|0;we=Pf+2016|0;ve=Pf+2008|0;ue=Pf+1992|0;te=Pf+1984|0;re=Pf+1976|0;qe=Pf+1968|0;pe=Pf+1960|0;oe=Pf+1952|0;ne=Pf+1944|0;me=Pf+1936|0;le=Pf+1928|0;ke=Pf+1920|0;je=Pf+1912|0;ie=Pf+1904|0;he=Pf+1888|0;ge=Pf+1880|0;ee=Pf+1872|0;de=Pf+1864|0;ce=Pf+1856|0;be=Pf+1848|0;ae=Pf+1840|0;$d=Pf+1832|0;_d=Pf+1824|0;Zd=Pf+1816|0;Yd=Pf+1808|0;Xd=Pf+1800|0;Wd=Pf+1792|0;Vd=Pf+1784|0;Td=Pf+1776|0;Sd=Pf+1768|0;Rd=Pf+1760|0;Qd=Pf+1752|0;Pd=Pf+1744|0;Od=Pf+1736|0;Md=Pf+1720|0;Ld=Pf+1712|0;Kd=Pf+1704|0;Jd=Pf+1696|0;Id=Pf+1688|0;Hd=Pf+1680|0;Gd=Pf+1672|0;Fd=Pf+1664|0;Ed=Pf+1656|0;Dd=Pf+1640|0;Cd=Pf+1632|0;Bd=Pf+1624|0;Ad=Pf+1616|0;zd=Pf+1608|0;yd=Pf+1600|0;xd=Pf+1592|0;wd=Pf+1576|0;vd=Pf+1568|0;ud=Pf+1560|0;td=Pf+1552|0;rd=Pf+1544|0;qd=Pf+1536|0;pd=Pf+1528|0;od=Pf+1512|0;nd=Pf+1504|0;md=Pf+1496|0;ld=Pf+1488|0;kd=Pf+1480|0;id=Pf+1472|0;hd=Pf+1464|0;gd=Pf+1456|0;ed=Pf+1440|0;dd=Pf+1432|0;cd=Pf+1424|0;bd=Pf+1416|0;ad=Pf+1408|0;$c=Pf+1400|0;_c=Pf+1392|0;Zc=Pf+1384|0;Yc=Pf+1376|0;Wc=Pf+1368|0;Vc=Pf+1360|0;Uc=Pf+1352|0;Tc=Pf+1344|0;Sc=Pf+1336|0;Rc=Pf+1328|0;Qc=Pf+1320|0;Pc=Pf+1312|0;Nc=Pf+1304|0;Mc=Pf+1296|0;Lc=Pf+1280|0;Kc=Pf+1272|0;Jc=Pf+1264|0;Ic=Pf+1256|0;Hc=Pf+1248|0;Fc=Pf+1240|0;Ec=Pf+1232|0;Dc=Pf+1224|0;Cc=Pf+1216|0;Bc=Pf+1200|0;Ac=Pf+1192|0;yc=Pf+1184|0;xc=Pf+1176|0;wc=Pf+1168|0;vc=Pf+1152|0;uc=Pf+1144|0;tc=Pf+1136|0;sc=Pf+1128|0;rc=Pf+1120|0;pc=Pf+1104|0;oc=Pf+1096|0;nc=Pf+1088|0;mc=Pf+1080|0;lc=Pf+1072|0;kc=Pf+1064|0;jc=Pf+1056|0;ic=Pf+1048|0;gc=Pf+1040|0;fc=Pf+1032|0;ec=Pf+1024|0;dc=Pf+1016|0;cc=Pf+1008|0;bc=Pf+1e3|0;ac=Pf+992|0;$b=Pf+984|0;Zb=Pf+976|0;Yb=Pf+968|0;Xb=Pf+960|0;Wb=Pf+952|0;Vb=Pf+944|0;Ub=Pf+936|0;Tb=Pf+928|0;Sb=Pf+920|0;Rb=Pf+912|0;Qb=Pf+904|0;Pb=Pf+896|0;Ob=Pf+888|0;Mb=Pf+880|0;Lb=Pf+872|0;Kb=Pf+864|0;Jb=Pf+856|0;Ib=Pf+848|0;Hb=Pf+840|0;Gb=Pf+832|0;Fb=Pf+824|0;Db=Pf+816|0;Cb=Pf+808|0;Bb=Pf+800|0;Ab=Pf+792|0;zb=Pf+784|0;yb=Pf+776|0;xb=Pf+768|0;vb=Pf+760|0;ub=Pf+752|0;tb=Pf+744|0;sb=Pf+736|0;rb=Pf+728|0;qb=Pf+720|0;pb=Pf+712|0;ob=Pf+704|0;mb=Pf+696|0;lb=Pf+680|0;kb=Pf+672|0;jb=Pf+664|0;ib=Pf+656|0;hb=Pf+648|0;gb=Pf+640|0;fb=Pf+632|0;eb=Pf+624|0;db=Pf+616|0;cb=Pf+608|0;ab=Pf+600|0;$a=Pf+592|0;_a=Pf+584|0;Za=Pf+576|0;Ya=Pf+568|0;Xa=Pf+560|0;Wa=Pf+552|0;Va=Pf+544|0;Of=Pf+536|0;Nf=Pf+528|0;Mf=Pf+520|0;Kf=Pf+504|0;Jf=Pf+496|0;If=Pf+488|0;Hf=Pf+480|0;Gf=Pf+472|0;Ff=Pf+464|0;uf=Pf+448|0;gf=Pf+440|0;_e=Pf+432|0;Qe=Pf+424|0;Fe=Pf+416|0;se=Pf+408|0;fe=Pf+400|0;Ud=Pf+392|0;Nd=Pf+384|0;sd=Pf+368|0;fd=Pf+360|0;Xc=Pf+352|0;Oc=Pf+344|0;Gc=Pf+336|0;zc=Pf+328|0;qc=Pf+320|0;hc=Pf+312|0;_b=Pf+304|0;Nb=Pf+296|0;Eb=Pf+288|0;wb=Pf+280|0;nb=Pf+272|0;bb=Pf+264|0;Lf=Pf+256|0;Ef=Pf+248|0;jd=Pf+240|0;Ua=Pf+232|0;Ta=Pf+224|0;ya=Pf+216|0;ba=Pf+208|0;R=Pf+200|0;S=Pf+192|0;T=Pf+184|0;V=Pf+176|0;$=Pf+152|0;_=Pf+128|0;B=Pf+120|0;C=Pf+112|0;D=Pf+104|0;E=Pf+96|0;F=Pf+88|0;G=Pf+80|0;H=Pf+72|0;I=Pf+64|0;J=Pf+56|0;K=Pf+48|0;L=Pf+40|0;M=Pf+32|0;N=Pf+24|0;O=Pf+16|0;P=Pf+8|0;Q=Pf;Ca=Pf+2544|0;xa=d+12|0;e=c[xa>>2]|0;Ea=d+8|0;if(e>>>0>=(c[Ea>>2]|0)>>>0){Of=0;aa=Pf;return Of|0}W=d+4|0;ca=d+80|0;Z=d+84|0;Y=d+36|0;za=d+76|0;Fa=H+4|0;ua=d+88|0;ra=d+92|0;oa=d+116|0;wa=d+120|0;sa=d+124|0;qa=d+128|0;ma=d+132|0;na=d+136|0;x=d+85|0;Qa=d+96|0;la=d+140|0;Aa=d+40|0;y=d+44|0;Ba=d+52|0;A=d+56|0;Ia=ya+4|0;Pa=ba+4|0;va=d+100|0;ta=d+104|0;pa=d+108|0;da=d+112|0;Ja=Sa+4|0;X=d+144|0;Ka=ya+4|0;Ma=ya+4|0;La=ya+4|0;Ga=R+4|0;Oa=R+4|0;Na=T+4|0;Ha=T+4|0;Da=H+4|0;g=e;v=c[d>>2]|0;e=0;w=0;a:while(1){f=c[W>>2]|0;f=_l(f+g|0,f+v|0,Ca)|0;if(!f){s=4;break}v=(c[xa>>2]|0)+f|0;c[xa>>2]=v;f=c[W>>2]|0;f=_l(f+v|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=6;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;i=c[Ra>>2]|0;v=c[d>>2]|0;f=i+f|0;c[d>>2]=f;u=c[Ca>>2]|0;if(u>>>0>13){s=8;break}if(f>>>0>(c[Ea>>2]|0)>>>0){s=10;break}t=(u|0)==0;if(!(t|(c[ca>>2]|0)==-1)?(r=bu(u)|0,(r|0)<=(bu(c[ca>>2]|0)|0)):0){s=13;break}if(!(t|(a[Z>>0]|0)==0)){s=15;break}r=c[Y>>2]|0;if(ha[c[(c[r>>2]|0)+24>>2]&127](r,w,u,i)|0){s=17;break}f=c[za>>2]|0;g=(a[f+17>>0]|0)!=0;do switch(u|0){case 0:{c[H>>2]=0;c[Fa>>2]=0;do if((gu(d,H,313108)|0)==1)f=1;else{r=c[Y>>2]|0;q=c[(c[r>>2]|0)+28>>2]|0;o=H;h=c[o>>2]|0;o=c[o+4>>2]|0;p=I;c[p>>2]=h;c[p+4>>2]=o;c[Ra>>2]=c[I>>2];c[Ra+4>>2]=c[I+4>>2];if(ga[q&127](r,i,Ra)|0){eu(d,313121,wb);f=1;break}r=a[x>>0]|0;a[x>>0]=1;f=c[Da>>2]|0;b:do if((a[(c[za>>2]|0)+16>>0]|0)!=0?(Yn(h,f,313156,4)|0)==0:0){q=c[Y>>2]|0;if(fa[c[(c[q>>2]|0)+604>>2]&511](q,i)|0){eu(d,313161,Eb);f=1;break}f=c[xa>>2]|0;h=c[d>>2]|0;c:do if(f>>>0<h>>>0){p=0;q=0;d:while(1){o=c[W>>2]|0;f=_l(o+f|0,o+h|0,Sa)|0;if(!f){s=30;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;h=q;q=c[Sa>>2]|0;if(p|0){if((q|0)==(h|0)){s=33;break}if(q>>>0<h>>>0){s=35;break}}o=c[W>>2]|0;f=_l(o+f|0,o+(c[d>>2]|0)|0,Ra)|0;if(!f){s=37;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;i=c[Ra>>2]|0;f=i+f|0;h=c[d>>2]|0;if(f>>>0>h>>>0){s=39;break}c[d>>2]=f;e:do switch(q|0){case 0:{o=c[Y>>2]|0;if(ha[c[(c[o>>2]|0)+608>>2]&127](o,p,0,i)|0){s=42;break d}if(!i)break e;c[ya>>2]=0;c[Ka>>2]=0;if((gu(d,ya,313350)|0)==1){s=47;break d}o=c[Y>>2]|0;n=c[(c[o>>2]|0)+612>>2]|0;k=ya;l=c[k+4>>2]|0;m=ba;c[m>>2]=c[k>>2];c[m+4>>2]=l;c[Ra>>2]=c[ba>>2];c[Ra+4>>2]=c[ba+4>>2];if(fa[n&511](o,Ra)|0){s=46;break d}break}case 1:{o=c[Y>>2]|0;if(ha[c[(c[o>>2]|0)+616>>2]&127](o,p,1,i)|0){s=50;break d}if(!i)break e;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=53;break d}i=(c[xa>>2]|0)+i|0;c[xa>>2]=i;l=c[Ra>>2]|0;i=(c[d>>2]|0)-i|0;if(l>>>0>i>>>0){s=55;break d}o=c[Y>>2]|0;if(fa[c[(c[o>>2]|0)+620>>2]&511](o,l)|0){s=57;break d}if(!l)break e;j=0;k=-1;while(1){c[ya>>2]=0;c[Ma>>2]=0;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=61;break d}c[xa>>2]=(c[xa>>2]|0)+i;i=c[Ra>>2]|0;if((i|0)==(k|0)){s=63;break d}if(!((k|0)==-1|i>>>0>k>>>0)){s=65;break d}if(i>>>0>=((c[oa>>2]|0)+(c[Qa>>2]|0)|0)>>>0){s=67;break d}if((gu(d,ya,313628)|0)==1){s=72;break d}o=c[Y>>2]|0;n=c[(c[o>>2]|0)+624>>2]|0;Qf=ya;k=c[Qf+4>>2]|0;m=R;c[m>>2]=c[Qf>>2];c[m+4>>2]=k;c[Ra>>2]=c[R>>2];c[Ra+4>>2]=c[R+4>>2];if(ga[n&127](o,i,Ra)|0){s=70;break d}j=j+1|0;if(j>>>0>=l>>>0)break;else k=i}break}case 2:{Qf=c[Y>>2]|0;if(ha[c[(c[Qf>>2]|0)+628>>2]&127](Qf,p,2,i)|0){s=74;break d}if(!i)break e;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=77;break d}i=(c[xa>>2]|0)+i|0;c[xa>>2]=i;o=c[Ra>>2]|0;i=(c[d>>2]|0)-i|0;if(o>>>0>i>>>0){s=79;break d}Qf=c[Y>>2]|0;if(fa[c[(c[Qf>>2]|0)+632>>2]&511](Qf,o)|0){s=81;break d}if(!o)break e;m=0;n=-1;do{i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=85;break d}i=(c[xa>>2]|0)+i|0;c[xa>>2]=i;j=n;n=c[Ra>>2]|0;if(n>>>0>=((c[oa>>2]|0)+(c[Qa>>2]|0)|0)>>>0){s=87;break d}if(!((j|0)==-1|n>>>0>j>>>0)){s=89;break d}Qf=c[W>>2]|0;i=_l(Qf+i|0,Qf+(c[d>>2]|0)|0,Ra)|0;if(!i){s=91;break d}i=(c[xa>>2]|0)+i|0;c[xa>>2]=i;l=c[Ra>>2]|0;i=(c[d>>2]|0)-i|0;if(l>>>0>i>>>0){s=93;break d}Qf=c[Y>>2]|0;if(ga[c[(c[Qf>>2]|0)+636>>2]&127](Qf,n,l)|0){s=95;break d}if(l|0){j=0;k=-1;while(1){c[ya>>2]=0;c[La>>2]=0;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=99;break d}c[xa>>2]=(c[xa>>2]|0)+i;i=c[Ra>>2]|0;if((i|0)==(k|0)){s=101;break d}if(!((k|0)==-1|i>>>0>k>>>0)){s=103;break d}if((gu(d,ya,313156)|0)==1){s=108;break d}Qf=c[Y>>2]|0;k=c[(c[Qf>>2]|0)+640>>2]|0;Tf=ya;Sf=c[Tf+4>>2]|0;Rf=S;c[Rf>>2]=c[Tf>>2];c[Rf+4>>2]=Sf;c[Ra>>2]=c[S>>2];c[Ra+4>>2]=c[S+4>>2];if(ha[k&127](Qf,n,i,Ra)|0){s=106;break d}j=j+1|0;if(j>>>0>=l>>>0)break;else k=i}}m=m+1|0}while(m>>>0<o>>>0);break}default:c[xa>>2]=f}while(0);if((c[xa>>2]|0)!=(f|0)){s=112;break}c[d>>2]=h;if(f>>>0>=h>>>0)break c;else p=p+1|0}switch(s|0){case 30:{c[Nb>>2]=313195;eu(d,312904,Nb);s=113;break}case 33:{eu(d,313205,_b);s=113;break}case 35:{eu(d,313227,hc);s=113;break}case 37:{c[qc>>2]=313252;eu(d,312904,qc);s=113;break}case 39:{eu(d,313268,zc);s=113;break}case 42:{s=0;eu(d,313311,Gc);break}case 46:{eu(d,313362,Oc);s=47;break}case 50:{s=0;eu(d,313391,Xc);break}case 53:{s=0;c[fd>>2]=313432;eu(d,312904,fd);break}case 55:{s=0;c[sd>>2]=313432;c[sd+4>>2]=l;c[sd+8>>2]=i;eu(d,313443,sd);break}case 57:{s=0;eu(d,313489,Nd);break}case 61:{c[Ud>>2]=313526;eu(d,312904,Ud);s=72;break}case 63:{c[fe>>2]=k;eu(d,313541,fe);s=72;break}case 65:{c[se>>2]=i;eu(d,313569,se);s=72;break}case 67:{c[Fe>>2]=i;eu(d,313601,Fe);s=72;break}case 70:{eu(d,313642,Qe);s=72;break}case 74:{s=0;eu(d,313673,_e);break}case 77:{s=0;c[gf>>2]=313711;eu(d,312904,gf);break}case 79:{s=0;c[uf>>2]=313711;c[uf+4>>2]=o;c[uf+8>>2]=i;eu(d,313443,uf);break}case 81:{s=0;eu(d,313726,Ff);break}case 85:{s=0;c[Gf>>2]=313526;eu(d,312904,Gf);break}case 87:{s=0;c[Hf>>2]=n;eu(d,313601,Hf);break}case 89:{s=0;c[If>>2]=n;eu(d,313767,If);break}case 91:{s=0;c[Jf>>2]=313806;eu(d,312904,Jf);break}case 93:{s=0;c[Kf>>2]=313806;c[Kf+4>>2]=l;c[Kf+8>>2]=i;eu(d,313443,Kf);break}case 95:{s=0;eu(d,313818,Mf);break}case 99:{c[Nf>>2]=313856;eu(d,312904,Nf);s=108;break}case 101:{c[Of>>2]=k;eu(d,313868,Of);s=108;break}case 103:{c[Va>>2]=i;eu(d,313894,Va);s=108;break}case 106:{eu(d,313923,Wa);s=108;break}case 112:{s=0;c[Xa>>2]=f;eu(d,313951,Xa);break}}if((s|0)==47)s=0;else if((s|0)==72)s=0;else if((s|0)==108)s=0;else if((s|0)==113){s=0;f=1;break b}c[d>>2]=h;f=1;break b}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+644>>2]&127](Tf)|0)){a[Z>>0]=1;s=309;break}else{eu(d,313996,Ya);f=1;break}}else s=119;while(0);f:do if((s|0)==119){s=0;if(!(Yn(h,f,314028,6)|0)){Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+664>>2]&511](Tf,i)|0){eu(d,314035,Za);f=1;break}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;do if(!f){c[_a>>2]=314070;eu(d,312904,_a);f=1}else{Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,ya)|0;if(!f){c[$a>>2]=314079;eu(d,312904,$a);f=1;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,ba)|0;if(!f){c[ab>>2]=314089;eu(d,312904,ab);f=1;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,R)|0;if(!f){c[cb>>2]=314100;eu(d,312904,cb);f=1;break}c[xa>>2]=(c[xa>>2]|0)+f;Tf=c[Y>>2]|0;if(ia[c[(c[Tf>>2]|0)+668>>2]&31](Tf,c[Sa>>2]|0,c[ya>>2]|0,c[ba>>2]|0,c[R>>2]|0)|0){eu(d,314112,db);f=1;break}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,S)|0;g:do if(!f){c[eb>>2]=314141;eu(d,312904,eb);f=1}else{c[xa>>2]=(c[xa>>2]|0)+f;Tf=c[Y>>2]|0;f=c[S>>2]|0;if(fa[c[(c[Tf>>2]|0)+672>>2]&511](Tf,f)|0){eu(d,314156,fb);f=1;break}h=f+-1|0;c[S>>2]=h;do if(f|0){while(1){c[T>>2]=0;c[Ha>>2]=0;if((gu(d,T,314192)|0)==1){s=139;break}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+676>>2]|0;s=T;Qf=c[s+4>>2]|0;Rf=V;c[Rf>>2]=c[s>>2];c[Rf+4>>2]=Qf;c[Ra>>2]=c[V>>2];c[Ra+4>>2]=c[V+4>>2];if(fa[Sf&511](Tf,Ra)|0){s=141;break}f=h+-1|0;if(!h){s=143;break}else h=f}if((s|0)==139){s=0;c[S>>2]=h;f=1;break g}else if((s|0)==141){s=0;c[S>>2]=h;eu(d,314206,gb);f=1;break g}else if((s|0)==143){s=0;c[S>>2]=f;break}}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+680>>2]&127](Tf)|0)){f=0;break}eu(d,314237,hb);f=1}while(0)}while(0);if((f|0)==1){f=1;break}else{s=309;break}}if(!(Zn(h,f)|0)){Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+648>>2]&511](Tf,i)|0){eu(d,314276,ib);f=1;break}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;h:do if(f){Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[kb>>2]=314324;eu(d,312904,kb);break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;l=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(l>>>0>f>>>0){c[lb>>2]=314324;c[lb+4>>2]=l;c[lb+8>>2]=f;eu(d,313443,lb);break}Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+652>>2]&127](Tf,l,c[Sa>>2]|0)|0){eu(d,314341,mb);break}i:do if(l|0){k=0;j:while(1){c[ba>>2]=0;f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,ya)|0;if(!f){s=162;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=164;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;j=c[Ra>>2]|0;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=166;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;h=c[Ra>>2]|0;i=c[ya>>2]|0;switch(i|0){case 9:case 8:case 5:case 11:case 4:case 3:{Tf=c[W>>2]|0;f=$l(Tf+f|0,Tf+(c[d>>2]|0)|0,ba)|0;if(!f){s=170;break j}c[xa>>2]=(c[xa>>2]|0)+f;f=c[ba>>2]|0;break}default:f=0}Tf=c[Y>>2]|0;if(ia[c[(c[Tf>>2]|0)+656>>2]&31](Tf,i,j,h,f)|0){s=172;break}k=k+1|0;if(k>>>0>=l>>>0)break i}if((s|0)==162){s=0;c[ob>>2]=314370;eu(d,312904,ob)}else if((s|0)==164){s=0;c[pb>>2]=330301;eu(d,312904,pb)}else if((s|0)==166){s=0;c[qb>>2]=314386;eu(d,312904,qb)}else if((s|0)==170){s=0;c[rb>>2]=314392;eu(d,314399,rb)}else if((s|0)==172){s=0;eu(d,314429,sb)}break h}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+660>>2]&127](Tf)|0)){s=309;break f}else{eu(d,314453,tb);break}}else{c[jb>>2]=314310;eu(d,312904,jb)}while(0);f=1;break}if(Yn(h,f,314485,7)|0){c[xa>>2]=c[d>>2];s=309;break}Tf=c[Y>>2]|0;if(!(fa[c[(c[Tf>>2]|0)+684>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;k:do if(!f){c[vb>>2]=312739;eu(d,312904,vb);f=1}else{h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Sa>>2]|0;if((f|0)!=2){c[xb>>2]=f;eu(d,314529,xb);f=1;break}f=c[d>>2]|0;l:do if(h>>>0<f>>>0){m=h;m:while(1){Tf=c[W>>2]|0;f=_l(Tf+m|0,Tf+f|0,ya)|0;if(!f){s=189;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=191;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;m=(c[Ra>>2]|0)+h|0;f=c[d>>2]|0;if(m>>>0>f>>>0){s=193;break}c[d>>2]=m;n:do switch(c[ya>>2]|0){case 8:{Tf=c[W>>2]|0;h=_l(Tf+h|0,Tf+m|0,ba)|0;if(!h){s=196;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+688>>2]&511](Tf,c[ba>>2]|0)|0){s=198;break m}if(!(c[ba>>2]|0))break n;l=0;do{c[R>>2]=0;c[Ga>>2]=0;c[S>>2]=0;c[T>>2]=0;h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,T)|0;o:do if(!h){c[Db>>2]=314606;eu(d,312904,Db);h=0}else{Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,S)|0;if(!h){c[Fb>>2]=314615;eu(d,312904,Fb);h=0;break}c[xa>>2]=(c[xa>>2]|0)+h;h=c[T>>2]|0;Tf=c[Y>>2]|0;k=c[S>>2]|0;if(ha[c[(c[Tf>>2]|0)+692>>2]&127](Tf,l,h,k)|0){eu(d,314625,Gb);h=0;break}switch(h|0){case 4:case 2:case 0:{c[V>>2]=0;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,V)|0;p:do if(!i){c[Hb>>2]=314386;eu(d,312904,Hb)}else{c[xa>>2]=(c[xa>>2]|0)+i;if((k&80|0)!=16?(gu(d,R,314650)|0)==1:0)break;q:do switch(h|0){case 0:{Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+700>>2]|0;q=R;Qf=c[q+4>>2]|0;Tf=$;c[Tf>>2]=c[q>>2];c[Tf+4>>2]=Qf;Tf=c[V>>2]|0;c[Ra>>2]=c[$>>2];c[Ra+4>>2]=c[$+4>>2];if(!(ia[Rf&31](Sf,l,k,Ra,Tf)|0))break q;eu(d,314662,Ib);break p}case 2:{Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+704>>2]|0;q=R;Qf=c[q+4>>2]|0;Tf=_;c[Tf>>2]=c[q>>2];c[Tf+4>>2]=Qf;Tf=c[V>>2]|0;c[Ra>>2]=c[_>>2];c[Ra+4>>2]=c[_+4>>2];if(!(ia[Rf&31](Sf,l,k,Ra,Tf)|0))break q;eu(d,314695,Jb);break p}case 4:{Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+712>>2]|0;q=R;Qf=c[q+4>>2]|0;Tf=B;c[Tf>>2]=c[q>>2];c[Tf+4>>2]=Qf;Tf=c[V>>2]|0;c[Ra>>2]=c[B>>2];c[Ra+4>>2]=c[B+4>>2];if(!(ia[Rf&31](Sf,l,k,Ra,Tf)|0))break q;eu(d,314726,Kb);break p}default:{s=220;break a}}while(0);h=1;break o}while(0);h=0;break o}case 1:{c[V>>2]=0;c[C>>2]=0;c[D>>2]=0;r:do if((gu(d,R,314650)|0)!=1){do if(!(k&16)){h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,V)|0;if(!h){c[Lb>>2]=314756;eu(d,312904,Lb);break r}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,C)|0;if(!h){c[Mb>>2]=330301;eu(d,312904,Mb);break r}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,D)|0;if(!h){c[Ob>>2]=314764;eu(d,312904,Ob);break r}else{c[xa>>2]=(c[xa>>2]|0)+h;h=c[V>>2]|0;i=c[C>>2]|0;j=c[D>>2]|0;break}}else{h=0;i=0;j=0}while(0);Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+696>>2]|0;q=R;Qf=c[q+4>>2]|0;Rf=E;c[Rf>>2]=c[q>>2];c[Rf+4>>2]=Qf;c[Ra>>2]=c[E>>2];c[Ra+4>>2]=c[E+4>>2];if(!(ka[Sf&31](Tf,l,k,Ra,h,i,j)|0)){h=1;break o}else{eu(d,314769,Pb);break}}while(0);h=0;break o}case 3:{c[Ra>>2]=0;h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,Ra)|0;do if(h){c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(!(ha[c[(c[Tf>>2]|0)+708>>2]&127](Tf,l,k,c[Ra>>2]|0)|0)){h=1;break o}else{eu(d,314798,Rb);break}}else{c[Qb>>2]=314386;eu(d,312904,Qb)}while(0);h=0;break o}default:{h=1;break o}}}while(0);l=l+1|0;if(!h)break m}while(l>>>0<(c[ba>>2]|0)>>>0);break}case 5:{Tf=c[W>>2]|0;h=_l(Tf+h|0,Tf+m|0,ba)|0;if(!h){s=244;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+716>>2]&511](Tf,c[ba>>2]|0)|0){s=246;break m}if(!(c[ba>>2]|0))break n;i=0;do{c[R>>2]=0;c[Oa>>2]=0;do if((gu(d,R,314876)|0)==1)h=0;else{h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,S)|0;if(!h){c[Ub>>2]=314889;eu(d,312904,Ub);h=0;break}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,T)|0;if(!h){c[Vb>>2]=314907;eu(d,312904,Vb);h=0;break}c[xa>>2]=(c[xa>>2]|0)+h;Rf=c[Y>>2]|0;Qf=c[(c[Rf>>2]|0)+720>>2]|0;q=R;Tf=c[q+4>>2]|0;Sf=F;c[Sf>>2]=c[q>>2];c[Sf+4>>2]=Tf;Sf=c[S>>2]|0;Tf=c[T>>2]|0;c[Ra>>2]=c[F>>2];c[Ra+4>>2]=c[F+4>>2];if(!(ia[Qf&31](Rf,i,Ra,Sf,Tf)|0)){h=1;break}eu(d,314921,Wb);h=0}while(0);i=i+1|0;if(!h)break m}while(i>>>0<(c[ba>>2]|0)>>>0);break}case 6:{Tf=c[W>>2]|0;h=_l(Tf+h|0,Tf+m|0,ba)|0;if(!h){s=259;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+724>>2]&511](Tf,c[ba>>2]|0)|0){s=261;break m}Tf=c[ba>>2]|0;c[ba>>2]=Tf+-1;if(!Tf)break n;do{h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,Ra)|0;if(!h){s=265;break m}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,R)|0;if(!h){s=267;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+728>>2]&127](Tf,c[Ra>>2]|0,c[R>>2]|0)|0){s=269;break m}Tf=c[ba>>2]|0;c[ba>>2]=Tf+-1}while((Tf|0)!=0);break}case 7:{Tf=c[W>>2]|0;h=_l(Tf+h|0,Tf+m|0,ba)|0;if(!h){s=273;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+732>>2]&511](Tf,c[ba>>2]|0)|0){s=275;break m}Tf=c[ba>>2]|0;c[ba>>2]=Tf+-1;if(!Tf)break n;do{c[T>>2]=0;c[Na>>2]=0;if((gu(d,T,315063)|0)==1){s=301;break m}h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,R)|0;if(!h){s=282;break m}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,S)|0;if(!h){s=284;break m}c[xa>>2]=(c[xa>>2]|0)+h;Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+736>>2]|0;Qf=T;h=c[Qf+4>>2]|0;Tf=G;c[Tf>>2]=c[Qf>>2];c[Tf+4>>2]=h;Tf=c[R>>2]|0;h=c[S>>2]|0;c[Ra>>2]=c[G>>2];c[Ra+4>>2]=c[G+4>>2];if(ha[Rf&127](Sf,Ra,Tf,h)|0){s=286;break m}i=h+-1|0;c[S>>2]=i;if(h|0){while(1){h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,Ra)|0;if(!h){s=290;break m}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,V)|0;if(!h){s=292;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+740>>2]&127](Tf,c[Ra>>2]|0,c[V>>2]|0)|0){s=294;break m}h=i+-1|0;if(!i)break;else i=h}c[S>>2]=h}Tf=c[ba>>2]|0;c[ba>>2]=Tf+-1}while((Tf|0)!=0);break}default:c[xa>>2]=m}while(0);if((c[xa>>2]|0)!=(m|0)){s=299;break}c[d>>2]=f;if(m>>>0>=f>>>0)break l}switch(s|0){case 189:{c[yb>>2]=330362;eu(d,312904,yb);s=300;break}case 191:{c[zb>>2]=313252;eu(d,312904,zb);s=300;break}case 193:{eu(d,313268,Ab);s=300;break}case 196:{s=0;c[Bb>>2]=314566;eu(d,312904,Bb);break}case 198:{s=0;eu(d,314576,Cb);break}case 244:{s=0;c[Sb>>2]=314830;eu(d,312904,Sb);break}case 246:{s=0;eu(d,314841,Tb);break}case 259:{s=0;c[Xb>>2]=314830;eu(d,312904,Xb);break}case 261:{s=0;eu(d,314951,Yb);break}case 265:{c[Zb>>2]=314987;eu(d,312904,Zb);s=270;break}case 267:{c[$b>>2]=313526;eu(d,312904,$b);s=270;break}case 269:{eu(d,314996,ac);s=270;break}case 273:{s=0;c[bc>>2]=315027;eu(d,312904,bc);break}case 275:{s=0;eu(d,315033,cc);break}case 282:{c[dc>>2]=315075;eu(d,312904,dc);s=301;break}case 284:{c[ec>>2]=315081;eu(d,312904,ec);s=301;break}case 286:{eu(d,315093,fc);s=301;break}case 290:{c[S>>2]=i;c[gc>>2]=315123;eu(d,312904,gc);s=295;break}case 292:{c[S>>2]=i;c[ic>>2]=314386;eu(d,312904,ic);s=295;break}case 294:{c[S>>2]=i;eu(d,315128,jc);s=295;break}case 299:{s=0;c[kc>>2]=m;eu(d,313951,kc);break}}if((s|0)==270)s=0;else if((s|0)==295)s=301;else if((s|0)==300){s=0;f=1;break k}if((s|0)==301)s=0;c[d>>2]=f;f=1;break k}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+744>>2]&127](Tf)|0)){f=0;break}eu(d,315158,lc);f=1}while(0)}else{eu(d,314493,ub);f=1}if((f|0)==1)f=1;else s=309}while(0);if((s|0)==309){Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+32>>2]&127](Tf)|0))f=0;else{eu(d,315192,mc);f=1}}a[x>>0]=r}while(0);s=(a[(c[za>>2]|0)+18>>0]|0)==0;e=s?e:((e|0)==1|(f|0)==1)&1;g=g&(s^1);s=763;break}case 1:{Tf=c[Y>>2]|0;s:do if(!(fa[c[(c[Tf>>2]|0)+36>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[oc>>2]=315258;eu(d,312904,oc);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[ua>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[pc>>2]=315258;c[pc+4>>2]=f;c[pc+8>>2]=h;eu(d,313443,pc);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+40>>2]&511](Tf,f)|0){eu(d,315269,rc);f=1;break}t:do if(c[ua>>2]|0){n=0;u:while(1){c[Ra>>2]=0;f=c[W>>2]|0;f=$l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=325;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;if((f|0)!=-32){s=327;break}f=c[W>>2]|0;f=_l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=329;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;m=c[Ra>>2]|0;h=c[d>>2]|0;i=h-f|0;if(m>>>0>i>>>0){s=331;break}i=c[Aa>>2]|0;j=(c[y>>2]|0)-i>>2;if(m>>>0<=j>>>0){if(m>>>0<j>>>0)c[y>>2]=i+(m<<2);if(!m)l=1;else s=337}else{hu(Aa,m-j|0);f=c[xa>>2]|0;s=337}if((s|0)==337){s=0;h=f;i=0;do{c[Ra>>2]=0;f=c[W>>2]|0;f=$l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=339;break u}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;switch(f|0){case -4:case -3:case -2:case -1:break;case -5:{if(!(a[(c[za>>2]|0)+4>>0]|0)){f=-5;s=345;break u}break}case -24:{if(!(a[c[za>>2]>>0]|0)){f=-24;s=345;break u}break}case -17:{if(!(a[(c[za>>2]|0)+9>>0]|0)){f=-17;s=345;break u}break}default:{s=344;break u}}c[(c[Aa>>2]|0)+(i<<2)>>2]=f;i=i+1|0}while(i>>>0<m>>>0);f=h;h=c[d>>2]|0;l=0}Tf=c[W>>2]|0;f=_l(Tf+f|0,Tf+h|0,Ra)|0;if(!f){s=350;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;k=c[Ra>>2]|0;h=(c[d>>2]|0)-f|0;if(k>>>0>h>>>0){s=352;break}if(k>>>0>=2?(a[(c[za>>2]|0)+6>>0]|0)==0:0){s=355;break}h=c[Ba>>2]|0;i=(c[A>>2]|0)-h>>2;if(k>>>0<=i>>>0){if(k>>>0<i>>>0)c[A>>2]=h+(k<<2);if(!k)h=0;else s=361}else{hu(Ba,k-i|0);f=c[xa>>2]|0;s=361}v:do if((s|0)==361){s=0;i=f;j=0;while(1){c[Ra>>2]=0;f=c[W>>2]|0;f=$l(f+i|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=363;break u}i=(c[xa>>2]|0)+f|0;c[xa>>2]=i;f=c[Ra>>2]|0;switch(f|0){case -4:case -3:case -2:case -1:break;case -5:{if(!(a[(c[za>>2]|0)+4>>0]|0)){f=-5;s=369;break u}break}case -24:{if(!(a[c[za>>2]>>0]|0)){f=-24;s=369;break u}break}case -17:{if(!(a[(c[za>>2]|0)+9>>0]|0)){f=-17;s=369;break u}break}default:{s=368;break u}}h=c[Ba>>2]|0;c[h+(j<<2)>>2]=f;j=j+1|0;if(j>>>0>=k>>>0)break v}}while(0);if(l)f=0;else f=c[Aa>>2]|0;Tf=c[Y>>2]|0;if(ja[c[(c[Tf>>2]|0)+44>>2]&31](Tf,n,m,f,k,h)|0){s=375;break}n=n+1|0;if(n>>>0>=(c[ua>>2]|0)>>>0)break t}switch(s|0){case 325:{c[sc>>2]=315297;eu(d,314399,sc);f=1;break s}case 327:{c[tc>>2]=(f|0)<0?315307:354708;c[tc+4>>2]=(f|0)>-1?f:0-f|0;eu(d,315309,tc);f=1;break s}case 329:{c[uc>>2]=315342;eu(d,312904,uc);f=1;break s}case 331:{c[vc>>2]=315342;c[vc+4>>2]=m;c[vc+8>>2]=i;eu(d,313443,vc);f=1;break s}case 339:{c[wc>>2]=315363;eu(d,314399,wc);f=1;break s}case 344:{if((f|0)<0)s=345;else{c[yc>>2]=354708;c[yc+4>>2]=f;eu(d,315383,yc);f=1;break s}break}case 350:{c[Ac>>2]=315421;eu(d,312904,Ac);f=1;break s}case 352:{c[Bc>>2]=315421;c[Bc+4>>2]=k;c[Bc+8>>2]=h;eu(d,313443,Bc);f=1;break s}case 355:{eu(d,315443,Cc);f=1;break s}case 363:{c[Dc>>2]=315471;eu(d,314399,Dc);f=1;break s}case 368:{if((f|0)<0)s=369;else{c[Fc>>2]=354708;c[Fc+4>>2]=f;eu(d,315492,Fc);f=1;break s}break}case 375:{eu(d,315531,Hc);f=1;break s}}if((s|0)==345){c[xc>>2]=315307;c[xc+4>>2]=0-f;eu(d,315383,xc);f=1;break s}else if((s|0)==369){c[Ec>>2]=315307;c[Ec+4>>2]=0-f;eu(d,315492,Ec);f=1;break s}}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+48>>2]&127](Tf)|0))f=0;else{eu(d,315554,Ic);f=1}}else{eu(d,315225,nc);f=1}while(0);e=f|(e|0)==1;s=763;break}case 2:{Tf=c[Y>>2]|0;w:do if(!(fa[c[(c[Tf>>2]|0)+52>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Kc>>2]=315620;eu(d,312904,Kc);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[ra>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[Lc>>2]=315620;c[Lc+4>>2]=f;c[Lc+8>>2]=h;eu(d,313443,Lc);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+56>>2]&511](Tf,f)|0){eu(d,315633,Mc);f=1;break}x:do if(c[ra>>2]|0){l=0;y:while(1){c[ya>>2]=0;c[Ia>>2]=0;if((gu(d,ya,315663)|0)==1){s=390;break}c[ba>>2]=0;c[Pa>>2]=0;if((gu(d,ba,315682)|0)==1)break;f=c[xa>>2]|0;j=f+1|0;h=c[d>>2]|0;if(j>>>0>h>>>0){s=393;break}i=c[W>>2]|0;Tf=a[i+f>>0]|0;c[xa>>2]=j;switch(Tf<<24>>24){case 0:{f=_l(i+j|0,i+h|0,Ra)|0;if(!f){s=396;break y}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;if(f>>>0>=(c[ua>>2]|0)>>>0){s=398;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;i=ya;h=c[i>>2]|0;i=c[i+4>>2]|0;k=R;c[k>>2]=h;c[k+4>>2]=i;k=ba;j=c[k>>2]|0;k=c[k+4>>2]|0;Rf=S;c[Rf>>2]=j;c[Rf+4>>2]=k;c[Sa>>2]=c[R>>2];c[Sa+4>>2]=c[R+4>>2];c[Ra>>2]=c[S>>2];c[Ra+4>>2]=c[S+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=400;break y}Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+64>>2]|0;Tf=T;c[Tf>>2]=h;c[Tf+4>>2]=i;Tf=V;c[Tf>>2]=j;c[Tf+4>>2]=k;Tf=c[Qa>>2]|0;c[Sa>>2]=c[T>>2];c[Sa+4>>2]=c[T+4>>2];c[Ra>>2]=c[V>>2];c[Ra+4>>2]=c[V+4>>2];if(ja[Rf&31](Sf,l,Sa,Ra,Tf,f)|0){s=402;break y}c[Qa>>2]=(c[Qa>>2]|0)+1;break}case 1:{c[_>>2]=0;c[_+4>>2]=0;c[_+8>>2]=0;c[_+12>>2]=0;b[_+16>>1]=0;if((iu(d,$,_)|0)==1){s=409;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;h=ya;f=c[h>>2]|0;h=c[h+4>>2]|0;j=B;c[j>>2]=f;c[j+4>>2]=h;j=ba;i=c[j>>2]|0;j=c[j+4>>2]|0;Rf=C;c[Rf>>2]=i;c[Rf+4>>2]=j;c[Sa>>2]=c[B>>2];c[Sa+4>>2]=c[B+4>>2];c[Ra>>2]=c[C>>2];c[Ra+4>>2]=c[C+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=406;break y}Rf=c[Y>>2]|0;Qf=c[(c[Rf>>2]|0)+68>>2]|0;Sf=D;c[Sf>>2]=f;c[Sf+4>>2]=h;Sf=E;c[Sf>>2]=i;c[Sf+4>>2]=j;Sf=c[va>>2]|0;Tf=c[$>>2]|0;c[Sa>>2]=c[D>>2];c[Sa+4>>2]=c[D+4>>2];c[Ra>>2]=c[E>>2];c[Ra+4>>2]=c[E+4>>2];if(ka[Qf&31](Rf,l,Sa,Ra,Sf,Tf,_)|0){s=408;break y}c[va>>2]=(c[va>>2]|0)+1;break}case 2:{c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;b[$+16>>1]=0;if((ju(d,$)|0)==1){s=416;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;h=ya;f=c[h>>2]|0;h=c[h+4>>2]|0;j=F;c[j>>2]=f;c[j+4>>2]=h;j=ba;i=c[j>>2]|0;j=c[j+4>>2]|0;Rf=G;c[Rf>>2]=i;c[Rf+4>>2]=j;c[Sa>>2]=c[F>>2];c[Sa+4>>2]=c[F+4>>2];c[Ra>>2]=c[G>>2];c[Ra+4>>2]=c[G+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=413;break y}Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+72>>2]|0;Tf=H;c[Tf>>2]=f;c[Tf+4>>2]=h;Tf=I;c[Tf>>2]=i;c[Tf+4>>2]=j;Tf=c[ta>>2]|0;c[Sa>>2]=c[H>>2];c[Sa+4>>2]=c[H+4>>2];c[Ra>>2]=c[I>>2];c[Ra+4>>2]=c[I+4>>2];if(ja[Rf&31](Sf,l,Sa,Ra,Tf,$)|0){s=415;break y}c[ta>>2]=(c[ta>>2]|0)+1;break}case 3:{if((ku(d,$,_)|0)==1){s=423;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;h=ya;f=c[h>>2]|0;h=c[h+4>>2]|0;j=J;c[j>>2]=f;c[j+4>>2]=h;j=ba;i=c[j>>2]|0;j=c[j+4>>2]|0;Rf=K;c[Rf>>2]=i;c[Rf+4>>2]=j;c[Sa>>2]=c[J>>2];c[Sa+4>>2]=c[J+4>>2];c[Ra>>2]=c[K>>2];c[Ra+4>>2]=c[K+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=420;break y}Qf=c[Y>>2]|0;r=c[(c[Qf>>2]|0)+76>>2]|0;Rf=L;c[Rf>>2]=f;c[Rf+4>>2]=h;Rf=M;c[Rf>>2]=i;c[Rf+4>>2]=j;Rf=c[pa>>2]|0;Sf=c[$>>2]|0;Tf=(a[_>>0]|0)!=0;c[Sa>>2]=c[L>>2];c[Sa+4>>2]=c[L+4>>2];c[Ra>>2]=c[M>>2];c[Ra+4>>2]=c[M+4>>2];if(ka[r&31](Qf,l,Sa,Ra,Rf,Sf,Tf)|0){s=422;break y}c[pa>>2]=(c[pa>>2]|0)+1;break}case 4:{if(!(a[c[za>>2]>>0]|0)){s=426;break y}if((lu(d,$)|0)==1){s=432;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;h=ya;f=c[h>>2]|0;h=c[h+4>>2]|0;j=N;c[j>>2]=f;c[j+4>>2]=h;j=ba;i=c[j>>2]|0;j=c[j+4>>2]|0;Rf=O;c[Rf>>2]=i;c[Rf+4>>2]=j;c[Sa>>2]=c[N>>2];c[Sa+4>>2]=c[N+4>>2];c[Ra>>2]=c[O>>2];c[Ra+4>>2]=c[O+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=429;break y}Rf=c[Y>>2]|0;Qf=c[(c[Rf>>2]|0)+80>>2]|0;Sf=P;c[Sf>>2]=f;c[Sf+4>>2]=h;Sf=Q;c[Sf>>2]=i;c[Sf+4>>2]=j;Sf=c[da>>2]|0;Tf=c[$>>2]|0;c[Sa>>2]=c[P>>2];c[Sa+4>>2]=c[P+4>>2];c[Ra>>2]=c[Q>>2];c[Ra+4>>2]=c[Q+4>>2];if(ja[Qf&31](Rf,l,Sa,Ra,Sf,Tf)|0){s=431;break y}c[da>>2]=(c[da>>2]|0)+1;break}default:{}}l=l+1|0;if(l>>>0>=(c[ra>>2]|0)>>>0)break x}switch(s|0){case 390:{f=1;break w}case 393:{s=0;c[Nc>>2]=315712;c[Nc+4>>2]=315700;eu(d,312701,Nc);break}case 396:{s=0;c[Pc>>2]=315720;eu(d,312904,Pc);break}case 398:{s=0;eu(d,315743,Qc);break}case 400:{s=0;eu(d,315774,Rc);break}case 402:{s=0;eu(d,315799,Sc);break}case 406:{eu(d,315774,Tc);s=409;break}case 408:{eu(d,315828,Uc);s=409;break}case 413:{eu(d,315774,Vc);s=416;break}case 415:{eu(d,315858,Wc);s=416;break}case 420:{eu(d,315774,Yc);s=423;break}case 422:{eu(d,315889,Zc);s=423;break}case 426:{s=0;eu(d,315920,_c);break}case 429:{eu(d,315774,$c);s=432;break}case 431:{eu(d,315970,ad);s=432;break}}f=1;break w}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+84>>2]&127](Tf)|0))f=0;else{eu(d,316e3,bd);f=1}}else{eu(d,315585,Jc);f=1}while(0);e=f|(e|0)==1;s=763;break}case 3:{Tf=c[Y>>2]|0;z:do if(!(fa[c[(c[Tf>>2]|0)+88>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[dd>>2]=316070;eu(d,312904,dd);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[oa>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[ed>>2]=316070;c[ed+4>>2]=f;c[ed+8>>2]=h;eu(d,313443,ed);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+92>>2]&511](Tf,f)|0){eu(d,316095,gd);f=1;break}A:do if(c[oa>>2]|0){i=0;while(1){h=(c[Qa>>2]|0)+i|0;f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=451;break}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;if(f>>>0>=(c[ua>>2]|0)>>>0){s=453;break}Tf=c[Y>>2]|0;i=i+1|0;if(ga[c[(c[Tf>>2]|0)+96>>2]&127](Tf,h,f)|0){s=455;break}if(i>>>0>=(c[oa>>2]|0)>>>0)break A}if((s|0)==451){c[hd>>2]=316127;eu(d,312904,hd);f=1;break z}else if((s|0)==453){c[id>>2]=f;eu(d,316152,id);f=1;break z}else if((s|0)==455){eu(d,316189,kd);f=1;break z}}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+100>>2]&127](Tf)|0))f=0;else{eu(d,316216,ld);f=1}}else{eu(d,316033,cd);f=1}while(0);e=f|(e|0)==1;s=763;break}case 4:{Tf=c[Y>>2]|0;B:do if(!(fa[c[(c[Tf>>2]|0)+104>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[nd>>2]=316285;eu(d,312904,nd);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[wa>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[od>>2]=316285;c[od+4>>2]=f;c[od+8>>2]=h;eu(d,313443,od);f=1;break}if(!(f>>>0<2?1:(a[(c[za>>2]|0)+9>>0]|0)!=0)){c[pd>>2]=f;eu(d,316297,pd);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+108>>2]&511](Tf,f)|0){eu(d,316329,qd);f=1;break}C:do if(c[wa>>2]|0){h=0;while(1){f=c[va>>2]|0;c[Sa>>2]=0;c[Sa+4>>2]=0;c[Sa+8>>2]=0;c[Sa+12>>2]=0;b[Sa+16>>1]=0;if((iu(d,Ra,Sa)|0)==1)break;Tf=c[Y>>2]|0;if(ha[c[(c[Tf>>2]|0)+112>>2]&127](Tf,f+h|0,c[Ra>>2]|0,Sa)|0){s=473;break}h=h+1|0;if(h>>>0>=(c[wa>>2]|0)>>>0)break C}if((s|0)==473)eu(d,316358,rd);f=1;break B}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+116>>2]&127](Tf)|0))f=0;else{eu(d,316382,td);f=1}}else{eu(d,316251,md);f=1}while(0);e=f|(e|0)==1;s=763;break}case 5:{Tf=c[Y>>2]|0;D:do if(!(fa[c[(c[Tf>>2]|0)+120>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[vd>>2]=316449;eu(d,312904,vd);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[sa>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[wd>>2]=316449;c[wd+4>>2]=f;c[wd+8>>2]=h;eu(d,313443,wd);f=1;break}if(f>>>0>=2){eu(d,316462,xd);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+124>>2]&511](Tf,f)|0){eu(d,316490,yd);f=1;break}E:do if(c[sa>>2]|0){h=0;while(1){f=c[ta>>2]|0;c[Ra>>2]=0;c[Ra+4>>2]=0;c[Ra+8>>2]=0;c[Ra+12>>2]=0;b[Ra+16>>1]=0;if((ju(d,Ra)|0)==1)break;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+128>>2]&127](Tf,f+h|0,Ra)|0){s=493;break}h=h+1|0;if(h>>>0>=(c[sa>>2]|0)>>>0)break E}if((s|0)==493)eu(d,316520,zd);f=1;break D}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+132>>2]&127](Tf)|0))f=0;else{eu(d,316545,Ad);f=1}}else{eu(d,316414,ud);f=1}while(0);e=f|(e|0)==1;s=763;break}case 6:{Tf=c[Y>>2]|0;F:do if(!(fa[c[(c[Tf>>2]|0)+136>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Cd>>2]=316613;eu(d,312904,Cd);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[qa>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[Dd>>2]=316613;c[Dd+4>>2]=f;c[Dd+8>>2]=h;eu(d,313443,Dd);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+140>>2]&511](Tf,f)|0){eu(d,316626,Ed);f=1;break}G:do if(c[qa>>2]|0){h=0;while(1){f=(c[pa>>2]|0)+h|0;if((ku(d,Ra,Sa)|0)==1)break;Tf=c[Y>>2]|0;if(ha[c[(c[Tf>>2]|0)+144>>2]&127](Tf,f,c[Ra>>2]|0,(a[Sa>>0]|0)!=0)|0){s=511;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+148>>2]&511](Tf,f)|0){s=513;break}if((mu(d,f,0)|0)==1)break;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+152>>2]&511](Tf,f)|0){s=516;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+156>>2]&511](Tf,f)|0){s=518;break}h=h+1|0;if(h>>>0>=(c[qa>>2]|0)>>>0)break G}if((s|0)==511)eu(d,316656,Fd);else if((s|0)==513)eu(d,316684,Gd);else if((s|0)==516)eu(d,316720,Hd);else if((s|0)==518)eu(d,316754,Id);f=1;break F}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+160>>2]&127](Tf)|0))f=0;else{eu(d,316780,Jd);f=1}}else{eu(d,316578,Bd);f=1}while(0);e=f|(e|0)==1;s=763;break}case 7:{Tf=c[Y>>2]|0;H:do if(!(fa[c[(c[Tf>>2]|0)+164>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Ld>>2]=316848;eu(d,312904,Ld);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[ma>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[Md>>2]=316848;c[Md+4>>2]=f;c[Md+8>>2]=h;eu(d,313443,Md);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+168>>2]&511](Tf,f)|0){eu(d,316861,Od);f=1;break}I:do if(c[ma>>2]|0){l=0;J:while(1){c[Sa>>2]=0;c[Ja>>2]=0;if((gu(d,Sa,316891)|0)==1)break;f=c[xa>>2]|0;j=f+1|0;h=c[d>>2]|0;if(j>>>0>h>>>0){s=536;break}i=c[W>>2]|0;k=a[i+f>>0]|0;c[xa>>2]=j;if((k&255)>=5){s=538;break}f=_l(i+j|0,i+h|0,Ra)|0;if(!f){s=540;break}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;switch(k<<24>>24){case 0:{if(f>>>0>=((c[oa>>2]|0)+(c[Qa>>2]|0)|0)>>>0){s=543;break J}break}case 1:{if(f>>>0>=((c[wa>>2]|0)+(c[va>>2]|0)|0)>>>0){s=545;break J}break}case 2:{if(f>>>0>=((c[sa>>2]|0)+(c[ta>>2]|0)|0)>>>0){s=547;break J}break}case 3:{if(f>>>0>=((c[qa>>2]|0)+(c[pa>>2]|0)|0)>>>0){s=549;break J}break}case 4:{if(!(a[c[za>>2]>>0]|0)){s=551;break J}if(f>>>0>=((c[la>>2]|0)+(c[da>>2]|0)|0)>>>0){s=553;break J}break}default:{}}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+172>>2]|0;r=Sa;Qf=c[r+4>>2]|0;Rf=ya;c[Rf>>2]=c[r>>2];c[Rf+4>>2]=Qf;c[Ra>>2]=c[ya>>2];c[Ra+4>>2]=c[ya+4>>2];if(ia[Sf&31](Tf,l,k&255,f,Ra)|0){s=555;break}l=l+1|0;if(l>>>0>=(c[ma>>2]|0)>>>0)break I}switch(s|0){case 536:{c[Pd>>2]=315712;c[Pd+4>>2]=316908;eu(d,312701,Pd);break}case 538:{c[Qd>>2]=k&255;eu(d,316920,Qd);break}case 540:{c[Rd>>2]=316953;eu(d,312904,Rd);break}case 543:{c[Sd>>2]=f;eu(d,316971,Sd);break}case 545:{c[Td>>2]=f;eu(d,317001,Td);break}case 547:{c[Vd>>2]=f;eu(d,317032,Vd);break}case 549:{c[Wd>>2]=f;eu(d,317064,Wd);break}case 551:{eu(d,317096,Xd);break}case 553:{c[Yd>>2]=f;eu(d,317146,Yd);break}case 555:{eu(d,317177,Zd);break}}f=1;break H}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+176>>2]&127](Tf)|0))f=0;else{eu(d,317202,_d);f=1}}else{eu(d,316813,Kd);f=1}while(0);e=f|(e|0)==1;s=763;break}case 8:{Tf=c[Y>>2]|0;do if(!(fa[c[(c[Tf>>2]|0)+180>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[ae>>2]=317269;eu(d,312904,ae);f=1;break}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;if(f>>>0>=((c[oa>>2]|0)+(c[Qa>>2]|0)|0)>>>0){c[be>>2]=f;eu(d,317290,be);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+184>>2]&511](Tf,f)|0){eu(d,317323,ce);f=1;break}Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+188>>2]&127](Tf)|0))f=0;else{eu(d,317355,de);f=1}}else{eu(d,317235,$d);f=1}while(0);e=f|(e|0)==1;s=763;break}case 9:{Tf=c[Y>>2]|0;K:do if(!(fa[c[(c[Tf>>2]|0)+520>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[ge>>2]=317420;eu(d,312904,ge);f=1;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;l=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(l>>>0>f>>>0){c[he>>2]=317420;c[he+4>>2]=l;c[he+8>>2]=f;eu(d,313443,he);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+524>>2]&511](Tf,l)|0){eu(d,317439,ie);f=1;break}L:do if(l|0){if((c[wa>>2]|0)==(0-(c[va>>2]|0)|0)){eu(d,317474,je);f=1;break K}k=0;M:while(1){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;if(!f){s=585;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Sa>>2]|0;if(f>>>0>=3){s=587;break}switch((f&255)<<24>>24){case 2:{f=c[W>>2]|0;f=_l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=591;break M}c[xa>>2]=(c[xa>>2]|0)+f;j=0;f=-16;h=c[Ra>>2]|0;break}case 1:{c[Ra>>2]=0;f=c[W>>2]|0;f=$l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=593;break M}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;if((f+17|0)>>>0<2){j=1;h=0}else{s=595;break M}break}default:{j=0;f=-16;h=0}}Tf=c[Y>>2]|0;if(ia[c[(c[Tf>>2]|0)+528>>2]&31](Tf,k,h,j,f)|0){s=597;break}if(!j){Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+532>>2]&511](Tf,k)|0){s=600;break}if((mu(d,k,1)|0)==1)break;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+536>>2]&511](Tf,k)|0){s=603;break}}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=605;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;i=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(i>>>0>f>>>0){s=607;break}Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+540>>2]&127](Tf,k,i)|0){s=609;break}N:do if(i|0){if(!j){h=0;while(1){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=629;break M}c[xa>>2]=(c[xa>>2]|0)+f;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+548>>2]&127](Tf,k,c[Ra>>2]|0)|0){s=631;break M}h=h+1|0;if(h>>>0>=i>>>0)break N}}h=0;while(1){if((nu(d,ya,317812)|0)==1){s=628;break M}switch(c[ya>>2]|0){case 208:{Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+544>>2]&511](Tf,k)|0){s=625;break M}break}case 210:{f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=623;break M}c[xa>>2]=(c[xa>>2]|0)+f;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+548>>2]&127](Tf,k,c[Ra>>2]|0)|0){s=624;break M}break}default:eu(d,317850,we)}if((nu(d,ya,317907)|0)==1){s=628;break M}if((c[ya>>2]|0)!=11){s=626;break M}h=h+1|0;if(h>>>0>=i>>>0)break N}}while(0);Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+552>>2]&511](Tf,k)|0){s=634;break}k=k+1|0;if(k>>>0>=l>>>0)break L}switch(s|0){case 585:{s=0;c[ke>>2]=317509;eu(d,312904,ke);break}case 587:{s=0;eu(d,317528,le);break}case 591:{s=0;c[me>>2]=317555;eu(d,312904,me);break}case 593:{s=0;c[ne>>2]=317580;eu(d,314399,ne);break}case 595:{s=0;eu(d,317596,oe);break}case 597:{s=0;eu(d,317640,pe);break}case 600:{s=0;eu(d,317673,qe);break}case 603:{s=0;eu(d,317714,re);break}case 605:{s=0;c[te>>2]=317753;eu(d,312904,te);break}case 607:{s=0;c[ue>>2]=317753;c[ue+4>>2]=i;c[ue+8>>2]=f;eu(d,313443,ue);break}case 609:{s=0;eu(d,317769,ve);break}case 623:{c[xe>>2]=317829;eu(d,312904,xe);s=628;break}case 624:{eu(d,317914,ye);s=628;break}case 625:{eu(d,317960,ze);s=628;break}case 626:{eu(d,318006,Ae);s=628;break}case 629:{s=0;c[Be>>2]=317829;eu(d,312904,Be);break}case 631:{s=0;eu(d,317914,Ce);break}case 634:{s=0;eu(d,318051,De);break}}f=1;break K}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+556>>2]&127](Tf)|0))f=0;else{eu(d,318082,Ee);f=1}}else{eu(d,317387,ee);f=1}while(0);e=f|(e|0)==1;s=763;break}case 10:{Tf=c[Y>>2]|0;O:do if(!(fa[c[(c[Tf>>2]|0)+192>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[He>>2]=318146;eu(d,312904,He);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[na>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[Ie>>2]=318146;c[Ie+4>>2]=f;c[Ie+8>>2]=h;eu(d,313443,Ie);f=1;break}if((c[oa>>2]|0)!=(f|0)){eu(d,312817,Je);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+196>>2]&511](Tf,f)|0){eu(d,318166,Ke);f=1;break}P:do if(c[na>>2]|0){o=0;Q:while(1){n=(c[Qa>>2]|0)+o|0;f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;if(!f){s=653;break}m=(c[xa>>2]|0)+f|0;c[xa>>2]=m;Tf=c[Sa>>2]|0;m=Tf+m|0;Sf=c[Y>>2]|0;if(ga[c[(c[Sf>>2]|0)+200>>2]&127](Sf,n,Tf)|0){s=655;break}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=657;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;l=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(l>>>0>f>>>0){s=659;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+204>>2]&511](Tf,l)|0){s=661;break}R:do if(l|0){i=0;j=0;k=0;while(1){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=666;break Q}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;h=c[Ra>>2]|0;i=iC(i|0,j|0,h|0,0)|0;j=z()|0;if(!(j>>>0<0|(j|0)==0&i>>>0<4294967295)){s=668;break Q}c[Ra>>2]=0;Tf=c[W>>2]|0;f=$l(Tf+f|0,Tf+(c[d>>2]|0)|0,Ra)|0;if(!f){s=670;break Q}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;switch(f|0){case -4:case -3:case -2:case -1:break;case -5:{if(!(a[(c[za>>2]|0)+4>>0]|0)){s=675;break Q}break}case -24:{if(!(a[c[za>>2]>>0]|0)){s=675;break Q}break}case -17:{if(!(a[(c[za>>2]|0)+9>>0]|0)){s=675;break Q}break}default:{s=675;break Q}}Tf=c[Y>>2]|0;if(ha[c[(c[Tf>>2]|0)+208>>2]&127](Tf,k,h,f)|0){s=677;break Q}k=k+1|0;if(k>>>0>=l>>>0)break R}}while(0);if((ou(d,m)|0)==1)break;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+500>>2]&511](Tf,n)|0){s=680;break}o=o+1|0;if(o>>>0>=(c[na>>2]|0)>>>0)break P}switch(s|0){case 653:{c[Le>>2]=318202;eu(d,312904,Le);break}case 655:{eu(d,318221,Me);break}case 657:{c[Ne>>2]=318255;eu(d,312904,Ne);break}case 659:{c[Oe>>2]=318255;c[Oe+4>>2]=l;c[Oe+8>>2]=f;eu(d,313443,Oe);break}case 661:{eu(d,318279,Pe);break}case 666:{c[Re>>2]=318312;eu(d,312904,Re);break}case 668:{eu(d,318329,Se);break}case 670:{c[Te>>2]=318362;eu(d,314399,Te);break}case 675:{eu(d,318373,Ue);break}case 677:{eu(d,318399,Ve);break}case 680:{eu(d,318427,We);break}}f=1;break O}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+504>>2]&127](Tf)|0))f=0;else{eu(d,318459,Xe);f=1}}else{eu(d,318113,Ge);f=1}while(0);e=f|(e|0)==1;s=763;break}case 11:{Tf=c[Y>>2]|0;S:do if(!(fa[c[(c[Tf>>2]|0)+560>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Ze>>2]=318523;eu(d,312904,Ze);f=1;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;k=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(k>>>0>f>>>0){c[$e>>2]=318523;c[$e+4>>2]=k;c[$e+8>>2]=f;eu(d,313443,$e);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+564>>2]&511](Tf,k)|0){eu(d,318542,af);f=1;break}f=(k|0)==0;if(!f?(c[sa>>2]|0)==(0-(c[ta>>2]|0)|0):0){eu(d,318577,bf);f=1;break}Tf=c[X>>2]|0;if(!((Tf|0)==-1|(Tf|0)==(k|0))){eu(d,318613,cf);f=1;break}T:do if(!f){j=0;while(1){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;if(!f){s=702;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Sa>>2]|0;if(f>>>0>=3){s=704;break}i=f&255;if(i<<24>>24==2){f=c[W>>2]|0;f=_l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=708;break}c[xa>>2]=(c[xa>>2]|0)+f;h=c[Ra>>2]|0}else h=0;Tf=c[Y>>2]|0;f=i<<24>>24==1;if(ha[c[(c[Tf>>2]|0)+568>>2]&127](Tf,j,h,f)|0){s=710;break}if(!f){Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+572>>2]&511](Tf,j)|0){s=713;break}if((mu(d,j,1)|0)==1)break;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+576>>2]&511](Tf,j)|0){s=716;break}}c[Ra>>2]=0;f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=718;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;i=f+h|0;if(i>>>0>(c[d>>2]|0)>>>0){s=720;break}Tf=(c[W>>2]|0)+h|0;c[xa>>2]=i;Sf=c[Y>>2]|0;if(ha[c[(c[Sf>>2]|0)+580>>2]&127](Sf,j,Tf,f)|0){s=723;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+584>>2]&511](Tf,j)|0){s=725;break}j=j+1|0;if(j>>>0>=k>>>0)break T}switch(s|0){case 702:{s=0;c[df>>2]=318674;eu(d,312904,df);break}case 704:{s=0;eu(d,318693,ef);break}case 708:{s=0;c[ff>>2]=318720;eu(d,312904,ff);break}case 710:{s=0;eu(d,318746,hf);break}case 713:{s=0;eu(d,318779,jf);break}case 716:{s=0;eu(d,318820,kf);break}case 718:{c[lf>>2]=318877;eu(d,312904,lf);s=721;break}case 720:{c[mf>>2]=318859;eu(d,318887,mf);s=721;break}case 723:{s=0;eu(d,318911,nf);break}case 725:{s=0;eu(d,318945,of);break}}f=1;break S}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+588>>2]&127](Tf)|0))f=0;else{eu(d,318976,pf);f=1}}else{eu(d,318490,Ye);f=1}while(0);e=f|(e|0)==1;s=763;break}case 13:{if(!(a[f>>0]|0)){s=732;break a}Tf=c[Y>>2]|0;U:do if(!(fa[c[(c[Tf>>2]|0)+748>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[sf>>2]=319041;eu(d,312904,sf);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[la>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[tf>>2]=319041;c[tf+4>>2]=f;c[tf+8>>2]=h;eu(d,313443,tf);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+752>>2]&511](Tf,f)|0){eu(d,319053,vf);f=1;break}V:do if(c[la>>2]|0){h=0;while(1){f=c[da>>2]|0;if((lu(d,Ra)|0)==1)break;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+756>>2]&127](Tf,f+h|0,c[Ra>>2]|0)|0){s=745;break}h=h+1|0;if(h>>>0>=(c[la>>2]|0)>>>0)break V}if((s|0)==745)eu(d,319082,wf);f=1;break U}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+760>>2]&127](Tf)|0))f=0;else{eu(d,319110,xf);f=1}}else{eu(d,319007,rf);f=1}while(0);e=f|(e|0)==1;s=763;break}case 12:{if(!(a[f+8>>0]|0)){s=752;break a}Tf=c[Y>>2]|0;do if(!(fa[c[(c[Tf>>2]|0)+592>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Af>>2]=319180;eu(d,312904,Af);f=1;break}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+596>>2]&511](Tf,f)|0){eu(d,319191,Bf);f=1;break}Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+600>>2]&127](Tf)|0)){c[X>>2]=f;f=0;break}else{eu(d,319219,Cf);f=1;break}}else{eu(d,319142,zf);f=1}while(0);e=f|(e|0)==1;s=763;break}default:if(g){s=771;break a}else s=765}while(0);if((s|0)==763){s=0;if((f|0)==1)if(g){s=771;break}else s=765}if((s|0)==765){s=0;c[xa>>2]=c[d>>2]}g=c[xa>>2]|0;f=c[d>>2]|0;if((g|0)!=(f|0)){s=767;break}if(!t)c[ca>>2]=u;c[d>>2]=v;if(g>>>0>=(c[Ea>>2]|0)>>>0){s=773;break}else w=w+1|0}switch(s|0){case 4:{c[Ta>>2]=312891;eu(d,312904,Ta);s=770;break}case 6:{c[Ua>>2]=312934;eu(d,312904,Ua);s=770;break}case 8:{c[jd>>2]=u;eu(d,312947,jd);s=771;break}case 10:{eu(d,312972,Ef);s=771;break}case 13:{Tf=cu(u)|0;c[Lf>>2]=Tf;eu(d,313011,Lf);s=771;break}case 15:{Tf=cu(u)|0;c[bb>>2]=Tf;eu(d,313035,bb);s=771;break}case 17:{eu(d,313079,nb);s=771;break}case 220:{U();break}case 732:{c[qf>>2]=13;eu(d,312947,qf);s=771;break}case 752:{c[yf>>2]=12;eu(d,312947,yf);s=771;break}case 767:{c[Df>>2]=f;eu(d,319255,Df);s=771;break}case 773:{aa=Pf;return e|0}}if((s|0)==770){Tf=1;aa=Pf;return Tf|0}else if((s|0)==771){c[d>>2]=v;Tf=1;aa=Pf;return Tf|0}return 0}function gu(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,l=0;l=aa;aa=aa+32|0;k=l+16|0;j=l+8|0;f=l;g=l+20|0;c[g>>2]=0;h=a+4|0;e=c[h>>2]|0;i=a+12|0;e=_l(e+(c[i>>2]|0)|0,e+(c[a>>2]|0)|0,g)|0;if(!e){c[f>>2]=324027;eu(a,312904,f);k=1;aa=l;return k|0}f=(c[i>>2]|0)+e|0;c[i>>2]=f;e=c[g>>2]|0;if((e+f|0)>>>0>(c[a>>2]|0)>>>0){c[j>>2]=d;eu(a,324041,j);k=1;aa=l;return k|0}j=(c[h>>2]|0)+f|0;c[b>>2]=j;c[b+4>>2]=e;c[i>>2]=(c[i>>2]|0)+e;if(Lz(j,e)|0){k=0;aa=l;return k|0}c[k>>2]=d;eu(a,324067,k);k=1;aa=l;return k|0}function hu(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;k=a+8|0;e=c[k>>2]|0;j=a+4|0;d=c[j>>2]|0;if(e-d>>2>>>0>=b>>>0){uC(d|0,0,b<<2|0)|0;c[j>>2]=d+(b<<2);return}i=c[a>>2]|0;g=d-i|0;f=g>>2;d=f+b|0;if(d>>>0>1073741823)HB();m=e-i|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{l=_A(e<<2)|0;h=l;break}else{h=0;l=0}while(0);d=l+(f<<2)|0;uC(d|0,0,b<<2|0)|0;if((g|0)>0)sC(h|0,i|0,g|0)|0;c[a>>2]=l;c[j>>2]=d+(b<<2);c[k>>2]=l+(e<<2);if(!i)return;$A(i);return}function iu(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,p=0,q=0,r=0;r=aa;aa=aa+64|0;q=r+48|0;o=r+40|0;l=r+32|0;i=r+24|0;h=r+16|0;g=r;j=r+60|0;m=r+56|0;p=r+52|0;c[j>>2]=0;k=b+4|0;f=c[k>>2]|0;n=b+12|0;f=$l(f+(c[n>>2]|0)|0,f+(c[b>>2]|0)|0,j)|0;if(!f){c[g>>2]=317580;eu(b,314399,g);e=1;aa=r;return e|0}f=(c[n>>2]|0)+f|0;c[n>>2]=f;g=c[j>>2]|0;c[d>>2]=g;if((g+17|0)>>>0>=2){eu(b,323851,r+8|0);e=1;aa=r;return e|0}c[p>>2]=0;d=c[k>>2]|0;f=_l(d+f|0,d+(c[b>>2]|0)|0,j)|0;do if(!f){c[h>>2]=323893;eu(b,312904,h);f=1}else{h=(c[n>>2]|0)+f|0;c[n>>2]=h;f=c[k>>2]|0;f=_l(f+h|0,f+(c[b>>2]|0)|0,m)|0;if(!f){c[i>>2]=323905;eu(b,312904,i);f=1;break}g=(c[n>>2]|0)+f|0;c[n>>2]=g;j=c[j>>2]|0;f=j&1;d=f&255;if(j&2|0){eu(b,323930,l);f=1;break}if(f){f=c[k>>2]|0;f=_l(f+g|0,f+(c[b>>2]|0)|0,p)|0;if(!f){c[o>>2]=323955;eu(b,312904,o);f=1;break}c[n>>2]=(c[n>>2]|0)+f;g=c[m>>2]|0;f=c[p>>2]|0;if(g>>>0>f>>>0){eu(b,323976,q);f=1;break}}else{g=c[m>>2]|0;f=0}a[e+16>>0]=d;q=e;c[q>>2]=g;c[q+4>>2]=0;e=e+8|0;c[e>>2]=f;c[e+4>>2]=0;f=0}while(0);e=f;aa=r;return e|0}function ju(b,d){b=b|0;d=d|0;var 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;q=aa;aa=aa+64|0;p=q+48|0;o=q+40|0;n=q+32|0;g=q+8|0;f=q;i=q+60|0;h=q+56|0;l=q+52|0;c[l>>2]=0;k=b+4|0;e=c[k>>2]|0;m=b+12|0;e=_l(e+(c[m>>2]|0)|0,e+(c[b>>2]|0)|0,i)|0;if(!e){c[f>>2]=323663;eu(b,312904,f);d=1;aa=q;return d|0}j=(c[m>>2]|0)+e|0;c[m>>2]=j;e=c[k>>2]|0;e=_l(e+j|0,e+(c[b>>2]|0)|0,h)|0;if(!e){c[g>>2]=323676;eu(b,312904,g);d=1;aa=q;return d|0}f=(c[m>>2]|0)+e|0;c[m>>2]=f;j=c[h>>2]|0;if(j>>>0>=65537){eu(b,323702,q+16|0);d=1;aa=q;return d|0}i=c[i>>2]|0;e=i&1;h=e&255;g=i>>>1&1;if((i&3|0)==2){eu(b,323730,q+24|0);d=1;aa=q;return d|0}if(e){e=c[k>>2]|0;e=_l(e+f|0,e+(c[b>>2]|0)|0,l)|0;if(!e){c[n>>2]=323765;eu(b,312904,n);d=1;aa=q;return d|0}c[m>>2]=(c[m>>2]|0)+e;e=c[l>>2]|0;if(e>>>0>=65537){eu(b,323787,o);d=1;aa=q;return d|0}if(j>>>0>e>>>0){eu(b,323811,p);d=1;aa=q;return d|0}}else e=0;a[d+16>>0]=h;a[d+17>>0]=g;p=d;c[p>>2]=j;c[p+4>>2]=0;d=d+8|0;c[d>>2]=e;c[d+4>>2]=0;d=0;aa=q;return d|0}function ku(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=aa;aa=aa+32|0;n=o+24|0;l=o+16|0;i=o+8|0;g=o;h=o+28|0;c[h>>2]=0;k=b+4|0;f=c[k>>2]|0;m=b+12|0;f=$l(f+(c[m>>2]|0)|0,f+(c[b>>2]|0)|0,h)|0;if(!f){c[g>>2]=323575;eu(b,314399,g);n=1;aa=o;return n|0}f=(c[m>>2]|0)+f|0;c[m>>2]=f;h=c[h>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{if(!(a[(c[b+76>>2]|0)+4>>0]|0))j=7;break}case -24:{if(!(a[c[b+76>>2]>>0]|0))j=7;break}case -17:{if(!(a[(c[b+76>>2]|0)+9>>0]|0))j=7;break}default:j=7}if((j|0)==7){c[i>>2]=h;eu(b,323587,i);n=1;aa=o;return n|0}g=f+1|0;if(g>>>0>(c[b>>2]|0)>>>0){c[l>>2]=315712;c[l+4>>2]=323612;eu(b,312701,l);n=1;aa=o;return n|0}f=a[(c[k>>2]|0)+f>>0]|0;c[m>>2]=g;if((f&255)<2){c[d>>2]=h;a[e>>0]=f<<24>>24!=0&1;n=0;aa=o;return n|0}else{eu(b,323630,n);n=1;aa=o;return n|0}return 0}function lu(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;k=aa;aa=aa+48|0;j=k+16|0;e=k;i=k+32|0;f=k+28|0;g=a+4|0;d=c[g>>2]|0;h=a+12|0;d=_l(d+(c[h>>2]|0)|0,d+(c[a>>2]|0)|0,f)|0;if(!d){c[e>>2]=323481;eu(a,312904,e);j=1;aa=k;return j|0}d=(c[h>>2]|0)+d|0;c[h>>2]=d;if(c[f>>2]|0){eu(a,323497,k+8|0);j=1;aa=k;return j|0}g=c[g>>2]|0;d=_l(g+d|0,g+(c[a>>2]|0)|0,i)|0;if(!d){c[j>>2]=323523;eu(a,312904,j);j=1;aa=k;return j|0}c[h>>2]=(c[h>>2]|0)+d;j=c[i>>2]|0;c[b>>2]=j;if(j>>>0<(c[a+88>>2]|0)>>>0){j=0;aa=k;return j|0}eu(a,323545,k+24|0);j=1;aa=k;return j|0}function mu(b,e,f){b=b|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,q=0,r=0,s=0,t=0,u=0,v=0;v=aa;aa=aa+160|0;q=v+112|0;u=v+104|0;t=v+96|0;k=v+88|0;j=v+80|0;p=v+72|0;h=v+64|0;m=v+48|0;n=v+32|0;l=v+16|0;i=v;r=v+144|0;o=v+128|0;if((nu(b,r,317907)|0)==1){u=1;aa=v;return u|0}s=c[r>>2]|0;if(!(Dm(s,c[b+76>>2]|0)|0)){pu(b,s,0);u=1;aa=v;return u|0}a:do switch(s|0){case 52:{c[q>>2]=0;g=c[b+4>>2]|0;h=b+12|0;g=$l(g+(c[h>>2]|0)|0,g+(c[b>>2]|0)|0,q)|0;if(!g){c[i>>2]=322989;eu(b,314399,i);u=1;aa=v;return u|0}c[h>>2]=(c[h>>2]|0)+g;p=c[b+36>>2]|0;if(!(ga[c[(c[p>>2]|0)+780>>2]&127](p,e,c[q>>2]|0)|0))break a;eu(b,323015,v+8|0);u=1;aa=v;return u|0}case 53:{g=q;c[g>>2]=0;c[g+4>>2]=0;g=c[b+4>>2]|0;h=b+12|0;g=am(g+(c[h>>2]|0)|0,g+(c[b>>2]|0)|0,q)|0;if(!g){c[l>>2]=323054;eu(b,320083,l);u=1;aa=v;return u|0}c[h>>2]=(c[h>>2]|0)+g;p=c[b+36>>2]|0;if(!(ha[c[(c[p>>2]|0)+784>>2]&127](p,e,c[q>>2]|0,c[q+4>>2]|0)|0))break a;eu(b,323080,v+24|0);u=1;aa=v;return u|0}case 54:{i=b+12|0;g=c[i>>2]|0;h=g+4|0;if(h>>>0>(c[b>>2]|0)>>>0){c[n>>2]=320191;c[n+4>>2]=323119;eu(b,312701,n);u=1;aa=v;return u|0}q=(c[b+4>>2]|0)+g|0;q=d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24;c[i>>2]=h;p=c[b+36>>2]|0;if(ga[c[(c[p>>2]|0)+764>>2]&127](p,e,q)|0){eu(b,323145,v+40|0);u=1;aa=v;return u|0}break}case 55:{i=b+12|0;g=c[i>>2]|0;h=g+8|0;if(h>>>0>(c[b>>2]|0)>>>0){c[m>>2]=320272;c[m+4>>2]=323184;eu(b,312701,m);u=1;aa=v;return u|0}q=(c[b+4>>2]|0)+g|0;p=q;p=d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24;q=q+4|0;q=d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24;c[i>>2]=h;o=c[b+36>>2]|0;if(ha[c[(c[o>>2]|0)+768>>2]&127](o,e,p,q)|0){eu(b,323210,v+56|0);u=1;aa=v;return u|0}break}case 213:{c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;k=b+12|0;g=c[k>>2]|0;j=g+16|0;if(j>>>0>(c[b>>2]|0)>>>0){c[h>>2]=330963;c[h+4>>2]=323249;eu(b,312701,h);u=1;aa=v;return u|0}i=o;g=(c[b+4>>2]|0)+g|0;h=i+16|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(h|0));c[k>>2]=j;n=c[b+36>>2]|0;m=c[(c[n>>2]|0)+772>>2]|0;c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];if(!(ga[m&127](n,e,q)|0))break a;eu(b,323276,p);u=1;aa=v;return u|0}case 25:{g=c[b+4>>2]|0;h=b+12|0;g=_l(g+(c[h>>2]|0)|0,g+(c[b>>2]|0)|0,q)|0;if(!g){c[j>>2]=323316;eu(b,312904,j);u=1;aa=v;return u|0}c[h>>2]=(c[h>>2]|0)+g;p=c[b+36>>2]|0;if(ga[c[(c[p>>2]|0)+776>>2]&127](p,e,c[q>>2]|0)|0){eu(b,323343,k);u=1;aa=v;return u|0}break}case 11:{u=0;aa=v;return u|0}default:{pu(b,s,323383);u=1;aa=v;return u|0}}while(0);b:do if(f){switch(s|0){case 25:case 52:break b;default:{}}eu(b,323409,t);u=1;aa=v;return u|0}while(0);if((nu(b,r,317907)|0)==1){u=1;aa=v;return u|0}if((c[r>>2]|0)==11){u=0;aa=v;return u|0}eu(b,323432,u);u=1;aa=v;return u|0}function nu(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=aa;aa=aa+16|0;n=o+8|0;g=o;l=o+12|0;m=b+12|0;h=c[m>>2]|0;k=h+1|0;i=c[b>>2]|0;if(k>>>0>i>>>0){c[g>>2]=315712;c[g+4>>2]=e;eu(b,312701,g);d=1;aa=o;return d|0}g=c[b+4>>2]|0;j=a[g+h>>0]|0;c[m>>2]=k;if((j+4&255)>=3){n=j&255;b=c[17248+(n<<2)>>2]|0;c[d>>2]=j<<24>>24==0|(b|0)!=0?b:0-n|0;d=0;aa=o;return d|0}g=_l(g+k|0,g+i|0,l)|0;if(!g){c[n>>2]=e;eu(b,312904,n);d=1;aa=o;return d|0}c[m>>2]=(c[m>>2]|0)+g;h=c[l>>2]|0;g=(h>>>0<255?h:255)|(j&255)<<8;if(!(g>>>0<65536?(f=c[17248+(g<<2)>>2]|0,(h|0)==0|(f|0)!=0):0))f=0-g|0;c[d>>2]=f;d=0;aa=o;return d|0}
+function HA(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;d=(b|0)<-2044;e=b+2044|0;b=d?((e|0)>-1022?e:-1022):b+1022|0;a=d?a*2.2250738585072014e-308:a}}else{a=a*8988465674311579538646525.0e283;e=(b|0)>2046;d=b+-2046|0;b=e?((d|0)<1023?d:1023):b+-1023|0;a=e?a*8988465674311579538646525.0e283:a}d=pC(b+1023|0,0,52)|0;e=z()|0;c[h>>2]=d;c[h+4>>2]=e;return +(a*+g[h>>3])}function IA(a,b){a=+a;b=+b;return +(+NA(a,b))}function JA(a,b){a=+a;b=+b;return +(+LA(a,b))}function KA(a,b){a=+a;b=b|0;return +(+HA(a,b))}function LA(a,b){a=+a;b=+b;var d=0,e=0,f=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;g[h>>3]=a;k=c[h>>2]|0;l=c[h+4>>2]|0;g[h>>3]=b;n=c[h>>2]|0;o=c[h+4>>2]|0;e=oC(k|0,l|0,52)|0;z()|0;e=e&2047;m=oC(n|0,o|0,52)|0;z()|0;m=m&2047;p=l&-2147483648;j=pC(n|0,o|0,1)|0;i=z()|0;a:do if(!((j|0)==0&(i|0)==0)?(f=MA(b)|0,d=(z()|0)&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=pC(k|0,l|0,1)|0;f=z()|0;if(!(f>>>0>i>>>0|(f|0)==(i|0)&d>>>0>j>>>0))return +((d|0)==(j|0)&(f|0)==(i|0)?a*0.0:a);if(!e){d=pC(k|0,l|0,12)|0;e=z()|0;if((e|0)>-1|(e|0)==-1&d>>>0>4294967295){f=e;e=0;do{e=e+-1|0;d=pC(d|0,f|0,1)|0;f=z()|0}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;k=pC(k|0,l|0,1-e|0)|0;j=z()|0}else j=l&1048575|1048576;if(!m){d=pC(n|0,o|0,12)|0;f=z()|0;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){i=0;do{i=i+-1|0;d=pC(d|0,f|0,1)|0;f=z()|0}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else i=0;n=pC(n|0,o|0,1-i|0)|0;l=z()|0;m=i}else l=o&1048575|1048576;d=jC(k|0,j|0,n|0,l|0)|0;f=z()|0;i=(f|0)>-1|(f|0)==-1&d>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(i){if((d|0)==0&(f|0)==0)break}else{d=k;f=j}k=pC(d|0,f|0,1)|0;j=z()|0;e=e+-1|0;d=jC(k|0,j|0,n|0,l|0)|0;f=z()|0;i=(f|0)>-1|(f|0)==-1&d>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(i){if((d|0)==0&(f|0)==0){b=a*0.0;break}}else{f=j;d=k}if(f>>>0<1048576|(f|0)==1048576&d>>>0<0)do{d=pC(d|0,f|0,1)|0;f=z()|0;e=e+-1|0}while(f>>>0<1048576|(f|0)==1048576&d>>>0<0);if((e|0)>0){o=iC(d|0,f|0,0,-1048576)|0;d=z()|0;e=pC(e|0,0,52)|0;d=d|(z()|0);e=o|e}else{e=oC(d|0,f|0,1-e|0)|0;d=z()|0}c[h>>2]=e;c[h+4>>2]=d|p;b=+g[h>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function MA(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;y(c[h+4>>2]|0);return b|0}function NA(a,b){a=+a;b=+b;var d=0,e=0;g[h>>3]=a;e=c[h>>2]|0;d=c[h+4>>2]|0;g[h>>3]=b;d=c[h+4>>2]&-2147483648|d&2147483647;c[h>>2]=e;c[h+4>>2]=d;return +(+g[h>>3])}function OA(a){a=a|0;return c[a+60>>2]|0}function PA(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;while(1){c=a[b>>0]|0;e=c<<24>>24;d=b+1|0;if(!(vA(e)|0))break;else b=d}switch(e|0){case 45:{b=1;f=5;break}case 43:{b=0;f=5;break}default:{g=0;d=b}}if((f|0)==5){e=a[d>>0]|0;c=e;e=e<<24>>24;g=b}if(!(Zz(e)|0))b=0;else{b=0;do{d=d+1|0;b=(b*10|0)+48-(c<<24>>24)|0;c=a[d>>0]|0}while((Zz(c<<24>>24)|0)!=0)}return ((g|0)==0?0-b|0:b)|0}function QA(a,b){a=a|0;b=b|0;return +(+RA(a,b,0))}function RA(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=aa;aa=aa+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;zA(h);e=+DA(h,d);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=(d|0)==0?a:a+d|0;aa=i;return +e}function SA(a,b){a=a|0;b=b|0;return +(+RA(a,b,1))}function TA(a){a=a|0;var b=0,d=0;b=aa;aa=aa+32|0;d=b;c[d>>2]=a;c[d+4>>2]=21523;c[d+8>>2]=b+16;a=(Oz(S(54,d|0)|0)|0)==0&1;aa=b;return a|0}function UA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+16|0;n=w;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=c[88551]|0;d=m>>>a;if(d&3|0){e=(d&1^1)+a|0;f=354244+(e<<1<<2)|0;b=f+8|0;a=c[b>>2]|0;g=a+8|0;d=c[g>>2]|0;if((d|0)==(f|0))c[88551]=m&~(1<<e);else{c[d+12>>2]=f;c[b>>2]=d}v=e<<3;c[a+4>>2]=v|3;v=a+v+4|0;c[v>>2]=c[v>>2]|1;v=g;aa=w;return v|0}l=c[88553]|0;if(k>>>0>l>>>0){if(d|0){i=2<<a;d=d<<a&(i|0-i);d=(d&0-d)+-1|0;i=d>>>12&16;d=d>>>i;a=d>>>5&8;d=d>>>a;g=d>>>2&4;d=d>>>g;b=d>>>1&2;d=d>>>b;e=d>>>1&1;e=(a|i|g|b|e)+(d>>>e)|0;d=354244+(e<<1<<2)|0;b=d+8|0;g=c[b>>2]|0;i=g+8|0;a=c[i>>2]|0;if((a|0)==(d|0)){a=m&~(1<<e);c[88551]=a}else{c[a+12>>2]=d;c[b>>2]=a;a=m}v=e<<3;h=v-k|0;c[g+4>>2]=k|3;f=g+k|0;c[f+4>>2]=h|1;c[g+v>>2]=h;if(l|0){e=c[88556]|0;b=l>>>3;d=354244+(b<<1<<2)|0;b=1<<b;if(!(a&b)){c[88551]=a|b;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=e;c[a+12>>2]=e;c[e+8>>2]=a;c[e+12>>2]=d}c[88553]=h;c[88556]=f;v=i;aa=w;return v|0}g=c[88552]|0;if(g){i=(g&0-g)+-1|0;f=i>>>12&16;i=i>>>f;e=i>>>5&8;i=i>>>e;h=i>>>2&4;i=i>>>h;d=i>>>1&2;i=i>>>d;j=i>>>1&1;j=c[354508+((e|f|h|d|j)+(i>>>j)<<2)>>2]|0;i=(c[j+4>>2]&-8)-k|0;d=j;while(1){a=c[d+16>>2]|0;if(!a){a=c[d+20>>2]|0;if(!a)break}d=(c[a+4>>2]&-8)-k|0;h=d>>>0<i>>>0;i=h?d:i;d=a;j=h?a:j}h=j+k|0;if(h>>>0>j>>>0){f=c[j+24>>2]|0;b=c[j+12>>2]|0;do if((b|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){d=0;break}}while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;d=b}else{d=c[j+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[j+28>>2]|0;a=354508+(b<<2)|0;if((j|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[88552]=g&~(1<<b);break}}else{v=f+16|0;c[((c[v>>2]|0)==(j|0)?v:f+20|0)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[j+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[j+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(i>>>0<16){v=i+k|0;c[j+4>>2]=v|3;v=j+v+4|0;c[v>>2]=c[v>>2]|1}else{c[j+4>>2]=k|3;c[h+4>>2]=i|1;c[h+i>>2]=i;if(l|0){e=c[88556]|0;b=l>>>3;d=354244+(b<<1<<2)|0;b=1<<b;if(!(b&m)){c[88551]=b|m;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=e;c[a+12>>2]=e;c[e+8>>2]=a;c[e+12>>2]=d}c[88553]=i;c[88556]=h}v=j+8|0;aa=w;return v|0}else m=k}else m=k}else m=k}else if(a>>>0<=4294967231){a=a+11|0;k=a&-8;e=c[88552]|0;if(e){d=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)j=31;else{m=(a+1048320|0)>>>16&8;r=a<<m;i=(r+520192|0)>>>16&4;r=r<<i;j=(r+245760|0)>>>16&2;j=14-(i|m|j)+(r<<j>>>15)|0;j=k>>>(j+7|0)&1|j<<1}else j=0;a=c[354508+(j<<2)>>2]|0;a:do if(!a){f=0;a=0;r=61}else{f=0;h=k<<((j|0)==31?0:25-(j>>>1)|0);i=a;a=0;while(1){g=(c[i+4>>2]&-8)-k|0;if(g>>>0<d>>>0)if(!g){d=0;f=i;a=i;r=65;break a}else{d=g;a=i}r=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;f=(r|0)==0|(r|0)==(i|0)?f:r;if(!i){r=61;break}else h=h<<1}}while(0);if((r|0)==61){if((f|0)==0&(a|0)==0){a=2<<j;a=(a|0-a)&e;if(!a){m=k;break}a=(a&0-a)+-1|0;i=a>>>12&16;a=a>>>i;h=a>>>5&8;a=a>>>h;j=a>>>2&4;a=a>>>j;m=a>>>1&2;a=a>>>m;f=a>>>1&1;f=c[354508+((h|i|j|m|f)+(a>>>f)<<2)>>2]|0;a=0}if(!f){i=d;g=a}else r=65}if((r|0)==65)while(1){m=(c[f+4>>2]&-8)-k|0;g=m>>>0<d>>>0;d=g?m:d;g=g?f:a;a=c[f+16>>2]|0;if(!a)a=c[f+20>>2]|0;if(!a){i=d;break}else{f=a;a=g}}if(((g|0)!=0?i>>>0<((c[88553]|0)-k|0)>>>0:0)?(l=g+k|0,l>>>0>g>>>0):0){h=c[g+24>>2]|0;b=c[g+12>>2]|0;do if((b|0)==(g|0)){a=g+20|0;b=c[a>>2]|0;if(!b){a=g+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){f=b+20|0;d=c[f>>2]|0;if(!d){f=b+16|0;d=c[f>>2]|0;if(!d)break;else{b=d;a=f}}else{b=d;a=f}}c[a>>2]=0}else{v=c[g+8>>2]|0;c[v+12>>2]=b;c[b+8>>2]=v}while(0);do if(h){a=c[g+28>>2]|0;d=354508+(a<<2)|0;if((g|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=e&~(1<<a);c[88552]=e;break}}else{v=h+16|0;c[((c[v>>2]|0)==(g|0)?v:h+20|0)>>2]=b;if(!b)break}c[b+24>>2]=h;a=c[g+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[g+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b}}while(0);b:do if(i>>>0<16){v=i+k|0;c[g+4>>2]=v|3;v=g+v+4|0;c[v>>2]=c[v>>2]|1}else{c[g+4>>2]=k|3;c[l+4>>2]=i|1;c[l+i>>2]=i;b=i>>>3;if(i>>>0<256){d=354244+(b<<1<<2)|0;a=c[88551]|0;b=1<<b;if(!(a&b)){c[88551]=a|b;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=l;c[a+12>>2]=l;c[l+8>>2]=a;c[l+12>>2]=d;break}b=i>>>8;if(b)if(i>>>0>16777215)d=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;d=(v+245760|0)>>>16&2;d=14-(t|u|d)+(v<<d>>>15)|0;d=i>>>(d+7|0)&1|d<<1}else d=0;b=354508+(d<<2)|0;c[l+28>>2]=d;a=l+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<d;if(!(e&a)){c[88552]=e|a;c[b>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(i|0)){e=i<<((d|0)==31?0:25-(d>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(i|0)){b=a;break c}else{e=e<<1;b=a}}c[d>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break b}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=l;c[u>>2]=l;c[l+8>>2]=v;c[l+12>>2]=b;c[l+24>>2]=0}while(0);v=g+8|0;aa=w;return v|0}else m=k}else m=k}else m=-1;while(0);d=c[88553]|0;if(d>>>0>=m>>>0){a=d-m|0;b=c[88556]|0;if(a>>>0>15){v=b+m|0;c[88556]=v;c[88553]=a;c[v+4>>2]=a|1;c[b+d>>2]=a;c[b+4>>2]=m|3}else{c[88553]=0;c[88556]=0;c[b+4>>2]=d|3;v=b+d+4|0;c[v>>2]=c[v>>2]|1}v=b+8|0;aa=w;return v|0}h=c[88554]|0;if(h>>>0>m>>>0){t=h-m|0;c[88554]=t;v=c[88557]|0;u=v+m|0;c[88557]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;aa=w;return v|0}if(!(c[88669]|0)){c[88671]=4096;c[88670]=4096;c[88672]=-1;c[88673]=-1;c[88674]=0;c[88662]=0;c[88669]=n&-16^1431655768;a=4096}else a=c[88671]|0;i=m+48|0;j=m+47|0;g=a+j|0;e=0-a|0;k=g&e;if(k>>>0<=m>>>0){v=0;aa=w;return v|0}a=c[88661]|0;if(a|0?(l=c[88659]|0,n=l+k|0,n>>>0<=l>>>0|n>>>0>a>>>0):0){v=0;aa=w;return v|0}d:do if(!(c[88662]&4)){d=c[88557]|0;e:do if(d){f=354652;while(1){a=c[f>>2]|0;if(a>>>0<=d>>>0?(q=f+4|0,(a+(c[q>>2]|0)|0)>>>0>d>>>0):0)break;a=c[f+8>>2]|0;if(!a){r=128;break e}else f=a}b=g-h&e;if(b>>>0<2147483647){a=vC(b|0)|0;if((a|0)==((c[f>>2]|0)+(c[q>>2]|0)|0)){if((a|0)!=(-1|0)){h=a;g=b;r=145;break d}}else{e=a;r=136}}else b=0}else r=128;while(0);do if((r|0)==128){d=vC(0)|0;if((d|0)!=(-1|0)?(b=d,o=c[88670]|0,p=o+-1|0,b=((p&b|0)==0?0:(p+b&0-o)-b|0)+k|0,o=c[88659]|0,p=b+o|0,b>>>0>m>>>0&b>>>0<2147483647):0){q=c[88661]|0;if(q|0?p>>>0<=o>>>0|p>>>0>q>>>0:0){b=0;break}a=vC(b|0)|0;if((a|0)==(d|0)){h=d;g=b;r=145;break d}else{e=a;r=136}}else b=0}while(0);do if((r|0)==136){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;r=145;break d}a=c[88671]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=e;g=b;r=145;break d}if((vC(a|0)|0)==(-1|0)){vC(d|0)|0;b=0;break}else{h=e;g=a+b|0;r=145;break d}}while(0);c[88662]=c[88662]|4;r=143}else{b=0;r=143}while(0);if(((r|0)==143?k>>>0<2147483647:0)?(s=vC(k|0)|0,q=vC(0)|0,u=q-s|0,t=u>>>0>(m+40|0)>>>0,!((s|0)==(-1|0)|t^1|s>>>0<q>>>0&((s|0)!=(-1|0)&(q|0)!=(-1|0))^1)):0){h=s;g=t?u:b;r=145}if((r|0)==145){b=(c[88659]|0)+g|0;c[88659]=b;if(b>>>0>(c[88660]|0)>>>0)c[88660]=b;j=c[88557]|0;f:do if(j){f=354652;while(1){b=c[f>>2]|0;e=f+4|0;a=c[e>>2]|0;if((h|0)==(b+a|0)){r=154;break}d=c[f+8>>2]|0;if(!d)break;else f=d}if(((r|0)==154?(c[f+12>>2]&8|0)==0:0)?h>>>0>j>>>0&b>>>0<=j>>>0:0){c[e>>2]=a+g;v=(c[88554]|0)+g|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;u=j+t|0;t=v-t|0;c[88557]=u;c[88554]=t;c[u+4>>2]=t|1;c[j+v+4>>2]=40;c[88558]=c[88673];break}if(h>>>0<(c[88555]|0)>>>0)c[88555]=h;d=h+g|0;a=354652;while(1){if((c[a>>2]|0)==(d|0)){r=162;break}b=c[a+8>>2]|0;if(!b)break;else a=b}if((r|0)==162?(c[a+12>>2]&8|0)==0:0){c[a>>2]=h;l=a+4|0;c[l>>2]=(c[l>>2]|0)+g;l=h+8|0;l=h+((l&7|0)==0?0:0-l&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;k=l+m|0;i=b-l-m|0;c[l+4>>2]=m|3;g:do if((j|0)==(b|0)){v=(c[88554]|0)+i|0;c[88554]=v;c[88557]=k;c[k+4>>2]=v|1}else{if((c[88556]|0)==(b|0)){v=(c[88553]|0)+i|0;c[88553]=v;c[88556]=k;c[k+4>>2]=v|1;c[k+v>>2]=v;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;h:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[88551]=c[88551]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|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){a=0;break}else d=e}while(1){f=a+20|0;e=c[f>>2]|0;if(!e){f=a+16|0;e=c[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}c[d>>2]=0}else{v=c[b+8>>2]|0;c[v+12>>2]=a;c[a+8>>2]=v}while(0);if(!g)break;d=c[b+28>>2]|0;e=354508+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){v=g+16|0;c[((c[v>>2]|0)==(b|0)?v:g+20|0)>>2]=a;if(!a)break h}else{c[e>>2]=a;if(a|0)break;c[88552]=c[88552]&~(1<<d);break h}while(0);c[a+24>>2]=g;e=b+16|0;d=c[e>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}d=c[e+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=354244+(b<<1<<2)|0;a=c[88551]|0;b=1<<b;if(!(a&b)){c[88551]=a|b;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=k;c[a+12>>2]=k;c[k+8>>2]=a;c[k+12>>2]=d;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);a=354508+(e<<2)|0;c[k+28>>2]=e;b=k+16|0;c[b+4>>2]=0;c[b>>2]=0;b=c[88552]|0;d=1<<e;if(!(b&d)){c[88552]=b|d;c[a>>2]=k;c[k+24>>2]=a;c[k+12>>2]=k;c[k+8>>2]=k;break}b=c[a>>2]|0;i:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(f|0)){b=a;break i}else{e=e<<1;b=a}}c[d>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;break g}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=k;c[u>>2]=k;c[k+8>>2]=v;c[k+12>>2]=b;c[k+24>>2]=0}while(0);v=l+8|0;aa=w;return v|0}a=354652;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(v=b+(c[a+4>>2]|0)|0,v>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=v+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0<f>>>0?j:a;b=a+8|0;d=g+-40|0;t=h+8|0;t=(t&7|0)==0?0:0-t&7;u=h+t|0;t=d-t|0;c[88557]=u;c[88554]=t;c[u+4>>2]=t|1;c[h+d+4>>2]=40;c[88558]=c[88673];d=a+4|0;c[d>>2]=27;c[b>>2]=c[88663];c[b+4>>2]=c[88664];c[b+8>>2]=c[88665];c[b+12>>2]=c[88666];c[88663]=h;c[88664]=g;c[88666]=0;c[88665]=b;b=a+24|0;do{u=b;b=b+4|0;c[b>>2]=7}while((u+8|0)>>>0<v>>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=354244+(b<<1<<2)|0;a=c[88551]|0;b=1<<b;if(!(a&b)){c[88551]=a|b;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=j;c[a+12>>2]=j;c[j+8>>2]=a;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=354508+(e<<2)|0;c[j+28>>2]=e;c[j+20>>2]=0;c[f>>2]=0;b=c[88552]|0;a=1<<e;if(!(b&a)){c[88552]=b|a;c[d>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}b=c[d>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(g|0)){b=a;break j}else{e=e<<1;b=a}}c[d>>2]=j;c[j+24>>2]=b;c[j+12>>2]=j;c[j+8>>2]=j;break f}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=j;c[u>>2]=j;c[j+8>>2]=v;c[j+12>>2]=b;c[j+24>>2]=0}}else{v=c[88555]|0;if((v|0)==0|h>>>0<v>>>0)c[88555]=h;c[88663]=h;c[88664]=g;c[88666]=0;c[88560]=c[88669];c[88559]=-1;c[88564]=354244;c[88563]=354244;c[88566]=354252;c[88565]=354252;c[88568]=354260;c[88567]=354260;c[88570]=354268;c[88569]=354268;c[88572]=354276;c[88571]=354276;c[88574]=354284;c[88573]=354284;c[88576]=354292;c[88575]=354292;c[88578]=354300;c[88577]=354300;c[88580]=354308;c[88579]=354308;c[88582]=354316;c[88581]=354316;c[88584]=354324;c[88583]=354324;c[88586]=354332;c[88585]=354332;c[88588]=354340;c[88587]=354340;c[88590]=354348;c[88589]=354348;c[88592]=354356;c[88591]=354356;c[88594]=354364;c[88593]=354364;c[88596]=354372;c[88595]=354372;c[88598]=354380;c[88597]=354380;c[88600]=354388;c[88599]=354388;c[88602]=354396;c[88601]=354396;c[88604]=354404;c[88603]=354404;c[88606]=354412;c[88605]=354412;c[88608]=354420;c[88607]=354420;c[88610]=354428;c[88609]=354428;c[88612]=354436;c[88611]=354436;c[88614]=354444;c[88613]=354444;c[88616]=354452;c[88615]=354452;c[88618]=354460;c[88617]=354460;c[88620]=354468;c[88619]=354468;c[88622]=354476;c[88621]=354476;c[88624]=354484;c[88623]=354484;c[88626]=354492;c[88625]=354492;v=g+-40|0;t=h+8|0;t=(t&7|0)==0?0:0-t&7;u=h+t|0;t=v-t|0;c[88557]=u;c[88554]=t;c[u+4>>2]=t|1;c[h+v+4>>2]=40;c[88558]=c[88673]}while(0);b=c[88554]|0;if(b>>>0>m>>>0){t=b-m|0;c[88554]=t;v=c[88557]|0;u=v+m|0;c[88557]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;aa=w;return v|0}}c[88534]=12;v=0;aa=w;return v|0}function VA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!a)return;d=a+-8|0;e=c[88555]|0;a=c[a+-4>>2]|0;b=a&-8;k=d+b|0;do if(!(a&1)){f=c[d>>2]|0;if(!(a&3))return;g=d+(0-f)|0;h=f+b|0;if(g>>>0<e>>>0)return;if((c[88556]|0)==(g|0)){b=k+4|0;a=c[b>>2]|0;if((a&3|0)!=3){i=g;j=g;b=h;break}c[88553]=h;c[b>>2]=a&-2;c[g+4>>2]=h|1;c[g+h>>2]=h;return}d=f>>>3;if(f>>>0<256){a=c[g+8>>2]|0;b=c[g+12>>2]|0;if((b|0)==(a|0)){c[88551]=c[88551]&~(1<<d);i=g;j=g;b=h;break}else{c[a+12>>2]=b;c[b+8>>2]=a;i=g;j=g;b=h;break}}f=c[g+24>>2]|0;a=c[g+12>>2]|0;do if((a|0)==(g|0)){d=g+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0;d=a}else{d=c[g+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(f){a=c[g+28>>2]|0;b=354508+(a<<2)|0;if((c[b>>2]|0)==(g|0)){c[b>>2]=d;if(!d){c[88552]=c[88552]&~(1<<a);i=g;j=g;b=h;break}}else{j=f+16|0;c[((c[j>>2]|0)==(g|0)?j:f+20|0)>>2]=d;if(!d){i=g;j=g;b=h;break}}c[d+24>>2]=f;b=g+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}a=c[b+4>>2]|0;if(a){c[d+20>>2]=a;c[a+24>>2]=d;i=g;j=g;b=h}else{i=g;j=g;b=h}}else{i=g;j=g;b=h}}else{i=d;j=d}while(0);if(i>>>0>=k>>>0)return;a=k+4|0;d=c[a>>2]|0;if(!(d&1))return;if(!(d&2)){if((c[88557]|0)==(k|0)){k=(c[88554]|0)+b|0;c[88554]=k;c[88557]=j;c[j+4>>2]=k|1;if((j|0)!=(c[88556]|0))return;c[88556]=0;c[88553]=0;return}if((c[88556]|0)==(k|0)){k=(c[88553]|0)+b|0;c[88553]=k;c[88556]=i;c[j+4>>2]=k|1;c[i+k>>2]=k;return}f=(d&-8)+b|0;e=d>>>3;do if(d>>>0<256){b=c[k+8>>2]|0;a=c[k+12>>2]|0;if((a|0)==(b|0)){c[88551]=c[88551]&~(1<<e);break}else{c[b+12>>2]=a;c[a+8>>2]=b;break}}else{g=c[k+24>>2]|0;a=c[k+12>>2]|0;do if((a|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){d=0;break}else b=d}while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0;d=a}else{d=c[k+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[k+28>>2]|0;b=354508+(a<<2)|0;if((c[b>>2]|0)==(k|0)){c[b>>2]=d;if(!d){c[88552]=c[88552]&~(1<<a);break}}else{h=g+16|0;c[((c[h>>2]|0)==(k|0)?h:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;b=k+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}a=c[b+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[j+4>>2]=f|1;c[i+f>>2]=f;if((j|0)==(c[88556]|0)){c[88553]=f;return}}else{c[a>>2]=d&-2;c[j+4>>2]=b|1;c[i+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=354244+(a<<1<<2)|0;b=c[88551]|0;a=1<<a;if(!(b&a)){c[88551]=b|a;a=d+8|0;b=d}else{b=d+8|0;a=b;b=c[b>>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)e=31;else{i=(a+1048320|0)>>>16&8;k=a<<i;h=(k+520192|0)>>>16&4;k=k<<h;e=(k+245760|0)>>>16&2;e=14-(h|i|e)+(k<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;b=354508+(e<<2)|0;c[j+28>>2]=e;c[j+20>>2]=0;c[j+16>>2]=0;a=c[88552]|0;d=1<<e;a:do if(!(a&d)){c[88552]=a|d;c[b>>2]=j;c[j+24>>2]=b;c[j+12>>2]=j;c[j+8>>2]=j}else{a=c[b>>2]|0;b:do if((c[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(f|0)){a=b;break b}else{e=e<<1;a=b}}c[d>>2]=j;c[j+24>>2]=a;c[j+12>>2]=j;c[j+8>>2]=j;break a}while(0);i=a+8|0;k=c[i>>2]|0;c[k+12>>2]=j;c[i>>2]=j;c[j+8>>2]=k;c[j+12>>2]=a;c[j+24>>2]=0}while(0);k=(c[88559]|0)+-1|0;c[88559]=k;if(k|0)return;a=354660;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[88559]=-1;return}function WA(){O(354700);return}function XA(){return 354700}function YA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if(a>>>0<212){a=ZA(283312,283504,a)|0;a=c[a>>2]|0}else{i=(a>>>0)/210|0;h=i*210|0;b=h;f=0;h=(ZA(283504,283696,a-h|0)|0)-283504>>2;while(1){a=(c[283504+(h<<2)>>2]|0)+b|0;e=5;while(1){if(e>>>0>=47){j=6;break}b=c[283312+(e<<2)>>2]|0;d=(a>>>0)/(b>>>0)|0;if(d>>>0<b>>>0)break a;if((a|0)==(v(d,b)|0)){a=f;break}else e=e+1|0}b:do if((j|0)==6){j=0;g=211;d=f;c:while(1){b=(a>>>0)/(g>>>0)|0;do if(b>>>0>=g>>>0)if((a|0)!=(v(b,g)|0)){e=g+10|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+12|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+16|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+18|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+22|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+28|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)==(v(b,e)|0)){f=9;b=e}else{e=g+30|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+36|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+40|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+42|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+46|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+52|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+58|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+60|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+66|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+70|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+72|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+78|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+82|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+88|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+96|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+100|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+102|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+106|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+108|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+112|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+120|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+126|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+130|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+136|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+138|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+142|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+148|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+150|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+156|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+162|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+166|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+168|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+172|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+178|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+180|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+186|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+190|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+192|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+196|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+198|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}b=g+208|0;k=(a>>>0)/(b>>>0)|0;e=k>>>0<b>>>0;k=(a|0)==(v(k,b)|0);f=e?1:k?9:0;b=e|k?b:g+210|0;d=e?a:d}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=g}else{f=1;b=g;d=a}while(0);switch(f&15){case 9:{a=d;break b}case 0:{g=b;break}default:break c}}if(!f)a=d;else{a=d;break a}}while(0);k=h+1|0;g=(k|0)==48;b=i+(g&1)|0;i=b;b=b*210|0;f=a;h=g?0:k}}while(0);return a|0}function ZA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a;a=b-a>>2;while(1){if(!a)break;b=(a|0)/2|0;g=e+(b<<2)|0;f=(c[g>>2]|0)>>>0<d>>>0;e=f?g+4|0:e;a=f?a+-1-b|0:b}return e|0}function _A(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=UA(b)|0;if(a|0)break;a=fC()|0;if(!a){a=0;break}la[a&15]()}return a|0}function $A(a){a=a|0;VA(a);return}function aB(){U()}function bB(){U()}function cB(b,d){b=b|0;d=d|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if((a[d+11>>0]|0)<0)dB(b,c[d>>2]|0,c[d+4>>2]|0);else{c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2]}return}function dB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(e>>>0>4294967279)aB();if(e>>>0<11)a[b+11>>0]=e;else{g=e+16&-16;f=_A(g)|0;c[b>>2]=f;c[b+8>>2]=g|-2147483648;c[b+4>>2]=e;b=f}eB(b,d,e)|0;fB(b+e|0,0);return}function eB(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)sC(a|0,b|0,c|0)|0;return a|0}function fB(b,c){b=b|0;c=c|0;a[b>>0]=c;return}function gB(a){a=a|0;return Uz(a)|0}function hB(a,b,c){a=a|0;b=b|0;c=c|0;if(b|0)uC(a|0,(iB(c)|0)&255|0,b|0)|0;return a|0}function iB(a){a=a|0;return a&255|0}function jB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;g=a[d+11>>0]|0;h=g<<24>>24<0;g=h?c[d+4>>2]|0:g&255;if(g>>>0<e>>>0)bB();else{g=g-e|0;dB(b,(h?c[d>>2]|0:d)+e|0,g>>>0<f>>>0?g:f);return}}function kB(b){b=b|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0);return}function lB(b,d){b=b|0;d=d|0;var e=0,f=0;if((b|0)!=(d|0)){e=a[d+11>>0]|0;f=e<<24>>24<0;mB(b,f?c[d>>2]|0:d,f?c[d+4>>2]|0:e&255)|0}return b|0}function mB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+11|0;f=a[h>>0]|0;g=f<<24>>24<0;if(g)i=(c[b+8>>2]&2147483647)+-1|0;else i=10;do if(i>>>0>=e>>>0){if(g)f=c[b>>2]|0;else f=b;nB(f,d,e)|0;fB(f+e|0,0);if((a[h>>0]|0)<0){c[b+4>>2]=e;break}else{a[h>>0]=e;break}}else{if(g)f=c[b+4>>2]|0;else f=f&255;oB(b,i,e-i|0,f,0,f,e,d)}while(0);return b|0}function nB(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)tC(a|0,b|0,c|0)|0;return a|0}function oB(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if((-18-d|0)>>>0<e>>>0)aB();if((a[b+11>>0]|0)<0)m=c[b>>2]|0;else m=b;if(d>>>0<2147483623){l=e+d|0;k=d<<1;l=l>>>0<k>>>0?k:l;l=l>>>0<11?11:l+16&-16}else l=-17;k=_A(l)|0;if(g|0)eB(k,m,g)|0;if(i|0)eB(k+g|0,j,i)|0;e=f-h|0;f=e-g|0;if(f|0)eB(k+g+i|0,m+g+h|0,f)|0;if((d|0)!=10)$A(m);c[b>>2]=k;c[b+8>>2]=l|-2147483648;m=e+i|0;c[b+4>>2]=m;fB(k+m|0,0);return}function pB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=b+11|0;f=a[i>>0]|0;g=f<<24>>24<0;if(g){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=f&255;e=10}d=k>>>0<11;j=d?10:(k+16&-16)+-1|0;do if((j|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(g){f=b;g=0;h=11}else{eB(b,d,(f&255)+1|0)|0;$A(d);h=14}}else{d=j+1|0;e=_A(d)|0;if(g){f=e;g=1;d=c[b>>2]|0;h=11;break}else{eB(e,b,(f&255)+1|0)|0;f=e;e=b+4|0;h=13;break}}while(0);if((h|0)==11){e=b+4|0;eB(f,d,(c[e>>2]|0)+1|0)|0;$A(d);if(g){d=j+1|0;h=13}else h=14}if((h|0)==13){c[b+8>>2]=d|-2147483648;c[e>>2]=k;c[b>>2]=f;break}else if((h|0)==14){a[i>>0]=k;break}}while(0);return}function qB(a,b){a=a|0;b=b|0;return mB(a,b,gB(b)|0)|0}function rB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=b+11|0;e=a[f>>0]|0;g=e<<24>>24<0;if(g)e=c[b+4>>2]|0;else e=e&255;do if(e>>>0>=d>>>0)if(g){fB((c[b>>2]|0)+d|0,0);c[b+4>>2]=d;break}else{fB(b+d|0,0);a[f>>0]=d;break}else sB(b,d-e|0,0)|0;while(0);return}function sB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if(d|0){i=b+11|0;f=a[i>>0]|0;if(f<<24>>24<0){h=c[b+4>>2]|0;g=(c[b+8>>2]&2147483647)+-1|0}else{h=f&255;g=10}if((g-h|0)>>>0<d>>>0){tB(b,g,h+d-g|0,h,h,0);f=a[i>>0]|0}if(f<<24>>24<0)g=c[b>>2]|0;else g=b;hB(g+h|0,d,e)|0;f=h+d|0;if((a[i>>0]|0)<0)c[b+4>>2]=f;else a[i>>0]=f;fB(g+f|0,0)}return b|0}function tB(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;if((-17-d|0)>>>0<e>>>0)aB();if((a[b+11>>0]|0)<0)k=c[b>>2]|0;else k=b;if(d>>>0<2147483623){j=e+d|0;i=d<<1;j=j>>>0<i>>>0?i:j;j=j>>>0<11?11:j+16&-16}else j=-17;i=_A(j)|0;if(g|0)eB(i,k,g)|0;e=f-g|0;if(e|0)eB(i+g+h|0,k+g|0,e)|0;if((d|0)!=10)$A(k);c[b>>2]=i;c[b+8>>2]=j|-2147483648;return}function uB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=b+11|0;f=a[i>>0]|0;g=f<<24>>24<0;if(g){h=c[b+4>>2]|0;f=(c[b+8>>2]&2147483647)+-1|0}else{h=f&255;f=10}if((f-h|0)>>>0>=e>>>0){if(e|0){if(g)g=c[b>>2]|0;else g=b;eB(g+h|0,d,e)|0;f=h+e|0;if((a[i>>0]|0)<0)c[b+4>>2]=f;else a[i>>0]=f;fB(g+f|0,0)}}else oB(b,f,h+e-f|0,h,h,0,e,d);return b|0}function vB(a,b){a=a|0;b=b|0;return uB(a,b,gB(b)|0)|0}function wB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=b+11|0;e=a[h>>0]|0;g=e<<24>>24<0;if(g){f=(c[b+8>>2]&2147483647)+-1|0;i=c[b+4>>2]|0}else{f=10;i=e&255}if((i|0)==(f|0)){tB(b,f,1,f,f,0);if((a[h>>0]|0)<0)e=8;else e=7}else if(g)e=8;else e=7;if((e|0)==7)a[h>>0]=i+1;else if((e|0)==8){h=c[b>>2]|0;c[b+4>>2]=i+1;b=h}i=b+i|0;fB(i,d);fB(i+1|0,0);return}function xB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b+11|0;e=a[j>>0]|0;h=e<<24>>24<0;if(h){f=c[b>>2]|0;g=(c[b+8>>2]&2147483647)+-1|0;i=c[b+4>>2]|0}else{f=b;g=10;i=e&255}d=d-f|0;if((g|0)!=(i|0)){if(h)f=c[b>>2]|0;else f=b;e=i-d|0;if(e){h=f+d|0;nB(h+1|0,h,e)|0}}else{tB(b,i,1,i,d,1);f=c[b>>2]|0}fB(f+d|0,95);e=i+1|0;fB(f+e|0,0);if((a[j>>0]|0)<0)c[b+4>>2]=e;else a[j>>0]=e;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0;c=aa;aa=aa+16|0;d=c;zB(d);AB(a,d,b);kB(d);aa=c;return}function zB(b){b=b|0;var d=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0}if((a[b+11>>0]|0)<0)d=(c[b+8>>2]&2147483647)+-1|0;else d=10;rB(b,d);return}function AB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;h=d+11|0;f=a[h>>0]|0;if(f<<24>>24<0)g=c[d+4>>2]|0;else g=f&255;while(1){if(f<<24>>24<0)f=c[d>>2]|0;else f=d;c[i>>2]=e;f=Sz(f,g+1|0,331593,i)|0;if((f|0)>-1)if(f>>>0>g>>>0)g=f;else break;else g=g<<1|1;rB(d,g);f=a[h>>0]|0}rB(d,f);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];f=0;while(1){if((f|0)==3)break;c[d+(f<<2)>>2]=0;f=f+1|0}aa=j;return}function BB(a,b){a=a|0;b=b|0;var c=0,d=0;c=aa;aa=aa+16|0;d=c;CB(d);DB(a,d,b);kB(d);aa=c;return}function CB(b){b=b|0;var d=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0}if((a[b+11>>0]|0)<0)d=(c[b+8>>2]&2147483647)+-1|0;else d=10;rB(b,d);return}function DB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;h=d+11|0;f=a[h>>0]|0;if(f<<24>>24<0)g=c[d+4>>2]|0;else g=f&255;while(1){if(f<<24>>24<0)f=c[d>>2]|0;else f=d;c[i>>2]=e;f=Sz(f,g+1|0,331596,i)|0;if((f|0)>-1)if(f>>>0>g>>>0)g=f;else break;else g=g<<1|1;rB(d,g);f=a[h>>0]|0}rB(d,f);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];f=0;while(1){if((f|0)==3)break;c[d+(f<<2)>>2]=0;f=f+1|0}aa=j;return}function EB(a,b){a=a|0;b=b|0;var c=0,d=0;c=aa;aa=aa+16|0;d=c;FB(d);GB(a,d,b);kB(d);aa=c;return}function FB(b){b=b|0;var d=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0}if((a[b+11>>0]|0)<0)d=(c[b+8>>2]&2147483647)+-1|0;else d=10;rB(b,d);return}function GB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;h=d+11|0;f=a[h>>0]|0;if(f<<24>>24<0)g=c[d+4>>2]|0;else g=f&255;while(1){if(f<<24>>24<0)f=c[d>>2]|0;else f=d;c[i>>2]=e;f=Sz(f,g+1|0,331599,i)|0;if((f|0)>-1)if(f>>>0>g>>>0)g=f;else break;else g=g<<1|1;rB(d,g);f=a[h>>0]|0}rB(d,f);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];f=0;while(1){if((f|0)==3)break;c[d+(f<<2)>>2]=0;f=f+1|0}aa=j;return}function HB(){U()}function IB(a){a=a|0;return}function JB(a){a=a|0;$A(a);return}function KB(a){a=a|0;return}function LB(a){a=a|0;return}function MB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+64|0;g=h;if(!(QB(a,b)|0))if((b|0)!=0?(f=UB(b)|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;pa[c[(c[f>>2]|0)+28>>2]&15](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;aa=h;return b|0}function NB(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(QB(a,c[b+8>>2]|0)|0)TB(b,d,e,f);return}function OB(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(!(QB(b,c[d+8>>2]|0)|0)){if(QB(b,c[d>>2]|0)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>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[d+32>>2]=1}}else SB(d,e,f);while(0);return}function PB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(QB(a,c[b+8>>2]|0)|0)RB(b,d,e);return}function QB(a,b){a=a|0;b=b|0;return (a|0)==(b|0)|0}function RB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=b+16|0;f=c[g>>2]|0;do if(f){if((f|0)!=(d|0)){e=b+36|0;c[e>>2]=(c[e>>2]|0)+1;c[b+24>>2]=2;a[b+54>>0]=1;break}f=b+24|0;if((c[f>>2]|0)==2)c[f>>2]=e}else{c[g>>2]=d;c[b+24>>2]=e;c[b+36>>2]=1}while(0);return}function SB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+4>>2]|0)==(b|0)?(e=a+28|0,(c[e>>2]|0)!=1):0)c[e>>2]=d;return}function TB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;a[b+53>>0]=1;do if((c[b+4>>2]|0)==(e|0)){a[b+52>>0]=1;g=b+16|0;e=c[g>>2]|0;if(!e){c[g>>2]=d;c[b+24>>2]=f;c[b+36>>2]=1;if(!((f|0)==1?(c[b+48>>2]|0)==1:0))break;a[b+54>>0]=1;break}if((e|0)!=(d|0)){f=b+36|0;c[f>>2]=(c[f>>2]|0)+1;a[b+54>>0]=1;break}g=b+24|0;e=c[g>>2]|0;if((e|0)==2){c[g>>2]=f;e=f}if((e|0)==1?(c[b+48>>2]|0)==1:0)a[b+54>>0]=1}while(0);return}function UB(d){d=d|0;var 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;q=aa;aa=aa+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]=286776;c[p+4>>2]=d;c[p+8>>2]=286792;k=p+12|0;e=p+16|0;f=p+20|0;h=p+24|0;j=p+28|0;i=p+32|0;g=p+40|0;d=QB(n,286776)|0;l=k;m=l+40|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));b[k+40>>1]=0;a[k+42>>0]=0;a:do if(d){c[p+48>>2]=1;ra[c[(c[n>>2]|0)+20>>2]&15](n,p,o,o,1,0);d=(c[h>>2]|0)==1?o:0}else{qa[c[(c[n>>2]|0)+24>>2]&15](n,p,o,1,0);switch(c[p+36>>2]|0){case 0:{d=(c[g>>2]|0)==1&(c[j>>2]|0)==1&(c[i>>2]|0)==1?c[f>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[h>>2]|0)!=1?!((c[g>>2]|0)==0&(c[j>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[e>>2]|0}while(0);aa=q;return d|0}function VB(a){a=a|0;$A(a);return}function WB(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(QB(a,c[b+8>>2]|0)|0)TB(b,d,e,f);else{a=c[a+8>>2]|0;ra[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e,f,g)}return}function XB(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;do if(!(QB(b,c[d+8>>2]|0)|0)){if(!(QB(b,c[d>>2]|0)|0)){i=c[b+8>>2]|0;qa[c[(c[i>>2]|0)+24>>2]&15](i,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;j=d+53|0;a[j>>0]=0;b=c[b+8>>2]|0;ra[c[(c[b>>2]|0)+20>>2]&15](b,d,e,e,1,g);if(a[j>>0]|0)if(!(a[f>>0]|0)){f=1;b=11}else b=15;else{f=0;b=11}do if((b|0)==11){c[h>>2]=e;j=d+40|0;c[j>>2]=(c[j>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(f){b=15;break}else{f=4;break}}if(f)b=15;else f=4}while(0);if((b|0)==15)f=3;c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else SB(d,e,f);while(0);return}function YB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(QB(a,c[b+8>>2]|0)|0)RB(b,d,e);else{a=c[a+8>>2]|0;pa[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function ZB(a){a=a|0;$A(a);return}function _B(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(QB(b,c[d+8>>2]|0)|0)TB(d,e,f,g);else{n=d+52|0;i=a[n>>0]|0;m=d+53|0;j=a[m>>0]|0;p=c[b+12>>2]|0;l=b+16+(p<<3)|0;a[n>>0]=0;a[m>>0]=0;cC(b+16|0,d,e,f,g,h);a:do if((p|0)>1){o=d+24|0;k=b+8|0;p=d+54|0;b=b+24|0;do{if(a[p>>0]|0)break a;if(!(a[n>>0]|0)){if(a[m>>0]|0?(c[k>>2]&1|0)==0:0)break a}else{if((c[o>>2]|0)==1)break a;if(!(c[k>>2]&2))break a}a[n>>0]=0;a[m>>0]=0;cC(b,d,e,f,g,h);b=b+8|0}while(b>>>0<l>>>0)}while(0);a[n>>0]=i;a[m>>0]=j}return}function $B(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,l=0,m=0,n=0,o=0,p=0,q=0;a:do if(!(QB(b,c[d+8>>2]|0)|0)){if(!(QB(b,c[d>>2]|0)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;dC(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;dC(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;dC(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;dC(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;l=d+52|0;f=d+53|0;o=d+54|0;j=b+8|0;n=d+24|0;m=0;h=0;i=b+16|0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[l>>0]=0;a[f>>0]=0;cC(i,d,e,e,1,g);if(a[o>>0]|0){b=18;break}do if(a[f>>0]|0){if(!(a[l>>0]|0))if(!(c[j>>2]&1)){h=1;b=18;break b}else{b=m;h=1;break}if((c[n>>2]|0)==1){b=23;break b}if(!(c[j>>2]&2)){b=23;break b}else{b=1;h=1}}else b=m;while(0);m=b;i=i+8|0}do if((b|0)==18){if((!m?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[n>>2]|0)==2:0){a[o>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else SB(d,e,f);while(0);return}function aC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(QB(b,c[d+8>>2]|0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;bC(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{bC(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0<g>>>0)}}else RB(d,e,f);while(0);return}function bC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;pa[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,(g&2|0)==0?2:e);return}function cC(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 h=0,i=0;i=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;ra[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e+h|0,(i&2|0)==0?2:f,g);return}function dC(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;qa[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,(h&2|0)==0?2:e,f);return}function eC(){var b=0;if((a[354128]|0)==1)b=0;else{a[354128]=1;b=1}return b|0}function fC(){var a=0;a=c[88676]|0;c[88676]=a+0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=v(e,f)|0;d=a>>>16;a=(c>>>16)+(v(e,d)|0)|0;e=b>>>16;b=v(e,f)|0;return (y((a>>>16)+(v(e,d)|0)+(((a&65535)+b|0)>>>16)|0),a+b<<16|c&65535|0)|0}function hC(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=gC(e,f)|0;a=z()|0;return (y((v(b,f)|0)+(v(d,e)|0)+a|a&0|0),c|0|0)|0}function iC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (y(b+d+(c>>>0<a>>>0|0)>>>0|0),c|0)|0}function jC(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 (y(d|0),a-c>>>0|0)|0}function kC(a){a=a|0;return (a?31-(w(a^a-1)|0)|0:32)|0}function lC(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 (y(n|0),f)|0}else{if(!g){n=0;f=0;return (y(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (y(n|0),f)|0}}g=(i|0)==0;do if(h){if(!g){g=(w(i|0)|0)-(w(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<<i;b=k>>>(m>>>0)&b;g=0;i=l<<i;break}if(!f){n=0;f=0;return (y(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (y(n|0),f)|0}g=h-1|0;if(g&h|0){i=(w(h|0)|0)+33-(w(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<<m|l>>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>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 (y(o|0),p)|0}else{p=kC(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (y(o|0),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 (y(o|0),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 (y(o|0),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>>>((kC(i|0)|0)>>>0);return (y(o|0),p)|0}g=(w(i|0)|0)-(w(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<<i|l>>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return (y(o|0),p)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (y(o|0),p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=iC(m|0,l|0,-1,-1)|0;d=z()|0;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;jC(k|0,d|0,e|0,n|0)|0;p=z()|0;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=jC(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z()|0;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 (y(o|0),p)|0}function mC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return lC(a,b,c,d,0)|0}function nC(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y(b>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}y(((b|0)<0?-1:0)|0);return b>>c-32|0}function oC(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y(b>>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}y(0);return b>>>c-32|0}function pC(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y(b<<c|(a&(1<<c)-1<<32-c)>>>32-c|0);return a<<c}y(a<<c-32|0);return 0}function qC(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function rC(a,b,c){a=a|0;b=b|0;c=c|0;b=w(b)|0;if((b|0)==32)b=b+(w(a)|0)|0;y(0);return b|0}function sC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){W(b|0,d|0,e|0)|0;return b|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 tC(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else sC(b,c,d)|0;return b|0}function uC(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;i=d|d<<8|d<<16|d<<24;g=f-64|0;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 vC(a){a=a|0;var b=0,d=0;d=c[i>>2]|0;b=d+a|0;if((a|0)>0&(b|0)<(d|0)|(b|0)<0){Z(b|0)|0;P(12);return -1}if((b|0)>(V()|0)){if(!(X(b|0)|0)){P(12);return -1}}else c[i>>2]=b;return d|0}function wC(a,b){a=a|0;b=b|0;return ea[a&127](b|0)|0}function xC(a){a=a|0;return A(0,a|0)|0}function yC(a){a=a|0;return A(1,a|0)|0}function zC(a){a=a|0;return A(2,a|0)|0}function AC(a){a=a|0;return A(3,a|0)|0}function BC(a){a=a|0;return A(4,a|0)|0}function CC(a){a=a|0;return A(5,a|0)|0}function DC(a){a=a|0;return A(6,a|0)|0}function EC(a){a=a|0;return A(7,a|0)|0}function FC(a){a=a|0;return A(8,a|0)|0}function GC(a){a=a|0;return A(9,a|0)|0}function HC(a,b,c){a=a|0;b=b|0;c=c|0;return fa[a&511](b|0,c|0)|0}function IC(a,b){a=a|0;b=b|0;return B(0,a|0,b|0)|0}function JC(a,b){a=a|0;b=b|0;return B(1,a|0,b|0)|0}function KC(a,b){a=a|0;b=b|0;return B(2,a|0,b|0)|0}function LC(a,b){a=a|0;b=b|0;return B(3,a|0,b|0)|0}function MC(a,b){a=a|0;b=b|0;return B(4,a|0,b|0)|0}function NC(a,b){a=a|0;b=b|0;return B(5,a|0,b|0)|0}function OC(a,b){a=a|0;b=b|0;return B(6,a|0,b|0)|0}function PC(a,b){a=a|0;b=b|0;return B(7,a|0,b|0)|0}function QC(a,b){a=a|0;b=b|0;return B(8,a|0,b|0)|0}function RC(a,b){a=a|0;b=b|0;return B(9,a|0,b|0)|0}function SC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ga[a&127](b|0,c|0,d|0)|0}function TC(a,b,c){a=a|0;b=b|0;c=c|0;return C(0,a|0,b|0,c|0)|0}function UC(a,b,c){a=a|0;b=b|0;c=c|0;return C(1,a|0,b|0,c|0)|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;return C(2,a|0,b|0,c|0)|0}function WC(a,b,c){a=a|0;b=b|0;c=c|0;return C(3,a|0,b|0,c|0)|0}function XC(a,b,c){a=a|0;b=b|0;c=c|0;return C(4,a|0,b|0,c|0)|0}function YC(a,b,c){a=a|0;b=b|0;c=c|0;return C(5,a|0,b|0,c|0)|0}function ZC(a,b,c){a=a|0;b=b|0;c=c|0;return C(6,a|0,b|0,c|0)|0}function _C(a,b,c){a=a|0;b=b|0;c=c|0;return C(7,a|0,b|0,c|0)|0}function $C(a,b,c){a=a|0;b=b|0;c=c|0;return C(8,a|0,b|0,c|0)|0}function aD(a,b,c){a=a|0;b=b|0;c=c|0;return C(9,a|0,b|0,c|0)|0}function bD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ha[a&127](b|0,c|0,d|0,e|0)|0}function cD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(0,a|0,b|0,c|0,d|0)|0}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(1,a|0,b|0,c|0,d|0)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(2,a|0,b|0,c|0,d|0)|0}function fD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(3,a|0,b|0,c|0,d|0)|0}function gD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(4,a|0,b|0,c|0,d|0)|0}function hD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(5,a|0,b|0,c|0,d|0)|0}function iD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(6,a|0,b|0,c|0,d|0)|0}function jD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(7,a|0,b|0,c|0,d|0)|0}function kD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(8,a|0,b|0,c|0,d|0)|0}function lD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(9,a|0,b|0,c|0,d|0)|0}function mD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ia[a&31](b|0,c|0,d|0,e|0,f|0)|0}function nD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(0,a|0,b|0,c|0,d|0,e|0)|0}function oD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(1,a|0,b|0,c|0,d|0,e|0)|0}function pD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(2,a|0,b|0,c|0,d|0,e|0)|0}function qD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(3,a|0,b|0,c|0,d|0,e|0)|0}function rD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(4,a|0,b|0,c|0,d|0,e|0)|0}function sD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(5,a|0,b|0,c|0,d|0,e|0)|0}function tD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(6,a|0,b|0,c|0,d|0,e|0)|0}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(7,a|0,b|0,c|0,d|0,e|0)|0}function vD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(8,a|0,b|0,c|0,d|0,e|0)|0}function wD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(9,a|0,b|0,c|0,d|0,e|0)|0}function xD(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;return ja[a&31](b|0,c|0,d|0,e|0,f|0,g|0)|0}function yD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(0,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(1,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(2,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(3,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(4,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(5,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ED(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(6,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(7,a|0,b|0,c|0,d|0,e|0,f|0)|0}function GD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(8,a|0,b|0,c|0,d|0,e|0,f|0)|0}function HD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(9,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ID(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ka[a&31](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function JD(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;return G(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function KD(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;return G(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function LD(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;return G(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function MD(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;return G(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function ND(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;return G(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function OD(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;return G(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function PD(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;return G(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function QD(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;return G(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function RD(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;return G(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function SD(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;return G(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function TD(a){a=a|0;la[a&15]()}function UD(){H(0)}function VD(){H(1)}function WD(){H(2)}function XD(){H(3)}function YD(){H(4)}function ZD(){H(5)}function _D(){H(6)}function $D(){H(7)}function aE(){H(8)}function bE(){H(9)}function cE(a,b){a=a|0;b=b|0;ma[a&255](b|0)}function dE(a){a=a|0;I(0,a|0)}function eE(a){a=a|0;I(1,a|0)}function fE(a){a=a|0;I(2,a|0)}function gE(a){a=a|0;I(3,a|0)}function hE(a){a=a|0;I(4,a|0)}function iE(a){a=a|0;I(5,a|0)}function jE(a){a=a|0;I(6,a|0)}function kE(a){a=a|0;I(7,a|0)}function lE(a){a=a|0;I(8,a|0)}function mE(a){a=a|0;I(9,a|0)}function nE(a,b,c){a=a|0;b=b|0;c=c|0;na[a&31](b|0,c|0)}function oE(a,b){a=a|0;b=b|0;J(0,a|0,b|0)}function pE(a,b){a=a|0;b=b|0;J(1,a|0,b|0)}function qE(a,b){a=a|0;b=b|0;J(2,a|0,b|0)}function rE(a,b){a=a|0;b=b|0;J(3,a|0,b|0)}function sE(a,b){a=a|0;b=b|0;J(4,a|0,b|0)}function tE(a,b){a=a|0;b=b|0;J(5,a|0,b|0)}function uE(a,b){a=a|0;b=b|0;J(6,a|0,b|0)}function vE(a,b){a=a|0;b=b|0;J(7,a|0,b|0)}function wE(a,b){a=a|0;b=b|0;J(8,a|0,b|0)}function xE(a,b){a=a|0;b=b|0;J(9,a|0,b|0)}function yE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;oa[a&15](b|0,c|0,d|0)}function zE(a,b,c){a=a|0;b=b|0;c=c|0;K(0,a|0,b|0,c|0)}function AE(a,b,c){a=a|0;b=b|0;c=c|0;K(1,a|0,b|0,c|0)}function BE(a,b,c){a=a|0;b=b|0;c=c|0;K(2,a|0,b|0,c|0)}function CE(a,b,c){a=a|0;b=b|0;c=c|0;K(3,a|0,b|0,c|0)}function DE(a,b,c){a=a|0;b=b|0;c=c|0;K(4,a|0,b|0,c|0)}function EE(a,b,c){a=a|0;b=b|0;c=c|0;K(5,a|0,b|0,c|0)}function FE(a,b,c){a=a|0;b=b|0;c=c|0;K(6,a|0,b|0,c|0)}function GE(a,b,c){a=a|0;b=b|0;c=c|0;K(7,a|0,b|0,c|0)}function HE(a,b,c){a=a|0;b=b|0;c=c|0;K(8,a|0,b|0,c|0)}function IE(a,b,c){a=a|0;b=b|0;c=c|0;K(9,a|0,b|0,c|0)}function JE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;pa[a&15](b|0,c|0,d|0,e|0)}function KE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(0,a|0,b|0,c|0,d|0)}function LE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(1,a|0,b|0,c|0,d|0)}function ME(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(2,a|0,b|0,c|0,d|0)}function NE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(3,a|0,b|0,c|0,d|0)}function OE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(4,a|0,b|0,c|0,d|0)}function PE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(5,a|0,b|0,c|0,d|0)}function QE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(6,a|0,b|0,c|0,d|0)}function RE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(7,a|0,b|0,c|0,d|0)}function SE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(8,a|0,b|0,c|0,d|0)}function TE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(9,a|0,b|0,c|0,d|0)}function UE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qa[a&15](b|0,c|0,d|0,e|0,f|0)}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(0,a|0,b|0,c|0,d|0,e|0)}function WE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(1,a|0,b|0,c|0,d|0,e|0)}function XE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(2,a|0,b|0,c|0,d|0,e|0)}function YE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(3,a|0,b|0,c|0,d|0,e|0)}function ZE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(4,a|0,b|0,c|0,d|0,e|0)}function _E(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(5,a|0,b|0,c|0,d|0,e|0)}function $E(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(6,a|0,b|0,c|0,d|0,e|0)}function aF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(7,a|0,b|0,c|0,d|0,e|0)}function bF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(8,a|0,b|0,c|0,d|0,e|0)}function cF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(9,a|0,b|0,c|0,d|0,e|0)}function dF(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;ra[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function eF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(0,a|0,b|0,c|0,d|0,e|0,f|0)}function fF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(1,a|0,b|0,c|0,d|0,e|0,f|0)}function gF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(2,a|0,b|0,c|0,d|0,e|0,f|0)}function hF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(3,a|0,b|0,c|0,d|0,e|0,f|0)}function iF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(4,a|0,b|0,c|0,d|0,e|0,f|0)}function jF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(5,a|0,b|0,c|0,d|0,e|0,f|0)}function kF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(6,a|0,b|0,c|0,d|0,e|0,f|0)}function lF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(7,a|0,b|0,c|0,d|0,e|0,f|0)}function mF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(8,a|0,b|0,c|0,d|0,e|0,f|0)}function nF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(9,a|0,b|0,c|0,d|0,e|0,f|0)}function oF(a){a=a|0;x(0);return 0}function pF(a,b){a=a|0;b=b|0;x(1);return 0}function qF(a,b,c){a=a|0;b=b|0;c=c|0;x(2);return 0}function rF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;x(3);return 0}function sF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;x(4);return 0}function tF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x(5);return 0}function uF(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;x(6);return 0}function vF(){x(7)}function wF(a){a=a|0;x(8)}function xF(a,b){a=a|0;b=b|0;x(9)}function yF(a,b,c){a=a|0;b=b|0;c=c|0;x(10)}function zF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;x(11)}function AF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;x(12)}function BF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x(13)}
+
+// EMSCRIPTEN_END_FUNCS
+var ea=[oF,xC,yC,zC,AC,BC,CC,DC,EC,FC,GC,Uc,Xc,$c,id,md,qd,ud,Bd,Fd,Id,Pd,le,oe,pe,qe,re,Fe,He,Ie,Ke,Le,Se,Te,Ue,Ve,We,Ze,df,ff,tf,Bf,Ef,Pf,Tf,Yf,mg,qg,xj,Dj,Vm,$m,Mm,Sm,wo,Co,no,to,Br,yr,vr,wu,zu,Du,Mu,Qu,Uu,Yu,dv,hv,kv,rv,Pv,Sv,Tv,Uv,Vv,hw,jw,kw,mw,nw,uw,vw,ww,xw,yw,Bw,Hw,Jw,Ww,cx,fx,qx,ux,zx,Px,Tx,Mz,zq,tq,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF];var fa=[pF,IC,JC,KC,LC,MC,NC,OC,PC,QC,RC,Db,Eb,Fb,Gb,Hb,Ib,Jb,Kb,Lb,Mb,Nb,Ob,Pb,Qb,Rb,Sb,Tb,Ub,Vb,Wb,Xb,Yb,Zb,_b,$b,ac,bc,cc,dc,ec,fc,gc,hc,ic,jc,kc,lc,mc,nc,oc,pc,qc,rc,sc,tc,uc,vc,wc,xc,yc,zc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ic,Jc,Kc,Rc,Tc,Yc,Zc,ad,bd,jd,kd,nd,od,rd,sd,vd,wd,yd,zd,Ad,Cd,Dd,Gd,Hd,Jd,Kd,Md,Od,Qd,Rd,Vd,Xd,Yd,de,ee,fe,ge,je,me,ne,se,ue,ve,we,xe,ze,Be,Ce,De,Ee,Ge,Je,Me,Ne,Oe,Pe,Qe,Re,Xe,$e,af,bf,cf,ef,kf,lf,nf,of,qf,sf,uf,vf,xf,yf,Af,Cf,Df,Ff,Hf,Jf,Mf,Qf,Uf,Wf,Xf,Zf,_f,fg,hg,jg,ng,og,Bj,Cj,_j,$j,ak,bk,ck,dk,ek,fk,gk,hk,ik,jk,kk,lk,mk,nk,ok,pk,qk,rk,sk,tk,uk,vk,wk,xk,yk,zk,Ak,Bk,cn,dn,en,fn,gn,hn,jn,kn,ln,mn,nn,on,pn,qn,rn,sn,tn,un,vn,wn,xn,yn,zn,An,Bn,Cn,Dn,En,Fn,Gn,_m,Rm,Fo,Go,Ho,Io,Jo,Ko,Lo,Mo,No,Oo,Po,Qo,Ro,So,To,Uo,Vo,Wo,Xo,Yo,Zo,_o,$o,ap,bp,cp,dp,ep,fp,gp,hp,ip,jp,kp,lp,mp,np,op,pp,qp,rp,sp,tp,up,vp,wp,xp,yp,zp,Ap,Bp,Cp,Dp,Ep,Fp,Gp,Hp,Ip,Jp,Kp,Lp,Mp,Bo,so,Vq,Wq,Xq,Yq,Zq,_q,Ps,Qs,Rs,Ss,Ts,Us,Vs,Ws,Xs,Ys,Zs,_s,$s,at,bt,ct,dt,et,ft,gt,ht,it,jt,kt,lt,mt,nt,ot,pt,qt,rt,st,tt,ut,vt,wt,xt,yt,zt,At,Bt,Ct,Dt,Et,Ft,Gt,Ht,It,Jt,Kt,Lt,Mt,Nt,Ot,Pt,Qt,Rt,St,Tt,Ut,Vt,Wt,tu,vu,Au,Bu,Eu,Fu,Nu,Ou,Ru,Su,Vu,Wu,Zu,_u,av,bv,cv,ev,fv,iv,jv,lv,mv,ov,qv,sv,tv,xv,zv,Av,Hv,Iv,Jv,Kv,Nv,Qv,Rv,Wv,Yv,Zv,_v,$v,bw,dw,ew,fw,gw,iw,lw,ow,pw,qw,rw,sw,tw,zw,Dw,Ew,Fw,Gw,Iw,Nw,Ow,Qw,Rw,Tw,Vw,Xw,Yw,_w,$w,bx,dx,ex,gx,ix,kx,nx,rx,vx,xx,yx,Ax,Bx,Ix,Kx,Mx,Qx,Rx,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF];var ga=[qF,TC,UC,VC,WC,XC,YC,ZC,_C,$C,aD,Wc,ld,td,Ld,Sd,Td,Ud,Wd,he,ke,te,ye,Ye,hf,pf,rf,Kf,Nf,Rf,ig,lg,pg,rg,tg,ug,vg,yu,Pu,Xu,nv,uv,vv,wv,yv,Lv,Ov,Xv,aw,Aw,Lw,Sw,Uw,lx,ox,sx,Lx,Ox,Sx,Ux,Wx,Xx,Yx,Rz,Nz,uA,MB,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF];var ha=[rF,cD,dD,eD,fD,gD,hD,iD,jD,kD,lD,Vc,cd,pd,xd,Nd,Zd,_d,$d,ae,be,ce,ie,Ae,_e,gf,jf,wf,zf,Gf,If,Lf,Of,$f,dg,kg,sg,wg,Kn,Ln,xu,Gu,Tu,$u,pv,Bv,Cv,Dv,Ev,Fv,Gv,Mv,cw,Cw,Kw,Mw,Zw,ax,hx,jx,mx,px,Cx,Gx,Nx,Vx,Zx,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF];var ia=[sF,nD,oD,pD,qD,rD,sD,tD,uD,vD,wD,Ed,mf,Sf,Vf,bg,cg,eg,gg,gv,Pw,tx,wx,Ex,Fx,Hx,Jx,sF,sF,sF,sF,sF];var ja=[tF,yD,zD,AD,BD,CD,DD,ED,FD,GD,HD,_c,dd,fd,hd,Cu,Hu,Ju,Lu,tF,tF,tF,tF,tF,tF,tF,tF,tF,tF,tF,tF,tF];var ka=[uF,JD,KD,LD,MD,ND,OD,PD,QD,RD,SD,ed,gd,ag,Iu,Ku,Dx,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF];var la=[vF,UD,VD,WD,XD,YD,ZD,_D,$D,aE,bE,vF,vF,vF,vF,vF];var ma=[wF,dE,eE,fE,gE,hE,iE,jE,kE,lE,mE,Bb,Cb,Pc,Qc,xg,yg,zg,Ag,Cg,Dg,Pg,Qg,Ug,Vg,Wg,Xg,Yg,Zg,_g,$g,ch,dh,eh,fh,gh,hh,ih,jh,kh,lh,mh,nh,oh,ph,qh,rh,sh,th,uh,vh,wh,xh,yh,zh,Ah,Bh,Ch,Dh,Eh,Fh,Gh,Hh,Ih,Jh,Kh,Lh,Mh,Nh,Oh,Ph,Qh,Rh,Sh,Th,Uh,Vh,Wh,Xh,Yh,Zh,_h,$h,ai,bi,ci,di,fi,gi,hi,ii,ji,ki,li,mi,ni,oi,pi,qi,ri,si,ti,ui,vi,xi,yi,zi,Ai,Bi,Ci,Di,Ei,Fi,Gi,Hi,Ii,Mi,Ni,Ki,Li,Oi,Pi,Qi,Ri,Si,Ti,Ui,Vi,Wi,Xi,Yi,Zi,vj,wj,zj,Aj,Yj,Zj,an,bn,Km,Um,Xm,Ym,Lm,Om,Pm,In,Jn,Do,Eo,uo,vo,yo,zo,mo,po,qo,Qp,Uq,rr,sr,zr,Ar,wr,xr,tr,ur,_r,$r,Rr,Sr,Ur,Zr,Xr,Yr,Vr,as,bs,es,fs,cs,ds,gs,hs,is,js,ks,ls,ms,ns,os,ps,qs,rs,Os,ru,su,IB,JB,KB,LB,VB,ZB,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF];var na=[xF,oE,pE,qE,rE,sE,tE,uE,vE,wE,xE,Sc,yj,Wm,Nm,xo,Ao,oo,uu,xF,xF,xF,xF,xF,xF,xF,xF,xF,xF,xF,xF,xF];var oa=[yF,zE,AE,BE,CE,DE,EE,FE,GE,HE,IE,Zm,Qm,ro,yF,yF];var pa=[zF,KE,LE,ME,NE,OE,PE,QE,RE,SE,TE,PB,YB,aC,zF,zF];var qa=[AF,VE,WE,XE,YE,ZE,_E,$E,aF,bF,cF,OB,XB,$B,AF,AF];var ra=[BF,eF,fF,gF,hF,iF,jF,kF,lF,mF,nF,NB,WB,_B,BF,BF];return{___emscripten_environ_constructor:WA,___errno_location:Pz,___muldi3:hC,___udivdi3:mC,__get_environ:XA,_bitshift64Ashr:nC,_bitshift64Lshr:oC,_bitshift64Shl:pC,_dummy_workaround_for_emscripten_issue_7073:yb,_emscripten_replace_memory:da,_free:VA,_i64Add:iC,_i64Subtract:jC,_llvm_bswap_i32:qC,_llvm_ctlz_i64:rC,_malloc:UA,_memcpy:sC,_memmove:tC,_memset:uC,_sbrk:vC,_wabt_apply_names_module:_a,_wabt_bulk_memory_enabled:Oa,_wabt_destroy_errors:ib,_wabt_destroy_features:xa,_wabt_destroy_module:cb,_wabt_destroy_output_buffer:xb,_wabt_destroy_parse_wat_result:lb,_wabt_destroy_read_binary_result:qb,_wabt_destroy_wast_lexer:eb,_wabt_destroy_write_module_result:ub,_wabt_exceptions_enabled:ya,_wabt_format_binary_errors:hb,_wabt_format_text_errors:gb,_wabt_generate_names_module:$a,_wabt_multi_value_enabled:Ka,_wabt_mutable_globals_enabled:Aa,_wabt_new_errors:fb,_wabt_new_features:wa,_wabt_new_wast_buffer_lexer:Sa,_wabt_output_buffer_get_data:vb,_wabt_output_buffer_get_size:wb,_wabt_parse_wast:Ua,_wabt_parse_wast_result_get_result:mb,_wabt_parse_wast_result_release_module:nb,_wabt_parse_wat:Ta,_wabt_parse_wat_result_get_result:jb,_wabt_parse_wat_result_release_module:kb,_wabt_read_binary:Va,_wabt_read_binary_result_get_result:ob,_wabt_read_binary_result_release_module:pb,_wabt_reference_types_enabled:Qa,_wabt_resolve_names_module:Wa,_wabt_sat_float_to_int_enabled:Ca,_wabt_set_bulk_memory_enabled:Pa,_wabt_set_exceptions_enabled:za,_wabt_set_multi_value_enabled:La,_wabt_set_mutable_globals_enabled:Ba,_wabt_set_reference_types_enabled:Ra,_wabt_set_sat_float_to_int_enabled:Da,_wabt_set_sign_extension_enabled:Fa,_wabt_set_simd_enabled:Ha,_wabt_set_tail_call_enabled:Na,_wabt_set_threads_enabled:Ja,_wabt_sign_extension_enabled:Ea,_wabt_simd_enabled:Ga,_wabt_tail_call_enabled:Ma,_wabt_threads_enabled:Ia,_wabt_validate_module:Xa,_wabt_validate_script:Ya,_wabt_write_binary_module:ab,_wabt_write_binary_spec_script:Za,_wabt_write_module_result_get_result:rb,_wabt_write_module_result_release_log_output_buffer:tb,_wabt_write_module_result_release_output_buffer:sb,_wabt_write_text_module:bb,dynCall_ii:wC,dynCall_iii:HC,dynCall_iiii:SC,dynCall_iiiii:bD,dynCall_iiiiii:mD,dynCall_iiiiiii:xD,dynCall_iiiiiiii:ID,dynCall_v:TD,dynCall_vi:cE,dynCall_vii:nE,dynCall_viii:yE,dynCall_viiii:JE,dynCall_viiiii:UE,dynCall_viiiiii:dF,establishStackSpace:va,stackAlloc:sa,stackRestore:ua,stackSave:ta}})
+
+
+// EMSCRIPTEN_END_ASM
+(asmGlobalArg,asmLibraryArg,buffer);var ___emscripten_environ_constructor=Module["___emscripten_environ_constructor"]=asm["___emscripten_environ_constructor"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var __get_environ=Module["__get_environ"]=asm["__get_environ"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _dummy_workaround_for_emscripten_issue_7073=Module["_dummy_workaround_for_emscripten_issue_7073"]=asm["_dummy_workaround_for_emscripten_issue_7073"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _llvm_ctlz_i64=Module["_llvm_ctlz_i64"]=asm["_llvm_ctlz_i64"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _wabt_apply_names_module=Module["_wabt_apply_names_module"]=asm["_wabt_apply_names_module"];var _wabt_bulk_memory_enabled=Module["_wabt_bulk_memory_enabled"]=asm["_wabt_bulk_memory_enabled"];var _wabt_destroy_errors=Module["_wabt_destroy_errors"]=asm["_wabt_destroy_errors"];var _wabt_destroy_features=Module["_wabt_destroy_features"]=asm["_wabt_destroy_features"];var _wabt_destroy_module=Module["_wabt_destroy_module"]=asm["_wabt_destroy_module"];var _wabt_destroy_output_buffer=Module["_wabt_destroy_output_buffer"]=asm["_wabt_destroy_output_buffer"];var _wabt_destroy_parse_wat_result=Module["_wabt_destroy_parse_wat_result"]=asm["_wabt_destroy_parse_wat_result"];var _wabt_destroy_read_binary_result=Module["_wabt_destroy_read_binary_result"]=asm["_wabt_destroy_read_binary_result"];var _wabt_destroy_wast_lexer=Module["_wabt_destroy_wast_lexer"]=asm["_wabt_destroy_wast_lexer"];var _wabt_destroy_write_module_result=Module["_wabt_destroy_write_module_result"]=asm["_wabt_destroy_write_module_result"];var _wabt_exceptions_enabled=Module["_wabt_exceptions_enabled"]=asm["_wabt_exceptions_enabled"];var _wabt_format_binary_errors=Module["_wabt_format_binary_errors"]=asm["_wabt_format_binary_errors"];var _wabt_format_text_errors=Module["_wabt_format_text_errors"]=asm["_wabt_format_text_errors"];var _wabt_generate_names_module=Module["_wabt_generate_names_module"]=asm["_wabt_generate_names_module"];var _wabt_multi_value_enabled=Module["_wabt_multi_value_enabled"]=asm["_wabt_multi_value_enabled"];var _wabt_mutable_globals_enabled=Module["_wabt_mutable_globals_enabled"]=asm["_wabt_mutable_globals_enabled"];var _wabt_new_errors=Module["_wabt_new_errors"]=asm["_wabt_new_errors"];var _wabt_new_features=Module["_wabt_new_features"]=asm["_wabt_new_features"];var _wabt_new_wast_buffer_lexer=Module["_wabt_new_wast_buffer_lexer"]=asm["_wabt_new_wast_buffer_lexer"];var _wabt_output_buffer_get_data=Module["_wabt_output_buffer_get_data"]=asm["_wabt_output_buffer_get_data"];var _wabt_output_buffer_get_size=Module["_wabt_output_buffer_get_size"]=asm["_wabt_output_buffer_get_size"];var _wabt_parse_wast=Module["_wabt_parse_wast"]=asm["_wabt_parse_wast"];var _wabt_parse_wast_result_get_result=Module["_wabt_parse_wast_result_get_result"]=asm["_wabt_parse_wast_result_get_result"];var _wabt_parse_wast_result_release_module=Module["_wabt_parse_wast_result_release_module"]=asm["_wabt_parse_wast_result_release_module"];var _wabt_parse_wat=Module["_wabt_parse_wat"]=asm["_wabt_parse_wat"];var _wabt_parse_wat_result_get_result=Module["_wabt_parse_wat_result_get_result"]=asm["_wabt_parse_wat_result_get_result"];var _wabt_parse_wat_result_release_module=Module["_wabt_parse_wat_result_release_module"]=asm["_wabt_parse_wat_result_release_module"];var _wabt_read_binary=Module["_wabt_read_binary"]=asm["_wabt_read_binary"];var _wabt_read_binary_result_get_result=Module["_wabt_read_binary_result_get_result"]=asm["_wabt_read_binary_result_get_result"];var _wabt_read_binary_result_release_module=Module["_wabt_read_binary_result_release_module"]=asm["_wabt_read_binary_result_release_module"];var _wabt_reference_types_enabled=Module["_wabt_reference_types_enabled"]=asm["_wabt_reference_types_enabled"];var _wabt_resolve_names_module=Module["_wabt_resolve_names_module"]=asm["_wabt_resolve_names_module"];var _wabt_sat_float_to_int_enabled=Module["_wabt_sat_float_to_int_enabled"]=asm["_wabt_sat_float_to_int_enabled"];var _wabt_set_bulk_memory_enabled=Module["_wabt_set_bulk_memory_enabled"]=asm["_wabt_set_bulk_memory_enabled"];var _wabt_set_exceptions_enabled=Module["_wabt_set_exceptions_enabled"]=asm["_wabt_set_exceptions_enabled"];var _wabt_set_multi_value_enabled=Module["_wabt_set_multi_value_enabled"]=asm["_wabt_set_multi_value_enabled"];var _wabt_set_mutable_globals_enabled=Module["_wabt_set_mutable_globals_enabled"]=asm["_wabt_set_mutable_globals_enabled"];var _wabt_set_reference_types_enabled=Module["_wabt_set_reference_types_enabled"]=asm["_wabt_set_reference_types_enabled"];var _wabt_set_sat_float_to_int_enabled=Module["_wabt_set_sat_float_to_int_enabled"]=asm["_wabt_set_sat_float_to_int_enabled"];var _wabt_set_sign_extension_enabled=Module["_wabt_set_sign_extension_enabled"]=asm["_wabt_set_sign_extension_enabled"];var _wabt_set_simd_enabled=Module["_wabt_set_simd_enabled"]=asm["_wabt_set_simd_enabled"];var _wabt_set_tail_call_enabled=Module["_wabt_set_tail_call_enabled"]=asm["_wabt_set_tail_call_enabled"];var _wabt_set_threads_enabled=Module["_wabt_set_threads_enabled"]=asm["_wabt_set_threads_enabled"];var _wabt_sign_extension_enabled=Module["_wabt_sign_extension_enabled"]=asm["_wabt_sign_extension_enabled"];var _wabt_simd_enabled=Module["_wabt_simd_enabled"]=asm["_wabt_simd_enabled"];var _wabt_tail_call_enabled=Module["_wabt_tail_call_enabled"]=asm["_wabt_tail_call_enabled"];var _wabt_threads_enabled=Module["_wabt_threads_enabled"]=asm["_wabt_threads_enabled"];var _wabt_validate_module=Module["_wabt_validate_module"]=asm["_wabt_validate_module"];var _wabt_validate_script=Module["_wabt_validate_script"]=asm["_wabt_validate_script"];var _wabt_write_binary_module=Module["_wabt_write_binary_module"]=asm["_wabt_write_binary_module"];var _wabt_write_binary_spec_script=Module["_wabt_write_binary_spec_script"]=asm["_wabt_write_binary_spec_script"];var _wabt_write_module_result_get_result=Module["_wabt_write_module_result_get_result"]=asm["_wabt_write_module_result_get_result"];var _wabt_write_module_result_release_log_output_buffer=Module["_wabt_write_module_result_release_log_output_buffer"]=asm["_wabt_write_module_result_release_log_output_buffer"];var _wabt_write_module_result_release_output_buffer=Module["_wabt_write_module_result_release_output_buffer"]=asm["_wabt_write_module_result_release_output_buffer"];var _wabt_write_text_module=Module["_wabt_write_text_module"]=asm["_wabt_write_text_module"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];Module["asm"]=asm;if(memoryInitializer){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")};var doBrowserLoad=function(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,function(){throw"could not load memory initializer "+memoryInitializer})};var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module["memoryInitializerRequest"]){var useRequest=function(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)};if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}Module["then"]=function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){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"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run();var WABT_OK=0;var FEATURES=["exceptions","mutable_globals","sat_float_to_int","sign_extension","simd","threads","multi_value","tail_call","bulk_memory","reference_types"];function maybeDefault(value,default_){if(value===undefined){return default_}return value}function booleanOrDefault(value,default_){return!!maybeDefault(value,default_)}function malloc(size){var addr=Module._malloc(size);if(addr==0){throw new Error("out of memory")}return addr}function allocateBuffer(buf){var addr;var size;if(buf instanceof ArrayBuffer){size=buf.byteLength;addr=malloc(size);new Uint8Array(HEAP8.buffer,addr,size).set(new Uint8Array(buf))}else if(ArrayBuffer.isView(buf)){size=buf.buffer.byteLength;addr=malloc(size);new Uint8Array(HEAP8.buffer,addr,size).set(buf)}else if(typeof buf=="string"){size=buf.length;addr=malloc(size);writeAsciiToMemory(buf,addr,true)}else{throw new Error("unknown buffer type: "+buf)}return{addr:addr,size:size}}function allocateCString(s){var size=s.length;var addr=malloc(size);writeAsciiToMemory(s,addr);return{addr:addr,size:size}}function Features(obj){this.addr=Module._wabt_new_features();for(var i=0;i<FEATURES.length;++i){var feature=FEATURES[i];this[feature]=obj[feature]|0}}Features.prototype=Object.create(Object.prototype);Features.prototype.destroy=function(){Module._wabt_destroy_features(this.addr)};FEATURES.forEach(function(feature){Object.defineProperty(Features.prototype,feature,{enumerable:true,get:function(){return Module["_wabt_"+feature+"_enabled"](this.addr)},set:function(newValue){Module["_wabt_set_"+feature+"_enabled"](this.addr,newValue|0)}})});function Lexer(filename,buffer){this.filenameObj=allocateCString(filename);this.bufferObj=allocateBuffer(buffer);this.addr=Module._wabt_new_wast_buffer_lexer(this.filenameObj.addr,this.bufferObj.addr,this.bufferObj.size)}Lexer.prototype=Object.create(Object.prototype);Lexer.prototype.destroy=function(){Module._wabt_destroy_wast_lexer(this.addr);Module._free(this.bufferObj.addr);Module._free(this.filenameObj.addr)};function OutputBuffer(addr){this.addr=addr}OutputBuffer.prototype=Object.create(Object.prototype);OutputBuffer.prototype.toTypedArray=function(){if(!this.addr){return null}var addr=Module._wabt_output_buffer_get_data(this.addr);var size=Module._wabt_output_buffer_get_size(this.addr);var buffer=new Uint8Array(size);buffer.set(new Uint8Array(HEAPU8.buffer,addr,size));return buffer};OutputBuffer.prototype.toString=function(){if(!this.addr){return""}var addr=Module._wabt_output_buffer_get_data(this.addr);var size=Module._wabt_output_buffer_get_size(this.addr);return UTF8ToString(addr,size)};OutputBuffer.prototype.destroy=function(){Module._wabt_destroy_output_buffer(this.addr)};function Errors(kind,lexer){this.kind=kind;this.addr=Module._wabt_new_errors();this.lexer=lexer}Errors.prototype=Object.create(Object.prototype);Errors.prototype.format=function(){var buffer;switch(this.kind){case"text":buffer=new OutputBuffer(Module._wabt_format_text_errors(this.addr,this.lexer.addr));break;case"binary":buffer=new OutputBuffer(Module._wabt_format_binary_errors(this.addr));break;default:throw new Error("Invalid Errors kind: "+this.kind)}var message=buffer.toString();buffer.destroy();return message};Errors.prototype.destroy=function(){Module._wabt_destroy_errors(this.addr);if(this.lexer){this.lexer.destroy()}};function parseWat(filename,buffer,options){var lexer=new Lexer(filename,buffer);var errors=new Errors("text",lexer);var features=new Features(options||{});try{var parseResult_addr=Module._wabt_parse_wat(lexer.addr,features.addr,errors.addr);var result=Module._wabt_parse_wat_result_get_result(parseResult_addr);if(result!==WABT_OK){throw new Error("parseWat failed:\n"+errors.format())}var module_addr=Module._wabt_parse_wat_result_release_module(parseResult_addr);var result=new WasmModule(module_addr,errors);errors=null;return result}finally{Module._wabt_destroy_parse_wat_result(parseResult_addr);features.destroy();if(errors){errors.destroy()}}}function readWasm(buffer,options){var bufferObj=allocateBuffer(buffer);var errors=new Errors("binary");var readDebugNames=booleanOrDefault(options.readDebugNames,false);var features=new Features(options);try{var readBinaryResult_addr=Module._wabt_read_binary(bufferObj.addr,bufferObj.size,readDebugNames,features.addr,errors.addr);var result=Module._wabt_read_binary_result_get_result(readBinaryResult_addr);if(result!==WABT_OK){throw new Error("readWasm failed:\n"+errors.format())}var module_addr=Module._wabt_read_binary_result_release_module(readBinaryResult_addr);var result=new WasmModule(module_addr,errors);errors=null;return result}finally{Module._wabt_destroy_read_binary_result(readBinaryResult_addr);features.destroy();if(errors){errors.destroy()}Module._free(bufferObj.addr)}}function WasmModule(module_addr,errors){this.module_addr=module_addr;this.errors=errors}WasmModule.prototype=Object.create(Object.prototype);WasmModule.prototype.validate=function(options){var features=new Features(options||{});try{var result=Module._wabt_validate_module(this.module_addr,features.addr,this.errors.addr);if(result!==WABT_OK){throw new Error("validate failed:\n"+this.errors.format())}}finally{features.destroy()}};WasmModule.prototype.resolveNames=function(){var result=Module._wabt_resolve_names_module(this.module_addr,this.errors.addr);if(result!==WABT_OK){throw new Error("resolveNames failed:\n"+this.errors.format())}};WasmModule.prototype.generateNames=function(){var result=Module._wabt_generate_names_module(this.module_addr);if(result!==WABT_OK){throw new Error("generateNames failed.")}};WasmModule.prototype.applyNames=function(){var result=Module._wabt_apply_names_module(this.module_addr);if(result!==WABT_OK){throw new Error("applyNames failed.")}};WasmModule.prototype.toText=function(options){var foldExprs=booleanOrDefault(options.foldExprs,false);var inlineExport=booleanOrDefault(options.inlineExport,false);var writeModuleResult_addr=Module._wabt_write_text_module(this.module_addr,foldExprs,inlineExport);var result=Module._wabt_write_module_result_get_result(writeModuleResult_addr);try{if(result!==WABT_OK){throw new Error("toText failed.")}var outputBuffer=new OutputBuffer(Module._wabt_write_module_result_release_output_buffer(writeModuleResult_addr));return outputBuffer.toString()}finally{if(outputBuffer){outputBuffer.destroy()}Module._wabt_destroy_write_module_result(writeModuleResult_addr)}};WasmModule.prototype.toBinary=function(options){var log=booleanOrDefault(options.log,false);var canonicalize_lebs=booleanOrDefault(options.canonicalize_lebs,true);var relocatable=booleanOrDefault(options.relocatable,false);var write_debug_names=booleanOrDefault(options.write_debug_names,false);var writeModuleResult_addr=Module._wabt_write_binary_module(this.module_addr,log,canonicalize_lebs,relocatable,write_debug_names);var result=Module._wabt_write_module_result_get_result(writeModuleResult_addr);try{if(result!==WABT_OK){throw new Error("toBinary failed.")}var binaryOutputBuffer=new OutputBuffer(Module._wabt_write_module_result_release_output_buffer(writeModuleResult_addr));var logOutputBuffer=new OutputBuffer(Module._wabt_write_module_result_release_log_output_buffer(writeModuleResult_addr));return{buffer:binaryOutputBuffer.toTypedArray(),log:logOutputBuffer.toString()}}finally{if(binaryOutputBuffer){binaryOutputBuffer.destroy()}if(logOutputBuffer){logOutputBuffer.destroy()}Module._wabt_destroy_write_module_result(writeModuleResult_addr)}};WasmModule.prototype.destroy=function(){Module._wabt_destroy_module(this.module_addr);if(this.errors){this.errors.destroy()}};Module["parseWat"]=parseWat;Module["readWasm"]=readWasm;
+
+
+
+ return WabtModule;
+}
+);
+})();
+if (typeof exports === 'object' && typeof module === 'object')
+ module.exports = WabtModule;
+ else if (typeof define === 'function' && define['amd'])
+ define([], function() { return WabtModule; });
+ else if (typeof exports === 'object')
+ exports["WabtModule"] = WabtModule;
+ \ No newline at end of file
diff --git a/docs/demo/third_party/codemirror/LICENSE b/docs/demo/third_party/codemirror/LICENSE
new file mode 100644
index 00000000..ff7db4b9
--- /dev/null
+++ b/docs/demo/third_party/codemirror/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/docs/demo/third_party/codemirror/codemirror.css b/docs/demo/third_party/codemirror/codemirror.css
new file mode 100644
index 00000000..b962b383
--- /dev/null
+++ b/docs/demo/third_party/codemirror/codemirror.css
@@ -0,0 +1,340 @@
+/* BASICS */
+
+.CodeMirror {
+ /* Set height, width, borders, and global font properties here */
+ font-family: monospace;
+ height: 300px;
+ color: black;
+}
+
+/* PADDING */
+
+.CodeMirror-lines {
+ padding: 4px 0; /* Vertical padding around content */
+}
+.CodeMirror pre {
+ padding: 0 4px; /* Horizontal padding of content */
+}
+
+.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+ background-color: white; /* The little square between H and V scrollbars */
+}
+
+/* GUTTER */
+
+.CodeMirror-gutters {
+ border-right: 1px solid #ddd;
+ background-color: #f7f7f7;
+ white-space: nowrap;
+}
+.CodeMirror-linenumbers {}
+.CodeMirror-linenumber {
+ padding: 0 3px 0 5px;
+ min-width: 20px;
+ text-align: right;
+ color: #999;
+ white-space: nowrap;
+}
+
+.CodeMirror-guttermarker { color: black; }
+.CodeMirror-guttermarker-subtle { color: #999; }
+
+/* CURSOR */
+
+.CodeMirror-cursor {
+ border-left: 1px solid black;
+ border-right: none;
+ width: 0;
+}
+/* Shown when moving in bi-directional text */
+.CodeMirror div.CodeMirror-secondarycursor {
+ border-left: 1px solid silver;
+}
+.cm-fat-cursor .CodeMirror-cursor {
+ width: auto;
+ border: 0 !important;
+ background: #7e7;
+}
+.cm-fat-cursor div.CodeMirror-cursors {
+ z-index: 1;
+}
+
+.cm-animate-fat-cursor {
+ width: auto;
+ border: 0;
+ -webkit-animation: blink 1.06s steps(1) infinite;
+ -moz-animation: blink 1.06s steps(1) infinite;
+ animation: blink 1.06s steps(1) infinite;
+ background-color: #7e7;
+}
+@-moz-keyframes blink {
+ 0% {}
+ 50% { background-color: transparent; }
+ 100% {}
+}
+@-webkit-keyframes blink {
+ 0% {}
+ 50% { background-color: transparent; }
+ 100% {}
+}
+@keyframes blink {
+ 0% {}
+ 50% { background-color: transparent; }
+ 100% {}
+}
+
+/* Can style cursor different in overwrite (non-insert) mode */
+.CodeMirror-overwrite .CodeMirror-cursor {}
+
+.cm-tab { display: inline-block; text-decoration: inherit; }
+
+.CodeMirror-rulers {
+ position: absolute;
+ left: 0; right: 0; top: -50px; bottom: -20px;
+ overflow: hidden;
+}
+.CodeMirror-ruler {
+ border-left: 1px solid #ccc;
+ top: 0; bottom: 0;
+ position: absolute;
+}
+
+/* DEFAULT THEME */
+
+.cm-s-default .cm-header {color: blue;}
+.cm-s-default .cm-quote {color: #090;}
+.cm-negative {color: #d44;}
+.cm-positive {color: #292;}
+.cm-header, .cm-strong {font-weight: bold;}
+.cm-em {font-style: italic;}
+.cm-link {text-decoration: underline;}
+.cm-strikethrough {text-decoration: line-through;}
+
+.cm-s-default .cm-keyword {color: #708;}
+.cm-s-default .cm-atom {color: #219;}
+.cm-s-default .cm-number {color: #164;}
+.cm-s-default .cm-def {color: #00f;}
+.cm-s-default .cm-variable,
+.cm-s-default .cm-punctuation,
+.cm-s-default .cm-property,
+.cm-s-default .cm-operator {}
+.cm-s-default .cm-variable-2 {color: #05a;}
+.cm-s-default .cm-variable-3 {color: #085;}
+.cm-s-default .cm-comment {color: #a50;}
+.cm-s-default .cm-string {color: #a11;}
+.cm-s-default .cm-string-2 {color: #f50;}
+.cm-s-default .cm-meta {color: #555;}
+.cm-s-default .cm-qualifier {color: #555;}
+.cm-s-default .cm-builtin {color: #30a;}
+.cm-s-default .cm-bracket {color: #997;}
+.cm-s-default .cm-tag {color: #170;}
+.cm-s-default .cm-attribute {color: #00c;}
+.cm-s-default .cm-hr {color: #999;}
+.cm-s-default .cm-link {color: #00c;}
+
+.cm-s-default .cm-error {color: #f00;}
+.cm-invalidchar {color: #f00;}
+
+.CodeMirror-composing { border-bottom: 2px solid; }
+
+/* Default styles for common addons */
+
+div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
+div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
+.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
+.CodeMirror-activeline-background {background: #e8f2ff;}
+
+/* STOP */
+
+/* The rest of this file contains styles related to the mechanics of
+ the editor. You probably shouldn't touch them. */
+
+.CodeMirror {
+ position: relative;
+ overflow: hidden;
+ background: white;
+}
+
+.CodeMirror-scroll {
+ overflow: scroll !important; /* Things will break if this is overridden */
+ /* 30px is the magic margin used to hide the element's real scrollbars */
+ /* See overflow: hidden in .CodeMirror */
+ margin-bottom: -30px; margin-right: -30px;
+ padding-bottom: 30px;
+ height: 100%;
+ outline: none; /* Prevent dragging from highlighting the element */
+ position: relative;
+}
+.CodeMirror-sizer {
+ position: relative;
+ border-right: 30px solid transparent;
+}
+
+/* The fake, visible scrollbars. Used to force redraw during scrolling
+ before actual scrolling happens, thus preventing shaking and
+ flickering artifacts. */
+.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+ position: absolute;
+ z-index: 6;
+ display: none;
+}
+.CodeMirror-vscrollbar {
+ right: 0; top: 0;
+ overflow-x: hidden;
+ overflow-y: scroll;
+}
+.CodeMirror-hscrollbar {
+ bottom: 0; left: 0;
+ overflow-y: hidden;
+ overflow-x: scroll;
+}
+.CodeMirror-scrollbar-filler {
+ right: 0; bottom: 0;
+}
+.CodeMirror-gutter-filler {
+ left: 0; bottom: 0;
+}
+
+.CodeMirror-gutters {
+ position: absolute; left: 0; top: 0;
+ min-height: 100%;
+ z-index: 3;
+}
+.CodeMirror-gutter {
+ white-space: normal;
+ height: 100%;
+ display: inline-block;
+ vertical-align: top;
+ margin-bottom: -30px;
+}
+.CodeMirror-gutter-wrapper {
+ position: absolute;
+ z-index: 4;
+ background: none !important;
+ border: none !important;
+}
+.CodeMirror-gutter-background {
+ position: absolute;
+ top: 0; bottom: 0;
+ z-index: 4;
+}
+.CodeMirror-gutter-elt {
+ position: absolute;
+ cursor: default;
+ z-index: 4;
+}
+.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
+.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }
+
+.CodeMirror-lines {
+ cursor: text;
+ min-height: 1px; /* prevents collapsing before first draw */
+}
+.CodeMirror pre {
+ /* Reset some styles that the rest of the page might have set */
+ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
+ border-width: 0;
+ background: transparent;
+ font-family: inherit;
+ font-size: inherit;
+ margin: 0;
+ white-space: pre;
+ word-wrap: normal;
+ line-height: inherit;
+ color: inherit;
+ z-index: 2;
+ position: relative;
+ overflow: visible;
+ -webkit-tap-highlight-color: transparent;
+ -webkit-font-variant-ligatures: contextual;
+ font-variant-ligatures: contextual;
+}
+.CodeMirror-wrap pre {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ word-break: normal;
+}
+
+.CodeMirror-linebackground {
+ position: absolute;
+ left: 0; right: 0; top: 0; bottom: 0;
+ z-index: 0;
+}
+
+.CodeMirror-linewidget {
+ position: relative;
+ z-index: 2;
+ overflow: auto;
+}
+
+.CodeMirror-widget {}
+
+.CodeMirror-rtl pre { direction: rtl; }
+
+.CodeMirror-code {
+ outline: none;
+}
+
+/* Force content-box sizing for the elements where we expect it */
+.CodeMirror-scroll,
+.CodeMirror-sizer,
+.CodeMirror-gutter,
+.CodeMirror-gutters,
+.CodeMirror-linenumber {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+.CodeMirror-measure {
+ position: absolute;
+ width: 100%;
+ height: 0;
+ overflow: hidden;
+ visibility: hidden;
+}
+
+.CodeMirror-cursor {
+ position: absolute;
+ pointer-events: none;
+}
+.CodeMirror-measure pre { position: static; }
+
+div.CodeMirror-cursors {
+ visibility: hidden;
+ position: relative;
+ z-index: 3;
+}
+div.CodeMirror-dragcursors {
+ visibility: visible;
+}
+
+.CodeMirror-focused div.CodeMirror-cursors {
+ visibility: visible;
+}
+
+.CodeMirror-selected { background: #d9d9d9; }
+.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
+.CodeMirror-crosshair { cursor: crosshair; }
+.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
+.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
+
+.cm-searching {
+ background: #ffa;
+ background: rgba(255, 255, 0, .4);
+}
+
+/* Used to force a border model for a node */
+.cm-force-border { padding-right: .1px; }
+
+@media print {
+ /* Hide the cursor when printing */
+ .CodeMirror div.CodeMirror-cursors {
+ visibility: hidden;
+ }
+}
+
+/* See issue #2901 */
+.cm-tab-wrap-hack:after { content: ''; }
+
+/* Help users use markselection to safely style text background */
+span.CodeMirror-selectedtext { background: none; }
diff --git a/docs/demo/third_party/codemirror/codemirror.js b/docs/demo/third_party/codemirror/codemirror.js
new file mode 100644
index 00000000..8f2e33d5
--- /dev/null
+++ b/docs/demo/third_party/codemirror/codemirror.js
@@ -0,0 +1,9331 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// This is CodeMirror (http://codemirror.net), a code editor
+// implemented in JavaScript on top of the browser's DOM.
+//
+// You can find some technical background for some of the code below
+// at http://marijnhaverbeke.nl/blog/#cm-internals .
+
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global.CodeMirror = factory());
+}(this, (function () { 'use strict';
+
+// Kludges for bugs and behavior differences that can't be feature
+// detected are enabled based on userAgent etc sniffing.
+var userAgent = navigator.userAgent
+var platform = navigator.platform
+
+var gecko = /gecko\/\d/i.test(userAgent)
+var ie_upto10 = /MSIE \d/.test(userAgent)
+var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent)
+var edge = /Edge\/(\d+)/.exec(userAgent)
+var ie = ie_upto10 || ie_11up || edge
+var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1])
+var webkit = !edge && /WebKit\//.test(userAgent)
+var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent)
+var chrome = !edge && /Chrome\//.test(userAgent)
+var presto = /Opera\//.test(userAgent)
+var safari = /Apple Computer/.test(navigator.vendor)
+var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent)
+var phantom = /PhantomJS/.test(userAgent)
+
+var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent)
+var android = /Android/.test(userAgent)
+// This is woefully incomplete. Suggestions for alternative methods welcome.
+var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent)
+var mac = ios || /Mac/.test(platform)
+var chromeOS = /\bCrOS\b/.test(userAgent)
+var windows = /win/i.test(platform)
+
+var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/)
+if (presto_version) { presto_version = Number(presto_version[1]) }
+if (presto_version && presto_version >= 15) { presto = false; webkit = true }
+// Some browsers use the wrong event properties to signal cmd/ctrl on OS X
+var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11))
+var captureRightClick = gecko || (ie && ie_version >= 9)
+
+function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }
+
+var rmClass = function(node, cls) {
+ var current = node.className
+ var match = classTest(cls).exec(current)
+ if (match) {
+ var after = current.slice(match.index + match[0].length)
+ node.className = current.slice(0, match.index) + (after ? match[1] + after : "")
+ }
+}
+
+function removeChildren(e) {
+ for (var count = e.childNodes.length; count > 0; --count)
+ { e.removeChild(e.firstChild) }
+ return e
+}
+
+function removeChildrenAndAdd(parent, e) {
+ return removeChildren(parent).appendChild(e)
+}
+
+function elt(tag, content, className, style) {
+ var e = document.createElement(tag)
+ if (className) { e.className = className }
+ if (style) { e.style.cssText = style }
+ if (typeof content == "string") { e.appendChild(document.createTextNode(content)) }
+ else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]) } }
+ return e
+}
+// wrapper for elt, which removes the elt from the accessibility tree
+function eltP(tag, content, className, style) {
+ var e = elt(tag, content, className, style)
+ e.setAttribute("role", "presentation")
+ return e
+}
+
+var range
+if (document.createRange) { range = function(node, start, end, endNode) {
+ var r = document.createRange()
+ r.setEnd(endNode || node, end)
+ r.setStart(node, start)
+ return r
+} }
+else { range = function(node, start, end) {
+ var r = document.body.createTextRange()
+ try { r.moveToElementText(node.parentNode) }
+ catch(e) { return r }
+ r.collapse(true)
+ r.moveEnd("character", end)
+ r.moveStart("character", start)
+ return r
+} }
+
+function contains(parent, child) {
+ if (child.nodeType == 3) // Android browser always returns false when child is a textnode
+ { child = child.parentNode }
+ if (parent.contains)
+ { return parent.contains(child) }
+ do {
+ if (child.nodeType == 11) { child = child.host }
+ if (child == parent) { return true }
+ } while (child = child.parentNode)
+}
+
+function activeElt() {
+ // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement.
+ // IE < 10 will throw when accessed while the page is loading or in an iframe.
+ // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.
+ var activeElement
+ try {
+ activeElement = document.activeElement
+ } catch(e) {
+ activeElement = document.body || null
+ }
+ while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)
+ { activeElement = activeElement.shadowRoot.activeElement }
+ return activeElement
+}
+
+function addClass(node, cls) {
+ var current = node.className
+ if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls }
+}
+function joinClasses(a, b) {
+ var as = a.split(" ")
+ for (var i = 0; i < as.length; i++)
+ { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i] } }
+ return b
+}
+
+var selectInput = function(node) { node.select() }
+if (ios) // Mobile Safari apparently has a bug where select() is broken.
+ { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length } }
+else if (ie) // Suppress mysterious IE10 errors
+ { selectInput = function(node) { try { node.select() } catch(_e) {} } }
+
+function bind(f) {
+ var args = Array.prototype.slice.call(arguments, 1)
+ return function(){return f.apply(null, args)}
+}
+
+function copyObj(obj, target, overwrite) {
+ if (!target) { target = {} }
+ for (var prop in obj)
+ { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
+ { target[prop] = obj[prop] } }
+ return target
+}
+
+// Counts the column offset in a string, taking tabs into account.
+// Used mostly to find indentation.
+function countColumn(string, end, tabSize, startIndex, startValue) {
+ if (end == null) {
+ end = string.search(/[^\s\u00a0]/)
+ if (end == -1) { end = string.length }
+ }
+ for (var i = startIndex || 0, n = startValue || 0;;) {
+ var nextTab = string.indexOf("\t", i)
+ if (nextTab < 0 || nextTab >= end)
+ { return n + (end - i) }
+ n += nextTab - i
+ n += tabSize - (n % tabSize)
+ i = nextTab + 1
+ }
+}
+
+var Delayed = function() {this.id = null};
+Delayed.prototype.set = function (ms, f) {
+ clearTimeout(this.id)
+ this.id = setTimeout(f, ms)
+};
+
+function indexOf(array, elt) {
+ for (var i = 0; i < array.length; ++i)
+ { if (array[i] == elt) { return i } }
+ return -1
+}
+
+// Number of pixels added to scroller and sizer to hide scrollbar
+var scrollerGap = 30
+
+// Returned or thrown by various protocols to signal 'I'm not
+// handling this'.
+var Pass = {toString: function(){return "CodeMirror.Pass"}}
+
+// Reused option objects for setSelection & friends
+var sel_dontScroll = {scroll: false};
+var sel_mouse = {origin: "*mouse"};
+var sel_move = {origin: "+move"};
+// The inverse of countColumn -- find the offset that corresponds to
+// a particular column.
+function findColumn(string, goal, tabSize) {
+ for (var pos = 0, col = 0;;) {
+ var nextTab = string.indexOf("\t", pos)
+ if (nextTab == -1) { nextTab = string.length }
+ var skipped = nextTab - pos
+ if (nextTab == string.length || col + skipped >= goal)
+ { return pos + Math.min(skipped, goal - col) }
+ col += nextTab - pos
+ col += tabSize - (col % tabSize)
+ pos = nextTab + 1
+ if (col >= goal) { return pos }
+ }
+}
+
+var spaceStrs = [""]
+function spaceStr(n) {
+ while (spaceStrs.length <= n)
+ { spaceStrs.push(lst(spaceStrs) + " ") }
+ return spaceStrs[n]
+}
+
+function lst(arr) { return arr[arr.length-1] }
+
+function map(array, f) {
+ var out = []
+ for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i) }
+ return out
+}
+
+function insertSorted(array, value, score) {
+ var pos = 0, priority = score(value)
+ while (pos < array.length && score(array[pos]) <= priority) { pos++ }
+ array.splice(pos, 0, value)
+}
+
+function nothing() {}
+
+function createObj(base, props) {
+ var inst
+ if (Object.create) {
+ inst = Object.create(base)
+ } else {
+ nothing.prototype = base
+ inst = new nothing()
+ }
+ if (props) { copyObj(props, inst) }
+ return inst
+}
+
+var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/
+function isWordCharBasic(ch) {
+ return /\w/.test(ch) || ch > "\x80" &&
+ (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))
+}
+function isWordChar(ch, helper) {
+ if (!helper) { return isWordCharBasic(ch) }
+ if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true }
+ return helper.test(ch)
+}
+
+function isEmpty(obj) {
+ for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
+ return true
+}
+
+// Extending unicode characters. A series of a non-extending char +
+// any number of extending chars is treated as a single unit as far
+// as editing and measuring is concerned. This is not fully correct,
+// since some scripts/fonts/browsers also treat other configurations
+// of code points as a group.
+var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/
+function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }
+
+// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.
+function skipExtendingChars(str, pos, dir) {
+ while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir }
+ return pos
+}
+
+// Returns the value from the range [`from`; `to`] that satisfies
+// `pred` and is closest to `from`. Assumes that at least `to` satisfies `pred`.
+function findFirst(pred, from, to) {
+ for (;;) {
+ if (Math.abs(from - to) <= 1) { return pred(from) ? from : to }
+ var mid = Math.floor((from + to) / 2)
+ if (pred(mid)) { to = mid }
+ else { from = mid }
+ }
+}
+
+// The display handles the DOM integration, both for input reading
+// and content drawing. It holds references to DOM nodes and
+// display-related state.
+
+function Display(place, doc, input) {
+ var d = this
+ this.input = input
+
+ // Covers bottom-right square when both scrollbars are present.
+ d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler")
+ d.scrollbarFiller.setAttribute("cm-not-content", "true")
+ // Covers bottom of gutter when coverGutterNextToScrollbar is on
+ // and h scrollbar is present.
+ d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler")
+ d.gutterFiller.setAttribute("cm-not-content", "true")
+ // Will contain the actual code, positioned to cover the viewport.
+ d.lineDiv = eltP("div", null, "CodeMirror-code")
+ // Elements are added to these to represent selection and cursors.
+ d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1")
+ d.cursorDiv = elt("div", null, "CodeMirror-cursors")
+ // A visibility: hidden element used to find the size of things.
+ d.measure = elt("div", null, "CodeMirror-measure")
+ // When lines outside of the viewport are measured, they are drawn in this.
+ d.lineMeasure = elt("div", null, "CodeMirror-measure")
+ // Wraps everything that needs to exist inside the vertically-padded coordinate system
+ d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
+ null, "position: relative; outline: none")
+ var lines = eltP("div", [d.lineSpace], "CodeMirror-lines")
+ // Moved around its parent to cover visible view.
+ d.mover = elt("div", [lines], null, "position: relative")
+ // Set to the height of the document, allowing scrolling.
+ d.sizer = elt("div", [d.mover], "CodeMirror-sizer")
+ d.sizerWidth = null
+ // Behavior of elts with overflow: auto and padding is
+ // inconsistent across browsers. This is used to ensure the
+ // scrollable area is big enough.
+ d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;")
+ // Will contain the gutters, if any.
+ d.gutters = elt("div", null, "CodeMirror-gutters")
+ d.lineGutter = null
+ // Actual scrollable element.
+ d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll")
+ d.scroller.setAttribute("tabIndex", "-1")
+ // The element in which the editor lives.
+ d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror")
+
+ // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
+ if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0 }
+ if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true }
+
+ if (place) {
+ if (place.appendChild) { place.appendChild(d.wrapper) }
+ else { place(d.wrapper) }
+ }
+
+ // Current rendered range (may be bigger than the view window).
+ d.viewFrom = d.viewTo = doc.first
+ d.reportedViewFrom = d.reportedViewTo = doc.first
+ // Information about the rendered lines.
+ d.view = []
+ d.renderedView = null
+ // Holds info about a single rendered line when it was rendered
+ // for measurement, while not in view.
+ d.externalMeasured = null
+ // Empty space (in pixels) above the view
+ d.viewOffset = 0
+ d.lastWrapHeight = d.lastWrapWidth = 0
+ d.updateLineNumbers = null
+
+ d.nativeBarWidth = d.barHeight = d.barWidth = 0
+ d.scrollbarsClipped = false
+
+ // Used to only resize the line number gutter when necessary (when
+ // the amount of lines crosses a boundary that makes its width change)
+ d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null
+ // Set to true when a non-horizontal-scrolling line widget is
+ // added. As an optimization, line widget aligning is skipped when
+ // this is false.
+ d.alignWidgets = false
+
+ d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null
+
+ // Tracks the maximum line length so that the horizontal scrollbar
+ // can be kept static when scrolling.
+ d.maxLine = null
+ d.maxLineLength = 0
+ d.maxLineChanged = false
+
+ // Used for measuring wheel scrolling granularity
+ d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null
+
+ // True when shift is held down.
+ d.shift = false
+
+ // Used to track whether anything happened since the context menu
+ // was opened.
+ d.selForContextMenu = null
+
+ d.activeTouch = null
+
+ input.init(d)
+}
+
+// Find the line object corresponding to the given line number.
+function getLine(doc, n) {
+ n -= doc.first
+ if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") }
+ var chunk = doc
+ while (!chunk.lines) {
+ for (var i = 0;; ++i) {
+ var child = chunk.children[i], sz = child.chunkSize()
+ if (n < sz) { chunk = child; break }
+ n -= sz
+ }
+ }
+ return chunk.lines[n]
+}
+
+// Get the part of a document between two positions, as an array of
+// strings.
+function getBetween(doc, start, end) {
+ var out = [], n = start.line
+ doc.iter(start.line, end.line + 1, function (line) {
+ var text = line.text
+ if (n == end.line) { text = text.slice(0, end.ch) }
+ if (n == start.line) { text = text.slice(start.ch) }
+ out.push(text)
+ ++n
+ })
+ return out
+}
+// Get the lines between from and to, as array of strings.
+function getLines(doc, from, to) {
+ var out = []
+ doc.iter(from, to, function (line) { out.push(line.text) }) // iter aborts when callback returns truthy value
+ return out
+}
+
+// Update the height of a line, propagating the height change
+// upwards to parent nodes.
+function updateLineHeight(line, height) {
+ var diff = height - line.height
+ if (diff) { for (var n = line; n; n = n.parent) { n.height += diff } }
+}
+
+// Given a line object, find its line number by walking up through
+// its parent links.
+function lineNo(line) {
+ if (line.parent == null) { return null }
+ var cur = line.parent, no = indexOf(cur.lines, line)
+ for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
+ for (var i = 0;; ++i) {
+ if (chunk.children[i] == cur) { break }
+ no += chunk.children[i].chunkSize()
+ }
+ }
+ return no + cur.first
+}
+
+// Find the line at the given vertical position, using the height
+// information in the document tree.
+function lineAtHeight(chunk, h) {
+ var n = chunk.first
+ outer: do {
+ for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
+ var child = chunk.children[i$1], ch = child.height
+ if (h < ch) { chunk = child; continue outer }
+ h -= ch
+ n += child.chunkSize()
+ }
+ return n
+ } while (!chunk.lines)
+ var i = 0
+ for (; i < chunk.lines.length; ++i) {
+ var line = chunk.lines[i], lh = line.height
+ if (h < lh) { break }
+ h -= lh
+ }
+ return n + i
+}
+
+function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}
+
+function lineNumberFor(options, i) {
+ return String(options.lineNumberFormatter(i + options.firstLineNumber))
+}
+
+// A Pos instance represents a position within the text.
+function Pos(line, ch, sticky) {
+ if ( sticky === void 0 ) sticky = null;
+
+ if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }
+ this.line = line
+ this.ch = ch
+ this.sticky = sticky
+}
+
+// Compare two positions, return 0 if they are the same, a negative
+// number when a is less, and a positive number otherwise.
+function cmp(a, b) { return a.line - b.line || a.ch - b.ch }
+
+function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }
+
+function copyPos(x) {return Pos(x.line, x.ch)}
+function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }
+function minPos(a, b) { return cmp(a, b) < 0 ? a : b }
+
+// Most of the external API clips given positions to make sure they
+// actually exist within the document.
+function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}
+function clipPos(doc, pos) {
+ if (pos.line < doc.first) { return Pos(doc.first, 0) }
+ var last = doc.first + doc.size - 1
+ if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }
+ return clipToLen(pos, getLine(doc, pos.line).text.length)
+}
+function clipToLen(pos, linelen) {
+ var ch = pos.ch
+ if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }
+ else if (ch < 0) { return Pos(pos.line, 0) }
+ else { return pos }
+}
+function clipPosArray(doc, array) {
+ var out = []
+ for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]) }
+ return out
+}
+
+// Optimize some code when these features are not used.
+var sawReadOnlySpans = false;
+var sawCollapsedSpans = false;
+function seeReadOnlySpans() {
+ sawReadOnlySpans = true
+}
+
+function seeCollapsedSpans() {
+ sawCollapsedSpans = true
+}
+
+// TEXTMARKER SPANS
+
+function MarkedSpan(marker, from, to) {
+ this.marker = marker
+ this.from = from; this.to = to
+}
+
+// Search an array of spans for a span matching the given marker.
+function getMarkedSpanFor(spans, marker) {
+ if (spans) { for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i]
+ if (span.marker == marker) { return span }
+ } }
+}
+// Remove a span from an array, returning undefined if no spans are
+// left (we don't store arrays for lines without spans).
+function removeMarkedSpan(spans, span) {
+ var r
+ for (var i = 0; i < spans.length; ++i)
+ { if (spans[i] != span) { (r || (r = [])).push(spans[i]) } }
+ return r
+}
+// Add a span to a line.
+function addMarkedSpan(line, span) {
+ line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]
+ span.marker.attachLine(line)
+}
+
+// Used for the algorithm that adjusts markers for a change in the
+// document. These functions cut an array of spans at a given
+// character position, returning an array of remaining chunks (or
+// undefined if nothing remains).
+function markedSpansBefore(old, startCh, isInsert) {
+ var nw
+ if (old) { for (var i = 0; i < old.length; ++i) {
+ var span = old[i], marker = span.marker
+ var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh)
+ if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
+ var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)
+ ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to))
+ }
+ } }
+ return nw
+}
+function markedSpansAfter(old, endCh, isInsert) {
+ var nw
+ if (old) { for (var i = 0; i < old.length; ++i) {
+ var span = old[i], marker = span.marker
+ var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh)
+ if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
+ var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)
+ ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
+ span.to == null ? null : span.to - endCh))
+ }
+ } }
+ return nw
+}
+
+// Given a change object, compute the new set of marker spans that
+// cover the line in which the change took place. Removes spans
+// entirely within the change, reconnects spans belonging to the
+// same marker that appear on both sides of the change, and cuts off
+// spans partially within the change. Returns an array of span
+// arrays with one element for each line in (after) the change.
+function stretchSpansOverChange(doc, change) {
+ if (change.full) { return null }
+ var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans
+ var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans
+ if (!oldFirst && !oldLast) { return null }
+
+ var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0
+ // Get the spans that 'stick out' on both sides
+ var first = markedSpansBefore(oldFirst, startCh, isInsert)
+ var last = markedSpansAfter(oldLast, endCh, isInsert)
+
+ // Next, merge those two ends
+ var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0)
+ if (first) {
+ // Fix up .to properties of first
+ for (var i = 0; i < first.length; ++i) {
+ var span = first[i]
+ if (span.to == null) {
+ var found = getMarkedSpanFor(last, span.marker)
+ if (!found) { span.to = startCh }
+ else if (sameLine) { span.to = found.to == null ? null : found.to + offset }
+ }
+ }
+ }
+ if (last) {
+ // Fix up .from in last (or move them into first in case of sameLine)
+ for (var i$1 = 0; i$1 < last.length; ++i$1) {
+ var span$1 = last[i$1]
+ if (span$1.to != null) { span$1.to += offset }
+ if (span$1.from == null) {
+ var found$1 = getMarkedSpanFor(first, span$1.marker)
+ if (!found$1) {
+ span$1.from = offset
+ if (sameLine) { (first || (first = [])).push(span$1) }
+ }
+ } else {
+ span$1.from += offset
+ if (sameLine) { (first || (first = [])).push(span$1) }
+ }
+ }
+ }
+ // Make sure we didn't create any zero-length spans
+ if (first) { first = clearEmptySpans(first) }
+ if (last && last != first) { last = clearEmptySpans(last) }
+
+ var newMarkers = [first]
+ if (!sameLine) {
+ // Fill gap with whole-line-spans
+ var gap = change.text.length - 2, gapMarkers
+ if (gap > 0 && first)
+ { for (var i$2 = 0; i$2 < first.length; ++i$2)
+ { if (first[i$2].to == null)
+ { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)) } } }
+ for (var i$3 = 0; i$3 < gap; ++i$3)
+ { newMarkers.push(gapMarkers) }
+ newMarkers.push(last)
+ }
+ return newMarkers
+}
+
+// Remove spans that are empty and don't have a clearWhenEmpty
+// option of false.
+function clearEmptySpans(spans) {
+ for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i]
+ if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
+ { spans.splice(i--, 1) }
+ }
+ if (!spans.length) { return null }
+ return spans
+}
+
+// Used to 'clip' out readOnly ranges when making a change.
+function removeReadOnlyRanges(doc, from, to) {
+ var markers = null
+ doc.iter(from.line, to.line + 1, function (line) {
+ if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+ var mark = line.markedSpans[i].marker
+ if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
+ { (markers || (markers = [])).push(mark) }
+ } }
+ })
+ if (!markers) { return null }
+ var parts = [{from: from, to: to}]
+ for (var i = 0; i < markers.length; ++i) {
+ var mk = markers[i], m = mk.find(0)
+ for (var j = 0; j < parts.length; ++j) {
+ var p = parts[j]
+ if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }
+ var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to)
+ if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
+ { newParts.push({from: p.from, to: m.from}) }
+ if (dto > 0 || !mk.inclusiveRight && !dto)
+ { newParts.push({from: m.to, to: p.to}) }
+ parts.splice.apply(parts, newParts)
+ j += newParts.length - 3
+ }
+ }
+ return parts
+}
+
+// Connect or disconnect spans from a line.
+function detachMarkedSpans(line) {
+ var spans = line.markedSpans
+ if (!spans) { return }
+ for (var i = 0; i < spans.length; ++i)
+ { spans[i].marker.detachLine(line) }
+ line.markedSpans = null
+}
+function attachMarkedSpans(line, spans) {
+ if (!spans) { return }
+ for (var i = 0; i < spans.length; ++i)
+ { spans[i].marker.attachLine(line) }
+ line.markedSpans = spans
+}
+
+// Helpers used when computing which overlapping collapsed span
+// counts as the larger one.
+function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }
+function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }
+
+// Returns a number indicating which of two overlapping collapsed
+// spans is larger (and thus includes the other). Falls back to
+// comparing ids when the spans cover exactly the same range.
+function compareCollapsedMarkers(a, b) {
+ var lenDiff = a.lines.length - b.lines.length
+ if (lenDiff != 0) { return lenDiff }
+ var aPos = a.find(), bPos = b.find()
+ var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b)
+ if (fromCmp) { return -fromCmp }
+ var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b)
+ if (toCmp) { return toCmp }
+ return b.id - a.id
+}
+
+// Find out whether a line ends or starts in a collapsed span. If
+// so, return the marker for that span.
+function collapsedSpanAtSide(line, start) {
+ var sps = sawCollapsedSpans && line.markedSpans, found
+ if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+ sp = sps[i]
+ if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
+ (!found || compareCollapsedMarkers(found, sp.marker) < 0))
+ { found = sp.marker }
+ } }
+ return found
+}
+function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
+function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }
+
+// Test whether there exists a collapsed span that partially
+// overlaps (covers the start or end, but not both) of a new span.
+// Such overlap is not allowed.
+function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
+ var line = getLine(doc, lineNo)
+ var sps = sawCollapsedSpans && line.markedSpans
+ if (sps) { for (var i = 0; i < sps.length; ++i) {
+ var sp = sps[i]
+ if (!sp.marker.collapsed) { continue }
+ var found = sp.marker.find(0)
+ var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker)
+ var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker)
+ if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }
+ if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
+ fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
+ { return true }
+ } }
+}
+
+// A visual line is a line as drawn on the screen. Folding, for
+// example, can cause multiple logical lines to appear on the same
+// visual line. This finds the start of the visual line that the
+// given line is part of (usually that is the line itself).
+function visualLine(line) {
+ var merged
+ while (merged = collapsedSpanAtStart(line))
+ { line = merged.find(-1, true).line }
+ return line
+}
+
+function visualLineEnd(line) {
+ var merged
+ while (merged = collapsedSpanAtEnd(line))
+ { line = merged.find(1, true).line }
+ return line
+}
+
+// Returns an array of logical lines that continue the visual line
+// started by the argument, or undefined if there are no such lines.
+function visualLineContinued(line) {
+ var merged, lines
+ while (merged = collapsedSpanAtEnd(line)) {
+ line = merged.find(1, true).line
+ ;(lines || (lines = [])).push(line)
+ }
+ return lines
+}
+
+// Get the line number of the start of the visual line that the
+// given line number is part of.
+function visualLineNo(doc, lineN) {
+ var line = getLine(doc, lineN), vis = visualLine(line)
+ if (line == vis) { return lineN }
+ return lineNo(vis)
+}
+
+// Get the line number of the start of the next visual line after
+// the given line.
+function visualLineEndNo(doc, lineN) {
+ if (lineN > doc.lastLine()) { return lineN }
+ var line = getLine(doc, lineN), merged
+ if (!lineIsHidden(doc, line)) { return lineN }
+ while (merged = collapsedSpanAtEnd(line))
+ { line = merged.find(1, true).line }
+ return lineNo(line) + 1
+}
+
+// Compute whether a line is hidden. Lines count as hidden when they
+// are part of a visual line that starts with another line, or when
+// they are entirely covered by collapsed, non-widget span.
+function lineIsHidden(doc, line) {
+ var sps = sawCollapsedSpans && line.markedSpans
+ if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+ sp = sps[i]
+ if (!sp.marker.collapsed) { continue }
+ if (sp.from == null) { return true }
+ if (sp.marker.widgetNode) { continue }
+ if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
+ { return true }
+ } }
+}
+function lineIsHiddenInner(doc, line, span) {
+ if (span.to == null) {
+ var end = span.marker.find(1, true)
+ return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))
+ }
+ if (span.marker.inclusiveRight && span.to == line.text.length)
+ { return true }
+ for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {
+ sp = line.markedSpans[i]
+ if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
+ (sp.to == null || sp.to != span.from) &&
+ (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
+ lineIsHiddenInner(doc, line, sp)) { return true }
+ }
+}
+
+// Find the height above the given line.
+function heightAtLine(lineObj) {
+ lineObj = visualLine(lineObj)
+
+ var h = 0, chunk = lineObj.parent
+ for (var i = 0; i < chunk.lines.length; ++i) {
+ var line = chunk.lines[i]
+ if (line == lineObj) { break }
+ else { h += line.height }
+ }
+ for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
+ for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
+ var cur = p.children[i$1]
+ if (cur == chunk) { break }
+ else { h += cur.height }
+ }
+ }
+ return h
+}
+
+// Compute the character length of a line, taking into account
+// collapsed ranges (see markText) that might hide parts, and join
+// other lines onto it.
+function lineLength(line) {
+ if (line.height == 0) { return 0 }
+ var len = line.text.length, merged, cur = line
+ while (merged = collapsedSpanAtStart(cur)) {
+ var found = merged.find(0, true)
+ cur = found.from.line
+ len += found.from.ch - found.to.ch
+ }
+ cur = line
+ while (merged = collapsedSpanAtEnd(cur)) {
+ var found$1 = merged.find(0, true)
+ len -= cur.text.length - found$1.from.ch
+ cur = found$1.to.line
+ len += cur.text.length - found$1.to.ch
+ }
+ return len
+}
+
+// Find the longest line in the document.
+function findMaxLine(cm) {
+ var d = cm.display, doc = cm.doc
+ d.maxLine = getLine(doc, doc.first)
+ d.maxLineLength = lineLength(d.maxLine)
+ d.maxLineChanged = true
+ doc.iter(function (line) {
+ var len = lineLength(line)
+ if (len > d.maxLineLength) {
+ d.maxLineLength = len
+ d.maxLine = line
+ }
+ })
+}
+
+// BIDI HELPERS
+
+function iterateBidiSections(order, from, to, f) {
+ if (!order) { return f(from, to, "ltr") }
+ var found = false
+ for (var i = 0; i < order.length; ++i) {
+ var part = order[i]
+ if (part.from < to && part.to > from || from == to && part.to == from) {
+ f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr")
+ found = true
+ }
+ }
+ if (!found) { f(from, to, "ltr") }
+}
+
+var bidiOther = null
+function getBidiPartAt(order, ch, sticky) {
+ var found
+ bidiOther = null
+ for (var i = 0; i < order.length; ++i) {
+ var cur = order[i]
+ if (cur.from < ch && cur.to > ch) { return i }
+ if (cur.to == ch) {
+ if (cur.from != cur.to && sticky == "before") { found = i }
+ else { bidiOther = i }
+ }
+ if (cur.from == ch) {
+ if (cur.from != cur.to && sticky != "before") { found = i }
+ else { bidiOther = i }
+ }
+ }
+ return found != null ? found : bidiOther
+}
+
+// Bidirectional ordering algorithm
+// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
+// that this (partially) implements.
+
+// One-char codes used for character types:
+// L (L): Left-to-Right
+// R (R): Right-to-Left
+// r (AL): Right-to-Left Arabic
+// 1 (EN): European Number
+// + (ES): European Number Separator
+// % (ET): European Number Terminator
+// n (AN): Arabic Number
+// , (CS): Common Number Separator
+// m (NSM): Non-Spacing Mark
+// b (BN): Boundary Neutral
+// s (B): Paragraph Separator
+// t (S): Segment Separator
+// w (WS): Whitespace
+// N (ON): Other Neutrals
+
+// Returns null if characters are ordered as they appear
+// (left-to-right), or an array of sections ({from, to, level}
+// objects) in the order in which they occur visually.
+var bidiOrdering = (function() {
+ // Character types for codepoints 0 to 0xff
+ var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"
+ // Character types for codepoints 0x600 to 0x6f9
+ var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"
+ function charType(code) {
+ if (code <= 0xf7) { return lowTypes.charAt(code) }
+ else if (0x590 <= code && code <= 0x5f4) { return "R" }
+ else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }
+ else if (0x6ee <= code && code <= 0x8ac) { return "r" }
+ else if (0x2000 <= code && code <= 0x200b) { return "w" }
+ else if (code == 0x200c) { return "b" }
+ else { return "L" }
+ }
+
+ var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/
+ var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/
+
+ function BidiSpan(level, from, to) {
+ this.level = level
+ this.from = from; this.to = to
+ }
+
+ return function(str, direction) {
+ var outerType = direction == "ltr" ? "L" : "R"
+
+ if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false }
+ var len = str.length, types = []
+ for (var i = 0; i < len; ++i)
+ { types.push(charType(str.charCodeAt(i))) }
+
+ // W1. Examine each non-spacing mark (NSM) in the level run, and
+ // change the type of the NSM to the type of the previous
+ // character. If the NSM is at the start of the level run, it will
+ // get the type of sor.
+ for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
+ var type = types[i$1]
+ if (type == "m") { types[i$1] = prev }
+ else { prev = type }
+ }
+
+ // W2. Search backwards from each instance of a European number
+ // until the first strong type (R, L, AL, or sor) is found. If an
+ // AL is found, change the type of the European number to Arabic
+ // number.
+ // W3. Change all ALs to R.
+ for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
+ var type$1 = types[i$2]
+ if (type$1 == "1" && cur == "r") { types[i$2] = "n" }
+ else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R" } }
+ }
+
+ // W4. A single European separator between two European numbers
+ // changes to a European number. A single common separator between
+ // two numbers of the same type changes to that type.
+ for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
+ var type$2 = types[i$3]
+ if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1" }
+ else if (type$2 == "," && prev$1 == types[i$3+1] &&
+ (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1 }
+ prev$1 = type$2
+ }
+
+ // W5. A sequence of European terminators adjacent to European
+ // numbers changes to all European numbers.
+ // W6. Otherwise, separators and terminators change to Other
+ // Neutral.
+ for (var i$4 = 0; i$4 < len; ++i$4) {
+ var type$3 = types[i$4]
+ if (type$3 == ",") { types[i$4] = "N" }
+ else if (type$3 == "%") {
+ var end = (void 0)
+ for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
+ var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"
+ for (var j = i$4; j < end; ++j) { types[j] = replace }
+ i$4 = end - 1
+ }
+ }
+
+ // W7. Search backwards from each instance of a European number
+ // until the first strong type (R, L, or sor) is found. If an L is
+ // found, then change the type of the European number to L.
+ for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
+ var type$4 = types[i$5]
+ if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L" }
+ else if (isStrong.test(type$4)) { cur$1 = type$4 }
+ }
+
+ // N1. A sequence of neutrals takes the direction of the
+ // surrounding strong text if the text on both sides has the same
+ // direction. European and Arabic numbers act as if they were R in
+ // terms of their influence on neutrals. Start-of-level-run (sor)
+ // and end-of-level-run (eor) are used at level run boundaries.
+ // N2. Any remaining neutrals take the embedding direction.
+ for (var i$6 = 0; i$6 < len; ++i$6) {
+ if (isNeutral.test(types[i$6])) {
+ var end$1 = (void 0)
+ for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
+ var before = (i$6 ? types[i$6-1] : outerType) == "L"
+ var after = (end$1 < len ? types[end$1] : outerType) == "L"
+ var replace$1 = before == after ? (before ? "L" : "R") : outerType
+ for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1 }
+ i$6 = end$1 - 1
+ }
+ }
+
+ // Here we depart from the documented algorithm, in order to avoid
+ // building up an actual levels array. Since there are only three
+ // levels (0, 1, 2) in an implementation that doesn't take
+ // explicit embedding into account, we can build up the order on
+ // the fly, without following the level-based algorithm.
+ var order = [], m
+ for (var i$7 = 0; i$7 < len;) {
+ if (countsAsLeft.test(types[i$7])) {
+ var start = i$7
+ for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
+ order.push(new BidiSpan(0, start, i$7))
+ } else {
+ var pos = i$7, at = order.length
+ for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
+ for (var j$2 = pos; j$2 < i$7;) {
+ if (countsAsNum.test(types[j$2])) {
+ if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)) }
+ var nstart = j$2
+ for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
+ order.splice(at, 0, new BidiSpan(2, nstart, j$2))
+ pos = j$2
+ } else { ++j$2 }
+ }
+ if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)) }
+ }
+ }
+ if (order[0].level == 1 && (m = str.match(/^\s+/))) {
+ order[0].from = m[0].length
+ order.unshift(new BidiSpan(0, 0, m[0].length))
+ }
+ if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
+ lst(order).to -= m[0].length
+ order.push(new BidiSpan(0, len - m[0].length, len))
+ }
+
+ return direction == "rtl" ? order.reverse() : order
+ }
+})()
+
+// Get the bidi ordering for the given line (and cache it). Returns
+// false for lines that are fully left-to-right, and an array of
+// BidiSpan objects otherwise.
+function getOrder(line, direction) {
+ var order = line.order
+ if (order == null) { order = line.order = bidiOrdering(line.text, direction) }
+ return order
+}
+
+function moveCharLogically(line, ch, dir) {
+ var target = skipExtendingChars(line.text, ch + dir, dir)
+ return target < 0 || target > line.text.length ? null : target
+}
+
+function moveLogically(line, start, dir) {
+ var ch = moveCharLogically(line, start.ch, dir)
+ return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before")
+}
+
+function endOfLine(visually, cm, lineObj, lineNo, dir) {
+ if (visually) {
+ var order = getOrder(lineObj, cm.doc.direction)
+ if (order) {
+ var part = dir < 0 ? lst(order) : order[0]
+ var moveInStorageOrder = (dir < 0) == (part.level == 1)
+ var sticky = moveInStorageOrder ? "after" : "before"
+ var ch
+ // With a wrapped rtl chunk (possibly spanning multiple bidi parts),
+ // it could be that the last bidi part is not on the last visual line,
+ // since visual lines contain content order-consecutive chunks.
+ // Thus, in rtl, we are looking for the first (content-order) character
+ // in the rtl chunk that is on the last line (that is, the same line
+ // as the last (content-order) character).
+ if (part.level > 0) {
+ var prep = prepareMeasureForLine(cm, lineObj)
+ ch = dir < 0 ? lineObj.text.length - 1 : 0
+ var targetTop = measureCharPrepared(cm, prep, ch).top
+ ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch)
+ if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1, true) }
+ } else { ch = dir < 0 ? part.to : part.from }
+ return new Pos(lineNo, ch, sticky)
+ }
+ }
+ return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after")
+}
+
+function moveVisually(cm, line, start, dir) {
+ var bidi = getOrder(line, cm.doc.direction)
+ if (!bidi) { return moveLogically(line, start, dir) }
+ if (start.ch >= line.text.length) {
+ start.ch = line.text.length
+ start.sticky = "before"
+ } else if (start.ch <= 0) {
+ start.ch = 0
+ start.sticky = "after"
+ }
+ var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]
+ if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {
+ // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,
+ // nothing interesting happens.
+ return moveLogically(line, start, dir)
+ }
+
+ var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); }
+ var prep
+ var getWrappedLineExtent = function (ch) {
+ if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }
+ prep = prep || prepareMeasureForLine(cm, line)
+ return wrappedLineExtentChar(cm, line, prep, ch)
+ }
+ var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch)
+
+ if (cm.doc.direction == "rtl" || part.level == 1) {
+ var moveInStorageOrder = (part.level == 1) == (dir < 0)
+ var ch = mv(start, moveInStorageOrder ? 1 : -1)
+ if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {
+ // Case 2: We move within an rtl part or in an rtl editor on the same visual line
+ var sticky = moveInStorageOrder ? "before" : "after"
+ return new Pos(start.line, ch, sticky)
+ }
+ }
+
+ // Case 3: Could not move within this bidi part in this visual line, so leave
+ // the current bidi part
+
+ var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {
+ var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder
+ ? new Pos(start.line, mv(ch, 1), "before")
+ : new Pos(start.line, ch, "after"); }
+
+ for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {
+ var part = bidi[partPos]
+ var moveInStorageOrder = (dir > 0) == (part.level != 1)
+ var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1)
+ if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }
+ ch = moveInStorageOrder ? part.from : mv(part.to, -1)
+ if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }
+ }
+ }
+
+ // Case 3a: Look for other bidi parts on the same visual line
+ var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent)
+ if (res) { return res }
+
+ // Case 3b: Look for other bidi parts on the next visual line
+ var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1)
+ if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {
+ res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh))
+ if (res) { return res }
+ }
+
+ // Case 4: Nowhere to move
+ return null
+}
+
+// EVENT HANDLING
+
+// Lightweight event framework. on/off also work on DOM nodes,
+// registering native DOM handlers.
+
+var noHandlers = []
+
+var on = function(emitter, type, f) {
+ if (emitter.addEventListener) {
+ emitter.addEventListener(type, f, false)
+ } else if (emitter.attachEvent) {
+ emitter.attachEvent("on" + type, f)
+ } else {
+ var map = emitter._handlers || (emitter._handlers = {})
+ map[type] = (map[type] || noHandlers).concat(f)
+ }
+}
+
+function getHandlers(emitter, type) {
+ return emitter._handlers && emitter._handlers[type] || noHandlers
+}
+
+function off(emitter, type, f) {
+ if (emitter.removeEventListener) {
+ emitter.removeEventListener(type, f, false)
+ } else if (emitter.detachEvent) {
+ emitter.detachEvent("on" + type, f)
+ } else {
+ var map = emitter._handlers, arr = map && map[type]
+ if (arr) {
+ var index = indexOf(arr, f)
+ if (index > -1)
+ { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)) }
+ }
+ }
+}
+
+function signal(emitter, type /*, values...*/) {
+ var handlers = getHandlers(emitter, type)
+ if (!handlers.length) { return }
+ var args = Array.prototype.slice.call(arguments, 2)
+ for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args) }
+}
+
+// The DOM events that CodeMirror handles can be overridden by
+// registering a (non-DOM) handler on the editor for the event name,
+// and preventDefault-ing the event in that handler.
+function signalDOMEvent(cm, e, override) {
+ if (typeof e == "string")
+ { e = {type: e, preventDefault: function() { this.defaultPrevented = true }} }
+ signal(cm, override || e.type, cm, e)
+ return e_defaultPrevented(e) || e.codemirrorIgnore
+}
+
+function signalCursorActivity(cm) {
+ var arr = cm._handlers && cm._handlers.cursorActivity
+ if (!arr) { return }
+ var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = [])
+ for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)
+ { set.push(arr[i]) } }
+}
+
+function hasHandler(emitter, type) {
+ return getHandlers(emitter, type).length > 0
+}
+
+// Add on and off methods to a constructor's prototype, to make
+// registering events on such objects more convenient.
+function eventMixin(ctor) {
+ ctor.prototype.on = function(type, f) {on(this, type, f)}
+ ctor.prototype.off = function(type, f) {off(this, type, f)}
+}
+
+// Due to the fact that we still support jurassic IE versions, some
+// compatibility wrappers are needed.
+
+function e_preventDefault(e) {
+ if (e.preventDefault) { e.preventDefault() }
+ else { e.returnValue = false }
+}
+function e_stopPropagation(e) {
+ if (e.stopPropagation) { e.stopPropagation() }
+ else { e.cancelBubble = true }
+}
+function e_defaultPrevented(e) {
+ return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false
+}
+function e_stop(e) {e_preventDefault(e); e_stopPropagation(e)}
+
+function e_target(e) {return e.target || e.srcElement}
+function e_button(e) {
+ var b = e.which
+ if (b == null) {
+ if (e.button & 1) { b = 1 }
+ else if (e.button & 2) { b = 3 }
+ else if (e.button & 4) { b = 2 }
+ }
+ if (mac && e.ctrlKey && b == 1) { b = 3 }
+ return b
+}
+
+// Detect drag-and-drop
+var dragAndDrop = function() {
+ // There is *some* kind of drag-and-drop support in IE6-8, but I
+ // couldn't get it to work yet.
+ if (ie && ie_version < 9) { return false }
+ var div = elt('div')
+ return "draggable" in div || "dragDrop" in div
+}()
+
+var zwspSupported
+function zeroWidthElement(measure) {
+ if (zwspSupported == null) {
+ var test = elt("span", "\u200b")
+ removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]))
+ if (measure.firstChild.offsetHeight != 0)
+ { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8) }
+ }
+ var node = zwspSupported ? elt("span", "\u200b") :
+ elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px")
+ node.setAttribute("cm-text", "")
+ return node
+}
+
+// Feature-detect IE's crummy client rect reporting for bidi text
+var badBidiRects
+function hasBadBidiRects(measure) {
+ if (badBidiRects != null) { return badBidiRects }
+ var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"))
+ var r0 = range(txt, 0, 1).getBoundingClientRect()
+ var r1 = range(txt, 1, 2).getBoundingClientRect()
+ removeChildren(measure)
+ if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)
+ return badBidiRects = (r1.right - r0.right < 3)
+}
+
+// See if "".split is the broken IE version, if so, provide an
+// alternative way to split lines.
+var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) {
+ var pos = 0, result = [], l = string.length
+ while (pos <= l) {
+ var nl = string.indexOf("\n", pos)
+ if (nl == -1) { nl = string.length }
+ var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl)
+ var rt = line.indexOf("\r")
+ if (rt != -1) {
+ result.push(line.slice(0, rt))
+ pos += rt + 1
+ } else {
+ result.push(line)
+ pos = nl + 1
+ }
+ }
+ return result
+} : function (string) { return string.split(/\r\n?|\n/); }
+
+var hasSelection = window.getSelection ? function (te) {
+ try { return te.selectionStart != te.selectionEnd }
+ catch(e) { return false }
+} : function (te) {
+ var range
+ try {range = te.ownerDocument.selection.createRange()}
+ catch(e) {}
+ if (!range || range.parentElement() != te) { return false }
+ return range.compareEndPoints("StartToEnd", range) != 0
+}
+
+var hasCopyEvent = (function () {
+ var e = elt("div")
+ if ("oncopy" in e) { return true }
+ e.setAttribute("oncopy", "return;")
+ return typeof e.oncopy == "function"
+})()
+
+var badZoomedRects = null
+function hasBadZoomedRects(measure) {
+ if (badZoomedRects != null) { return badZoomedRects }
+ var node = removeChildrenAndAdd(measure, elt("span", "x"))
+ var normal = node.getBoundingClientRect()
+ var fromRange = range(node, 0, 1).getBoundingClientRect()
+ return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1
+}
+
+var modes = {};
+var mimeModes = {};
+// Extra arguments are stored as the mode's dependencies, which is
+// used by (legacy) mechanisms like loadmode.js to automatically
+// load a mode. (Preferred mechanism is the require/define calls.)
+function defineMode(name, mode) {
+ if (arguments.length > 2)
+ { mode.dependencies = Array.prototype.slice.call(arguments, 2) }
+ modes[name] = mode
+}
+
+function defineMIME(mime, spec) {
+ mimeModes[mime] = spec
+}
+
+// Given a MIME type, a {name, ...options} config object, or a name
+// string, return a mode config object.
+function resolveMode(spec) {
+ if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
+ spec = mimeModes[spec]
+ } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
+ var found = mimeModes[spec.name]
+ if (typeof found == "string") { found = {name: found} }
+ spec = createObj(found, spec)
+ spec.name = found.name
+ } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
+ return resolveMode("application/xml")
+ } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) {
+ return resolveMode("application/json")
+ }
+ if (typeof spec == "string") { return {name: spec} }
+ else { return spec || {name: "null"} }
+}
+
+// Given a mode spec (anything that resolveMode accepts), find and
+// initialize an actual mode object.
+function getMode(options, spec) {
+ spec = resolveMode(spec)
+ var mfactory = modes[spec.name]
+ if (!mfactory) { return getMode(options, "text/plain") }
+ var modeObj = mfactory(options, spec)
+ if (modeExtensions.hasOwnProperty(spec.name)) {
+ var exts = modeExtensions[spec.name]
+ for (var prop in exts) {
+ if (!exts.hasOwnProperty(prop)) { continue }
+ if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop] }
+ modeObj[prop] = exts[prop]
+ }
+ }
+ modeObj.name = spec.name
+ if (spec.helperType) { modeObj.helperType = spec.helperType }
+ if (spec.modeProps) { for (var prop$1 in spec.modeProps)
+ { modeObj[prop$1] = spec.modeProps[prop$1] } }
+
+ return modeObj
+}
+
+// This can be used to attach properties to mode objects from
+// outside the actual mode definition.
+var modeExtensions = {}
+function extendMode(mode, properties) {
+ var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {})
+ copyObj(properties, exts)
+}
+
+function copyState(mode, state) {
+ if (state === true) { return state }
+ if (mode.copyState) { return mode.copyState(state) }
+ var nstate = {}
+ for (var n in state) {
+ var val = state[n]
+ if (val instanceof Array) { val = val.concat([]) }
+ nstate[n] = val
+ }
+ return nstate
+}
+
+// Given a mode and a state (for that mode), find the inner mode and
+// state at the position that the state refers to.
+function innerMode(mode, state) {
+ var info
+ while (mode.innerMode) {
+ info = mode.innerMode(state)
+ if (!info || info.mode == mode) { break }
+ state = info.state
+ mode = info.mode
+ }
+ return info || {mode: mode, state: state}
+}
+
+function startState(mode, a1, a2) {
+ return mode.startState ? mode.startState(a1, a2) : true
+}
+
+// STRING STREAM
+
+// Fed to the mode parsers, provides helper functions to make
+// parsers more succinct.
+
+var StringStream = function(string, tabSize) {
+ this.pos = this.start = 0
+ this.string = string
+ this.tabSize = tabSize || 8
+ this.lastColumnPos = this.lastColumnValue = 0
+ this.lineStart = 0
+};
+
+StringStream.prototype.eol = function () {return this.pos >= this.string.length};
+StringStream.prototype.sol = function () {return this.pos == this.lineStart};
+StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};
+StringStream.prototype.next = function () {
+ if (this.pos < this.string.length)
+ { return this.string.charAt(this.pos++) }
+};
+StringStream.prototype.eat = function (match) {
+ var ch = this.string.charAt(this.pos)
+ var ok
+ if (typeof match == "string") { ok = ch == match }
+ else { ok = ch && (match.test ? match.test(ch) : match(ch)) }
+ if (ok) {++this.pos; return ch}
+};
+StringStream.prototype.eatWhile = function (match) {
+ var start = this.pos
+ while (this.eat(match)){}
+ return this.pos > start
+};
+StringStream.prototype.eatSpace = function () {
+ var this$1 = this;
+
+ var start = this.pos
+ while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos }
+ return this.pos > start
+};
+StringStream.prototype.skipToEnd = function () {this.pos = this.string.length};
+StringStream.prototype.skipTo = function (ch) {
+ var found = this.string.indexOf(ch, this.pos)
+ if (found > -1) {this.pos = found; return true}
+};
+StringStream.prototype.backUp = function (n) {this.pos -= n};
+StringStream.prototype.column = function () {
+ if (this.lastColumnPos < this.start) {
+ this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue)
+ this.lastColumnPos = this.start
+ }
+ return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+};
+StringStream.prototype.indentation = function () {
+ return countColumn(this.string, null, this.tabSize) -
+ (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+};
+StringStream.prototype.match = function (pattern, consume, caseInsensitive) {
+ if (typeof pattern == "string") {
+ var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }
+ var substr = this.string.substr(this.pos, pattern.length)
+ if (cased(substr) == cased(pattern)) {
+ if (consume !== false) { this.pos += pattern.length }
+ return true
+ }
+ } else {
+ var match = this.string.slice(this.pos).match(pattern)
+ if (match && match.index > 0) { return null }
+ if (match && consume !== false) { this.pos += match[0].length }
+ return match
+ }
+};
+StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};
+StringStream.prototype.hideFirstChars = function (n, inner) {
+ this.lineStart += n
+ try { return inner() }
+ finally { this.lineStart -= n }
+};
+
+// Compute a style array (an array starting with a mode generation
+// -- for invalidation -- followed by pairs of end positions and
+// style strings), which is used to highlight the tokens on the
+// line.
+function highlightLine(cm, line, state, forceToEnd) {
+ // A styles array always starts with a number identifying the
+ // mode/overlays that it is based on (for easy invalidation).
+ var st = [cm.state.modeGen], lineClasses = {}
+ // Compute the base array of styles
+ runMode(cm, line.text, cm.doc.mode, state, function (end, style) { return st.push(end, style); },
+ lineClasses, forceToEnd)
+
+ // Run overlays, adjust style array.
+ var loop = function ( o ) {
+ var overlay = cm.state.overlays[o], i = 1, at = 0
+ runMode(cm, line.text, overlay.mode, true, function (end, style) {
+ var start = i
+ // Ensure there's a token end at the current position, and that i points at it
+ while (at < end) {
+ var i_end = st[i]
+ if (i_end > end)
+ { st.splice(i, 1, end, st[i+1], i_end) }
+ i += 2
+ at = Math.min(end, i_end)
+ }
+ if (!style) { return }
+ if (overlay.opaque) {
+ st.splice(start, i - start, end, "overlay " + style)
+ i = start + 2
+ } else {
+ for (; start < i; start += 2) {
+ var cur = st[start+1]
+ st[start+1] = (cur ? cur + " " : "") + "overlay " + style
+ }
+ }
+ }, lineClasses)
+ };
+
+ for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );
+
+ return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}
+}
+
+function getLineStyles(cm, line, updateFrontier) {
+ if (!line.styles || line.styles[0] != cm.state.modeGen) {
+ var state = getStateBefore(cm, lineNo(line))
+ var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state)
+ line.stateAfter = state
+ line.styles = result.styles
+ if (result.classes) { line.styleClasses = result.classes }
+ else if (line.styleClasses) { line.styleClasses = null }
+ if (updateFrontier === cm.doc.frontier) { cm.doc.frontier++ }
+ }
+ return line.styles
+}
+
+function getStateBefore(cm, n, precise) {
+ var doc = cm.doc, display = cm.display
+ if (!doc.mode.startState) { return true }
+ var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter
+ if (!state) { state = startState(doc.mode) }
+ else { state = copyState(doc.mode, state) }
+ doc.iter(pos, n, function (line) {
+ processLine(cm, line.text, state)
+ var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo
+ line.stateAfter = save ? copyState(doc.mode, state) : null
+ ++pos
+ })
+ if (precise) { doc.frontier = pos }
+ return state
+}
+
+// Lightweight form of highlight -- proceed over this line and
+// update state, but don't save a style array. Used for lines that
+// aren't currently visible.
+function processLine(cm, text, state, startAt) {
+ var mode = cm.doc.mode
+ var stream = new StringStream(text, cm.options.tabSize)
+ stream.start = stream.pos = startAt || 0
+ if (text == "") { callBlankLine(mode, state) }
+ while (!stream.eol()) {
+ readToken(mode, stream, state)
+ stream.start = stream.pos
+ }
+}
+
+function callBlankLine(mode, state) {
+ if (mode.blankLine) { return mode.blankLine(state) }
+ if (!mode.innerMode) { return }
+ var inner = innerMode(mode, state)
+ if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }
+}
+
+function readToken(mode, stream, state, inner) {
+ for (var i = 0; i < 10; i++) {
+ if (inner) { inner[0] = innerMode(mode, state).mode }
+ var style = mode.token(stream, state)
+ if (stream.pos > stream.start) { return style }
+ }
+ throw new Error("Mode " + mode.name + " failed to advance stream.")
+}
+
+// Utility for getTokenAt and getLineTokens
+function takeToken(cm, pos, precise, asArray) {
+ var getObj = function (copy) { return ({
+ start: stream.start, end: stream.pos,
+ string: stream.current(),
+ type: style || null,
+ state: copy ? copyState(doc.mode, state) : state
+ }); }
+
+ var doc = cm.doc, mode = doc.mode, style
+ pos = clipPos(doc, pos)
+ var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise)
+ var stream = new StringStream(line.text, cm.options.tabSize), tokens
+ if (asArray) { tokens = [] }
+ while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
+ stream.start = stream.pos
+ style = readToken(mode, stream, state)
+ if (asArray) { tokens.push(getObj(true)) }
+ }
+ return asArray ? tokens : getObj()
+}
+
+function extractLineClasses(type, output) {
+ if (type) { for (;;) {
+ var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/)
+ if (!lineClass) { break }
+ type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length)
+ var prop = lineClass[1] ? "bgClass" : "textClass"
+ if (output[prop] == null)
+ { output[prop] = lineClass[2] }
+ else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop]))
+ { output[prop] += " " + lineClass[2] }
+ } }
+ return type
+}
+
+// Run the given mode's parser over a line, calling f for each token.
+function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {
+ var flattenSpans = mode.flattenSpans
+ if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans }
+ var curStart = 0, curStyle = null
+ var stream = new StringStream(text, cm.options.tabSize), style
+ var inner = cm.options.addModeClass && [null]
+ if (text == "") { extractLineClasses(callBlankLine(mode, state), lineClasses) }
+ while (!stream.eol()) {
+ if (stream.pos > cm.options.maxHighlightLength) {
+ flattenSpans = false
+ if (forceToEnd) { processLine(cm, text, state, stream.pos) }
+ stream.pos = text.length
+ style = null
+ } else {
+ style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses)
+ }
+ if (inner) {
+ var mName = inner[0].name
+ if (mName) { style = "m-" + (style ? mName + " " + style : mName) }
+ }
+ if (!flattenSpans || curStyle != style) {
+ while (curStart < stream.start) {
+ curStart = Math.min(stream.start, curStart + 5000)
+ f(curStart, curStyle)
+ }
+ curStyle = style
+ }
+ stream.start = stream.pos
+ }
+ while (curStart < stream.pos) {
+ // Webkit seems to refuse to render text nodes longer than 57444
+ // characters, and returns inaccurate measurements in nodes
+ // starting around 5000 chars.
+ var pos = Math.min(stream.pos, curStart + 5000)
+ f(pos, curStyle)
+ curStart = pos
+ }
+}
+
+// Finds the line to start with when starting a parse. Tries to
+// find a line with a stateAfter, so that it can start with a
+// valid state. If that fails, it returns the line with the
+// smallest indentation, which tends to need the least context to
+// parse correctly.
+function findStartLine(cm, n, precise) {
+ var minindent, minline, doc = cm.doc
+ var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100)
+ for (var search = n; search > lim; --search) {
+ if (search <= doc.first) { return doc.first }
+ var line = getLine(doc, search - 1)
+ if (line.stateAfter && (!precise || search <= doc.frontier)) { return search }
+ var indented = countColumn(line.text, null, cm.options.tabSize)
+ if (minline == null || minindent > indented) {
+ minline = search - 1
+ minindent = indented
+ }
+ }
+ return minline
+}
+
+// LINE DATA STRUCTURE
+
+// Line objects. These hold state related to a line, including
+// highlighting info (the styles array).
+var Line = function(text, markedSpans, estimateHeight) {
+ this.text = text
+ attachMarkedSpans(this, markedSpans)
+ this.height = estimateHeight ? estimateHeight(this) : 1
+};
+
+Line.prototype.lineNo = function () { return lineNo(this) };
+eventMixin(Line)
+
+// Change the content (text, markers) of a line. Automatically
+// invalidates cached information and tries to re-estimate the
+// line's height.
+function updateLine(line, text, markedSpans, estimateHeight) {
+ line.text = text
+ if (line.stateAfter) { line.stateAfter = null }
+ if (line.styles) { line.styles = null }
+ if (line.order != null) { line.order = null }
+ detachMarkedSpans(line)
+ attachMarkedSpans(line, markedSpans)
+ var estHeight = estimateHeight ? estimateHeight(line) : 1
+ if (estHeight != line.height) { updateLineHeight(line, estHeight) }
+}
+
+// Detach a line from the document tree and its markers.
+function cleanUpLine(line) {
+ line.parent = null
+ detachMarkedSpans(line)
+}
+
+// Convert a style as returned by a mode (either null, or a string
+// containing one or more styles) to a CSS style. This is cached,
+// and also looks for line-wide styles.
+var styleToClassCache = {};
+var styleToClassCacheWithMode = {};
+function interpretTokenStyle(style, options) {
+ if (!style || /^\s*$/.test(style)) { return null }
+ var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache
+ return cache[style] ||
+ (cache[style] = style.replace(/\S+/g, "cm-$&"))
+}
+
+// Render the DOM representation of the text of a line. Also builds
+// up a 'line map', which points at the DOM nodes that represent
+// specific stretches of text, and is used by the measuring code.
+// The returned object contains the DOM node, this map, and
+// information about line-wide styles that were set by the mode.
+function buildLineContent(cm, lineView) {
+ // The padding-right forces the element to have a 'border', which
+ // is needed on Webkit to be able to get line-level bounding
+ // rectangles for it (in measureChar).
+ var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null)
+ var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content,
+ col: 0, pos: 0, cm: cm,
+ trailingSpace: false,
+ splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}
+ lineView.measure = {}
+
+ // Iterate over the logical lines that make up this visual line.
+ for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
+ var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0)
+ builder.pos = 0
+ builder.addToken = buildToken
+ // Optionally wire in some hacks into the token-rendering
+ // algorithm, to deal with browser quirks.
+ if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))
+ { builder.addToken = buildTokenBadBidi(builder.addToken, order) }
+ builder.map = []
+ var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line)
+ insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate))
+ if (line.styleClasses) {
+ if (line.styleClasses.bgClass)
+ { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || "") }
+ if (line.styleClasses.textClass)
+ { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || "") }
+ }
+
+ // Ensure at least a single node is present, for measuring.
+ if (builder.map.length == 0)
+ { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))) }
+
+ // Store the map and a cache object for the current logical line
+ if (i == 0) {
+ lineView.measure.map = builder.map
+ lineView.measure.cache = {}
+ } else {
+ ;(lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)
+ ;(lineView.measure.caches || (lineView.measure.caches = [])).push({})
+ }
+ }
+
+ // See issue #2901
+ if (webkit) {
+ var last = builder.content.lastChild
+ if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
+ { builder.content.className = "cm-tab-wrap-hack" }
+ }
+
+ signal(cm, "renderLine", cm, lineView.line, builder.pre)
+ if (builder.pre.className)
+ { builder.textClass = joinClasses(builder.pre.className, builder.textClass || "") }
+
+ return builder
+}
+
+function defaultSpecialCharPlaceholder(ch) {
+ var token = elt("span", "\u2022", "cm-invalidchar")
+ token.title = "\\u" + ch.charCodeAt(0).toString(16)
+ token.setAttribute("aria-label", token.title)
+ return token
+}
+
+// Build up the DOM representation for a single token, and add it to
+// the line map. Takes care to render special characters separately.
+function buildToken(builder, text, style, startStyle, endStyle, title, css) {
+ if (!text) { return }
+ var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text
+ var special = builder.cm.state.specialChars, mustWrap = false
+ var content
+ if (!special.test(text)) {
+ builder.col += text.length
+ content = document.createTextNode(displayText)
+ builder.map.push(builder.pos, builder.pos + text.length, content)
+ if (ie && ie_version < 9) { mustWrap = true }
+ builder.pos += text.length
+ } else {
+ content = document.createDocumentFragment()
+ var pos = 0
+ while (true) {
+ special.lastIndex = pos
+ var m = special.exec(text)
+ var skipped = m ? m.index - pos : text.length - pos
+ if (skipped) {
+ var txt = document.createTextNode(displayText.slice(pos, pos + skipped))
+ if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])) }
+ else { content.appendChild(txt) }
+ builder.map.push(builder.pos, builder.pos + skipped, txt)
+ builder.col += skipped
+ builder.pos += skipped
+ }
+ if (!m) { break }
+ pos += skipped + 1
+ var txt$1 = (void 0)
+ if (m[0] == "\t") {
+ var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize
+ txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"))
+ txt$1.setAttribute("role", "presentation")
+ txt$1.setAttribute("cm-text", "\t")
+ builder.col += tabWidth
+ } else if (m[0] == "\r" || m[0] == "\n") {
+ txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"))
+ txt$1.setAttribute("cm-text", m[0])
+ builder.col += 1
+ } else {
+ txt$1 = builder.cm.options.specialCharPlaceholder(m[0])
+ txt$1.setAttribute("cm-text", m[0])
+ if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])) }
+ else { content.appendChild(txt$1) }
+ builder.col += 1
+ }
+ builder.map.push(builder.pos, builder.pos + 1, txt$1)
+ builder.pos++
+ }
+ }
+ builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32
+ if (style || startStyle || endStyle || mustWrap || css) {
+ var fullStyle = style || ""
+ if (startStyle) { fullStyle += startStyle }
+ if (endStyle) { fullStyle += endStyle }
+ var token = elt("span", [content], fullStyle, css)
+ if (title) { token.title = title }
+ return builder.content.appendChild(token)
+ }
+ builder.content.appendChild(content)
+}
+
+function splitSpaces(text, trailingBefore) {
+ if (text.length > 1 && !/ /.test(text)) { return text }
+ var spaceBefore = trailingBefore, result = ""
+ for (var i = 0; i < text.length; i++) {
+ var ch = text.charAt(i)
+ if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
+ { ch = "\u00a0" }
+ result += ch
+ spaceBefore = ch == " "
+ }
+ return result
+}
+
+// Work around nonsense dimensions being reported for stretches of
+// right-to-left text.
+function buildTokenBadBidi(inner, order) {
+ return function (builder, text, style, startStyle, endStyle, title, css) {
+ style = style ? style + " cm-force-border" : "cm-force-border"
+ var start = builder.pos, end = start + text.length
+ for (;;) {
+ // Find the part that overlaps with the start of this text
+ var part = (void 0)
+ for (var i = 0; i < order.length; i++) {
+ part = order[i]
+ if (part.to > start && part.from <= start) { break }
+ }
+ if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) }
+ inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css)
+ startStyle = null
+ text = text.slice(part.to - start)
+ start = part.to
+ }
+ }
+}
+
+function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
+ var widget = !ignoreWidget && marker.widgetNode
+ if (widget) { builder.map.push(builder.pos, builder.pos + size, widget) }
+ if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
+ if (!widget)
+ { widget = builder.content.appendChild(document.createElement("span")) }
+ widget.setAttribute("cm-marker", marker.id)
+ }
+ if (widget) {
+ builder.cm.display.input.setUneditable(widget)
+ builder.content.appendChild(widget)
+ }
+ builder.pos += size
+ builder.trailingSpace = false
+}
+
+// Outputs a number of spans to make up a line, taking highlighting
+// and marked text into account.
+function insertLineContent(line, builder, styles) {
+ var spans = line.markedSpans, allText = line.text, at = 0
+ if (!spans) {
+ for (var i$1 = 1; i$1 < styles.length; i$1+=2)
+ { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)) }
+ return
+ }
+
+ var len = allText.length, pos = 0, i = 1, text = "", style, css
+ var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed
+ for (;;) {
+ if (nextChange == pos) { // Update current marker set
+ spanStyle = spanEndStyle = spanStartStyle = title = css = ""
+ collapsed = null; nextChange = Infinity
+ var foundBookmarks = [], endStyles = (void 0)
+ for (var j = 0; j < spans.length; ++j) {
+ var sp = spans[j], m = sp.marker
+ if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
+ foundBookmarks.push(m)
+ } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
+ if (sp.to != null && sp.to != pos && nextChange > sp.to) {
+ nextChange = sp.to
+ spanEndStyle = ""
+ }
+ if (m.className) { spanStyle += " " + m.className }
+ if (m.css) { css = (css ? css + ";" : "") + m.css }
+ if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle }
+ if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to) }
+ if (m.title && !title) { title = m.title }
+ if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
+ { collapsed = sp }
+ } else if (sp.from > pos && nextChange > sp.from) {
+ nextChange = sp.from
+ }
+ }
+ if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)
+ { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1] } } }
+
+ if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)
+ { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]) } }
+ if (collapsed && (collapsed.from || 0) == pos) {
+ buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
+ collapsed.marker, collapsed.from == null)
+ if (collapsed.to == null) { return }
+ if (collapsed.to == pos) { collapsed = false }
+ }
+ }
+ if (pos >= len) { break }
+
+ var upto = Math.min(len, nextChange)
+ while (true) {
+ if (text) {
+ var end = pos + text.length
+ if (!collapsed) {
+ var tokenText = end > upto ? text.slice(0, upto - pos) : text
+ builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
+ spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css)
+ }
+ if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}
+ pos = end
+ spanStartStyle = ""
+ }
+ text = allText.slice(at, at = styles[i++])
+ style = interpretTokenStyle(styles[i++], builder.cm.options)
+ }
+ }
+}
+
+
+// These objects are used to represent the visible (currently drawn)
+// part of the document. A LineView may correspond to multiple
+// logical lines, if those are connected by collapsed ranges.
+function LineView(doc, line, lineN) {
+ // The starting line
+ this.line = line
+ // Continuing lines, if any
+ this.rest = visualLineContinued(line)
+ // Number of logical lines in this visual line
+ this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1
+ this.node = this.text = null
+ this.hidden = lineIsHidden(doc, line)
+}
+
+// Create a range of LineView objects for the given lines.
+function buildViewArray(cm, from, to) {
+ var array = [], nextPos
+ for (var pos = from; pos < to; pos = nextPos) {
+ var view = new LineView(cm.doc, getLine(cm.doc, pos), pos)
+ nextPos = pos + view.size
+ array.push(view)
+ }
+ return array
+}
+
+var operationGroup = null
+
+function pushOperation(op) {
+ if (operationGroup) {
+ operationGroup.ops.push(op)
+ } else {
+ op.ownsGroup = operationGroup = {
+ ops: [op],
+ delayedCallbacks: []
+ }
+ }
+}
+
+function fireCallbacksForOps(group) {
+ // Calls delayed callbacks and cursorActivity handlers until no
+ // new ones appear
+ var callbacks = group.delayedCallbacks, i = 0
+ do {
+ for (; i < callbacks.length; i++)
+ { callbacks[i].call(null) }
+ for (var j = 0; j < group.ops.length; j++) {
+ var op = group.ops[j]
+ if (op.cursorActivityHandlers)
+ { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
+ { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm) } }
+ }
+ } while (i < callbacks.length)
+}
+
+function finishOperation(op, endCb) {
+ var group = op.ownsGroup
+ if (!group) { return }
+
+ try { fireCallbacksForOps(group) }
+ finally {
+ operationGroup = null
+ endCb(group)
+ }
+}
+
+var orphanDelayedCallbacks = null
+
+// Often, we want to signal events at a point where we are in the
+// middle of some work, but don't want the handler to start calling
+// other methods on the editor, which might be in an inconsistent
+// state or simply not expect any other events to happen.
+// signalLater looks whether there are any handlers, and schedules
+// them to be executed when the last operation ends, or, if no
+// operation is active, when a timeout fires.
+function signalLater(emitter, type /*, values...*/) {
+ var arr = getHandlers(emitter, type)
+ if (!arr.length) { return }
+ var args = Array.prototype.slice.call(arguments, 2), list
+ if (operationGroup) {
+ list = operationGroup.delayedCallbacks
+ } else if (orphanDelayedCallbacks) {
+ list = orphanDelayedCallbacks
+ } else {
+ list = orphanDelayedCallbacks = []
+ setTimeout(fireOrphanDelayed, 0)
+ }
+ var loop = function ( i ) {
+ list.push(function () { return arr[i].apply(null, args); })
+ };
+
+ for (var i = 0; i < arr.length; ++i)
+ loop( i );
+}
+
+function fireOrphanDelayed() {
+ var delayed = orphanDelayedCallbacks
+ orphanDelayedCallbacks = null
+ for (var i = 0; i < delayed.length; ++i) { delayed[i]() }
+}
+
+// When an aspect of a line changes, a string is added to
+// lineView.changes. This updates the relevant part of the line's
+// DOM structure.
+function updateLineForChanges(cm, lineView, lineN, dims) {
+ for (var j = 0; j < lineView.changes.length; j++) {
+ var type = lineView.changes[j]
+ if (type == "text") { updateLineText(cm, lineView) }
+ else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims) }
+ else if (type == "class") { updateLineClasses(cm, lineView) }
+ else if (type == "widget") { updateLineWidgets(cm, lineView, dims) }
+ }
+ lineView.changes = null
+}
+
+// Lines with gutter elements, widgets or a background class need to
+// be wrapped, and have the extra elements added to the wrapper div
+function ensureLineWrapped(lineView) {
+ if (lineView.node == lineView.text) {
+ lineView.node = elt("div", null, null, "position: relative")
+ if (lineView.text.parentNode)
+ { lineView.text.parentNode.replaceChild(lineView.node, lineView.text) }
+ lineView.node.appendChild(lineView.text)
+ if (ie && ie_version < 8) { lineView.node.style.zIndex = 2 }
+ }
+ return lineView.node
+}
+
+function updateLineBackground(cm, lineView) {
+ var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass
+ if (cls) { cls += " CodeMirror-linebackground" }
+ if (lineView.background) {
+ if (cls) { lineView.background.className = cls }
+ else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null }
+ } else if (cls) {
+ var wrap = ensureLineWrapped(lineView)
+ lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild)
+ cm.display.input.setUneditable(lineView.background)
+ }
+}
+
+// Wrapper around buildLineContent which will reuse the structure
+// in display.externalMeasured when possible.
+function getLineContent(cm, lineView) {
+ var ext = cm.display.externalMeasured
+ if (ext && ext.line == lineView.line) {
+ cm.display.externalMeasured = null
+ lineView.measure = ext.measure
+ return ext.built
+ }
+ return buildLineContent(cm, lineView)
+}
+
+// Redraw the line's text. Interacts with the background and text
+// classes because the mode may output tokens that influence these
+// classes.
+function updateLineText(cm, lineView) {
+ var cls = lineView.text.className
+ var built = getLineContent(cm, lineView)
+ if (lineView.text == lineView.node) { lineView.node = built.pre }
+ lineView.text.parentNode.replaceChild(built.pre, lineView.text)
+ lineView.text = built.pre
+ if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
+ lineView.bgClass = built.bgClass
+ lineView.textClass = built.textClass
+ updateLineClasses(cm, lineView)
+ } else if (cls) {
+ lineView.text.className = cls
+ }
+}
+
+function updateLineClasses(cm, lineView) {
+ updateLineBackground(cm, lineView)
+ if (lineView.line.wrapClass)
+ { ensureLineWrapped(lineView).className = lineView.line.wrapClass }
+ else if (lineView.node != lineView.text)
+ { lineView.node.className = "" }
+ var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass
+ lineView.text.className = textClass || ""
+}
+
+function updateLineGutter(cm, lineView, lineN, dims) {
+ if (lineView.gutter) {
+ lineView.node.removeChild(lineView.gutter)
+ lineView.gutter = null
+ }
+ if (lineView.gutterBackground) {
+ lineView.node.removeChild(lineView.gutterBackground)
+ lineView.gutterBackground = null
+ }
+ if (lineView.line.gutterClass) {
+ var wrap = ensureLineWrapped(lineView)
+ lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
+ ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px"))
+ cm.display.input.setUneditable(lineView.gutterBackground)
+ wrap.insertBefore(lineView.gutterBackground, lineView.text)
+ }
+ var markers = lineView.line.gutterMarkers
+ if (cm.options.lineNumbers || markers) {
+ var wrap$1 = ensureLineWrapped(lineView)
+ var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"))
+ cm.display.input.setUneditable(gutterWrap)
+ wrap$1.insertBefore(gutterWrap, lineView.text)
+ if (lineView.line.gutterClass)
+ { gutterWrap.className += " " + lineView.line.gutterClass }
+ if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
+ { lineView.lineNumber = gutterWrap.appendChild(
+ elt("div", lineNumberFor(cm.options, lineN),
+ "CodeMirror-linenumber CodeMirror-gutter-elt",
+ ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))) }
+ if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {
+ var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]
+ if (found)
+ { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
+ ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))) }
+ } }
+ }
+}
+
+function updateLineWidgets(cm, lineView, dims) {
+ if (lineView.alignable) { lineView.alignable = null }
+ for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {
+ next = node.nextSibling
+ if (node.className == "CodeMirror-linewidget")
+ { lineView.node.removeChild(node) }
+ }
+ insertLineWidgets(cm, lineView, dims)
+}
+
+// Build a line's DOM representation from scratch
+function buildLineElement(cm, lineView, lineN, dims) {
+ var built = getLineContent(cm, lineView)
+ lineView.text = lineView.node = built.pre
+ if (built.bgClass) { lineView.bgClass = built.bgClass }
+ if (built.textClass) { lineView.textClass = built.textClass }
+
+ updateLineClasses(cm, lineView)
+ updateLineGutter(cm, lineView, lineN, dims)
+ insertLineWidgets(cm, lineView, dims)
+ return lineView.node
+}
+
+// A lineView may contain multiple logical lines (when merged by
+// collapsed spans). The widgets for all of them need to be drawn.
+function insertLineWidgets(cm, lineView, dims) {
+ insertLineWidgetsFor(cm, lineView.line, lineView, dims, true)
+ if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+ { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false) } }
+}
+
+function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
+ if (!line.widgets) { return }
+ var wrap = ensureLineWrapped(lineView)
+ for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
+ var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget")
+ if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true") }
+ positionLineWidget(widget, node, lineView, dims)
+ cm.display.input.setUneditable(node)
+ if (allowAbove && widget.above)
+ { wrap.insertBefore(node, lineView.gutter || lineView.text) }
+ else
+ { wrap.appendChild(node) }
+ signalLater(widget, "redraw")
+ }
+}
+
+function positionLineWidget(widget, node, lineView, dims) {
+ if (widget.noHScroll) {
+ ;(lineView.alignable || (lineView.alignable = [])).push(node)
+ var width = dims.wrapperWidth
+ node.style.left = dims.fixedPos + "px"
+ if (!widget.coverGutter) {
+ width -= dims.gutterTotalWidth
+ node.style.paddingLeft = dims.gutterTotalWidth + "px"
+ }
+ node.style.width = width + "px"
+ }
+ if (widget.coverGutter) {
+ node.style.zIndex = 5
+ node.style.position = "relative"
+ if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px" }
+ }
+}
+
+function widgetHeight(widget) {
+ if (widget.height != null) { return widget.height }
+ var cm = widget.doc.cm
+ if (!cm) { return 0 }
+ if (!contains(document.body, widget.node)) {
+ var parentStyle = "position: relative;"
+ if (widget.coverGutter)
+ { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;" }
+ if (widget.noHScroll)
+ { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;" }
+ removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle))
+ }
+ return widget.height = widget.node.parentNode.offsetHeight
+}
+
+// Return true when the given mouse event happened in a widget
+function eventInWidget(display, e) {
+ for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
+ if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
+ (n.parentNode == display.sizer && n != display.mover))
+ { return true }
+ }
+}
+
+// POSITION MEASUREMENT
+
+function paddingTop(display) {return display.lineSpace.offsetTop}
+function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}
+function paddingH(display) {
+ if (display.cachedPaddingH) { return display.cachedPaddingH }
+ var e = removeChildrenAndAdd(display.measure, elt("pre", "x"))
+ var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle
+ var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}
+ if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data }
+ return data
+}
+
+function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }
+function displayWidth(cm) {
+ return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth
+}
+function displayHeight(cm) {
+ return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight
+}
+
+// Ensure the lineView.wrapping.heights array is populated. This is
+// an array of bottom offsets for the lines that make up a drawn
+// line. When lineWrapping is on, there might be more than one
+// height.
+function ensureLineHeights(cm, lineView, rect) {
+ var wrapping = cm.options.lineWrapping
+ var curWidth = wrapping && displayWidth(cm)
+ if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
+ var heights = lineView.measure.heights = []
+ if (wrapping) {
+ lineView.measure.width = curWidth
+ var rects = lineView.text.firstChild.getClientRects()
+ for (var i = 0; i < rects.length - 1; i++) {
+ var cur = rects[i], next = rects[i + 1]
+ if (Math.abs(cur.bottom - next.bottom) > 2)
+ { heights.push((cur.bottom + next.top) / 2 - rect.top) }
+ }
+ }
+ heights.push(rect.bottom - rect.top)
+ }
+}
+
+// Find a line map (mapping character offsets to text nodes) and a
+// measurement cache for the given line number. (A line view might
+// contain multiple lines when collapsed ranges are present.)
+function mapFromLineView(lineView, line, lineN) {
+ if (lineView.line == line)
+ { return {map: lineView.measure.map, cache: lineView.measure.cache} }
+ for (var i = 0; i < lineView.rest.length; i++)
+ { if (lineView.rest[i] == line)
+ { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }
+ for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)
+ { if (lineNo(lineView.rest[i$1]) > lineN)
+ { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }
+}
+
+// Render a line into the hidden node display.externalMeasured. Used
+// when measurement is needed for a line that's not in the viewport.
+function updateExternalMeasurement(cm, line) {
+ line = visualLine(line)
+ var lineN = lineNo(line)
+ var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN)
+ view.lineN = lineN
+ var built = view.built = buildLineContent(cm, view)
+ view.text = built.pre
+ removeChildrenAndAdd(cm.display.lineMeasure, built.pre)
+ return view
+}
+
+// Get a {top, bottom, left, right} box (in line-local coordinates)
+// for a given character.
+function measureChar(cm, line, ch, bias) {
+ return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)
+}
+
+// Find a line view that corresponds to the given line number.
+function findViewForLine(cm, lineN) {
+ if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
+ { return cm.display.view[findViewIndex(cm, lineN)] }
+ var ext = cm.display.externalMeasured
+ if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
+ { return ext }
+}
+
+// Measurement can be split in two steps, the set-up work that
+// applies to the whole line, and the measurement of the actual
+// character. Functions like coordsChar, that need to do a lot of
+// measurements in a row, can thus ensure that the set-up work is
+// only done once.
+function prepareMeasureForLine(cm, line) {
+ var lineN = lineNo(line)
+ var view = findViewForLine(cm, lineN)
+ if (view && !view.text) {
+ view = null
+ } else if (view && view.changes) {
+ updateLineForChanges(cm, view, lineN, getDimensions(cm))
+ cm.curOp.forceUpdate = true
+ }
+ if (!view)
+ { view = updateExternalMeasurement(cm, line) }
+
+ var info = mapFromLineView(view, line, lineN)
+ return {
+ line: line, view: view, rect: null,
+ map: info.map, cache: info.cache, before: info.before,
+ hasHeights: false
+ }
+}
+
+// Given a prepared measurement object, measures the position of an
+// actual character (or fetches it from the cache).
+function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
+ if (prepared.before) { ch = -1 }
+ var key = ch + (bias || ""), found
+ if (prepared.cache.hasOwnProperty(key)) {
+ found = prepared.cache[key]
+ } else {
+ if (!prepared.rect)
+ { prepared.rect = prepared.view.text.getBoundingClientRect() }
+ if (!prepared.hasHeights) {
+ ensureLineHeights(cm, prepared.view, prepared.rect)
+ prepared.hasHeights = true
+ }
+ found = measureCharInner(cm, prepared, ch, bias)
+ if (!found.bogus) { prepared.cache[key] = found }
+ }
+ return {left: found.left, right: found.right,
+ top: varHeight ? found.rtop : found.top,
+ bottom: varHeight ? found.rbottom : found.bottom}
+}
+
+var nullRect = {left: 0, right: 0, top: 0, bottom: 0}
+
+function nodeAndOffsetInLineMap(map, ch, bias) {
+ var node, start, end, collapse, mStart, mEnd
+ // First, search the line map for the text node corresponding to,
+ // or closest to, the target character.
+ for (var i = 0; i < map.length; i += 3) {
+ mStart = map[i]
+ mEnd = map[i + 1]
+ if (ch < mStart) {
+ start = 0; end = 1
+ collapse = "left"
+ } else if (ch < mEnd) {
+ start = ch - mStart
+ end = start + 1
+ } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {
+ end = mEnd - mStart
+ start = end - 1
+ if (ch >= mEnd) { collapse = "right" }
+ }
+ if (start != null) {
+ node = map[i + 2]
+ if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
+ { collapse = bias }
+ if (bias == "left" && start == 0)
+ { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {
+ node = map[(i -= 3) + 2]
+ collapse = "left"
+ } }
+ if (bias == "right" && start == mEnd - mStart)
+ { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {
+ node = map[(i += 3) + 2]
+ collapse = "right"
+ } }
+ break
+ }
+ }
+ return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}
+}
+
+function getUsefulRect(rects, bias) {
+ var rect = nullRect
+ if (bias == "left") { for (var i = 0; i < rects.length; i++) {
+ if ((rect = rects[i]).left != rect.right) { break }
+ } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
+ if ((rect = rects[i$1]).left != rect.right) { break }
+ } }
+ return rect
+}
+
+function measureCharInner(cm, prepared, ch, bias) {
+ var place = nodeAndOffsetInLineMap(prepared.map, ch, bias)
+ var node = place.node, start = place.start, end = place.end, collapse = place.collapse
+
+ var rect
+ if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
+ for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned
+ while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start }
+ while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end }
+ if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
+ { rect = node.parentNode.getBoundingClientRect() }
+ else
+ { rect = getUsefulRect(range(node, start, end).getClientRects(), bias) }
+ if (rect.left || rect.right || start == 0) { break }
+ end = start
+ start = start - 1
+ collapse = "right"
+ }
+ if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect) }
+ } else { // If it is a widget, simply get the box for the whole widget.
+ if (start > 0) { collapse = bias = "right" }
+ var rects
+ if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
+ { rect = rects[bias == "right" ? rects.length - 1 : 0] }
+ else
+ { rect = node.getBoundingClientRect() }
+ }
+ if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
+ var rSpan = node.parentNode.getClientRects()[0]
+ if (rSpan)
+ { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom} }
+ else
+ { rect = nullRect }
+ }
+
+ var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top
+ var mid = (rtop + rbot) / 2
+ var heights = prepared.view.measure.heights
+ var i = 0
+ for (; i < heights.length - 1; i++)
+ { if (mid < heights[i]) { break } }
+ var top = i ? heights[i - 1] : 0, bot = heights[i]
+ var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
+ right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
+ top: top, bottom: bot}
+ if (!rect.left && !rect.right) { result.bogus = true }
+ if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot }
+
+ return result
+}
+
+// Work around problem with bounding client rects on ranges being
+// returned incorrectly when zoomed on IE10 and below.
+function maybeUpdateRectForZooming(measure, rect) {
+ if (!window.screen || screen.logicalXDPI == null ||
+ screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
+ { return rect }
+ var scaleX = screen.logicalXDPI / screen.deviceXDPI
+ var scaleY = screen.logicalYDPI / screen.deviceYDPI
+ return {left: rect.left * scaleX, right: rect.right * scaleX,
+ top: rect.top * scaleY, bottom: rect.bottom * scaleY}
+}
+
+function clearLineMeasurementCacheFor(lineView) {
+ if (lineView.measure) {
+ lineView.measure.cache = {}
+ lineView.measure.heights = null
+ if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+ { lineView.measure.caches[i] = {} } }
+ }
+}
+
+function clearLineMeasurementCache(cm) {
+ cm.display.externalMeasure = null
+ removeChildren(cm.display.lineMeasure)
+ for (var i = 0; i < cm.display.view.length; i++)
+ { clearLineMeasurementCacheFor(cm.display.view[i]) }
+}
+
+function clearCaches(cm) {
+ clearLineMeasurementCache(cm)
+ cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null
+ if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true }
+ cm.display.lineNumChars = null
+}
+
+function pageScrollX() {
+ // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206
+ // which causes page_Offset and bounding client rects to use
+ // different reference viewports and invalidate our calculations.
+ if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }
+ return window.pageXOffset || (document.documentElement || document.body).scrollLeft
+}
+function pageScrollY() {
+ if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }
+ return window.pageYOffset || (document.documentElement || document.body).scrollTop
+}
+
+// Converts a {top, bottom, left, right} box from line-local
+// coordinates into another coordinate system. Context may be one of
+// "line", "div" (display.lineDiv), "local"./null (editor), "window",
+// or "page".
+function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
+ if (!includeWidgets && lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) {
+ var size = widgetHeight(lineObj.widgets[i])
+ rect.top += size; rect.bottom += size
+ } } }
+ if (context == "line") { return rect }
+ if (!context) { context = "local" }
+ var yOff = heightAtLine(lineObj)
+ if (context == "local") { yOff += paddingTop(cm.display) }
+ else { yOff -= cm.display.viewOffset }
+ if (context == "page" || context == "window") {
+ var lOff = cm.display.lineSpace.getBoundingClientRect()
+ yOff += lOff.top + (context == "window" ? 0 : pageScrollY())
+ var xOff = lOff.left + (context == "window" ? 0 : pageScrollX())
+ rect.left += xOff; rect.right += xOff
+ }
+ rect.top += yOff; rect.bottom += yOff
+ return rect
+}
+
+// Coverts a box from "div" coords to another coordinate system.
+// Context may be "window", "page", "div", or "local"./null.
+function fromCoordSystem(cm, coords, context) {
+ if (context == "div") { return coords }
+ var left = coords.left, top = coords.top
+ // First move into "page" coordinate system
+ if (context == "page") {
+ left -= pageScrollX()
+ top -= pageScrollY()
+ } else if (context == "local" || !context) {
+ var localBox = cm.display.sizer.getBoundingClientRect()
+ left += localBox.left
+ top += localBox.top
+ }
+
+ var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect()
+ return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}
+}
+
+function charCoords(cm, pos, context, lineObj, bias) {
+ if (!lineObj) { lineObj = getLine(cm.doc, pos.line) }
+ return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)
+}
+
+// Returns a box for a given cursor position, which may have an
+// 'other' property containing the position of the secondary cursor
+// on a bidi boundary.
+// A cursor Pos(line, char, "before") is on the same visual line as `char - 1`
+// and after `char - 1` in writing order of `char - 1`
+// A cursor Pos(line, char, "after") is on the same visual line as `char`
+// and before `char` in writing order of `char`
+// Examples (upper-case letters are RTL, lower-case are LTR):
+// Pos(0, 1, ...)
+// before after
+// ab a|b a|b
+// aB a|B aB|
+// Ab |Ab A|b
+// AB B|A B|A
+// Every position after the last character on a line is considered to stick
+// to the last character on the line.
+function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
+ lineObj = lineObj || getLine(cm.doc, pos.line)
+ if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj) }
+ function get(ch, right) {
+ var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight)
+ if (right) { m.left = m.right; } else { m.right = m.left }
+ return intoCoordSystem(cm, lineObj, m, context)
+ }
+ var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky
+ if (ch >= lineObj.text.length) {
+ ch = lineObj.text.length
+ sticky = "before"
+ } else if (ch <= 0) {
+ ch = 0
+ sticky = "after"
+ }
+ if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") }
+
+ function getBidi(ch, partPos, invert) {
+ var part = order[partPos], right = (part.level % 2) != 0
+ return get(invert ? ch - 1 : ch, right != invert)
+ }
+ var partPos = getBidiPartAt(order, ch, sticky)
+ var other = bidiOther
+ var val = getBidi(ch, partPos, sticky == "before")
+ if (other != null) { val.other = getBidi(ch, other, sticky != "before") }
+ return val
+}
+
+// Used to cheaply estimate the coordinates for a position. Used for
+// intermediate scroll updates.
+function estimateCoords(cm, pos) {
+ var left = 0
+ pos = clipPos(cm.doc, pos)
+ if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch }
+ var lineObj = getLine(cm.doc, pos.line)
+ var top = heightAtLine(lineObj) + paddingTop(cm.display)
+ return {left: left, right: left, top: top, bottom: top + lineObj.height}
+}
+
+// Positions returned by coordsChar contain some extra information.
+// xRel is the relative x position of the input coordinates compared
+// to the found position (so xRel > 0 means the coordinates are to
+// the right of the character position, for example). When outside
+// is true, that means the coordinates lie outside the line's
+// vertical range.
+function PosWithInfo(line, ch, sticky, outside, xRel) {
+ var pos = Pos(line, ch, sticky)
+ pos.xRel = xRel
+ if (outside) { pos.outside = true }
+ return pos
+}
+
+// Compute the character position closest to the given coordinates.
+// Input must be lineSpace-local ("div" coordinate system).
+function coordsChar(cm, x, y) {
+ var doc = cm.doc
+ y += cm.display.viewOffset
+ if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }
+ var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1
+ if (lineN > last)
+ { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }
+ if (x < 0) { x = 0 }
+
+ var lineObj = getLine(doc, lineN)
+ for (;;) {
+ var found = coordsCharInner(cm, lineObj, lineN, x, y)
+ var merged = collapsedSpanAtEnd(lineObj)
+ var mergedPos = merged && merged.find(0, true)
+ if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
+ { lineN = lineNo(lineObj = mergedPos.to.line) }
+ else
+ { return found }
+ }
+}
+
+function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
+ var measure = function (ch) { return intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), "line"); }
+ var end = lineObj.text.length
+ var begin = findFirst(function (ch) { return measure(ch - 1).bottom <= y; }, end, 0)
+ end = findFirst(function (ch) { return measure(ch).top > y; }, begin, end)
+ return {begin: begin, end: end}
+}
+
+function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
+ var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top
+ return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)
+}
+
+function coordsCharInner(cm, lineObj, lineNo, x, y) {
+ y -= heightAtLine(lineObj)
+ var begin = 0, end = lineObj.text.length
+ var preparedMeasure = prepareMeasureForLine(cm, lineObj)
+ var pos
+ var order = getOrder(lineObj, cm.doc.direction)
+ if (order) {
+ if (cm.options.lineWrapping) {
+ ;var assign;
+ ((assign = wrappedLineExtent(cm, lineObj, preparedMeasure, y), begin = assign.begin, end = assign.end, assign))
+ }
+ pos = new Pos(lineNo, begin)
+ var beginLeft = cursorCoords(cm, pos, "line", lineObj, preparedMeasure).left
+ var dir = beginLeft < x ? 1 : -1
+ var prevDiff, diff = beginLeft - x, prevPos
+ do {
+ prevDiff = diff
+ prevPos = pos
+ pos = moveVisually(cm, lineObj, pos, dir)
+ if (pos == null || pos.ch < begin || end <= (pos.sticky == "before" ? pos.ch - 1 : pos.ch)) {
+ pos = prevPos
+ break
+ }
+ diff = cursorCoords(cm, pos, "line", lineObj, preparedMeasure).left - x
+ } while ((dir < 0) != (diff < 0) && (Math.abs(diff) <= Math.abs(prevDiff)))
+ if (Math.abs(diff) > Math.abs(prevDiff)) {
+ if ((diff < 0) == (prevDiff < 0)) { throw new Error("Broke out of infinite loop in coordsCharInner") }
+ pos = prevPos
+ }
+ } else {
+ var ch = findFirst(function (ch) {
+ var box = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), "line")
+ if (box.top > y) {
+ // For the cursor stickiness
+ end = Math.min(ch, end)
+ return true
+ }
+ else if (box.bottom <= y) { return false }
+ else if (box.left > x) { return true }
+ else if (box.right < x) { return false }
+ else { return (x - box.left < box.right - x) }
+ }, begin, end)
+ ch = skipExtendingChars(lineObj.text, ch, 1)
+ pos = new Pos(lineNo, ch, ch == end ? "before" : "after")
+ }
+ var coords = cursorCoords(cm, pos, "line", lineObj, preparedMeasure)
+ if (y < coords.top || coords.bottom < y) { pos.outside = true }
+ pos.xRel = x < coords.left ? -1 : (x > coords.right ? 1 : 0)
+ return pos
+}
+
+var measureText
+// Compute the default text height.
+function textHeight(display) {
+ if (display.cachedTextHeight != null) { return display.cachedTextHeight }
+ if (measureText == null) {
+ measureText = elt("pre")
+ // Measure a bunch of lines, for browsers that compute
+ // fractional heights.
+ for (var i = 0; i < 49; ++i) {
+ measureText.appendChild(document.createTextNode("x"))
+ measureText.appendChild(elt("br"))
+ }
+ measureText.appendChild(document.createTextNode("x"))
+ }
+ removeChildrenAndAdd(display.measure, measureText)
+ var height = measureText.offsetHeight / 50
+ if (height > 3) { display.cachedTextHeight = height }
+ removeChildren(display.measure)
+ return height || 1
+}
+
+// Compute the default character width.
+function charWidth(display) {
+ if (display.cachedCharWidth != null) { return display.cachedCharWidth }
+ var anchor = elt("span", "xxxxxxxxxx")
+ var pre = elt("pre", [anchor])
+ removeChildrenAndAdd(display.measure, pre)
+ var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10
+ if (width > 2) { display.cachedCharWidth = width }
+ return width || 10
+}
+
+// Do a bulk-read of the DOM positions and sizes needed to draw the
+// view, so that we don't interleave reading and writing to the DOM.
+function getDimensions(cm) {
+ var d = cm.display, left = {}, width = {}
+ var gutterLeft = d.gutters.clientLeft
+ for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
+ left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft
+ width[cm.options.gutters[i]] = n.clientWidth
+ }
+ return {fixedPos: compensateForHScroll(d),
+ gutterTotalWidth: d.gutters.offsetWidth,
+ gutterLeft: left,
+ gutterWidth: width,
+ wrapperWidth: d.wrapper.clientWidth}
+}
+
+// Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
+// but using getBoundingClientRect to get a sub-pixel-accurate
+// result.
+function compensateForHScroll(display) {
+ return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left
+}
+
+// Returns a function that estimates the height of a line, to use as
+// first approximation until the line becomes visible (and is thus
+// properly measurable).
+function estimateHeight(cm) {
+ var th = textHeight(cm.display), wrapping = cm.options.lineWrapping
+ var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3)
+ return function (line) {
+ if (lineIsHidden(cm.doc, line)) { return 0 }
+
+ var widgetsHeight = 0
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {
+ if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height }
+ } }
+
+ if (wrapping)
+ { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }
+ else
+ { return widgetsHeight + th }
+ }
+}
+
+function estimateLineHeights(cm) {
+ var doc = cm.doc, est = estimateHeight(cm)
+ doc.iter(function (line) {
+ var estHeight = est(line)
+ if (estHeight != line.height) { updateLineHeight(line, estHeight) }
+ })
+}
+
+// Given a mouse event, find the corresponding position. If liberal
+// is false, it checks whether a gutter or scrollbar was clicked,
+// and returns null if it was. forRect is used by rectangular
+// selections, and tries to estimate a character position even for
+// coordinates beyond the right of the text.
+function posFromMouse(cm, e, liberal, forRect) {
+ var display = cm.display
+ if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null }
+
+ var x, y, space = display.lineSpace.getBoundingClientRect()
+ // Fails unpredictably on IE[67] when mouse is dragged around quickly.
+ try { x = e.clientX - space.left; y = e.clientY - space.top }
+ catch (e) { return null }
+ var coords = coordsChar(cm, x, y), line
+ if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
+ var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length
+ coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff))
+ }
+ return coords
+}
+
+// Find the view element corresponding to a given line. Return null
+// when the line isn't visible.
+function findViewIndex(cm, n) {
+ if (n >= cm.display.viewTo) { return null }
+ n -= cm.display.viewFrom
+ if (n < 0) { return null }
+ var view = cm.display.view
+ for (var i = 0; i < view.length; i++) {
+ n -= view[i].size
+ if (n < 0) { return i }
+ }
+}
+
+function updateSelection(cm) {
+ cm.display.input.showSelection(cm.display.input.prepareSelection())
+}
+
+function prepareSelection(cm, primary) {
+ var doc = cm.doc, result = {}
+ var curFragment = result.cursors = document.createDocumentFragment()
+ var selFragment = result.selection = document.createDocumentFragment()
+
+ for (var i = 0; i < doc.sel.ranges.length; i++) {
+ if (primary === false && i == doc.sel.primIndex) { continue }
+ var range = doc.sel.ranges[i]
+ if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }
+ var collapsed = range.empty()
+ if (collapsed || cm.options.showCursorWhenSelecting)
+ { drawSelectionCursor(cm, range.head, curFragment) }
+ if (!collapsed)
+ { drawSelectionRange(cm, range, selFragment) }
+ }
+ return result
+}
+
+// Draws a cursor for the given range
+function drawSelectionCursor(cm, head, output) {
+ var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine)
+
+ var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"))
+ cursor.style.left = pos.left + "px"
+ cursor.style.top = pos.top + "px"
+ cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"
+
+ if (pos.other) {
+ // Secondary cursor, shown when on a 'jump' in bi-directional text
+ var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"))
+ otherCursor.style.display = ""
+ otherCursor.style.left = pos.other.left + "px"
+ otherCursor.style.top = pos.other.top + "px"
+ otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"
+ }
+}
+
+// Draws the given range as a highlighted selection
+function drawSelectionRange(cm, range, output) {
+ var display = cm.display, doc = cm.doc
+ var fragment = document.createDocumentFragment()
+ var padding = paddingH(cm.display), leftSide = padding.left
+ var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right
+
+ function add(left, top, width, bottom) {
+ if (top < 0) { top = 0 }
+ top = Math.round(top)
+ bottom = Math.round(bottom)
+ fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px")))
+ }
+
+ function drawForLine(line, fromArg, toArg) {
+ var lineObj = getLine(doc, line)
+ var lineLen = lineObj.text.length
+ var start, end
+ function coords(ch, bias) {
+ return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
+ }
+
+ iterateBidiSections(getOrder(lineObj, doc.direction), fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir) {
+ var leftPos = coords(from, "left"), rightPos, left, right
+ if (from == to) {
+ rightPos = leftPos
+ left = right = leftPos.left
+ } else {
+ rightPos = coords(to - 1, "right")
+ if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp }
+ left = leftPos.left
+ right = rightPos.right
+ }
+ if (fromArg == null && from == 0) { left = leftSide }
+ if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part
+ add(left, leftPos.top, null, leftPos.bottom)
+ left = leftSide
+ if (leftPos.bottom < rightPos.top) { add(left, leftPos.bottom, null, rightPos.top) }
+ }
+ if (toArg == null && to == lineLen) { right = rightSide }
+ if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)
+ { start = leftPos }
+ if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)
+ { end = rightPos }
+ if (left < leftSide + 1) { left = leftSide }
+ add(left, rightPos.top, right - left, rightPos.bottom)
+ })
+ return {start: start, end: end}
+ }
+
+ var sFrom = range.from(), sTo = range.to()
+ if (sFrom.line == sTo.line) {
+ drawForLine(sFrom.line, sFrom.ch, sTo.ch)
+ } else {
+ var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line)
+ var singleVLine = visualLine(fromLine) == visualLine(toLine)
+ var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end
+ var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start
+ if (singleVLine) {
+ if (leftEnd.top < rightStart.top - 2) {
+ add(leftEnd.right, leftEnd.top, null, leftEnd.bottom)
+ add(leftSide, rightStart.top, rightStart.left, rightStart.bottom)
+ } else {
+ add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom)
+ }
+ }
+ if (leftEnd.bottom < rightStart.top)
+ { add(leftSide, leftEnd.bottom, null, rightStart.top) }
+ }
+
+ output.appendChild(fragment)
+}
+
+// Cursor-blinking
+function restartBlink(cm) {
+ if (!cm.state.focused) { return }
+ var display = cm.display
+ clearInterval(display.blinker)
+ var on = true
+ display.cursorDiv.style.visibility = ""
+ if (cm.options.cursorBlinkRate > 0)
+ { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; },
+ cm.options.cursorBlinkRate) }
+ else if (cm.options.cursorBlinkRate < 0)
+ { display.cursorDiv.style.visibility = "hidden" }
+}
+
+function ensureFocus(cm) {
+ if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) }
+}
+
+function delayBlurEvent(cm) {
+ cm.state.delayingBlurEvent = true
+ setTimeout(function () { if (cm.state.delayingBlurEvent) {
+ cm.state.delayingBlurEvent = false
+ onBlur(cm)
+ } }, 100)
+}
+
+function onFocus(cm, e) {
+ if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false }
+
+ if (cm.options.readOnly == "nocursor") { return }
+ if (!cm.state.focused) {
+ signal(cm, "focus", cm, e)
+ cm.state.focused = true
+ addClass(cm.display.wrapper, "CodeMirror-focused")
+ // This test prevents this from firing when a context
+ // menu is closed (since the input reset would kill the
+ // select-all detection hack)
+ if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
+ cm.display.input.reset()
+ if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20) } // Issue #1730
+ }
+ cm.display.input.receivedFocus()
+ }
+ restartBlink(cm)
+}
+function onBlur(cm, e) {
+ if (cm.state.delayingBlurEvent) { return }
+
+ if (cm.state.focused) {
+ signal(cm, "blur", cm, e)
+ cm.state.focused = false
+ rmClass(cm.display.wrapper, "CodeMirror-focused")
+ }
+ clearInterval(cm.display.blinker)
+ setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false } }, 150)
+}
+
+// Re-align line numbers and gutter marks to compensate for
+// horizontal scrolling.
+function alignHorizontally(cm) {
+ var display = cm.display, view = display.view
+ if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }
+ var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft
+ var gutterW = display.gutters.offsetWidth, left = comp + "px"
+ for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {
+ if (cm.options.fixedGutter) {
+ if (view[i].gutter)
+ { view[i].gutter.style.left = left }
+ if (view[i].gutterBackground)
+ { view[i].gutterBackground.style.left = left }
+ }
+ var align = view[i].alignable
+ if (align) { for (var j = 0; j < align.length; j++)
+ { align[j].style.left = left } }
+ } }
+ if (cm.options.fixedGutter)
+ { display.gutters.style.left = (comp + gutterW) + "px" }
+}
+
+// Used to ensure that the line number gutter is still the right
+// size for the current document size. Returns true when an update
+// is needed.
+function maybeUpdateLineNumberWidth(cm) {
+ if (!cm.options.lineNumbers) { return false }
+ var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display
+ if (last.length != display.lineNumChars) {
+ var test = display.measure.appendChild(elt("div", [elt("div", last)],
+ "CodeMirror-linenumber CodeMirror-gutter-elt"))
+ var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW
+ display.lineGutter.style.width = ""
+ display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1
+ display.lineNumWidth = display.lineNumInnerWidth + padding
+ display.lineNumChars = display.lineNumInnerWidth ? last.length : -1
+ display.lineGutter.style.width = display.lineNumWidth + "px"
+ updateGutterSpace(cm)
+ return true
+ }
+ return false
+}
+
+// Read the actual heights of the rendered lines, and update their
+// stored heights to match.
+function updateHeightsInViewport(cm) {
+ var display = cm.display
+ var prevBottom = display.lineDiv.offsetTop
+ for (var i = 0; i < display.view.length; i++) {
+ var cur = display.view[i], height = (void 0)
+ if (cur.hidden) { continue }
+ if (ie && ie_version < 8) {
+ var bot = cur.node.offsetTop + cur.node.offsetHeight
+ height = bot - prevBottom
+ prevBottom = bot
+ } else {
+ var box = cur.node.getBoundingClientRect()
+ height = box.bottom - box.top
+ }
+ var diff = cur.line.height - height
+ if (height < 2) { height = textHeight(display) }
+ if (diff > .001 || diff < -.001) {
+ updateLineHeight(cur.line, height)
+ updateWidgetHeight(cur.line)
+ if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)
+ { updateWidgetHeight(cur.rest[j]) } }
+ }
+ }
+}
+
+// Read and store the height of line widgets associated with the
+// given line.
+function updateWidgetHeight(line) {
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i)
+ { line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight } }
+}
+
+// Compute the lines that are visible in a given viewport (defaults
+// the the current scroll position). viewport may contain top,
+// height, and ensure (see op.scrollToPos) properties.
+function visibleLines(display, doc, viewport) {
+ var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop
+ top = Math.floor(top - paddingTop(display))
+ var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight
+
+ var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom)
+ // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
+ // forces those lines into the viewport (if possible).
+ if (viewport && viewport.ensure) {
+ var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line
+ if (ensureFrom < from) {
+ from = ensureFrom
+ to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)
+ } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
+ from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight)
+ to = ensureTo
+ }
+ }
+ return {from: from, to: Math.max(to, from + 1)}
+}
+
+// Sync the scrollable area and scrollbars, ensure the viewport
+// covers the visible area.
+function setScrollTop(cm, val) {
+ if (Math.abs(cm.doc.scrollTop - val) < 2) { return }
+ cm.doc.scrollTop = val
+ if (!gecko) { updateDisplaySimple(cm, {top: val}) }
+ if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val }
+ cm.display.scrollbars.setScrollTop(val)
+ if (gecko) { updateDisplaySimple(cm) }
+ startWorker(cm, 100)
+}
+// Sync scroller and scrollbar, ensure the gutter elements are
+// aligned.
+function setScrollLeft(cm, val, isScroller) {
+ if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) { return }
+ val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)
+ cm.doc.scrollLeft = val
+ alignHorizontally(cm)
+ if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val }
+ cm.display.scrollbars.setScrollLeft(val)
+}
+
+// Since the delta values reported on mouse wheel events are
+// unstandardized between browsers and even browser versions, and
+// generally horribly unpredictable, this code starts by measuring
+// the scroll effect that the first few mouse wheel events have,
+// and, from that, detects the way it can convert deltas to pixel
+// offsets afterwards.
+//
+// The reason we want to know the amount a wheel event will scroll
+// is that it gives us a chance to update the display before the
+// actual scrolling happens, reducing flickering.
+
+var wheelSamples = 0;
+var wheelPixelsPerUnit = null;
+// Fill in a browser-detected starting value on browsers where we
+// know one. These don't have to be accurate -- the result of them
+// being wrong would just be a slight flicker on the first wheel
+// scroll (if it is large enough).
+if (ie) { wheelPixelsPerUnit = -.53 }
+else if (gecko) { wheelPixelsPerUnit = 15 }
+else if (chrome) { wheelPixelsPerUnit = -.7 }
+else if (safari) { wheelPixelsPerUnit = -1/3 }
+
+function wheelEventDelta(e) {
+ var dx = e.wheelDeltaX, dy = e.wheelDeltaY
+ if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail }
+ if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail }
+ else if (dy == null) { dy = e.wheelDelta }
+ return {x: dx, y: dy}
+}
+function wheelEventPixels(e) {
+ var delta = wheelEventDelta(e)
+ delta.x *= wheelPixelsPerUnit
+ delta.y *= wheelPixelsPerUnit
+ return delta
+}
+
+function onScrollWheel(cm, e) {
+ var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y
+
+ var display = cm.display, scroll = display.scroller
+ // Quit if there's nothing to scroll here
+ var canScrollX = scroll.scrollWidth > scroll.clientWidth
+ var canScrollY = scroll.scrollHeight > scroll.clientHeight
+ if (!(dx && canScrollX || dy && canScrollY)) { return }
+
+ // Webkit browsers on OS X abort momentum scrolls when the target
+ // of the scroll event is removed from the scrollable element.
+ // This hack (see related code in patchDisplay) makes sure the
+ // element is kept around.
+ if (dy && mac && webkit) {
+ outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
+ for (var i = 0; i < view.length; i++) {
+ if (view[i].node == cur) {
+ cm.display.currentWheelTarget = cur
+ break outer
+ }
+ }
+ }
+ }
+
+ // On some browsers, horizontal scrolling will cause redraws to
+ // happen before the gutter has been realigned, causing it to
+ // wriggle around in a most unseemly way. When we have an
+ // estimated pixels/delta value, we just handle horizontal
+ // scrolling entirely here. It'll be slightly off from native, but
+ // better than glitching out.
+ if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
+ if (dy && canScrollY)
+ { setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))) }
+ setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)))
+ // Only prevent default scrolling if vertical scrolling is
+ // actually possible. Otherwise, it causes vertical scroll
+ // jitter on OSX trackpads when deltaX is small and deltaY
+ // is large (issue #3579)
+ if (!dy || (dy && canScrollY))
+ { e_preventDefault(e) }
+ display.wheelStartX = null // Abort measurement, if in progress
+ return
+ }
+
+ // 'Project' the visible viewport to cover the area that is being
+ // scrolled into view (if we know enough to estimate it).
+ if (dy && wheelPixelsPerUnit != null) {
+ var pixels = dy * wheelPixelsPerUnit
+ var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight
+ if (pixels < 0) { top = Math.max(0, top + pixels - 50) }
+ else { bot = Math.min(cm.doc.height, bot + pixels + 50) }
+ updateDisplaySimple(cm, {top: top, bottom: bot})
+ }
+
+ if (wheelSamples < 20) {
+ if (display.wheelStartX == null) {
+ display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop
+ display.wheelDX = dx; display.wheelDY = dy
+ setTimeout(function () {
+ if (display.wheelStartX == null) { return }
+ var movedX = scroll.scrollLeft - display.wheelStartX
+ var movedY = scroll.scrollTop - display.wheelStartY
+ var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
+ (movedX && display.wheelDX && movedX / display.wheelDX)
+ display.wheelStartX = display.wheelStartY = null
+ if (!sample) { return }
+ wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1)
+ ++wheelSamples
+ }, 200)
+ } else {
+ display.wheelDX += dx; display.wheelDY += dy
+ }
+ }
+}
+
+// SCROLLBARS
+
+// Prepare DOM reads needed to update the scrollbars. Done in one
+// shot to minimize update/measure roundtrips.
+function measureForScrollbars(cm) {
+ var d = cm.display, gutterW = d.gutters.offsetWidth
+ var docH = Math.round(cm.doc.height + paddingVert(cm.display))
+ return {
+ clientHeight: d.scroller.clientHeight,
+ viewHeight: d.wrapper.clientHeight,
+ scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
+ viewWidth: d.wrapper.clientWidth,
+ barLeft: cm.options.fixedGutter ? gutterW : 0,
+ docHeight: docH,
+ scrollHeight: docH + scrollGap(cm) + d.barHeight,
+ nativeBarWidth: d.nativeBarWidth,
+ gutterWidth: gutterW
+ }
+}
+
+var NativeScrollbars = function(place, scroll, cm) {
+ this.cm = cm
+ var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar")
+ var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar")
+ place(vert); place(horiz)
+
+ on(vert, "scroll", function () {
+ if (vert.clientHeight) { scroll(vert.scrollTop, "vertical") }
+ })
+ on(horiz, "scroll", function () {
+ if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal") }
+ })
+
+ this.checkedZeroWidth = false
+ // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
+ if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px" }
+};
+
+NativeScrollbars.prototype.update = function (measure) {
+ var needsH = measure.scrollWidth > measure.clientWidth + 1
+ var needsV = measure.scrollHeight > measure.clientHeight + 1
+ var sWidth = measure.nativeBarWidth
+
+ if (needsV) {
+ this.vert.style.display = "block"
+ this.vert.style.bottom = needsH ? sWidth + "px" : "0"
+ var totalHeight = measure.viewHeight - (needsH ? sWidth : 0)
+ // A bug in IE8 can cause this value to be negative, so guard it.
+ this.vert.firstChild.style.height =
+ Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"
+ } else {
+ this.vert.style.display = ""
+ this.vert.firstChild.style.height = "0"
+ }
+
+ if (needsH) {
+ this.horiz.style.display = "block"
+ this.horiz.style.right = needsV ? sWidth + "px" : "0"
+ this.horiz.style.left = measure.barLeft + "px"
+ var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0)
+ this.horiz.firstChild.style.width =
+ Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"
+ } else {
+ this.horiz.style.display = ""
+ this.horiz.firstChild.style.width = "0"
+ }
+
+ if (!this.checkedZeroWidth && measure.clientHeight > 0) {
+ if (sWidth == 0) { this.zeroWidthHack() }
+ this.checkedZeroWidth = true
+ }
+
+ return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
+};
+
+NativeScrollbars.prototype.setScrollLeft = function (pos) {
+ if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos }
+ if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz") }
+};
+
+NativeScrollbars.prototype.setScrollTop = function (pos) {
+ if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos }
+ if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert") }
+};
+
+NativeScrollbars.prototype.zeroWidthHack = function () {
+ var w = mac && !mac_geMountainLion ? "12px" : "18px"
+ this.horiz.style.height = this.vert.style.width = w
+ this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"
+ this.disableHoriz = new Delayed
+ this.disableVert = new Delayed
+};
+
+NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {
+ bar.style.pointerEvents = "auto"
+ function maybeDisable() {
+ // To find out whether the scrollbar is still visible, we
+ // check whether the element under the pixel in the bottom
+ // right corner of the scrollbar box is the scrollbar box
+ // itself (when the bar is still visible) or its filler child
+ // (when the bar is hidden). If it is still visible, we keep
+ // it enabled, if it's hidden, we disable pointer events.
+ var box = bar.getBoundingClientRect()
+ var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
+ : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1)
+ if (elt != bar) { bar.style.pointerEvents = "none" }
+ else { delay.set(1000, maybeDisable) }
+ }
+ delay.set(1000, maybeDisable)
+};
+
+NativeScrollbars.prototype.clear = function () {
+ var parent = this.horiz.parentNode
+ parent.removeChild(this.horiz)
+ parent.removeChild(this.vert)
+};
+
+var NullScrollbars = function () {};
+
+NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };
+NullScrollbars.prototype.setScrollLeft = function () {};
+NullScrollbars.prototype.setScrollTop = function () {};
+NullScrollbars.prototype.clear = function () {};
+
+function updateScrollbars(cm, measure) {
+ if (!measure) { measure = measureForScrollbars(cm) }
+ var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight
+ updateScrollbarsInner(cm, measure)
+ for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
+ if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
+ { updateHeightsInViewport(cm) }
+ updateScrollbarsInner(cm, measureForScrollbars(cm))
+ startWidth = cm.display.barWidth; startHeight = cm.display.barHeight
+ }
+}
+
+// Re-synchronize the fake scrollbars with the actual size of the
+// content.
+function updateScrollbarsInner(cm, measure) {
+ var d = cm.display
+ var sizes = d.scrollbars.update(measure)
+
+ d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"
+ d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"
+ d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"
+
+ if (sizes.right && sizes.bottom) {
+ d.scrollbarFiller.style.display = "block"
+ d.scrollbarFiller.style.height = sizes.bottom + "px"
+ d.scrollbarFiller.style.width = sizes.right + "px"
+ } else { d.scrollbarFiller.style.display = "" }
+ if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
+ d.gutterFiller.style.display = "block"
+ d.gutterFiller.style.height = sizes.bottom + "px"
+ d.gutterFiller.style.width = measure.gutterWidth + "px"
+ } else { d.gutterFiller.style.display = "" }
+}
+
+var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}
+
+function initScrollbars(cm) {
+ if (cm.display.scrollbars) {
+ cm.display.scrollbars.clear()
+ if (cm.display.scrollbars.addClass)
+ { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass) }
+ }
+
+ cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
+ cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller)
+ // Prevent clicks in the scrollbars from killing focus
+ on(node, "mousedown", function () {
+ if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0) }
+ })
+ node.setAttribute("cm-not-content", "true")
+ }, function (pos, axis) {
+ if (axis == "horizontal") { setScrollLeft(cm, pos) }
+ else { setScrollTop(cm, pos) }
+ }, cm)
+ if (cm.display.scrollbars.addClass)
+ { addClass(cm.display.wrapper, cm.display.scrollbars.addClass) }
+}
+
+// SCROLLING THINGS INTO VIEW
+
+// If an editor sits on the top or bottom of the window, partially
+// scrolled out of view, this ensures that the cursor is visible.
+function maybeScrollWindow(cm, rect) {
+ if (signalDOMEvent(cm, "scrollCursorIntoView")) { return }
+
+ var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null
+ if (rect.top + box.top < 0) { doScroll = true }
+ else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false }
+ if (doScroll != null && !phantom) {
+ var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;"))
+ cm.display.lineSpace.appendChild(scrollNode)
+ scrollNode.scrollIntoView(doScroll)
+ cm.display.lineSpace.removeChild(scrollNode)
+ }
+}
+
+// Scroll a given position into view (immediately), verifying that
+// it actually became visible (as line heights are accurately
+// measured, the position of something may 'drift' during drawing).
+function scrollPosIntoView(cm, pos, end, margin) {
+ if (margin == null) { margin = 0 }
+ var rect
+ for (var limit = 0; limit < 5; limit++) {
+ var changed = false
+ var coords = cursorCoords(cm, pos)
+ var endCoords = !end || end == pos ? coords : cursorCoords(cm, end)
+ rect = {left: Math.min(coords.left, endCoords.left),
+ top: Math.min(coords.top, endCoords.top) - margin,
+ right: Math.max(coords.left, endCoords.left),
+ bottom: Math.max(coords.bottom, endCoords.bottom) + margin}
+ var scrollPos = calculateScrollPos(cm, rect)
+ var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft
+ if (scrollPos.scrollTop != null) {
+ setScrollTop(cm, scrollPos.scrollTop)
+ if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true }
+ }
+ if (scrollPos.scrollLeft != null) {
+ setScrollLeft(cm, scrollPos.scrollLeft)
+ if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true }
+ }
+ if (!changed) { break }
+ }
+ return rect
+}
+
+// Scroll a given set of coordinates into view (immediately).
+function scrollIntoView(cm, rect) {
+ var scrollPos = calculateScrollPos(cm, rect)
+ if (scrollPos.scrollTop != null) { setScrollTop(cm, scrollPos.scrollTop) }
+ if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft) }
+}
+
+// Calculate a new scroll position needed to scroll the given
+// rectangle into view. Returns an object with scrollTop and
+// scrollLeft properties. When these are undefined, the
+// vertical/horizontal position does not need to be adjusted.
+function calculateScrollPos(cm, rect) {
+ var display = cm.display, snapMargin = textHeight(cm.display)
+ if (rect.top < 0) { rect.top = 0 }
+ var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop
+ var screen = displayHeight(cm), result = {}
+ if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen }
+ var docBottom = cm.doc.height + paddingVert(display)
+ var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin
+ if (rect.top < screentop) {
+ result.scrollTop = atTop ? 0 : rect.top
+ } else if (rect.bottom > screentop + screen) {
+ var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen)
+ if (newTop != screentop) { result.scrollTop = newTop }
+ }
+
+ var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft
+ var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0)
+ var tooWide = rect.right - rect.left > screenw
+ if (tooWide) { rect.right = rect.left + screenw }
+ if (rect.left < 10)
+ { result.scrollLeft = 0 }
+ else if (rect.left < screenleft)
+ { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)) }
+ else if (rect.right > screenw + screenleft - 3)
+ { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw }
+ return result
+}
+
+// Store a relative adjustment to the scroll position in the current
+// operation (to be applied when the operation finishes).
+function addToScrollPos(cm, left, top) {
+ if (left != null || top != null) { resolveScrollToPos(cm) }
+ if (left != null)
+ { cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left }
+ if (top != null)
+ { cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top }
+}
+
+// Make sure that at the end of the operation the current cursor is
+// shown.
+function ensureCursorVisible(cm) {
+ resolveScrollToPos(cm)
+ var cur = cm.getCursor(), from = cur, to = cur
+ if (!cm.options.lineWrapping) {
+ from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur
+ to = Pos(cur.line, cur.ch + 1)
+ }
+ cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin}
+}
+
+// When an operation has its scrollToPos property set, and another
+// scroll action is applied before the end of the operation, this
+// 'simulates' scrolling that position into view in a cheap way, so
+// that the effect of intermediate scroll commands is not ignored.
+function resolveScrollToPos(cm) {
+ var range = cm.curOp.scrollToPos
+ if (range) {
+ cm.curOp.scrollToPos = null
+ var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to)
+ var sPos = calculateScrollPos(cm, {
+ left: Math.min(from.left, to.left),
+ top: Math.min(from.top, to.top) - range.margin,
+ right: Math.max(from.right, to.right),
+ bottom: Math.max(from.bottom, to.bottom) + range.margin
+ })
+ cm.scrollTo(sPos.scrollLeft, sPos.scrollTop)
+ }
+}
+
+// Operations are used to wrap a series of changes to the editor
+// state in such a way that each change won't have to update the
+// cursor and display (which would be awkward, slow, and
+// error-prone). Instead, display updates are batched and then all
+// combined and executed at once.
+
+var nextOpId = 0
+// Start a new operation.
+function startOperation(cm) {
+ cm.curOp = {
+ cm: cm,
+ viewChanged: false, // Flag that indicates that lines might need to be redrawn
+ startHeight: cm.doc.height, // Used to detect need to update scrollbar
+ forceUpdate: false, // Used to force a redraw
+ updateInput: null, // Whether to reset the input textarea
+ typing: false, // Whether this reset should be careful to leave existing text (for compositing)
+ changeObjs: null, // Accumulated changes, for firing change events
+ cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
+ cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
+ selectionChanged: false, // Whether the selection needs to be redrawn
+ updateMaxLine: false, // Set when the widest line needs to be determined anew
+ scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
+ scrollToPos: null, // Used to scroll to a specific position
+ focus: false,
+ id: ++nextOpId // Unique ID
+ }
+ pushOperation(cm.curOp)
+}
+
+// Finish an operation, updating the display and signalling delayed events
+function endOperation(cm) {
+ var op = cm.curOp
+ finishOperation(op, function (group) {
+ for (var i = 0; i < group.ops.length; i++)
+ { group.ops[i].cm.curOp = null }
+ endOperations(group)
+ })
+}
+
+// The DOM updates done when an operation finishes are batched so
+// that the minimum number of relayouts are required.
+function endOperations(group) {
+ var ops = group.ops
+ for (var i = 0; i < ops.length; i++) // Read DOM
+ { endOperation_R1(ops[i]) }
+ for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)
+ { endOperation_W1(ops[i$1]) }
+ for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM
+ { endOperation_R2(ops[i$2]) }
+ for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)
+ { endOperation_W2(ops[i$3]) }
+ for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM
+ { endOperation_finish(ops[i$4]) }
+}
+
+function endOperation_R1(op) {
+ var cm = op.cm, display = cm.display
+ maybeClipScrollbars(cm)
+ if (op.updateMaxLine) { findMaxLine(cm) }
+
+ op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
+ op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
+ op.scrollToPos.to.line >= display.viewTo) ||
+ display.maxLineChanged && cm.options.lineWrapping
+ op.update = op.mustUpdate &&
+ new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate)
+}
+
+function endOperation_W1(op) {
+ op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update)
+}
+
+function endOperation_R2(op) {
+ var cm = op.cm, display = cm.display
+ if (op.updatedDisplay) { updateHeightsInViewport(cm) }
+
+ op.barMeasure = measureForScrollbars(cm)
+
+ // If the max line changed since it was last measured, measure it,
+ // and ensure the document's width matches it.
+ // updateDisplay_W2 will use these properties to do the actual resizing
+ if (display.maxLineChanged && !cm.options.lineWrapping) {
+ op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3
+ cm.display.sizerWidth = op.adjustWidthTo
+ op.barMeasure.scrollWidth =
+ Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth)
+ op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm))
+ }
+
+ if (op.updatedDisplay || op.selectionChanged)
+ { op.preparedSelection = display.input.prepareSelection(op.focus) }
+}
+
+function endOperation_W2(op) {
+ var cm = op.cm
+
+ if (op.adjustWidthTo != null) {
+ cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"
+ if (op.maxScrollLeft < cm.doc.scrollLeft)
+ { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true) }
+ cm.display.maxLineChanged = false
+ }
+
+ var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus())
+ if (op.preparedSelection)
+ { cm.display.input.showSelection(op.preparedSelection, takeFocus) }
+ if (op.updatedDisplay || op.startHeight != cm.doc.height)
+ { updateScrollbars(cm, op.barMeasure) }
+ if (op.updatedDisplay)
+ { setDocumentHeight(cm, op.barMeasure) }
+
+ if (op.selectionChanged) { restartBlink(cm) }
+
+ if (cm.state.focused && op.updateInput)
+ { cm.display.input.reset(op.typing) }
+ if (takeFocus) { ensureFocus(op.cm) }
+}
+
+function endOperation_finish(op) {
+ var cm = op.cm, display = cm.display, doc = cm.doc
+
+ if (op.updatedDisplay) { postUpdateDisplay(cm, op.update) }
+
+ // Abort mouse wheel delta measurement, when scrolling explicitly
+ if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
+ { display.wheelStartX = display.wheelStartY = null }
+
+ // Propagate the scroll position to the actual DOM scroller
+ if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) {
+ doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop))
+ display.scrollbars.setScrollTop(doc.scrollTop)
+ display.scroller.scrollTop = doc.scrollTop
+ }
+ if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) {
+ doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft))
+ display.scrollbars.setScrollLeft(doc.scrollLeft)
+ display.scroller.scrollLeft = doc.scrollLeft
+ alignHorizontally(cm)
+ }
+ // If we need to scroll a specific position into view, do so.
+ if (op.scrollToPos) {
+ var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
+ clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin)
+ maybeScrollWindow(cm, rect)
+ }
+
+ // Fire events for markers that are hidden/unidden by editing or
+ // undoing
+ var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers
+ if (hidden) { for (var i = 0; i < hidden.length; ++i)
+ { if (!hidden[i].lines.length) { signal(hidden[i], "hide") } } }
+ if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)
+ { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide") } } }
+
+ if (display.wrapper.offsetHeight)
+ { doc.scrollTop = cm.display.scroller.scrollTop }
+
+ // Fire change events, and delayed event handlers
+ if (op.changeObjs)
+ { signal(cm, "changes", cm, op.changeObjs) }
+ if (op.update)
+ { op.update.finish() }
+}
+
+// Run the given function in an operation
+function runInOp(cm, f) {
+ if (cm.curOp) { return f() }
+ startOperation(cm)
+ try { return f() }
+ finally { endOperation(cm) }
+}
+// Wraps a function in an operation. Returns the wrapped function.
+function operation(cm, f) {
+ return function() {
+ if (cm.curOp) { return f.apply(cm, arguments) }
+ startOperation(cm)
+ try { return f.apply(cm, arguments) }
+ finally { endOperation(cm) }
+ }
+}
+// Used to add methods to editor and doc instances, wrapping them in
+// operations.
+function methodOp(f) {
+ return function() {
+ if (this.curOp) { return f.apply(this, arguments) }
+ startOperation(this)
+ try { return f.apply(this, arguments) }
+ finally { endOperation(this) }
+ }
+}
+function docMethodOp(f) {
+ return function() {
+ var cm = this.cm
+ if (!cm || cm.curOp) { return f.apply(this, arguments) }
+ startOperation(cm)
+ try { return f.apply(this, arguments) }
+ finally { endOperation(cm) }
+ }
+}
+
+// Updates the display.view data structure for a given change to the
+// document. From and to are in pre-change coordinates. Lendiff is
+// the amount of lines added or subtracted by the change. This is
+// used for changes that span multiple lines, or change the way
+// lines are divided into visual lines. regLineChange (below)
+// registers single-line changes.
+function regChange(cm, from, to, lendiff) {
+ if (from == null) { from = cm.doc.first }
+ if (to == null) { to = cm.doc.first + cm.doc.size }
+ if (!lendiff) { lendiff = 0 }
+
+ var display = cm.display
+ if (lendiff && to < display.viewTo &&
+ (display.updateLineNumbers == null || display.updateLineNumbers > from))
+ { display.updateLineNumbers = from }
+
+ cm.curOp.viewChanged = true
+
+ if (from >= display.viewTo) { // Change after
+ if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
+ { resetView(cm) }
+ } else if (to <= display.viewFrom) { // Change before
+ if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
+ resetView(cm)
+ } else {
+ display.viewFrom += lendiff
+ display.viewTo += lendiff
+ }
+ } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
+ resetView(cm)
+ } else if (from <= display.viewFrom) { // Top overlap
+ var cut = viewCuttingPoint(cm, to, to + lendiff, 1)
+ if (cut) {
+ display.view = display.view.slice(cut.index)
+ display.viewFrom = cut.lineN
+ display.viewTo += lendiff
+ } else {
+ resetView(cm)
+ }
+ } else if (to >= display.viewTo) { // Bottom overlap
+ var cut$1 = viewCuttingPoint(cm, from, from, -1)
+ if (cut$1) {
+ display.view = display.view.slice(0, cut$1.index)
+ display.viewTo = cut$1.lineN
+ } else {
+ resetView(cm)
+ }
+ } else { // Gap in the middle
+ var cutTop = viewCuttingPoint(cm, from, from, -1)
+ var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1)
+ if (cutTop && cutBot) {
+ display.view = display.view.slice(0, cutTop.index)
+ .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
+ .concat(display.view.slice(cutBot.index))
+ display.viewTo += lendiff
+ } else {
+ resetView(cm)
+ }
+ }
+
+ var ext = display.externalMeasured
+ if (ext) {
+ if (to < ext.lineN)
+ { ext.lineN += lendiff }
+ else if (from < ext.lineN + ext.size)
+ { display.externalMeasured = null }
+ }
+}
+
+// Register a change to a single line. Type must be one of "text",
+// "gutter", "class", "widget"
+function regLineChange(cm, line, type) {
+ cm.curOp.viewChanged = true
+ var display = cm.display, ext = cm.display.externalMeasured
+ if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
+ { display.externalMeasured = null }
+
+ if (line < display.viewFrom || line >= display.viewTo) { return }
+ var lineView = display.view[findViewIndex(cm, line)]
+ if (lineView.node == null) { return }
+ var arr = lineView.changes || (lineView.changes = [])
+ if (indexOf(arr, type) == -1) { arr.push(type) }
+}
+
+// Clear the view.
+function resetView(cm) {
+ cm.display.viewFrom = cm.display.viewTo = cm.doc.first
+ cm.display.view = []
+ cm.display.viewOffset = 0
+}
+
+function viewCuttingPoint(cm, oldN, newN, dir) {
+ var index = findViewIndex(cm, oldN), diff, view = cm.display.view
+ if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
+ { return {index: index, lineN: newN} }
+ var n = cm.display.viewFrom
+ for (var i = 0; i < index; i++)
+ { n += view[i].size }
+ if (n != oldN) {
+ if (dir > 0) {
+ if (index == view.length - 1) { return null }
+ diff = (n + view[index].size) - oldN
+ index++
+ } else {
+ diff = n - oldN
+ }
+ oldN += diff; newN += diff
+ }
+ while (visualLineNo(cm.doc, newN) != newN) {
+ if (index == (dir < 0 ? 0 : view.length - 1)) { return null }
+ newN += dir * view[index - (dir < 0 ? 1 : 0)].size
+ index += dir
+ }
+ return {index: index, lineN: newN}
+}
+
+// Force the view to cover a given range, adding empty view element
+// or clipping off existing ones as needed.
+function adjustView(cm, from, to) {
+ var display = cm.display, view = display.view
+ if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
+ display.view = buildViewArray(cm, from, to)
+ display.viewFrom = from
+ } else {
+ if (display.viewFrom > from)
+ { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view) }
+ else if (display.viewFrom < from)
+ { display.view = display.view.slice(findViewIndex(cm, from)) }
+ display.viewFrom = from
+ if (display.viewTo < to)
+ { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)) }
+ else if (display.viewTo > to)
+ { display.view = display.view.slice(0, findViewIndex(cm, to)) }
+ }
+ display.viewTo = to
+}
+
+// Count the number of lines in the view whose DOM representation is
+// out of date (or nonexistent).
+function countDirtyView(cm) {
+ var view = cm.display.view, dirty = 0
+ for (var i = 0; i < view.length; i++) {
+ var lineView = view[i]
+ if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty }
+ }
+ return dirty
+}
+
+// HIGHLIGHT WORKER
+
+function startWorker(cm, time) {
+ if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)
+ { cm.state.highlight.set(time, bind(highlightWorker, cm)) }
+}
+
+function highlightWorker(cm) {
+ var doc = cm.doc
+ if (doc.frontier < doc.first) { doc.frontier = doc.first }
+ if (doc.frontier >= cm.display.viewTo) { return }
+ var end = +new Date + cm.options.workTime
+ var state = copyState(doc.mode, getStateBefore(cm, doc.frontier))
+ var changedLines = []
+
+ doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
+ if (doc.frontier >= cm.display.viewFrom) { // Visible
+ var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength
+ var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true)
+ line.styles = highlighted.styles
+ var oldCls = line.styleClasses, newCls = highlighted.classes
+ if (newCls) { line.styleClasses = newCls }
+ else if (oldCls) { line.styleClasses = null }
+ var ischange = !oldStyles || oldStyles.length != line.styles.length ||
+ oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass)
+ for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i] }
+ if (ischange) { changedLines.push(doc.frontier) }
+ line.stateAfter = tooLong ? state : copyState(doc.mode, state)
+ } else {
+ if (line.text.length <= cm.options.maxHighlightLength)
+ { processLine(cm, line.text, state) }
+ line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null
+ }
+ ++doc.frontier
+ if (+new Date > end) {
+ startWorker(cm, cm.options.workDelay)
+ return true
+ }
+ })
+ if (changedLines.length) { runInOp(cm, function () {
+ for (var i = 0; i < changedLines.length; i++)
+ { regLineChange(cm, changedLines[i], "text") }
+ }) }
+}
+
+// DISPLAY DRAWING
+
+var DisplayUpdate = function(cm, viewport, force) {
+ var display = cm.display
+
+ this.viewport = viewport
+ // Store some values that we'll need later (but don't want to force a relayout for)
+ this.visible = visibleLines(display, cm.doc, viewport)
+ this.editorIsHidden = !display.wrapper.offsetWidth
+ this.wrapperHeight = display.wrapper.clientHeight
+ this.wrapperWidth = display.wrapper.clientWidth
+ this.oldDisplayWidth = displayWidth(cm)
+ this.force = force
+ this.dims = getDimensions(cm)
+ this.events = []
+};
+
+DisplayUpdate.prototype.signal = function (emitter, type) {
+ if (hasHandler(emitter, type))
+ { this.events.push(arguments) }
+};
+DisplayUpdate.prototype.finish = function () {
+ var this$1 = this;
+
+ for (var i = 0; i < this.events.length; i++)
+ { signal.apply(null, this$1.events[i]) }
+};
+
+function maybeClipScrollbars(cm) {
+ var display = cm.display
+ if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
+ display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth
+ display.heightForcer.style.height = scrollGap(cm) + "px"
+ display.sizer.style.marginBottom = -display.nativeBarWidth + "px"
+ display.sizer.style.borderRightWidth = scrollGap(cm) + "px"
+ display.scrollbarsClipped = true
+ }
+}
+
+// Does the actual updating of the line display. Bails out
+// (returning false) when there is nothing to be done and forced is
+// false.
+function updateDisplayIfNeeded(cm, update) {
+ var display = cm.display, doc = cm.doc
+
+ if (update.editorIsHidden) {
+ resetView(cm)
+ return false
+ }
+
+ // Bail out if the visible area is already rendered and nothing changed.
+ if (!update.force &&
+ update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
+ display.renderedView == display.view && countDirtyView(cm) == 0)
+ { return false }
+
+ if (maybeUpdateLineNumberWidth(cm)) {
+ resetView(cm)
+ update.dims = getDimensions(cm)
+ }
+
+ // Compute a suitable new viewport (from & to)
+ var end = doc.first + doc.size
+ var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first)
+ var to = Math.min(end, update.visible.to + cm.options.viewportMargin)
+ if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom) }
+ if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo) }
+ if (sawCollapsedSpans) {
+ from = visualLineNo(cm.doc, from)
+ to = visualLineEndNo(cm.doc, to)
+ }
+
+ var different = from != display.viewFrom || to != display.viewTo ||
+ display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth
+ adjustView(cm, from, to)
+
+ display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom))
+ // Position the mover div to align with the current scroll position
+ cm.display.mover.style.top = display.viewOffset + "px"
+
+ var toUpdate = countDirtyView(cm)
+ if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
+ { return false }
+
+ // For big changes, we hide the enclosing element during the
+ // update, since that speeds up the operations on most browsers.
+ var focused = activeElt()
+ if (toUpdate > 4) { display.lineDiv.style.display = "none" }
+ patchDisplay(cm, display.updateLineNumbers, update.dims)
+ if (toUpdate > 4) { display.lineDiv.style.display = "" }
+ display.renderedView = display.view
+ // There might have been a widget with a focused element that got
+ // hidden or updated, if so re-focus it.
+ if (focused && activeElt() != focused && focused.offsetHeight) { focused.focus() }
+
+ // Prevent selection and cursors from interfering with the scroll
+ // width and height.
+ removeChildren(display.cursorDiv)
+ removeChildren(display.selectionDiv)
+ display.gutters.style.height = display.sizer.style.minHeight = 0
+
+ if (different) {
+ display.lastWrapHeight = update.wrapperHeight
+ display.lastWrapWidth = update.wrapperWidth
+ startWorker(cm, 400)
+ }
+
+ display.updateLineNumbers = null
+
+ return true
+}
+
+function postUpdateDisplay(cm, update) {
+ var viewport = update.viewport
+
+ for (var first = true;; first = false) {
+ if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
+ // Clip forced viewport to actual scrollable area.
+ if (viewport && viewport.top != null)
+ { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)} }
+ // Updated line heights might result in the drawn area not
+ // actually covering the viewport. Keep looping until it does.
+ update.visible = visibleLines(cm.display, cm.doc, viewport)
+ if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
+ { break }
+ }
+ if (!updateDisplayIfNeeded(cm, update)) { break }
+ updateHeightsInViewport(cm)
+ var barMeasure = measureForScrollbars(cm)
+ updateSelection(cm)
+ updateScrollbars(cm, barMeasure)
+ setDocumentHeight(cm, barMeasure)
+ }
+
+ update.signal(cm, "update", cm)
+ if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
+ update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo)
+ cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo
+ }
+}
+
+function updateDisplaySimple(cm, viewport) {
+ var update = new DisplayUpdate(cm, viewport)
+ if (updateDisplayIfNeeded(cm, update)) {
+ updateHeightsInViewport(cm)
+ postUpdateDisplay(cm, update)
+ var barMeasure = measureForScrollbars(cm)
+ updateSelection(cm)
+ updateScrollbars(cm, barMeasure)
+ setDocumentHeight(cm, barMeasure)
+ update.finish()
+ }
+}
+
+// Sync the actual display DOM structure with display.view, removing
+// nodes for lines that are no longer in view, and creating the ones
+// that are not there yet, and updating the ones that are out of
+// date.
+function patchDisplay(cm, updateNumbersFrom, dims) {
+ var display = cm.display, lineNumbers = cm.options.lineNumbers
+ var container = display.lineDiv, cur = container.firstChild
+
+ function rm(node) {
+ var next = node.nextSibling
+ // Works around a throw-scroll bug in OS X Webkit
+ if (webkit && mac && cm.display.currentWheelTarget == node)
+ { node.style.display = "none" }
+ else
+ { node.parentNode.removeChild(node) }
+ return next
+ }
+
+ var view = display.view, lineN = display.viewFrom
+ // Loop over the elements in the view, syncing cur (the DOM nodes
+ // in display.lineDiv) with the view as we go.
+ for (var i = 0; i < view.length; i++) {
+ var lineView = view[i]
+ if (lineView.hidden) {
+ } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
+ var node = buildLineElement(cm, lineView, lineN, dims)
+ container.insertBefore(node, cur)
+ } else { // Already drawn
+ while (cur != lineView.node) { cur = rm(cur) }
+ var updateNumber = lineNumbers && updateNumbersFrom != null &&
+ updateNumbersFrom <= lineN && lineView.lineNumber
+ if (lineView.changes) {
+ if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false }
+ updateLineForChanges(cm, lineView, lineN, dims)
+ }
+ if (updateNumber) {
+ removeChildren(lineView.lineNumber)
+ lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)))
+ }
+ cur = lineView.node.nextSibling
+ }
+ lineN += lineView.size
+ }
+ while (cur) { cur = rm(cur) }
+}
+
+function updateGutterSpace(cm) {
+ var width = cm.display.gutters.offsetWidth
+ cm.display.sizer.style.marginLeft = width + "px"
+}
+
+function setDocumentHeight(cm, measure) {
+ cm.display.sizer.style.minHeight = measure.docHeight + "px"
+ cm.display.heightForcer.style.top = measure.docHeight + "px"
+ cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"
+}
+
+// Rebuild the gutter elements, ensure the margin to the left of the
+// code matches their width.
+function updateGutters(cm) {
+ var gutters = cm.display.gutters, specs = cm.options.gutters
+ removeChildren(gutters)
+ var i = 0
+ for (; i < specs.length; ++i) {
+ var gutterClass = specs[i]
+ var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass))
+ if (gutterClass == "CodeMirror-linenumbers") {
+ cm.display.lineGutter = gElt
+ gElt.style.width = (cm.display.lineNumWidth || 1) + "px"
+ }
+ }
+ gutters.style.display = i ? "" : "none"
+ updateGutterSpace(cm)
+}
+
+// Make sure the gutters options contains the element
+// "CodeMirror-linenumbers" when the lineNumbers option is true.
+function setGuttersForLineNumbers(options) {
+ var found = indexOf(options.gutters, "CodeMirror-linenumbers")
+ if (found == -1 && options.lineNumbers) {
+ options.gutters = options.gutters.concat(["CodeMirror-linenumbers"])
+ } else if (found > -1 && !options.lineNumbers) {
+ options.gutters = options.gutters.slice(0)
+ options.gutters.splice(found, 1)
+ }
+}
+
+// Selection objects are immutable. A new one is created every time
+// the selection changes. A selection is one or more non-overlapping
+// (and non-touching) ranges, sorted, and an integer that indicates
+// which one is the primary selection (the one that's scrolled into
+// view, that getCursor returns, etc).
+var Selection = function(ranges, primIndex) {
+ this.ranges = ranges
+ this.primIndex = primIndex
+};
+
+Selection.prototype.primary = function () { return this.ranges[this.primIndex] };
+
+Selection.prototype.equals = function (other) {
+ var this$1 = this;
+
+ if (other == this) { return true }
+ if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }
+ for (var i = 0; i < this.ranges.length; i++) {
+ var here = this$1.ranges[i], there = other.ranges[i]
+ if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }
+ }
+ return true
+};
+
+Selection.prototype.deepCopy = function () {
+ var this$1 = this;
+
+ var out = []
+ for (var i = 0; i < this.ranges.length; i++)
+ { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)) }
+ return new Selection(out, this.primIndex)
+};
+
+Selection.prototype.somethingSelected = function () {
+ var this$1 = this;
+
+ for (var i = 0; i < this.ranges.length; i++)
+ { if (!this$1.ranges[i].empty()) { return true } }
+ return false
+};
+
+Selection.prototype.contains = function (pos, end) {
+ var this$1 = this;
+
+ if (!end) { end = pos }
+ for (var i = 0; i < this.ranges.length; i++) {
+ var range = this$1.ranges[i]
+ if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
+ { return i }
+ }
+ return -1
+};
+
+var Range = function(anchor, head) {
+ this.anchor = anchor; this.head = head
+};
+
+Range.prototype.from = function () { return minPos(this.anchor, this.head) };
+Range.prototype.to = function () { return maxPos(this.anchor, this.head) };
+Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };
+
+// Take an unsorted, potentially overlapping set of ranges, and
+// build a selection out of it. 'Consumes' ranges array (modifying
+// it).
+function normalizeSelection(ranges, primIndex) {
+ var prim = ranges[primIndex]
+ ranges.sort(function (a, b) { return cmp(a.from(), b.from()); })
+ primIndex = indexOf(ranges, prim)
+ for (var i = 1; i < ranges.length; i++) {
+ var cur = ranges[i], prev = ranges[i - 1]
+ if (cmp(prev.to(), cur.from()) >= 0) {
+ var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to())
+ var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head
+ if (i <= primIndex) { --primIndex }
+ ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to))
+ }
+ }
+ return new Selection(ranges, primIndex)
+}
+
+function simpleSelection(anchor, head) {
+ return new Selection([new Range(anchor, head || anchor)], 0)
+}
+
+// Compute the position of the end of a change (its 'to' property
+// refers to the pre-change end).
+function changeEnd(change) {
+ if (!change.text) { return change.to }
+ return Pos(change.from.line + change.text.length - 1,
+ lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))
+}
+
+// Adjust a position to refer to the post-change position of the
+// same text, or the end of the change if the change covers it.
+function adjustForChange(pos, change) {
+ if (cmp(pos, change.from) < 0) { return pos }
+ if (cmp(pos, change.to) <= 0) { return changeEnd(change) }
+
+ var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch
+ if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch }
+ return Pos(line, ch)
+}
+
+function computeSelAfterChange(doc, change) {
+ var out = []
+ for (var i = 0; i < doc.sel.ranges.length; i++) {
+ var range = doc.sel.ranges[i]
+ out.push(new Range(adjustForChange(range.anchor, change),
+ adjustForChange(range.head, change)))
+ }
+ return normalizeSelection(out, doc.sel.primIndex)
+}
+
+function offsetPos(pos, old, nw) {
+ if (pos.line == old.line)
+ { return Pos(nw.line, pos.ch - old.ch + nw.ch) }
+ else
+ { return Pos(nw.line + (pos.line - old.line), pos.ch) }
+}
+
+// Used by replaceSelections to allow moving the selection to the
+// start or around the replaced test. Hint may be "start" or "around".
+function computeReplacedSel(doc, changes, hint) {
+ var out = []
+ var oldPrev = Pos(doc.first, 0), newPrev = oldPrev
+ for (var i = 0; i < changes.length; i++) {
+ var change = changes[i]
+ var from = offsetPos(change.from, oldPrev, newPrev)
+ var to = offsetPos(changeEnd(change), oldPrev, newPrev)
+ oldPrev = change.to
+ newPrev = to
+ if (hint == "around") {
+ var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0
+ out[i] = new Range(inv ? to : from, inv ? from : to)
+ } else {
+ out[i] = new Range(from, from)
+ }
+ }
+ return new Selection(out, doc.sel.primIndex)
+}
+
+// Used to get the editor into a consistent state again when options change.
+
+function loadMode(cm) {
+ cm.doc.mode = getMode(cm.options, cm.doc.modeOption)
+ resetModeState(cm)
+}
+
+function resetModeState(cm) {
+ cm.doc.iter(function (line) {
+ if (line.stateAfter) { line.stateAfter = null }
+ if (line.styles) { line.styles = null }
+ })
+ cm.doc.frontier = cm.doc.first
+ startWorker(cm, 100)
+ cm.state.modeGen++
+ if (cm.curOp) { regChange(cm) }
+}
+
+// DOCUMENT DATA STRUCTURE
+
+// By default, updates that start and end at the beginning of a line
+// are treated specially, in order to make the association of line
+// widgets and marker elements with the text behave more intuitive.
+function isWholeLineUpdate(doc, change) {
+ return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
+ (!doc.cm || doc.cm.options.wholeLineUpdateBefore)
+}
+
+// Perform a change on the document data structure.
+function updateDoc(doc, change, markedSpans, estimateHeight) {
+ function spansFor(n) {return markedSpans ? markedSpans[n] : null}
+ function update(line, text, spans) {
+ updateLine(line, text, spans, estimateHeight)
+ signalLater(line, "change", line, change)
+ }
+ function linesFor(start, end) {
+ var result = []
+ for (var i = start; i < end; ++i)
+ { result.push(new Line(text[i], spansFor(i), estimateHeight)) }
+ return result
+ }
+
+ var from = change.from, to = change.to, text = change.text
+ var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line)
+ var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line
+
+ // Adjust the line structure
+ if (change.full) {
+ doc.insert(0, linesFor(0, text.length))
+ doc.remove(text.length, doc.size - text.length)
+ } else if (isWholeLineUpdate(doc, change)) {
+ // This is a whole-line replace. Treated specially to make
+ // sure line objects move the way they are supposed to.
+ var added = linesFor(0, text.length - 1)
+ update(lastLine, lastLine.text, lastSpans)
+ if (nlines) { doc.remove(from.line, nlines) }
+ if (added.length) { doc.insert(from.line, added) }
+ } else if (firstLine == lastLine) {
+ if (text.length == 1) {
+ update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans)
+ } else {
+ var added$1 = linesFor(1, text.length - 1)
+ added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight))
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))
+ doc.insert(from.line + 1, added$1)
+ }
+ } else if (text.length == 1) {
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0))
+ doc.remove(from.line + 1, nlines)
+ } else {
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))
+ update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans)
+ var added$2 = linesFor(1, text.length - 1)
+ if (nlines > 1) { doc.remove(from.line + 1, nlines - 1) }
+ doc.insert(from.line + 1, added$2)
+ }
+
+ signalLater(doc, "change", doc, change)
+}
+
+// Call f for all linked documents.
+function linkedDocs(doc, f, sharedHistOnly) {
+ function propagate(doc, skip, sharedHist) {
+ if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {
+ var rel = doc.linked[i]
+ if (rel.doc == skip) { continue }
+ var shared = sharedHist && rel.sharedHist
+ if (sharedHistOnly && !shared) { continue }
+ f(rel.doc, shared)
+ propagate(rel.doc, doc, shared)
+ } }
+ }
+ propagate(doc, null, true)
+}
+
+// Attach a document to an editor.
+function attachDoc(cm, doc) {
+ if (doc.cm) { throw new Error("This document is already in use.") }
+ cm.doc = doc
+ doc.cm = cm
+ estimateLineHeights(cm)
+ loadMode(cm)
+ setDirectionClass(cm)
+ if (!cm.options.lineWrapping) { findMaxLine(cm) }
+ cm.options.mode = doc.modeOption
+ regChange(cm)
+}
+
+function setDirectionClass(cm) {
+ ;(cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl")
+}
+
+function directionChanged(cm) {
+ runInOp(cm, function () {
+ setDirectionClass(cm)
+ regChange(cm)
+ })
+}
+
+function History(startGen) {
+ // Arrays of change events and selections. Doing something adds an
+ // event to done and clears undo. Undoing moves events from done
+ // to undone, redoing moves them in the other direction.
+ this.done = []; this.undone = []
+ this.undoDepth = Infinity
+ // Used to track when changes can be merged into a single undo
+ // event
+ this.lastModTime = this.lastSelTime = 0
+ this.lastOp = this.lastSelOp = null
+ this.lastOrigin = this.lastSelOrigin = null
+ // Used by the isClean() method
+ this.generation = this.maxGeneration = startGen || 1
+}
+
+// Create a history change event from an updateDoc-style change
+// object.
+function historyChangeFromChange(doc, change) {
+ var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}
+ attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1)
+ linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true)
+ return histChange
+}
+
+// Pop all selection events off the end of a history array. Stop at
+// a change event.
+function clearSelectionEvents(array) {
+ while (array.length) {
+ var last = lst(array)
+ if (last.ranges) { array.pop() }
+ else { break }
+ }
+}
+
+// Find the top change event in the history. Pop off selection
+// events that are in the way.
+function lastChangeEvent(hist, force) {
+ if (force) {
+ clearSelectionEvents(hist.done)
+ return lst(hist.done)
+ } else if (hist.done.length && !lst(hist.done).ranges) {
+ return lst(hist.done)
+ } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
+ hist.done.pop()
+ return lst(hist.done)
+ }
+}
+
+// Register a change in the history. Merges changes that are within
+// a single operation, or are close together with an origin that
+// allows merging (starting with "+") into a single event.
+function addChangeToHistory(doc, change, selAfter, opId) {
+ var hist = doc.history
+ hist.undone.length = 0
+ var time = +new Date, cur
+ var last
+
+ if ((hist.lastOp == opId ||
+ hist.lastOrigin == change.origin && change.origin &&
+ ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||
+ change.origin.charAt(0) == "*")) &&
+ (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
+ // Merge this change into the last event
+ last = lst(cur.changes)
+ if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
+ // Optimized case for simple insertion -- don't want to add
+ // new changesets for every character typed
+ last.to = changeEnd(change)
+ } else {
+ // Add new sub-event
+ cur.changes.push(historyChangeFromChange(doc, change))
+ }
+ } else {
+ // Can not be merged, start a new event.
+ var before = lst(hist.done)
+ if (!before || !before.ranges)
+ { pushSelectionToHistory(doc.sel, hist.done) }
+ cur = {changes: [historyChangeFromChange(doc, change)],
+ generation: hist.generation}
+ hist.done.push(cur)
+ while (hist.done.length > hist.undoDepth) {
+ hist.done.shift()
+ if (!hist.done[0].ranges) { hist.done.shift() }
+ }
+ }
+ hist.done.push(selAfter)
+ hist.generation = ++hist.maxGeneration
+ hist.lastModTime = hist.lastSelTime = time
+ hist.lastOp = hist.lastSelOp = opId
+ hist.lastOrigin = hist.lastSelOrigin = change.origin
+
+ if (!last) { signal(doc, "historyAdded") }
+}
+
+function selectionEventCanBeMerged(doc, origin, prev, sel) {
+ var ch = origin.charAt(0)
+ return ch == "*" ||
+ ch == "+" &&
+ prev.ranges.length == sel.ranges.length &&
+ prev.somethingSelected() == sel.somethingSelected() &&
+ new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
+}
+
+// Called whenever the selection changes, sets the new selection as
+// the pending selection in the history, and pushes the old pending
+// selection into the 'done' array when it was significantly
+// different (in number of selected ranges, emptiness, or time).
+function addSelectionToHistory(doc, sel, opId, options) {
+ var hist = doc.history, origin = options && options.origin
+
+ // A new event is started when the previous origin does not match
+ // the current, or the origins don't allow matching. Origins
+ // starting with * are always merged, those starting with + are
+ // merged when similar and close together in time.
+ if (opId == hist.lastSelOp ||
+ (origin && hist.lastSelOrigin == origin &&
+ (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
+ selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
+ { hist.done[hist.done.length - 1] = sel }
+ else
+ { pushSelectionToHistory(sel, hist.done) }
+
+ hist.lastSelTime = +new Date
+ hist.lastSelOrigin = origin
+ hist.lastSelOp = opId
+ if (options && options.clearRedo !== false)
+ { clearSelectionEvents(hist.undone) }
+}
+
+function pushSelectionToHistory(sel, dest) {
+ var top = lst(dest)
+ if (!(top && top.ranges && top.equals(sel)))
+ { dest.push(sel) }
+}
+
+// Used to store marked span information in the history.
+function attachLocalSpans(doc, change, from, to) {
+ var existing = change["spans_" + doc.id], n = 0
+ doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
+ if (line.markedSpans)
+ { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans }
+ ++n
+ })
+}
+
+// When un/re-doing restores text containing marked spans, those
+// that have been explicitly cleared should not be restored.
+function removeClearedSpans(spans) {
+ if (!spans) { return null }
+ var out
+ for (var i = 0; i < spans.length; ++i) {
+ if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i) } }
+ else if (out) { out.push(spans[i]) }
+ }
+ return !out ? spans : out.length ? out : null
+}
+
+// Retrieve and filter the old marked spans stored in a change event.
+function getOldSpans(doc, change) {
+ var found = change["spans_" + doc.id]
+ if (!found) { return null }
+ var nw = []
+ for (var i = 0; i < change.text.length; ++i)
+ { nw.push(removeClearedSpans(found[i])) }
+ return nw
+}
+
+// Used for un/re-doing changes from the history. Combines the
+// result of computing the existing spans with the set of spans that
+// existed in the history (so that deleting around a span and then
+// undoing brings back the span).
+function mergeOldSpans(doc, change) {
+ var old = getOldSpans(doc, change)
+ var stretched = stretchSpansOverChange(doc, change)
+ if (!old) { return stretched }
+ if (!stretched) { return old }
+
+ for (var i = 0; i < old.length; ++i) {
+ var oldCur = old[i], stretchCur = stretched[i]
+ if (oldCur && stretchCur) {
+ spans: for (var j = 0; j < stretchCur.length; ++j) {
+ var span = stretchCur[j]
+ for (var k = 0; k < oldCur.length; ++k)
+ { if (oldCur[k].marker == span.marker) { continue spans } }
+ oldCur.push(span)
+ }
+ } else if (stretchCur) {
+ old[i] = stretchCur
+ }
+ }
+ return old
+}
+
+// Used both to provide a JSON-safe object in .getHistory, and, when
+// detaching a document, to split the history in two
+function copyHistoryArray(events, newGroup, instantiateSel) {
+ var copy = []
+ for (var i = 0; i < events.length; ++i) {
+ var event = events[i]
+ if (event.ranges) {
+ copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event)
+ continue
+ }
+ var changes = event.changes, newChanges = []
+ copy.push({changes: newChanges})
+ for (var j = 0; j < changes.length; ++j) {
+ var change = changes[j], m = (void 0)
+ newChanges.push({from: change.from, to: change.to, text: change.text})
+ if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) {
+ if (indexOf(newGroup, Number(m[1])) > -1) {
+ lst(newChanges)[prop] = change[prop]
+ delete change[prop]
+ }
+ } } }
+ }
+ }
+ return copy
+}
+
+// The 'scroll' parameter given to many of these indicated whether
+// the new cursor position should be scrolled into view after
+// modifying the selection.
+
+// If shift is held or the extend flag is set, extends a range to
+// include a given position (and optionally a second position).
+// Otherwise, simply returns the range between the given positions.
+// Used for cursor motion and such.
+function extendRange(doc, range, head, other) {
+ if (doc.cm && doc.cm.display.shift || doc.extend) {
+ var anchor = range.anchor
+ if (other) {
+ var posBefore = cmp(head, anchor) < 0
+ if (posBefore != (cmp(other, anchor) < 0)) {
+ anchor = head
+ head = other
+ } else if (posBefore != (cmp(head, other) < 0)) {
+ head = other
+ }
+ }
+ return new Range(anchor, head)
+ } else {
+ return new Range(other || head, head)
+ }
+}
+
+// Extend the primary selection range, discard the rest.
+function extendSelection(doc, head, other, options) {
+ setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options)
+}
+
+// Extend all selections (pos is an array of selections with length
+// equal the number of selections)
+function extendSelections(doc, heads, options) {
+ var out = []
+ for (var i = 0; i < doc.sel.ranges.length; i++)
+ { out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null) }
+ var newSel = normalizeSelection(out, doc.sel.primIndex)
+ setSelection(doc, newSel, options)
+}
+
+// Updates a single range in the selection.
+function replaceOneSelection(doc, i, range, options) {
+ var ranges = doc.sel.ranges.slice(0)
+ ranges[i] = range
+ setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options)
+}
+
+// Reset the selection to a single range.
+function setSimpleSelection(doc, anchor, head, options) {
+ setSelection(doc, simpleSelection(anchor, head), options)
+}
+
+// Give beforeSelectionChange handlers a change to influence a
+// selection update.
+function filterSelectionChange(doc, sel, options) {
+ var obj = {
+ ranges: sel.ranges,
+ update: function(ranges) {
+ var this$1 = this;
+
+ this.ranges = []
+ for (var i = 0; i < ranges.length; i++)
+ { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
+ clipPos(doc, ranges[i].head)) }
+ },
+ origin: options && options.origin
+ }
+ signal(doc, "beforeSelectionChange", doc, obj)
+ if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj) }
+ if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) }
+ else { return sel }
+}
+
+function setSelectionReplaceHistory(doc, sel, options) {
+ var done = doc.history.done, last = lst(done)
+ if (last && last.ranges) {
+ done[done.length - 1] = sel
+ setSelectionNoUndo(doc, sel, options)
+ } else {
+ setSelection(doc, sel, options)
+ }
+}
+
+// Set a new selection.
+function setSelection(doc, sel, options) {
+ setSelectionNoUndo(doc, sel, options)
+ addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options)
+}
+
+function setSelectionNoUndo(doc, sel, options) {
+ if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
+ { sel = filterSelectionChange(doc, sel, options) }
+
+ var bias = options && options.bias ||
+ (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1)
+ setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true))
+
+ if (!(options && options.scroll === false) && doc.cm)
+ { ensureCursorVisible(doc.cm) }
+}
+
+function setSelectionInner(doc, sel) {
+ if (sel.equals(doc.sel)) { return }
+
+ doc.sel = sel
+
+ if (doc.cm) {
+ doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true
+ signalCursorActivity(doc.cm)
+ }
+ signalLater(doc, "cursorActivity", doc)
+}
+
+// Verify that the selection does not partially select any atomic
+// marked ranges.
+function reCheckSelection(doc) {
+ setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll)
+}
+
+// Return a selection that does not partially select any atomic
+// ranges.
+function skipAtomicInSelection(doc, sel, bias, mayClear) {
+ var out
+ for (var i = 0; i < sel.ranges.length; i++) {
+ var range = sel.ranges[i]
+ var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]
+ var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear)
+ var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear)
+ if (out || newAnchor != range.anchor || newHead != range.head) {
+ if (!out) { out = sel.ranges.slice(0, i) }
+ out[i] = new Range(newAnchor, newHead)
+ }
+ }
+ return out ? normalizeSelection(out, sel.primIndex) : sel
+}
+
+function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
+ var line = getLine(doc, pos.line)
+ if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+ var sp = line.markedSpans[i], m = sp.marker
+ if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
+ (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
+ if (mayClear) {
+ signal(m, "beforeCursorEnter")
+ if (m.explicitlyCleared) {
+ if (!line.markedSpans) { break }
+ else {--i; continue}
+ }
+ }
+ if (!m.atomic) { continue }
+
+ if (oldPos) {
+ var near = m.find(dir < 0 ? 1 : -1), diff = (void 0)
+ if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)
+ { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null) }
+ if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
+ { return skipAtomicInner(doc, near, pos, dir, mayClear) }
+ }
+
+ var far = m.find(dir < 0 ? -1 : 1)
+ if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)
+ { far = movePos(doc, far, dir, far.line == pos.line ? line : null) }
+ return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null
+ }
+ } }
+ return pos
+}
+
+// Ensure a given position is not inside an atomic range.
+function skipAtomic(doc, pos, oldPos, bias, mayClear) {
+ var dir = bias || 1
+ var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
+ (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
+ skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
+ (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true))
+ if (!found) {
+ doc.cantEdit = true
+ return Pos(doc.first, 0)
+ }
+ return found
+}
+
+function movePos(doc, pos, dir, line) {
+ if (dir < 0 && pos.ch == 0) {
+ if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }
+ else { return null }
+ } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
+ if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }
+ else { return null }
+ } else {
+ return new Pos(pos.line, pos.ch + dir)
+ }
+}
+
+function selectAll(cm) {
+ cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll)
+}
+
+// UPDATING
+
+// Allow "beforeChange" event handlers to influence a change
+function filterChange(doc, change, update) {
+ var obj = {
+ canceled: false,
+ from: change.from,
+ to: change.to,
+ text: change.text,
+ origin: change.origin,
+ cancel: function () { return obj.canceled = true; }
+ }
+ if (update) { obj.update = function (from, to, text, origin) {
+ if (from) { obj.from = clipPos(doc, from) }
+ if (to) { obj.to = clipPos(doc, to) }
+ if (text) { obj.text = text }
+ if (origin !== undefined) { obj.origin = origin }
+ } }
+ signal(doc, "beforeChange", doc, obj)
+ if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj) }
+
+ if (obj.canceled) { return null }
+ return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
+}
+
+// Apply a change to a document, and add it to the document's
+// history, and propagating it to all linked documents.
+function makeChange(doc, change, ignoreReadOnly) {
+ if (doc.cm) {
+ if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }
+ if (doc.cm.state.suppressEdits) { return }
+ }
+
+ if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
+ change = filterChange(doc, change, true)
+ if (!change) { return }
+ }
+
+ // Possibly split or suppress the update based on the presence
+ // of read-only spans in its range.
+ var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to)
+ if (split) {
+ for (var i = split.length - 1; i >= 0; --i)
+ { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}) }
+ } else {
+ makeChangeInner(doc, change)
+ }
+}
+
+function makeChangeInner(doc, change) {
+ if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return }
+ var selAfter = computeSelAfterChange(doc, change)
+ addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN)
+
+ makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change))
+ var rebased = []
+
+ linkedDocs(doc, function (doc, sharedHist) {
+ if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+ rebaseHist(doc.history, change)
+ rebased.push(doc.history)
+ }
+ makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change))
+ })
+}
+
+// Revert a change stored in a document's history.
+function makeChangeFromHistory(doc, type, allowSelectionOnly) {
+ if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) { return }
+
+ var hist = doc.history, event, selAfter = doc.sel
+ var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done
+
+ // Verify that there is a useable event (so that ctrl-z won't
+ // needlessly clear selection events)
+ var i = 0
+ for (; i < source.length; i++) {
+ event = source[i]
+ if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
+ { break }
+ }
+ if (i == source.length) { return }
+ hist.lastOrigin = hist.lastSelOrigin = null
+
+ for (;;) {
+ event = source.pop()
+ if (event.ranges) {
+ pushSelectionToHistory(event, dest)
+ if (allowSelectionOnly && !event.equals(doc.sel)) {
+ setSelection(doc, event, {clearRedo: false})
+ return
+ }
+ selAfter = event
+ }
+ else { break }
+ }
+
+ // Build up a reverse change object to add to the opposite history
+ // stack (redo when undoing, and vice versa).
+ var antiChanges = []
+ pushSelectionToHistory(selAfter, dest)
+ dest.push({changes: antiChanges, generation: hist.generation})
+ hist.generation = event.generation || ++hist.maxGeneration
+
+ var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")
+
+ var loop = function ( i ) {
+ var change = event.changes[i]
+ change.origin = type
+ if (filter && !filterChange(doc, change, false)) {
+ source.length = 0
+ return {}
+ }
+
+ antiChanges.push(historyChangeFromChange(doc, change))
+
+ var after = i ? computeSelAfterChange(doc, change) : lst(source)
+ makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change))
+ if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}) }
+ var rebased = []
+
+ // Propagate to the linked documents
+ linkedDocs(doc, function (doc, sharedHist) {
+ if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+ rebaseHist(doc.history, change)
+ rebased.push(doc.history)
+ }
+ makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change))
+ })
+ };
+
+ for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
+ var returned = loop( i$1 );
+
+ if ( returned ) return returned.v;
+ }
+}
+
+// Sub-views need their line numbers shifted when text is added
+// above or below them in the parent document.
+function shiftDoc(doc, distance) {
+ if (distance == 0) { return }
+ doc.first += distance
+ doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(
+ Pos(range.anchor.line + distance, range.anchor.ch),
+ Pos(range.head.line + distance, range.head.ch)
+ ); }), doc.sel.primIndex)
+ if (doc.cm) {
+ regChange(doc.cm, doc.first, doc.first - distance, distance)
+ for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
+ { regLineChange(doc.cm, l, "gutter") }
+ }
+}
+
+// More lower-level change function, handling only a single document
+// (not linked ones).
+function makeChangeSingleDoc(doc, change, selAfter, spans) {
+ if (doc.cm && !doc.cm.curOp)
+ { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }
+
+ if (change.to.line < doc.first) {
+ shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line))
+ return
+ }
+ if (change.from.line > doc.lastLine()) { return }
+
+ // Clip the change to the size of this doc
+ if (change.from.line < doc.first) {
+ var shift = change.text.length - 1 - (doc.first - change.from.line)
+ shiftDoc(doc, shift)
+ change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
+ text: [lst(change.text)], origin: change.origin}
+ }
+ var last = doc.lastLine()
+ if (change.to.line > last) {
+ change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
+ text: [change.text[0]], origin: change.origin}
+ }
+
+ change.removed = getBetween(doc, change.from, change.to)
+
+ if (!selAfter) { selAfter = computeSelAfterChange(doc, change) }
+ if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans) }
+ else { updateDoc(doc, change, spans) }
+ setSelectionNoUndo(doc, selAfter, sel_dontScroll)
+}
+
+// Handle the interaction of a change to a document with the editor
+// that this document is part of.
+function makeChangeSingleDocInEditor(cm, change, spans) {
+ var doc = cm.doc, display = cm.display, from = change.from, to = change.to
+
+ var recomputeMaxLength = false, checkWidthStart = from.line
+ if (!cm.options.lineWrapping) {
+ checkWidthStart = lineNo(visualLine(getLine(doc, from.line)))
+ doc.iter(checkWidthStart, to.line + 1, function (line) {
+ if (line == display.maxLine) {
+ recomputeMaxLength = true
+ return true
+ }
+ })
+ }
+
+ if (doc.sel.contains(change.from, change.to) > -1)
+ { signalCursorActivity(cm) }
+
+ updateDoc(doc, change, spans, estimateHeight(cm))
+
+ if (!cm.options.lineWrapping) {
+ doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
+ var len = lineLength(line)
+ if (len > display.maxLineLength) {
+ display.maxLine = line
+ display.maxLineLength = len
+ display.maxLineChanged = true
+ recomputeMaxLength = false
+ }
+ })
+ if (recomputeMaxLength) { cm.curOp.updateMaxLine = true }
+ }
+
+ // Adjust frontier, schedule worker
+ doc.frontier = Math.min(doc.frontier, from.line)
+ startWorker(cm, 400)
+
+ var lendiff = change.text.length - (to.line - from.line) - 1
+ // Remember that these lines changed, for updating the display
+ if (change.full)
+ { regChange(cm) }
+ else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
+ { regLineChange(cm, from.line, "text") }
+ else
+ { regChange(cm, from.line, to.line + 1, lendiff) }
+
+ var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change")
+ if (changeHandler || changesHandler) {
+ var obj = {
+ from: from, to: to,
+ text: change.text,
+ removed: change.removed,
+ origin: change.origin
+ }
+ if (changeHandler) { signalLater(cm, "change", cm, obj) }
+ if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj) }
+ }
+ cm.display.selForContextMenu = null
+}
+
+function replaceRange(doc, code, from, to, origin) {
+ if (!to) { to = from }
+ if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp }
+ if (typeof code == "string") { code = doc.splitLines(code) }
+ makeChange(doc, {from: from, to: to, text: code, origin: origin})
+}
+
+// Rebasing/resetting history to deal with externally-sourced changes
+
+function rebaseHistSelSingle(pos, from, to, diff) {
+ if (to < pos.line) {
+ pos.line += diff
+ } else if (from < pos.line) {
+ pos.line = from
+ pos.ch = 0
+ }
+}
+
+// Tries to rebase an array of history events given a change in the
+// document. If the change touches the same lines as the event, the
+// event, and everything 'behind' it, is discarded. If the change is
+// before the event, the event's positions are updated. Uses a
+// copy-on-write scheme for the positions, to avoid having to
+// reallocate them all on every rebase, but also avoid problems with
+// shared position objects being unsafely updated.
+function rebaseHistArray(array, from, to, diff) {
+ for (var i = 0; i < array.length; ++i) {
+ var sub = array[i], ok = true
+ if (sub.ranges) {
+ if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true }
+ for (var j = 0; j < sub.ranges.length; j++) {
+ rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff)
+ rebaseHistSelSingle(sub.ranges[j].head, from, to, diff)
+ }
+ continue
+ }
+ for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
+ var cur = sub.changes[j$1]
+ if (to < cur.from.line) {
+ cur.from = Pos(cur.from.line + diff, cur.from.ch)
+ cur.to = Pos(cur.to.line + diff, cur.to.ch)
+ } else if (from <= cur.to.line) {
+ ok = false
+ break
+ }
+ }
+ if (!ok) {
+ array.splice(0, i + 1)
+ i = 0
+ }
+ }
+}
+
+function rebaseHist(hist, change) {
+ var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1
+ rebaseHistArray(hist.done, from, to, diff)
+ rebaseHistArray(hist.undone, from, to, diff)
+}
+
+// Utility for applying a change to a line by handle or number,
+// returning the number and optionally registering the line as
+// changed.
+function changeLine(doc, handle, changeType, op) {
+ var no = handle, line = handle
+ if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)) }
+ else { no = lineNo(handle) }
+ if (no == null) { return null }
+ if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType) }
+ return line
+}
+
+// The document is represented as a BTree consisting of leaves, with
+// chunk of lines in them, and branches, with up to ten leaves or
+// other branch nodes below them. The top node is always a branch
+// node, and is the document object itself (meaning it has
+// additional methods and properties).
+//
+// All nodes have parent links. The tree is used both to go from
+// line numbers to line objects, and to go from objects to numbers.
+// It also indexes by height, and is used to convert between height
+// and line object, and to find the total height of the document.
+//
+// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html
+
+var LeafChunk = function(lines) {
+ var this$1 = this;
+
+ this.lines = lines
+ this.parent = null
+ var height = 0
+ for (var i = 0; i < lines.length; ++i) {
+ lines[i].parent = this$1
+ height += lines[i].height
+ }
+ this.height = height
+};
+
+LeafChunk.prototype.chunkSize = function () { return this.lines.length };
+
+// Remove the n lines at offset 'at'.
+LeafChunk.prototype.removeInner = function (at, n) {
+ var this$1 = this;
+
+ for (var i = at, e = at + n; i < e; ++i) {
+ var line = this$1.lines[i]
+ this$1.height -= line.height
+ cleanUpLine(line)
+ signalLater(line, "delete")
+ }
+ this.lines.splice(at, n)
+};
+
+// Helper used to collapse a small branch into a single leaf.
+LeafChunk.prototype.collapse = function (lines) {
+ lines.push.apply(lines, this.lines)
+};
+
+// Insert the given array of lines at offset 'at', count them as
+// having the given height.
+LeafChunk.prototype.insertInner = function (at, lines, height) {
+ var this$1 = this;
+
+ this.height += height
+ this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at))
+ for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1 }
+};
+
+// Used to iterate over a part of the tree.
+LeafChunk.prototype.iterN = function (at, n, op) {
+ var this$1 = this;
+
+ for (var e = at + n; at < e; ++at)
+ { if (op(this$1.lines[at])) { return true } }
+};
+
+var BranchChunk = function(children) {
+ var this$1 = this;
+
+ this.children = children
+ var size = 0, height = 0
+ for (var i = 0; i < children.length; ++i) {
+ var ch = children[i]
+ size += ch.chunkSize(); height += ch.height
+ ch.parent = this$1
+ }
+ this.size = size
+ this.height = height
+ this.parent = null
+};
+
+BranchChunk.prototype.chunkSize = function () { return this.size };
+
+BranchChunk.prototype.removeInner = function (at, n) {
+ var this$1 = this;
+
+ this.size -= n
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this$1.children[i], sz = child.chunkSize()
+ if (at < sz) {
+ var rm = Math.min(n, sz - at), oldHeight = child.height
+ child.removeInner(at, rm)
+ this$1.height -= oldHeight - child.height
+ if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null }
+ if ((n -= rm) == 0) { break }
+ at = 0
+ } else { at -= sz }
+ }
+ // If the result is smaller than 25 lines, ensure that it is a
+ // single leaf node.
+ if (this.size - n < 25 &&
+ (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
+ var lines = []
+ this.collapse(lines)
+ this.children = [new LeafChunk(lines)]
+ this.children[0].parent = this
+ }
+};
+
+BranchChunk.prototype.collapse = function (lines) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines) }
+};
+
+BranchChunk.prototype.insertInner = function (at, lines, height) {
+ var this$1 = this;
+
+ this.size += lines.length
+ this.height += height
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this$1.children[i], sz = child.chunkSize()
+ if (at <= sz) {
+ child.insertInner(at, lines, height)
+ if (child.lines && child.lines.length > 50) {
+ // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
+ // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
+ var remaining = child.lines.length % 25 + 25
+ for (var pos = remaining; pos < child.lines.length;) {
+ var leaf = new LeafChunk(child.lines.slice(pos, pos += 25))
+ child.height -= leaf.height
+ this$1.children.splice(++i, 0, leaf)
+ leaf.parent = this$1
+ }
+ child.lines = child.lines.slice(0, remaining)
+ this$1.maybeSpill()
+ }
+ break
+ }
+ at -= sz
+ }
+};
+
+// When a node has grown, check whether it should be split.
+BranchChunk.prototype.maybeSpill = function () {
+ if (this.children.length <= 10) { return }
+ var me = this
+ do {
+ var spilled = me.children.splice(me.children.length - 5, 5)
+ var sibling = new BranchChunk(spilled)
+ if (!me.parent) { // Become the parent node
+ var copy = new BranchChunk(me.children)
+ copy.parent = me
+ me.children = [copy, sibling]
+ me = copy
+ } else {
+ me.size -= sibling.size
+ me.height -= sibling.height
+ var myIndex = indexOf(me.parent.children, me)
+ me.parent.children.splice(myIndex + 1, 0, sibling)
+ }
+ sibling.parent = me.parent
+ } while (me.children.length > 10)
+ me.parent.maybeSpill()
+};
+
+BranchChunk.prototype.iterN = function (at, n, op) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this$1.children[i], sz = child.chunkSize()
+ if (at < sz) {
+ var used = Math.min(n, sz - at)
+ if (child.iterN(at, used, op)) { return true }
+ if ((n -= used) == 0) { break }
+ at = 0
+ } else { at -= sz }
+ }
+};
+
+// Line widgets are block elements displayed above or below a line.
+
+var LineWidget = function(doc, node, options) {
+ var this$1 = this;
+
+ if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))
+ { this$1[opt] = options[opt] } } }
+ this.doc = doc
+ this.node = node
+};
+
+LineWidget.prototype.clear = function () {
+ var this$1 = this;
+
+ var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line)
+ if (no == null || !ws) { return }
+ for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1) } }
+ if (!ws.length) { line.widgets = null }
+ var height = widgetHeight(this)
+ updateLineHeight(line, Math.max(0, line.height - height))
+ if (cm) {
+ runInOp(cm, function () {
+ adjustScrollWhenAboveVisible(cm, line, -height)
+ regLineChange(cm, no, "widget")
+ })
+ signalLater(cm, "lineWidgetCleared", cm, this, no)
+ }
+};
+
+LineWidget.prototype.changed = function () {
+ var this$1 = this;
+
+ var oldH = this.height, cm = this.doc.cm, line = this.line
+ this.height = null
+ var diff = widgetHeight(this) - oldH
+ if (!diff) { return }
+ updateLineHeight(line, line.height + diff)
+ if (cm) {
+ runInOp(cm, function () {
+ cm.curOp.forceUpdate = true
+ adjustScrollWhenAboveVisible(cm, line, diff)
+ signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line))
+ })
+ }
+};
+eventMixin(LineWidget)
+
+function adjustScrollWhenAboveVisible(cm, line, diff) {
+ if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
+ { addToScrollPos(cm, null, diff) }
+}
+
+function addLineWidget(doc, handle, node, options) {
+ var widget = new LineWidget(doc, node, options)
+ var cm = doc.cm
+ if (cm && widget.noHScroll) { cm.display.alignWidgets = true }
+ changeLine(doc, handle, "widget", function (line) {
+ var widgets = line.widgets || (line.widgets = [])
+ if (widget.insertAt == null) { widgets.push(widget) }
+ else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget) }
+ widget.line = line
+ if (cm && !lineIsHidden(doc, line)) {
+ var aboveVisible = heightAtLine(line) < doc.scrollTop
+ updateLineHeight(line, line.height + widgetHeight(widget))
+ if (aboveVisible) { addToScrollPos(cm, null, widget.height) }
+ cm.curOp.forceUpdate = true
+ }
+ return true
+ })
+ signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle))
+ return widget
+}
+
+// TEXTMARKERS
+
+// Created with markText and setBookmark methods. A TextMarker is a
+// handle that can be used to clear or find a marked position in the
+// document. Line objects hold arrays (markedSpans) containing
+// {from, to, marker} object pointing to such marker objects, and
+// indicating that such a marker is present on that line. Multiple
+// lines may point to the same marker when it spans across lines.
+// The spans will have null for their from/to properties when the
+// marker continues beyond the start/end of the line. Markers have
+// links back to the lines they currently touch.
+
+// Collapsed markers have unique ids, in order to be able to order
+// them, which is needed for uniquely determining an outer marker
+// when they overlap (they may nest, but not partially overlap).
+var nextMarkerId = 0
+
+var TextMarker = function(doc, type) {
+ this.lines = []
+ this.type = type
+ this.doc = doc
+ this.id = ++nextMarkerId
+};
+
+// Clear the marker.
+TextMarker.prototype.clear = function () {
+ var this$1 = this;
+
+ if (this.explicitlyCleared) { return }
+ var cm = this.doc.cm, withOp = cm && !cm.curOp
+ if (withOp) { startOperation(cm) }
+ if (hasHandler(this, "clear")) {
+ var found = this.find()
+ if (found) { signalLater(this, "clear", found.from, found.to) }
+ }
+ var min = null, max = null
+ for (var i = 0; i < this.lines.length; ++i) {
+ var line = this$1.lines[i]
+ var span = getMarkedSpanFor(line.markedSpans, this$1)
+ if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text") }
+ else if (cm) {
+ if (span.to != null) { max = lineNo(line) }
+ if (span.from != null) { min = lineNo(line) }
+ }
+ line.markedSpans = removeMarkedSpan(line.markedSpans, span)
+ if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)
+ { updateLineHeight(line, textHeight(cm.display)) }
+ }
+ if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
+ var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual)
+ if (len > cm.display.maxLineLength) {
+ cm.display.maxLine = visual
+ cm.display.maxLineLength = len
+ cm.display.maxLineChanged = true
+ }
+ } }
+
+ if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1) }
+ this.lines.length = 0
+ this.explicitlyCleared = true
+ if (this.atomic && this.doc.cantEdit) {
+ this.doc.cantEdit = false
+ if (cm) { reCheckSelection(cm.doc) }
+ }
+ if (cm) { signalLater(cm, "markerCleared", cm, this, min, max) }
+ if (withOp) { endOperation(cm) }
+ if (this.parent) { this.parent.clear() }
+};
+
+// Find the position of the marker in the document. Returns a {from,
+// to} object by default. Side can be passed to get a specific side
+// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
+// Pos objects returned contain a line object, rather than a line
+// number (used to prevent looking up the same line twice).
+TextMarker.prototype.find = function (side, lineObj) {
+ var this$1 = this;
+
+ if (side == null && this.type == "bookmark") { side = 1 }
+ var from, to
+ for (var i = 0; i < this.lines.length; ++i) {
+ var line = this$1.lines[i]
+ var span = getMarkedSpanFor(line.markedSpans, this$1)
+ if (span.from != null) {
+ from = Pos(lineObj ? line : lineNo(line), span.from)
+ if (side == -1) { return from }
+ }
+ if (span.to != null) {
+ to = Pos(lineObj ? line : lineNo(line), span.to)
+ if (side == 1) { return to }
+ }
+ }
+ return from && {from: from, to: to}
+};
+
+// Signals that the marker's widget changed, and surrounding layout
+// should be recomputed.
+TextMarker.prototype.changed = function () {
+ var this$1 = this;
+
+ var pos = this.find(-1, true), widget = this, cm = this.doc.cm
+ if (!pos || !cm) { return }
+ runInOp(cm, function () {
+ var line = pos.line, lineN = lineNo(pos.line)
+ var view = findViewForLine(cm, lineN)
+ if (view) {
+ clearLineMeasurementCacheFor(view)
+ cm.curOp.selectionChanged = cm.curOp.forceUpdate = true
+ }
+ cm.curOp.updateMaxLine = true
+ if (!lineIsHidden(widget.doc, line) && widget.height != null) {
+ var oldHeight = widget.height
+ widget.height = null
+ var dHeight = widgetHeight(widget) - oldHeight
+ if (dHeight)
+ { updateLineHeight(line, line.height + dHeight) }
+ }
+ signalLater(cm, "markerChanged", cm, this$1)
+ })
+};
+
+TextMarker.prototype.attachLine = function (line) {
+ if (!this.lines.length && this.doc.cm) {
+ var op = this.doc.cm.curOp
+ if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
+ { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this) }
+ }
+ this.lines.push(line)
+};
+
+TextMarker.prototype.detachLine = function (line) {
+ this.lines.splice(indexOf(this.lines, line), 1)
+ if (!this.lines.length && this.doc.cm) {
+ var op = this.doc.cm.curOp
+ ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this)
+ }
+};
+eventMixin(TextMarker)
+
+// Create a marker, wire it up to the right lines, and
+function markText(doc, from, to, options, type) {
+ // Shared markers (across linked documents) are handled separately
+ // (markTextShared will call out to this again, once per
+ // document).
+ if (options && options.shared) { return markTextShared(doc, from, to, options, type) }
+ // Ensure we are in an operation.
+ if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }
+
+ var marker = new TextMarker(doc, type), diff = cmp(from, to)
+ if (options) { copyObj(options, marker, false) }
+ // Don't connect empty markers unless clearWhenEmpty is false
+ if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
+ { return marker }
+ if (marker.replacedWith) {
+ // Showing up as a widget implies collapsed (widget replaces text)
+ marker.collapsed = true
+ marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget")
+ if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true") }
+ if (options.insertLeft) { marker.widgetNode.insertLeft = true }
+ }
+ if (marker.collapsed) {
+ if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
+ from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
+ { throw new Error("Inserting collapsed marker partially overlapping an existing one") }
+ seeCollapsedSpans()
+ }
+
+ if (marker.addToHistory)
+ { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN) }
+
+ var curLine = from.line, cm = doc.cm, updateMaxLine
+ doc.iter(curLine, to.line + 1, function (line) {
+ if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
+ { updateMaxLine = true }
+ if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0) }
+ addMarkedSpan(line, new MarkedSpan(marker,
+ curLine == from.line ? from.ch : null,
+ curLine == to.line ? to.ch : null))
+ ++curLine
+ })
+ // lineIsHidden depends on the presence of the spans, so needs a second pass
+ if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {
+ if (lineIsHidden(doc, line)) { updateLineHeight(line, 0) }
+ }) }
+
+ if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }) }
+
+ if (marker.readOnly) {
+ seeReadOnlySpans()
+ if (doc.history.done.length || doc.history.undone.length)
+ { doc.clearHistory() }
+ }
+ if (marker.collapsed) {
+ marker.id = ++nextMarkerId
+ marker.atomic = true
+ }
+ if (cm) {
+ // Sync editor state
+ if (updateMaxLine) { cm.curOp.updateMaxLine = true }
+ if (marker.collapsed)
+ { regChange(cm, from.line, to.line + 1) }
+ else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)
+ { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text") } }
+ if (marker.atomic) { reCheckSelection(cm.doc) }
+ signalLater(cm, "markerAdded", cm, marker)
+ }
+ return marker
+}
+
+// SHARED TEXTMARKERS
+
+// A shared marker spans multiple linked documents. It is
+// implemented as a meta-marker-object controlling multiple normal
+// markers.
+var SharedTextMarker = function(markers, primary) {
+ var this$1 = this;
+
+ this.markers = markers
+ this.primary = primary
+ for (var i = 0; i < markers.length; ++i)
+ { markers[i].parent = this$1 }
+};
+
+SharedTextMarker.prototype.clear = function () {
+ var this$1 = this;
+
+ if (this.explicitlyCleared) { return }
+ this.explicitlyCleared = true
+ for (var i = 0; i < this.markers.length; ++i)
+ { this$1.markers[i].clear() }
+ signalLater(this, "clear")
+};
+
+SharedTextMarker.prototype.find = function (side, lineObj) {
+ return this.primary.find(side, lineObj)
+};
+eventMixin(SharedTextMarker)
+
+function markTextShared(doc, from, to, options, type) {
+ options = copyObj(options)
+ options.shared = false
+ var markers = [markText(doc, from, to, options, type)], primary = markers[0]
+ var widget = options.widgetNode
+ linkedDocs(doc, function (doc) {
+ if (widget) { options.widgetNode = widget.cloneNode(true) }
+ markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type))
+ for (var i = 0; i < doc.linked.length; ++i)
+ { if (doc.linked[i].isParent) { return } }
+ primary = lst(markers)
+ })
+ return new SharedTextMarker(markers, primary)
+}
+
+function findSharedMarkers(doc) {
+ return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })
+}
+
+function copySharedMarkers(doc, markers) {
+ for (var i = 0; i < markers.length; i++) {
+ var marker = markers[i], pos = marker.find()
+ var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to)
+ if (cmp(mFrom, mTo)) {
+ var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type)
+ marker.markers.push(subMark)
+ subMark.parent = marker
+ }
+ }
+}
+
+function detachSharedMarkers(markers) {
+ var loop = function ( i ) {
+ var marker = markers[i], linked = [marker.primary.doc]
+ linkedDocs(marker.primary.doc, function (d) { return linked.push(d); })
+ for (var j = 0; j < marker.markers.length; j++) {
+ var subMarker = marker.markers[j]
+ if (indexOf(linked, subMarker.doc) == -1) {
+ subMarker.parent = null
+ marker.markers.splice(j--, 1)
+ }
+ }
+ };
+
+ for (var i = 0; i < markers.length; i++) loop( i );
+}
+
+var nextDocId = 0
+var Doc = function(text, mode, firstLine, lineSep, direction) {
+ if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }
+ if (firstLine == null) { firstLine = 0 }
+
+ BranchChunk.call(this, [new LeafChunk([new Line("", null)])])
+ this.first = firstLine
+ this.scrollTop = this.scrollLeft = 0
+ this.cantEdit = false
+ this.cleanGeneration = 1
+ this.frontier = firstLine
+ var start = Pos(firstLine, 0)
+ this.sel = simpleSelection(start)
+ this.history = new History(null)
+ this.id = ++nextDocId
+ this.modeOption = mode
+ this.lineSep = lineSep
+ this.direction = (direction == "rtl") ? "rtl" : "ltr"
+ this.extend = false
+
+ if (typeof text == "string") { text = this.splitLines(text) }
+ updateDoc(this, {from: start, to: start, text: text})
+ setSelection(this, simpleSelection(start), sel_dontScroll)
+}
+
+Doc.prototype = createObj(BranchChunk.prototype, {
+ constructor: Doc,
+ // Iterate over the document. Supports two forms -- with only one
+ // argument, it calls that for each line in the document. With
+ // three, it iterates over the range given by the first two (with
+ // the second being non-inclusive).
+ iter: function(from, to, op) {
+ if (op) { this.iterN(from - this.first, to - from, op) }
+ else { this.iterN(this.first, this.first + this.size, from) }
+ },
+
+ // Non-public interface for adding and removing lines.
+ insert: function(at, lines) {
+ var height = 0
+ for (var i = 0; i < lines.length; ++i) { height += lines[i].height }
+ this.insertInner(at - this.first, lines, height)
+ },
+ remove: function(at, n) { this.removeInner(at - this.first, n) },
+
+ // From here, the methods are part of the public interface. Most
+ // are also available from CodeMirror (editor) instances.
+
+ getValue: function(lineSep) {
+ var lines = getLines(this, this.first, this.first + this.size)
+ if (lineSep === false) { return lines }
+ return lines.join(lineSep || this.lineSeparator())
+ },
+ setValue: docMethodOp(function(code) {
+ var top = Pos(this.first, 0), last = this.first + this.size - 1
+ makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
+ text: this.splitLines(code), origin: "setValue", full: true}, true)
+ if (this.cm) { this.cm.scrollTo(0, 0) }
+ setSelection(this, simpleSelection(top), sel_dontScroll)
+ }),
+ replaceRange: function(code, from, to, origin) {
+ from = clipPos(this, from)
+ to = to ? clipPos(this, to) : from
+ replaceRange(this, code, from, to, origin)
+ },
+ getRange: function(from, to, lineSep) {
+ var lines = getBetween(this, clipPos(this, from), clipPos(this, to))
+ if (lineSep === false) { return lines }
+ return lines.join(lineSep || this.lineSeparator())
+ },
+
+ getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},
+
+ getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},
+ getLineNumber: function(line) {return lineNo(line)},
+
+ getLineHandleVisualStart: function(line) {
+ if (typeof line == "number") { line = getLine(this, line) }
+ return visualLine(line)
+ },
+
+ lineCount: function() {return this.size},
+ firstLine: function() {return this.first},
+ lastLine: function() {return this.first + this.size - 1},
+
+ clipPos: function(pos) {return clipPos(this, pos)},
+
+ getCursor: function(start) {
+ var range = this.sel.primary(), pos
+ if (start == null || start == "head") { pos = range.head }
+ else if (start == "anchor") { pos = range.anchor }
+ else if (start == "end" || start == "to" || start === false) { pos = range.to() }
+ else { pos = range.from() }
+ return pos
+ },
+ listSelections: function() { return this.sel.ranges },
+ somethingSelected: function() {return this.sel.somethingSelected()},
+
+ setCursor: docMethodOp(function(line, ch, options) {
+ setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options)
+ }),
+ setSelection: docMethodOp(function(anchor, head, options) {
+ setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options)
+ }),
+ extendSelection: docMethodOp(function(head, other, options) {
+ extendSelection(this, clipPos(this, head), other && clipPos(this, other), options)
+ }),
+ extendSelections: docMethodOp(function(heads, options) {
+ extendSelections(this, clipPosArray(this, heads), options)
+ }),
+ extendSelectionsBy: docMethodOp(function(f, options) {
+ var heads = map(this.sel.ranges, f)
+ extendSelections(this, clipPosArray(this, heads), options)
+ }),
+ setSelections: docMethodOp(function(ranges, primary, options) {
+ var this$1 = this;
+
+ if (!ranges.length) { return }
+ var out = []
+ for (var i = 0; i < ranges.length; i++)
+ { out[i] = new Range(clipPos(this$1, ranges[i].anchor),
+ clipPos(this$1, ranges[i].head)) }
+ if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex) }
+ setSelection(this, normalizeSelection(out, primary), options)
+ }),
+ addSelection: docMethodOp(function(anchor, head, options) {
+ var ranges = this.sel.ranges.slice(0)
+ ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)))
+ setSelection(this, normalizeSelection(ranges, ranges.length - 1), options)
+ }),
+
+ getSelection: function(lineSep) {
+ var this$1 = this;
+
+ var ranges = this.sel.ranges, lines
+ for (var i = 0; i < ranges.length; i++) {
+ var sel = getBetween(this$1, ranges[i].from(), ranges[i].to())
+ lines = lines ? lines.concat(sel) : sel
+ }
+ if (lineSep === false) { return lines }
+ else { return lines.join(lineSep || this.lineSeparator()) }
+ },
+ getSelections: function(lineSep) {
+ var this$1 = this;
+
+ var parts = [], ranges = this.sel.ranges
+ for (var i = 0; i < ranges.length; i++) {
+ var sel = getBetween(this$1, ranges[i].from(), ranges[i].to())
+ if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()) }
+ parts[i] = sel
+ }
+ return parts
+ },
+ replaceSelection: function(code, collapse, origin) {
+ var dup = []
+ for (var i = 0; i < this.sel.ranges.length; i++)
+ { dup[i] = code }
+ this.replaceSelections(dup, collapse, origin || "+input")
+ },
+ replaceSelections: docMethodOp(function(code, collapse, origin) {
+ var this$1 = this;
+
+ var changes = [], sel = this.sel
+ for (var i = 0; i < sel.ranges.length; i++) {
+ var range = sel.ranges[i]
+ changes[i] = {from: range.from(), to: range.to(), text: this$1.splitLines(code[i]), origin: origin}
+ }
+ var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse)
+ for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)
+ { makeChange(this$1, changes[i$1]) }
+ if (newSel) { setSelectionReplaceHistory(this, newSel) }
+ else if (this.cm) { ensureCursorVisible(this.cm) }
+ }),
+ undo: docMethodOp(function() {makeChangeFromHistory(this, "undo")}),
+ redo: docMethodOp(function() {makeChangeFromHistory(this, "redo")}),
+ undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true)}),
+ redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true)}),
+
+ setExtending: function(val) {this.extend = val},
+ getExtending: function() {return this.extend},
+
+ historySize: function() {
+ var hist = this.history, done = 0, undone = 0
+ for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done } }
+ for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone } }
+ return {undo: done, redo: undone}
+ },
+ clearHistory: function() {this.history = new History(this.history.maxGeneration)},
+
+ markClean: function() {
+ this.cleanGeneration = this.changeGeneration(true)
+ },
+ changeGeneration: function(forceSplit) {
+ if (forceSplit)
+ { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null }
+ return this.history.generation
+ },
+ isClean: function (gen) {
+ return this.history.generation == (gen || this.cleanGeneration)
+ },
+
+ getHistory: function() {
+ return {done: copyHistoryArray(this.history.done),
+ undone: copyHistoryArray(this.history.undone)}
+ },
+ setHistory: function(histData) {
+ var hist = this.history = new History(this.history.maxGeneration)
+ hist.done = copyHistoryArray(histData.done.slice(0), null, true)
+ hist.undone = copyHistoryArray(histData.undone.slice(0), null, true)
+ },
+
+ setGutterMarker: docMethodOp(function(line, gutterID, value) {
+ return changeLine(this, line, "gutter", function (line) {
+ var markers = line.gutterMarkers || (line.gutterMarkers = {})
+ markers[gutterID] = value
+ if (!value && isEmpty(markers)) { line.gutterMarkers = null }
+ return true
+ })
+ }),
+
+ clearGutter: docMethodOp(function(gutterID) {
+ var this$1 = this;
+
+ this.iter(function (line) {
+ if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
+ changeLine(this$1, line, "gutter", function () {
+ line.gutterMarkers[gutterID] = null
+ if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null }
+ return true
+ })
+ }
+ })
+ }),
+
+ lineInfo: function(line) {
+ var n
+ if (typeof line == "number") {
+ if (!isLine(this, line)) { return null }
+ n = line
+ line = getLine(this, line)
+ if (!line) { return null }
+ } else {
+ n = lineNo(line)
+ if (n == null) { return null }
+ }
+ return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
+ textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
+ widgets: line.widgets}
+ },
+
+ addLineClass: docMethodOp(function(handle, where, cls) {
+ return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+ var prop = where == "text" ? "textClass"
+ : where == "background" ? "bgClass"
+ : where == "gutter" ? "gutterClass" : "wrapClass"
+ if (!line[prop]) { line[prop] = cls }
+ else if (classTest(cls).test(line[prop])) { return false }
+ else { line[prop] += " " + cls }
+ return true
+ })
+ }),
+ removeLineClass: docMethodOp(function(handle, where, cls) {
+ return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+ var prop = where == "text" ? "textClass"
+ : where == "background" ? "bgClass"
+ : where == "gutter" ? "gutterClass" : "wrapClass"
+ var cur = line[prop]
+ if (!cur) { return false }
+ else if (cls == null) { line[prop] = null }
+ else {
+ var found = cur.match(classTest(cls))
+ if (!found) { return false }
+ var end = found.index + found[0].length
+ line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null
+ }
+ return true
+ })
+ }),
+
+ addLineWidget: docMethodOp(function(handle, node, options) {
+ return addLineWidget(this, handle, node, options)
+ }),
+ removeLineWidget: function(widget) { widget.clear() },
+
+ markText: function(from, to, options) {
+ return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range")
+ },
+ setBookmark: function(pos, options) {
+ var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
+ insertLeft: options && options.insertLeft,
+ clearWhenEmpty: false, shared: options && options.shared,
+ handleMouseEvents: options && options.handleMouseEvents}
+ pos = clipPos(this, pos)
+ return markText(this, pos, pos, realOpts, "bookmark")
+ },
+ findMarksAt: function(pos) {
+ pos = clipPos(this, pos)
+ var markers = [], spans = getLine(this, pos.line).markedSpans
+ if (spans) { for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i]
+ if ((span.from == null || span.from <= pos.ch) &&
+ (span.to == null || span.to >= pos.ch))
+ { markers.push(span.marker.parent || span.marker) }
+ } }
+ return markers
+ },
+ findMarks: function(from, to, filter) {
+ from = clipPos(this, from); to = clipPos(this, to)
+ var found = [], lineNo = from.line
+ this.iter(from.line, to.line + 1, function (line) {
+ var spans = line.markedSpans
+ if (spans) { for (var i = 0; i < spans.length; i++) {
+ var span = spans[i]
+ if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||
+ span.from == null && lineNo != from.line ||
+ span.from != null && lineNo == to.line && span.from >= to.ch) &&
+ (!filter || filter(span.marker)))
+ { found.push(span.marker.parent || span.marker) }
+ } }
+ ++lineNo
+ })
+ return found
+ },
+ getAllMarks: function() {
+ var markers = []
+ this.iter(function (line) {
+ var sps = line.markedSpans
+ if (sps) { for (var i = 0; i < sps.length; ++i)
+ { if (sps[i].from != null) { markers.push(sps[i].marker) } } }
+ })
+ return markers
+ },
+
+ posFromIndex: function(off) {
+ var ch, lineNo = this.first, sepSize = this.lineSeparator().length
+ this.iter(function (line) {
+ var sz = line.text.length + sepSize
+ if (sz > off) { ch = off; return true }
+ off -= sz
+ ++lineNo
+ })
+ return clipPos(this, Pos(lineNo, ch))
+ },
+ indexFromPos: function (coords) {
+ coords = clipPos(this, coords)
+ var index = coords.ch
+ if (coords.line < this.first || coords.ch < 0) { return 0 }
+ var sepSize = this.lineSeparator().length
+ this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value
+ index += line.text.length + sepSize
+ })
+ return index
+ },
+
+ copy: function(copyHistory) {
+ var doc = new Doc(getLines(this, this.first, this.first + this.size),
+ this.modeOption, this.first, this.lineSep, this.direction)
+ doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft
+ doc.sel = this.sel
+ doc.extend = false
+ if (copyHistory) {
+ doc.history.undoDepth = this.history.undoDepth
+ doc.setHistory(this.getHistory())
+ }
+ return doc
+ },
+
+ linkedDoc: function(options) {
+ if (!options) { options = {} }
+ var from = this.first, to = this.first + this.size
+ if (options.from != null && options.from > from) { from = options.from }
+ if (options.to != null && options.to < to) { to = options.to }
+ var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction)
+ if (options.sharedHist) { copy.history = this.history
+ ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist})
+ copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]
+ copySharedMarkers(copy, findSharedMarkers(this))
+ return copy
+ },
+ unlinkDoc: function(other) {
+ var this$1 = this;
+
+ if (other instanceof CodeMirror) { other = other.doc }
+ if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {
+ var link = this$1.linked[i]
+ if (link.doc != other) { continue }
+ this$1.linked.splice(i, 1)
+ other.unlinkDoc(this$1)
+ detachSharedMarkers(findSharedMarkers(this$1))
+ break
+ } }
+ // If the histories were shared, split them again
+ if (other.history == this.history) {
+ var splitIds = [other.id]
+ linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true)
+ other.history = new History(null)
+ other.history.done = copyHistoryArray(this.history.done, splitIds)
+ other.history.undone = copyHistoryArray(this.history.undone, splitIds)
+ }
+ },
+ iterLinkedDocs: function(f) {linkedDocs(this, f)},
+
+ getMode: function() {return this.mode},
+ getEditor: function() {return this.cm},
+
+ splitLines: function(str) {
+ if (this.lineSep) { return str.split(this.lineSep) }
+ return splitLinesAuto(str)
+ },
+ lineSeparator: function() { return this.lineSep || "\n" },
+
+ setDirection: docMethodOp(function (dir) {
+ if (dir != "rtl") { dir = "ltr" }
+ if (dir == this.direction) { return }
+ this.direction = dir
+ this.iter(function (line) { return line.order = null; })
+ if (this.cm) { directionChanged(this.cm) }
+ })
+})
+
+// Public alias.
+Doc.prototype.eachLine = Doc.prototype.iter
+
+// Kludge to work around strange IE behavior where it'll sometimes
+// re-fire a series of drag-related events right after the drop (#1551)
+var lastDrop = 0
+
+function onDrop(e) {
+ var cm = this
+ clearDragCursor(cm)
+ if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
+ { return }
+ e_preventDefault(e)
+ if (ie) { lastDrop = +new Date }
+ var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files
+ if (!pos || cm.isReadOnly()) { return }
+ // Might be a file drop, in which case we simply extract the text
+ // and insert it.
+ if (files && files.length && window.FileReader && window.File) {
+ var n = files.length, text = Array(n), read = 0
+ var loadFile = function (file, i) {
+ if (cm.options.allowDropFileTypes &&
+ indexOf(cm.options.allowDropFileTypes, file.type) == -1)
+ { return }
+
+ var reader = new FileReader
+ reader.onload = operation(cm, function () {
+ var content = reader.result
+ if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = "" }
+ text[i] = content
+ if (++read == n) {
+ pos = clipPos(cm.doc, pos)
+ var change = {from: pos, to: pos,
+ text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),
+ origin: "paste"}
+ makeChange(cm.doc, change)
+ setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)))
+ }
+ })
+ reader.readAsText(file)
+ }
+ for (var i = 0; i < n; ++i) { loadFile(files[i], i) }
+ } else { // Normal drop
+ // Don't do a replace if the drop happened inside of the selected text.
+ if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
+ cm.state.draggingText(e)
+ // Ensure the editor is re-focused
+ setTimeout(function () { return cm.display.input.focus(); }, 20)
+ return
+ }
+ try {
+ var text$1 = e.dataTransfer.getData("Text")
+ if (text$1) {
+ var selected
+ if (cm.state.draggingText && !cm.state.draggingText.copy)
+ { selected = cm.listSelections() }
+ setSelectionNoUndo(cm.doc, simpleSelection(pos, pos))
+ if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)
+ { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag") } }
+ cm.replaceSelection(text$1, "around", "paste")
+ cm.display.input.focus()
+ }
+ }
+ catch(e){}
+ }
+}
+
+function onDragStart(cm, e) {
+ if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }
+ if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }
+
+ e.dataTransfer.setData("Text", cm.getSelection())
+ e.dataTransfer.effectAllowed = "copyMove"
+
+ // Use dummy image instead of default browsers image.
+ // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
+ if (e.dataTransfer.setDragImage && !safari) {
+ var img = elt("img", null, null, "position: fixed; left: 0; top: 0;")
+ img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
+ if (presto) {
+ img.width = img.height = 1
+ cm.display.wrapper.appendChild(img)
+ // Force a relayout, or Opera won't use our image for some obscure reason
+ img._top = img.offsetTop
+ }
+ e.dataTransfer.setDragImage(img, 0, 0)
+ if (presto) { img.parentNode.removeChild(img) }
+ }
+}
+
+function onDragOver(cm, e) {
+ var pos = posFromMouse(cm, e)
+ if (!pos) { return }
+ var frag = document.createDocumentFragment()
+ drawSelectionCursor(cm, pos, frag)
+ if (!cm.display.dragCursor) {
+ cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors")
+ cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv)
+ }
+ removeChildrenAndAdd(cm.display.dragCursor, frag)
+}
+
+function clearDragCursor(cm) {
+ if (cm.display.dragCursor) {
+ cm.display.lineSpace.removeChild(cm.display.dragCursor)
+ cm.display.dragCursor = null
+ }
+}
+
+// These must be handled carefully, because naively registering a
+// handler for each editor will cause the editors to never be
+// garbage collected.
+
+function forEachCodeMirror(f) {
+ if (!document.body.getElementsByClassName) { return }
+ var byClass = document.body.getElementsByClassName("CodeMirror")
+ for (var i = 0; i < byClass.length; i++) {
+ var cm = byClass[i].CodeMirror
+ if (cm) { f(cm) }
+ }
+}
+
+var globalsRegistered = false
+function ensureGlobalHandlers() {
+ if (globalsRegistered) { return }
+ registerGlobalHandlers()
+ globalsRegistered = true
+}
+function registerGlobalHandlers() {
+ // When the window resizes, we need to refresh active editors.
+ var resizeTimer
+ on(window, "resize", function () {
+ if (resizeTimer == null) { resizeTimer = setTimeout(function () {
+ resizeTimer = null
+ forEachCodeMirror(onResize)
+ }, 100) }
+ })
+ // When the window loses focus, we want to show the editor as blurred
+ on(window, "blur", function () { return forEachCodeMirror(onBlur); })
+}
+// Called when the window resizes
+function onResize(cm) {
+ var d = cm.display
+ if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth)
+ { return }
+ // Might be a text scaling operation, clear size caches.
+ d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null
+ d.scrollbarsClipped = false
+ cm.setSize()
+}
+
+var keyNames = {
+ 3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
+ 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
+ 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
+ 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
+ 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete",
+ 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
+ 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
+ 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
+}
+
+// Number keys
+for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i) }
+// Alphabetic keys
+for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1) }
+// Function keys
+for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2 }
+
+var keyMap = {}
+
+keyMap.basic = {
+ "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
+ "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
+ "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
+ "Tab": "defaultTab", "Shift-Tab": "indentAuto",
+ "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
+ "Esc": "singleSelection"
+}
+// Note that the save and find-related commands aren't defined by
+// default. User code or addons can define them. Unknown commands
+// are simply ignored.
+keyMap.pcDefault = {
+ "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
+ "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
+ "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
+ "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
+ "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
+ "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
+ "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
+ fallthrough: "basic"
+}
+// Very basic readline/emacs-style bindings, which are standard on Mac.
+keyMap.emacsy = {
+ "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
+ "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
+ "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
+ "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
+ "Ctrl-O": "openLine"
+}
+keyMap.macDefault = {
+ "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
+ "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
+ "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
+ "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
+ "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
+ "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
+ "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
+ fallthrough: ["basic", "emacsy"]
+}
+keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault
+
+// KEYMAP DISPATCH
+
+function normalizeKeyName(name) {
+ var parts = name.split(/-(?!$)/)
+ name = parts[parts.length - 1]
+ var alt, ctrl, shift, cmd
+ for (var i = 0; i < parts.length - 1; i++) {
+ var mod = parts[i]
+ if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true }
+ else if (/^a(lt)?$/i.test(mod)) { alt = true }
+ else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true }
+ else if (/^s(hift)?$/i.test(mod)) { shift = true }
+ else { throw new Error("Unrecognized modifier name: " + mod) }
+ }
+ if (alt) { name = "Alt-" + name }
+ if (ctrl) { name = "Ctrl-" + name }
+ if (cmd) { name = "Cmd-" + name }
+ if (shift) { name = "Shift-" + name }
+ return name
+}
+
+// This is a kludge to keep keymaps mostly working as raw objects
+// (backwards compatibility) while at the same time support features
+// like normalization and multi-stroke key bindings. It compiles a
+// new normalized keymap, and then updates the old object to reflect
+// this.
+function normalizeKeyMap(keymap) {
+ var copy = {}
+ for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {
+ var value = keymap[keyname]
+ if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }
+ if (value == "...") { delete keymap[keyname]; continue }
+
+ var keys = map(keyname.split(" "), normalizeKeyName)
+ for (var i = 0; i < keys.length; i++) {
+ var val = (void 0), name = (void 0)
+ if (i == keys.length - 1) {
+ name = keys.join(" ")
+ val = value
+ } else {
+ name = keys.slice(0, i + 1).join(" ")
+ val = "..."
+ }
+ var prev = copy[name]
+ if (!prev) { copy[name] = val }
+ else if (prev != val) { throw new Error("Inconsistent bindings for " + name) }
+ }
+ delete keymap[keyname]
+ } }
+ for (var prop in copy) { keymap[prop] = copy[prop] }
+ return keymap
+}
+
+function lookupKey(key, map, handle, context) {
+ map = getKeyMap(map)
+ var found = map.call ? map.call(key, context) : map[key]
+ if (found === false) { return "nothing" }
+ if (found === "...") { return "multi" }
+ if (found != null && handle(found)) { return "handled" }
+
+ if (map.fallthrough) {
+ if (Object.prototype.toString.call(map.fallthrough) != "[object Array]")
+ { return lookupKey(key, map.fallthrough, handle, context) }
+ for (var i = 0; i < map.fallthrough.length; i++) {
+ var result = lookupKey(key, map.fallthrough[i], handle, context)
+ if (result) { return result }
+ }
+ }
+}
+
+// Modifier key presses don't count as 'real' key presses for the
+// purpose of keymap fallthrough.
+function isModifierKey(value) {
+ var name = typeof value == "string" ? value : keyNames[value.keyCode]
+ return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"
+}
+
+// Look up the name of a key as indicated by an event object.
+function keyName(event, noShift) {
+ if (presto && event.keyCode == 34 && event["char"]) { return false }
+ var base = keyNames[event.keyCode], name = base
+ if (name == null || event.altGraphKey) { return false }
+ if (event.altKey && base != "Alt") { name = "Alt-" + name }
+ if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name }
+ if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name }
+ if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name }
+ return name
+}
+
+function getKeyMap(val) {
+ return typeof val == "string" ? keyMap[val] : val
+}
+
+// Helper for deleting text near the selection(s), used to implement
+// backspace, delete, and similar functionality.
+function deleteNearSelection(cm, compute) {
+ var ranges = cm.doc.sel.ranges, kill = []
+ // Build up a set of ranges to kill first, merging overlapping
+ // ranges.
+ for (var i = 0; i < ranges.length; i++) {
+ var toKill = compute(ranges[i])
+ while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
+ var replaced = kill.pop()
+ if (cmp(replaced.from, toKill.from) < 0) {
+ toKill.from = replaced.from
+ break
+ }
+ }
+ kill.push(toKill)
+ }
+ // Next, remove those actual ranges.
+ runInOp(cm, function () {
+ for (var i = kill.length - 1; i >= 0; i--)
+ { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete") }
+ ensureCursorVisible(cm)
+ })
+}
+
+// Commands are parameter-less actions that can be performed on an
+// editor, mostly used for keybindings.
+var commands = {
+ selectAll: selectAll,
+ singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); },
+ killLine: function (cm) { return deleteNearSelection(cm, function (range) {
+ if (range.empty()) {
+ var len = getLine(cm.doc, range.head.line).text.length
+ if (range.head.ch == len && range.head.line < cm.lastLine())
+ { return {from: range.head, to: Pos(range.head.line + 1, 0)} }
+ else
+ { return {from: range.head, to: Pos(range.head.line, len)} }
+ } else {
+ return {from: range.from(), to: range.to()}
+ }
+ }); },
+ deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+ from: Pos(range.from().line, 0),
+ to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
+ }); }); },
+ delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+ from: Pos(range.from().line, 0), to: range.from()
+ }); }); },
+ delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5
+ var leftPos = cm.coordsChar({left: 0, top: top}, "div")
+ return {from: leftPos, to: range.from()}
+ }); },
+ delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5
+ var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+ return {from: range.from(), to: rightPos }
+ }); },
+ undo: function (cm) { return cm.undo(); },
+ redo: function (cm) { return cm.redo(); },
+ undoSelection: function (cm) { return cm.undoSelection(); },
+ redoSelection: function (cm) { return cm.redoSelection(); },
+ goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },
+ goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },
+ goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },
+ {origin: "+move", bias: 1}
+ ); },
+ goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },
+ {origin: "+move", bias: 1}
+ ); },
+ goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },
+ {origin: "+move", bias: -1}
+ ); },
+ goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5
+ return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+ }, sel_move); },
+ goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5
+ return cm.coordsChar({left: 0, top: top}, "div")
+ }, sel_move); },
+ goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5
+ var pos = cm.coordsChar({left: 0, top: top}, "div")
+ if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) }
+ return pos
+ }, sel_move); },
+ goLineUp: function (cm) { return cm.moveV(-1, "line"); },
+ goLineDown: function (cm) { return cm.moveV(1, "line"); },
+ goPageUp: function (cm) { return cm.moveV(-1, "page"); },
+ goPageDown: function (cm) { return cm.moveV(1, "page"); },
+ goCharLeft: function (cm) { return cm.moveH(-1, "char"); },
+ goCharRight: function (cm) { return cm.moveH(1, "char"); },
+ goColumnLeft: function (cm) { return cm.moveH(-1, "column"); },
+ goColumnRight: function (cm) { return cm.moveH(1, "column"); },
+ goWordLeft: function (cm) { return cm.moveH(-1, "word"); },
+ goGroupRight: function (cm) { return cm.moveH(1, "group"); },
+ goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
+ goWordRight: function (cm) { return cm.moveH(1, "word"); },
+ delCharBefore: function (cm) { return cm.deleteH(-1, "char"); },
+ delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
+ delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
+ delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
+ delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); },
+ delGroupAfter: function (cm) { return cm.deleteH(1, "group"); },
+ indentAuto: function (cm) { return cm.indentSelection("smart"); },
+ indentMore: function (cm) { return cm.indentSelection("add"); },
+ indentLess: function (cm) { return cm.indentSelection("subtract"); },
+ insertTab: function (cm) { return cm.replaceSelection("\t"); },
+ insertSoftTab: function (cm) {
+ var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize
+ for (var i = 0; i < ranges.length; i++) {
+ var pos = ranges[i].from()
+ var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize)
+ spaces.push(spaceStr(tabSize - col % tabSize))
+ }
+ cm.replaceSelections(spaces)
+ },
+ defaultTab: function (cm) {
+ if (cm.somethingSelected()) { cm.indentSelection("add") }
+ else { cm.execCommand("insertTab") }
+ },
+ // Swap the two chars left and right of each selection's head.
+ // Move cursor behind the two swapped characters afterwards.
+ //
+ // Doesn't consider line feeds a character.
+ // Doesn't scan more than one line above to find a character.
+ // Doesn't do anything on an empty line.
+ // Doesn't do anything with non-empty selections.
+ transposeChars: function (cm) { return runInOp(cm, function () {
+ var ranges = cm.listSelections(), newSel = []
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) { continue }
+ var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text
+ if (line) {
+ if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1) }
+ if (cur.ch > 0) {
+ cur = new Pos(cur.line, cur.ch + 1)
+ cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
+ Pos(cur.line, cur.ch - 2), cur, "+transpose")
+ } else if (cur.line > cm.doc.first) {
+ var prev = getLine(cm.doc, cur.line - 1).text
+ if (prev) {
+ cur = new Pos(cur.line, 1)
+ cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
+ prev.charAt(prev.length - 1),
+ Pos(cur.line - 1, prev.length - 1), cur, "+transpose")
+ }
+ }
+ }
+ newSel.push(new Range(cur, cur))
+ }
+ cm.setSelections(newSel)
+ }); },
+ newlineAndIndent: function (cm) { return runInOp(cm, function () {
+ var sels = cm.listSelections()
+ for (var i = sels.length - 1; i >= 0; i--)
+ { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input") }
+ sels = cm.listSelections()
+ for (var i$1 = 0; i$1 < sels.length; i$1++)
+ { cm.indentLine(sels[i$1].from().line, null, true) }
+ ensureCursorVisible(cm)
+ }); },
+ openLine: function (cm) { return cm.replaceSelection("\n", "start"); },
+ toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }
+}
+
+
+function lineStart(cm, lineN) {
+ var line = getLine(cm.doc, lineN)
+ var visual = visualLine(line)
+ if (visual != line) { lineN = lineNo(visual) }
+ return endOfLine(true, cm, visual, lineN, 1)
+}
+function lineEnd(cm, lineN) {
+ var line = getLine(cm.doc, lineN)
+ var visual = visualLineEnd(line)
+ if (visual != line) { lineN = lineNo(visual) }
+ return endOfLine(true, cm, line, lineN, -1)
+}
+function lineStartSmart(cm, pos) {
+ var start = lineStart(cm, pos.line)
+ var line = getLine(cm.doc, start.line)
+ var order = getOrder(line, cm.doc.direction)
+ if (!order || order[0].level == 0) {
+ var firstNonWS = Math.max(0, line.text.search(/\S/))
+ var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch
+ return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)
+ }
+ return start
+}
+
+// Run a handler that was bound to a key.
+function doHandleBinding(cm, bound, dropShift) {
+ if (typeof bound == "string") {
+ bound = commands[bound]
+ if (!bound) { return false }
+ }
+ // Ensure previous input has been read, so that the handler sees a
+ // consistent view of the document
+ cm.display.input.ensurePolled()
+ var prevShift = cm.display.shift, done = false
+ try {
+ if (cm.isReadOnly()) { cm.state.suppressEdits = true }
+ if (dropShift) { cm.display.shift = false }
+ done = bound(cm) != Pass
+ } finally {
+ cm.display.shift = prevShift
+ cm.state.suppressEdits = false
+ }
+ return done
+}
+
+function lookupKeyForEditor(cm, name, handle) {
+ for (var i = 0; i < cm.state.keyMaps.length; i++) {
+ var result = lookupKey(name, cm.state.keyMaps[i], handle, cm)
+ if (result) { return result }
+ }
+ return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
+ || lookupKey(name, cm.options.keyMap, handle, cm)
+}
+
+var stopSeq = new Delayed
+function dispatchKey(cm, name, e, handle) {
+ var seq = cm.state.keySeq
+ if (seq) {
+ if (isModifierKey(name)) { return "handled" }
+ stopSeq.set(50, function () {
+ if (cm.state.keySeq == seq) {
+ cm.state.keySeq = null
+ cm.display.input.reset()
+ }
+ })
+ name = seq + " " + name
+ }
+ var result = lookupKeyForEditor(cm, name, handle)
+
+ if (result == "multi")
+ { cm.state.keySeq = name }
+ if (result == "handled")
+ { signalLater(cm, "keyHandled", cm, name, e) }
+
+ if (result == "handled" || result == "multi") {
+ e_preventDefault(e)
+ restartBlink(cm)
+ }
+
+ if (seq && !result && /\'$/.test(name)) {
+ e_preventDefault(e)
+ return true
+ }
+ return !!result
+}
+
+// Handle a key from the keydown event.
+function handleKeyBinding(cm, e) {
+ var name = keyName(e, true)
+ if (!name) { return false }
+
+ if (e.shiftKey && !cm.state.keySeq) {
+ // First try to resolve full name (including 'Shift-'). Failing
+ // that, see if there is a cursor-motion command (starting with
+ // 'go') bound to the keyname without 'Shift-'.
+ return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); })
+ || dispatchKey(cm, name, e, function (b) {
+ if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
+ { return doHandleBinding(cm, b) }
+ })
+ } else {
+ return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })
+ }
+}
+
+// Handle a key from the keypress event
+function handleCharBinding(cm, e, ch) {
+ return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); })
+}
+
+var lastStoppedKey = null
+function onKeyDown(e) {
+ var cm = this
+ cm.curOp.focus = activeElt()
+ if (signalDOMEvent(cm, e)) { return }
+ // IE does strange things with escape.
+ if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false }
+ var code = e.keyCode
+ cm.display.shift = code == 16 || e.shiftKey
+ var handled = handleKeyBinding(cm, e)
+ if (presto) {
+ lastStoppedKey = handled ? code : null
+ // Opera has no cut event... we try to at least catch the key combo
+ if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
+ { cm.replaceSelection("", null, "cut") }
+ }
+
+ // Turn mouse into crosshair when Alt is held on Mac.
+ if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
+ { showCrossHair(cm) }
+}
+
+function showCrossHair(cm) {
+ var lineDiv = cm.display.lineDiv
+ addClass(lineDiv, "CodeMirror-crosshair")
+
+ function up(e) {
+ if (e.keyCode == 18 || !e.altKey) {
+ rmClass(lineDiv, "CodeMirror-crosshair")
+ off(document, "keyup", up)
+ off(document, "mouseover", up)
+ }
+ }
+ on(document, "keyup", up)
+ on(document, "mouseover", up)
+}
+
+function onKeyUp(e) {
+ if (e.keyCode == 16) { this.doc.sel.shift = false }
+ signalDOMEvent(this, e)
+}
+
+function onKeyPress(e) {
+ var cm = this
+ if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }
+ var keyCode = e.keyCode, charCode = e.charCode
+ if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}
+ if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }
+ var ch = String.fromCharCode(charCode == null ? keyCode : charCode)
+ // Some browsers fire keypress events for backspace
+ if (ch == "\x08") { return }
+ if (handleCharBinding(cm, e, ch)) { return }
+ cm.display.input.onKeyPress(e)
+}
+
+// A mouse down can be a single click, double click, triple click,
+// start of selection drag, start of text drag, new cursor
+// (ctrl-click), rectangle drag (alt-drag), or xwin
+// middle-click-paste. Or it might be a click on something we should
+// not interfere with, such as a scrollbar or widget.
+function onMouseDown(e) {
+ var cm = this, display = cm.display
+ if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }
+ display.input.ensurePolled()
+ display.shift = e.shiftKey
+
+ if (eventInWidget(display, e)) {
+ if (!webkit) {
+ // Briefly turn off draggability, to allow widgets to do
+ // normal dragging things.
+ display.scroller.draggable = false
+ setTimeout(function () { return display.scroller.draggable = true; }, 100)
+ }
+ return
+ }
+ if (clickInGutter(cm, e)) { return }
+ var start = posFromMouse(cm, e)
+ window.focus()
+
+ switch (e_button(e)) {
+ case 1:
+ // #3261: make sure, that we're not starting a second selection
+ if (cm.state.selectingText)
+ { cm.state.selectingText(e) }
+ else if (start)
+ { leftButtonDown(cm, e, start) }
+ else if (e_target(e) == display.scroller)
+ { e_preventDefault(e) }
+ break
+ case 2:
+ if (webkit) { cm.state.lastMiddleDown = +new Date }
+ if (start) { extendSelection(cm.doc, start) }
+ setTimeout(function () { return display.input.focus(); }, 20)
+ e_preventDefault(e)
+ break
+ case 3:
+ if (captureRightClick) { onContextMenu(cm, e) }
+ else { delayBlurEvent(cm) }
+ break
+ }
+}
+
+var lastClick;
+var lastDoubleClick;
+function leftButtonDown(cm, e, start) {
+ if (ie) { setTimeout(bind(ensureFocus, cm), 0) }
+ else { cm.curOp.focus = activeElt() }
+
+ var now = +new Date, type
+ if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) {
+ type = "triple"
+ } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) {
+ type = "double"
+ lastDoubleClick = {time: now, pos: start}
+ } else {
+ type = "single"
+ lastClick = {time: now, pos: start}
+ }
+
+ var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained
+ if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
+ type == "single" && (contained = sel.contains(start)) > -1 &&
+ (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) &&
+ (cmp(contained.to(), start) > 0 || start.xRel < 0))
+ { leftButtonStartDrag(cm, e, start, modifier) }
+ else
+ { leftButtonSelect(cm, e, start, type, modifier) }
+}
+
+// Start a text drag. When it ends, see if any dragging actually
+// happen, and treat as a click if it didn't.
+function leftButtonStartDrag(cm, e, start, modifier) {
+ var display = cm.display, moved = false
+ var dragEnd = operation(cm, function (e) {
+ if (webkit) { display.scroller.draggable = false }
+ cm.state.draggingText = false
+ off(document, "mouseup", dragEnd)
+ off(document, "mousemove", mouseMove)
+ off(display.scroller, "dragstart", dragStart)
+ off(display.scroller, "drop", dragEnd)
+ if (!moved) {
+ e_preventDefault(e)
+ if (!modifier)
+ { extendSelection(cm.doc, start) }
+ // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
+ if (webkit || ie && ie_version == 9)
+ { setTimeout(function () {document.body.focus(); display.input.focus()}, 20) }
+ else
+ { display.input.focus() }
+ }
+ })
+ var mouseMove = function(e2) {
+ moved = moved || Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) >= 10
+ }
+ var dragStart = function () { return moved = true; }
+ // Let the drag handler handle this.
+ if (webkit) { display.scroller.draggable = true }
+ cm.state.draggingText = dragEnd
+ dragEnd.copy = mac ? e.altKey : e.ctrlKey
+ // IE's approach to draggable
+ if (display.scroller.dragDrop) { display.scroller.dragDrop() }
+ on(document, "mouseup", dragEnd)
+ on(document, "mousemove", mouseMove)
+ on(display.scroller, "dragstart", dragStart)
+ on(display.scroller, "drop", dragEnd)
+
+ delayBlurEvent(cm)
+ setTimeout(function () { return display.input.focus(); }, 20)
+}
+
+// Normal selection, as opposed to text dragging.
+function leftButtonSelect(cm, e, start, type, addNew) {
+ var display = cm.display, doc = cm.doc
+ e_preventDefault(e)
+
+ var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges
+ if (addNew && !e.shiftKey) {
+ ourIndex = doc.sel.contains(start)
+ if (ourIndex > -1)
+ { ourRange = ranges[ourIndex] }
+ else
+ { ourRange = new Range(start, start) }
+ } else {
+ ourRange = doc.sel.primary()
+ ourIndex = doc.sel.primIndex
+ }
+
+ if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) {
+ type = "rect"
+ if (!addNew) { ourRange = new Range(start, start) }
+ start = posFromMouse(cm, e, true, true)
+ ourIndex = -1
+ } else if (type == "double") {
+ var word = cm.findWordAt(start)
+ if (cm.display.shift || doc.extend)
+ { ourRange = extendRange(doc, ourRange, word.anchor, word.head) }
+ else
+ { ourRange = word }
+ } else if (type == "triple") {
+ var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0)))
+ if (cm.display.shift || doc.extend)
+ { ourRange = extendRange(doc, ourRange, line.anchor, line.head) }
+ else
+ { ourRange = line }
+ } else {
+ ourRange = extendRange(doc, ourRange, start)
+ }
+
+ if (!addNew) {
+ ourIndex = 0
+ setSelection(doc, new Selection([ourRange], 0), sel_mouse)
+ startSel = doc.sel
+ } else if (ourIndex == -1) {
+ ourIndex = ranges.length
+ setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),
+ {scroll: false, origin: "*mouse"})
+ } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) {
+ setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
+ {scroll: false, origin: "*mouse"})
+ startSel = doc.sel
+ } else {
+ replaceOneSelection(doc, ourIndex, ourRange, sel_mouse)
+ }
+
+ var lastPos = start
+ function extendTo(pos) {
+ if (cmp(lastPos, pos) == 0) { return }
+ lastPos = pos
+
+ if (type == "rect") {
+ var ranges = [], tabSize = cm.options.tabSize
+ var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize)
+ var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize)
+ var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol)
+ for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
+ line <= end; line++) {
+ var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize)
+ if (left == right)
+ { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))) }
+ else if (text.length > leftPos)
+ { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))) }
+ }
+ if (!ranges.length) { ranges.push(new Range(start, start)) }
+ setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
+ {origin: "*mouse", scroll: false})
+ cm.scrollIntoView(pos)
+ } else {
+ var oldRange = ourRange
+ var anchor = oldRange.anchor, head = pos
+ if (type != "single") {
+ var range
+ if (type == "double")
+ { range = cm.findWordAt(pos) }
+ else
+ { range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))) }
+ if (cmp(range.anchor, anchor) > 0) {
+ head = range.head
+ anchor = minPos(oldRange.from(), range.anchor)
+ } else {
+ head = range.anchor
+ anchor = maxPos(oldRange.to(), range.head)
+ }
+ }
+ var ranges$1 = startSel.ranges.slice(0)
+ ranges$1[ourIndex] = new Range(clipPos(doc, anchor), head)
+ setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse)
+ }
+ }
+
+ var editorSize = display.wrapper.getBoundingClientRect()
+ // Used to ensure timeout re-tries don't fire when another extend
+ // happened in the meantime (clearTimeout isn't reliable -- at
+ // least on Chrome, the timeouts still happen even when cleared,
+ // if the clear happens after their scheduled firing time).
+ var counter = 0
+
+ function extend(e) {
+ var curCount = ++counter
+ var cur = posFromMouse(cm, e, true, type == "rect")
+ if (!cur) { return }
+ if (cmp(cur, lastPos) != 0) {
+ cm.curOp.focus = activeElt()
+ extendTo(cur)
+ var visible = visibleLines(display, doc)
+ if (cur.line >= visible.to || cur.line < visible.from)
+ { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e) }}), 150) }
+ } else {
+ var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0
+ if (outside) { setTimeout(operation(cm, function () {
+ if (counter != curCount) { return }
+ display.scroller.scrollTop += outside
+ extend(e)
+ }), 50) }
+ }
+ }
+
+ function done(e) {
+ cm.state.selectingText = false
+ counter = Infinity
+ e_preventDefault(e)
+ display.input.focus()
+ off(document, "mousemove", move)
+ off(document, "mouseup", up)
+ doc.history.lastSelOrigin = null
+ }
+
+ var move = operation(cm, function (e) {
+ if (!e_button(e)) { done(e) }
+ else { extend(e) }
+ })
+ var up = operation(cm, done)
+ cm.state.selectingText = up
+ on(document, "mousemove", move)
+ on(document, "mouseup", up)
+}
+
+
+// Determines whether an event happened in the gutter, and fires the
+// handlers for the corresponding event.
+function gutterEvent(cm, e, type, prevent) {
+ var mX, mY
+ try { mX = e.clientX; mY = e.clientY }
+ catch(e) { return false }
+ if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }
+ if (prevent) { e_preventDefault(e) }
+
+ var display = cm.display
+ var lineBox = display.lineDiv.getBoundingClientRect()
+
+ if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }
+ mY -= lineBox.top - display.viewOffset
+
+ for (var i = 0; i < cm.options.gutters.length; ++i) {
+ var g = display.gutters.childNodes[i]
+ if (g && g.getBoundingClientRect().right >= mX) {
+ var line = lineAtHeight(cm.doc, mY)
+ var gutter = cm.options.gutters[i]
+ signal(cm, type, cm, line, gutter, e)
+ return e_defaultPrevented(e)
+ }
+ }
+}
+
+function clickInGutter(cm, e) {
+ return gutterEvent(cm, e, "gutterClick", true)
+}
+
+// CONTEXT MENU HANDLING
+
+// To make the context menu work, we need to briefly unhide the
+// textarea (making it as unobtrusive as possible) to let the
+// right-click take effect on it.
+function onContextMenu(cm, e) {
+ if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }
+ if (signalDOMEvent(cm, e, "contextmenu")) { return }
+ cm.display.input.onContextMenu(e)
+}
+
+function contextMenuInGutter(cm, e) {
+ if (!hasHandler(cm, "gutterContextMenu")) { return false }
+ return gutterEvent(cm, e, "gutterContextMenu", false)
+}
+
+function themeChanged(cm) {
+ cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
+ cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-")
+ clearCaches(cm)
+}
+
+var Init = {toString: function(){return "CodeMirror.Init"}}
+
+var defaults = {}
+var optionHandlers = {}
+
+function defineOptions(CodeMirror) {
+ var optionHandlers = CodeMirror.optionHandlers
+
+ function option(name, deflt, handle, notOnInit) {
+ CodeMirror.defaults[name] = deflt
+ if (handle) { optionHandlers[name] =
+ notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old) }} : handle }
+ }
+
+ CodeMirror.defineOption = option
+
+ // Passed to option handlers when there is no old value.
+ CodeMirror.Init = Init
+
+ // These two are, on init, called from the constructor because they
+ // have to be initialized before the editor can start at all.
+ option("value", "", function (cm, val) { return cm.setValue(val); }, true)
+ option("mode", null, function (cm, val) {
+ cm.doc.modeOption = val
+ loadMode(cm)
+ }, true)
+
+ option("indentUnit", 2, loadMode, true)
+ option("indentWithTabs", false)
+ option("smartIndent", true)
+ option("tabSize", 4, function (cm) {
+ resetModeState(cm)
+ clearCaches(cm)
+ regChange(cm)
+ }, true)
+ option("lineSeparator", null, function (cm, val) {
+ cm.doc.lineSep = val
+ if (!val) { return }
+ var newBreaks = [], lineNo = cm.doc.first
+ cm.doc.iter(function (line) {
+ for (var pos = 0;;) {
+ var found = line.text.indexOf(val, pos)
+ if (found == -1) { break }
+ pos = found + val.length
+ newBreaks.push(Pos(lineNo, found))
+ }
+ lineNo++
+ })
+ for (var i = newBreaks.length - 1; i >= 0; i--)
+ { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) }
+ })
+ option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) {
+ cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g")
+ if (old != Init) { cm.refresh() }
+ })
+ option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true)
+ option("electricChars", true)
+ option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
+ throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
+ }, true)
+ option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true)
+ option("rtlMoveVisually", !windows)
+ option("wholeLineUpdateBefore", true)
+
+ option("theme", "default", function (cm) {
+ themeChanged(cm)
+ guttersChanged(cm)
+ }, true)
+ option("keyMap", "default", function (cm, val, old) {
+ var next = getKeyMap(val)
+ var prev = old != Init && getKeyMap(old)
+ if (prev && prev.detach) { prev.detach(cm, next) }
+ if (next.attach) { next.attach(cm, prev || null) }
+ })
+ option("extraKeys", null)
+
+ option("lineWrapping", false, wrappingChanged, true)
+ option("gutters", [], function (cm) {
+ setGuttersForLineNumbers(cm.options)
+ guttersChanged(cm)
+ }, true)
+ option("fixedGutter", true, function (cm, val) {
+ cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"
+ cm.refresh()
+ }, true)
+ option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true)
+ option("scrollbarStyle", "native", function (cm) {
+ initScrollbars(cm)
+ updateScrollbars(cm)
+ cm.display.scrollbars.setScrollTop(cm.doc.scrollTop)
+ cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft)
+ }, true)
+ option("lineNumbers", false, function (cm) {
+ setGuttersForLineNumbers(cm.options)
+ guttersChanged(cm)
+ }, true)
+ option("firstLineNumber", 1, guttersChanged, true)
+ option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true)
+ option("showCursorWhenSelecting", false, updateSelection, true)
+
+ option("resetSelectionOnContextMenu", true)
+ option("lineWiseCopyCut", true)
+
+ option("readOnly", false, function (cm, val) {
+ if (val == "nocursor") {
+ onBlur(cm)
+ cm.display.input.blur()
+ cm.display.disabled = true
+ } else {
+ cm.display.disabled = false
+ }
+ cm.display.input.readOnlyChanged(val)
+ })
+ option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset() }}, true)
+ option("dragDrop", true, dragDropChanged)
+ option("allowDropFileTypes", null)
+
+ option("cursorBlinkRate", 530)
+ option("cursorScrollMargin", 0)
+ option("cursorHeight", 1, updateSelection, true)
+ option("singleCursorHeightPerLine", true, updateSelection, true)
+ option("workTime", 100)
+ option("workDelay", 100)
+ option("flattenSpans", true, resetModeState, true)
+ option("addModeClass", false, resetModeState, true)
+ option("pollInterval", 100)
+ option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; })
+ option("historyEventDelay", 1250)
+ option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true)
+ option("maxHighlightLength", 10000, resetModeState, true)
+ option("moveInputWithCursor", true, function (cm, val) {
+ if (!val) { cm.display.input.resetPosition() }
+ })
+
+ option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; })
+ option("autofocus", null)
+ option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true)
+}
+
+function guttersChanged(cm) {
+ updateGutters(cm)
+ regChange(cm)
+ alignHorizontally(cm)
+}
+
+function dragDropChanged(cm, value, old) {
+ var wasOn = old && old != Init
+ if (!value != !wasOn) {
+ var funcs = cm.display.dragFunctions
+ var toggle = value ? on : off
+ toggle(cm.display.scroller, "dragstart", funcs.start)
+ toggle(cm.display.scroller, "dragenter", funcs.enter)
+ toggle(cm.display.scroller, "dragover", funcs.over)
+ toggle(cm.display.scroller, "dragleave", funcs.leave)
+ toggle(cm.display.scroller, "drop", funcs.drop)
+ }
+}
+
+function wrappingChanged(cm) {
+ if (cm.options.lineWrapping) {
+ addClass(cm.display.wrapper, "CodeMirror-wrap")
+ cm.display.sizer.style.minWidth = ""
+ cm.display.sizerWidth = null
+ } else {
+ rmClass(cm.display.wrapper, "CodeMirror-wrap")
+ findMaxLine(cm)
+ }
+ estimateLineHeights(cm)
+ regChange(cm)
+ clearCaches(cm)
+ setTimeout(function () { return updateScrollbars(cm); }, 100)
+}
+
+// A CodeMirror instance represents an editor. This is the object
+// that user code is usually dealing with.
+
+function CodeMirror(place, options) {
+ var this$1 = this;
+
+ if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }
+
+ this.options = options = options ? copyObj(options) : {}
+ // Determine effective options based on given values and defaults.
+ copyObj(defaults, options, false)
+ setGuttersForLineNumbers(options)
+
+ var doc = options.value
+ if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction) }
+ this.doc = doc
+
+ var input = new CodeMirror.inputStyles[options.inputStyle](this)
+ var display = this.display = new Display(place, doc, input)
+ display.wrapper.CodeMirror = this
+ updateGutters(this)
+ themeChanged(this)
+ if (options.lineWrapping)
+ { this.display.wrapper.className += " CodeMirror-wrap" }
+ initScrollbars(this)
+
+ this.state = {
+ keyMaps: [], // stores maps added by addKeyMap
+ overlays: [], // highlighting overlays, as added by addOverlay
+ modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info
+ overwrite: false,
+ delayingBlurEvent: false,
+ focused: false,
+ suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
+ pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll
+ selectingText: false,
+ draggingText: false,
+ highlight: new Delayed(), // stores highlight worker timeout
+ keySeq: null, // Unfinished key sequence
+ specialChars: null
+ }
+
+ if (options.autofocus && !mobile) { display.input.focus() }
+
+ // Override magic textarea content restore that IE sometimes does
+ // on our hidden textarea on reload
+ if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20) }
+
+ registerEventHandlers(this)
+ ensureGlobalHandlers()
+
+ startOperation(this)
+ this.curOp.forceUpdate = true
+ attachDoc(this, doc)
+
+ if ((options.autofocus && !mobile) || this.hasFocus())
+ { setTimeout(bind(onFocus, this), 20) }
+ else
+ { onBlur(this) }
+
+ for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))
+ { optionHandlers[opt](this$1, options[opt], Init) } }
+ maybeUpdateLineNumberWidth(this)
+ if (options.finishInit) { options.finishInit(this) }
+ for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1) }
+ endOperation(this)
+ // Suppress optimizelegibility in Webkit, since it breaks text
+ // measuring on line wrapping boundaries.
+ if (webkit && options.lineWrapping &&
+ getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
+ { display.lineDiv.style.textRendering = "auto" }
+}
+
+// The default configuration options.
+CodeMirror.defaults = defaults
+// Functions to run when options are changed.
+CodeMirror.optionHandlers = optionHandlers
+
+// Attach the necessary event handlers when initializing the editor
+function registerEventHandlers(cm) {
+ var d = cm.display
+ on(d.scroller, "mousedown", operation(cm, onMouseDown))
+ // Older IE's will not fire a second mousedown for a double click
+ if (ie && ie_version < 11)
+ { on(d.scroller, "dblclick", operation(cm, function (e) {
+ if (signalDOMEvent(cm, e)) { return }
+ var pos = posFromMouse(cm, e)
+ if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }
+ e_preventDefault(e)
+ var word = cm.findWordAt(pos)
+ extendSelection(cm.doc, word.anchor, word.head)
+ })) }
+ else
+ { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }) }
+ // Some browsers fire contextmenu *after* opening the menu, at
+ // which point we can't mess with it anymore. Context menu is
+ // handled in onMouseDown for these browsers.
+ if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }) }
+
+ // Used to suppress mouse event handling when a touch happens
+ var touchFinished, prevTouch = {end: 0}
+ function finishTouch() {
+ if (d.activeTouch) {
+ touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000)
+ prevTouch = d.activeTouch
+ prevTouch.end = +new Date
+ }
+ }
+ function isMouseLikeTouchEvent(e) {
+ if (e.touches.length != 1) { return false }
+ var touch = e.touches[0]
+ return touch.radiusX <= 1 && touch.radiusY <= 1
+ }
+ function farAway(touch, other) {
+ if (other.left == null) { return true }
+ var dx = other.left - touch.left, dy = other.top - touch.top
+ return dx * dx + dy * dy > 20 * 20
+ }
+ on(d.scroller, "touchstart", function (e) {
+ if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) {
+ d.input.ensurePolled()
+ clearTimeout(touchFinished)
+ var now = +new Date
+ d.activeTouch = {start: now, moved: false,
+ prev: now - prevTouch.end <= 300 ? prevTouch : null}
+ if (e.touches.length == 1) {
+ d.activeTouch.left = e.touches[0].pageX
+ d.activeTouch.top = e.touches[0].pageY
+ }
+ }
+ })
+ on(d.scroller, "touchmove", function () {
+ if (d.activeTouch) { d.activeTouch.moved = true }
+ })
+ on(d.scroller, "touchend", function (e) {
+ var touch = d.activeTouch
+ if (touch && !eventInWidget(d, e) && touch.left != null &&
+ !touch.moved && new Date - touch.start < 300) {
+ var pos = cm.coordsChar(d.activeTouch, "page"), range
+ if (!touch.prev || farAway(touch, touch.prev)) // Single tap
+ { range = new Range(pos, pos) }
+ else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
+ { range = cm.findWordAt(pos) }
+ else // Triple tap
+ { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
+ cm.setSelection(range.anchor, range.head)
+ cm.focus()
+ e_preventDefault(e)
+ }
+ finishTouch()
+ })
+ on(d.scroller, "touchcancel", finishTouch)
+
+ // Sync scrolling between fake scrollbars and real scrollable
+ // area, ensure viewport is updated when scrolling.
+ on(d.scroller, "scroll", function () {
+ if (d.scroller.clientHeight) {
+ setScrollTop(cm, d.scroller.scrollTop)
+ setScrollLeft(cm, d.scroller.scrollLeft, true)
+ signal(cm, "scroll", cm)
+ }
+ })
+
+ // Listen to wheel events in order to try and update the viewport on time.
+ on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); })
+ on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); })
+
+ // Prevent wrapper from ever scrolling
+ on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; })
+
+ d.dragFunctions = {
+ enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e) }},
+ over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e) }},
+ start: function (e) { return onDragStart(cm, e); },
+ drop: operation(cm, onDrop),
+ leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm) }}
+ }
+
+ var inp = d.input.getField()
+ on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); })
+ on(inp, "keydown", operation(cm, onKeyDown))
+ on(inp, "keypress", operation(cm, onKeyPress))
+ on(inp, "focus", function (e) { return onFocus(cm, e); })
+ on(inp, "blur", function (e) { return onBlur(cm, e); })
+}
+
+var initHooks = []
+CodeMirror.defineInitHook = function (f) { return initHooks.push(f); }
+
+// Indent the given line. The how parameter can be "smart",
+// "add"/null, "subtract", or "prev". When aggressive is false
+// (typically set to true for forced single-line indents), empty
+// lines are not indented, and places where the mode returns Pass
+// are left alone.
+function indentLine(cm, n, how, aggressive) {
+ var doc = cm.doc, state
+ if (how == null) { how = "add" }
+ if (how == "smart") {
+ // Fall back to "prev" when the mode doesn't have an indentation
+ // method.
+ if (!doc.mode.indent) { how = "prev" }
+ else { state = getStateBefore(cm, n) }
+ }
+
+ var tabSize = cm.options.tabSize
+ var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize)
+ if (line.stateAfter) { line.stateAfter = null }
+ var curSpaceString = line.text.match(/^\s*/)[0], indentation
+ if (!aggressive && !/\S/.test(line.text)) {
+ indentation = 0
+ how = "not"
+ } else if (how == "smart") {
+ indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text)
+ if (indentation == Pass || indentation > 150) {
+ if (!aggressive) { return }
+ how = "prev"
+ }
+ }
+ if (how == "prev") {
+ if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize) }
+ else { indentation = 0 }
+ } else if (how == "add") {
+ indentation = curSpace + cm.options.indentUnit
+ } else if (how == "subtract") {
+ indentation = curSpace - cm.options.indentUnit
+ } else if (typeof how == "number") {
+ indentation = curSpace + how
+ }
+ indentation = Math.max(0, indentation)
+
+ var indentString = "", pos = 0
+ if (cm.options.indentWithTabs)
+ { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t"} }
+ if (pos < indentation) { indentString += spaceStr(indentation - pos) }
+
+ if (indentString != curSpaceString) {
+ replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input")
+ line.stateAfter = null
+ return true
+ } else {
+ // Ensure that, if the cursor was in the whitespace at the start
+ // of the line, it is moved to the end of that space.
+ for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
+ var range = doc.sel.ranges[i$1]
+ if (range.head.line == n && range.head.ch < curSpaceString.length) {
+ var pos$1 = Pos(n, curSpaceString.length)
+ replaceOneSelection(doc, i$1, new Range(pos$1, pos$1))
+ break
+ }
+ }
+ }
+}
+
+// This will be set to a {lineWise: bool, text: [string]} object, so
+// that, when pasting, we know what kind of selections the copied
+// text was made out of.
+var lastCopied = null
+
+function setLastCopied(newLastCopied) {
+ lastCopied = newLastCopied
+}
+
+function applyTextInput(cm, inserted, deleted, sel, origin) {
+ var doc = cm.doc
+ cm.display.shift = false
+ if (!sel) { sel = doc.sel }
+
+ var paste = cm.state.pasteIncoming || origin == "paste"
+ var textLines = splitLinesAuto(inserted), multiPaste = null
+ // When pasing N lines into N selections, insert one line per selection
+ if (paste && sel.ranges.length > 1) {
+ if (lastCopied && lastCopied.text.join("\n") == inserted) {
+ if (sel.ranges.length % lastCopied.text.length == 0) {
+ multiPaste = []
+ for (var i = 0; i < lastCopied.text.length; i++)
+ { multiPaste.push(doc.splitLines(lastCopied.text[i])) }
+ }
+ } else if (textLines.length == sel.ranges.length) {
+ multiPaste = map(textLines, function (l) { return [l]; })
+ }
+ }
+
+ var updateInput
+ // Normal behavior is to insert the new text into every selection
+ for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
+ var range = sel.ranges[i$1]
+ var from = range.from(), to = range.to()
+ if (range.empty()) {
+ if (deleted && deleted > 0) // Handle deletion
+ { from = Pos(from.line, from.ch - deleted) }
+ else if (cm.state.overwrite && !paste) // Handle overwrite
+ { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)) }
+ else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted)
+ { from = to = Pos(from.line, 0) }
+ }
+ updateInput = cm.curOp.updateInput
+ var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
+ origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}
+ makeChange(cm.doc, changeEvent)
+ signalLater(cm, "inputRead", cm, changeEvent)
+ }
+ if (inserted && !paste)
+ { triggerElectric(cm, inserted) }
+
+ ensureCursorVisible(cm)
+ cm.curOp.updateInput = updateInput
+ cm.curOp.typing = true
+ cm.state.pasteIncoming = cm.state.cutIncoming = false
+}
+
+function handlePaste(e, cm) {
+ var pasted = e.clipboardData && e.clipboardData.getData("Text")
+ if (pasted) {
+ e.preventDefault()
+ if (!cm.isReadOnly() && !cm.options.disableInput)
+ { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }) }
+ return true
+ }
+}
+
+function triggerElectric(cm, inserted) {
+ // When an 'electric' character is inserted, immediately trigger a reindent
+ if (!cm.options.electricChars || !cm.options.smartIndent) { return }
+ var sel = cm.doc.sel
+
+ for (var i = sel.ranges.length - 1; i >= 0; i--) {
+ var range = sel.ranges[i]
+ if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }
+ var mode = cm.getModeAt(range.head)
+ var indented = false
+ if (mode.electricChars) {
+ for (var j = 0; j < mode.electricChars.length; j++)
+ { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
+ indented = indentLine(cm, range.head.line, "smart")
+ break
+ } }
+ } else if (mode.electricInput) {
+ if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))
+ { indented = indentLine(cm, range.head.line, "smart") }
+ }
+ if (indented) { signalLater(cm, "electricInput", cm, range.head.line) }
+ }
+}
+
+function copyableRanges(cm) {
+ var text = [], ranges = []
+ for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
+ var line = cm.doc.sel.ranges[i].head.line
+ var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}
+ ranges.push(lineRange)
+ text.push(cm.getRange(lineRange.anchor, lineRange.head))
+ }
+ return {text: text, ranges: ranges}
+}
+
+function disableBrowserMagic(field, spellcheck) {
+ field.setAttribute("autocorrect", "off")
+ field.setAttribute("autocapitalize", "off")
+ field.setAttribute("spellcheck", !!spellcheck)
+}
+
+function hiddenTextarea() {
+ var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none")
+ var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;")
+ // The textarea is kept positioned near the cursor to prevent the
+ // fact that it'll be scrolled into view on input from scrolling
+ // our fake cursor out of view. On webkit, when wrap=off, paste is
+ // very slow. So make the area wide instead.
+ if (webkit) { te.style.width = "1000px" }
+ else { te.setAttribute("wrap", "off") }
+ // If border: 0; -- iOS fails to open keyboard (issue #1287)
+ if (ios) { te.style.border = "1px solid black" }
+ disableBrowserMagic(te)
+ return div
+}
+
+// The publicly visible API. Note that methodOp(f) means
+// 'wrap f in an operation, performed on its `this` parameter'.
+
+// This is not the complete set of editor methods. Most of the
+// methods defined on the Doc type are also injected into
+// CodeMirror.prototype, for backwards compatibility and
+// convenience.
+
+function addEditorMethods(CodeMirror) {
+ var optionHandlers = CodeMirror.optionHandlers
+
+ var helpers = CodeMirror.helpers = {}
+
+ CodeMirror.prototype = {
+ constructor: CodeMirror,
+ focus: function(){window.focus(); this.display.input.focus()},
+
+ setOption: function(option, value) {
+ var options = this.options, old = options[option]
+ if (options[option] == value && option != "mode") { return }
+ options[option] = value
+ if (optionHandlers.hasOwnProperty(option))
+ { operation(this, optionHandlers[option])(this, value, old) }
+ signal(this, "optionChange", this, option)
+ },
+
+ getOption: function(option) {return this.options[option]},
+ getDoc: function() {return this.doc},
+
+ addKeyMap: function(map, bottom) {
+ this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map))
+ },
+ removeKeyMap: function(map) {
+ var maps = this.state.keyMaps
+ for (var i = 0; i < maps.length; ++i)
+ { if (maps[i] == map || maps[i].name == map) {
+ maps.splice(i, 1)
+ return true
+ } }
+ },
+
+ addOverlay: methodOp(function(spec, options) {
+ var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec)
+ if (mode.startState) { throw new Error("Overlays may not be stateful.") }
+ insertSorted(this.state.overlays,
+ {mode: mode, modeSpec: spec, opaque: options && options.opaque,
+ priority: (options && options.priority) || 0},
+ function (overlay) { return overlay.priority; })
+ this.state.modeGen++
+ regChange(this)
+ }),
+ removeOverlay: methodOp(function(spec) {
+ var this$1 = this;
+
+ var overlays = this.state.overlays
+ for (var i = 0; i < overlays.length; ++i) {
+ var cur = overlays[i].modeSpec
+ if (cur == spec || typeof spec == "string" && cur.name == spec) {
+ overlays.splice(i, 1)
+ this$1.state.modeGen++
+ regChange(this$1)
+ return
+ }
+ }
+ }),
+
+ indentLine: methodOp(function(n, dir, aggressive) {
+ if (typeof dir != "string" && typeof dir != "number") {
+ if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev" }
+ else { dir = dir ? "add" : "subtract" }
+ }
+ if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive) }
+ }),
+ indentSelection: methodOp(function(how) {
+ var this$1 = this;
+
+ var ranges = this.doc.sel.ranges, end = -1
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i]
+ if (!range.empty()) {
+ var from = range.from(), to = range.to()
+ var start = Math.max(end, from.line)
+ end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1
+ for (var j = start; j < end; ++j)
+ { indentLine(this$1, j, how) }
+ var newRanges = this$1.doc.sel.ranges
+ if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
+ { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll) }
+ } else if (range.head.line > end) {
+ indentLine(this$1, range.head.line, how, true)
+ end = range.head.line
+ if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1) }
+ }
+ }
+ }),
+
+ // Fetch the parser token for a given character. Useful for hacks
+ // that want to inspect the mode state (say, for completion).
+ getTokenAt: function(pos, precise) {
+ return takeToken(this, pos, precise)
+ },
+
+ getLineTokens: function(line, precise) {
+ return takeToken(this, Pos(line), precise, true)
+ },
+
+ getTokenTypeAt: function(pos) {
+ pos = clipPos(this.doc, pos)
+ var styles = getLineStyles(this, getLine(this.doc, pos.line))
+ var before = 0, after = (styles.length - 1) / 2, ch = pos.ch
+ var type
+ if (ch == 0) { type = styles[2] }
+ else { for (;;) {
+ var mid = (before + after) >> 1
+ if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid }
+ else if (styles[mid * 2 + 1] < ch) { before = mid + 1 }
+ else { type = styles[mid * 2 + 2]; break }
+ } }
+ var cut = type ? type.indexOf("overlay ") : -1
+ return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)
+ },
+
+ getModeAt: function(pos) {
+ var mode = this.doc.mode
+ if (!mode.innerMode) { return mode }
+ return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode
+ },
+
+ getHelper: function(pos, type) {
+ return this.getHelpers(pos, type)[0]
+ },
+
+ getHelpers: function(pos, type) {
+ var this$1 = this;
+
+ var found = []
+ if (!helpers.hasOwnProperty(type)) { return found }
+ var help = helpers[type], mode = this.getModeAt(pos)
+ if (typeof mode[type] == "string") {
+ if (help[mode[type]]) { found.push(help[mode[type]]) }
+ } else if (mode[type]) {
+ for (var i = 0; i < mode[type].length; i++) {
+ var val = help[mode[type][i]]
+ if (val) { found.push(val) }
+ }
+ } else if (mode.helperType && help[mode.helperType]) {
+ found.push(help[mode.helperType])
+ } else if (help[mode.name]) {
+ found.push(help[mode.name])
+ }
+ for (var i$1 = 0; i$1 < help._global.length; i$1++) {
+ var cur = help._global[i$1]
+ if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)
+ { found.push(cur.val) }
+ }
+ return found
+ },
+
+ getStateAfter: function(line, precise) {
+ var doc = this.doc
+ line = clipLine(doc, line == null ? doc.first + doc.size - 1: line)
+ return getStateBefore(this, line + 1, precise)
+ },
+
+ cursorCoords: function(start, mode) {
+ var pos, range = this.doc.sel.primary()
+ if (start == null) { pos = range.head }
+ else if (typeof start == "object") { pos = clipPos(this.doc, start) }
+ else { pos = start ? range.from() : range.to() }
+ return cursorCoords(this, pos, mode || "page")
+ },
+
+ charCoords: function(pos, mode) {
+ return charCoords(this, clipPos(this.doc, pos), mode || "page")
+ },
+
+ coordsChar: function(coords, mode) {
+ coords = fromCoordSystem(this, coords, mode || "page")
+ return coordsChar(this, coords.left, coords.top)
+ },
+
+ lineAtHeight: function(height, mode) {
+ height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top
+ return lineAtHeight(this.doc, height + this.display.viewOffset)
+ },
+ heightAtLine: function(line, mode, includeWidgets) {
+ var end = false, lineObj
+ if (typeof line == "number") {
+ var last = this.doc.first + this.doc.size - 1
+ if (line < this.doc.first) { line = this.doc.first }
+ else if (line > last) { line = last; end = true }
+ lineObj = getLine(this.doc, line)
+ } else {
+ lineObj = line
+ }
+ return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top +
+ (end ? this.doc.height - heightAtLine(lineObj) : 0)
+ },
+
+ defaultTextHeight: function() { return textHeight(this.display) },
+ defaultCharWidth: function() { return charWidth(this.display) },
+
+ getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},
+
+ addWidget: function(pos, node, scroll, vert, horiz) {
+ var display = this.display
+ pos = cursorCoords(this, clipPos(this.doc, pos))
+ var top = pos.bottom, left = pos.left
+ node.style.position = "absolute"
+ node.setAttribute("cm-ignore-events", "true")
+ this.display.input.setUneditable(node)
+ display.sizer.appendChild(node)
+ if (vert == "over") {
+ top = pos.top
+ } else if (vert == "above" || vert == "near") {
+ var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
+ hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth)
+ // Default to positioning above (if specified and possible); otherwise default to positioning below
+ if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
+ { top = pos.top - node.offsetHeight }
+ else if (pos.bottom + node.offsetHeight <= vspace)
+ { top = pos.bottom }
+ if (left + node.offsetWidth > hspace)
+ { left = hspace - node.offsetWidth }
+ }
+ node.style.top = top + "px"
+ node.style.left = node.style.right = ""
+ if (horiz == "right") {
+ left = display.sizer.clientWidth - node.offsetWidth
+ node.style.right = "0px"
+ } else {
+ if (horiz == "left") { left = 0 }
+ else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2 }
+ node.style.left = left + "px"
+ }
+ if (scroll)
+ { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}) }
+ },
+
+ triggerOnKeyDown: methodOp(onKeyDown),
+ triggerOnKeyPress: methodOp(onKeyPress),
+ triggerOnKeyUp: onKeyUp,
+
+ execCommand: function(cmd) {
+ if (commands.hasOwnProperty(cmd))
+ { return commands[cmd].call(null, this) }
+ },
+
+ triggerElectric: methodOp(function(text) { triggerElectric(this, text) }),
+
+ findPosH: function(from, amount, unit, visually) {
+ var this$1 = this;
+
+ var dir = 1
+ if (amount < 0) { dir = -1; amount = -amount }
+ var cur = clipPos(this.doc, from)
+ for (var i = 0; i < amount; ++i) {
+ cur = findPosH(this$1.doc, cur, dir, unit, visually)
+ if (cur.hitSide) { break }
+ }
+ return cur
+ },
+
+ moveH: methodOp(function(dir, unit) {
+ var this$1 = this;
+
+ this.extendSelectionsBy(function (range) {
+ if (this$1.display.shift || this$1.doc.extend || range.empty())
+ { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }
+ else
+ { return dir < 0 ? range.from() : range.to() }
+ }, sel_move)
+ }),
+
+ deleteH: methodOp(function(dir, unit) {
+ var sel = this.doc.sel, doc = this.doc
+ if (sel.somethingSelected())
+ { doc.replaceSelection("", null, "+delete") }
+ else
+ { deleteNearSelection(this, function (range) {
+ var other = findPosH(doc, range.head, dir, unit, false)
+ return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}
+ }) }
+ }),
+
+ findPosV: function(from, amount, unit, goalColumn) {
+ var this$1 = this;
+
+ var dir = 1, x = goalColumn
+ if (amount < 0) { dir = -1; amount = -amount }
+ var cur = clipPos(this.doc, from)
+ for (var i = 0; i < amount; ++i) {
+ var coords = cursorCoords(this$1, cur, "div")
+ if (x == null) { x = coords.left }
+ else { coords.left = x }
+ cur = findPosV(this$1, coords, dir, unit)
+ if (cur.hitSide) { break }
+ }
+ return cur
+ },
+
+ moveV: methodOp(function(dir, unit) {
+ var this$1 = this;
+
+ var doc = this.doc, goals = []
+ var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected()
+ doc.extendSelectionsBy(function (range) {
+ if (collapse)
+ { return dir < 0 ? range.from() : range.to() }
+ var headPos = cursorCoords(this$1, range.head, "div")
+ if (range.goalColumn != null) { headPos.left = range.goalColumn }
+ goals.push(headPos.left)
+ var pos = findPosV(this$1, headPos, dir, unit)
+ if (unit == "page" && range == doc.sel.primary())
+ { addToScrollPos(this$1, null, charCoords(this$1, pos, "div").top - headPos.top) }
+ return pos
+ }, sel_move)
+ if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)
+ { doc.sel.ranges[i].goalColumn = goals[i] } }
+ }),
+
+ // Find the word at the given position (as returned by coordsChar).
+ findWordAt: function(pos) {
+ var doc = this.doc, line = getLine(doc, pos.line).text
+ var start = pos.ch, end = pos.ch
+ if (line) {
+ var helper = this.getHelper(pos, "wordChars")
+ if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end }
+ var startChar = line.charAt(start)
+ var check = isWordChar(startChar, helper)
+ ? function (ch) { return isWordChar(ch, helper); }
+ : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); }
+ : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }
+ while (start > 0 && check(line.charAt(start - 1))) { --start }
+ while (end < line.length && check(line.charAt(end))) { ++end }
+ }
+ return new Range(Pos(pos.line, start), Pos(pos.line, end))
+ },
+
+ toggleOverwrite: function(value) {
+ if (value != null && value == this.state.overwrite) { return }
+ if (this.state.overwrite = !this.state.overwrite)
+ { addClass(this.display.cursorDiv, "CodeMirror-overwrite") }
+ else
+ { rmClass(this.display.cursorDiv, "CodeMirror-overwrite") }
+
+ signal(this, "overwriteToggle", this, this.state.overwrite)
+ },
+ hasFocus: function() { return this.display.input.getField() == activeElt() },
+ isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },
+
+ scrollTo: methodOp(function(x, y) {
+ if (x != null || y != null) { resolveScrollToPos(this) }
+ if (x != null) { this.curOp.scrollLeft = x }
+ if (y != null) { this.curOp.scrollTop = y }
+ }),
+ getScrollInfo: function() {
+ var scroller = this.display.scroller
+ return {left: scroller.scrollLeft, top: scroller.scrollTop,
+ height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
+ width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
+ clientHeight: displayHeight(this), clientWidth: displayWidth(this)}
+ },
+
+ scrollIntoView: methodOp(function(range, margin) {
+ if (range == null) {
+ range = {from: this.doc.sel.primary().head, to: null}
+ if (margin == null) { margin = this.options.cursorScrollMargin }
+ } else if (typeof range == "number") {
+ range = {from: Pos(range, 0), to: null}
+ } else if (range.from == null) {
+ range = {from: range, to: null}
+ }
+ if (!range.to) { range.to = range.from }
+ range.margin = margin || 0
+
+ if (range.from.line != null) {
+ resolveScrollToPos(this)
+ this.curOp.scrollToPos = range
+ } else {
+ var sPos = calculateScrollPos(this, {
+ left: Math.min(range.from.left, range.to.left),
+ top: Math.min(range.from.top, range.to.top) - range.margin,
+ right: Math.max(range.from.right, range.to.right),
+ bottom: Math.max(range.from.bottom, range.to.bottom) + range.margin
+ })
+ this.scrollTo(sPos.scrollLeft, sPos.scrollTop)
+ }
+ }),
+
+ setSize: methodOp(function(width, height) {
+ var this$1 = this;
+
+ var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }
+ if (width != null) { this.display.wrapper.style.width = interpret(width) }
+ if (height != null) { this.display.wrapper.style.height = interpret(height) }
+ if (this.options.lineWrapping) { clearLineMeasurementCache(this) }
+ var lineNo = this.display.viewFrom
+ this.doc.iter(lineNo, this.display.viewTo, function (line) {
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)
+ { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } }
+ ++lineNo
+ })
+ this.curOp.forceUpdate = true
+ signal(this, "refresh", this)
+ }),
+
+ operation: function(f){return runInOp(this, f)},
+
+ refresh: methodOp(function() {
+ var oldHeight = this.display.cachedTextHeight
+ regChange(this)
+ this.curOp.forceUpdate = true
+ clearCaches(this)
+ this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop)
+ updateGutterSpace(this)
+ if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)
+ { estimateLineHeights(this) }
+ signal(this, "refresh", this)
+ }),
+
+ swapDoc: methodOp(function(doc) {
+ var old = this.doc
+ old.cm = null
+ attachDoc(this, doc)
+ clearCaches(this)
+ this.display.input.reset()
+ this.scrollTo(doc.scrollLeft, doc.scrollTop)
+ this.curOp.forceScroll = true
+ signalLater(this, "swapDoc", this, old)
+ return old
+ }),
+
+ getInputField: function(){return this.display.input.getField()},
+ getWrapperElement: function(){return this.display.wrapper},
+ getScrollerElement: function(){return this.display.scroller},
+ getGutterElement: function(){return this.display.gutters}
+ }
+ eventMixin(CodeMirror)
+
+ CodeMirror.registerHelper = function(type, name, value) {
+ if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []} }
+ helpers[type][name] = value
+ }
+ CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
+ CodeMirror.registerHelper(type, name, value)
+ helpers[type]._global.push({pred: predicate, val: value})
+ }
+}
+
+// Used for horizontal relative motion. Dir is -1 or 1 (left or
+// right), unit can be "char", "column" (like char, but doesn't
+// cross line boundaries), "word" (across next word), or "group" (to
+// the start of next group of word or non-word-non-whitespace
+// chars). The visually param controls whether, in right-to-left
+// text, direction 1 means to move towards the next index in the
+// string, or towards the character to the right of the current
+// position. The resulting position will have a hitSide=true
+// property if it reached the end of the document.
+function findPosH(doc, pos, dir, unit, visually) {
+ var oldPos = pos
+ var origDir = dir
+ var lineObj = getLine(doc, pos.line)
+ function findNextLine() {
+ var l = pos.line + dir
+ if (l < doc.first || l >= doc.first + doc.size) { return false }
+ pos = new Pos(l, pos.ch, pos.sticky)
+ return lineObj = getLine(doc, l)
+ }
+ function moveOnce(boundToLine) {
+ var next
+ if (visually) {
+ next = moveVisually(doc.cm, lineObj, pos, dir)
+ } else {
+ next = moveLogically(lineObj, pos, dir)
+ }
+ if (next == null) {
+ if (!boundToLine && findNextLine())
+ { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir) }
+ else
+ { return false }
+ } else {
+ pos = next
+ }
+ return true
+ }
+
+ if (unit == "char") {
+ moveOnce()
+ } else if (unit == "column") {
+ moveOnce(true)
+ } else if (unit == "word" || unit == "group") {
+ var sawType = null, group = unit == "group"
+ var helper = doc.cm && doc.cm.getHelper(pos, "wordChars")
+ for (var first = true;; first = false) {
+ if (dir < 0 && !moveOnce(!first)) { break }
+ var cur = lineObj.text.charAt(pos.ch) || "\n"
+ var type = isWordChar(cur, helper) ? "w"
+ : group && cur == "\n" ? "n"
+ : !group || /\s/.test(cur) ? null
+ : "p"
+ if (group && !first && !type) { type = "s" }
+ if (sawType && sawType != type) {
+ if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after"}
+ break
+ }
+
+ if (type) { sawType = type }
+ if (dir > 0 && !moveOnce(!first)) { break }
+ }
+ }
+ var result = skipAtomic(doc, pos, oldPos, origDir, true)
+ if (equalCursorPos(oldPos, result)) { result.hitSide = true }
+ return result
+}
+
+// For relative vertical movement. Dir may be -1 or 1. Unit can be
+// "page" or "line". The resulting position will have a hitSide=true
+// property if it reached the end of the document.
+function findPosV(cm, pos, dir, unit) {
+ var doc = cm.doc, x = pos.left, y
+ if (unit == "page") {
+ var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight)
+ var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3)
+ y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount
+
+ } else if (unit == "line") {
+ y = dir > 0 ? pos.bottom + 3 : pos.top - 3
+ }
+ var target
+ for (;;) {
+ target = coordsChar(cm, x, y)
+ if (!target.outside) { break }
+ if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }
+ y += dir * 5
+ }
+ return target
+}
+
+// CONTENTEDITABLE INPUT STYLE
+
+var ContentEditableInput = function(cm) {
+ this.cm = cm
+ this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null
+ this.polling = new Delayed()
+ this.composing = null
+ this.gracePeriod = false
+ this.readDOMTimeout = null
+};
+
+ContentEditableInput.prototype.init = function (display) {
+ var this$1 = this;
+
+ var input = this, cm = input.cm
+ var div = input.div = display.lineDiv
+ disableBrowserMagic(div, cm.options.spellcheck)
+
+ on(div, "paste", function (e) {
+ if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+ // IE doesn't fire input events, so we schedule a read for the pasted content in this way
+ if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20) }
+ })
+
+ on(div, "compositionstart", function (e) {
+ this$1.composing = {data: e.data, done: false}
+ })
+ on(div, "compositionupdate", function (e) {
+ if (!this$1.composing) { this$1.composing = {data: e.data, done: false} }
+ })
+ on(div, "compositionend", function (e) {
+ if (this$1.composing) {
+ if (e.data != this$1.composing.data) { this$1.readFromDOMSoon() }
+ this$1.composing.done = true
+ }
+ })
+
+ on(div, "touchstart", function () { return input.forceCompositionEnd(); })
+
+ on(div, "input", function () {
+ if (!this$1.composing) { this$1.readFromDOMSoon() }
+ })
+
+ function onCopyCut(e) {
+ if (signalDOMEvent(cm, e)) { return }
+ if (cm.somethingSelected()) {
+ setLastCopied({lineWise: false, text: cm.getSelections()})
+ if (e.type == "cut") { cm.replaceSelection("", null, "cut") }
+ } else if (!cm.options.lineWiseCopyCut) {
+ return
+ } else {
+ var ranges = copyableRanges(cm)
+ setLastCopied({lineWise: true, text: ranges.text})
+ if (e.type == "cut") {
+ cm.operation(function () {
+ cm.setSelections(ranges.ranges, 0, sel_dontScroll)
+ cm.replaceSelection("", null, "cut")
+ })
+ }
+ }
+ if (e.clipboardData) {
+ e.clipboardData.clearData()
+ var content = lastCopied.text.join("\n")
+ // iOS exposes the clipboard API, but seems to discard content inserted into it
+ e.clipboardData.setData("Text", content)
+ if (e.clipboardData.getData("Text") == content) {
+ e.preventDefault()
+ return
+ }
+ }
+ // Old-fashioned briefly-focus-a-textarea hack
+ var kludge = hiddenTextarea(), te = kludge.firstChild
+ cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild)
+ te.value = lastCopied.text.join("\n")
+ var hadFocus = document.activeElement
+ selectInput(te)
+ setTimeout(function () {
+ cm.display.lineSpace.removeChild(kludge)
+ hadFocus.focus()
+ if (hadFocus == div) { input.showPrimarySelection() }
+ }, 50)
+ }
+ on(div, "copy", onCopyCut)
+ on(div, "cut", onCopyCut)
+};
+
+ContentEditableInput.prototype.prepareSelection = function () {
+ var result = prepareSelection(this.cm, false)
+ result.focus = this.cm.state.focused
+ return result
+};
+
+ContentEditableInput.prototype.showSelection = function (info, takeFocus) {
+ if (!info || !this.cm.display.view.length) { return }
+ if (info.focus || takeFocus) { this.showPrimarySelection() }
+ this.showMultipleSelections(info)
+};
+
+ContentEditableInput.prototype.showPrimarySelection = function () {
+ var sel = window.getSelection(), cm = this.cm, prim = cm.doc.sel.primary()
+ var from = prim.from(), to = prim.to()
+
+ if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
+ sel.removeAllRanges()
+ return
+ }
+
+ var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset)
+ var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset)
+ if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
+ cmp(minPos(curAnchor, curFocus), from) == 0 &&
+ cmp(maxPos(curAnchor, curFocus), to) == 0)
+ { return }
+
+ var view = cm.display.view
+ var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||
+ {node: view[0].measure.map[2], offset: 0}
+ var end = to.line < cm.display.viewTo && posToDOM(cm, to)
+ if (!end) {
+ var measure = view[view.length - 1].measure
+ var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map
+ end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}
+ }
+
+ if (!start || !end) {
+ sel.removeAllRanges()
+ return
+ }
+
+ var old = sel.rangeCount && sel.getRangeAt(0), rng
+ try { rng = range(start.node, start.offset, end.offset, end.node) }
+ catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
+ if (rng) {
+ if (!gecko && cm.state.focused) {
+ sel.collapse(start.node, start.offset)
+ if (!rng.collapsed) {
+ sel.removeAllRanges()
+ sel.addRange(rng)
+ }
+ } else {
+ sel.removeAllRanges()
+ sel.addRange(rng)
+ }
+ if (old && sel.anchorNode == null) { sel.addRange(old) }
+ else if (gecko) { this.startGracePeriod() }
+ }
+ this.rememberSelection()
+};
+
+ContentEditableInput.prototype.startGracePeriod = function () {
+ var this$1 = this;
+
+ clearTimeout(this.gracePeriod)
+ this.gracePeriod = setTimeout(function () {
+ this$1.gracePeriod = false
+ if (this$1.selectionChanged())
+ { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }) }
+ }, 20)
+};
+
+ContentEditableInput.prototype.showMultipleSelections = function (info) {
+ removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors)
+ removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection)
+};
+
+ContentEditableInput.prototype.rememberSelection = function () {
+ var sel = window.getSelection()
+ this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset
+ this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset
+};
+
+ContentEditableInput.prototype.selectionInEditor = function () {
+ var sel = window.getSelection()
+ if (!sel.rangeCount) { return false }
+ var node = sel.getRangeAt(0).commonAncestorContainer
+ return contains(this.div, node)
+};
+
+ContentEditableInput.prototype.focus = function () {
+ if (this.cm.options.readOnly != "nocursor") {
+ if (!this.selectionInEditor())
+ { this.showSelection(this.prepareSelection(), true) }
+ this.div.focus()
+ }
+};
+ContentEditableInput.prototype.blur = function () { this.div.blur() };
+ContentEditableInput.prototype.getField = function () { return this.div };
+
+ContentEditableInput.prototype.supportsTouch = function () { return true };
+
+ContentEditableInput.prototype.receivedFocus = function () {
+ var input = this
+ if (this.selectionInEditor())
+ { this.pollSelection() }
+ else
+ { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }) }
+
+ function poll() {
+ if (input.cm.state.focused) {
+ input.pollSelection()
+ input.polling.set(input.cm.options.pollInterval, poll)
+ }
+ }
+ this.polling.set(this.cm.options.pollInterval, poll)
+};
+
+ContentEditableInput.prototype.selectionChanged = function () {
+ var sel = window.getSelection()
+ return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
+ sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
+};
+
+ContentEditableInput.prototype.pollSelection = function () {
+ if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }
+ var sel = window.getSelection(), cm = this.cm
+ // On Android Chrome (version 56, at least), backspacing into an
+ // uneditable block element will put the cursor in that element,
+ // and then, because it's not editable, hide the virtual keyboard.
+ // Because Android doesn't allow us to actually detect backspace
+ // presses in a sane way, this code checks for when that happens
+ // and simulates a backspace press in this case.
+ if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {
+ this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs})
+ this.blur()
+ this.focus()
+ return
+ }
+ if (this.composing) { return }
+ this.rememberSelection()
+ var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset)
+ var head = domToPos(cm, sel.focusNode, sel.focusOffset)
+ if (anchor && head) { runInOp(cm, function () {
+ setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll)
+ if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true }
+ }) }
+};
+
+ContentEditableInput.prototype.pollContent = function () {
+ if (this.readDOMTimeout != null) {
+ clearTimeout(this.readDOMTimeout)
+ this.readDOMTimeout = null
+ }
+
+ var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary()
+ var from = sel.from(), to = sel.to()
+ if (from.ch == 0 && from.line > cm.firstLine())
+ { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length) }
+ if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())
+ { to = Pos(to.line + 1, 0) }
+ if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }
+
+ var fromIndex, fromLine, fromNode
+ if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
+ fromLine = lineNo(display.view[0].line)
+ fromNode = display.view[0].node
+ } else {
+ fromLine = lineNo(display.view[fromIndex].line)
+ fromNode = display.view[fromIndex - 1].node.nextSibling
+ }
+ var toIndex = findViewIndex(cm, to.line)
+ var toLine, toNode
+ if (toIndex == display.view.length - 1) {
+ toLine = display.viewTo - 1
+ toNode = display.lineDiv.lastChild
+ } else {
+ toLine = lineNo(display.view[toIndex + 1].line) - 1
+ toNode = display.view[toIndex + 1].node.previousSibling
+ }
+
+ if (!fromNode) { return false }
+ var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine))
+ var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length))
+ while (newText.length > 1 && oldText.length > 1) {
+ if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine-- }
+ else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++ }
+ else { break }
+ }
+
+ var cutFront = 0, cutEnd = 0
+ var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length)
+ while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
+ { ++cutFront }
+ var newBot = lst(newText), oldBot = lst(oldText)
+ var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
+ oldBot.length - (oldText.length == 1 ? cutFront : 0))
+ while (cutEnd < maxCutEnd &&
+ newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
+ { ++cutEnd }
+ // Try to move start of change to start of selection if ambiguous
+ if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {
+ while (cutFront && cutFront > from.ch &&
+ newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
+ cutFront--
+ cutEnd++
+ }
+ }
+
+ newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "")
+ newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "")
+
+ var chFrom = Pos(fromLine, cutFront)
+ var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0)
+ if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
+ replaceRange(cm.doc, newText, chFrom, chTo, "+input")
+ return true
+ }
+};
+
+ContentEditableInput.prototype.ensurePolled = function () {
+ this.forceCompositionEnd()
+};
+ContentEditableInput.prototype.reset = function () {
+ this.forceCompositionEnd()
+};
+ContentEditableInput.prototype.forceCompositionEnd = function () {
+ if (!this.composing) { return }
+ clearTimeout(this.readDOMTimeout)
+ this.composing = null
+ this.updateFromDOM()
+ this.div.blur()
+ this.div.focus()
+};
+ContentEditableInput.prototype.readFromDOMSoon = function () {
+ var this$1 = this;
+
+ if (this.readDOMTimeout != null) { return }
+ this.readDOMTimeout = setTimeout(function () {
+ this$1.readDOMTimeout = null
+ if (this$1.composing) {
+ if (this$1.composing.done) { this$1.composing = null }
+ else { return }
+ }
+ this$1.updateFromDOM()
+ }, 80)
+};
+
+ContentEditableInput.prototype.updateFromDOM = function () {
+ var this$1 = this;
+
+ if (this.cm.isReadOnly() || !this.pollContent())
+ { runInOp(this.cm, function () { return regChange(this$1.cm); }) }
+};
+
+ContentEditableInput.prototype.setUneditable = function (node) {
+ node.contentEditable = "false"
+};
+
+ContentEditableInput.prototype.onKeyPress = function (e) {
+ if (e.charCode == 0) { return }
+ e.preventDefault()
+ if (!this.cm.isReadOnly())
+ { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0) }
+};
+
+ContentEditableInput.prototype.readOnlyChanged = function (val) {
+ this.div.contentEditable = String(val != "nocursor")
+};
+
+ContentEditableInput.prototype.onContextMenu = function () {};
+ContentEditableInput.prototype.resetPosition = function () {};
+
+ContentEditableInput.prototype.needsContentAttribute = true
+
+function posToDOM(cm, pos) {
+ var view = findViewForLine(cm, pos.line)
+ if (!view || view.hidden) { return null }
+ var line = getLine(cm.doc, pos.line)
+ var info = mapFromLineView(view, line, pos.line)
+
+ var order = getOrder(line, cm.doc.direction), side = "left"
+ if (order) {
+ var partPos = getBidiPartAt(order, pos.ch)
+ side = partPos % 2 ? "right" : "left"
+ }
+ var result = nodeAndOffsetInLineMap(info.map, pos.ch, side)
+ result.offset = result.collapse == "right" ? result.end : result.start
+ return result
+}
+
+function isInGutter(node) {
+ for (var scan = node; scan; scan = scan.parentNode)
+ { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }
+ return false
+}
+
+function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }
+
+function domTextBetween(cm, from, to, fromLine, toLine) {
+ var text = "", closing = false, lineSep = cm.doc.lineSeparator()
+ function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
+ function close() {
+ if (closing) {
+ text += lineSep
+ closing = false
+ }
+ }
+ function addText(str) {
+ if (str) {
+ close()
+ text += str
+ }
+ }
+ function walk(node) {
+ if (node.nodeType == 1) {
+ var cmText = node.getAttribute("cm-text")
+ if (cmText != null) {
+ addText(cmText || node.textContent.replace(/\u200b/g, ""))
+ return
+ }
+ var markerID = node.getAttribute("cm-marker"), range
+ if (markerID) {
+ var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID))
+ if (found.length && (range = found[0].find()))
+ { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)) }
+ return
+ }
+ if (node.getAttribute("contenteditable") == "false") { return }
+ var isBlock = /^(pre|div|p)$/i.test(node.nodeName)
+ if (isBlock) { close() }
+ for (var i = 0; i < node.childNodes.length; i++)
+ { walk(node.childNodes[i]) }
+ if (isBlock) { closing = true }
+ } else if (node.nodeType == 3) {
+ addText(node.nodeValue)
+ }
+ }
+ for (;;) {
+ walk(from)
+ if (from == to) { break }
+ from = from.nextSibling
+ }
+ return text
+}
+
+function domToPos(cm, node, offset) {
+ var lineNode
+ if (node == cm.display.lineDiv) {
+ lineNode = cm.display.lineDiv.childNodes[offset]
+ if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }
+ node = null; offset = 0
+ } else {
+ for (lineNode = node;; lineNode = lineNode.parentNode) {
+ if (!lineNode || lineNode == cm.display.lineDiv) { return null }
+ if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }
+ }
+ }
+ for (var i = 0; i < cm.display.view.length; i++) {
+ var lineView = cm.display.view[i]
+ if (lineView.node == lineNode)
+ { return locateNodeInLineView(lineView, node, offset) }
+ }
+}
+
+function locateNodeInLineView(lineView, node, offset) {
+ var wrapper = lineView.text.firstChild, bad = false
+ if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }
+ if (node == wrapper) {
+ bad = true
+ node = wrapper.childNodes[offset]
+ offset = 0
+ if (!node) {
+ var line = lineView.rest ? lst(lineView.rest) : lineView.line
+ return badPos(Pos(lineNo(line), line.text.length), bad)
+ }
+ }
+
+ var textNode = node.nodeType == 3 ? node : null, topNode = node
+ if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
+ textNode = node.firstChild
+ if (offset) { offset = textNode.nodeValue.length }
+ }
+ while (topNode.parentNode != wrapper) { topNode = topNode.parentNode }
+ var measure = lineView.measure, maps = measure.maps
+
+ function find(textNode, topNode, offset) {
+ for (var i = -1; i < (maps ? maps.length : 0); i++) {
+ var map = i < 0 ? measure.map : maps[i]
+ for (var j = 0; j < map.length; j += 3) {
+ var curNode = map[j + 2]
+ if (curNode == textNode || curNode == topNode) {
+ var line = lineNo(i < 0 ? lineView.line : lineView.rest[i])
+ var ch = map[j] + offset
+ if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)] }
+ return Pos(line, ch)
+ }
+ }
+ }
+ }
+ var found = find(textNode, topNode, offset)
+ if (found) { return badPos(found, bad) }
+
+ // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
+ for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
+ found = find(after, after.firstChild, 0)
+ if (found)
+ { return badPos(Pos(found.line, found.ch - dist), bad) }
+ else
+ { dist += after.textContent.length }
+ }
+ for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
+ found = find(before, before.firstChild, -1)
+ if (found)
+ { return badPos(Pos(found.line, found.ch + dist$1), bad) }
+ else
+ { dist$1 += before.textContent.length }
+ }
+}
+
+// TEXTAREA INPUT STYLE
+
+var TextareaInput = function(cm) {
+ this.cm = cm
+ // See input.poll and input.reset
+ this.prevInput = ""
+
+ // Flag that indicates whether we expect input to appear real soon
+ // now (after some event like 'keypress' or 'input') and are
+ // polling intensively.
+ this.pollingFast = false
+ // Self-resetting timeout for the poller
+ this.polling = new Delayed()
+ // Tracks when input.reset has punted to just putting a short
+ // string into the textarea instead of the full selection.
+ this.inaccurateSelection = false
+ // Used to work around IE issue with selection being forgotten when focus moves away from textarea
+ this.hasSelection = false
+ this.composing = null
+};
+
+TextareaInput.prototype.init = function (display) {
+ var this$1 = this;
+
+ var input = this, cm = this.cm
+
+ // Wraps and hides input textarea
+ var div = this.wrapper = hiddenTextarea()
+ // The semihidden textarea that is focused when the editor is
+ // focused, and receives input.
+ var te = this.textarea = div.firstChild
+ display.wrapper.insertBefore(div, display.wrapper.firstChild)
+
+ // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
+ if (ios) { te.style.width = "0px" }
+
+ on(te, "input", function () {
+ if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null }
+ input.poll()
+ })
+
+ on(te, "paste", function (e) {
+ if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+
+ cm.state.pasteIncoming = true
+ input.fastPoll()
+ })
+
+ function prepareCopyCut(e) {
+ if (signalDOMEvent(cm, e)) { return }
+ if (cm.somethingSelected()) {
+ setLastCopied({lineWise: false, text: cm.getSelections()})
+ if (input.inaccurateSelection) {
+ input.prevInput = ""
+ input.inaccurateSelection = false
+ te.value = lastCopied.text.join("\n")
+ selectInput(te)
+ }
+ } else if (!cm.options.lineWiseCopyCut) {
+ return
+ } else {
+ var ranges = copyableRanges(cm)
+ setLastCopied({lineWise: true, text: ranges.text})
+ if (e.type == "cut") {
+ cm.setSelections(ranges.ranges, null, sel_dontScroll)
+ } else {
+ input.prevInput = ""
+ te.value = ranges.text.join("\n")
+ selectInput(te)
+ }
+ }
+ if (e.type == "cut") { cm.state.cutIncoming = true }
+ }
+ on(te, "cut", prepareCopyCut)
+ on(te, "copy", prepareCopyCut)
+
+ on(display.scroller, "paste", function (e) {
+ if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }
+ cm.state.pasteIncoming = true
+ input.focus()
+ })
+
+ // Prevent normal selection in the editor (we handle our own)
+ on(display.lineSpace, "selectstart", function (e) {
+ if (!eventInWidget(display, e)) { e_preventDefault(e) }
+ })
+
+ on(te, "compositionstart", function () {
+ var start = cm.getCursor("from")
+ if (input.composing) { input.composing.range.clear() }
+ input.composing = {
+ start: start,
+ range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
+ }
+ })
+ on(te, "compositionend", function () {
+ if (input.composing) {
+ input.poll()
+ input.composing.range.clear()
+ input.composing = null
+ }
+ })
+};
+
+TextareaInput.prototype.prepareSelection = function () {
+ // Redraw the selection and/or cursor
+ var cm = this.cm, display = cm.display, doc = cm.doc
+ var result = prepareSelection(cm)
+
+ // Move the hidden textarea near the cursor to prevent scrolling artifacts
+ if (cm.options.moveInputWithCursor) {
+ var headPos = cursorCoords(cm, doc.sel.primary().head, "div")
+ var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect()
+ result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
+ headPos.top + lineOff.top - wrapOff.top))
+ result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
+ headPos.left + lineOff.left - wrapOff.left))
+ }
+
+ return result
+};
+
+TextareaInput.prototype.showSelection = function (drawn) {
+ var cm = this.cm, display = cm.display
+ removeChildrenAndAdd(display.cursorDiv, drawn.cursors)
+ removeChildrenAndAdd(display.selectionDiv, drawn.selection)
+ if (drawn.teTop != null) {
+ this.wrapper.style.top = drawn.teTop + "px"
+ this.wrapper.style.left = drawn.teLeft + "px"
+ }
+};
+
+// Reset the input to correspond to the selection (or to be empty,
+// when not typing and nothing is selected)
+TextareaInput.prototype.reset = function (typing) {
+ if (this.contextMenuPending) { return }
+ var minimal, selected, cm = this.cm, doc = cm.doc
+ if (cm.somethingSelected()) {
+ this.prevInput = ""
+ var range = doc.sel.primary()
+ minimal = hasCopyEvent &&
+ (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000)
+ var content = minimal ? "-" : selected || cm.getSelection()
+ this.textarea.value = content
+ if (cm.state.focused) { selectInput(this.textarea) }
+ if (ie && ie_version >= 9) { this.hasSelection = content }
+ } else if (!typing) {
+ this.prevInput = this.textarea.value = ""
+ if (ie && ie_version >= 9) { this.hasSelection = null }
+ }
+ this.inaccurateSelection = minimal
+};
+
+TextareaInput.prototype.getField = function () { return this.textarea };
+
+TextareaInput.prototype.supportsTouch = function () { return false };
+
+TextareaInput.prototype.focus = function () {
+ if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
+ try { this.textarea.focus() }
+ catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
+ }
+};
+
+TextareaInput.prototype.blur = function () { this.textarea.blur() };
+
+TextareaInput.prototype.resetPosition = function () {
+ this.wrapper.style.top = this.wrapper.style.left = 0
+};
+
+TextareaInput.prototype.receivedFocus = function () { this.slowPoll() };
+
+// Poll for input changes, using the normal rate of polling. This
+// runs as long as the editor is focused.
+TextareaInput.prototype.slowPoll = function () {
+ var this$1 = this;
+
+ if (this.pollingFast) { return }
+ this.polling.set(this.cm.options.pollInterval, function () {
+ this$1.poll()
+ if (this$1.cm.state.focused) { this$1.slowPoll() }
+ })
+};
+
+// When an event has just come in that is likely to add or change
+// something in the input textarea, we poll faster, to ensure that
+// the change appears on the screen quickly.
+TextareaInput.prototype.fastPoll = function () {
+ var missed = false, input = this
+ input.pollingFast = true
+ function p() {
+ var changed = input.poll()
+ if (!changed && !missed) {missed = true; input.polling.set(60, p)}
+ else {input.pollingFast = false; input.slowPoll()}
+ }
+ input.polling.set(20, p)
+};
+
+// Read input from the textarea, and update the document to match.
+// When something is selected, it is present in the textarea, and
+// selected (unless it is huge, in which case a placeholder is
+// used). When nothing is selected, the cursor sits after previously
+// seen text (can be empty), which is stored in prevInput (we must
+// not reset the textarea when typing, because that breaks IME).
+TextareaInput.prototype.poll = function () {
+ var this$1 = this;
+
+ var cm = this.cm, input = this.textarea, prevInput = this.prevInput
+ // Since this is called a *lot*, try to bail out as cheaply as
+ // possible when it is clear that nothing happened. hasSelection
+ // will be the case when there is a lot of text in the textarea,
+ // in which case reading its value would be expensive.
+ if (this.contextMenuPending || !cm.state.focused ||
+ (hasSelection(input) && !prevInput && !this.composing) ||
+ cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
+ { return false }
+
+ var text = input.value
+ // If nothing changed, bail.
+ if (text == prevInput && !cm.somethingSelected()) { return false }
+ // Work around nonsensical selection resetting in IE9/10, and
+ // inexplicable appearance of private area unicode characters on
+ // some key combos in Mac (#2689).
+ if (ie && ie_version >= 9 && this.hasSelection === text ||
+ mac && /[\uf700-\uf7ff]/.test(text)) {
+ cm.display.input.reset()
+ return false
+ }
+
+ if (cm.doc.sel == cm.display.selForContextMenu) {
+ var first = text.charCodeAt(0)
+ if (first == 0x200b && !prevInput) { prevInput = "\u200b" }
+ if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") }
+ }
+ // Find the part of the input that is actually new
+ var same = 0, l = Math.min(prevInput.length, text.length)
+ while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same }
+
+ runInOp(cm, function () {
+ applyTextInput(cm, text.slice(same), prevInput.length - same,
+ null, this$1.composing ? "*compose" : null)
+
+ // Don't leave long text in the textarea, since it makes further polling slow
+ if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = "" }
+ else { this$1.prevInput = text }
+
+ if (this$1.composing) {
+ this$1.composing.range.clear()
+ this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"),
+ {className: "CodeMirror-composing"})
+ }
+ })
+ return true
+};
+
+TextareaInput.prototype.ensurePolled = function () {
+ if (this.pollingFast && this.poll()) { this.pollingFast = false }
+};
+
+TextareaInput.prototype.onKeyPress = function () {
+ if (ie && ie_version >= 9) { this.hasSelection = null }
+ this.fastPoll()
+};
+
+TextareaInput.prototype.onContextMenu = function (e) {
+ var input = this, cm = input.cm, display = cm.display, te = input.textarea
+ var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop
+ if (!pos || presto) { return } // Opera is difficult.
+
+ // Reset the current text selection only if the click is done outside of the selection
+ // and 'resetSelectionOnContextMenu' option is true.
+ var reset = cm.options.resetSelectionOnContextMenu
+ if (reset && cm.doc.sel.contains(pos) == -1)
+ { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll) }
+
+ var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText
+ input.wrapper.style.cssText = "position: absolute"
+ var wrapperBox = input.wrapper.getBoundingClientRect()
+ te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"
+ var oldScrollY
+ if (webkit) { oldScrollY = window.scrollY } // Work around Chrome issue (#2712)
+ display.input.focus()
+ if (webkit) { window.scrollTo(null, oldScrollY) }
+ display.input.reset()
+ // Adds "Select all" to context menu in FF
+ if (!cm.somethingSelected()) { te.value = input.prevInput = " " }
+ input.contextMenuPending = true
+ display.selForContextMenu = cm.doc.sel
+ clearTimeout(display.detectingSelectAll)
+
+ // Select-all will be greyed out if there's nothing to select, so
+ // this adds a zero-width space so that we can later check whether
+ // it got selected.
+ function prepareSelectAllHack() {
+ if (te.selectionStart != null) {
+ var selected = cm.somethingSelected()
+ var extval = "\u200b" + (selected ? te.value : "")
+ te.value = "\u21da" // Used to catch context-menu undo
+ te.value = extval
+ input.prevInput = selected ? "" : "\u200b"
+ te.selectionStart = 1; te.selectionEnd = extval.length
+ // Re-set this, in case some other handler touched the
+ // selection in the meantime.
+ display.selForContextMenu = cm.doc.sel
+ }
+ }
+ function rehide() {
+ input.contextMenuPending = false
+ input.wrapper.style.cssText = oldWrapperCSS
+ te.style.cssText = oldCSS
+ if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos) }
+
+ // Try to detect the user choosing select-all
+ if (te.selectionStart != null) {
+ if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack() }
+ var i = 0, poll = function () {
+ if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
+ te.selectionEnd > 0 && input.prevInput == "\u200b") {
+ operation(cm, selectAll)(cm)
+ } else if (i++ < 10) {
+ display.detectingSelectAll = setTimeout(poll, 500)
+ } else {
+ display.selForContextMenu = null
+ display.input.reset()
+ }
+ }
+ display.detectingSelectAll = setTimeout(poll, 200)
+ }
+ }
+
+ if (ie && ie_version >= 9) { prepareSelectAllHack() }
+ if (captureRightClick) {
+ e_stop(e)
+ var mouseup = function () {
+ off(window, "mouseup", mouseup)
+ setTimeout(rehide, 20)
+ }
+ on(window, "mouseup", mouseup)
+ } else {
+ setTimeout(rehide, 50)
+ }
+};
+
+TextareaInput.prototype.readOnlyChanged = function (val) {
+ if (!val) { this.reset() }
+};
+
+TextareaInput.prototype.setUneditable = function () {};
+
+TextareaInput.prototype.needsContentAttribute = false
+
+function fromTextArea(textarea, options) {
+ options = options ? copyObj(options) : {}
+ options.value = textarea.value
+ if (!options.tabindex && textarea.tabIndex)
+ { options.tabindex = textarea.tabIndex }
+ if (!options.placeholder && textarea.placeholder)
+ { options.placeholder = textarea.placeholder }
+ // Set autofocus to true if this textarea is focused, or if it has
+ // autofocus and no other element is focused.
+ if (options.autofocus == null) {
+ var hasFocus = activeElt()
+ options.autofocus = hasFocus == textarea ||
+ textarea.getAttribute("autofocus") != null && hasFocus == document.body
+ }
+
+ function save() {textarea.value = cm.getValue()}
+
+ var realSubmit
+ if (textarea.form) {
+ on(textarea.form, "submit", save)
+ // Deplorable hack to make the submit method do the right thing.
+ if (!options.leaveSubmitMethodAlone) {
+ var form = textarea.form
+ realSubmit = form.submit
+ try {
+ var wrappedSubmit = form.submit = function () {
+ save()
+ form.submit = realSubmit
+ form.submit()
+ form.submit = wrappedSubmit
+ }
+ } catch(e) {}
+ }
+ }
+
+ options.finishInit = function (cm) {
+ cm.save = save
+ cm.getTextArea = function () { return textarea; }
+ cm.toTextArea = function () {
+ cm.toTextArea = isNaN // Prevent this from being ran twice
+ save()
+ textarea.parentNode.removeChild(cm.getWrapperElement())
+ textarea.style.display = ""
+ if (textarea.form) {
+ off(textarea.form, "submit", save)
+ if (typeof textarea.form.submit == "function")
+ { textarea.form.submit = realSubmit }
+ }
+ }
+ }
+
+ textarea.style.display = "none"
+ var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },
+ options)
+ return cm
+}
+
+function addLegacyProps(CodeMirror) {
+ CodeMirror.off = off
+ CodeMirror.on = on
+ CodeMirror.wheelEventPixels = wheelEventPixels
+ CodeMirror.Doc = Doc
+ CodeMirror.splitLines = splitLinesAuto
+ CodeMirror.countColumn = countColumn
+ CodeMirror.findColumn = findColumn
+ CodeMirror.isWordChar = isWordCharBasic
+ CodeMirror.Pass = Pass
+ CodeMirror.signal = signal
+ CodeMirror.Line = Line
+ CodeMirror.changeEnd = changeEnd
+ CodeMirror.scrollbarModel = scrollbarModel
+ CodeMirror.Pos = Pos
+ CodeMirror.cmpPos = cmp
+ CodeMirror.modes = modes
+ CodeMirror.mimeModes = mimeModes
+ CodeMirror.resolveMode = resolveMode
+ CodeMirror.getMode = getMode
+ CodeMirror.modeExtensions = modeExtensions
+ CodeMirror.extendMode = extendMode
+ CodeMirror.copyState = copyState
+ CodeMirror.startState = startState
+ CodeMirror.innerMode = innerMode
+ CodeMirror.commands = commands
+ CodeMirror.keyMap = keyMap
+ CodeMirror.keyName = keyName
+ CodeMirror.isModifierKey = isModifierKey
+ CodeMirror.lookupKey = lookupKey
+ CodeMirror.normalizeKeyMap = normalizeKeyMap
+ CodeMirror.StringStream = StringStream
+ CodeMirror.SharedTextMarker = SharedTextMarker
+ CodeMirror.TextMarker = TextMarker
+ CodeMirror.LineWidget = LineWidget
+ CodeMirror.e_preventDefault = e_preventDefault
+ CodeMirror.e_stopPropagation = e_stopPropagation
+ CodeMirror.e_stop = e_stop
+ CodeMirror.addClass = addClass
+ CodeMirror.contains = contains
+ CodeMirror.rmClass = rmClass
+ CodeMirror.keyNames = keyNames
+}
+
+// EDITOR CONSTRUCTOR
+
+defineOptions(CodeMirror)
+
+addEditorMethods(CodeMirror)
+
+// Set up methods on CodeMirror's prototype to redirect to the editor's document.
+var dontDelegate = "iter insert remove copy getEditor constructor".split(" ")
+for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
+ { CodeMirror.prototype[prop] = (function(method) {
+ return function() {return method.apply(this.doc, arguments)}
+ })(Doc.prototype[prop]) } }
+
+eventMixin(Doc)
+
+// INPUT HANDLING
+
+CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}
+
+// MODE DEFINITION AND QUERYING
+
+// Extra arguments are stored as the mode's dependencies, which is
+// used by (legacy) mechanisms like loadmode.js to automatically
+// load a mode. (Preferred mechanism is the require/define calls.)
+CodeMirror.defineMode = function(name/*, mode, …*/) {
+ if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name }
+ defineMode.apply(this, arguments)
+}
+
+CodeMirror.defineMIME = defineMIME
+
+// Minimal default mode.
+CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); })
+CodeMirror.defineMIME("text/plain", "null")
+
+// EXTENSIONS
+
+CodeMirror.defineExtension = function (name, func) {
+ CodeMirror.prototype[name] = func
+}
+CodeMirror.defineDocExtension = function (name, func) {
+ Doc.prototype[name] = func
+}
+
+CodeMirror.fromTextArea = fromTextArea
+
+addLegacyProps(CodeMirror)
+
+CodeMirror.version = "5.25.2"
+
+return CodeMirror;
+
+}))); \ No newline at end of file
diff --git a/docs/demo/third_party/codemirror/javascript.js b/docs/demo/third_party/codemirror/javascript.js
new file mode 100644
index 00000000..0a46dc77
--- /dev/null
+++ b/docs/demo/third_party/codemirror/javascript.js
@@ -0,0 +1,847 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("javascript", function(config, parserConfig) {
+ var indentUnit = config.indentUnit;
+ var statementIndent = parserConfig.statementIndent;
+ var jsonldMode = parserConfig.jsonld;
+ var jsonMode = parserConfig.json || jsonldMode;
+ var isTS = parserConfig.typescript;
+ var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/;
+
+ // Tokenizer
+
+ var keywords = function(){
+ function kw(type) {return {type: type, style: "keyword"};}
+ var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c");
+ var operator = kw("operator"), atom = {type: "atom", style: "atom"};
+
+ var jsKeywords = {
+ "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
+ "return": C, "break": C, "continue": C, "new": kw("new"), "delete": C, "void": C, "throw": C, "debugger": C,
+ "var": kw("var"), "const": kw("var"), "let": kw("var"),
+ "function": kw("function"), "catch": kw("catch"),
+ "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
+ "in": operator, "typeof": operator, "instanceof": operator,
+ "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom,
+ "this": kw("this"), "class": kw("class"), "super": kw("atom"),
+ "yield": C, "export": kw("export"), "import": kw("import"), "extends": C,
+ "await": C
+ };
+
+ // Extend the 'normal' keywords with the TypeScript language extensions
+ if (isTS) {
+ var type = {type: "variable", style: "type"};
+ var tsKeywords = {
+ // object-like things
+ "interface": kw("class"),
+ "implements": C,
+ "namespace": C,
+ "module": kw("module"),
+ "enum": kw("module"),
+
+ // scope modifiers
+ "public": kw("modifier"),
+ "private": kw("modifier"),
+ "protected": kw("modifier"),
+ "abstract": kw("modifier"),
+ "readonly": kw("modifier"),
+
+ // types
+ "string": type, "number": type, "boolean": type, "any": type
+ };
+
+ for (var attr in tsKeywords) {
+ jsKeywords[attr] = tsKeywords[attr];
+ }
+ }
+
+ return jsKeywords;
+ }();
+
+ var isOperatorChar = /[+\-*&%=<>!?|~^@]/;
+ var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;
+
+ function readRegexp(stream) {
+ var escaped = false, next, inSet = false;
+ while ((next = stream.next()) != null) {
+ if (!escaped) {
+ if (next == "/" && !inSet) return;
+ if (next == "[") inSet = true;
+ else if (inSet && next == "]") inSet = false;
+ }
+ escaped = !escaped && next == "\\";
+ }
+ }
+
+ // Used as scratch variables to communicate multiple values without
+ // consing up tons of objects.
+ var type, content;
+ function ret(tp, style, cont) {
+ type = tp; content = cont;
+ return style;
+ }
+ function tokenBase(stream, state) {
+ var ch = stream.next();
+ if (ch == '"' || ch == "'") {
+ state.tokenize = tokenString(ch);
+ return state.tokenize(stream, state);
+ } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) {
+ return ret("number", "number");
+ } else if (ch == "." && stream.match("..")) {
+ return ret("spread", "meta");
+ } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
+ return ret(ch);
+ } else if (ch == "=" && stream.eat(">")) {
+ return ret("=>", "operator");
+ } else if (ch == "0" && stream.eat(/x/i)) {
+ stream.eatWhile(/[\da-f]/i);
+ return ret("number", "number");
+ } else if (ch == "0" && stream.eat(/o/i)) {
+ stream.eatWhile(/[0-7]/i);
+ return ret("number", "number");
+ } else if (ch == "0" && stream.eat(/b/i)) {
+ stream.eatWhile(/[01]/i);
+ return ret("number", "number");
+ } else if (/\d/.test(ch)) {
+ stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/);
+ return ret("number", "number");
+ } else if (ch == "/") {
+ if (stream.eat("*")) {
+ state.tokenize = tokenComment;
+ return tokenComment(stream, state);
+ } else if (stream.eat("/")) {
+ stream.skipToEnd();
+ return ret("comment", "comment");
+ } else if (expressionAllowed(stream, state, 1)) {
+ readRegexp(stream);
+ stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/);
+ return ret("regexp", "string-2");
+ } else {
+ stream.eatWhile(isOperatorChar);
+ return ret("operator", "operator", stream.current());
+ }
+ } else if (ch == "`") {
+ state.tokenize = tokenQuasi;
+ return tokenQuasi(stream, state);
+ } else if (ch == "#") {
+ stream.skipToEnd();
+ return ret("error", "error");
+ } else if (isOperatorChar.test(ch)) {
+ if (ch != ">" || !state.lexical || state.lexical.type != ">")
+ stream.eatWhile(isOperatorChar);
+ return ret("operator", "operator", stream.current());
+ } else if (wordRE.test(ch)) {
+ stream.eatWhile(wordRE);
+ var word = stream.current()
+ if (state.lastType != ".") {
+ if (keywords.propertyIsEnumerable(word)) {
+ var kw = keywords[word]
+ return ret(kw.type, kw.style, word)
+ }
+ if (word == "async" && stream.match(/^\s*[\(\w]/, false))
+ return ret("async", "keyword", word)
+ }
+ return ret("variable", "variable", word)
+ }
+ }
+
+ function tokenString(quote) {
+ return function(stream, state) {
+ var escaped = false, next;
+ if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){
+ state.tokenize = tokenBase;
+ return ret("jsonld-keyword", "meta");
+ }
+ while ((next = stream.next()) != null) {
+ if (next == quote && !escaped) break;
+ escaped = !escaped && next == "\\";
+ }
+ if (!escaped) state.tokenize = tokenBase;
+ return ret("string", "string");
+ };
+ }
+
+ function tokenComment(stream, state) {
+ var maybeEnd = false, ch;
+ while (ch = stream.next()) {
+ if (ch == "/" && maybeEnd) {
+ state.tokenize = tokenBase;
+ break;
+ }
+ maybeEnd = (ch == "*");
+ }
+ return ret("comment", "comment");
+ }
+
+ function tokenQuasi(stream, state) {
+ var escaped = false, next;
+ while ((next = stream.next()) != null) {
+ if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) {
+ state.tokenize = tokenBase;
+ break;
+ }
+ escaped = !escaped && next == "\\";
+ }
+ return ret("quasi", "string-2", stream.current());
+ }
+
+ var brackets = "([{}])";
+ // This is a crude lookahead trick to try and notice that we're
+ // parsing the argument patterns for a fat-arrow function before we
+ // actually hit the arrow token. It only works if the arrow is on
+ // the same line as the arguments and there's no strange noise
+ // (comments) in between. Fallback is to only notice when we hit the
+ // arrow, and not declare the arguments as locals for the arrow
+ // body.
+ function findFatArrow(stream, state) {
+ if (state.fatArrowAt) state.fatArrowAt = null;
+ var arrow = stream.string.indexOf("=>", stream.start);
+ if (arrow < 0) return;
+
+ if (isTS) { // Try to skip TypeScript return type declarations after the arguments
+ var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow))
+ if (m) arrow = m.index
+ }
+
+ var depth = 0, sawSomething = false;
+ for (var pos = arrow - 1; pos >= 0; --pos) {
+ var ch = stream.string.charAt(pos);
+ var bracket = brackets.indexOf(ch);
+ if (bracket >= 0 && bracket < 3) {
+ if (!depth) { ++pos; break; }
+ if (--depth == 0) { if (ch == "(") sawSomething = true; break; }
+ } else if (bracket >= 3 && bracket < 6) {
+ ++depth;
+ } else if (wordRE.test(ch)) {
+ sawSomething = true;
+ } else if (/["'\/]/.test(ch)) {
+ return;
+ } else if (sawSomething && !depth) {
+ ++pos;
+ break;
+ }
+ }
+ if (sawSomething && !depth) state.fatArrowAt = pos;
+ }
+
+ // Parser
+
+ var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true};
+
+ function JSLexical(indented, column, type, align, prev, info) {
+ this.indented = indented;
+ this.column = column;
+ this.type = type;
+ this.prev = prev;
+ this.info = info;
+ if (align != null) this.align = align;
+ }
+
+ function inScope(state, varname) {
+ for (var v = state.localVars; v; v = v.next)
+ if (v.name == varname) return true;
+ for (var cx = state.context; cx; cx = cx.prev) {
+ for (var v = cx.vars; v; v = v.next)
+ if (v.name == varname) return true;
+ }
+ }
+
+ function parseJS(state, style, type, content, stream) {
+ var cc = state.cc;
+ // Communicate our context to the combinators.
+ // (Less wasteful than consing up a hundred closures on every call.)
+ cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;
+
+ if (!state.lexical.hasOwnProperty("align"))
+ state.lexical.align = true;
+
+ while(true) {
+ var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
+ if (combinator(type, content)) {
+ while(cc.length && cc[cc.length - 1].lex)
+ cc.pop()();
+ if (cx.marked) return cx.marked;
+ if (type == "variable" && inScope(state, content)) return "variable-2";
+ return style;
+ }
+ }
+ }
+
+ // Combinator utils
+
+ var cx = {state: null, column: null, marked: null, cc: null};
+ function pass() {
+ for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
+ }
+ function cont() {
+ pass.apply(null, arguments);
+ return true;
+ }
+ function register(varname) {
+ function inList(list) {
+ for (var v = list; v; v = v.next)
+ if (v.name == varname) return true;
+ return false;
+ }
+ var state = cx.state;
+ cx.marked = "def";
+ if (state.context) {
+ if (inList(state.localVars)) return;
+ state.localVars = {name: varname, next: state.localVars};
+ } else {
+ if (inList(state.globalVars)) return;
+ if (parserConfig.globalVars)
+ state.globalVars = {name: varname, next: state.globalVars};
+ }
+ }
+
+ // Combinators
+
+ var defaultVars = {name: "this", next: {name: "arguments"}};
+ function pushcontext() {
+ cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};
+ cx.state.localVars = defaultVars;
+ }
+ function popcontext() {
+ cx.state.localVars = cx.state.context.vars;
+ cx.state.context = cx.state.context.prev;
+ }
+ function pushlex(type, info) {
+ var result = function() {
+ var state = cx.state, indent = state.indented;
+ if (state.lexical.type == "stat") indent = state.lexical.indented;
+ else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev)
+ indent = outer.indented;
+ state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
+ };
+ result.lex = true;
+ return result;
+ }
+ function poplex() {
+ var state = cx.state;
+ if (state.lexical.prev) {
+ if (state.lexical.type == ")")
+ state.indented = state.lexical.indented;
+ state.lexical = state.lexical.prev;
+ }
+ }
+ poplex.lex = true;
+
+ function expect(wanted) {
+ function exp(type) {
+ if (type == wanted) return cont();
+ else if (wanted == ";") return pass();
+ else return cont(exp);
+ };
+ return exp;
+ }
+
+ function statement(type, value) {
+ if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex);
+ if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex);
+ if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
+ if (type == "{") return cont(pushlex("}"), block, poplex);
+ if (type == ";") return cont();
+ if (type == "if") {
+ if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex)
+ cx.state.cc.pop()();
+ return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse);
+ }
+ if (type == "function") return cont(functiondef);
+ if (type == "for") return cont(pushlex("form"), forspec, statement, poplex);
+ if (type == "variable") {
+ if (isTS && value == "type") {
+ cx.marked = "keyword"
+ return cont(typeexpr, expect("operator"), typeexpr, expect(";"));
+ } if (isTS && value == "declare") {
+ cx.marked = "keyword"
+ return cont(statement)
+ } else {
+ return cont(pushlex("stat"), maybelabel);
+ }
+ }
+ if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"),
+ block, poplex, poplex);
+ if (type == "case") return cont(expression, expect(":"));
+ if (type == "default") return cont(expect(":"));
+ if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"),
+ statement, poplex, popcontext);
+ if (type == "class") return cont(pushlex("form"), className, poplex);
+ if (type == "export") return cont(pushlex("stat"), afterExport, poplex);
+ if (type == "import") return cont(pushlex("stat"), afterImport, poplex);
+ if (type == "module") return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex)
+ if (type == "async") return cont(statement)
+ if (value == "@") return cont(expression, statement)
+ return pass(pushlex("stat"), expression, expect(";"), poplex);
+ }
+ function expression(type) {
+ return expressionInner(type, false);
+ }
+ function expressionNoComma(type) {
+ return expressionInner(type, true);
+ }
+ function parenExpr(type) {
+ if (type != "(") return pass()
+ return cont(pushlex(")"), expression, expect(")"), poplex)
+ }
+ function expressionInner(type, noComma) {
+ if (cx.state.fatArrowAt == cx.stream.start) {
+ var body = noComma ? arrowBodyNoComma : arrowBody;
+ if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext);
+ else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext);
+ }
+
+ var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
+ if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
+ if (type == "function") return cont(functiondef, maybeop);
+ if (type == "class") return cont(pushlex("form"), classExpression, poplex);
+ if (type == "keyword c" || type == "async") return cont(noComma ? maybeexpressionNoComma : maybeexpression);
+ if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop);
+ if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression);
+ if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop);
+ if (type == "{") return contCommasep(objprop, "}", null, maybeop);
+ if (type == "quasi") return pass(quasi, maybeop);
+ if (type == "new") return cont(maybeTarget(noComma));
+ return cont();
+ }
+ function maybeexpression(type) {
+ if (type.match(/[;\}\)\],]/)) return pass();
+ return pass(expression);
+ }
+ function maybeexpressionNoComma(type) {
+ if (type.match(/[;\}\)\],]/)) return pass();
+ return pass(expressionNoComma);
+ }
+
+ function maybeoperatorComma(type, value) {
+ if (type == ",") return cont(expression);
+ return maybeoperatorNoComma(type, value, false);
+ }
+ function maybeoperatorNoComma(type, value, noComma) {
+ var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
+ var expr = noComma == false ? expression : expressionNoComma;
+ if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);
+ if (type == "operator") {
+ if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me);
+ if (value == "?") return cont(expression, expect(":"), expr);
+ return cont(expr);
+ }
+ if (type == "quasi") { return pass(quasi, me); }
+ if (type == ";") return;
+ if (type == "(") return contCommasep(expressionNoComma, ")", "call", me);
+ if (type == ".") return cont(property, me);
+ if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me);
+ if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) }
+ if (type == "regexp") {
+ cx.state.lastType = cx.marked = "operator"
+ cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)
+ return cont(expr)
+ }
+ }
+ function quasi(type, value) {
+ if (type != "quasi") return pass();
+ if (value.slice(value.length - 2) != "${") return cont(quasi);
+ return cont(expression, continueQuasi);
+ }
+ function continueQuasi(type) {
+ if (type == "}") {
+ cx.marked = "string-2";
+ cx.state.tokenize = tokenQuasi;
+ return cont(quasi);
+ }
+ }
+ function arrowBody(type) {
+ findFatArrow(cx.stream, cx.state);
+ return pass(type == "{" ? statement : expression);
+ }
+ function arrowBodyNoComma(type) {
+ findFatArrow(cx.stream, cx.state);
+ return pass(type == "{" ? statement : expressionNoComma);
+ }
+ function maybeTarget(noComma) {
+ return function(type) {
+ if (type == ".") return cont(noComma ? targetNoComma : target);
+ else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)
+ else return pass(noComma ? expressionNoComma : expression);
+ };
+ }
+ function target(_, value) {
+ if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); }
+ }
+ function targetNoComma(_, value) {
+ if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); }
+ }
+ function maybelabel(type) {
+ if (type == ":") return cont(poplex, statement);
+ return pass(maybeoperatorComma, expect(";"), poplex);
+ }
+ function property(type) {
+ if (type == "variable") {cx.marked = "property"; return cont();}
+ }
+ function objprop(type, value) {
+ if (type == "async") {
+ cx.marked = "property";
+ return cont(objprop);
+ } else if (type == "variable" || cx.style == "keyword") {
+ cx.marked = "property";
+ if (value == "get" || value == "set") return cont(getterSetter);
+ var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params
+ if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false)))
+ cx.state.fatArrowAt = cx.stream.pos + m[0].length
+ return cont(afterprop);
+ } else if (type == "number" || type == "string") {
+ cx.marked = jsonldMode ? "property" : (cx.style + " property");
+ return cont(afterprop);
+ } else if (type == "jsonld-keyword") {
+ return cont(afterprop);
+ } else if (type == "modifier") {
+ return cont(objprop)
+ } else if (type == "[") {
+ return cont(expression, expect("]"), afterprop);
+ } else if (type == "spread") {
+ return cont(expression, afterprop);
+ } else if (type == ":") {
+ return pass(afterprop)
+ }
+ }
+ function getterSetter(type) {
+ if (type != "variable") return pass(afterprop);
+ cx.marked = "property";
+ return cont(functiondef);
+ }
+ function afterprop(type) {
+ if (type == ":") return cont(expressionNoComma);
+ if (type == "(") return pass(functiondef);
+ }
+ function commasep(what, end, sep) {
+ function proceed(type, value) {
+ if (sep ? sep.indexOf(type) > -1 : type == ",") {
+ var lex = cx.state.lexical;
+ if (lex.info == "call") lex.pos = (lex.pos || 0) + 1;
+ return cont(function(type, value) {
+ if (type == end || value == end) return pass()
+ return pass(what)
+ }, proceed);
+ }
+ if (type == end || value == end) return cont();
+ return cont(expect(end));
+ }
+ return function(type, value) {
+ if (type == end || value == end) return cont();
+ return pass(what, proceed);
+ };
+ }
+ function contCommasep(what, end, info) {
+ for (var i = 3; i < arguments.length; i++)
+ cx.cc.push(arguments[i]);
+ return cont(pushlex(end, info), commasep(what, end), poplex);
+ }
+ function block(type) {
+ if (type == "}") return cont();
+ return pass(statement, block);
+ }
+ function maybetype(type, value) {
+ if (isTS) {
+ if (type == ":") return cont(typeexpr);
+ if (value == "?") return cont(maybetype);
+ }
+ }
+ function typeexpr(type, value) {
+ if (type == "variable") {
+ if (value == "keyof") {
+ cx.marked = "keyword"
+ return cont(typeexpr)
+ } else {
+ cx.marked = "type"
+ return cont(afterType)
+ }
+ }
+ if (type == "string" || type == "number" || type == "atom") return cont(afterType);
+ if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType)
+ if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType)
+ if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType)
+ }
+ function maybeReturnType(type) {
+ if (type == "=>") return cont(typeexpr)
+ }
+ function typeprop(type, value) {
+ if (type == "variable" || cx.style == "keyword") {
+ cx.marked = "property"
+ return cont(typeprop)
+ } else if (value == "?") {
+ return cont(typeprop)
+ } else if (type == ":") {
+ return cont(typeexpr)
+ } else if (type == "[") {
+ return cont(expression, maybetype, expect("]"), typeprop)
+ }
+ }
+ function typearg(type) {
+ if (type == "variable") return cont(typearg)
+ else if (type == ":") return cont(typeexpr)
+ }
+ function afterType(type, value) {
+ if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
+ if (value == "|" || type == ".") return cont(typeexpr)
+ if (type == "[") return cont(expect("]"), afterType)
+ if (value == "extends") return cont(typeexpr)
+ }
+ function maybeTypeArgs(_, value) {
+ if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
+ }
+ function vardef() {
+ return pass(pattern, maybetype, maybeAssign, vardefCont);
+ }
+ function pattern(type, value) {
+ if (type == "modifier") return cont(pattern)
+ if (type == "variable") { register(value); return cont(); }
+ if (type == "spread") return cont(pattern);
+ if (type == "[") return contCommasep(pattern, "]");
+ if (type == "{") return contCommasep(proppattern, "}");
+ }
+ function proppattern(type, value) {
+ if (type == "variable" && !cx.stream.match(/^\s*:/, false)) {
+ register(value);
+ return cont(maybeAssign);
+ }
+ if (type == "variable") cx.marked = "property";
+ if (type == "spread") return cont(pattern);
+ if (type == "}") return pass();
+ return cont(expect(":"), pattern, maybeAssign);
+ }
+ function maybeAssign(_type, value) {
+ if (value == "=") return cont(expressionNoComma);
+ }
+ function vardefCont(type) {
+ if (type == ",") return cont(vardef);
+ }
+ function maybeelse(type, value) {
+ if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex);
+ }
+ function forspec(type) {
+ if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex);
+ }
+ function forspec1(type) {
+ if (type == "var") return cont(vardef, expect(";"), forspec2);
+ if (type == ";") return cont(forspec2);
+ if (type == "variable") return cont(formaybeinof);
+ return pass(expression, expect(";"), forspec2);
+ }
+ function formaybeinof(_type, value) {
+ if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
+ return cont(maybeoperatorComma, forspec2);
+ }
+ function forspec2(type, value) {
+ if (type == ";") return cont(forspec3);
+ if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
+ return pass(expression, expect(";"), forspec3);
+ }
+ function forspec3(type) {
+ if (type != ")") cont(expression);
+ }
+ function functiondef(type, value) {
+ if (value == "*") {cx.marked = "keyword"; return cont(functiondef);}
+ if (type == "variable") {register(value); return cont(functiondef);}
+ if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, maybetype, statement, popcontext);
+ if (isTS && value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, functiondef)
+ }
+ function funarg(type, value) {
+ if (value == "@") cont(expression, funarg)
+ if (type == "spread" || type == "modifier") return cont(funarg);
+ return pass(pattern, maybetype, maybeAssign);
+ }
+ function classExpression(type, value) {
+ // Class expressions may have an optional name.
+ if (type == "variable") return className(type, value);
+ return classNameAfter(type, value);
+ }
+ function className(type, value) {
+ if (type == "variable") {register(value); return cont(classNameAfter);}
+ }
+ function classNameAfter(type, value) {
+ if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, classNameAfter)
+ if (value == "extends" || value == "implements" || (isTS && type == ","))
+ return cont(isTS ? typeexpr : expression, classNameAfter);
+ if (type == "{") return cont(pushlex("}"), classBody, poplex);
+ }
+ function classBody(type, value) {
+ if (type == "modifier" || type == "async" ||
+ (type == "variable" &&
+ (value == "static" || value == "get" || value == "set") &&
+ cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) {
+ cx.marked = "keyword";
+ return cont(classBody);
+ }
+ if (type == "variable" || cx.style == "keyword") {
+ cx.marked = "property";
+ return cont(isTS ? classfield : functiondef, classBody);
+ }
+ if (type == "[")
+ return cont(expression, expect("]"), isTS ? classfield : functiondef, classBody)
+ if (value == "*") {
+ cx.marked = "keyword";
+ return cont(classBody);
+ }
+ if (type == ";") return cont(classBody);
+ if (type == "}") return cont();
+ if (value == "@") return cont(expression, classBody)
+ }
+ function classfield(type, value) {
+ if (value == "?") return cont(classfield)
+ if (type == ":") return cont(typeexpr, maybeAssign)
+ if (value == "=") return cont(expressionNoComma)
+ return pass(functiondef)
+ }
+ function afterExport(type, value) {
+ if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); }
+ if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); }
+ if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";"));
+ return pass(statement);
+ }
+ function exportField(type, value) {
+ if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); }
+ if (type == "variable") return pass(expressionNoComma, exportField);
+ }
+ function afterImport(type) {
+ if (type == "string") return cont();
+ return pass(importSpec, maybeMoreImports, maybeFrom);
+ }
+ function importSpec(type, value) {
+ if (type == "{") return contCommasep(importSpec, "}");
+ if (type == "variable") register(value);
+ if (value == "*") cx.marked = "keyword";
+ return cont(maybeAs);
+ }
+ function maybeMoreImports(type) {
+ if (type == ",") return cont(importSpec, maybeMoreImports)
+ }
+ function maybeAs(_type, value) {
+ if (value == "as") { cx.marked = "keyword"; return cont(importSpec); }
+ }
+ function maybeFrom(_type, value) {
+ if (value == "from") { cx.marked = "keyword"; return cont(expression); }
+ }
+ function arrayLiteral(type) {
+ if (type == "]") return cont();
+ return pass(commasep(expressionNoComma, "]"));
+ }
+
+ function isContinuedStatement(state, textAfter) {
+ return state.lastType == "operator" || state.lastType == "," ||
+ isOperatorChar.test(textAfter.charAt(0)) ||
+ /[,.]/.test(textAfter.charAt(0));
+ }
+
+ function expressionAllowed(stream, state, backUp) {
+ return state.tokenize == tokenBase &&
+ /^(?:operator|sof|keyword [bc]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) ||
+ (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))
+ }
+
+ // Interface
+
+ return {
+ startState: function(basecolumn) {
+ var state = {
+ tokenize: tokenBase,
+ lastType: "sof",
+ cc: [],
+ lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
+ localVars: parserConfig.localVars,
+ context: parserConfig.localVars && {vars: parserConfig.localVars},
+ indented: basecolumn || 0
+ };
+ if (parserConfig.globalVars && typeof parserConfig.globalVars == "object")
+ state.globalVars = parserConfig.globalVars;
+ return state;
+ },
+
+ token: function(stream, state) {
+ if (stream.sol()) {
+ if (!state.lexical.hasOwnProperty("align"))
+ state.lexical.align = false;
+ state.indented = stream.indentation();
+ findFatArrow(stream, state);
+ }
+ if (state.tokenize != tokenComment && stream.eatSpace()) return null;
+ var style = state.tokenize(stream, state);
+ if (type == "comment") return style;
+ state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type;
+ return parseJS(state, style, type, content, stream);
+ },
+
+ indent: function(state, textAfter) {
+ if (state.tokenize == tokenComment) return CodeMirror.Pass;
+ if (state.tokenize != tokenBase) return 0;
+ var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top
+ // Kludge to prevent 'maybelse' from blocking lexical scope pops
+ if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {
+ var c = state.cc[i];
+ if (c == poplex) lexical = lexical.prev;
+ else if (c != maybeelse) break;
+ }
+ while ((lexical.type == "stat" || lexical.type == "form") &&
+ (firstChar == "}" || ((top = state.cc[state.cc.length - 1]) &&
+ (top == maybeoperatorComma || top == maybeoperatorNoComma) &&
+ !/^[,\.=+\-*:?[\(]/.test(textAfter))))
+ lexical = lexical.prev;
+ if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat")
+ lexical = lexical.prev;
+ var type = lexical.type, closing = firstChar == type;
+
+ if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0);
+ else if (type == "form" && firstChar == "{") return lexical.indented;
+ else if (type == "form") return lexical.indented + indentUnit;
+ else if (type == "stat")
+ return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);
+ else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false)
+ return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
+ else if (lexical.align) return lexical.column + (closing ? 0 : 1);
+ else return lexical.indented + (closing ? 0 : indentUnit);
+ },
+
+ electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
+ blockCommentStart: jsonMode ? null : "/*",
+ blockCommentEnd: jsonMode ? null : "*/",
+ lineComment: jsonMode ? null : "//",
+ fold: "brace",
+ closeBrackets: "()[]{}''\"\"``",
+
+ helperType: jsonMode ? "json" : "javascript",
+ jsonldMode: jsonldMode,
+ jsonMode: jsonMode,
+
+ expressionAllowed: expressionAllowed,
+
+ skipExpression: function(state) {
+ var top = state.cc[state.cc.length - 1]
+ if (top == expression || top == expressionNoComma) state.cc.pop()
+ }
+ };
+});
+
+CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/);
+
+CodeMirror.defineMIME("text/javascript", "javascript");
+CodeMirror.defineMIME("text/ecmascript", "javascript");
+CodeMirror.defineMIME("application/javascript", "javascript");
+CodeMirror.defineMIME("application/x-javascript", "javascript");
+CodeMirror.defineMIME("application/ecmascript", "javascript");
+CodeMirror.defineMIME("application/json", {name: "javascript", json: true});
+CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true});
+CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true});
+CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true });
+CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true });
+
+});
diff --git a/docs/demo/third_party/codemirror/simple-mode.js b/docs/demo/third_party/codemirror/simple-mode.js
new file mode 100644
index 00000000..df663365
--- /dev/null
+++ b/docs/demo/third_party/codemirror/simple-mode.js
@@ -0,0 +1,213 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ CodeMirror.defineSimpleMode = function(name, states) {
+ CodeMirror.defineMode(name, function(config) {
+ return CodeMirror.simpleMode(config, states);
+ });
+ };
+
+ CodeMirror.simpleMode = function(config, states) {
+ ensureState(states, "start");
+ var states_ = {}, meta = states.meta || {}, hasIndentation = false;
+ for (var state in states) if (state != meta && states.hasOwnProperty(state)) {
+ var list = states_[state] = [], orig = states[state];
+ for (var i = 0; i < orig.length; i++) {
+ var data = orig[i];
+ list.push(new Rule(data, states));
+ if (data.indent || data.dedent) hasIndentation = true;
+ }
+ }
+ var mode = {
+ startState: function() {
+ return {state: "start", pending: null,
+ local: null, localState: null,
+ indent: hasIndentation ? [] : null};
+ },
+ copyState: function(state) {
+ var s = {state: state.state, pending: state.pending,
+ local: state.local, localState: null,
+ indent: state.indent && state.indent.slice(0)};
+ if (state.localState)
+ s.localState = CodeMirror.copyState(state.local.mode, state.localState);
+ if (state.stack)
+ s.stack = state.stack.slice(0);
+ for (var pers = state.persistentStates; pers; pers = pers.next)
+ s.persistentStates = {mode: pers.mode,
+ spec: pers.spec,
+ state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state),
+ next: s.persistentStates};
+ return s;
+ },
+ token: tokenFunction(states_, config),
+ innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; },
+ indent: indentFunction(states_, meta)
+ };
+ if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop))
+ mode[prop] = meta[prop];
+ return mode;
+ };
+
+ function ensureState(states, name) {
+ if (!states.hasOwnProperty(name))
+ throw new Error("Undefined state " + name + " in simple mode");
+ }
+
+ function toRegex(val, caret) {
+ if (!val) return /(?:)/;
+ var flags = "";
+ if (val instanceof RegExp) {
+ if (val.ignoreCase) flags = "i";
+ val = val.source;
+ } else {
+ val = String(val);
+ }
+ return new RegExp((caret === false ? "" : "^") + "(?:" + val + ")", flags);
+ }
+
+ function asToken(val) {
+ if (!val) return null;
+ if (typeof val == "string") return val.replace(/\./g, " ");
+ var result = [];
+ for (var i = 0; i < val.length; i++)
+ result.push(val[i] && val[i].replace(/\./g, " "));
+ return result;
+ }
+
+ function Rule(data, states) {
+ if (data.next || data.push) ensureState(states, data.next || data.push);
+ this.regex = toRegex(data.regex);
+ this.token = asToken(data.token);
+ this.data = data;
+ }
+
+ function tokenFunction(states, config) {
+ return function(stream, state) {
+ if (state.pending) {
+ var pend = state.pending.shift();
+ if (state.pending.length == 0) state.pending = null;
+ stream.pos += pend.text.length;
+ return pend.token;
+ }
+
+ if (state.local) {
+ if (state.local.end && stream.match(state.local.end)) {
+ var tok = state.local.endToken || null;
+ state.local = state.localState = null;
+ return tok;
+ } else {
+ var tok = state.local.mode.token(stream, state.localState), m;
+ if (state.local.endScan && (m = state.local.endScan.exec(stream.current())))
+ stream.pos = stream.start + m.index;
+ return tok;
+ }
+ }
+
+ var curState = states[state.state];
+ for (var i = 0; i < curState.length; i++) {
+ var rule = curState[i];
+ var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex);
+ if (matches) {
+ if (rule.data.next) {
+ state.state = rule.data.next;
+ } else if (rule.data.push) {
+ (state.stack || (state.stack = [])).push(state.state);
+ state.state = rule.data.push;
+ } else if (rule.data.pop && state.stack && state.stack.length) {
+ state.state = state.stack.pop();
+ }
+
+ if (rule.data.mode)
+ enterLocalMode(config, state, rule.data.mode, rule.token);
+ if (rule.data.indent)
+ state.indent.push(stream.indentation() + config.indentUnit);
+ if (rule.data.dedent)
+ state.indent.pop();
+ if (matches.length > 2) {
+ state.pending = [];
+ for (var j = 2; j < matches.length; j++)
+ if (matches[j])
+ state.pending.push({text: matches[j], token: rule.token[j - 1]});
+ stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0));
+ return rule.token[0];
+ } else if (rule.token && rule.token.join) {
+ return rule.token[0];
+ } else {
+ return rule.token;
+ }
+ }
+ }
+ stream.next();
+ return null;
+ };
+ }
+
+ function cmp(a, b) {
+ if (a === b) return true;
+ if (!a || typeof a != "object" || !b || typeof b != "object") return false;
+ var props = 0;
+ for (var prop in a) if (a.hasOwnProperty(prop)) {
+ if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false;
+ props++;
+ }
+ for (var prop in b) if (b.hasOwnProperty(prop)) props--;
+ return props == 0;
+ }
+
+ function enterLocalMode(config, state, spec, token) {
+ var pers;
+ if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next)
+ if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p;
+ var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec);
+ var lState = pers ? pers.state : CodeMirror.startState(mode);
+ if (spec.persistent && !pers)
+ state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates};
+
+ state.localState = lState;
+ state.local = {mode: mode,
+ end: spec.end && toRegex(spec.end),
+ endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false),
+ endToken: token && token.join ? token[token.length - 1] : token};
+ }
+
+ function indexOf(val, arr) {
+ for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true;
+ }
+
+ function indentFunction(states, meta) {
+ return function(state, textAfter, line) {
+ if (state.local && state.local.mode.indent)
+ return state.local.mode.indent(state.localState, textAfter, line);
+ if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1)
+ return CodeMirror.Pass;
+
+ var pos = state.indent.length - 1, rules = states[state.state];
+ scan: for (;;) {
+ for (var i = 0; i < rules.length; i++) {
+ var rule = rules[i];
+ if (rule.data.dedent && rule.data.dedentIfLineStart !== false) {
+ var m = rule.regex.exec(textAfter);
+ if (m && m[0]) {
+ pos--;
+ if (rule.next || rule.push) rules = states[rule.next || rule.push];
+ textAfter = textAfter.slice(m[0].length);
+ continue scan;
+ }
+ }
+ }
+ break;
+ }
+ return pos < 0 ? 0 : state.indent[pos];
+ };
+ }
+});
diff --git a/docs/demo/third_party/split/horizontal.png b/docs/demo/third_party/split/horizontal.png
new file mode 100644
index 00000000..cbe7da77
--- /dev/null
+++ b/docs/demo/third_party/split/horizontal.png
Binary files differ
diff --git a/docs/demo/third_party/split/split.min.js b/docs/demo/third_party/split/split.min.js
new file mode 100644
index 00000000..022f808d
--- /dev/null
+++ b/docs/demo/third_party/split/split.min.js
@@ -0,0 +1,5 @@
+/*! Split.js - v1.3.5
+ * Copyright (c) 2017 Nathan Cahill
+ * MIT https://github.com/nathancahill/Split.js/blob/master/LICENSE.txt
+ */
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
diff --git a/docs/demo/third_party/split/vertical.png b/docs/demo/third_party/split/vertical.png
new file mode 100644
index 00000000..0ac8fa1e
--- /dev/null
+++ b/docs/demo/third_party/split/vertical.png
Binary files differ
diff --git a/docs/demo/wasm2wat/demo.js b/docs/demo/wasm2wat/demo.js
new file mode 100644
index 00000000..fe14406b
--- /dev/null
+++ b/docs/demo/wasm2wat/demo.js
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2017 WebAssembly Community Group participants
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var editorEl = document.querySelector('.editor');
+var uploadEl = document.getElementById('upload');
+var selectEl = document.getElementById('select');
+var uploadInputEl = document.getElementById('uploadInput');
+var generateNamesEl = document.getElementById('generateNames');
+var foldExprsEl = document.getElementById('foldExprs');
+var inlineExportEl = document.getElementById('inlineExport');
+var readDebugNamesEl = document.getElementById('readDebugNames');
+
+var options = {mode: 'wast', lineNumbers: true};
+var editor = CodeMirror.fromTextArea(editorEl, options);
+
+var fileBuffer = null;
+
+function compile(contents) {
+ if (!contents) {
+ return;
+ }
+
+ var readDebugNames = readDebugNamesEl.checked;
+ var generateNames = generateNamesEl.checked;
+ var foldExprs = foldExprsEl.checked;
+ var inlineExport = inlineExportEl.checked;
+
+ WabtModule().then(function(wabt) {
+ try {
+ var module = wabt.readWasm(contents, {readDebugNames: readDebugNames});
+ if (generateNames) {
+ module.generateNames();
+ module.applyNames();
+ }
+ var result =
+ module.toText({foldExprs: foldExprs, inlineExport: inlineExport});
+ editor.setValue(result);
+ } catch (e) {
+ editor.setValue(e.toString());
+ } finally {
+ if (module) module.destroy();
+ }
+ });
+}
+
+function onUploadClicked(e) {
+ uploadInput.value = '';
+ // See https://developer.mozilla.com/en-US/docs/Web/API/MouseEvent
+ var event = new MouseEvent('click', {
+ view: window,
+ bubbles: true,
+ cancelable: true,
+ });
+ uploadInput.dispatchEvent(event);
+}
+
+function onUploadedFile(e) {
+ var file = e.target.files[0];
+ var reader = new FileReader();
+ reader.onload = function(e) {
+ fileBuffer = new Uint8Array(e.target.result);
+ compile(fileBuffer);
+ };
+ reader.readAsArrayBuffer(file);
+}
+
+function recompileIfChanged(el) {
+ el.addEventListener('change', function() { compile(fileBuffer); });
+}
+
+function setExample(index) {
+ var contents = examples[index].contents;
+ fileBuffer = contents;
+ compile(contents);
+}
+
+function onSelectChanged(e) {
+ setExample(this.selectedIndex);
+}
+
+uploadEl.addEventListener('click', onUploadClicked);
+uploadInputEl.addEventListener('change', onUploadedFile);
+recompileIfChanged(generateNamesEl);
+recompileIfChanged(foldExprsEl);
+recompileIfChanged(inlineExportEl);
+recompileIfChanged(readDebugNamesEl);
+selectEl.addEventListener('change', onSelectChanged);
+
+for (var i = 0; i < examples.length; ++i) {
+ var example = examples[i];
+ var option = document.createElement('option');
+ option.textContent = example.name;
+ selectEl.appendChild(option);
+}
+selectEl.selectedIndex = 0;
+setExample(selectEl.selectedIndex);
diff --git a/docs/demo/wasm2wat/examples.js b/docs/demo/wasm2wat/examples.js
new file mode 100644
index 00000000..11e2caf3
--- /dev/null
+++ b/docs/demo/wasm2wat/examples.js
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2017 WebAssembly Community Group participants
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var examples = [
+ {
+ name: 'simple',
+ contents: new Uint8Array([
+ 0, 97, 115, 109, 1, 0, 0, 0, 1, 7, 1, 96, 2, 127, 127,
+ 1, 127, 3, 2, 1, 0, 7, 10, 1, 6, 97, 100, 100, 84, 119,
+ 111, 0, 0, 10, 9, 1, 7, 0, 32, 0, 32, 1, 106, 11, 0,
+ 25, 4, 110, 97, 109, 101, 1, 9, 1, 0, 6, 97, 100, 100, 84,
+ 119, 111, 2, 7, 1, 0, 2, 0, 0, 1, 0
+ ]),
+ },
+
+ {
+ name: 'factorial',
+ contents: new Uint8Array([
+ 0, 97, 115, 109, 1, 0, 0, 0, 1, 6, 1, 96, 1, 126, 1, 126,
+ 3, 2, 1, 0, 7, 7, 1, 3, 102, 97, 99, 0, 0, 10, 25, 1,
+ 23, 0, 32, 0, 66, 1, 83, 4, 126, 66, 1, 5, 32, 0, 32, 0,
+ 66, 1, 125, 16, 0, 126, 11, 11, 0, 20, 4, 110, 97, 109, 101, 1,
+ 6, 1, 0, 3, 102, 97, 99, 2, 5, 1, 0, 1, 0, 0
+ ]),
+ },
+
+ {
+ name: 'stuff',
+ contents: new Uint8Array([
+ 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 3, 96, 1, 125,
+ 0, 96, 1, 127, 1, 127, 96, 0, 0, 2, 11, 1, 3, 102,
+ 111, 111, 3, 98, 97, 114, 0, 0, 3, 3, 2, 2, 0, 4,
+ 5, 1, 112, 1, 0, 1, 5, 4, 1, 1, 1, 1, 7, 9,
+ 1, 5, 102, 117, 110, 99, 49, 0, 1, 8, 1, 1, 10, 10,
+ 2, 2, 0, 11, 5, 0, 65, 42, 26, 11, 11, 8, 1, 0,
+ 65, 0, 11, 2, 104, 105, 0, 44, 4, 110, 97, 109, 101, 1,
+ 24, 3, 0, 7, 105, 109, 112, 111, 114, 116, 48, 1, 5, 102,
+ 117, 110, 99, 48, 2, 5, 102, 117, 110, 99, 49, 2, 11, 3,
+ 0, 1, 0, 0, 1, 0, 2, 1, 0, 0
+ ]),
+ },
+];
diff --git a/docs/demo/wasm2wat/index.html b/docs/demo/wasm2wat/index.html
new file mode 100644
index 00000000..11b06372
--- /dev/null
+++ b/docs/demo/wasm2wat/index.html
@@ -0,0 +1,73 @@
+<!--
+ Copyright 2017 WebAssembly Community Group participants
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+ <title>wasm2wat demo</title>
+ <link href="../third_party/codemirror/codemirror.css" rel="stylesheet">
+ <link href="../custom.css" rel="stylesheet">
+</head>
+<body>
+ <header>
+ <h1>wasm2wat demo</h1>
+ <p>WebAssembly has a
+ <a href="https://webassembly.github.io/spec/core/text/">text format</a>
+ and a
+ <a href="https://webassembly.github.io/spec/core/binary/">binary format</a>.
+ This demo converts from the binary format to the text format.
+ </p>
+ <p>
+ Upload a WebAssembly binary file, and the text format will be displayed.
+ </p>
+ <div>
+
+ <p>
+ </p>
+ </div>
+ </header>
+ <main>
+ <div class="toolbar">
+ <input type="checkbox" id="generateNames" checked>
+ <label for="generateNames">Generate Names</label>
+
+ <input type="checkbox" id="foldExprs" checked>
+ <label for="foldExprs">Fold Expressions</label>
+
+ <input type="checkbox" id="inlineExport" checked>
+ <label for="inlineExport">Inline Export</label>
+
+ <input type="checkbox" id="readDebugNames" checked>
+ <label for="readDebugNames">Read Debug Names</label>
+ <div class="right">
+ <input type="file" id="uploadInput" class="hidden"></a>
+ <label>example:</label>
+ <select id="select" class="form-select"></select>
+ <button class="btn" type="button" id="upload">Upload</button>
+ </div>
+ </div>
+ <textarea class="editor" autofocus autocomplete="off" autocorrect="off"
+ autocapitalize="off" spellcheck="false" hidden></textarea>
+ </main>
+ <script src="../third_party/codemirror/codemirror.js"></script>
+ <script src="../third_party/codemirror/simple-mode.js"></script>
+ <script src="../wast-mode.js"></script>
+ <script src="../libwabt.js"></script>
+ <script src="examples.js"></script>
+ <script src="demo.js"></script>
+</body>
+</html>
diff --git a/docs/demo/wast-mode.js b/docs/demo/wast-mode.js
new file mode 100644
index 00000000..9c882922
--- /dev/null
+++ b/docs/demo/wast-mode.js
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2017 WebAssembly Community Group participants
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var mode = CodeMirror.defineSimpleMode('wast', {
+ start: [
+ {regex: /[+\-]?(?:nan(?::0x[0-9a-fA-F]+)?|infinity|inf|0x[0-9a-fA-F]+\.?[0-9a-fA-F]*p[+\/-]?\d+|\d+(?:\.\d*)?[eE][+\-]?\d*|\d+\.\d*|0x[0-9a-fA-F]+|\d+)/, token: "number"},
+ {regex: /anyfunc|mut|nop|block|if|then|else|loop|br|br_if|br_table|call|call_indirect|drop|end|return|get_local|set_local|tee_local|get_global|set_global|i32\.load|i64\.load|f32\.load|f64\.load|i32\.store|i64\.store|f32\.store|f64\.store|i32\.load8_s|i64\.load8_s|i32\.load8_u|i64\.load8_u|i32\.load16_s|i64\.load16_s|i32\.load16_u|i64\.load16_u|i64\.load32_s|i64\.load32_u|i32\.store8|i64\.store8|i32\.store16|i64\.store16|i32\.const|i64\.const|f32\.const|f64\.const|i32\.eqz|i64\.eqz|i32\.clz|i64\.clz|i32\.ctz|i64\.ctz|i32\.popcnt|i64\.popcnt|f32\.neg|f64\.neg|f32\.abs|f64\.abs|f32\.sqrt|f64\.sqrt|f32\.ceil|f64\.ceil|f32\.floor|f64\.floor|f32\.trunc|f64\.trunc|f32\.nearest|f64\.nearest|i32\.add|i64\.add|i32\.sub|i64\.sub|i32\.mul|i64\.mul|i32\.div_s|i64\.div_s|i32\.div_u|i64\.div_u|i32\.rem_s|i64\.rem_s|i32\.rem_u|i64\.rem_u|i32\.and|i64\.and|i32\.or|i64\.or|i32\.xor|i64\.xor|i32\.shl|i64\.shl|i32\.shr_s|i64\.shr_s|i32\.shr_u|i64\.shr_u|i32\.rotl|i64\.rotl|i32\.rotr|i64\.rotr|f32\.add|f64\.add|f32\.sub|f64\.sub|f32\.mul|f64\.mul|f32\.div|f64\.div|f32\.min|f64\.min|f32\.max|f64\.max|f32\.copysign|f64\.copysign|i32\.eq|i64\.eq|i32\.ne|i64\.ne|i32\.lt_s|i64\.lt_s|i32\.lt_u|i64\.lt_u|i32\.le_s|i64\.le_s|i32\.le_u|i64\.le_u|i32\.gt_s|i64\.gt_s|i32\.gt_u|i64\.gt_u|i32\.ge_s|i64\.ge_s|i32\.ge_u|i64\.ge_u|f32\.eq|f64\.eq|f32\.ne|f64\.ne|f32\.lt|f64\.lt|f32\.le|f64\.le|f32\.gt|f64\.gt|f32\.ge|f64\.ge|i64\.extend_s\/i32|i64\.extend_u\/i32|i32\.wrap\/i64|i32\.trunc_s\/f32|i64\.trunc_s\/f32|i32\.trunc_s\/f64|i64\.trunc_s\/f64|i32\.trunc_u\/f32|i64\.trunc_u\/f32|i32\.trunc_u\/f64|i64\.trunc_u\/f64|f32\.convert_s\/i32|f64\.convert_s\/i32|f32\.convert_s\/i64|f64\.convert_s\/i64|f32\.convert_u\/i32|f64\.convert_u\/i32|f32\.convert_u\/i64|f64\.convert_u\/i64|f64\.promote\/f32|f32\.demote\/f64|f32\.reinterpret\/i32|i32\.reinterpret\/f32|f64\.reinterpret\/i64|i64\.reinterpret\/f64|select|unreachable|current_memory|memory.size|grow_memory|memory.grow|type|func|param|result|local|global|module|table|memory|start|elem|data|offset|import|export|i32|i64|f32|f64/, token: "keyword"},
+ {regex: /\$([a-zA-Z0-9_`\+\-\*\/\\\^~=<>!\?@#$%&|:\.]+)/, token: "variable-2"},
+ {regex: /"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/, token: "string"},
+ {regex: /\(;.*?/, token: "comment", next: "comment"},
+ {regex: /;;.*$/, token: "comment"},
+ {regex: /\(/, indent: true},
+ {regex: /\)/, dedent: true},
+ ],
+
+ comment: [
+ {regex: /.*?;\)/, token: "comment", next: "start"},
+ {regex: /.*/, token: "comment"},
+ ],
+
+ meta: {
+ dontIndentStates: ['comment'],
+ },
+});
diff --git a/docs/demo/wat2wasm/demo.js b/docs/demo/wat2wasm/demo.js
new file mode 100644
index 00000000..8c0729f4
--- /dev/null
+++ b/docs/demo/wat2wasm/demo.js
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2016 WebAssembly Community Group participants
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+Split(["#top-left", "#top-right"]);
+Split(["#bottom-left", "#bottom-right"]);
+
+Split(["#top-row", "#bottom-row"], {
+ direction: 'vertical'
+});
+
+var features = {};
+
+WabtModule().then(function(wabt) {
+
+var FEATURES = [
+ 'exceptions',
+ 'mutable_globals',
+ 'sat_float_to_int',
+ 'sign_extension',
+ 'simd',
+ 'threads',
+ 'multi_value',
+ 'tail_call',
+ 'bulk_memory',
+ 'reference_types',
+];
+
+var kCompileMinMS = 100;
+
+var outputEl = document.getElementById('output');
+var jsLogEl = document.getElementById('js_log');
+var selectEl = document.getElementById('select');
+var downloadEl = document.getElementById('download');
+var downloadLink = document.getElementById('downloadLink');
+var binaryBuffer = null;
+var binaryBlobUrl = null;
+
+for (var feature of FEATURES) {
+ var featureEl = document.getElementById(feature);
+ features[feature] = featureEl.checked;
+ featureEl.addEventListener('change', event => {
+ var feature = event.target.id;
+ features[feature] = event.target.checked;
+ onWatChange();
+ });
+}
+
+var wasmInstance = null;
+
+var wrappedConsole = Object.create(console);
+
+wrappedConsole.log = (...args) => {
+ let line = args.map(String).join('') + '\n';
+ jsLogEl.textContent += line;
+ console.log(...args);
+}
+
+var watEditor = CodeMirror((elt) => {
+ document.getElementById('top-left').appendChild(elt);
+}, {
+ mode: 'wast',
+ lineNumbers: true,
+});
+
+var jsEditor = CodeMirror((elt) => {
+ document.getElementById('bottom-left').appendChild(elt);
+}, {
+ mode: 'javascript',
+ lineNumbers: true,
+});
+
+function debounce(f, wait) {
+ var lastTime = 0;
+ var timeoutId = -1;
+ var wrapped = function() {
+ var time = +new Date();
+ if (time - lastTime < wait) {
+ if (timeoutId == -1)
+ timeoutId = setTimeout(wrapped, (lastTime + wait) - time);
+ return;
+ }
+ if (timeoutId != -1)
+ clearTimeout(timeoutId);
+ timeoutId = -1;
+ lastTime = time;
+ f.apply(null, arguments);
+ };
+ return wrapped;
+}
+
+function compile() {
+ outputEl.textContent = '';
+ var binaryOutput;
+ try {
+ var module = wabt.parseWat('test.wast', watEditor.getValue(), features);
+ module.resolveNames();
+ module.validate(features);
+ var binaryOutput = module.toBinary({log: true, write_debug_names:true});
+ outputEl.textContent = binaryOutput.log;
+ binaryBuffer = binaryOutput.buffer;
+ var blob = new Blob([binaryOutput.buffer]);
+ if (binaryBlobUrl) {
+ URL.revokeObjectURL(binaryBlobUrl);
+ }
+ binaryBlobUrl = URL.createObjectURL(blob);
+ downloadLink.setAttribute('href', binaryBlobUrl);
+ downloadEl.classList.remove('disabled');
+ } catch (e) {
+ outputEl.textContent += e.toString();
+ downloadEl.classList.add('disabled');
+ } finally {
+ if (module) module.destroy();
+ }
+}
+
+function run() {
+ jsLogEl.textContent = '';
+ if (binaryBuffer === null) return;
+ try {
+ let wasm = new WebAssembly.Module(binaryBuffer);
+ let js = jsEditor.getValue();
+ let fn = new Function('wasmModule', 'console', js + '//# sourceURL=demo.js');
+ fn(wasm, wrappedConsole);
+ } catch (e) {
+ jsLogEl.textContent += String(e);
+ }
+}
+
+var onWatChange = debounce(compile, kCompileMinMS);
+var onJsChange = debounce(run, kCompileMinMS);
+
+function setExample(index) {
+ var example = examples[index];
+ watEditor.setValue(example.contents);
+ onWatChange();
+ jsEditor.setValue(example.js);
+ onJsChange();
+}
+
+function onSelectChanged(e) {
+ setExample(this.selectedIndex);
+}
+
+function onDownloadClicked(e) {
+ // See https://developer.mozilla.com/en-US/docs/Web/API/MouseEvent
+ var event = new MouseEvent('click', {
+ view: window,
+ bubbles: true,
+ cancelable: true,
+ });
+ downloadLink.dispatchEvent(event);
+}
+
+watEditor.on('change', onWatChange);
+jsEditor.on('change', onJsChange);
+selectEl.addEventListener('change', onSelectChanged);
+downloadEl.addEventListener('click', onDownloadClicked);
+
+for (var i = 0; i < examples.length; ++i) {
+ var example = examples[i];
+ var option = document.createElement('option');
+ option.textContent = example.name;
+ selectEl.appendChild(option);
+}
+selectEl.selectedIndex = 1;
+setExample(selectEl.selectedIndex);
+
+});
diff --git a/docs/demo/wat2wasm/examples.js b/docs/demo/wat2wasm/examples.js
new file mode 100644
index 00000000..02fe3116
--- /dev/null
+++ b/docs/demo/wat2wasm/examples.js
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2016 WebAssembly Community Group participants
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var examples = [
+ {
+ name: 'empty',
+ contents: '(module)',
+ js: '',
+ },
+
+ {
+ name: 'simple',
+ contents:
+`(module
+ (func (export "addTwo") (param i32 i32) (result i32)
+ local.get 0
+ local.get 1
+ i32.add))
+`,
+ js:
+`const wasmInstance =
+ new WebAssembly.Instance(wasmModule, {});
+const { addTwo } = wasmInstance.exports;
+for (let i = 0; i < 10; i++) {
+ console.log(addTwo(i, i));
+}
+`,
+ },
+
+ {
+ name: 'factorial',
+ contents:
+`(module
+ (func $fac (export "fac") (param f64) (result f64)
+ local.get 0
+ f64.const 1
+ f64.lt
+ if (result f64)
+ f64.const 1
+ else
+ local.get 0
+ local.get 0
+ f64.const 1
+ f64.sub
+ call $fac
+ f64.mul
+ end))
+`,
+ js: `const wasmInstance =
+ new WebAssembly.Instance(wasmModule, {});
+const { fac } = wasmInstance.exports;
+for (let i = 1; i <= 15; i++) {
+ console.log(fac(i));
+}
+`,
+ },
+
+ {
+ name: 'stuff',
+ contents:
+`(module
+ (import "foo" "bar" (func (param f32)))
+ (memory (data "hi"))
+ (type (func (param i32) (result i32)))
+ (start 1)
+ (table 0 1 anyfunc)
+ (func)
+ (func (type 1)
+ i32.const 42
+ drop)
+ (export "e" (func 1)))
+`,
+ js: `const wasmInstance = new WebAssembly.Instance(wasmModule, {
+ foo: {
+ bar() {}
+ },
+});
+`,
+ },
+
+ {
+ name: 'mutable globals',
+ contents:
+`(module
+ (import "env" "g" (global (mut i32)))
+ (func (export "f")
+ i32.const 100
+ global.set 0))
+`,
+ js:
+`
+ const g = new WebAssembly.Global({value: 'i32', mutable: true});
+ const wasmInstance = new WebAssembly.Instance(wasmModule, {env: {g}});
+ console.log('before: ' + g.value);
+ wasmInstance.exports.f();
+ console.log('after: ' + g.value);
+`
+ },
+
+ {
+ name: "saturating float-to-int",
+ contents:
+`(module
+ (func (export "f") (param f32) (result i32)
+ local.get 0
+ i32.trunc_sat_f32_s))`,
+ js:
+`const wasmInstance = new WebAssembly.Instance(wasmModule);
+const {f} = wasmInstance.exports;
+console.log(f(Infinity));`
+ },
+
+ {
+ name: "sign extension",
+ contents:
+`(module
+ (func (export "f") (param i32) (result i32)
+ local.get 0
+ i32.extend8_s))
+`,
+ js:
+`const wasmInstance = new WebAssembly.Instance(wasmModule);
+const {f} = wasmInstance.exports;
+console.log(f(0));
+console.log(f(127));
+console.log(f(128));
+console.log(f(255));`
+ },
+
+ {
+ name: "multi value",
+ contents:
+`(module
+ (func $swap (param i32 i32) (result i32 i32)
+ local.get 1
+ local.get 0)
+
+ (func (export "reverseSub") (param i32 i32) (result i32)
+ local.get 0
+ local.get 1
+ call $swap
+ i32.sub))
+`,
+ js:
+`const wasmInstance = new WebAssembly.Instance(wasmModule);
+const {reverseSub} = wasmInstance.exports;
+console.log(reverseSub(10, 3));`
+ },
+
+ {
+ name: "bulk memory",
+ contents:
+`(module
+ (memory (export "mem") 1)
+ (func (export "fill") (param i32 i32 i32)
+ local.get 0
+ local.get 1
+ local.get 2
+ memory.fill))
+`,
+ js:
+`const wasmInstance = new WebAssembly.Instance(wasmModule);
+const {fill, mem} = wasmInstance.exports;
+fill(0, 13, 5);
+fill(10, 77, 7);
+fill(20, 255, 1000);
+console.log(new Uint8Array(mem.buffer, 0, 50));
+`
+ }
+];
diff --git a/docs/demo/wat2wasm/index.html b/docs/demo/wat2wasm/index.html
new file mode 100644
index 00000000..7cfb854a
--- /dev/null
+++ b/docs/demo/wat2wasm/index.html
@@ -0,0 +1,94 @@
+<!--
+ Copyright 2016 WebAssembly Community Group participants
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+ <title>wat2wasm demo</title>
+ <link href="../third_party/codemirror/codemirror.css" rel="stylesheet">
+ <link href="../custom.css" rel="stylesheet">
+</head>
+<body>
+ <header>
+ <h1>wat2wasm demo</h1>
+ <p>WebAssembly has a
+ <a href="https://webassembly.github.io/spec/core/text/index.html">text format</a>
+ and a
+ <a href="https://webassembly.github.io/spec/core/binary/index.html">binary format</a>.
+ This demo converts from the text format to the binary format.
+ </p>
+ <p>
+ Enter WebAssembly text in the textarea on the left. The right side will
+ either show an error, or will show a log with a description of the
+ generated binary file.
+ </p>
+ <div>Enabled features:</div>
+ <div>
+ <input type="checkbox" id="exceptions"><label for="exceptions">exceptions</label>
+ <input type="checkbox" id="mutable_globals" checked><label for="mutable_globals">mutable globals</label>
+ <input type="checkbox" id="sat_float_to_int"><label for="sat_float_to_int">saturating float to int</label>
+ <input type="checkbox" id="sign_extension"><label for="sign_extension">sign extension</label>
+ </div>
+ <div>
+ <input type="checkbox" id="simd"><label for="simd">simd</label>
+ <input type="checkbox" id="threads"><label for="threads">threads</label>
+ <input type="checkbox" id="multi_value"><label for="multi_value">multi value</label>
+ <input type="checkbox" id="tail_call"><label for="tail_call">tail call</label>
+ <input type="checkbox" id="bulk_memory"><label for="bulk_memory">bulk memory</label>
+ <input type="checkbox" id="reference_types"><label for="reference_types">reference types</label>
+ </div>
+ </header>
+ <main>
+ <div id="split-grid" class="split-grid">
+ <div id="top-row" class="split-vertical">
+ <div id="top-left" class="split split-horizontal">
+ <div class="toolbar">
+ WAT
+ <div class="right">
+ <label>example:</label>
+ <select id="select" class="form-select"></select>
+ <button class="btn disabled" type="button" id="download">Download</button>
+ <a id="downloadLink" download="test.wasm" class="hidden"></a>
+ </div>
+ </div>
+ </div>
+ <div id="top-right" class="split split-horizontal">
+ <pre id="output" class="output"></pre>
+ <div class="toolbar">BUILD LOG</div>
+ </div>
+ </div>
+ <div id="bottom-row" class="split-vertical">
+ <div id="bottom-left" class="split split-horizontal">
+ <div class="toolbar">JS</div>
+ </div>
+ <div id="bottom-right" class="split split-horizontal">
+ <pre id="js_log" class="output"></pre>
+ <div class="toolbar">JS LOG</div>
+ </div>
+ </div>
+ </div>
+ </main>
+ <script src="../third_party/split/split.min.js"></script>
+ <script src="../third_party/codemirror/codemirror.js"></script>
+ <script src="../third_party/codemirror/simple-mode.js"></script>
+ <script src="../third_party/codemirror/javascript.js"></script>
+ <script src="../wast-mode.js"></script>
+ <script src="../libwabt.js"></script>
+ <script src="examples.js"></script>
+ <script src="demo.js"></script>
+</body>
+</html>